diff --git a/bcl/inc/bc_radio.h b/bcl/inc/bc_radio.h index 407a055..6ad413b 100644 --- a/bcl/inc/bc_radio.h +++ b/bcl/inc/bc_radio.h @@ -170,6 +170,8 @@ bool bc_radio_send_sub_data(uint64_t *id, uint8_t order, void *payload, size_t s void bc_radio_set_rx_timeout_for_sleeping_node(bc_tick_t timeout); +float bc_radio_get_rssi(); + uint8_t *bc_radio_id_to_buffer(uint64_t *id, uint8_t *buffer); uint8_t *bc_radio_bool_to_buffer(bool *value, uint8_t *buffer); uint8_t *bc_radio_int_to_buffer(int *value, uint8_t *buffer); @@ -187,6 +189,7 @@ uint8_t *bc_radio_data_from_buffer(uint8_t *buffer, void *data, size_t length); void bc_radio_init_pairing_button(); + //! @} #endif // _BC_RADIO_H diff --git a/bcl/src/bc_radio.c b/bcl/src/bc_radio.c index 360f0bf..e8d7c58 100644 --- a/bcl/src/bc_radio.c +++ b/bcl/src/bc_radio.c @@ -7,6 +7,7 @@ #include #include #include +#include "SPIRIT_Qi.h" #define _BC_RADIO_SCAN_CACHE_LENGTH 4 #define _BC_RADIO_ACK_TIMEOUT 100 @@ -81,6 +82,8 @@ static struct int subs_length; int sent_subs; + float rssi; + } _bc_radio; static void _bc_radio_task(void *param); @@ -693,6 +696,8 @@ static void _bc_radio_spirit1_event_handler(bc_spirit1_event_t event, void *even size_t length = bc_spirit1_get_rx_length(); uint16_t message_id; + _bc_radio.rssi = SpiritQiGetRssidBm(); + if ((_bc_radio.rx_timeout != BC_TICK_INFINITY) && (bc_tick_get() >= _bc_radio.rx_timeout)) { if (_bc_radio.state == BC_RADIO_STATE_TX_WAIT_ACK) @@ -1356,3 +1361,8 @@ void bc_radio_init_pairing_button(const char *firmware, const char *version) bc_led_init(&led, BC_GPIO_LED, false, 0); } + +float bc_radio_get_rssi() +{ + return _bc_radio.rssi; +} diff --git a/bcl/src/bc_radio_pub.c b/bcl/src/bc_radio_pub.c index 21c84a1..16308e5 100644 --- a/bcl/src/bc_radio_pub.c +++ b/bcl/src/bc_radio_pub.c @@ -1,4 +1,5 @@ #include +#include "usb_talk.h" #define _BC_RADIO_PUB_BUFFER_SIZE_ACCELERATION (1 + sizeof(float) + sizeof(float) + sizeof(float)) @@ -498,4 +499,7 @@ void bc_radio_pub_decode(uint64_t *id, uint8_t *buffer, size_t length) bc_radio_pub_on_value_int(id, buffer[1], pvalue); } + + float rssi = bc_radio_get_rssi(); + usb_talk_publish_float(id, "rssi", &rssi); }