[FL-1976] BLE HID (#852)
* ble: prototype ble hid * ble: add HID service and characteristics * debug tools: add ble keyboard app * ble: change appearance * ble: working keyboard * bt: introduce furi-hal-bt-hid * bt: restart hid service on each keyboard app enter * bt: introduce switch profile * bt: add profile to ble glue * bt: working profile switch * bt: introduce bt serial profile, rework API * bt: rewotk HID profile * bt: rework gap with profile configuration * bt: move change profile routine to furi hal bt * bt: change switch profile API to blocking * bt: move battery update to furi hal bt * bt: cleanup * bt: add support for f6 target * bt: update documentation * bt: clean up code * bt: remove NO OUTPUT setting * bt: set numeric comparison pairing in BLE HID * bt: support f6 target * bt: set mac address in profile configuration * bt: set advertise name in profile config * bt: rework with furi thread * bt: support f6 target * bt: clear hci command buffer on core2 restart * bt: correct thread kill sequence * bt: fix freertos functions calls * bt: add some enterprise delays fo correct memory free * bt: code cleanup * bt: change terminate -> stop * bt: fix memory leakage Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
		
							
								
								
									
										34
									
								
								firmware/targets/furi-hal-include/furi-hal-bt-hid.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								firmware/targets/furi-hal-include/furi-hal-bt-hid.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| #pragma once | ||||
|  | ||||
| #include <stdint.h> | ||||
| #include <stdbool.h> | ||||
|  | ||||
| /** Start Hid Keyboard Profile | ||||
|  */ | ||||
| void furi_hal_bt_hid_start(); | ||||
|  | ||||
| /** Stop Hid Keyboard Profile | ||||
|  */ | ||||
| void furi_hal_bt_hid_stop(); | ||||
|  | ||||
| /** Press key button | ||||
|  * | ||||
|  * @param button    button code from HID specification | ||||
|  * | ||||
|  * @return          true on success | ||||
|  */ | ||||
| bool furi_hal_bt_hid_kb_press(uint16_t button); | ||||
|  | ||||
| /** Release key button | ||||
|  * | ||||
|  * @param button    button code from HID specification | ||||
|  * | ||||
|  * @return          true on success | ||||
|  */ | ||||
| bool furi_hal_bt_hid_kb_release(uint16_t button); | ||||
|  | ||||
| /** Release all key buttons | ||||
|  * | ||||
|  * @return          true on success | ||||
|  */ | ||||
| bool furi_hal_bt_hid_kb_release_all(); | ||||
							
								
								
									
										37
									
								
								firmware/targets/furi-hal-include/furi-hal-bt-serial.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								firmware/targets/furi-hal-include/furi-hal-bt-serial.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | ||||
| #pragma once | ||||
|  | ||||
| #include "serial_service.h" | ||||
|  | ||||
| #define FURI_HAL_BT_SERIAL_PACKET_SIZE_MAX SERIAL_SVC_DATA_LEN_MAX | ||||
|  | ||||
| /** Serial service callback type */ | ||||
| typedef SerialServiceEventCallback FuriHalBtSerialCallback; | ||||
|  | ||||
| /** Start Serial Profile | ||||
|  */ | ||||
| void furi_hal_bt_serial_start(); | ||||
|  | ||||
| /** Stop Serial Profile | ||||
|  */ | ||||
| void furi_hal_bt_serial_stop(); | ||||
|  | ||||
| /** Set Serial service events callback | ||||
|  * | ||||
|  * @param buffer_size   Applicaition buffer size | ||||
|  * @param calback       FuriHalBtSerialCallback instance | ||||
|  * @param context       pointer to context | ||||
|  */ | ||||
| void furi_hal_bt_serial_set_event_callback(uint16_t buff_size, FuriHalBtSerialCallback callback, void* context); | ||||
|  | ||||
| /** Notify that application buffer is empty | ||||
|  */ | ||||
| void furi_hal_bt_serial_notify_buffer_is_empty(); | ||||
|  | ||||
| /** Send data through BLE | ||||
|  * | ||||
|  * @param data  data buffer | ||||
|  * @param size  data buffer size | ||||
|  * | ||||
|  * @return      true on success | ||||
|  */ | ||||
| bool furi_hal_bt_serial_tx(uint8_t* data, uint16_t size); | ||||
| @@ -12,13 +12,20 @@ | ||||
| #include <ble_glue.h> | ||||
| #include <ble_app.h> | ||||
|  | ||||
|  | ||||
| #define FURI_HAL_BT_PACKET_SIZE_MAX SERIAL_SVC_DATA_LEN_MAX | ||||
| #include "furi-hal-bt-serial.h" | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| typedef enum { | ||||
|     FuriHalBtProfileSerial, | ||||
|     FuriHalBtProfileHidKeyboard, | ||||
|  | ||||
|     // Keep last for Profiles number calculation | ||||
|     FuriHalBtProfileNumber, | ||||
| } FuriHalBtProfile; | ||||
|  | ||||
| /** Initialize | ||||
|  */ | ||||
| void furi_hal_bt_init(); | ||||
| @@ -29,17 +36,32 @@ void furi_hal_bt_lock_core2(); | ||||
| /** Lock core2 state transition */ | ||||
| void furi_hal_bt_unlock_core2(); | ||||
|  | ||||
| /** Start 2nd core and BLE stack | ||||
|  * | ||||
|  * @return true on success | ||||
|  */ | ||||
| bool furi_hal_bt_start_core2(); | ||||
|  | ||||
| /** Start BLE app | ||||
|  * @param event_cb - BleEventCallback instance | ||||
|  * @param context - pointer to context | ||||
|  * | ||||
|  * @param profile   FuriHalBtProfile instance | ||||
|  * @param event_cb  BleEventCallback instance | ||||
|  * @param context   pointer to context | ||||
|  * | ||||
|  * @return          true on success | ||||
| */ | ||||
| bool furi_hal_bt_init_app(BleEventCallback event_cb, void* context); | ||||
| bool furi_hal_bt_start_app(FuriHalBtProfile profile, BleEventCallback event_cb, void* context); | ||||
|  | ||||
| /** Change BLE app | ||||
|  * Restarts 2nd core | ||||
|  * | ||||
|  * @param profile   FuriHalBtProfile instance | ||||
|  * @param event_cb  BleEventCallback instance | ||||
|  * @param context   pointer to context | ||||
|  * | ||||
|  * @return          true on success | ||||
| */ | ||||
| bool furi_hal_bt_change_app(FuriHalBtProfile profile, BleEventCallback event_cb, void* context); | ||||
|  | ||||
| /** Update battery level | ||||
|  * | ||||
|  * @param battery_level battery level | ||||
|  */ | ||||
| void furi_hal_bt_update_battery_level(uint8_t battery_level); | ||||
|  | ||||
| /** Start advertising | ||||
|  */ | ||||
| @@ -91,22 +113,6 @@ void furi_hal_bt_nvm_sram_sem_release(); | ||||
|  */ | ||||
| void furi_hal_bt_set_key_storage_change_callback(BleGlueKeyStorageChangedCallback callback, void* context); | ||||
|  | ||||
| /** Set data event callbacks | ||||
|  * @param on_received_cb - SerialSvcDataReceivedCallback instance | ||||
|  * @param on_sent_cb - SerialSvcDataSentCallback instance | ||||
|  * @param context - pointer to context | ||||
|  */ | ||||
| void furi_hal_bt_set_data_event_callbacks(uint16_t buff_size, SerialSvcDataReceivedCallback on_received_cb, SerialSvcDataSentCallback on_sent_cb, void* context); | ||||
|  | ||||
| /** Notify that buffer is empty */ | ||||
| void furi_hal_bt_notify_buffer_is_empty(); | ||||
|  | ||||
| /** Send data through BLE | ||||
|  * @param data - data buffer | ||||
|  * @param size - data buffer size | ||||
|  */ | ||||
| bool furi_hal_bt_tx(uint8_t* data, uint16_t size); | ||||
|  | ||||
| /** Start ble tone tx at given channel and power | ||||
|  * | ||||
|  * @param[in]  channel  The channel | ||||
|   | ||||
		Reference in New Issue
	
	Block a user