mirror of https://github.com/ARMmbed/mbed-os.git
				
				
				
			Merge branch 'Lora_compliance' of ssh://github.com/AnttiKauppila/mbed-os into rollup-b.1
						commit
						8cbd310858
					
				| 
						 | 
				
			
			@ -215,6 +215,10 @@ void exp_cb()
 | 
			
		|||
TEST_F(Test_LoRaMac, set_device_class)
 | 
			
		||||
{
 | 
			
		||||
    object->set_device_class(CLASS_B, exp_cb);
 | 
			
		||||
 | 
			
		||||
    my_phy phy;
 | 
			
		||||
    object->bind_phy(phy);
 | 
			
		||||
    object->set_device_class(CLASS_C, exp_cb);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(Test_LoRaMac, setup_link_check_request)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -310,6 +310,7 @@ int16_t LoRaWANStack::handle_tx(const uint8_t port, const uint8_t *data,
 | 
			
		|||
    if (_link_check_requested) {
 | 
			
		||||
        _loramac.setup_link_check_request();
 | 
			
		||||
    }
 | 
			
		||||
    _qos_cnt = 1;
 | 
			
		||||
 | 
			
		||||
    lorawan_status_t status;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -80,7 +80,8 @@ LoRaMac::LoRaMac()
 | 
			
		|||
      _can_cancel_tx(true),
 | 
			
		||||
      _continuous_rx2_window_open(false),
 | 
			
		||||
      _device_class(CLASS_A),
 | 
			
		||||
      _prev_qos_level(LORAWAN_DEFAULT_QOS)
 | 
			
		||||
      _prev_qos_level(LORAWAN_DEFAULT_QOS),
 | 
			
		||||
      _demod_ongoing(false)
 | 
			
		||||
{
 | 
			
		||||
    memset(&_params, 0, sizeof(_params));
 | 
			
		||||
    _params.keys.dev_eui = NULL;
 | 
			
		||||
| 
						 | 
				
			
			@ -99,7 +100,6 @@ LoRaMac::LoRaMac()
 | 
			
		|||
    _params.rx_buffer_len = 0;
 | 
			
		||||
    _params.ul_frame_counter = 0;
 | 
			
		||||
    _params.dl_frame_counter = 0;
 | 
			
		||||
    _params.is_ul_frame_counter_fixed = false;
 | 
			
		||||
    _params.is_rx_window_enabled = true;
 | 
			
		||||
    _params.adr_ack_counter = 0;
 | 
			
		||||
    _params.is_node_ack_requested = false;
 | 
			
		||||
| 
						 | 
				
			
			@ -166,21 +166,17 @@ void LoRaMac::post_process_mcps_req()
 | 
			
		|||
            _params.is_node_ack_requested = false;
 | 
			
		||||
            _mcps_confirmation.ack_received = false;
 | 
			
		||||
            _mcps_indication.is_ack_recvd = false;
 | 
			
		||||
            if (_params.is_ul_frame_counter_fixed == false) {
 | 
			
		||||
                _params.ul_frame_counter++;
 | 
			
		||||
                _params.adr_ack_counter++;
 | 
			
		||||
            }
 | 
			
		||||
            _params.ul_frame_counter++;
 | 
			
		||||
            _params.adr_ack_counter++;
 | 
			
		||||
        } else {
 | 
			
		||||
            _mcps_confirmation.status = LORAMAC_EVENT_INFO_STATUS_ERROR;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        //UNCONFIRMED or PROPRIETARY
 | 
			
		||||
        if (_params.is_ul_frame_counter_fixed == false) {
 | 
			
		||||
            _params.ul_frame_counter++;
 | 
			
		||||
            _params.adr_ack_counter++;
 | 
			
		||||
            if (_params.sys_params.nb_trans > 1) {
 | 
			
		||||
                _mcps_confirmation.nb_retries = _params.ul_nb_rep_counter;
 | 
			
		||||
            }
 | 
			
		||||
        _params.ul_frame_counter++;
 | 
			
		||||
        _params.adr_ack_counter++;
 | 
			
		||||
        if (_params.sys_params.nb_trans > 1) {
 | 
			
		||||
            _mcps_confirmation.nb_retries = _params.ul_nb_rep_counter;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -650,8 +646,8 @@ void LoRaMac::on_radio_tx_done(lorawan_time_t timestamp)
 | 
			
		|||
 | 
			
		||||
    if ((_mcps_confirmation.req_type == MCPS_UNCONFIRMED)
 | 
			
		||||
            && (_params.sys_params.nb_trans > 1)) {
 | 
			
		||||
        //MBED_ASSERT(_params.ul_nb_rep_counter <= _params.sys_params.nb_trans);
 | 
			
		||||
        _params.ul_nb_rep_counter++;
 | 
			
		||||
        MBED_ASSERT(_params.ul_nb_rep_counter <= _params.sys_params.nb_trans);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (_params.is_rx_window_enabled == true) {
 | 
			
		||||
| 
						 | 
				
			
			@ -696,6 +692,7 @@ void LoRaMac::on_radio_tx_done(lorawan_time_t timestamp)
 | 
			
		|||
void LoRaMac::on_radio_rx_done(const uint8_t *const payload, uint16_t size,
 | 
			
		||||
                               int16_t rssi, int8_t snr)
 | 
			
		||||
{
 | 
			
		||||
    _demod_ongoing = false;
 | 
			
		||||
    if (_device_class == CLASS_C && !_continuous_rx2_window_open) {
 | 
			
		||||
        _lora_time.stop(_rx2_closure_timer_for_class_c);
 | 
			
		||||
        open_rx2_window();
 | 
			
		||||
| 
						 | 
				
			
			@ -765,6 +762,7 @@ void LoRaMac::on_radio_tx_timeout(void)
 | 
			
		|||
 | 
			
		||||
void LoRaMac::on_radio_rx_timeout(bool is_timeout)
 | 
			
		||||
{
 | 
			
		||||
    _demod_ongoing = false;
 | 
			
		||||
    if (_device_class == CLASS_A) {
 | 
			
		||||
        _lora_phy->put_radio_to_sleep();
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -887,6 +885,7 @@ void LoRaMac::on_backoff_timer_expiry(void)
 | 
			
		|||
void LoRaMac::open_rx1_window(void)
 | 
			
		||||
{
 | 
			
		||||
    Lock lock(*this);
 | 
			
		||||
    _demod_ongoing = true;
 | 
			
		||||
    _continuous_rx2_window_open = false;
 | 
			
		||||
    _lora_time.stop(_params.timers.rx_window1_timer);
 | 
			
		||||
    _params.rx_slot = RX_SLOT_WIN_1;
 | 
			
		||||
| 
						 | 
				
			
			@ -912,6 +911,10 @@ void LoRaMac::open_rx1_window(void)
 | 
			
		|||
 | 
			
		||||
void LoRaMac::open_rx2_window()
 | 
			
		||||
{
 | 
			
		||||
    if (_demod_ongoing) {
 | 
			
		||||
        tr_info("RX1 Demodulation ongoing, skip RX2 window opening");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    Lock lock(*this);
 | 
			
		||||
    _continuous_rx2_window_open = true;
 | 
			
		||||
    _lora_time.stop(_params.timers.rx_window2_timer);
 | 
			
		||||
| 
						 | 
				
			
			@ -1243,6 +1246,8 @@ void LoRaMac::reset_mac_parameters(void)
 | 
			
		|||
    }
 | 
			
		||||
    _params.channel = 0;
 | 
			
		||||
    _params.last_channel_idx = _params.channel;
 | 
			
		||||
 | 
			
		||||
    _demod_ongoing = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint8_t LoRaMac::get_default_tx_datarate()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -696,6 +696,8 @@ private:
 | 
			
		|||
    device_class_t _device_class;
 | 
			
		||||
 | 
			
		||||
    uint8_t _prev_qos_level;
 | 
			
		||||
 | 
			
		||||
    bool _demod_ongoing;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // MBED_LORAWAN_MAC_H__
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1127,12 +1127,6 @@ typedef struct {
 | 
			
		|||
     */
 | 
			
		||||
    bool is_repeater_supported;
 | 
			
		||||
 | 
			
		||||
    /*!
 | 
			
		||||
     * IsPacketCounterFixed enables the MIC field tests by fixing the
 | 
			
		||||
     * ul_frame_counter value
 | 
			
		||||
     */
 | 
			
		||||
    bool is_ul_frame_counter_fixed;
 | 
			
		||||
 | 
			
		||||
    /*!
 | 
			
		||||
     * Used for test purposes. Disables the opening of the reception windows.
 | 
			
		||||
     */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue