wm_bt_def.h 60 KB

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