mirror of https://github.com/ARMmbed/mbed-os.git
Merge pull request #6875 from kivaisan/fix_batterylevel_callback_v2
Lora: Fix battery_level callbackpull/6480/head
commit
6db9a8bb62
|
@ -134,6 +134,7 @@ lorawan_status_t LoRaWANStack::set_lora_callbacks(const lorawan_app_callbacks_t
|
|||
|
||||
if (callbacks->battery_level) {
|
||||
_callbacks.battery_level = callbacks->battery_level;
|
||||
_loramac.set_batterylevel_callback(callbacks->battery_level);
|
||||
}
|
||||
|
||||
return LORAWAN_STATUS_OK;
|
||||
|
|
|
@ -661,6 +661,11 @@ void LoRaMac::handle_data_frame(const uint8_t* const payload,
|
|||
_params.ack_timeout_retry_counter, _params.max_ack_timeout_retries );
|
||||
}
|
||||
|
||||
void LoRaMac::set_batterylevel_callback(mbed::Callback<uint8_t(void)> battery_level)
|
||||
{
|
||||
_mac_commands.set_batterylevel_callback(battery_level);
|
||||
}
|
||||
|
||||
void LoRaMac::on_radio_rx_done(const uint8_t* const payload, uint16_t size,
|
||||
int16_t rssi, int8_t snr)
|
||||
{
|
||||
|
|
|
@ -437,6 +437,11 @@ public:
|
|||
void post_process_mlme_request(void);
|
||||
void post_process_mlme_ind(void);
|
||||
|
||||
/**
|
||||
* Set battery level query callback
|
||||
*/
|
||||
void set_batterylevel_callback(mbed::Callback<uint8_t(void)> battery_level);
|
||||
|
||||
/**
|
||||
* These locks trample through to the upper layers and make
|
||||
* the stack thread safe.
|
||||
|
|
|
@ -233,10 +233,11 @@ lorawan_status_t LoRaMacCommand::process_mac_commands(const uint8_t *payload, ui
|
|||
}
|
||||
break;
|
||||
case SRV_MAC_DEV_STATUS_REQ: {
|
||||
uint8_t batteryLevel = BAT_LEVEL_NO_MEASURE;
|
||||
// we don't have a mechanism at the moment to measure
|
||||
// battery levels
|
||||
ret_value = add_dev_status_ans(batteryLevel, snr & 0x3F);
|
||||
uint8_t battery_level = BAT_LEVEL_NO_MEASURE;
|
||||
if (_battery_level_cb) {
|
||||
battery_level = _battery_level_cb();
|
||||
}
|
||||
ret_value = add_dev_status_ans(battery_level, snr & 0x3F);
|
||||
break;
|
||||
}
|
||||
case SRV_MAC_NEW_CHANNEL_REQ: {
|
||||
|
@ -329,6 +330,11 @@ int32_t LoRaMacCommand::cmd_buffer_remaining() const
|
|||
return sizeof(mac_cmd_buffer) - mac_cmd_buf_idx_to_repeat - mac_cmd_buf_idx;
|
||||
}
|
||||
|
||||
void LoRaMacCommand::set_batterylevel_callback(mbed::Callback<uint8_t(void)> battery_level)
|
||||
{
|
||||
_battery_level_cb = battery_level;
|
||||
}
|
||||
|
||||
lorawan_status_t LoRaMacCommand::add_link_check_req()
|
||||
{
|
||||
lorawan_status_t ret = LORAWAN_STATUS_LENGTH_ERROR;
|
||||
|
|
|
@ -147,6 +147,12 @@ public:
|
|||
*/
|
||||
lorawan_status_t add_link_check_req();
|
||||
|
||||
/**
|
||||
* @brief Set battery level query callback method
|
||||
* If callback is not set, BAT_LEVEL_NO_MEASURE is returned.
|
||||
*/
|
||||
void set_batterylevel_callback(mbed::Callback<uint8_t(void)> battery_level);
|
||||
|
||||
private:
|
||||
/**
|
||||
* @brief Get the remaining size of the MAC command buffer
|
||||
|
@ -261,6 +267,8 @@ private:
|
|||
* Buffer containing the MAC layer commands which must be repeated
|
||||
*/
|
||||
uint8_t mac_cmd_buffer_to_repeat[LORA_MAC_COMMAND_MAX_LENGTH];
|
||||
|
||||
mbed::Callback<uint8_t(void)> _battery_level_cb;
|
||||
};
|
||||
|
||||
#endif //__LORAMACCOMMAND_H__
|
||||
|
|
|
@ -274,8 +274,17 @@ typedef struct {
|
|||
* Optional
|
||||
*/
|
||||
mbed::Callback<void(uint8_t, uint8_t)> link_check_resp;
|
||||
|
||||
/**
|
||||
* Battery level return value must follow the specification
|
||||
* for DevStatusAns MAC command:
|
||||
*
|
||||
* 0 The end-device is connected to an external power source
|
||||
* 1 - 254 The battery level, 1 being at minimum and 254 being at maximum
|
||||
* 255 The end-device was not able to measure the battery level.
|
||||
*/
|
||||
mbed::Callback<uint8_t(void)> battery_level;
|
||||
} lorawan_app_callbacks_t;
|
||||
} lorawan_app_callbacks_t;
|
||||
|
||||
/**
|
||||
* DO NOT MODIFY, WILL BREAK THE API!
|
||||
|
|
Loading…
Reference in New Issue