Custom BT adv data API

This commit is contained in:
Willy-JL
2023-09-03 01:40:30 +02:00
parent 8f3a8ad730
commit 87124a1d2c
5 changed files with 40 additions and 12 deletions

View File

@@ -1117,6 +1117,7 @@ Function,+,furi_hal_bt_serial_set_rpc_status,void,FuriHalBtSerialRpcStatus
Function,+,furi_hal_bt_serial_start,void,
Function,+,furi_hal_bt_serial_stop,void,
Function,+,furi_hal_bt_serial_tx,_Bool,"uint8_t*, uint16_t"
Function,+,furi_hal_bt_set_custom_adv_data,void,"const uint8_t*, size_t"
Function,+,furi_hal_bt_set_key_storage_change_callback,void,"BleGlueKeyStorageChangedCallback, void*"
Function,+,furi_hal_bt_set_profile_adv_name,void,"FuriHalBtProfile, const char[( 18 + 1 )]"
Function,+,furi_hal_bt_set_profile_mac_addr,void,"FuriHalBtProfile, const uint8_t[( 6 )]"
@@ -1704,6 +1705,7 @@ Function,-,gammaf_r,float,"float, int*"
Function,-,gap_get_remote_conn_rssi,uint32_t,int8_t*
Function,-,gap_get_state,GapState,
Function,-,gap_init,_Bool,"GapConfig*, GapEventCallback, void*"
Function,-,gap_set_custom_adv_data,void,"size_t, const uint8_t*"
Function,-,gap_start_advertising,void,
Function,-,gap_stop_advertising,void,
Function,-,gap_thread_stop,void,
1 entry status name type params
1117 Function + furi_hal_bt_serial_start void
1118 Function + furi_hal_bt_serial_stop void
1119 Function + furi_hal_bt_serial_tx _Bool uint8_t*, uint16_t
1120 Function + furi_hal_bt_set_custom_adv_data void const uint8_t*, size_t
1121 Function + furi_hal_bt_set_key_storage_change_callback void BleGlueKeyStorageChangedCallback, void*
1122 Function + furi_hal_bt_set_profile_adv_name void FuriHalBtProfile, const char[( 18 + 1 )]
1123 Function + furi_hal_bt_set_profile_mac_addr void FuriHalBtProfile, const uint8_t[( 6 )]
1705 Function - gap_get_remote_conn_rssi uint32_t int8_t*
1706 Function - gap_get_state GapState
1707 Function - gap_init _Bool GapConfig*, GapEventCallback, void*
1708 Function - gap_set_custom_adv_data void size_t, const uint8_t*
1709 Function - gap_start_advertising void
1710 Function - gap_stop_advertising void
1711 Function - gap_thread_stop void

View File

@@ -37,6 +37,9 @@ typedef struct {
FuriThread* thread;
FuriMessageQueue* command_queue;
bool enable_adv;
size_t custom_adv_len;
const uint8_t* custom_adv_data;
} Gap;
typedef enum {
@@ -431,20 +434,28 @@ static void gap_advertise_start(GapState new_state) {
}
}
// Configure advertising
status = aci_gap_set_discoverable(
ADV_IND,
min_interval,
max_interval,
CFG_IDENTITY_ADDRESS,
0,
strlen(gap->service.adv_name),
(uint8_t*)gap->service.adv_name,
gap->service.adv_svc_uuid_len,
gap->service.adv_svc_uuid,
0,
0);
if(gap->custom_adv_data) {
status = aci_gap_set_discoverable(
ADV_IND, min_interval, max_interval, CFG_IDENTITY_ADDRESS, 0, 0, NULL, 0, NULL, 0, 0);
status = aci_gap_update_adv_data(gap->custom_adv_len, gap->custom_adv_data);
} else {
status = aci_gap_set_discoverable(
ADV_IND,
min_interval,
max_interval,
CFG_IDENTITY_ADDRESS,
0,
strlen(gap->service.adv_name),
(uint8_t*)gap->service.adv_name,
gap->service.adv_svc_uuid_len,
gap->service.adv_svc_uuid,
0,
0);
}
if(status) {
FURI_LOG_E(TAG, "set_discoverable failed %d", status);
} else {
FURI_LOG_D(TAG, "set_discoverable success");
}
gap->state = new_state;
GapEvent event = {.type = GapEventTypeStartAdvertising};
@@ -560,6 +571,11 @@ uint32_t gap_get_remote_conn_rssi(int8_t* rssi) {
return 0;
}
void gap_set_custom_adv_data(size_t adv_len, const uint8_t* adv_data) {
gap->custom_adv_len = adv_len;
gap->custom_adv_data = adv_data;
}
GapState gap_get_state() {
GapState state;
if(gap) {

View File

@@ -83,6 +83,8 @@ void gap_thread_stop();
uint32_t gap_get_remote_conn_rssi(int8_t* rssi);
void gap_set_custom_adv_data(size_t adv_len, const uint8_t* adv_data);
#ifdef __cplusplus
}
#endif

View File

@@ -483,6 +483,12 @@ uint32_t furi_hal_bt_get_conn_rssi(uint8_t* rssi) {
return since;
}
void furi_hal_bt_set_custom_adv_data(const uint8_t* adv_data, size_t adv_len) {
gap_set_custom_adv_data(adv_len, adv_data);
furi_hal_bt_stop_advertising();
furi_hal_bt_start_advertising();
}
void furi_hal_bt_reverse_mac_addr(uint8_t mac_addr[GAP_MAC_ADDR_SIZE]) {
uint8_t tmp;
for(size_t i = 0; i < GAP_MAC_ADDR_SIZE / 2; i++) {

View File

@@ -251,6 +251,8 @@ const uint8_t* furi_hal_bt_get_profile_mac_addr(FuriHalBtProfile profile);
uint32_t furi_hal_bt_get_conn_rssi(uint8_t* rssi);
void furi_hal_bt_set_custom_adv_data(const uint8_t* adv_data, size_t adv_len);
void furi_hal_bt_set_profile_pairing_method(FuriHalBtProfile profile, GapPairing pairing_method);
GapPairing furi_hal_bt_get_profile_pairing_method(FuriHalBtProfile profile);