wm_bt_def.h 55 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893
  1. /**
  2. * @file wm_bt_def.h
  3. *
  4. * @brief Bluetooth Define
  5. *
  6. * @author WinnerMicro
  7. *
  8. * Copyright (c) 2020 Winner Microelectronics Co., Ltd.
  9. */
  10. #ifndef WM_BT_DEF_H
  11. #define WM_BT_DEF_H
  12. /** Bluetooth Error Status */
  13. typedef enum
  14. {
  15. TLS_BT_STATUS_SUCCESS, /**< success */
  16. TLS_BT_STATUS_FAIL,
  17. TLS_BT_STATUS_NOT_READY,
  18. TLS_BT_STATUS_NOMEM, /**< alloc memory failed */
  19. TLS_BT_STATUS_BUSY,
  20. TLS_BT_STATUS_DONE, /**< request already completed */
  21. TLS_BT_STATUS_UNSUPPORTED,
  22. TLS_BT_STATUS_PARM_INVALID,
  23. TLS_BT_STATUS_UNHANDLED,
  24. TLS_BT_STATUS_AUTH_FAILURE,
  25. TLS_BT_STATUS_RMT_DEV_DOWN,
  26. TLS_BT_STATUS_AUTH_REJECTED,
  27. TLS_BT_STATUS_THREAD_FAILED, /**< create internal thread failed */
  28. TLS_BT_STATUS_INTERNAL_ERROR, /**< controller stack internal error */
  29. TLS_BT_STATUS_CTRL_ENABLE_FAILED,
  30. TLS_BT_STATUS_HOST_ENABLE_FAILED,
  31. TLS_BT_STATUS_CTRL_DISABLE_FAILED,
  32. TLS_BT_STATUS_HOST_DISABLE_FAILED,
  33. } tls_bt_status_t;
  34. typedef enum
  35. {
  36. TLS_BT_CTRL_IDLE = (1<<0),
  37. TLS_BT_CTRL_ENABLED = (1<<1),
  38. TLS_BT_CTRL_SLEEPING = (1<<2),
  39. TLS_BT_CTRL_BLE_ROLE_MASTER = (1<<3),
  40. TLS_BT_CTRL_BLE_ROLE_SLAVE = (1<<4),
  41. TLS_BT_CTRL_BLE_ROLE_END = (1<<5),
  42. TLS_BT_CTRL_BLE_STATE_IDLE = (1<<6),
  43. TLS_BT_CTRL_BLE_STATE_ADVERTISING = (1<<7),
  44. TLS_BT_CTRL_BLE_STATE_SCANNING = (1<<8),
  45. TLS_BT_CTRL_BLE_STATE_INITIATING = (1<<9),
  46. TLS_BT_CTRL_BLE_STATE_STOPPING = (1<<10),
  47. TLS_BT_CTRL_BLE_STATE_TESTING = (1<<11),
  48. } tls_bt_ctrl_status_t;
  49. /** Bluetooth Adapter State */
  50. typedef enum
  51. {
  52. WM_BT_STATE_OFF,
  53. WM_BT_STATE_ON
  54. } tls_bt_state_t;
  55. /** bluetooth host statck events */
  56. typedef enum
  57. {
  58. WM_BT_ADAPTER_STATE_CHG_EVT = (0x01<<0),
  59. WM_BT_ADAPTER_PROP_CHG_EVT = (0x01<<1),
  60. WM_BT_RMT_DEVICE_PROP_EVT = (0x01<<2),
  61. WM_BT_DEVICE_FOUND_EVT = (0x01<<3),
  62. WM_BT_DISCOVERY_STATE_CHG_EVT=(0x01<<4),
  63. WM_BT_REQUEST_EVT = (0x01<<5),
  64. WM_BT_SSP_REQUEST_EVT = (0x01<<6),
  65. WM_BT_PIN_REQUEST_EVT = (0x01<<7),
  66. WM_BT_BOND_STATE_CHG_EVT = (0x01<<8),
  67. WM_BT_ACL_STATE_CHG_EVT = (0x01<<9),
  68. WM_BT_ENERGY_INFO_EVT = (0x01<<10),
  69. WM_BT_LE_TEST_EVT = (0x01<<11),
  70. } tls_bt_host_evt_t;
  71. typedef struct
  72. {
  73. tls_bt_state_t status; /**< bluetooth adapter state */
  74. } tls_bt_adapter_state_change_msg_t;
  75. /** Bluetooth Adapter and Remote Device property types */
  76. typedef enum
  77. {
  78. /* Properties common to both adapter and remote device */
  79. /**
  80. * Description - Bluetooth Device Name
  81. * Access mode - Adapter name can be GET/SET. Remote device can be GET
  82. * Data type - bt_bdname_t
  83. */
  84. WM_BT_PROPERTY_BDNAME = 0x1,
  85. /**
  86. * Description - Bluetooth Device Address
  87. * Access mode - Only GET.
  88. * Data type - bt_bdaddr_t
  89. */
  90. WM_BT_PROPERTY_BDADDR,
  91. /**
  92. * Description - Bluetooth Service 128-bit UUIDs
  93. * Access mode - Only GET.
  94. * Data type - Array of bt_uuid_t (Array size inferred from property length).
  95. */
  96. WM_BT_PROPERTY_UUIDS,
  97. /**
  98. * Description - Bluetooth Class of Device as found in Assigned Numbers
  99. * Access mode - Only GET.
  100. * Data type - uint32_t.
  101. */
  102. WM_BT_PROPERTY_CLASS_OF_DEVICE,
  103. /**
  104. * Description - Device Type - BREDR, BLE or DUAL Mode
  105. * Access mode - Only GET.
  106. * Data type - bt_device_type_t
  107. */
  108. WM_BT_PROPERTY_TYPE_OF_DEVICE,
  109. /**
  110. * Description - Bluetooth Service Record
  111. * Access mode - Only GET.
  112. * Data type - bt_service_record_t
  113. */
  114. WM_BT_PROPERTY_SERVICE_RECORD,
  115. /* Properties unique to adapter */
  116. /**
  117. * Description - Bluetooth Adapter scan mode
  118. * Access mode - GET and SET
  119. * Data type - bt_scan_mode_t.
  120. */
  121. WM_BT_PROPERTY_ADAPTER_SCAN_MODE,
  122. /**
  123. * Description - List of bonded devices
  124. * Access mode - Only GET.
  125. * Data type - Array of bt_bdaddr_t of the bonded remote devices
  126. * (Array size inferred from property length).
  127. */
  128. WM_BT_PROPERTY_ADAPTER_BONDED_DEVICES,
  129. /**
  130. * Description - Bluetooth Adapter Discovery timeout (in seconds)
  131. * Access mode - GET and SET
  132. * Data type - uint32_t
  133. */
  134. WM_BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT,
  135. /* Properties unique to remote device */
  136. /**
  137. * Description - User defined friendly name of the remote device
  138. * Access mode - GET and SET
  139. * Data type - bt_bdname_t.
  140. */
  141. WM_BT_PROPERTY_REMOTE_FRIENDLY_NAME,
  142. /**
  143. * Description - RSSI value of the inquired remote device
  144. * Access mode - Only GET.
  145. * Data type - int32_t.
  146. */
  147. WM_BT_PROPERTY_REMOTE_RSSI,
  148. /**
  149. * Description - Remote version info
  150. * Access mode - SET/GET.
  151. * Data type - bt_remote_version_t.
  152. */
  153. WM_BT_PROPERTY_REMOTE_VERSION_INFO,
  154. /**
  155. * Description - Local LE features
  156. * Access mode - GET.
  157. * Data type - bt_local_le_features_t.
  158. */
  159. WM_BT_PROPERTY_LOCAL_LE_FEATURES,
  160. WM_BT_PROPERTY_REMOTE_DEVICE_TIMESTAMP = 0xFF,
  161. } tls_bt_property_type_t;
  162. /** Bluetooth Adapter Property data structure */
  163. typedef struct
  164. {
  165. tls_bt_property_type_t type;
  166. int len;
  167. void *val;
  168. } tls_bt_property_t;
  169. typedef struct
  170. {
  171. tls_bt_status_t status;
  172. int num_properties;
  173. tls_bt_property_t *properties; /**< bluetooth adapter property data */
  174. } tls_bt_adapter_prop_msg_t;
  175. typedef enum
  176. {
  177. WM_BLE_SCAN_STOP = 0,
  178. WM_BLE_SCAN_PASSIVE = 1,
  179. WM_BLE_SCAN_ACTIVE = 2,
  180. } wm_ble_scan_type_t;
  181. typedef enum
  182. {
  183. WM_BLE_ADV_DATA = 0,
  184. WM_BLE_ADV_RSP_DATA,
  185. } wm_ble_gap_data_t;
  186. typedef enum{
  187. WM_BLE_ADV_STOP = 0,
  188. WM_BLE_ADV_IND,
  189. WM_BLE_ADV_DIRECT_IND_HDC, /*<high duty cycle, directed advertising>*/
  190. WM_BLE_ADV_SCAN_IND,
  191. WM_BLE_ADV_NONCONN_IND,
  192. WM_BLE_ADV_DIRECT_IND_LDC, /*<low duty cycle, directed advertising>*/
  193. } wm_ble_adv_type_t;
  194. #define WM_BLE_GAP_EVENT_CONNECT (0x01<<0)
  195. #define WM_BLE_GAP_EVENT_DISCONNECT (0x01<<1)
  196. /* Reserved 2 */
  197. #define WM_BLE_GAP_EVENT_CONN_UPDATE (0x01<<3)
  198. #define WM_BLE_GAP_EVENT_CONN_UPDATE_REQ (0x01<<4)
  199. #define WM_BLE_GAP_EVENT_L2CAP_UPDATE_REQ (0x01<<5)
  200. #define WM_BLE_GAP_EVENT_TERM_FAILURE (0x01<<6)
  201. #define WM_BLE_GAP_EVENT_DISC (0x01<<7)
  202. #define WM_BLE_GAP_EVENT_DISC_COMPLETE (0x01<<8)
  203. #define WM_BLE_GAP_EVENT_ADV_COMPLETE (0x01<<9)
  204. #define WM_BLE_GAP_EVENT_ENC_CHANGE (0x01<<10)
  205. #define WM_BLE_GAP_EVENT_PASSKEY_ACTION (0x01<<11)
  206. #define WM_BLE_GAP_EVENT_NOTIFY_RX (0x01<<12)
  207. #define WM_BLE_GAP_EVENT_NOTIFY_TX (0x01<<13)
  208. #define WM_BLE_GAP_EVENT_SUBSCRIBE (0x01<<14)
  209. #define WM_BLE_GAP_EVENT_MTU (0x01<<15)
  210. #define WM_BLE_GAP_EVENT_IDENTITY_RESOLVED (0x01<<16)
  211. #define WM_BLE_GAP_EVENT_REPEAT_PAIRING (0x01<<17)
  212. #define WM_BLE_GAP_EVENT_PHY_UPDATE_COMPLETE (0x01<<18)
  213. #define WM_BLE_GAP_EVENT_EXT_DISC (0x01<<19)
  214. #define WM_BLE_GAP_EVENT_PERIODIC_SYNC (0x01<<20)
  215. #define WM_BLE_GAP_EVENT_PERIODIC_REPORT (0x01<<21)
  216. #define WM_BLE_GAP_EVENT_PERIODIC_SYNC_LOST (0x01<<22)
  217. #define WM_BLE_GAP_EVENT_SCAN_REQ_RCVD (0x01<<23)
  218. #define WM_BLE_GAP_EVENT_PERIODIC_TRANSFER (0x01<<24)
  219. /** Bluetooth Address */
  220. typedef struct
  221. {
  222. uint8_t address[6];
  223. } __attribute__((packed))tls_bt_addr_t;
  224. typedef struct
  225. {
  226. tls_bt_status_t status;
  227. tls_bt_addr_t *address;
  228. int num_properties;
  229. tls_bt_property_t *properties; /**< bluetooth adapter property data */
  230. } tls_bt_remote_dev_prop_msg_t;
  231. typedef struct
  232. {
  233. int num_properties;
  234. tls_bt_property_t *properties; /**< bluetooth adapter property data */
  235. } tls_bt_device_found_msg_t;
  236. /** Bluetooth Adapter Discovery state */
  237. typedef enum
  238. {
  239. WM_BT_DISCOVERY_STOPPED,
  240. WM_BT_DISCOVERY_STARTED
  241. } tls_bt_discovery_state_t;
  242. typedef struct
  243. {
  244. tls_bt_discovery_state_t state;
  245. } tls_bt_discovery_state_chg_msg_t;
  246. /** Bluetooth Device Name */
  247. typedef struct
  248. {
  249. uint8_t name[249];
  250. } __attribute__((packed))tls_bt_bdname_t;
  251. typedef struct
  252. {
  253. tls_bt_addr_t *remote_bd_addr;
  254. tls_bt_bdname_t *bd_name;
  255. uint32_t cod;
  256. uint8_t min_16_digit;
  257. } tls_bt_pin_request_msg_t;
  258. /** Bluetooth SSP Bonding Variant */
  259. typedef enum
  260. {
  261. WM_BT_SSP_VARIANT_PASSKEY_CONFIRMATION,
  262. WM_BT_SSP_VARIANT_PASSKEY_ENTRY,
  263. WM_BT_SSP_VARIANT_CONSENT,
  264. WM_BT_SSP_VARIANT_PASSKEY_NOTIFICATION
  265. } tls_bt_ssp_variant_t;
  266. /** Bluetooth PinKey Code */
  267. typedef struct
  268. {
  269. uint8_t pin[16];
  270. } __attribute__((packed))tls_bt_pin_code_t;
  271. typedef struct
  272. {
  273. tls_bt_addr_t *remote_bd_addr;
  274. tls_bt_bdname_t *bd_name;
  275. uint32_t cod;
  276. tls_bt_ssp_variant_t pairing_variant;
  277. uint32_t pass_key;
  278. } tls_bt_ssp_request_msg_t;
  279. /** Bluetooth Bond state */
  280. typedef enum
  281. {
  282. WM_BT_BOND_STATE_NONE,
  283. WM_BT_BOND_STATE_BONDING,
  284. WM_BT_BOND_STATE_BONDED
  285. } tls_bt_bond_state_t;
  286. typedef struct
  287. {
  288. tls_bt_status_t status;
  289. tls_bt_addr_t *remote_bd_addr;
  290. tls_bt_bond_state_t state;
  291. } tls_bt_bond_state_chg_msg_t;
  292. /** Bluetooth ACL connection state */
  293. typedef enum
  294. {
  295. WM_BT_ACL_STATE_CONNECTED,
  296. WM_BT_ACL_STATE_DISCONNECTED
  297. } tls_bt_acl_state_t;
  298. typedef struct
  299. {
  300. tls_bt_status_t status;
  301. tls_bt_addr_t *remote_address;
  302. uint8_t link_type;
  303. tls_bt_acl_state_t state;
  304. } tls_bt_acl_state_chg_msg_t;
  305. typedef struct
  306. {
  307. uint8_t status;
  308. uint8_t ctrl_state; /* stack reported state */
  309. uint64_t tx_time; /* in ms */
  310. uint64_t rx_time; /* in ms */
  311. uint64_t idle_time; /* in ms */
  312. uint64_t energy_used; /* a product of mA, V and ms */
  313. } __attribute__((packed))tls_bt_activity_energy_info;
  314. typedef struct
  315. {
  316. tls_bt_activity_energy_info *energy_info;
  317. } tls_bt_energy_info_msg_t;
  318. typedef struct
  319. {
  320. uint8_t status;
  321. uint32_t count;
  322. } tls_bt_ble_test_msg_t;
  323. typedef union
  324. {
  325. tls_bt_adapter_state_change_msg_t adapter_state_change;
  326. tls_bt_adapter_prop_msg_t adapter_prop;
  327. tls_bt_remote_dev_prop_msg_t remote_device_prop;
  328. tls_bt_device_found_msg_t device_found;
  329. tls_bt_discovery_state_chg_msg_t discovery_state;
  330. tls_bt_pin_request_msg_t pin_request;
  331. tls_bt_ssp_request_msg_t ssp_request;
  332. tls_bt_bond_state_chg_msg_t bond_state;
  333. tls_bt_acl_state_chg_msg_t acl_state;
  334. tls_bt_energy_info_msg_t energy_info;
  335. tls_bt_ble_test_msg_t ble_test;
  336. } tls_bt_host_msg_t;
  337. /** BT host callback function */
  338. typedef void (*tls_bt_host_callback_t)(tls_bt_host_evt_t event, tls_bt_host_msg_t *p_data);
  339. typedef enum
  340. {
  341. TLS_BT_LOG_NONE = 0,
  342. TLS_BT_LOG_ERROR = 1,
  343. TLS_BT_LOG_WARNING = 2,
  344. TLS_BT_LOG_API = 3,
  345. TLS_BT_LOG_EVENT = 4,
  346. TLS_BT_LOG_DEBUG = 5,
  347. TLS_BT_LOG_VERBOSE = 6,
  348. } tls_bt_log_level_t;
  349. typedef struct
  350. {
  351. uint8_t uart_index; /**< uart port index, 1~4 */
  352. uint32_t band_rate; /**< band rate: 115200 ~ 2M */
  353. uint8_t data_bit; /**< data bit:5 ~ 8 */
  354. uint8_t verify_bit; /**< 0:NONE, 1 ODD, 2 EVEN */
  355. uint8_t stop_bit; /**< 0:1bit; 1:1.5bit; 2:2bits */
  356. } tls_bt_hci_if_t;
  357. typedef enum
  358. {
  359. TLS_BLE_PWR_TYPE_CONN_HDL0,
  360. TLS_BLE_PWR_TYPE_CONN_HDL1,
  361. TLS_BLE_PWR_TYPE_CONN_HDL2,
  362. TLS_BLE_PWR_TYPE_CONN_HDL3,
  363. TLS_BLE_PWR_TYPE_CONN_HDL4,
  364. TLS_BLE_PWR_TYPE_CONN_HDL5,
  365. TLS_BLE_PWR_TYPE_CONN_HDL6,
  366. TLS_BLE_PWR_TYPE_CONN_HDL7,
  367. TLS_BLE_PWR_TYPE_CONN_HDL8,
  368. TLS_BLE_PWR_TYPE_ADV,
  369. TLS_BLE_PWR_TYPE_SCAN,
  370. TLS_BLE_PWR_TYPE_DEFAULT,
  371. } tls_ble_power_type_t;
  372. typedef enum
  373. {
  374. WM_AUDIO_OVER_HCI = 0,
  375. WM_AUDIO_INTERNAL_MODE,
  376. } tls_sco_data_path_t;
  377. typedef struct
  378. {
  379. void (*notify_controller_avaiable_hci_buffer)(int cnt);
  380. void (*notify_host_recv_h4)(uint8_t *ptr, uint16_t length);
  381. } tls_bt_host_if_t;
  382. /*****************************************************************************
  383. ** Constants and Type Definitions
  384. *****************************************************************************/
  385. /** Attribute permissions */
  386. #define WM_GATT_PERM_READ (1 << 0) /**< bit 0 - 0x0001 */
  387. #define WM_GATT_PERM_READ_ENCRYPTED (1 << 1) /**< bit 1 - 0x0002 */
  388. #define WM_GATT_PERM_READ_ENC_MITM (1 << 2) /**< bit 2 - 0x0004 */
  389. #define WM_GATT_PERM_WRITE (1 << 4) /**< bit 4 - 0x0010 */
  390. #define WM_GATT_PERM_WRITE_ENCRYPTED (1 << 5) /**< bit 5 - 0x0020 */
  391. #define WM_GATT_PERM_WRITE_ENC_MITM (1 << 6) /**< bit 6 - 0x0040 */
  392. #define WM_GATT_PERM_WRITE_SIGNED (1 << 7) /**< bit 7 - 0x0080 */
  393. #define WM_GATT_PERM_WRITE_SIGNED_MITM (1 << 8) /**< bit 8 - 0x0100 */
  394. /** definition of characteristic properties */
  395. #define WM_GATT_CHAR_PROP_BIT_BROADCAST (1 << 0) /**< 0x01 */
  396. #define WM_GATT_CHAR_PROP_BIT_READ (1 << 1) /**< 0x02 */
  397. #define WM_GATT_CHAR_PROP_BIT_WRITE_NR (1 << 2) /**< 0x04 */
  398. #define WM_GATT_CHAR_PROP_BIT_WRITE (1 << 3) /**< 0x08 */
  399. #define WM_GATT_CHAR_PROP_BIT_NOTIFY (1 << 4) /**< 0x10 */
  400. #define WM_GATT_CHAR_PROP_BIT_INDICATE (1 << 5) /**< 0x20 */
  401. #define WM_GATT_CHAR_PROP_BIT_AUTH (1 << 6) /**< 0x40 */
  402. #define WM_GATT_CHAR_PROP_BIT_EXT_PROP (1 << 7) /**< 0x80 */
  403. #define WM_BLE_MAX_ATTR_LEN 600
  404. /** max client application WM BLE Client can support */
  405. #ifndef WM_BLE_CLIENT_MAX
  406. #define WM_BLE_CLIENT_MAX 3
  407. #endif
  408. /** max server application WM BLE Server can support */
  409. #define WM_BLE_SERVER_MAX 4
  410. #define WM_BLE_ATTRIBUTE_MAX 50
  411. #ifndef WM_BLE_SERVER_SECURITY
  412. #define WM_BLE_SERVER_SECURITY BTA_DM_BLE_SEC_NONE
  413. #endif
  414. #define WM_BLE_INVALID_IF 0xFF
  415. #define WM_BLE_INVALID_CONN 0xFFFF
  416. #define WM_BLE_GATT_TRANSPORT_LE 0x02
  417. #define WM_BLE_GATT_TRANSPORT_BR_EDR 0x01
  418. #define WM_BLE_GATT_TRANSPORT_LE_BR_EDR 0x03
  419. #define WM_BLE_MAX_PDU_LENGTH 251
  420. /** BLE events */
  421. typedef enum
  422. {
  423. /** BLE Client events */
  424. WM_BLE_CL_REGISTER_EVT, /**< BLE client is registered. */
  425. WM_BLE_CL_DEREGISTER_EVT, /**< BLE client is deregistered. */
  426. WM_BLE_CL_READ_CHAR_EVT,
  427. WM_BLE_CL_WRITE_CHAR_EVT,
  428. WM_BLE_CL_PREP_WRITE_EVT,
  429. WM_BLE_CL_EXEC_CMPL_EVT, /**< Execute complete event */
  430. WM_BLE_CL_SEARCH_CMPL_EVT, /**< GATT discovery complete event */
  431. WM_BLE_CL_SEARCH_RES_EVT, /**< GATT discovery result event */
  432. WM_BLE_CL_READ_DESCR_EVT,
  433. WM_BLE_CL_WRITE_DESCR_EVT,
  434. WM_BLE_CL_NOTIF_EVT, /**< GATT attribute notification event */
  435. WM_BLE_CL_OPEN_EVT, /**< BLE open request status event */
  436. WM_BLE_CL_CLOSE_EVT, /**< GATTC close request status event */
  437. WM_BLE_CL_LISTEN_EVT,
  438. WM_BLE_CL_CFG_MTU_EVT, /**< configure MTU complete event */
  439. WM_BLE_CL_CONGEST_EVT, /**< GATT congestion/uncongestion event */
  440. WM_BLE_CL_REPORT_DB_EVT,
  441. WM_BLE_CL_REG_NOTIFY_EVT,
  442. WM_BLE_CL_DEREG_NOTIFY_EVT,
  443. /** BLE Server events */
  444. WM_BLE_SE_REGISTER_EVT, /**< BLE Server is registered */
  445. WM_BLE_SE_DEREGISTER_EVT, /**< BLE Server is deregistered */
  446. WM_BLE_SE_CONNECT_EVT,
  447. WM_BLE_SE_DISCONNECT_EVT,
  448. WM_BLE_SE_CREATE_EVT, /**< Service is created */
  449. WM_BLE_SE_ADD_INCL_SRVC_EVT,
  450. WM_BLE_SE_ADD_CHAR_EVT, /**< char data is added */
  451. WM_BLE_SE_ADD_CHAR_DESCR_EVT,
  452. WM_BLE_SE_START_EVT, /**< Service is started */
  453. WM_BLE_SE_STOP_EVT, /**< Service is stopped */
  454. WM_BLE_SE_DELETE_EVT,
  455. WM_BLE_SE_READ_EVT, /**< Read request from client */
  456. WM_BLE_SE_WRITE_EVT, /**< Write request from client */
  457. WM_BLE_SE_EXEC_WRITE_EVT, /**< Execute Write request from client */
  458. WM_BLE_SE_CONFIRM_EVT, /**< Confirm event */
  459. WM_BLE_SE_RESP_EVT,
  460. WM_BLE_SE_CONGEST_EVT, /**< Congestion event */
  461. WM_BLE_SE_MTU_EVT,
  462. } tls_ble_evt_t;
  463. /* WM BLE Client Host callback events */
  464. /* Client callback function events */
  465. /** Bluetooth 128-bit UUID */
  466. typedef struct
  467. {
  468. uint8_t uu[16];
  469. } tls_bt_uuid_t;
  470. /* callback event data for WM_BLE_CL_REGISTER_EVT/ event */
  471. typedef struct
  472. {
  473. uint8_t status; /**< operation status */
  474. uint8_t client_if; /**< Client interface ID */
  475. tls_bt_uuid_t app_uuid; /**< Client uuid*/
  476. } tls_ble_cl_register_msg_t;
  477. /** callback event data for WM_BLE_CL_READ_CHAR_EVT /WM_BLE_CL_READ_CHAR_EVTevent */
  478. typedef struct
  479. {
  480. uint16_t conn_id;
  481. uint8_t status;
  482. uint16_t handle;
  483. uint16_t len;
  484. uint8_t *value;
  485. uint16_t value_type;
  486. } tls_ble_cl_read_msg_t;
  487. /** callback event data for WM_BLE_CL_WRITE_CHAR_EVT/WM_BLE_CL_PREP_WRITE_EVT/WM_BLE_CL_WRITE_DESCR_EVT event */
  488. typedef struct
  489. {
  490. uint16_t conn_id;
  491. uint8_t status;
  492. uint16_t handle;
  493. } tls_ble_cl_write_msg_t;
  494. /** callback event data for WM_BLE_CL_EXEC_CMPL_EVT event */
  495. typedef struct
  496. {
  497. uint16_t conn_id;
  498. uint8_t status;
  499. } tls_ble_cl_exec_cmpl_msg_t;
  500. /** callback event data for WM_BLE_CL_SEARCH_CMPL_EVT event */
  501. typedef struct
  502. {
  503. uint16_t conn_id;
  504. uint8_t status; /**< operation status */
  505. } tls_ble_cl_search_cmpl_msg_t;
  506. /** callback event data for WM_BLE_CL_SEARCH_RES_EVT event */
  507. typedef struct
  508. {
  509. uint16_t conn_id;
  510. tls_bt_uuid_t uuid;
  511. uint8_t inst_id;
  512. } tls_ble_cl_search_res_msg_t;
  513. /** callback event data for WM_BLE_CL_NOTIF_EVT event */
  514. typedef struct
  515. {
  516. uint16_t conn_id;
  517. uint8_t *value;
  518. uint8_t bda[6];
  519. uint16_t handle;
  520. uint16_t len;
  521. bool is_notify;
  522. } tls_ble_cl_notify_msg_t;
  523. /** callback event data for WM_BLE_CL_OPEN_EVT event */
  524. typedef struct
  525. {
  526. uint16_t conn_id;
  527. uint8_t status; /**< operation status */
  528. uint8_t client_if; /**< Client interface ID */
  529. uint8_t bd_addr[6];
  530. } tls_ble_cl_open_msg_t;
  531. /** callback event data for WM_BLE_CL_CLOSE_EVT event */
  532. typedef struct
  533. {
  534. uint16_t conn_id;
  535. uint8_t status;
  536. uint8_t client_if;
  537. uint8_t remote_bda[6];
  538. uint16_t reason; /**< disconnect reason code, not useful when connect event is reported */
  539. } tls_ble_cl_close_msg_t;
  540. /** callback event data for WM_BLE_CL_LISTEN_EVT event */
  541. typedef struct
  542. {
  543. uint8_t status;
  544. uint8_t client_if;
  545. } tls_ble_cl_listen_msg_t;
  546. /** callback event data for WM_BLE_CL_CFG_MTU_EVT event */
  547. typedef struct
  548. {
  549. uint16_t conn_id;
  550. uint8_t status;
  551. uint16_t mtu;
  552. } tls_ble_cl_cfg_mtu_msg_t;
  553. typedef struct
  554. {
  555. uint16_t conn_id;
  556. bool congested; /**< congestion indicator */
  557. } tls_ble_cl_congest_msg_t;
  558. typedef enum
  559. {
  560. WM_BTGATT_DB_PRIMARY_SERVICE,
  561. WM_BTGATT_DB_SECONDARY_SERVICE,
  562. WM_BTGATT_DB_INCLUDED_SERVICE,
  563. WM_BTGATT_DB_CHARACTERISTIC,
  564. WM_BTGATT_DB_DESCRIPTOR,
  565. } tls_bt_gatt_db_attribute_type_t;
  566. typedef struct
  567. {
  568. uint16_t id;
  569. tls_bt_uuid_t uuid;
  570. tls_bt_gatt_db_attribute_type_t type;
  571. uint16_t attribute_handle;
  572. /*
  573. * If |type| is |BTGATT_DB_PRIMARY_SERVICE|, or
  574. * |BTGATT_DB_SECONDARY_SERVICE|, this contains the start and end attribute
  575. * handles.
  576. */
  577. uint16_t start_handle;
  578. uint16_t end_handle;
  579. /*
  580. * If |type| is |BTGATT_DB_CHARACTERISTIC|, this contains the properties of
  581. * the characteristic.
  582. */
  583. uint8_t properties;
  584. } tls_btgatt_db_element_t;
  585. typedef struct
  586. {
  587. uint16_t conn_id;
  588. tls_btgatt_db_element_t *db;
  589. int count;
  590. uint8_t status;
  591. } tls_ble_cl_gatt_db_msg_t;
  592. typedef struct
  593. {
  594. uint16_t conn_id;
  595. uint8_t status;
  596. bool reg;
  597. uint16_t handle;
  598. } tls_ble_cl_reg_notify_msg_t;
  599. /* WM BLE Server Host callback events */
  600. /* Server callback function events */
  601. /** callback event data for WM_BLE_SE_REGISTER_EVT/WM_BLE_SE_DEREGISTER_EVT event */
  602. typedef struct
  603. {
  604. uint8_t status; /* operation status */
  605. uint8_t server_if; /* Server interface ID */
  606. tls_bt_uuid_t app_uuid;
  607. } tls_ble_se_register_msg_t;
  608. /** callback event data for WM_BLE_SE_CONNECT_EVT/WM_BLE_SE_DISCONNECT_EVT event */
  609. typedef struct
  610. {
  611. uint16_t conn_id;
  612. uint8_t server_if; /**< Server interface ID */
  613. bool connected;
  614. uint16_t reason;
  615. uint8_t addr[6];
  616. } tls_ble_se_connect_msg_t;
  617. typedef tls_ble_se_connect_msg_t tls_ble_se_disconnect_msg_t;
  618. /** callback event data for WM_BLE_SE_CREATE_EVT event */
  619. typedef struct
  620. {
  621. uint8_t status; /**< operation status */
  622. uint8_t server_if;
  623. bool is_primary;
  624. uint8_t inst_id;
  625. tls_bt_uuid_t uuid;
  626. uint16_t service_id;
  627. } tls_ble_se_create_msg_t;
  628. /** callback event data for WM_BLE_SE_ADD_INCL_SRVC_EVT event */
  629. typedef struct
  630. {
  631. uint8_t status; /**< operation status */
  632. uint8_t server_if;
  633. uint16_t service_id;
  634. uint16_t attr_id;
  635. } tls_ble_se_add_incl_srvc_msg_t;
  636. /** callback event data for WM_BLE_SE_ADDCHAR_EVT event */
  637. typedef struct
  638. {
  639. uint8_t status; /**< operation status */
  640. uint8_t server_if;
  641. tls_bt_uuid_t uuid;
  642. uint16_t service_id;
  643. uint16_t attr_id;
  644. } tls_ble_se_add_char_msg_t;
  645. typedef tls_ble_se_add_char_msg_t tls_ble_se_add_char_descr_msg_t;
  646. /** callback event data for WM_BLE_SE_START_EVT event */
  647. typedef struct
  648. {
  649. uint8_t status; /**< operation status */
  650. uint8_t server_if;
  651. uint16_t service_id;
  652. } tls_ble_se_start_msg_t;
  653. typedef tls_ble_se_start_msg_t tls_ble_se_stop_msg_t;
  654. typedef tls_ble_se_start_msg_t tls_ble_se_delete_msg_t;
  655. typedef struct
  656. {
  657. uint16_t conn_id;
  658. uint32_t trans_id;
  659. uint8_t remote_bda[6];
  660. uint16_t handle;
  661. uint16_t offset;
  662. bool is_long;
  663. } tls_ble_se_read_msg_t;
  664. typedef struct
  665. {
  666. uint16_t conn_id;
  667. uint32_t trans_id;
  668. uint8_t remote_bda[6];
  669. uint16_t handle; /**< attribute handle */
  670. uint16_t offset; /**< attribute value offset, if no offset is needed for the command, ignore it */
  671. uint16_t len; /**< length of attribute value */
  672. bool need_rsp; /**< need write response */
  673. bool is_prep; /**< is prepare write */
  674. uint8_t *value; /**< the actual attribute value */
  675. } tls_ble_se_write_msg_t;
  676. typedef struct
  677. {
  678. uint16_t conn_id;
  679. uint32_t trans_id;
  680. uint8_t remote_bda[6];
  681. uint8_t exec_write;
  682. } tls_ble_se_exec_write_msg_t;
  683. typedef struct
  684. {
  685. uint16_t conn_id;
  686. uint8_t status; /**< operation status */
  687. } tls_ble_se_confirm_msg_t;
  688. typedef struct
  689. {
  690. uint8_t status; /* operation status */
  691. uint16_t conn_id;
  692. uint16_t trans_id;
  693. } tls_ble_se_response_msg_t;
  694. typedef struct
  695. {
  696. uint16_t conn_id;
  697. bool congested; /**< congestion indicator */
  698. } tls_ble_se_congest_msg_t;
  699. typedef struct
  700. {
  701. uint16_t conn_id;
  702. uint16_t mtu;
  703. } tls_ble_se_mtu_msg_t;
  704. /** Union of data associated with HD callback */
  705. typedef union
  706. {
  707. tls_ble_cl_register_msg_t cli_register; /**< WM_BLE_CL_REGISTER_EVT */
  708. tls_ble_cl_read_msg_t cli_read; /**< WM_BLE_CL_READ_EVT */
  709. tls_ble_cl_write_msg_t cli_write; /**< WM_BLE_CL_WRITE_EVT */
  710. tls_ble_cl_exec_cmpl_msg_t cli_exec_cmpl; /**< WM_BLE_CL_EXEC_CMPL_EVT */
  711. tls_ble_cl_search_cmpl_msg_t cli_search_cmpl; /**< WM_BLE_CL_SEARCH_CMPL_EVT */
  712. tls_ble_cl_search_res_msg_t cli_search_res; /**< WM_BLE_CL_SEARCH_RES_EVT */
  713. tls_ble_cl_notify_msg_t cli_notif; /**< WM_BLE_CL_NOTIF_EVT */
  714. tls_ble_cl_open_msg_t cli_open; /**< WM_BLE_CL_OPEN_EVT */
  715. tls_ble_cl_close_msg_t cli_close; /**< WM_BLE_CL_CLOSE_EVT */
  716. tls_ble_cl_listen_msg_t cli_listen; /**< WM_BLE_CL_LISTEN_EVT */
  717. tls_ble_cl_cfg_mtu_msg_t cli_cfg_mtu; /**< WM_BLE_CL_CFG_MTU_EVT */
  718. tls_ble_cl_congest_msg_t cli_congest; /**< WM_BLE_CL_CONGEST_EVT */
  719. tls_ble_cl_gatt_db_msg_t cli_db; /* WM_BLE_CL_REPORT_DB_EVT*/
  720. tls_ble_cl_reg_notify_msg_t cli_reg_notify;
  721. tls_ble_se_register_msg_t ser_register; /**< WM_BLE_SE_REGISTER_EVT */
  722. tls_ble_se_connect_msg_t ser_connect; /**< WM_BLE_SE_OPEN_EVT */
  723. tls_ble_se_disconnect_msg_t ser_disconnect; /**< WM_BLE_SE_CLOSE_EVT */
  724. tls_ble_se_create_msg_t ser_create; /**< WM_BLE_SE_CREATE_EVT */
  725. tls_ble_se_add_incl_srvc_msg_t ser_add_incl_srvc;
  726. tls_ble_se_add_char_msg_t ser_add_char; /**< WM_BLE_SE_ADDCHAR_EVT */
  727. tls_ble_se_add_char_descr_msg_t ser_add_char_descr;
  728. tls_ble_se_start_msg_t ser_start_srvc; /**< WM_BLE_SE_START_EVT */
  729. tls_ble_se_stop_msg_t ser_stop_srvc; /**< WM_BLE_SE_STOP_EVT */
  730. tls_ble_se_delete_msg_t ser_delete_srvc;
  731. tls_ble_se_read_msg_t ser_read; /**< WM_BLE_SE_READ_EVT */
  732. tls_ble_se_write_msg_t ser_write; /**< WM_BLE_SE_WRITE_EVT */
  733. tls_ble_se_exec_write_msg_t ser_exec_write; /**< WM_BLE_SE_EXEC_WRITE_EVT */
  734. tls_ble_se_confirm_msg_t ser_confirm; /**< WM_BLE_SE_CONFIRM_EVT */
  735. tls_ble_se_congest_msg_t ser_congest; /**< WM_BLE_CL_CONGEST_EVT */
  736. tls_ble_se_mtu_msg_t ser_mtu;
  737. tls_ble_se_response_msg_t ser_resp;
  738. } tls_ble_msg_t;
  739. /** WM BLE Client callback function */
  740. typedef void (*tls_ble_callback_t)(tls_ble_evt_t event, tls_ble_msg_t *p_data);
  741. typedef void (*tls_ble_output_func_ptr)(uint8_t *p_data, uint32_t length);
  742. /** BLE dm events */
  743. typedef enum
  744. {
  745. WM_BLE_DM_SET_ADV_DATA_CMPL_EVT = (0x01<<0), /**< BLE DM set advertisement data completed*/
  746. WM_BLE_DM_TIMER_EXPIRED_EVT = (0x01<<1), /**< BLE DM timer expired event. */
  747. WM_BLE_DM_TRIGER_EVT = (0x01<<2), /**< BLE DM event trigered event, async processing*/
  748. WM_BLE_DM_SCAN_RES_EVT = (0x01<<3), /**< BLE DM scan result evt*/
  749. WM_BLE_DM_SET_SCAN_PARAM_CMPL_EVT=(0x01<<4),
  750. WM_BLE_DM_REPORT_RSSI_EVT = (0x01<<5),
  751. WM_BLE_DM_SCAN_RES_CMPL_EVT = (0x01<<6),
  752. WM_BLE_DM_SEC_EVT = (0x01<<7),
  753. WM_BLE_DM_ADV_STARTED_EVT = (0x01<<8),
  754. WM_BLE_DM_ADV_STOPPED_EVT = (0x01<<9),
  755. } tls_ble_dm_evt_t;
  756. /** callback event data for WM_BLE_DM_SET_ADV_DATA */
  757. typedef struct
  758. {
  759. uint8_t status; /**< operation status */
  760. } tls_ble_dm_set_adv_data_cmpl_msg_t;
  761. typedef struct
  762. {
  763. uint8_t status;
  764. uint8_t dm_id; //dummy value; who care this value;
  765. } tls_ble_dm_set_scan_param_cmpl_msg_t;
  766. typedef struct
  767. {
  768. uint32_t id;
  769. int32_t func_ptr;
  770. } tls_ble_dm_timer_expired_msg_t;
  771. typedef tls_ble_dm_timer_expired_msg_t tls_ble_dm_evt_triger_msg_t;
  772. typedef struct
  773. {
  774. uint8_t address[6]; /**< device address */
  775. int8_t rssi; /**< signal strength */
  776. uint8_t *value; /**< adv /scan resp value */
  777. } tls_ble_dm_scan_res_msg_t;
  778. typedef struct
  779. {
  780. uint8_t address[6];
  781. int8_t rssi;
  782. uint8_t status;
  783. } tls_ble_report_rssi_msg_t;
  784. typedef struct
  785. {
  786. uint8_t address[6];
  787. int8_t transport;
  788. uint8_t status;
  789. } tls_ble_sec_msg_t;
  790. typedef struct
  791. {
  792. uint16_t num_responses;
  793. } tls_ble_dm_scan_res_cmpl_msg_t;
  794. typedef tls_ble_dm_set_adv_data_cmpl_msg_t tls_ble_dm_adv_cmpl_msg_t;
  795. typedef union
  796. {
  797. tls_ble_dm_set_adv_data_cmpl_msg_t dm_set_adv_data_cmpl;
  798. tls_ble_dm_timer_expired_msg_t dm_timer_expired;
  799. tls_ble_dm_evt_triger_msg_t dm_evt_trigered;
  800. tls_ble_dm_scan_res_msg_t dm_scan_result;
  801. tls_ble_dm_set_scan_param_cmpl_msg_t dm_set_scan_param_cmpl;
  802. tls_ble_dm_scan_res_cmpl_msg_t dm_scan_result_cmpl;
  803. tls_ble_report_rssi_msg_t dm_report_rssi;
  804. tls_ble_sec_msg_t dm_sec_result;
  805. tls_ble_dm_adv_cmpl_msg_t dm_adv_cmpl;
  806. } tls_ble_dm_msg_t;
  807. typedef struct
  808. {
  809. bool set_scan_rsp;
  810. bool include_name;
  811. bool include_txpower;
  812. bool pure_data;
  813. int min_interval;
  814. int max_interval;
  815. int appearance;
  816. uint16_t manufacturer_len;
  817. uint8_t manufacturer_data[31];
  818. uint16_t service_data_len;
  819. uint8_t service_data[31];
  820. uint16_t service_uuid_len;
  821. uint8_t service_uuid[31];
  822. } __attribute__((packed)) tls_ble_dm_adv_data_t;
  823. typedef struct
  824. {
  825. uint16_t adv_int_min; /* minimum adv interval */
  826. uint16_t adv_int_max; /* maximum adv interval */
  827. tls_bt_addr_t *dir_addr;
  828. } __attribute__((packed)) tls_ble_dm_adv_param_t;
  829. typedef struct
  830. {
  831. uint16_t adv_int_min; /* minimum adv interval */
  832. uint16_t adv_int_max; /* maximum adv interval */
  833. uint8_t adv_type;
  834. uint8_t own_addr_type;
  835. uint8_t chnl_map;
  836. uint8_t afp;
  837. uint8_t peer_addr_type;
  838. tls_bt_addr_t *dir_addr;
  839. } __attribute__((packed)) tls_ble_dm_adv_ext_param_t;
  840. /** WM BLE device manager callback function */
  841. typedef void (*tls_ble_dm_callback_t)(tls_ble_dm_evt_t event, tls_ble_dm_msg_t *p_data);
  842. /** WM BLE dm timer callback function */
  843. typedef void (*tls_ble_dm_timer_callback_t)(uint8_t timer_id);
  844. /** WM BLE device evt triger callback function */
  845. typedef void (*tls_ble_dm_triger_callback_t)(uint32_t evt_id);
  846. typedef void (*tls_ble_scan_res_notify_t)(tls_ble_dm_scan_res_msg_t *msg);
  847. /*********************************************************************************************************/
  848. /* Bluetooth AV connection states */
  849. typedef enum
  850. {
  851. WM_BTAV_CONNECTION_STATE_DISCONNECTED = 0,
  852. WM_BTAV_CONNECTION_STATE_CONNECTING,
  853. WM_BTAV_CONNECTION_STATE_CONNECTED,
  854. WM_BTAV_CONNECTION_STATE_DISCONNECTING
  855. } tls_btav_connection_state_t;
  856. /* Bluetooth AV datapath states */
  857. typedef enum
  858. {
  859. WM_BTAV_AUDIO_STATE_REMOTE_SUSPEND = 0,
  860. WM_BTAV_AUDIO_STATE_STOPPED,
  861. WM_BTAV_AUDIO_STATE_STARTED,
  862. } tls_btav_audio_state_t;
  863. /** BR-EDR A2DP sink events */
  864. typedef enum
  865. {
  866. WMBT_A2DP_CONNECTION_STATE_EVT,
  867. WMBT_A2DP_AUDIO_STATE_EVT,
  868. WMBT_A2DP_AUDIO_CONFIG_EVT,
  869. WMBT_A2DP_AUDIO_PAYLOAD_EVT,
  870. } tls_bt_av_evt_t;
  871. typedef struct
  872. {
  873. tls_btav_connection_state_t stat;
  874. tls_bt_addr_t *bd_addr;
  875. } tls_bt_av_connection_state_t;
  876. typedef struct
  877. {
  878. tls_btav_audio_state_t stat;
  879. tls_bt_addr_t *bd_addr;
  880. } tls_bt_av_audio_state_t;
  881. typedef struct
  882. {
  883. tls_bt_addr_t *bd_addr;
  884. uint32_t sample_rate;
  885. uint8_t channel_count;
  886. } tls_bt_av_audio_config_t;
  887. typedef struct
  888. {
  889. tls_bt_addr_t *bd_addr;
  890. uint8_t audio_format;
  891. uint8_t *payload;
  892. uint16_t payload_length;
  893. } tls_bt_av_audio_payload_t;
  894. typedef union
  895. {
  896. tls_bt_av_connection_state_t av_connection_state;
  897. tls_bt_av_audio_state_t av_audio_state;
  898. tls_bt_av_audio_config_t av_audio_config;
  899. tls_bt_av_audio_payload_t av_audio_payload;
  900. } tls_bt_av_msg_t;
  901. /** WM BT A2DP SINK callback function */
  902. typedef void (*tls_bt_a2dp_sink_callback_t)(tls_bt_av_evt_t event, tls_bt_av_msg_t *p_data);
  903. /**WM BT A2DP SRC callback function */
  904. ///////////////TODO////////////////
  905. typedef void (*tls_bt_a2dp_src_callback_t)(tls_bt_av_evt_t event, tls_bt_av_msg_t *p_data);
  906. /** BR-EDR WMBT-RC Controller callback events */
  907. #define WM_BTRC_MAX_ATTR_STR_LEN 255
  908. #define WM_BTRC_UID_SIZE 8
  909. #define WM_BTRC_MAX_APP_SETTINGS 8
  910. #define WM_BTRC_MAX_FOLDER_DEPTH 4
  911. #define WM_BTRC_MAX_APP_ATTR_SIZE 16
  912. #define WM_BTRC_MAX_ELEM_ATTR_SIZE 7
  913. typedef uint8_t tls_btrc_uid_t[WM_BTRC_UID_SIZE];
  914. typedef enum
  915. {
  916. WM_BTRC_PLAYSTATE_STOPPED = 0x00, /* Stopped */
  917. WM_BTRC_PLAYSTATE_PLAYING = 0x01, /* Playing */
  918. WM_BTRC_PLAYSTATE_PAUSED = 0x02, /* Paused */
  919. WM_BTRC_PLAYSTATE_FWD_SEEK = 0x03, /* Fwd Seek*/
  920. WM_BTRC_PLAYSTATE_REV_SEEK = 0x04, /* Rev Seek*/
  921. WM_BTRC_PLAYSTATE_ERROR = 0xFF, /* Error */
  922. } tls_btrc_play_status_t;
  923. typedef enum
  924. {
  925. WM_BTRC_FEAT_NONE = 0x00, /* AVRCP 1.0 */
  926. WM_BTRC_FEAT_METADATA = 0x01, /* AVRCP 1.3 */
  927. WM_BTRC_FEAT_ABSOLUTE_VOLUME = 0x02, /* Supports TG role and volume sync */
  928. WM_BTRC_FEAT_BROWSE = 0x04, /* AVRCP 1.4 and up, with Browsing support */
  929. } tls_btrc_remote_features_t;
  930. typedef enum
  931. {
  932. WM_BTRC_NOTIFICATION_TYPE_INTERIM = 0,
  933. WM_BTRC_NOTIFICATION_TYPE_CHANGED = 1,
  934. } tls_btrc_notification_type_t;
  935. typedef enum
  936. {
  937. WM_BTRC_PLAYER_ATTR_EQUALIZER = 0x01,
  938. WM_BTRC_PLAYER_ATTR_REPEAT = 0x02,
  939. WM_BTRC_PLAYER_ATTR_SHUFFLE = 0x03,
  940. WM_BTRC_PLAYER_ATTR_SCAN = 0x04,
  941. } tls_btrc_player_attr_t;
  942. typedef enum
  943. {
  944. WM_BTRC_MEDIA_ATTR_TITLE = 0x01,
  945. WM_BTRC_MEDIA_ATTR_ARTIST = 0x02,
  946. WM_BTRC_MEDIA_ATTR_ALBUM = 0x03,
  947. WM_BTRC_MEDIA_ATTR_TRACK_NUM = 0x04,
  948. WM_BTRC_MEDIA_ATTR_NUM_TRACKS = 0x05,
  949. WM_BTRC_MEDIA_ATTR_GENRE = 0x06,
  950. WM_BTRC_MEDIA_ATTR_PLAYING_TIME = 0x07,
  951. } tls_btrc_media_attr_t;
  952. typedef enum
  953. {
  954. WM_BTRC_PLAYER_VAL_OFF_REPEAT = 0x01,
  955. WM_BTRC_PLAYER_VAL_SINGLE_REPEAT = 0x02,
  956. WM_BTRC_PLAYER_VAL_ALL_REPEAT = 0x03,
  957. WM_BTRC_PLAYER_VAL_GROUP_REPEAT = 0x04
  958. } tls_btrc_player_repeat_val_t;
  959. typedef enum
  960. {
  961. WM_BTRC_EVT_PLAY_STATUS_CHANGED = 0x01,
  962. WM_BTRC_EVT_TRACK_CHANGE = 0x02,
  963. WM_BTRC_EVT_TRACK_REACHED_END = 0x03,
  964. WM_BTRC_EVT_TRACK_REACHED_START = 0x04,
  965. WM_BTRC_EVT_PLAY_POS_CHANGED = 0x05,
  966. WM_BTRC_EVT_APP_SETTINGS_CHANGED = 0x08,
  967. } tls_btrc_event_id_t;
  968. typedef struct
  969. {
  970. uint8_t num_attr;
  971. uint8_t attr_ids[WM_BTRC_MAX_APP_SETTINGS];
  972. uint8_t attr_values[WM_BTRC_MAX_APP_SETTINGS];
  973. } tls_btrc_player_settings_t;
  974. typedef struct
  975. {
  976. uint32_t attr_id;
  977. uint8_t text[WM_BTRC_MAX_ATTR_STR_LEN];
  978. } tls_btrc_element_attr_val_t;
  979. typedef struct
  980. {
  981. uint8_t attr_id;
  982. uint8_t num_val;
  983. uint8_t attr_val[WM_BTRC_MAX_APP_ATTR_SIZE];
  984. } tls_btrc_player_app_attr_t;
  985. typedef struct
  986. {
  987. uint8_t val;
  988. uint16_t charset_id;
  989. uint16_t str_len;
  990. uint8_t *p_str;
  991. } tls_btrc_player_app_ext_attr_val_t;
  992. typedef struct
  993. {
  994. uint8_t attr_id;
  995. uint16_t charset_id;
  996. uint16_t str_len;
  997. uint8_t *p_str;
  998. uint8_t num_val;
  999. tls_btrc_player_app_ext_attr_val_t ext_attr_val[WM_BTRC_MAX_APP_ATTR_SIZE];
  1000. } tls_btrc_player_app_ext_attr_t;
  1001. typedef union
  1002. {
  1003. tls_btrc_play_status_t play_status;
  1004. tls_btrc_uid_t track; /* queue position in NowPlaying */
  1005. uint32_t song_pos;
  1006. tls_btrc_player_settings_t player_setting;
  1007. } tls_btrc_register_notification_t;
  1008. typedef enum
  1009. {
  1010. WM_BTRC_PASSTHROUGH_RSP_EVT,
  1011. WM_BTRC_GROUPNAVIGATION_RSP_EVT,
  1012. WM_BTRC_CONNECTION_STATE_EVT,
  1013. WM_BTRC_CTRL_GETRCFEATURES_EVT,
  1014. WM_BTRC_CTRL_SETPLAYERAPPLICATIONSETTING_RSP_EVT,
  1015. WM_BTRC_CTRL_PLAYERAPPLICATIONSETTING_EVT,
  1016. WM_BTRC_CTRL_PLAYERAPPLICATIONSETTING_CHANGED_EVT,
  1017. WM_BTRC_CTRL_SETABSVOL_CMD_EVT,
  1018. WM_BTRC_CTRL_REGISTERNOTIFICATION_ABS_VOL_EVT,
  1019. WM_BTRC_CTRL_TRACK_CHANGED_EVT,
  1020. WM_BTRC_CTRL_PLAY_POSITION_CHANGED_EVT,
  1021. WM_BTRC_CTRL_PLAY_STATUS_CHANGED_EVT,
  1022. } tls_btrc_ctrl_evt_t;
  1023. typedef struct
  1024. {
  1025. int id;
  1026. int key_state;
  1027. } tls_btrc_passthrough_rsp_msg_t;
  1028. typedef struct
  1029. {
  1030. int id;
  1031. int key_state;
  1032. } tls_btrc_groupnavigation_rsp_msg_t;
  1033. typedef struct
  1034. {
  1035. uint8_t state;
  1036. tls_bt_addr_t *bd_addr;
  1037. } tls_btrc_connection_state_msg_t;
  1038. typedef struct
  1039. {
  1040. tls_bt_addr_t *bd_addr;
  1041. int features;
  1042. } tls_btrc_ctrl_getrcfeatures_msg_t;
  1043. typedef struct
  1044. {
  1045. tls_bt_addr_t *bd_addr;
  1046. uint8_t abs_vol;
  1047. uint8_t label;
  1048. } tls_btrc_ctrl_setabsvol_msg_t;
  1049. typedef struct
  1050. {
  1051. tls_bt_addr_t *bd_addr;
  1052. uint8_t label;
  1053. } tls_btrc_ctrl_registernotification_abs_vol_msg_t;
  1054. typedef struct
  1055. {
  1056. tls_bt_addr_t *bd_addr;
  1057. uint8_t accepted;
  1058. } tls_btrc_ctrl_setplayerapplicationsetting_rsp_msg_t;
  1059. typedef struct
  1060. {
  1061. tls_bt_addr_t *bd_addr;
  1062. uint8_t num_attr;
  1063. tls_btrc_player_app_attr_t *app_attrs;
  1064. uint8_t num_ext_attr;
  1065. tls_btrc_player_app_ext_attr_t *ext_attrs;
  1066. } tls_btrc_ctrl_playerapplicationsetting_msg_t;
  1067. typedef struct
  1068. {
  1069. tls_bt_addr_t *bd_addr;
  1070. tls_btrc_player_settings_t *p_vals;
  1071. } tls_btrc_ctrl_playerapplicationsetting_changed_msg_t;
  1072. typedef struct
  1073. {
  1074. tls_bt_addr_t *bd_addr;
  1075. uint8_t num_attr;
  1076. tls_btrc_element_attr_val_t *p_attrs;
  1077. } tls_btrc_ctrl_track_changed_msg_t;
  1078. typedef struct
  1079. {
  1080. tls_bt_addr_t *bd_addr;
  1081. uint32_t song_len;
  1082. uint32_t song_pos;
  1083. } tls_btrc_ctrl_play_position_changed_msg_t;
  1084. typedef struct
  1085. {
  1086. tls_bt_addr_t *bd_addr;
  1087. tls_btrc_play_status_t play_status;
  1088. } tls_btrc_ctrl_play_status_changed_msg_t;
  1089. typedef union
  1090. {
  1091. tls_btrc_passthrough_rsp_msg_t passthrough_rsp;
  1092. tls_btrc_groupnavigation_rsp_msg_t groupnavigation_rsp;
  1093. tls_btrc_connection_state_msg_t connection_state;
  1094. tls_btrc_ctrl_getrcfeatures_msg_t getrcfeatures;
  1095. tls_btrc_ctrl_setabsvol_msg_t setabsvol;
  1096. tls_btrc_ctrl_registernotification_abs_vol_msg_t registernotification_abs_vol;
  1097. tls_btrc_ctrl_setplayerapplicationsetting_rsp_msg_t setplayerapplicationsetting_rsp;
  1098. tls_btrc_ctrl_playerapplicationsetting_msg_t playerapplicationsetting;
  1099. tls_btrc_ctrl_playerapplicationsetting_changed_msg_t playerapplicationsetting_changed;
  1100. tls_btrc_ctrl_track_changed_msg_t track_changed;
  1101. tls_btrc_ctrl_play_position_changed_msg_t play_position_changed;
  1102. tls_btrc_ctrl_play_status_changed_msg_t play_status_changed;
  1103. } tls_btrc_ctrl_msg_t;
  1104. /** WM BT RC CTRL callback function */
  1105. typedef void (*tls_btrc_ctrl_callback_t)(tls_btrc_ctrl_evt_t event, tls_btrc_ctrl_msg_t *p_data);
  1106. typedef enum
  1107. {
  1108. WM_BTRC_REMOTE_FEATURE_EVT,
  1109. WM_BTRC_GET_PLAY_STATUS_EVT,
  1110. WM_BTRC_LIST_PLAYER_APP_ATTR_EVT,
  1111. WM_BTRC_LIST_PLAYER_APP_VALUES_EVT,
  1112. WM_BTRC_GET_PLAYER_APP_VALUE_EVT,
  1113. WM_BTRC_GET_PLAYER_APP_ATTRS_TEXT_EVT,
  1114. WM_BTRC_GET_PLAYER_APP_VALUES_TEXT_EVT,
  1115. WM_BTRC_SET_PLAYER_APP_VALUE_EVT,
  1116. WM_BTRC_GET_ELEMENT_ATTR_EVT,
  1117. WM_BTRC_REGISTER_NOTIFICATION_EVT,
  1118. WM_BTRC_VOLUME_CHANGED_EVT,
  1119. WM_BTRC_PASSTHROUGH_CMD_EVT,
  1120. } tls_btrc_evt_t;
  1121. typedef struct
  1122. {
  1123. tls_bt_addr_t *bd_addr;
  1124. tls_btrc_remote_features_t features;
  1125. } tls_btrc_remote_features_msg_t;
  1126. typedef struct
  1127. {
  1128. void *reserved;
  1129. } tls_btrc_get_play_status_msg_t;
  1130. typedef struct
  1131. {
  1132. void *reserved;
  1133. } tls_btrc_list_player_app_attr_msg_t;
  1134. typedef struct
  1135. {
  1136. tls_btrc_player_attr_t attr_id;
  1137. } tls_btrc_list_player_app_values_msg_t;
  1138. typedef struct
  1139. {
  1140. uint8_t num_attr;
  1141. tls_btrc_player_attr_t *p_attrs;
  1142. } tls_btrc_get_player_app_value_msg_t;
  1143. typedef struct
  1144. {
  1145. uint8_t attr_id;
  1146. uint8_t num_val;
  1147. uint8_t *p_vals;
  1148. } tls_btrc_get_player_app_attrs_text_msg_t;
  1149. typedef struct
  1150. {
  1151. uint8_t num_attr;
  1152. tls_btrc_player_attr_t *p_attrs;
  1153. } tls_btrc_get_player_app_values_text_msg_t;
  1154. typedef struct
  1155. {
  1156. tls_btrc_player_settings_t *p_vals;
  1157. } tls_btrc_set_player_app_value_msg_t;
  1158. typedef struct
  1159. {
  1160. uint8_t num_attr;
  1161. tls_btrc_media_attr_t *p_attrs;
  1162. } tls_btrc_get_element_attr_msg_t;
  1163. typedef struct
  1164. {
  1165. tls_btrc_event_id_t event_id;
  1166. uint32_t param;
  1167. } tls_btrc_register_notification_msg_t;
  1168. typedef struct
  1169. {
  1170. uint8_t volume;
  1171. uint8_t ctype;
  1172. } tls_btrc_volume_change_msg_t;
  1173. typedef struct
  1174. {
  1175. int id;
  1176. int key_state;
  1177. } tls_btrc_passthrough_cmd_msg_t;
  1178. typedef union
  1179. {
  1180. tls_btrc_remote_features_msg_t remote_features;
  1181. tls_btrc_get_play_status_msg_t get_play_status;
  1182. tls_btrc_list_player_app_attr_msg_t list_player_app_attr;
  1183. tls_btrc_list_player_app_values_msg_t list_player_app_values;
  1184. tls_btrc_get_player_app_value_msg_t get_player_app_value;
  1185. tls_btrc_get_player_app_attrs_text_msg_t get_player_app_attrs_text;
  1186. tls_btrc_get_player_app_values_text_msg_t get_player_app_values_text;
  1187. tls_btrc_set_player_app_value_msg_t set_player_app_value;
  1188. tls_btrc_get_element_attr_msg_t get_element_attr;
  1189. tls_btrc_register_notification_msg_t register_notification;
  1190. tls_btrc_volume_change_msg_t volume_change;
  1191. tls_btrc_passthrough_cmd_msg_t passthrough_cmd;
  1192. } tls_btrc_msg_t;
  1193. /** WM BT RC callback function */
  1194. typedef void (*tls_btrc_callback_t)(tls_btrc_evt_t event, tls_btrc_msg_t *p_data);
  1195. /*************************************************************************************************************/
  1196. typedef enum
  1197. {
  1198. WM_BTHF_CLIENT_CONNECTION_STATE_DISCONNECTED = 0,
  1199. WM_BTHF_CLIENT_CONNECTION_STATE_CONNECTING,
  1200. WM_BTHF_CLIENT_CONNECTION_STATE_CONNECTED,
  1201. WM_BTHF_CLIENT_CONNECTION_STATE_SLC_CONNECTED,
  1202. WM_BTHF_CLIENT_CONNECTION_STATE_DISCONNECTING
  1203. } tls_bthf_client_connection_state_t;
  1204. typedef enum
  1205. {
  1206. WM_BTHF_CLIENT_AUDIO_STATE_DISCONNECTED = 0,
  1207. WM_BTHF_CLIENT_AUDIO_STATE_CONNECTING,
  1208. WM_BTHF_CLIENT_AUDIO_STATE_CONNECTED,
  1209. WM_BTHF_CLIENT_AUDIO_STATE_CONNECTED_MSBC,
  1210. } tls_bthf_client_audio_state_t;
  1211. typedef enum
  1212. {
  1213. WM_BTHF_CLIENT_VR_STATE_STOPPED = 0,
  1214. WM_BTHF_CLIENT_VR_STATE_STARTED
  1215. } tls_bthf_client_vr_state_t;
  1216. typedef enum
  1217. {
  1218. WM_BTHF_CLIENT_VOLUME_TYPE_SPK = 0,
  1219. WM_BTHF_CLIENT_VOLUME_TYPE_MIC
  1220. } tls_bthf_client_volume_type_t;
  1221. typedef enum
  1222. {
  1223. WM_BTHF_CLIENT_NETWORK_STATE_NOT_AVAILABLE = 0,
  1224. WM_BTHF_CLIENT_NETWORK_STATE_AVAILABLE
  1225. } tls_bthf_client_network_state_t;
  1226. typedef enum
  1227. {
  1228. WM_BTHF_CLIENT_SERVICE_TYPE_HOME = 0,
  1229. WM_BTHF_CLIENT_SERVICE_TYPE_ROAMING
  1230. } tls_bthf_client_service_type_t;
  1231. typedef enum
  1232. {
  1233. WM_BTHF_CLIENT_CALL_STATE_ACTIVE = 0,
  1234. WM_BTHF_CLIENT_CALL_STATE_HELD,
  1235. WM_BTHF_CLIENT_CALL_STATE_DIALING,
  1236. WM_BTHF_CLIENT_CALL_STATE_ALERTING,
  1237. WM_BTHF_CLIENT_CALL_STATE_INCOMING,
  1238. WM_BTHF_CLIENT_CALL_STATE_WAITING,
  1239. WM_BTHF_CLIENT_CALL_STATE_HELD_BY_RESP_HOLD,
  1240. } tls_bthf_client_call_state_t;
  1241. typedef enum
  1242. {
  1243. WM_BTHF_CLIENT_CALL_NO_CALLS_IN_PROGRESS = 0,
  1244. WM_BTHF_CLIENT_CALL_CALLS_IN_PROGRESS
  1245. } tls_bthf_client_call_t;
  1246. typedef enum
  1247. {
  1248. WM_BTHF_CLIENT_CALLSETUP_NONE = 0,
  1249. WM_BTHF_CLIENT_CALLSETUP_INCOMING,
  1250. WM_BTHF_CLIENT_CALLSETUP_OUTGOING,
  1251. WM_BTHF_CLIENT_CALLSETUP_ALERTING
  1252. } tls_bthf_client_callsetup_t;
  1253. typedef enum
  1254. {
  1255. WM_BTHF_CLIENT_CALLHELD_NONE = 0,
  1256. WM_BTHF_CLIENT_CALLHELD_HOLD_AND_ACTIVE,
  1257. WM_BTHF_CLIENT_CALLHELD_HOLD,
  1258. } tls_bthf_client_callheld_t;
  1259. typedef enum
  1260. {
  1261. WM_BTHF_CLIENT_RESP_AND_HOLD_HELD = 0,
  1262. WM_BTRH_CLIENT_RESP_AND_HOLD_ACCEPT,
  1263. WM_BTRH_CLIENT_RESP_AND_HOLD_REJECT,
  1264. } tls_bthf_client_resp_and_hold_t;
  1265. typedef enum
  1266. {
  1267. WM_BTHF_CLIENT_CALL_DIRECTION_OUTGOING = 0,
  1268. WM_BTHF_CLIENT_CALL_DIRECTION_INCOMING
  1269. } tls_bthf_client_call_direction_t;
  1270. typedef enum
  1271. {
  1272. WM_BTHF_CLIENT_CALL_MPTY_TYPE_SINGLE = 0,
  1273. WM_BTHF_CLIENT_CALL_MPTY_TYPE_MULTI
  1274. } tls_bthf_client_call_mpty_type_t;
  1275. typedef enum
  1276. {
  1277. WM_BTHF_CLIENT_CMD_COMPLETE_OK = 0,
  1278. WM_BTHF_CLIENT_CMD_COMPLETE_ERROR,
  1279. WM_BTHF_CLIENT_CMD_COMPLETE_ERROR_NO_CARRIER,
  1280. WM_BTHF_CLIENT_CMD_COMPLETE_ERROR_BUSY,
  1281. WM_BTHF_CLIENT_CMD_COMPLETE_ERROR_NO_ANSWER,
  1282. WM_BTHF_CLIENT_CMD_COMPLETE_ERROR_DELAYED,
  1283. WM_BTHF_CLIENT_CMD_COMPLETE_ERROR_BLACKLISTED,
  1284. WM_BTHF_CLIENT_CMD_COMPLETE_ERROR_CME
  1285. } tls_bthf_client_cmd_complete_t;
  1286. typedef enum
  1287. {
  1288. WM_BTHF_CLIENT_CALL_ACTION_CHLD_0 = 0,
  1289. WM_BTHF_CLIENT_CALL_ACTION_CHLD_1,
  1290. WM_BTHF_CLIENT_CALL_ACTION_CHLD_2,
  1291. WM_BTHF_CLIENT_CALL_ACTION_CHLD_3,
  1292. WM_BTHF_CLIENT_CALL_ACTION_CHLD_4,
  1293. WM_BTHF_CLIENT_CALL_ACTION_CHLD_1x,
  1294. WM_BTHF_CLIENT_CALL_ACTION_CHLD_2x,
  1295. WM_BTHF_CLIENT_CALL_ACTION_ATA,
  1296. WM_BTHF_CLIENT_CALL_ACTION_CHUP,
  1297. WM_BTHF_CLIENT_CALL_ACTION_BTRH_0,
  1298. WM_BTHF_CLIENT_CALL_ACTION_BTRH_1,
  1299. WM_BTHF_CLIENT_CALL_ACTION_BTRH_2,
  1300. } tls_bthf_client_call_action_t;
  1301. typedef enum
  1302. {
  1303. WM_BTHF_CLIENT_SERVICE_UNKNOWN = 0,
  1304. WM_BTHF_CLIENT_SERVICE_VOICE,
  1305. WM_BTHF_CLIENT_SERVICE_FAX
  1306. } tls_bthf_client_subscriber_service_type_t;
  1307. typedef enum
  1308. {
  1309. WM_BTHF_CLIENT_IN_BAND_RINGTONE_NOT_PROVIDED = 0,
  1310. WM_BTHF_CLIENT_IN_BAND_RINGTONE_PROVIDED,
  1311. } tls_bthf_client_in_band_ring_state_t;
  1312. /* Peer features masks */
  1313. #define WM_BTHF_CLIENT_PEER_FEAT_3WAY 0x00000001 /* Three-way calling */
  1314. #define WM_BTHF_CLIENT_PEER_FEAT_ECNR 0x00000002 /* Echo cancellation and/or noise reduction */
  1315. #define WM_BTHF_CLIENT_PEER_FEAT_VREC 0x00000004 /* Voice recognition */
  1316. #define WM_BTHF_CLIENT_PEER_FEAT_INBAND 0x00000008 /* In-band ring tone */
  1317. #define WM_BTHF_CLIENT_PEER_FEAT_VTAG 0x00000010 /* Attach a phone number to a voice tag */
  1318. #define WM_BTHF_CLIENT_PEER_FEAT_REJECT 0x00000020 /* Ability to reject incoming call */
  1319. #define WM_BTHF_CLIENT_PEER_FEAT_ECS 0x00000040 /* Enhanced Call Status */
  1320. #define WM_BTHF_CLIENT_PEER_FEAT_ECC 0x00000080 /* Enhanced Call Control */
  1321. #define WM_BTHF_CLIENT_PEER_FEAT_EXTERR 0x00000100 /* Extended error codes */
  1322. #define WM_BTHF_CLIENT_PEER_FEAT_CODEC 0x00000200 /* Codec Negotiation */
  1323. /* Peer call handling features masks */
  1324. #define WM_BTHF_CLIENT_CHLD_FEAT_REL 0x00000001 /* 0 Release waiting call or held calls */
  1325. #define WM_BTHF_CLIENT_CHLD_FEAT_REL_ACC 0x00000002 /* 1 Release active calls and accept other
  1326. (waiting or held) cal */
  1327. #define WM_BTHF_CLIENT_CHLD_FEAT_REL_X 0x00000004 /* 1x Release specified active call only */
  1328. #define WM_BTHF_CLIENT_CHLD_FEAT_HOLD_ACC 0x00000008 /* 2 Active calls on hold and accept other
  1329. (waiting or held) call */
  1330. #define WM_BTHF_CLIENT_CHLD_FEAT_PRIV_X 0x00000010 /* 2x Request private mode with specified
  1331. call (put the rest on hold) */
  1332. #define WM_BTHF_CLIENT_CHLD_FEAT_MERGE 0x00000020 /* 3 Add held call to multiparty */
  1333. #define WM_BTHF_CLIENT_CHLD_FEAT_MERGE_DETACH 0x00000040 /* 4 Connect two calls and leave
  1334. (disconnect from) multiparty */
  1335. typedef enum
  1336. {
  1337. WM_BTHF_CLIENT_CONNECTION_STATE_EVT,
  1338. WM_BTHF_CLIENT_AUDIO_STATE_EVT,
  1339. WM_BTHF_CLIENT_VR_CMD_EVT,
  1340. WM_BTHF_CLIENT_NETWORK_STATE_EVT,
  1341. WM_BTHF_CLIENT_NETWORK_ROAMING_EVT,
  1342. WM_BTHF_CLIENT_NETWORK_SIGNAL_EVT,
  1343. WM_BTHF_CLIENT_BATTERY_LEVEL_EVT,
  1344. WM_BTHF_CLIENT_CURRENT_OPERATOR_EVT,
  1345. WM_BTHF_CLIENT_CALL_EVT,
  1346. WM_BTHF_CLIENT_CALLSETUP_EVT,
  1347. WM_BTHF_CLIENT_CALLHELD_EVT,
  1348. WM_BTHF_CLIENT_RESP_AND_HOLD_EVT,
  1349. WM_BTHF_CLIENT_CLIP_EVT,
  1350. WM_BTHF_CLIENT_CALL_WAITING_EVT,
  1351. WM_BTHF_CLIENT_CURRENT_CALLS_EVT,
  1352. WM_BTHF_CLIENT_VOLUME_CHANGE_EVT,
  1353. WM_BTHF_CLIENT_CMD_COMPLETE_EVT,
  1354. WM_BTHF_CLIENT_SUBSCRIBER_INFO_EVT,
  1355. WM_BTHF_CLIENT_IN_BAND_RING_TONE_EVT,
  1356. WM_BTHF_CLIENT_LAST_VOICE_TAG_NUMBER_EVT,
  1357. WM_BTHF_CLIENT_RING_INDICATION_EVT,
  1358. WM_BTHF_CLIENT_AUDIO_PAYLOAD_EVT,
  1359. } tls_bthf_client_evt_t;
  1360. typedef struct
  1361. {
  1362. tls_bthf_client_connection_state_t state;
  1363. unsigned int peer_feat;
  1364. unsigned int chld_feat;
  1365. tls_bt_addr_t *bd_addr;
  1366. } tls_bthf_client_connection_state_msg_t;
  1367. typedef struct
  1368. {
  1369. tls_bthf_client_audio_state_t state;
  1370. tls_bt_addr_t *bd_addr;
  1371. } tls_bthf_client_audio_state_msg_t;
  1372. typedef struct
  1373. {
  1374. tls_bthf_client_vr_state_t state;
  1375. } tls_bthf_client_vr_cmd_msg_t;
  1376. typedef struct
  1377. {
  1378. tls_bthf_client_network_state_t state;
  1379. } tls_bthf_client_network_state_msg_t;
  1380. typedef struct
  1381. {
  1382. tls_bthf_client_service_type_t type;
  1383. } tls_bthf_client_network_roaming_msg_t;
  1384. typedef struct
  1385. {
  1386. int signal_strength;
  1387. } tls_bthf_client_network_signal_msg_t;
  1388. typedef struct
  1389. {
  1390. int battery_level;
  1391. } tls_bthf_client_battery_level_msg_t;
  1392. typedef struct
  1393. {
  1394. char* name;
  1395. } tls_bthf_client_current_operator_msg_t;
  1396. typedef struct
  1397. {
  1398. tls_bthf_client_call_t call;
  1399. } tls_bthf_client_call_msg_t;
  1400. typedef struct
  1401. {
  1402. tls_bthf_client_callsetup_t callsetup;
  1403. } tls_bthf_client_callsetup_msg_t;
  1404. typedef struct
  1405. {
  1406. tls_bthf_client_callheld_t callheld;
  1407. } tls_bthf_client_callheld_msg_t;
  1408. typedef struct
  1409. {
  1410. tls_bthf_client_resp_and_hold_t resp_and_hold;
  1411. } tls_bthf_client_resp_and_hold_msg_t;
  1412. typedef struct
  1413. {
  1414. char *number;
  1415. } tls_bthf_client_clip_msg_t;
  1416. typedef struct
  1417. {
  1418. char *number;
  1419. } tls_bthf_client_call_waiting_msg_t;
  1420. typedef struct
  1421. {
  1422. int index;
  1423. tls_bthf_client_call_direction_t dir;
  1424. tls_bthf_client_call_state_t state;
  1425. tls_bthf_client_call_mpty_type_t mpty;
  1426. char *number;
  1427. } tls_bthf_client_current_calls_msg_t;
  1428. typedef struct
  1429. {
  1430. tls_bthf_client_volume_type_t type;
  1431. int volume;
  1432. } tls_bthf_client_volume_change_msg_t;
  1433. typedef struct
  1434. {
  1435. tls_bthf_client_cmd_complete_t type;
  1436. int cme;
  1437. } tls_bthf_client_cmd_complete_msg_t;
  1438. typedef struct
  1439. {
  1440. const char *name;
  1441. tls_bthf_client_subscriber_service_type_t type;
  1442. } tls_bthf_client_subscriber_info_msg_t;
  1443. typedef struct
  1444. {
  1445. tls_bthf_client_in_band_ring_state_t state;
  1446. } tls_bthf_client_in_band_ring_tone_msg_t;
  1447. typedef struct
  1448. {
  1449. char *number;
  1450. } tls_bthf_client_last_voice_tag_number_msg_t;
  1451. typedef struct
  1452. {
  1453. int ring;
  1454. } tls_bthf_client_ring_indication_msg_t;
  1455. typedef struct
  1456. {
  1457. tls_bt_addr_t *bd_addr;
  1458. uint8_t audio_format;
  1459. uint8_t *payload;
  1460. uint16_t payload_length;
  1461. } tls_bthf_audio_payload_msg_t;
  1462. typedef union
  1463. {
  1464. tls_bthf_client_connection_state_msg_t connection_state_msg;
  1465. tls_bthf_client_audio_state_msg_t audio_state_msg;
  1466. tls_bthf_client_vr_cmd_msg_t vr_cmd_msg;
  1467. tls_bthf_client_network_state_msg_t network_state_msg;
  1468. tls_bthf_client_network_roaming_msg_t network_roaming_msg;
  1469. tls_bthf_client_network_signal_msg_t network_signal_msg;
  1470. tls_bthf_client_battery_level_msg_t battery_level_msg;
  1471. tls_bthf_client_current_operator_msg_t current_operator_msg;
  1472. tls_bthf_client_call_msg_t call_msg;
  1473. tls_bthf_client_callsetup_msg_t callsetup_msg;
  1474. tls_bthf_client_callheld_msg_t callheld_msg;
  1475. tls_bthf_client_resp_and_hold_msg_t resp_and_hold_msg;
  1476. tls_bthf_client_clip_msg_t clip_msg;
  1477. tls_bthf_client_call_waiting_msg_t call_waiting_msg;
  1478. tls_bthf_client_current_calls_msg_t current_calls_msg;
  1479. tls_bthf_client_volume_change_msg_t volume_change_msg;
  1480. tls_bthf_client_cmd_complete_msg_t cmd_complete_msg;
  1481. tls_bthf_client_subscriber_info_msg_t subscriber_info_msg;
  1482. tls_bthf_client_in_band_ring_tone_msg_t in_band_ring_tone_msg;
  1483. tls_bthf_client_last_voice_tag_number_msg_t last_voice_tag_number_msg;
  1484. tls_bthf_client_ring_indication_msg_t ring_indication_msg;
  1485. tls_bthf_audio_payload_msg_t audio_payload_msg;
  1486. } tls_bthf_client_msg_t;
  1487. /** WM BT HFP CLIENT callback function */
  1488. typedef void (*tls_bthf_client_callback_t)(tls_bthf_client_evt_t event, tls_bthf_client_msg_t *p_data);
  1489. /******************************************************************************************/
  1490. /* Security Setting Mask */
  1491. #define WM_SPP_SEC_NONE 0x0000 /* No security*/
  1492. #define WM_SPP_SEC_AUTHORIZE 0x0001 /*Authorization required (only needed for out going connection ) */
  1493. #define WM_SPP_SEC_AUTHENTICATE 0x0012 /*Authentication required*/
  1494. #define WM_SPP_SEC_ENCRYPT 0x0024 /*Encryption required*/
  1495. #define WM_SPP_SEC_MODE4_LEVEL4 0x0040 /*Mode 4 level 4 service, i.e. incoming/outgoing MITM and P-256 encryption*/
  1496. #define WM_SPP_SEC_MITM 0x3000 /*Man-In-The_Middle protection*/
  1497. #define WM_SPP_SEC_IN_16_DIGITS 0x4000 /*Min 16 digit for pin code*/
  1498. typedef uint16_t wm_spp_sec_t;
  1499. #define WM_SPP_MAX_SCN 31
  1500. typedef enum {
  1501. WM_SPP_ROLE_CLIENT = 0,
  1502. WM_SPP_ROLE_SERVER = 1,
  1503. } tls_spp_role_t;
  1504. typedef enum {
  1505. WM_SPP_INIT_EVT = 0,
  1506. WM_SPP_DISCOVERY_COMP_EVT = 8,
  1507. WM_SPP_OPEN_EVT = 26,
  1508. WM_SPP_CLOSE_EVT = 27,
  1509. WM_SPP_START_EVT = 28,
  1510. WM_SPP_CL_INIT_EVT = 29,
  1511. WM_SPP_DATA_IND_EVT = 30,
  1512. WM_SPP_CONG_EVT = 31,
  1513. WM_SPP_WRITE_EVT = 33,
  1514. WM_SPP_SRV_OPEN_EVT = 34,
  1515. } tls_spp_event_t;
  1516. typedef struct {
  1517. uint8_t status;
  1518. } tls_spp_init_msg_t ;
  1519. typedef struct {
  1520. uint8_t status;
  1521. uint8_t scn_num;
  1522. uint8_t scn[WM_SPP_MAX_SCN];
  1523. } tls_spp_disc_comp_msg_t;
  1524. typedef struct {
  1525. uint8_t status;
  1526. uint32_t handle;
  1527. uint8_t addr[6];
  1528. } tls_spp_open_msg_t;
  1529. typedef struct {
  1530. uint8_t status;
  1531. uint32_t handle;
  1532. uint32_t new_listen_handle;
  1533. uint8_t addr[6];
  1534. } tls_spp_srv_open_msg_t;
  1535. typedef struct {
  1536. uint8_t status;
  1537. uint32_t port_status;
  1538. uint32_t handle;
  1539. bool local;
  1540. } tls_spp_close_msg_t;
  1541. typedef struct {
  1542. uint8_t status;
  1543. uint32_t handle;
  1544. uint8_t sec_id;
  1545. bool use_co_rfc;
  1546. } tls_spp_start_msg_t;
  1547. typedef struct {
  1548. uint8_t status;
  1549. uint32_t handle;
  1550. uint8_t sec_id;
  1551. bool use_co_rfc;
  1552. } tls_spp_cli_init_msg_t;
  1553. typedef struct {
  1554. uint8_t status;
  1555. uint32_t handle;
  1556. int length;
  1557. bool congest;
  1558. } tls_spp_write_msg_t;
  1559. typedef struct {
  1560. uint8_t status;
  1561. uint32_t handle;
  1562. uint16_t length;
  1563. uint8_t *data;
  1564. } tls_spp_data_ind_msg_t;
  1565. typedef struct {
  1566. uint8_t status;
  1567. uint32_t handle;
  1568. bool congest;
  1569. } tls_spp_cong_msg_t;
  1570. typedef union
  1571. {
  1572. tls_spp_init_msg_t init_msg;
  1573. tls_spp_disc_comp_msg_t disc_comp_msg;
  1574. tls_spp_open_msg_t open_msg;
  1575. tls_spp_srv_open_msg_t srv_open_msg;
  1576. tls_spp_close_msg_t close_msg;
  1577. tls_spp_start_msg_t start_msg;
  1578. tls_spp_cli_init_msg_t cli_init_msg;
  1579. tls_spp_write_msg_t write_msg;
  1580. tls_spp_data_ind_msg_t data_ind_msg;
  1581. tls_spp_cong_msg_t congest_msg;
  1582. } tls_spp_msg_t;
  1583. /** WM BT SPP callback function */
  1584. typedef void (*tls_bt_spp_callback_t)(tls_spp_event_t event, tls_spp_msg_t *p_data);
  1585. typedef enum
  1586. {
  1587. BLE_UART_SERVER_MODE,
  1588. BLE_UART_CLIENT_MODE,
  1589. BLE_UART_UNKNOWN_MODE,
  1590. } tls_ble_uart_mode_t;
  1591. typedef void (*tls_ble_output_func_ptr)(uint8_t *p_data, uint32_t length);
  1592. #define TLS_HAL_CBACK(P_CB, P_CBACK, ...)\
  1593. if (P_CB && P_CB->P_CBACK) { \
  1594. P_CB->P_CBACK(__VA_ARGS__); \
  1595. } \
  1596. else { \
  1597. assert(0); \
  1598. }
  1599. #endif /* WM_BT_DEF_H */