hci.h 62 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. /*
  3. *
  4. * BlueZ - Bluetooth protocol stack for Linux
  5. *
  6. * Copyright (C) 2000-2001 Qualcomm Incorporated
  7. * Copyright (C) 2002-2003 Maxim Krasnyansky <maxk@qualcomm.com>
  8. * Copyright (C) 2002-2010 Marcel Holtmann <marcel@holtmann.org>
  9. *
  10. *
  11. */
  12. #ifndef __HCI_H
  13. #define __HCI_H
  14. #ifdef __cplusplus
  15. extern "C" {
  16. #endif
  17. #include <sys/socket.h>
  18. #define HCI_MAX_DEV 16
  19. #define HCI_MAX_AMP_SIZE (1492 + 4)
  20. #define HCI_MAX_ACL_SIZE 1024
  21. #define HCI_MAX_SCO_SIZE 255
  22. #define HCI_MAX_EVENT_SIZE 260
  23. #define HCI_MAX_FRAME_SIZE (HCI_MAX_AMP_SIZE + 4)
  24. /* HCI dev events */
  25. #define HCI_DEV_REG 1
  26. #define HCI_DEV_UNREG 2
  27. #define HCI_DEV_UP 3
  28. #define HCI_DEV_DOWN 4
  29. #define HCI_DEV_SUSPEND 5
  30. #define HCI_DEV_RESUME 6
  31. /* HCI bus types */
  32. #define HCI_VIRTUAL 0
  33. #define HCI_USB 1
  34. #define HCI_PCCARD 2
  35. #define HCI_UART 3
  36. #define HCI_RS232 4
  37. #define HCI_PCI 5
  38. #define HCI_SDIO 6
  39. #define HCI_SPI 7
  40. #define HCI_I2C 8
  41. #define HCI_SMD 9
  42. #define HCI_VIRTIO 10
  43. /* HCI controller types */
  44. #define HCI_PRIMARY 0x00
  45. #define HCI_AMP 0x01
  46. #define HCI_BREDR HCI_PRIMARY
  47. /* HCI device flags */
  48. enum {
  49. HCI_UP,
  50. HCI_INIT,
  51. HCI_RUNNING,
  52. HCI_PSCAN,
  53. HCI_ISCAN,
  54. HCI_AUTH,
  55. HCI_ENCRYPT,
  56. HCI_INQUIRY,
  57. HCI_RAW,
  58. };
  59. /* LE address type */
  60. enum {
  61. LE_PUBLIC_ADDRESS = 0x00,
  62. LE_RANDOM_ADDRESS = 0x01
  63. };
  64. /* HCI ioctl defines */
  65. #define HCIDEVUP _IOW('H', 201, int)
  66. #define HCIDEVDOWN _IOW('H', 202, int)
  67. #define HCIDEVRESET _IOW('H', 203, int)
  68. #define HCIDEVRESTAT _IOW('H', 204, int)
  69. #define HCIGETDEVLIST _IOR('H', 210, int)
  70. #define HCIGETDEVINFO _IOR('H', 211, int)
  71. #define HCIGETCONNLIST _IOR('H', 212, int)
  72. #define HCIGETCONNINFO _IOR('H', 213, int)
  73. #define HCIGETAUTHINFO _IOR('H', 215, int)
  74. #define HCISETRAW _IOW('H', 220, int)
  75. #define HCISETSCAN _IOW('H', 221, int)
  76. #define HCISETAUTH _IOW('H', 222, int)
  77. #define HCISETENCRYPT _IOW('H', 223, int)
  78. #define HCISETPTYPE _IOW('H', 224, int)
  79. #define HCISETLINKPOL _IOW('H', 225, int)
  80. #define HCISETLINKMODE _IOW('H', 226, int)
  81. #define HCISETACLMTU _IOW('H', 227, int)
  82. #define HCISETSCOMTU _IOW('H', 228, int)
  83. #define HCIBLOCKADDR _IOW('H', 230, int)
  84. #define HCIUNBLOCKADDR _IOW('H', 231, int)
  85. #define HCIINQUIRY _IOR('H', 240, int)
  86. #ifndef __NO_HCI_DEFS
  87. /* HCI Packet types */
  88. #define HCI_COMMAND_PKT 0x01
  89. #define HCI_ACLDATA_PKT 0x02
  90. #define HCI_SCODATA_PKT 0x03
  91. #define HCI_EVENT_PKT 0x04
  92. #define HCI_ISODATA_PKT 0x05
  93. #define HCI_VENDOR_PKT 0xff
  94. /* HCI Packet types */
  95. #define HCI_2DH1 0x0002
  96. #define HCI_3DH1 0x0004
  97. #define HCI_DM1 0x0008
  98. #define HCI_DH1 0x0010
  99. #define HCI_2DH3 0x0100
  100. #define HCI_3DH3 0x0200
  101. #define HCI_DM3 0x0400
  102. #define HCI_DH3 0x0800
  103. #define HCI_2DH5 0x1000
  104. #define HCI_3DH5 0x2000
  105. #define HCI_DM5 0x4000
  106. #define HCI_DH5 0x8000
  107. #define HCI_HV1 0x0020
  108. #define HCI_HV2 0x0040
  109. #define HCI_HV3 0x0080
  110. #define HCI_EV3 0x0008
  111. #define HCI_EV4 0x0010
  112. #define HCI_EV5 0x0020
  113. #define HCI_2EV3 0x0040
  114. #define HCI_3EV3 0x0080
  115. #define HCI_2EV5 0x0100
  116. #define HCI_3EV5 0x0200
  117. #define SCO_PTYPE_MASK (HCI_HV1 | HCI_HV2 | HCI_HV3)
  118. #define ACL_PTYPE_MASK (HCI_DM1 | HCI_DH1 | HCI_DM3 | HCI_DH3 | HCI_DM5 | HCI_DH5)
  119. /* HCI Error codes */
  120. #define HCI_UNKNOWN_COMMAND 0x01
  121. #define HCI_NO_CONNECTION 0x02
  122. #define HCI_HARDWARE_FAILURE 0x03
  123. #define HCI_PAGE_TIMEOUT 0x04
  124. #define HCI_AUTHENTICATION_FAILURE 0x05
  125. #define HCI_PIN_OR_KEY_MISSING 0x06
  126. #define HCI_MEMORY_FULL 0x07
  127. #define HCI_CONNECTION_TIMEOUT 0x08
  128. #define HCI_MAX_NUMBER_OF_CONNECTIONS 0x09
  129. #define HCI_MAX_NUMBER_OF_SCO_CONNECTIONS 0x0a
  130. #define HCI_ACL_CONNECTION_EXISTS 0x0b
  131. #define HCI_COMMAND_DISALLOWED 0x0c
  132. #define HCI_REJECTED_LIMITED_RESOURCES 0x0d
  133. #define HCI_REJECTED_SECURITY 0x0e
  134. #define HCI_REJECTED_PERSONAL 0x0f
  135. #define HCI_HOST_TIMEOUT 0x10
  136. #define HCI_UNSUPPORTED_FEATURE 0x11
  137. #define HCI_INVALID_PARAMETERS 0x12
  138. #define HCI_OE_USER_ENDED_CONNECTION 0x13
  139. #define HCI_OE_LOW_RESOURCES 0x14
  140. #define HCI_OE_POWER_OFF 0x15
  141. #define HCI_CONNECTION_TERMINATED 0x16
  142. #define HCI_REPEATED_ATTEMPTS 0x17
  143. #define HCI_PAIRING_NOT_ALLOWED 0x18
  144. #define HCI_UNKNOWN_LMP_PDU 0x19
  145. #define HCI_UNSUPPORTED_REMOTE_FEATURE 0x1a
  146. #define HCI_SCO_OFFSET_REJECTED 0x1b
  147. #define HCI_SCO_INTERVAL_REJECTED 0x1c
  148. #define HCI_AIR_MODE_REJECTED 0x1d
  149. #define HCI_INVALID_LMP_PARAMETERS 0x1e
  150. #define HCI_UNSPECIFIED_ERROR 0x1f
  151. #define HCI_UNSUPPORTED_LMP_PARAMETER_VALUE 0x20
  152. #define HCI_ROLE_CHANGE_NOT_ALLOWED 0x21
  153. #define HCI_LMP_RESPONSE_TIMEOUT 0x22
  154. #define HCI_LMP_ERROR_TRANSACTION_COLLISION 0x23
  155. #define HCI_LMP_PDU_NOT_ALLOWED 0x24
  156. #define HCI_ENCRYPTION_MODE_NOT_ACCEPTED 0x25
  157. #define HCI_UNIT_LINK_KEY_USED 0x26
  158. #define HCI_QOS_NOT_SUPPORTED 0x27
  159. #define HCI_INSTANT_PASSED 0x28
  160. #define HCI_PAIRING_NOT_SUPPORTED 0x29
  161. #define HCI_TRANSACTION_COLLISION 0x2a
  162. #define HCI_QOS_UNACCEPTABLE_PARAMETER 0x2c
  163. #define HCI_QOS_REJECTED 0x2d
  164. #define HCI_CLASSIFICATION_NOT_SUPPORTED 0x2e
  165. #define HCI_INSUFFICIENT_SECURITY 0x2f
  166. #define HCI_PARAMETER_OUT_OF_RANGE 0x30
  167. #define HCI_ROLE_SWITCH_PENDING 0x32
  168. #define HCI_SLOT_VIOLATION 0x34
  169. #define HCI_ROLE_SWITCH_FAILED 0x35
  170. #define HCI_EIR_TOO_LARGE 0x36
  171. #define HCI_SIMPLE_PAIRING_NOT_SUPPORTED 0x37
  172. #define HCI_HOST_BUSY_PAIRING 0x38
  173. /* ACL flags */
  174. #define ACL_START_NO_FLUSH 0x00
  175. #define ACL_CONT 0x01
  176. #define ACL_START 0x02
  177. #define ACL_ACTIVE_BCAST 0x04
  178. #define ACL_PICO_BCAST 0x08
  179. /* Baseband links */
  180. #define SCO_LINK 0x00
  181. #define ACL_LINK 0x01
  182. #define ESCO_LINK 0x02
  183. /* LMP features */
  184. #define LMP_3SLOT 0x01
  185. #define LMP_5SLOT 0x02
  186. #define LMP_ENCRYPT 0x04
  187. #define LMP_SOFFSET 0x08
  188. #define LMP_TACCURACY 0x10
  189. #define LMP_RSWITCH 0x20
  190. #define LMP_HOLD 0x40
  191. #define LMP_SNIFF 0x80
  192. #define LMP_PARK 0x01
  193. #define LMP_RSSI 0x02
  194. #define LMP_QUALITY 0x04
  195. #define LMP_SCO 0x08
  196. #define LMP_HV2 0x10
  197. #define LMP_HV3 0x20
  198. #define LMP_ULAW 0x40
  199. #define LMP_ALAW 0x80
  200. #define LMP_CVSD 0x01
  201. #define LMP_PSCHEME 0x02
  202. #define LMP_PCONTROL 0x04
  203. #define LMP_TRSP_SCO 0x08
  204. #define LMP_BCAST_ENC 0x80
  205. #define LMP_EDR_ACL_2M 0x02
  206. #define LMP_EDR_ACL_3M 0x04
  207. #define LMP_ENH_ISCAN 0x08
  208. #define LMP_ILACE_ISCAN 0x10
  209. #define LMP_ILACE_PSCAN 0x20
  210. #define LMP_RSSI_INQ 0x40
  211. #define LMP_ESCO 0x80
  212. #define LMP_EV4 0x01
  213. #define LMP_EV5 0x02
  214. #define LMP_AFH_CAP_SLV 0x08
  215. #define LMP_AFH_CLS_SLV 0x10
  216. #define LMP_NO_BREDR 0x20
  217. #define LMP_LE 0x40
  218. #define LMP_EDR_3SLOT 0x80
  219. #define LMP_EDR_5SLOT 0x01
  220. #define LMP_SNIFF_SUBR 0x02
  221. #define LMP_PAUSE_ENC 0x04
  222. #define LMP_AFH_CAP_MST 0x08
  223. #define LMP_AFH_CLS_MST 0x10
  224. #define LMP_EDR_ESCO_2M 0x20
  225. #define LMP_EDR_ESCO_3M 0x40
  226. #define LMP_EDR_3S_ESCO 0x80
  227. #define LMP_EXT_INQ 0x01
  228. #define LMP_LE_BREDR 0x02
  229. #define LMP_SIMPLE_PAIR 0x08
  230. #define LMP_ENCAPS_PDU 0x10
  231. #define LMP_ERR_DAT_REP 0x20
  232. #define LMP_NFLUSH_PKTS 0x40
  233. #define LMP_LSTO 0x01
  234. #define LMP_INQ_TX_PWR 0x02
  235. #define LMP_EPC 0x04
  236. #define LMP_EXT_FEAT 0x80
  237. /* Extended LMP features */
  238. #define LMP_HOST_SSP 0x01
  239. #define LMP_HOST_LE 0x02
  240. #define LMP_HOST_LE_BREDR 0x04
  241. /* Link policies */
  242. #define HCI_LP_RSWITCH 0x0001
  243. #define HCI_LP_HOLD 0x0002
  244. #define HCI_LP_SNIFF 0x0004
  245. #define HCI_LP_PARK 0x0008
  246. /* Link mode */
  247. #define HCI_LM_ACCEPT 0x8000
  248. #define HCI_LM_MASTER 0x0001
  249. #define HCI_LM_AUTH 0x0002
  250. #define HCI_LM_ENCRYPT 0x0004
  251. #define HCI_LM_TRUSTED 0x0008
  252. #define HCI_LM_RELIABLE 0x0010
  253. #define HCI_LM_SECURE 0x0020
  254. /* Link Key types */
  255. #define HCI_LK_COMBINATION 0x00
  256. #define HCI_LK_LOCAL_UNIT 0x01
  257. #define HCI_LK_REMOTE_UNIT 0x02
  258. #define HCI_LK_DEBUG_COMBINATION 0x03
  259. #define HCI_LK_UNAUTH_COMBINATION 0x04
  260. #define HCI_LK_AUTH_COMBINATION 0x05
  261. #define HCI_LK_CHANGED_COMBINATION 0x06
  262. #define HCI_LK_INVALID 0xFF
  263. /* ----- HCI Commands ----- */
  264. /* Link Control */
  265. #define OGF_LINK_CTL 0x01
  266. #define OCF_INQUIRY 0x0001
  267. typedef struct {
  268. uint8_t lap[3];
  269. uint8_t length; /* 1.28s units */
  270. uint8_t num_rsp;
  271. } __attribute__ ((packed)) inquiry_cp;
  272. #define INQUIRY_CP_SIZE 5
  273. typedef struct {
  274. uint8_t status;
  275. bdaddr_t bdaddr;
  276. } __attribute__ ((packed)) status_bdaddr_rp;
  277. #define STATUS_BDADDR_RP_SIZE 7
  278. #define OCF_INQUIRY_CANCEL 0x0002
  279. #define OCF_PERIODIC_INQUIRY 0x0003
  280. typedef struct {
  281. uint16_t max_period; /* 1.28s units */
  282. uint16_t min_period; /* 1.28s units */
  283. uint8_t lap[3];
  284. uint8_t length; /* 1.28s units */
  285. uint8_t num_rsp;
  286. } __attribute__ ((packed)) periodic_inquiry_cp;
  287. #define PERIODIC_INQUIRY_CP_SIZE 9
  288. #define OCF_EXIT_PERIODIC_INQUIRY 0x0004
  289. #define OCF_CREATE_CONN 0x0005
  290. typedef struct {
  291. bdaddr_t bdaddr;
  292. uint16_t pkt_type;
  293. uint8_t pscan_rep_mode;
  294. uint8_t pscan_mode;
  295. uint16_t clock_offset;
  296. uint8_t role_switch;
  297. } __attribute__ ((packed)) create_conn_cp;
  298. #define CREATE_CONN_CP_SIZE 13
  299. #define OCF_DISCONNECT 0x0006
  300. typedef struct {
  301. uint16_t handle;
  302. uint8_t reason;
  303. } __attribute__ ((packed)) disconnect_cp;
  304. #define DISCONNECT_CP_SIZE 3
  305. #define OCF_ADD_SCO 0x0007
  306. typedef struct {
  307. uint16_t handle;
  308. uint16_t pkt_type;
  309. } __attribute__ ((packed)) add_sco_cp;
  310. #define ADD_SCO_CP_SIZE 4
  311. #define OCF_CREATE_CONN_CANCEL 0x0008
  312. typedef struct {
  313. bdaddr_t bdaddr;
  314. } __attribute__ ((packed)) create_conn_cancel_cp;
  315. #define CREATE_CONN_CANCEL_CP_SIZE 6
  316. #define OCF_ACCEPT_CONN_REQ 0x0009
  317. typedef struct {
  318. bdaddr_t bdaddr;
  319. uint8_t role;
  320. } __attribute__ ((packed)) accept_conn_req_cp;
  321. #define ACCEPT_CONN_REQ_CP_SIZE 7
  322. #define OCF_REJECT_CONN_REQ 0x000A
  323. typedef struct {
  324. bdaddr_t bdaddr;
  325. uint8_t reason;
  326. } __attribute__ ((packed)) reject_conn_req_cp;
  327. #define REJECT_CONN_REQ_CP_SIZE 7
  328. #define OCF_LINK_KEY_REPLY 0x000B
  329. typedef struct {
  330. bdaddr_t bdaddr;
  331. uint8_t link_key[16];
  332. } __attribute__ ((packed)) link_key_reply_cp;
  333. #define LINK_KEY_REPLY_CP_SIZE 22
  334. #define OCF_LINK_KEY_NEG_REPLY 0x000C
  335. #define OCF_PIN_CODE_REPLY 0x000D
  336. typedef struct {
  337. bdaddr_t bdaddr;
  338. uint8_t pin_len;
  339. uint8_t pin_code[16];
  340. } __attribute__ ((packed)) pin_code_reply_cp;
  341. #define PIN_CODE_REPLY_CP_SIZE 23
  342. #define OCF_PIN_CODE_NEG_REPLY 0x000E
  343. #define OCF_SET_CONN_PTYPE 0x000F
  344. typedef struct {
  345. uint16_t handle;
  346. uint16_t pkt_type;
  347. } __attribute__ ((packed)) set_conn_ptype_cp;
  348. #define SET_CONN_PTYPE_CP_SIZE 4
  349. #define OCF_AUTH_REQUESTED 0x0011
  350. typedef struct {
  351. uint16_t handle;
  352. } __attribute__ ((packed)) auth_requested_cp;
  353. #define AUTH_REQUESTED_CP_SIZE 2
  354. #define OCF_SET_CONN_ENCRYPT 0x0013
  355. typedef struct {
  356. uint16_t handle;
  357. uint8_t encrypt;
  358. } __attribute__ ((packed)) set_conn_encrypt_cp;
  359. #define SET_CONN_ENCRYPT_CP_SIZE 3
  360. #define OCF_CHANGE_CONN_LINK_KEY 0x0015
  361. typedef struct {
  362. uint16_t handle;
  363. } __attribute__ ((packed)) change_conn_link_key_cp;
  364. #define CHANGE_CONN_LINK_KEY_CP_SIZE 2
  365. #define OCF_MASTER_LINK_KEY 0x0017
  366. typedef struct {
  367. uint8_t key_flag;
  368. } __attribute__ ((packed)) master_link_key_cp;
  369. #define MASTER_LINK_KEY_CP_SIZE 1
  370. #define OCF_REMOTE_NAME_REQ 0x0019
  371. typedef struct {
  372. bdaddr_t bdaddr;
  373. uint8_t pscan_rep_mode;
  374. uint8_t pscan_mode;
  375. uint16_t clock_offset;
  376. } __attribute__ ((packed)) remote_name_req_cp;
  377. #define REMOTE_NAME_REQ_CP_SIZE 10
  378. #define OCF_REMOTE_NAME_REQ_CANCEL 0x001A
  379. typedef struct {
  380. bdaddr_t bdaddr;
  381. } __attribute__ ((packed)) remote_name_req_cancel_cp;
  382. #define REMOTE_NAME_REQ_CANCEL_CP_SIZE 6
  383. #define OCF_READ_REMOTE_FEATURES 0x001B
  384. typedef struct {
  385. uint16_t handle;
  386. } __attribute__ ((packed)) read_remote_features_cp;
  387. #define READ_REMOTE_FEATURES_CP_SIZE 2
  388. #define OCF_READ_REMOTE_EXT_FEATURES 0x001C
  389. typedef struct {
  390. uint16_t handle;
  391. uint8_t page_num;
  392. } __attribute__ ((packed)) read_remote_ext_features_cp;
  393. #define READ_REMOTE_EXT_FEATURES_CP_SIZE 3
  394. #define OCF_READ_REMOTE_VERSION 0x001D
  395. typedef struct {
  396. uint16_t handle;
  397. } __attribute__ ((packed)) read_remote_version_cp;
  398. #define READ_REMOTE_VERSION_CP_SIZE 2
  399. #define OCF_READ_CLOCK_OFFSET 0x001F
  400. typedef struct {
  401. uint16_t handle;
  402. } __attribute__ ((packed)) read_clock_offset_cp;
  403. #define READ_CLOCK_OFFSET_CP_SIZE 2
  404. #define OCF_READ_LMP_HANDLE 0x0020
  405. #define OCF_SETUP_SYNC_CONN 0x0028
  406. typedef struct {
  407. uint16_t handle;
  408. uint32_t tx_bandwith;
  409. uint32_t rx_bandwith;
  410. uint16_t max_latency;
  411. uint16_t voice_setting;
  412. uint8_t retrans_effort;
  413. uint16_t pkt_type;
  414. } __attribute__ ((packed)) setup_sync_conn_cp;
  415. #define SETUP_SYNC_CONN_CP_SIZE 17
  416. #define OCF_ACCEPT_SYNC_CONN_REQ 0x0029
  417. typedef struct {
  418. bdaddr_t bdaddr;
  419. uint32_t tx_bandwith;
  420. uint32_t rx_bandwith;
  421. uint16_t max_latency;
  422. uint16_t voice_setting;
  423. uint8_t retrans_effort;
  424. uint16_t pkt_type;
  425. } __attribute__ ((packed)) accept_sync_conn_req_cp;
  426. #define ACCEPT_SYNC_CONN_REQ_CP_SIZE 21
  427. #define OCF_REJECT_SYNC_CONN_REQ 0x002A
  428. typedef struct {
  429. bdaddr_t bdaddr;
  430. uint8_t reason;
  431. } __attribute__ ((packed)) reject_sync_conn_req_cp;
  432. #define REJECT_SYNC_CONN_REQ_CP_SIZE 7
  433. #define OCF_IO_CAPABILITY_REPLY 0x002B
  434. typedef struct {
  435. bdaddr_t bdaddr;
  436. uint8_t capability;
  437. uint8_t oob_data;
  438. uint8_t authentication;
  439. } __attribute__ ((packed)) io_capability_reply_cp;
  440. #define IO_CAPABILITY_REPLY_CP_SIZE 9
  441. #define OCF_USER_CONFIRM_REPLY 0x002C
  442. typedef struct {
  443. bdaddr_t bdaddr;
  444. } __attribute__ ((packed)) user_confirm_reply_cp;
  445. #define USER_CONFIRM_REPLY_CP_SIZE 6
  446. #define OCF_USER_CONFIRM_NEG_REPLY 0x002D
  447. #define OCF_USER_PASSKEY_REPLY 0x002E
  448. typedef struct {
  449. bdaddr_t bdaddr;
  450. uint32_t passkey;
  451. } __attribute__ ((packed)) user_passkey_reply_cp;
  452. #define USER_PASSKEY_REPLY_CP_SIZE 10
  453. #define OCF_USER_PASSKEY_NEG_REPLY 0x002F
  454. #define OCF_REMOTE_OOB_DATA_REPLY 0x0030
  455. typedef struct {
  456. bdaddr_t bdaddr;
  457. uint8_t hash[16];
  458. uint8_t randomizer[16];
  459. } __attribute__ ((packed)) remote_oob_data_reply_cp;
  460. #define REMOTE_OOB_DATA_REPLY_CP_SIZE 38
  461. #define OCF_REMOTE_OOB_DATA_NEG_REPLY 0x0033
  462. #define OCF_IO_CAPABILITY_NEG_REPLY 0x0034
  463. typedef struct {
  464. bdaddr_t bdaddr;
  465. uint8_t reason;
  466. } __attribute__ ((packed)) io_capability_neg_reply_cp;
  467. #define IO_CAPABILITY_NEG_REPLY_CP_SIZE 7
  468. #define OCF_CREATE_PHYSICAL_LINK 0x0035
  469. typedef struct {
  470. uint8_t handle;
  471. uint8_t key_length;
  472. uint8_t key_type;
  473. uint8_t key[32];
  474. } __attribute__ ((packed)) create_physical_link_cp;
  475. #define CREATE_PHYSICAL_LINK_CP_SIZE 35
  476. #define OCF_ACCEPT_PHYSICAL_LINK 0x0036
  477. typedef struct {
  478. uint8_t handle;
  479. uint8_t key_length;
  480. uint8_t key_type;
  481. uint8_t key[32];
  482. } __attribute__ ((packed)) accept_physical_link_cp;
  483. #define ACCEPT_PHYSICAL_LINK_CP_SIZE 35
  484. #define OCF_DISCONNECT_PHYSICAL_LINK 0x0037
  485. typedef struct {
  486. uint8_t handle;
  487. uint8_t reason;
  488. } __attribute__ ((packed)) disconnect_physical_link_cp;
  489. #define DISCONNECT_PHYSICAL_LINK_CP_SIZE 2
  490. #define OCF_CREATE_LOGICAL_LINK 0x0038
  491. typedef struct {
  492. uint8_t handle;
  493. uint8_t tx_flow[16];
  494. uint8_t rx_flow[16];
  495. } __attribute__ ((packed)) create_logical_link_cp;
  496. #define CREATE_LOGICAL_LINK_CP_SIZE 33
  497. #define OCF_ACCEPT_LOGICAL_LINK 0x0039
  498. #define OCF_DISCONNECT_LOGICAL_LINK 0x003A
  499. typedef struct {
  500. uint16_t handle;
  501. } __attribute__ ((packed)) disconnect_logical_link_cp;
  502. #define DISCONNECT_LOGICAL_LINK_CP_SIZE 2
  503. #define OCF_LOGICAL_LINK_CANCEL 0x003B
  504. typedef struct {
  505. uint8_t handle;
  506. uint8_t tx_flow_id;
  507. } __attribute__ ((packed)) cancel_logical_link_cp;
  508. #define LOGICAL_LINK_CANCEL_CP_SIZE 2
  509. typedef struct {
  510. uint8_t status;
  511. uint8_t handle;
  512. uint8_t tx_flow_id;
  513. } __attribute__ ((packed)) cancel_logical_link_rp;
  514. #define LOGICAL_LINK_CANCEL_RP_SIZE 3
  515. #define OCF_FLOW_SPEC_MODIFY 0x003C
  516. /* Link Policy */
  517. #define OGF_LINK_POLICY 0x02
  518. #define OCF_HOLD_MODE 0x0001
  519. typedef struct {
  520. uint16_t handle;
  521. uint16_t max_interval;
  522. uint16_t min_interval;
  523. } __attribute__ ((packed)) hold_mode_cp;
  524. #define HOLD_MODE_CP_SIZE 6
  525. #define OCF_SNIFF_MODE 0x0003
  526. typedef struct {
  527. uint16_t handle;
  528. uint16_t max_interval;
  529. uint16_t min_interval;
  530. uint16_t attempt;
  531. uint16_t timeout;
  532. } __attribute__ ((packed)) sniff_mode_cp;
  533. #define SNIFF_MODE_CP_SIZE 10
  534. #define OCF_EXIT_SNIFF_MODE 0x0004
  535. typedef struct {
  536. uint16_t handle;
  537. } __attribute__ ((packed)) exit_sniff_mode_cp;
  538. #define EXIT_SNIFF_MODE_CP_SIZE 2
  539. #define OCF_PARK_MODE 0x0005
  540. typedef struct {
  541. uint16_t handle;
  542. uint16_t max_interval;
  543. uint16_t min_interval;
  544. } __attribute__ ((packed)) park_mode_cp;
  545. #define PARK_MODE_CP_SIZE 6
  546. #define OCF_EXIT_PARK_MODE 0x0006
  547. typedef struct {
  548. uint16_t handle;
  549. } __attribute__ ((packed)) exit_park_mode_cp;
  550. #define EXIT_PARK_MODE_CP_SIZE 2
  551. #define OCF_QOS_SETUP 0x0007
  552. typedef struct {
  553. uint8_t service_type; /* 1 = best effort */
  554. uint32_t token_rate; /* Byte per seconds */
  555. uint32_t peak_bandwidth; /* Byte per seconds */
  556. uint32_t latency; /* Microseconds */
  557. uint32_t delay_variation; /* Microseconds */
  558. } __attribute__ ((packed)) hci_qos;
  559. #define HCI_QOS_CP_SIZE 17
  560. typedef struct {
  561. uint16_t handle;
  562. uint8_t flags; /* Reserved */
  563. hci_qos qos;
  564. } __attribute__ ((packed)) qos_setup_cp;
  565. #define QOS_SETUP_CP_SIZE (3 + HCI_QOS_CP_SIZE)
  566. #define OCF_ROLE_DISCOVERY 0x0009
  567. typedef struct {
  568. uint16_t handle;
  569. } __attribute__ ((packed)) role_discovery_cp;
  570. #define ROLE_DISCOVERY_CP_SIZE 2
  571. typedef struct {
  572. uint8_t status;
  573. uint16_t handle;
  574. uint8_t role;
  575. } __attribute__ ((packed)) role_discovery_rp;
  576. #define ROLE_DISCOVERY_RP_SIZE 4
  577. #define OCF_SWITCH_ROLE 0x000B
  578. typedef struct {
  579. bdaddr_t bdaddr;
  580. uint8_t role;
  581. } __attribute__ ((packed)) switch_role_cp;
  582. #define SWITCH_ROLE_CP_SIZE 7
  583. #define OCF_READ_LINK_POLICY 0x000C
  584. typedef struct {
  585. uint16_t handle;
  586. } __attribute__ ((packed)) read_link_policy_cp;
  587. #define READ_LINK_POLICY_CP_SIZE 2
  588. typedef struct {
  589. uint8_t status;
  590. uint16_t handle;
  591. uint16_t policy;
  592. } __attribute__ ((packed)) read_link_policy_rp;
  593. #define READ_LINK_POLICY_RP_SIZE 5
  594. #define OCF_WRITE_LINK_POLICY 0x000D
  595. typedef struct {
  596. uint16_t handle;
  597. uint16_t policy;
  598. } __attribute__ ((packed)) write_link_policy_cp;
  599. #define WRITE_LINK_POLICY_CP_SIZE 4
  600. typedef struct {
  601. uint8_t status;
  602. uint16_t handle;
  603. } __attribute__ ((packed)) write_link_policy_rp;
  604. #define WRITE_LINK_POLICY_RP_SIZE 3
  605. #define OCF_READ_DEFAULT_LINK_POLICY 0x000E
  606. #define OCF_WRITE_DEFAULT_LINK_POLICY 0x000F
  607. #define OCF_FLOW_SPECIFICATION 0x0010
  608. #define OCF_SNIFF_SUBRATING 0x0011
  609. typedef struct {
  610. uint16_t handle;
  611. uint16_t max_latency;
  612. uint16_t min_remote_timeout;
  613. uint16_t min_local_timeout;
  614. } __attribute__ ((packed)) sniff_subrating_cp;
  615. #define SNIFF_SUBRATING_CP_SIZE 8
  616. /* Host Controller and Baseband */
  617. #define OGF_HOST_CTL 0x03
  618. #define OCF_SET_EVENT_MASK 0x0001
  619. typedef struct {
  620. uint8_t mask[8];
  621. } __attribute__ ((packed)) set_event_mask_cp;
  622. #define SET_EVENT_MASK_CP_SIZE 8
  623. #define OCF_RESET 0x0003
  624. #define OCF_SET_EVENT_FLT 0x0005
  625. typedef struct {
  626. uint8_t flt_type;
  627. uint8_t cond_type;
  628. uint8_t condition[];
  629. } __attribute__ ((packed)) set_event_flt_cp;
  630. #define SET_EVENT_FLT_CP_SIZE 2
  631. /* Filter types */
  632. #define FLT_CLEAR_ALL 0x00
  633. #define FLT_INQ_RESULT 0x01
  634. #define FLT_CONN_SETUP 0x02
  635. /* INQ_RESULT Condition types */
  636. #define INQ_RESULT_RETURN_ALL 0x00
  637. #define INQ_RESULT_RETURN_CLASS 0x01
  638. #define INQ_RESULT_RETURN_BDADDR 0x02
  639. /* CONN_SETUP Condition types */
  640. #define CONN_SETUP_ALLOW_ALL 0x00
  641. #define CONN_SETUP_ALLOW_CLASS 0x01
  642. #define CONN_SETUP_ALLOW_BDADDR 0x02
  643. /* CONN_SETUP Conditions */
  644. #define CONN_SETUP_AUTO_OFF 0x01
  645. #define CONN_SETUP_AUTO_ON 0x02
  646. #define OCF_FLUSH 0x0008
  647. #define OCF_READ_PIN_TYPE 0x0009
  648. typedef struct {
  649. uint8_t status;
  650. uint8_t pin_type;
  651. } __attribute__ ((packed)) read_pin_type_rp;
  652. #define READ_PIN_TYPE_RP_SIZE 2
  653. #define OCF_WRITE_PIN_TYPE 0x000A
  654. typedef struct {
  655. uint8_t pin_type;
  656. } __attribute__ ((packed)) write_pin_type_cp;
  657. #define WRITE_PIN_TYPE_CP_SIZE 1
  658. #define OCF_CREATE_NEW_UNIT_KEY 0x000B
  659. #define OCF_READ_STORED_LINK_KEY 0x000D
  660. typedef struct {
  661. bdaddr_t bdaddr;
  662. uint8_t read_all;
  663. } __attribute__ ((packed)) read_stored_link_key_cp;
  664. #define READ_STORED_LINK_KEY_CP_SIZE 7
  665. typedef struct {
  666. uint8_t status;
  667. uint16_t max_keys;
  668. uint16_t num_keys;
  669. } __attribute__ ((packed)) read_stored_link_key_rp;
  670. #define READ_STORED_LINK_KEY_RP_SIZE 5
  671. #define OCF_WRITE_STORED_LINK_KEY 0x0011
  672. typedef struct {
  673. uint8_t num_keys;
  674. /* variable length part */
  675. } __attribute__ ((packed)) write_stored_link_key_cp;
  676. #define WRITE_STORED_LINK_KEY_CP_SIZE 1
  677. typedef struct {
  678. uint8_t status;
  679. uint8_t num_keys;
  680. } __attribute__ ((packed)) write_stored_link_key_rp;
  681. #define READ_WRITE_LINK_KEY_RP_SIZE 2
  682. #define OCF_DELETE_STORED_LINK_KEY 0x0012
  683. typedef struct {
  684. bdaddr_t bdaddr;
  685. uint8_t delete_all;
  686. } __attribute__ ((packed)) delete_stored_link_key_cp;
  687. #define DELETE_STORED_LINK_KEY_CP_SIZE 7
  688. typedef struct {
  689. uint8_t status;
  690. uint16_t num_keys;
  691. } __attribute__ ((packed)) delete_stored_link_key_rp;
  692. #define DELETE_STORED_LINK_KEY_RP_SIZE 3
  693. #define HCI_MAX_NAME_LENGTH 248
  694. #define OCF_CHANGE_LOCAL_NAME 0x0013
  695. typedef struct {
  696. uint8_t name[HCI_MAX_NAME_LENGTH];
  697. } __attribute__ ((packed)) change_local_name_cp;
  698. #define CHANGE_LOCAL_NAME_CP_SIZE 248
  699. #define OCF_READ_LOCAL_NAME 0x0014
  700. typedef struct {
  701. uint8_t status;
  702. uint8_t name[HCI_MAX_NAME_LENGTH];
  703. } __attribute__ ((packed)) read_local_name_rp;
  704. #define READ_LOCAL_NAME_RP_SIZE 249
  705. #define OCF_READ_CONN_ACCEPT_TIMEOUT 0x0015
  706. typedef struct {
  707. uint8_t status;
  708. uint16_t timeout;
  709. } __attribute__ ((packed)) read_conn_accept_timeout_rp;
  710. #define READ_CONN_ACCEPT_TIMEOUT_RP_SIZE 3
  711. #define OCF_WRITE_CONN_ACCEPT_TIMEOUT 0x0016
  712. typedef struct {
  713. uint16_t timeout;
  714. } __attribute__ ((packed)) write_conn_accept_timeout_cp;
  715. #define WRITE_CONN_ACCEPT_TIMEOUT_CP_SIZE 2
  716. #define OCF_READ_PAGE_TIMEOUT 0x0017
  717. typedef struct {
  718. uint8_t status;
  719. uint16_t timeout;
  720. } __attribute__ ((packed)) read_page_timeout_rp;
  721. #define READ_PAGE_TIMEOUT_RP_SIZE 3
  722. #define OCF_WRITE_PAGE_TIMEOUT 0x0018
  723. typedef struct {
  724. uint16_t timeout;
  725. } __attribute__ ((packed)) write_page_timeout_cp;
  726. #define WRITE_PAGE_TIMEOUT_CP_SIZE 2
  727. #define OCF_READ_SCAN_ENABLE 0x0019
  728. typedef struct {
  729. uint8_t status;
  730. uint8_t enable;
  731. } __attribute__ ((packed)) read_scan_enable_rp;
  732. #define READ_SCAN_ENABLE_RP_SIZE 2
  733. #define OCF_WRITE_SCAN_ENABLE 0x001A
  734. #define SCAN_DISABLED 0x00
  735. #define SCAN_INQUIRY 0x01
  736. #define SCAN_PAGE 0x02
  737. #define OCF_READ_PAGE_ACTIVITY 0x001B
  738. typedef struct {
  739. uint8_t status;
  740. uint16_t interval;
  741. uint16_t window;
  742. } __attribute__ ((packed)) read_page_activity_rp;
  743. #define READ_PAGE_ACTIVITY_RP_SIZE 5
  744. #define OCF_WRITE_PAGE_ACTIVITY 0x001C
  745. typedef struct {
  746. uint16_t interval;
  747. uint16_t window;
  748. } __attribute__ ((packed)) write_page_activity_cp;
  749. #define WRITE_PAGE_ACTIVITY_CP_SIZE 4
  750. #define OCF_READ_INQ_ACTIVITY 0x001D
  751. typedef struct {
  752. uint8_t status;
  753. uint16_t interval;
  754. uint16_t window;
  755. } __attribute__ ((packed)) read_inq_activity_rp;
  756. #define READ_INQ_ACTIVITY_RP_SIZE 5
  757. #define OCF_WRITE_INQ_ACTIVITY 0x001E
  758. typedef struct {
  759. uint16_t interval;
  760. uint16_t window;
  761. } __attribute__ ((packed)) write_inq_activity_cp;
  762. #define WRITE_INQ_ACTIVITY_CP_SIZE 4
  763. #define OCF_READ_AUTH_ENABLE 0x001F
  764. #define OCF_WRITE_AUTH_ENABLE 0x0020
  765. #define AUTH_DISABLED 0x00
  766. #define AUTH_ENABLED 0x01
  767. #define OCF_READ_ENCRYPT_MODE 0x0021
  768. #define OCF_WRITE_ENCRYPT_MODE 0x0022
  769. #define ENCRYPT_DISABLED 0x00
  770. #define ENCRYPT_P2P 0x01
  771. #define ENCRYPT_BOTH 0x02
  772. #define OCF_READ_CLASS_OF_DEV 0x0023
  773. typedef struct {
  774. uint8_t status;
  775. uint8_t dev_class[3];
  776. } __attribute__ ((packed)) read_class_of_dev_rp;
  777. #define READ_CLASS_OF_DEV_RP_SIZE 4
  778. #define OCF_WRITE_CLASS_OF_DEV 0x0024
  779. typedef struct {
  780. uint8_t dev_class[3];
  781. } __attribute__ ((packed)) write_class_of_dev_cp;
  782. #define WRITE_CLASS_OF_DEV_CP_SIZE 3
  783. #define OCF_READ_VOICE_SETTING 0x0025
  784. typedef struct {
  785. uint8_t status;
  786. uint16_t voice_setting;
  787. } __attribute__ ((packed)) read_voice_setting_rp;
  788. #define READ_VOICE_SETTING_RP_SIZE 3
  789. #define OCF_WRITE_VOICE_SETTING 0x0026
  790. typedef struct {
  791. uint16_t voice_setting;
  792. } __attribute__ ((packed)) write_voice_setting_cp;
  793. #define WRITE_VOICE_SETTING_CP_SIZE 2
  794. #define OCF_READ_AUTOMATIC_FLUSH_TIMEOUT 0x0027
  795. #define OCF_WRITE_AUTOMATIC_FLUSH_TIMEOUT 0x0028
  796. #define OCF_READ_NUM_BROADCAST_RETRANS 0x0029
  797. #define OCF_WRITE_NUM_BROADCAST_RETRANS 0x002A
  798. #define OCF_READ_HOLD_MODE_ACTIVITY 0x002B
  799. #define OCF_WRITE_HOLD_MODE_ACTIVITY 0x002C
  800. #define OCF_READ_TRANSMIT_POWER_LEVEL 0x002D
  801. typedef struct {
  802. uint16_t handle;
  803. uint8_t type;
  804. } __attribute__ ((packed)) read_transmit_power_level_cp;
  805. #define READ_TRANSMIT_POWER_LEVEL_CP_SIZE 3
  806. typedef struct {
  807. uint8_t status;
  808. uint16_t handle;
  809. int8_t level;
  810. } __attribute__ ((packed)) read_transmit_power_level_rp;
  811. #define READ_TRANSMIT_POWER_LEVEL_RP_SIZE 4
  812. #define OCF_READ_SYNC_FLOW_ENABLE 0x002E
  813. #define OCF_WRITE_SYNC_FLOW_ENABLE 0x002F
  814. #define OCF_SET_CONTROLLER_TO_HOST_FC 0x0031
  815. #define OCF_HOST_BUFFER_SIZE 0x0033
  816. typedef struct {
  817. uint16_t acl_mtu;
  818. uint8_t sco_mtu;
  819. uint16_t acl_max_pkt;
  820. uint16_t sco_max_pkt;
  821. } __attribute__ ((packed)) host_buffer_size_cp;
  822. #define HOST_BUFFER_SIZE_CP_SIZE 7
  823. #define OCF_HOST_NUM_COMP_PKTS 0x0035
  824. typedef struct {
  825. uint8_t num_hndl;
  826. /* variable length part */
  827. } __attribute__ ((packed)) host_num_comp_pkts_cp;
  828. #define HOST_NUM_COMP_PKTS_CP_SIZE 1
  829. #define OCF_READ_LINK_SUPERVISION_TIMEOUT 0x0036
  830. typedef struct {
  831. uint8_t status;
  832. uint16_t handle;
  833. uint16_t timeout;
  834. } __attribute__ ((packed)) read_link_supervision_timeout_rp;
  835. #define READ_LINK_SUPERVISION_TIMEOUT_RP_SIZE 5
  836. #define OCF_WRITE_LINK_SUPERVISION_TIMEOUT 0x0037
  837. typedef struct {
  838. uint16_t handle;
  839. uint16_t timeout;
  840. } __attribute__ ((packed)) write_link_supervision_timeout_cp;
  841. #define WRITE_LINK_SUPERVISION_TIMEOUT_CP_SIZE 4
  842. typedef struct {
  843. uint8_t status;
  844. uint16_t handle;
  845. } __attribute__ ((packed)) write_link_supervision_timeout_rp;
  846. #define WRITE_LINK_SUPERVISION_TIMEOUT_RP_SIZE 3
  847. #define OCF_READ_NUM_SUPPORTED_IAC 0x0038
  848. #define MAX_IAC_LAP 0x40
  849. #define OCF_READ_CURRENT_IAC_LAP 0x0039
  850. typedef struct {
  851. uint8_t status;
  852. uint8_t num_current_iac;
  853. uint8_t lap[MAX_IAC_LAP][3];
  854. } __attribute__ ((packed)) read_current_iac_lap_rp;
  855. #define READ_CURRENT_IAC_LAP_RP_SIZE 2+3*MAX_IAC_LAP
  856. #define OCF_WRITE_CURRENT_IAC_LAP 0x003A
  857. typedef struct {
  858. uint8_t num_current_iac;
  859. uint8_t lap[MAX_IAC_LAP][3];
  860. } __attribute__ ((packed)) write_current_iac_lap_cp;
  861. #define WRITE_CURRENT_IAC_LAP_CP_SIZE 1+3*MAX_IAC_LAP
  862. #define OCF_READ_PAGE_SCAN_PERIOD_MODE 0x003B
  863. #define OCF_WRITE_PAGE_SCAN_PERIOD_MODE 0x003C
  864. #define OCF_READ_PAGE_SCAN_MODE 0x003D
  865. #define OCF_WRITE_PAGE_SCAN_MODE 0x003E
  866. #define OCF_SET_AFH_CLASSIFICATION 0x003F
  867. typedef struct {
  868. uint8_t map[10];
  869. } __attribute__ ((packed)) set_afh_classification_cp;
  870. #define SET_AFH_CLASSIFICATION_CP_SIZE 10
  871. typedef struct {
  872. uint8_t status;
  873. } __attribute__ ((packed)) set_afh_classification_rp;
  874. #define SET_AFH_CLASSIFICATION_RP_SIZE 1
  875. #define OCF_READ_INQUIRY_SCAN_TYPE 0x0042
  876. typedef struct {
  877. uint8_t status;
  878. uint8_t type;
  879. } __attribute__ ((packed)) read_inquiry_scan_type_rp;
  880. #define READ_INQUIRY_SCAN_TYPE_RP_SIZE 2
  881. #define OCF_WRITE_INQUIRY_SCAN_TYPE 0x0043
  882. typedef struct {
  883. uint8_t type;
  884. } __attribute__ ((packed)) write_inquiry_scan_type_cp;
  885. #define WRITE_INQUIRY_SCAN_TYPE_CP_SIZE 1
  886. typedef struct {
  887. uint8_t status;
  888. } __attribute__ ((packed)) write_inquiry_scan_type_rp;
  889. #define WRITE_INQUIRY_SCAN_TYPE_RP_SIZE 1
  890. #define OCF_READ_INQUIRY_MODE 0x0044
  891. typedef struct {
  892. uint8_t status;
  893. uint8_t mode;
  894. } __attribute__ ((packed)) read_inquiry_mode_rp;
  895. #define READ_INQUIRY_MODE_RP_SIZE 2
  896. #define OCF_WRITE_INQUIRY_MODE 0x0045
  897. typedef struct {
  898. uint8_t mode;
  899. } __attribute__ ((packed)) write_inquiry_mode_cp;
  900. #define WRITE_INQUIRY_MODE_CP_SIZE 1
  901. typedef struct {
  902. uint8_t status;
  903. } __attribute__ ((packed)) write_inquiry_mode_rp;
  904. #define WRITE_INQUIRY_MODE_RP_SIZE 1
  905. #define OCF_READ_PAGE_SCAN_TYPE 0x0046
  906. #define OCF_WRITE_PAGE_SCAN_TYPE 0x0047
  907. #define PAGE_SCAN_TYPE_STANDARD 0x00
  908. #define PAGE_SCAN_TYPE_INTERLACED 0x01
  909. #define OCF_READ_AFH_MODE 0x0048
  910. typedef struct {
  911. uint8_t status;
  912. uint8_t mode;
  913. } __attribute__ ((packed)) read_afh_mode_rp;
  914. #define READ_AFH_MODE_RP_SIZE 2
  915. #define OCF_WRITE_AFH_MODE 0x0049
  916. typedef struct {
  917. uint8_t mode;
  918. } __attribute__ ((packed)) write_afh_mode_cp;
  919. #define WRITE_AFH_MODE_CP_SIZE 1
  920. typedef struct {
  921. uint8_t status;
  922. } __attribute__ ((packed)) write_afh_mode_rp;
  923. #define WRITE_AFH_MODE_RP_SIZE 1
  924. #define HCI_MAX_EIR_LENGTH 240
  925. #define OCF_READ_EXT_INQUIRY_RESPONSE 0x0051
  926. typedef struct {
  927. uint8_t status;
  928. uint8_t fec;
  929. uint8_t data[HCI_MAX_EIR_LENGTH];
  930. } __attribute__ ((packed)) read_ext_inquiry_response_rp;
  931. #define READ_EXT_INQUIRY_RESPONSE_RP_SIZE 242
  932. #define OCF_WRITE_EXT_INQUIRY_RESPONSE 0x0052
  933. typedef struct {
  934. uint8_t fec;
  935. uint8_t data[HCI_MAX_EIR_LENGTH];
  936. } __attribute__ ((packed)) write_ext_inquiry_response_cp;
  937. #define WRITE_EXT_INQUIRY_RESPONSE_CP_SIZE 241
  938. typedef struct {
  939. uint8_t status;
  940. } __attribute__ ((packed)) write_ext_inquiry_response_rp;
  941. #define WRITE_EXT_INQUIRY_RESPONSE_RP_SIZE 1
  942. #define OCF_REFRESH_ENCRYPTION_KEY 0x0053
  943. typedef struct {
  944. uint16_t handle;
  945. } __attribute__ ((packed)) refresh_encryption_key_cp;
  946. #define REFRESH_ENCRYPTION_KEY_CP_SIZE 2
  947. typedef struct {
  948. uint8_t status;
  949. } __attribute__ ((packed)) refresh_encryption_key_rp;
  950. #define REFRESH_ENCRYPTION_KEY_RP_SIZE 1
  951. #define OCF_READ_SIMPLE_PAIRING_MODE 0x0055
  952. typedef struct {
  953. uint8_t status;
  954. uint8_t mode;
  955. } __attribute__ ((packed)) read_simple_pairing_mode_rp;
  956. #define READ_SIMPLE_PAIRING_MODE_RP_SIZE 2
  957. #define OCF_WRITE_SIMPLE_PAIRING_MODE 0x0056
  958. typedef struct {
  959. uint8_t mode;
  960. } __attribute__ ((packed)) write_simple_pairing_mode_cp;
  961. #define WRITE_SIMPLE_PAIRING_MODE_CP_SIZE 1
  962. typedef struct {
  963. uint8_t status;
  964. } __attribute__ ((packed)) write_simple_pairing_mode_rp;
  965. #define WRITE_SIMPLE_PAIRING_MODE_RP_SIZE 1
  966. #define OCF_READ_LOCAL_OOB_DATA 0x0057
  967. typedef struct {
  968. uint8_t status;
  969. uint8_t hash[16];
  970. uint8_t randomizer[16];
  971. } __attribute__ ((packed)) read_local_oob_data_rp;
  972. #define READ_LOCAL_OOB_DATA_RP_SIZE 33
  973. #define OCF_READ_INQ_RESPONSE_TX_POWER_LEVEL 0x0058
  974. typedef struct {
  975. uint8_t status;
  976. int8_t level;
  977. } __attribute__ ((packed)) read_inq_response_tx_power_level_rp;
  978. #define READ_INQ_RESPONSE_TX_POWER_LEVEL_RP_SIZE 2
  979. #define OCF_READ_INQUIRY_TRANSMIT_POWER_LEVEL 0x0058
  980. typedef struct {
  981. uint8_t status;
  982. int8_t level;
  983. } __attribute__ ((packed)) read_inquiry_transmit_power_level_rp;
  984. #define READ_INQUIRY_TRANSMIT_POWER_LEVEL_RP_SIZE 2
  985. #define OCF_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL 0x0059
  986. typedef struct {
  987. int8_t level;
  988. } __attribute__ ((packed)) write_inquiry_transmit_power_level_cp;
  989. #define WRITE_INQUIRY_TRANSMIT_POWER_LEVEL_CP_SIZE 1
  990. typedef struct {
  991. uint8_t status;
  992. } __attribute__ ((packed)) write_inquiry_transmit_power_level_rp;
  993. #define WRITE_INQUIRY_TRANSMIT_POWER_LEVEL_RP_SIZE 1
  994. #define OCF_READ_DEFAULT_ERROR_DATA_REPORTING 0x005A
  995. typedef struct {
  996. uint8_t status;
  997. uint8_t reporting;
  998. } __attribute__ ((packed)) read_default_error_data_reporting_rp;
  999. #define READ_DEFAULT_ERROR_DATA_REPORTING_RP_SIZE 2
  1000. #define OCF_WRITE_DEFAULT_ERROR_DATA_REPORTING 0x005B
  1001. typedef struct {
  1002. uint8_t reporting;
  1003. } __attribute__ ((packed)) write_default_error_data_reporting_cp;
  1004. #define WRITE_DEFAULT_ERROR_DATA_REPORTING_CP_SIZE 1
  1005. typedef struct {
  1006. uint8_t status;
  1007. } __attribute__ ((packed)) write_default_error_data_reporting_rp;
  1008. #define WRITE_DEFAULT_ERROR_DATA_REPORTING_RP_SIZE 1
  1009. #define OCF_ENHANCED_FLUSH 0x005F
  1010. typedef struct {
  1011. uint16_t handle;
  1012. uint8_t type;
  1013. } __attribute__ ((packed)) enhanced_flush_cp;
  1014. #define ENHANCED_FLUSH_CP_SIZE 3
  1015. #define OCF_SEND_KEYPRESS_NOTIFY 0x0060
  1016. typedef struct {
  1017. bdaddr_t bdaddr;
  1018. uint8_t type;
  1019. } __attribute__ ((packed)) send_keypress_notify_cp;
  1020. #define SEND_KEYPRESS_NOTIFY_CP_SIZE 7
  1021. typedef struct {
  1022. uint8_t status;
  1023. } __attribute__ ((packed)) send_keypress_notify_rp;
  1024. #define SEND_KEYPRESS_NOTIFY_RP_SIZE 1
  1025. #define OCF_READ_LOGICAL_LINK_ACCEPT_TIMEOUT 0x0061
  1026. typedef struct {
  1027. uint8_t status;
  1028. uint16_t timeout;
  1029. } __attribute__ ((packed)) read_log_link_accept_timeout_rp;
  1030. #define READ_LOGICAL_LINK_ACCEPT_TIMEOUT_RP_SIZE 3
  1031. #define OCF_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT 0x0062
  1032. typedef struct {
  1033. uint16_t timeout;
  1034. } __attribute__ ((packed)) write_log_link_accept_timeout_cp;
  1035. #define WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT_CP_SIZE 2
  1036. #define OCF_SET_EVENT_MASK_PAGE_2 0x0063
  1037. #define OCF_READ_LOCATION_DATA 0x0064
  1038. #define OCF_WRITE_LOCATION_DATA 0x0065
  1039. #define OCF_READ_FLOW_CONTROL_MODE 0x0066
  1040. #define OCF_WRITE_FLOW_CONTROL_MODE 0x0067
  1041. #define OCF_READ_ENHANCED_TRANSMIT_POWER_LEVEL 0x0068
  1042. typedef struct {
  1043. uint8_t status;
  1044. uint16_t handle;
  1045. int8_t level_gfsk;
  1046. int8_t level_dqpsk;
  1047. int8_t level_8dpsk;
  1048. } __attribute__ ((packed)) read_enhanced_transmit_power_level_rp;
  1049. #define READ_ENHANCED_TRANSMIT_POWER_LEVEL_RP_SIZE 6
  1050. #define OCF_READ_BEST_EFFORT_FLUSH_TIMEOUT 0x0069
  1051. typedef struct {
  1052. uint8_t status;
  1053. uint32_t timeout;
  1054. } __attribute__ ((packed)) read_best_effort_flush_timeout_rp;
  1055. #define READ_BEST_EFFORT_FLUSH_TIMEOUT_RP_SIZE 5
  1056. #define OCF_WRITE_BEST_EFFORT_FLUSH_TIMEOUT 0x006A
  1057. typedef struct {
  1058. uint16_t handle;
  1059. uint32_t timeout;
  1060. } __attribute__ ((packed)) write_best_effort_flush_timeout_cp;
  1061. #define WRITE_BEST_EFFORT_FLUSH_TIMEOUT_CP_SIZE 6
  1062. typedef struct {
  1063. uint8_t status;
  1064. } __attribute__ ((packed)) write_best_effort_flush_timeout_rp;
  1065. #define WRITE_BEST_EFFORT_FLUSH_TIMEOUT_RP_SIZE 1
  1066. #define OCF_READ_LE_HOST_SUPPORTED 0x006C
  1067. typedef struct {
  1068. uint8_t status;
  1069. uint8_t le;
  1070. uint8_t simul;
  1071. } __attribute__ ((packed)) read_le_host_supported_rp;
  1072. #define READ_LE_HOST_SUPPORTED_RP_SIZE 3
  1073. #define OCF_WRITE_LE_HOST_SUPPORTED 0x006D
  1074. typedef struct {
  1075. uint8_t le;
  1076. uint8_t simul;
  1077. } __attribute__ ((packed)) write_le_host_supported_cp;
  1078. #define WRITE_LE_HOST_SUPPORTED_CP_SIZE 2
  1079. /* Informational Parameters */
  1080. #define OGF_INFO_PARAM 0x04
  1081. #define OCF_READ_LOCAL_VERSION 0x0001
  1082. typedef struct {
  1083. uint8_t status;
  1084. uint8_t hci_ver;
  1085. uint16_t hci_rev;
  1086. uint8_t lmp_ver;
  1087. uint16_t manufacturer;
  1088. uint16_t lmp_subver;
  1089. } __attribute__ ((packed)) read_local_version_rp;
  1090. #define READ_LOCAL_VERSION_RP_SIZE 9
  1091. #define OCF_READ_LOCAL_COMMANDS 0x0002
  1092. typedef struct {
  1093. uint8_t status;
  1094. uint8_t commands[64];
  1095. } __attribute__ ((packed)) read_local_commands_rp;
  1096. #define READ_LOCAL_COMMANDS_RP_SIZE 65
  1097. #define OCF_READ_LOCAL_FEATURES 0x0003
  1098. typedef struct {
  1099. uint8_t status;
  1100. uint8_t features[8];
  1101. } __attribute__ ((packed)) read_local_features_rp;
  1102. #define READ_LOCAL_FEATURES_RP_SIZE 9
  1103. #define OCF_READ_LOCAL_EXT_FEATURES 0x0004
  1104. typedef struct {
  1105. uint8_t page_num;
  1106. } __attribute__ ((packed)) read_local_ext_features_cp;
  1107. #define READ_LOCAL_EXT_FEATURES_CP_SIZE 1
  1108. typedef struct {
  1109. uint8_t status;
  1110. uint8_t page_num;
  1111. uint8_t max_page_num;
  1112. uint8_t features[8];
  1113. } __attribute__ ((packed)) read_local_ext_features_rp;
  1114. #define READ_LOCAL_EXT_FEATURES_RP_SIZE 11
  1115. #define OCF_READ_BUFFER_SIZE 0x0005
  1116. typedef struct {
  1117. uint8_t status;
  1118. uint16_t acl_mtu;
  1119. uint8_t sco_mtu;
  1120. uint16_t acl_max_pkt;
  1121. uint16_t sco_max_pkt;
  1122. } __attribute__ ((packed)) read_buffer_size_rp;
  1123. #define READ_BUFFER_SIZE_RP_SIZE 8
  1124. #define OCF_READ_COUNTRY_CODE 0x0007
  1125. #define OCF_READ_BD_ADDR 0x0009
  1126. typedef struct {
  1127. uint8_t status;
  1128. bdaddr_t bdaddr;
  1129. } __attribute__ ((packed)) read_bd_addr_rp;
  1130. #define READ_BD_ADDR_RP_SIZE 7
  1131. #define OCF_READ_DATA_BLOCK_SIZE 0x000A
  1132. typedef struct {
  1133. uint8_t status;
  1134. uint16_t max_acl_len;
  1135. uint16_t data_block_len;
  1136. uint16_t num_blocks;
  1137. } __attribute__ ((packed)) read_data_block_size_rp;
  1138. /* Status params */
  1139. #define OGF_STATUS_PARAM 0x05
  1140. #define OCF_READ_FAILED_CONTACT_COUNTER 0x0001
  1141. typedef struct {
  1142. uint8_t status;
  1143. uint16_t handle;
  1144. uint8_t counter;
  1145. } __attribute__ ((packed)) read_failed_contact_counter_rp;
  1146. #define READ_FAILED_CONTACT_COUNTER_RP_SIZE 4
  1147. #define OCF_RESET_FAILED_CONTACT_COUNTER 0x0002
  1148. typedef struct {
  1149. uint8_t status;
  1150. uint16_t handle;
  1151. } __attribute__ ((packed)) reset_failed_contact_counter_rp;
  1152. #define RESET_FAILED_CONTACT_COUNTER_RP_SIZE 3
  1153. #define OCF_READ_LINK_QUALITY 0x0003
  1154. typedef struct {
  1155. uint8_t status;
  1156. uint16_t handle;
  1157. uint8_t link_quality;
  1158. } __attribute__ ((packed)) read_link_quality_rp;
  1159. #define READ_LINK_QUALITY_RP_SIZE 4
  1160. #define OCF_READ_RSSI 0x0005
  1161. typedef struct {
  1162. uint8_t status;
  1163. uint16_t handle;
  1164. int8_t rssi;
  1165. } __attribute__ ((packed)) read_rssi_rp;
  1166. #define READ_RSSI_RP_SIZE 4
  1167. #define OCF_READ_AFH_MAP 0x0006
  1168. typedef struct {
  1169. uint8_t status;
  1170. uint16_t handle;
  1171. uint8_t mode;
  1172. uint8_t map[10];
  1173. } __attribute__ ((packed)) read_afh_map_rp;
  1174. #define READ_AFH_MAP_RP_SIZE 14
  1175. #define OCF_READ_CLOCK 0x0007
  1176. typedef struct {
  1177. uint16_t handle;
  1178. uint8_t which_clock;
  1179. } __attribute__ ((packed)) read_clock_cp;
  1180. #define READ_CLOCK_CP_SIZE 3
  1181. typedef struct {
  1182. uint8_t status;
  1183. uint16_t handle;
  1184. uint32_t clock;
  1185. uint16_t accuracy;
  1186. } __attribute__ ((packed)) read_clock_rp;
  1187. #define READ_CLOCK_RP_SIZE 9
  1188. #define OCF_READ_LOCAL_AMP_INFO 0x0009
  1189. typedef struct {
  1190. uint8_t status;
  1191. uint8_t amp_status;
  1192. uint32_t total_bandwidth;
  1193. uint32_t max_guaranteed_bandwidth;
  1194. uint32_t min_latency;
  1195. uint32_t max_pdu_size;
  1196. uint8_t controller_type;
  1197. uint16_t pal_caps;
  1198. uint16_t max_amp_assoc_length;
  1199. uint32_t max_flush_timeout;
  1200. uint32_t best_effort_flush_timeout;
  1201. } __attribute__ ((packed)) read_local_amp_info_rp;
  1202. #define READ_LOCAL_AMP_INFO_RP_SIZE 31
  1203. #define OCF_READ_LOCAL_AMP_ASSOC 0x000A
  1204. typedef struct {
  1205. uint8_t handle;
  1206. uint16_t length_so_far;
  1207. uint16_t assoc_length;
  1208. } __attribute__ ((packed)) read_local_amp_assoc_cp;
  1209. #define READ_LOCAL_AMP_ASSOC_CP_SIZE 5
  1210. typedef struct {
  1211. uint8_t status;
  1212. uint8_t handle;
  1213. uint16_t length;
  1214. uint8_t fragment[HCI_MAX_NAME_LENGTH];
  1215. } __attribute__ ((packed)) read_local_amp_assoc_rp;
  1216. #define READ_LOCAL_AMP_ASSOC_RP_SIZE 252
  1217. #define OCF_WRITE_REMOTE_AMP_ASSOC 0x000B
  1218. typedef struct {
  1219. uint8_t handle;
  1220. uint16_t length_so_far;
  1221. uint16_t remaining_length;
  1222. uint8_t fragment[HCI_MAX_NAME_LENGTH];
  1223. } __attribute__ ((packed)) write_remote_amp_assoc_cp;
  1224. #define WRITE_REMOTE_AMP_ASSOC_CP_SIZE 253
  1225. typedef struct {
  1226. uint8_t status;
  1227. uint8_t handle;
  1228. } __attribute__ ((packed)) write_remote_amp_assoc_rp;
  1229. #define WRITE_REMOTE_AMP_ASSOC_RP_SIZE 2
  1230. /* Testing commands */
  1231. #define OGF_TESTING_CMD 0x3e
  1232. #define OCF_READ_LOOPBACK_MODE 0x0001
  1233. #define OCF_WRITE_LOOPBACK_MODE 0x0002
  1234. #define OCF_ENABLE_DEVICE_UNDER_TEST_MODE 0x0003
  1235. #define OCF_WRITE_SIMPLE_PAIRING_DEBUG_MODE 0x0004
  1236. typedef struct {
  1237. uint8_t mode;
  1238. } __attribute__ ((packed)) write_simple_pairing_debug_mode_cp;
  1239. #define WRITE_SIMPLE_PAIRING_DEBUG_MODE_CP_SIZE 1
  1240. typedef struct {
  1241. uint8_t status;
  1242. } __attribute__ ((packed)) write_simple_pairing_debug_mode_rp;
  1243. #define WRITE_SIMPLE_PAIRING_DEBUG_MODE_RP_SIZE 1
  1244. /* LE commands */
  1245. #define OGF_LE_CTL 0x08
  1246. #define OCF_LE_SET_EVENT_MASK 0x0001
  1247. typedef struct {
  1248. uint8_t mask[8];
  1249. } __attribute__ ((packed)) le_set_event_mask_cp;
  1250. #define LE_SET_EVENT_MASK_CP_SIZE 8
  1251. #define OCF_LE_READ_BUFFER_SIZE 0x0002
  1252. typedef struct {
  1253. uint8_t status;
  1254. uint16_t pkt_len;
  1255. uint8_t max_pkt;
  1256. } __attribute__ ((packed)) le_read_buffer_size_rp;
  1257. #define LE_READ_BUFFER_SIZE_RP_SIZE 4
  1258. #define OCF_LE_READ_LOCAL_SUPPORTED_FEATURES 0x0003
  1259. typedef struct {
  1260. uint8_t status;
  1261. uint8_t features[8];
  1262. } __attribute__ ((packed)) le_read_local_supported_features_rp;
  1263. #define LE_READ_LOCAL_SUPPORTED_FEATURES_RP_SIZE 9
  1264. #define OCF_LE_SET_RANDOM_ADDRESS 0x0005
  1265. typedef struct {
  1266. bdaddr_t bdaddr;
  1267. } __attribute__ ((packed)) le_set_random_address_cp;
  1268. #define LE_SET_RANDOM_ADDRESS_CP_SIZE 6
  1269. #define OCF_LE_SET_ADVERTISING_PARAMETERS 0x0006
  1270. typedef struct {
  1271. uint16_t min_interval;
  1272. uint16_t max_interval;
  1273. uint8_t advtype;
  1274. uint8_t own_bdaddr_type;
  1275. uint8_t direct_bdaddr_type;
  1276. bdaddr_t direct_bdaddr;
  1277. uint8_t chan_map;
  1278. uint8_t filter;
  1279. } __attribute__ ((packed)) le_set_advertising_parameters_cp;
  1280. #define LE_SET_ADVERTISING_PARAMETERS_CP_SIZE 15
  1281. #define OCF_LE_READ_ADVERTISING_CHANNEL_TX_POWER 0x0007
  1282. typedef struct {
  1283. uint8_t status;
  1284. int8_t level;
  1285. } __attribute__ ((packed)) le_read_advertising_channel_tx_power_rp;
  1286. #define LE_READ_ADVERTISING_CHANNEL_TX_POWER_RP_SIZE 2
  1287. #define OCF_LE_SET_ADVERTISING_DATA 0x0008
  1288. typedef struct {
  1289. uint8_t length;
  1290. uint8_t data[31];
  1291. } __attribute__ ((packed)) le_set_advertising_data_cp;
  1292. #define LE_SET_ADVERTISING_DATA_CP_SIZE 32
  1293. #define OCF_LE_SET_SCAN_RESPONSE_DATA 0x0009
  1294. typedef struct {
  1295. uint8_t length;
  1296. uint8_t data[31];
  1297. } __attribute__ ((packed)) le_set_scan_response_data_cp;
  1298. #define LE_SET_SCAN_RESPONSE_DATA_CP_SIZE 32
  1299. #define OCF_LE_SET_ADVERTISE_ENABLE 0x000A
  1300. typedef struct {
  1301. uint8_t enable;
  1302. } __attribute__ ((packed)) le_set_advertise_enable_cp;
  1303. #define LE_SET_ADVERTISE_ENABLE_CP_SIZE 1
  1304. #define OCF_LE_SET_SCAN_PARAMETERS 0x000B
  1305. typedef struct {
  1306. uint8_t type;
  1307. uint16_t interval;
  1308. uint16_t window;
  1309. uint8_t own_bdaddr_type;
  1310. uint8_t filter;
  1311. } __attribute__ ((packed)) le_set_scan_parameters_cp;
  1312. #define LE_SET_SCAN_PARAMETERS_CP_SIZE 7
  1313. #define OCF_LE_SET_SCAN_ENABLE 0x000C
  1314. typedef struct {
  1315. uint8_t enable;
  1316. uint8_t filter_dup;
  1317. } __attribute__ ((packed)) le_set_scan_enable_cp;
  1318. #define LE_SET_SCAN_ENABLE_CP_SIZE 2
  1319. #define OCF_LE_CREATE_CONN 0x000D
  1320. typedef struct {
  1321. uint16_t interval;
  1322. uint16_t window;
  1323. uint8_t initiator_filter;
  1324. uint8_t peer_bdaddr_type;
  1325. bdaddr_t peer_bdaddr;
  1326. uint8_t own_bdaddr_type;
  1327. uint16_t min_interval;
  1328. uint16_t max_interval;
  1329. uint16_t latency;
  1330. uint16_t supervision_timeout;
  1331. uint16_t min_ce_length;
  1332. uint16_t max_ce_length;
  1333. } __attribute__ ((packed)) le_create_connection_cp;
  1334. #define LE_CREATE_CONN_CP_SIZE 25
  1335. #define OCF_LE_CREATE_CONN_CANCEL 0x000E
  1336. #define OCF_LE_READ_WHITE_LIST_SIZE 0x000F
  1337. typedef struct {
  1338. uint8_t status;
  1339. uint8_t size;
  1340. } __attribute__ ((packed)) le_read_white_list_size_rp;
  1341. #define LE_READ_WHITE_LIST_SIZE_RP_SIZE 2
  1342. #define OCF_LE_CLEAR_WHITE_LIST 0x0010
  1343. #define OCF_LE_ADD_DEVICE_TO_WHITE_LIST 0x0011
  1344. typedef struct {
  1345. uint8_t bdaddr_type;
  1346. bdaddr_t bdaddr;
  1347. } __attribute__ ((packed)) le_add_device_to_white_list_cp;
  1348. #define LE_ADD_DEVICE_TO_WHITE_LIST_CP_SIZE 7
  1349. #define OCF_LE_REMOVE_DEVICE_FROM_WHITE_LIST 0x0012
  1350. typedef struct {
  1351. uint8_t bdaddr_type;
  1352. bdaddr_t bdaddr;
  1353. } __attribute__ ((packed)) le_remove_device_from_white_list_cp;
  1354. #define LE_REMOVE_DEVICE_FROM_WHITE_LIST_CP_SIZE 7
  1355. #define OCF_LE_CONN_UPDATE 0x0013
  1356. typedef struct {
  1357. uint16_t handle;
  1358. uint16_t min_interval;
  1359. uint16_t max_interval;
  1360. uint16_t latency;
  1361. uint16_t supervision_timeout;
  1362. uint16_t min_ce_length;
  1363. uint16_t max_ce_length;
  1364. } __attribute__ ((packed)) le_connection_update_cp;
  1365. #define LE_CONN_UPDATE_CP_SIZE 14
  1366. #define OCF_LE_SET_HOST_CHANNEL_CLASSIFICATION 0x0014
  1367. typedef struct {
  1368. uint8_t map[5];
  1369. } __attribute__ ((packed)) le_set_host_channel_classification_cp;
  1370. #define LE_SET_HOST_CHANNEL_CLASSIFICATION_CP_SIZE 5
  1371. #define OCF_LE_READ_CHANNEL_MAP 0x0015
  1372. typedef struct {
  1373. uint16_t handle;
  1374. } __attribute__ ((packed)) le_read_channel_map_cp;
  1375. #define LE_READ_CHANNEL_MAP_CP_SIZE 2
  1376. typedef struct {
  1377. uint8_t status;
  1378. uint16_t handle;
  1379. uint8_t map[5];
  1380. } __attribute__ ((packed)) le_read_channel_map_rp;
  1381. #define LE_READ_CHANNEL_MAP_RP_SIZE 8
  1382. #define OCF_LE_READ_REMOTE_USED_FEATURES 0x0016
  1383. typedef struct {
  1384. uint16_t handle;
  1385. } __attribute__ ((packed)) le_read_remote_used_features_cp;
  1386. #define LE_READ_REMOTE_USED_FEATURES_CP_SIZE 2
  1387. #define OCF_LE_ENCRYPT 0x0017
  1388. typedef struct {
  1389. uint8_t key[16];
  1390. uint8_t plaintext[16];
  1391. } __attribute__ ((packed)) le_encrypt_cp;
  1392. #define LE_ENCRYPT_CP_SIZE 32
  1393. typedef struct {
  1394. uint8_t status;
  1395. uint8_t data[16];
  1396. } __attribute__ ((packed)) le_encrypt_rp;
  1397. #define LE_ENCRYPT_RP_SIZE 17
  1398. #define OCF_LE_RAND 0x0018
  1399. typedef struct {
  1400. uint8_t status;
  1401. uint64_t random;
  1402. } __attribute__ ((packed)) le_rand_rp;
  1403. #define LE_RAND_RP_SIZE 9
  1404. #define OCF_LE_START_ENCRYPTION 0x0019
  1405. typedef struct {
  1406. uint16_t handle;
  1407. uint64_t random;
  1408. uint16_t diversifier;
  1409. uint8_t key[16];
  1410. } __attribute__ ((packed)) le_start_encryption_cp;
  1411. #define LE_START_ENCRYPTION_CP_SIZE 28
  1412. #define OCF_LE_LTK_REPLY 0x001A
  1413. typedef struct {
  1414. uint16_t handle;
  1415. uint8_t key[16];
  1416. } __attribute__ ((packed)) le_ltk_reply_cp;
  1417. #define LE_LTK_REPLY_CP_SIZE 18
  1418. typedef struct {
  1419. uint8_t status;
  1420. uint16_t handle;
  1421. } __attribute__ ((packed)) le_ltk_reply_rp;
  1422. #define LE_LTK_REPLY_RP_SIZE 3
  1423. #define OCF_LE_LTK_NEG_REPLY 0x001B
  1424. typedef struct {
  1425. uint16_t handle;
  1426. } __attribute__ ((packed)) le_ltk_neg_reply_cp;
  1427. #define LE_LTK_NEG_REPLY_CP_SIZE 2
  1428. typedef struct {
  1429. uint8_t status;
  1430. uint16_t handle;
  1431. } __attribute__ ((packed)) le_ltk_neg_reply_rp;
  1432. #define LE_LTK_NEG_REPLY_RP_SIZE 3
  1433. #define OCF_LE_READ_SUPPORTED_STATES 0x001C
  1434. typedef struct {
  1435. uint8_t status;
  1436. uint64_t states;
  1437. } __attribute__ ((packed)) le_read_supported_states_rp;
  1438. #define LE_READ_SUPPORTED_STATES_RP_SIZE 9
  1439. #define OCF_LE_RECEIVER_TEST 0x001D
  1440. typedef struct {
  1441. uint8_t frequency;
  1442. } __attribute__ ((packed)) le_receiver_test_cp;
  1443. #define LE_RECEIVER_TEST_CP_SIZE 1
  1444. #define OCF_LE_TRANSMITTER_TEST 0x001E
  1445. typedef struct {
  1446. uint8_t frequency;
  1447. uint8_t length;
  1448. uint8_t payload;
  1449. } __attribute__ ((packed)) le_transmitter_test_cp;
  1450. #define LE_TRANSMITTER_TEST_CP_SIZE 3
  1451. #define OCF_LE_TEST_END 0x001F
  1452. typedef struct {
  1453. uint8_t status;
  1454. uint16_t num_pkts;
  1455. } __attribute__ ((packed)) le_test_end_rp;
  1456. #define LE_TEST_END_RP_SIZE 3
  1457. #define OCF_LE_ADD_DEVICE_TO_RESOLV_LIST 0x0027
  1458. typedef struct {
  1459. uint8_t bdaddr_type;
  1460. bdaddr_t bdaddr;
  1461. uint8_t peer_irk[16];
  1462. uint8_t local_irk[16];
  1463. } __attribute__ ((packed)) le_add_device_to_resolv_list_cp;
  1464. #define LE_ADD_DEVICE_TO_RESOLV_LIST_CP_SIZE 39
  1465. #define OCF_LE_REMOVE_DEVICE_FROM_RESOLV_LIST 0x0028
  1466. typedef struct {
  1467. uint8_t bdaddr_type;
  1468. bdaddr_t bdaddr;
  1469. } __attribute__ ((packed)) le_remove_device_from_resolv_list_cp;
  1470. #define LE_REMOVE_DEVICE_FROM_RESOLV_LIST_CP_SIZE 7
  1471. #define OCF_LE_CLEAR_RESOLV_LIST 0x0029
  1472. #define OCF_LE_READ_RESOLV_LIST_SIZE 0x002A
  1473. typedef struct {
  1474. uint8_t status;
  1475. uint8_t size;
  1476. } __attribute__ ((packed)) le_read_resolv_list_size_rp;
  1477. #define LE_READ_RESOLV_LIST_SIZE_RP_SIZE 2
  1478. #define OCF_LE_SET_ADDRESS_RESOLUTION_ENABLE 0x002D
  1479. typedef struct {
  1480. uint8_t enable;
  1481. } __attribute__ ((packed)) le_set_address_resolution_enable_cp;
  1482. #define LE_SET_ADDRESS_RESOLUTION_ENABLE_CP_SIZE 1
  1483. /* Vendor specific commands */
  1484. #define OGF_VENDOR_CMD 0x3f
  1485. /* ---- HCI Events ---- */
  1486. #define EVT_INQUIRY_COMPLETE 0x01
  1487. #define EVT_INQUIRY_RESULT 0x02
  1488. typedef struct {
  1489. bdaddr_t bdaddr;
  1490. uint8_t pscan_rep_mode;
  1491. uint8_t pscan_period_mode;
  1492. uint8_t pscan_mode;
  1493. uint8_t dev_class[3];
  1494. uint16_t clock_offset;
  1495. } __attribute__ ((packed)) inquiry_info;
  1496. #define INQUIRY_INFO_SIZE 14
  1497. #define EVT_CONN_COMPLETE 0x03
  1498. typedef struct {
  1499. uint8_t status;
  1500. uint16_t handle;
  1501. bdaddr_t bdaddr;
  1502. uint8_t link_type;
  1503. uint8_t encr_mode;
  1504. } __attribute__ ((packed)) evt_conn_complete;
  1505. #define EVT_CONN_COMPLETE_SIZE 11
  1506. #define EVT_CONN_REQUEST 0x04
  1507. typedef struct {
  1508. bdaddr_t bdaddr;
  1509. uint8_t dev_class[3];
  1510. uint8_t link_type;
  1511. } __attribute__ ((packed)) evt_conn_request;
  1512. #define EVT_CONN_REQUEST_SIZE 10
  1513. #define EVT_DISCONN_COMPLETE 0x05
  1514. typedef struct {
  1515. uint8_t status;
  1516. uint16_t handle;
  1517. uint8_t reason;
  1518. } __attribute__ ((packed)) evt_disconn_complete;
  1519. #define EVT_DISCONN_COMPLETE_SIZE 4
  1520. #define EVT_AUTH_COMPLETE 0x06
  1521. typedef struct {
  1522. uint8_t status;
  1523. uint16_t handle;
  1524. } __attribute__ ((packed)) evt_auth_complete;
  1525. #define EVT_AUTH_COMPLETE_SIZE 3
  1526. #define EVT_REMOTE_NAME_REQ_COMPLETE 0x07
  1527. typedef struct {
  1528. uint8_t status;
  1529. bdaddr_t bdaddr;
  1530. uint8_t name[HCI_MAX_NAME_LENGTH];
  1531. } __attribute__ ((packed)) evt_remote_name_req_complete;
  1532. #define EVT_REMOTE_NAME_REQ_COMPLETE_SIZE 255
  1533. #define EVT_ENCRYPT_CHANGE 0x08
  1534. typedef struct {
  1535. uint8_t status;
  1536. uint16_t handle;
  1537. uint8_t encrypt;
  1538. } __attribute__ ((packed)) evt_encrypt_change;
  1539. #define EVT_ENCRYPT_CHANGE_SIZE 4
  1540. #define EVT_CHANGE_CONN_LINK_KEY_COMPLETE 0x09
  1541. typedef struct {
  1542. uint8_t status;
  1543. uint16_t handle;
  1544. } __attribute__ ((packed)) evt_change_conn_link_key_complete;
  1545. #define EVT_CHANGE_CONN_LINK_KEY_COMPLETE_SIZE 3
  1546. #define EVT_MASTER_LINK_KEY_COMPLETE 0x0A
  1547. typedef struct {
  1548. uint8_t status;
  1549. uint16_t handle;
  1550. uint8_t key_flag;
  1551. } __attribute__ ((packed)) evt_master_link_key_complete;
  1552. #define EVT_MASTER_LINK_KEY_COMPLETE_SIZE 4
  1553. #define EVT_READ_REMOTE_FEATURES_COMPLETE 0x0B
  1554. typedef struct {
  1555. uint8_t status;
  1556. uint16_t handle;
  1557. uint8_t features[8];
  1558. } __attribute__ ((packed)) evt_read_remote_features_complete;
  1559. #define EVT_READ_REMOTE_FEATURES_COMPLETE_SIZE 11
  1560. #define EVT_READ_REMOTE_VERSION_COMPLETE 0x0C
  1561. typedef struct {
  1562. uint8_t status;
  1563. uint16_t handle;
  1564. uint8_t lmp_ver;
  1565. uint16_t manufacturer;
  1566. uint16_t lmp_subver;
  1567. } __attribute__ ((packed)) evt_read_remote_version_complete;
  1568. #define EVT_READ_REMOTE_VERSION_COMPLETE_SIZE 8
  1569. #define EVT_QOS_SETUP_COMPLETE 0x0D
  1570. typedef struct {
  1571. uint8_t status;
  1572. uint16_t handle;
  1573. uint8_t flags; /* Reserved */
  1574. hci_qos qos;
  1575. } __attribute__ ((packed)) evt_qos_setup_complete;
  1576. #define EVT_QOS_SETUP_COMPLETE_SIZE (4 + HCI_QOS_CP_SIZE)
  1577. #define EVT_CMD_COMPLETE 0x0E
  1578. typedef struct {
  1579. uint8_t ncmd;
  1580. uint16_t opcode;
  1581. } __attribute__ ((packed)) evt_cmd_complete;
  1582. #define EVT_CMD_COMPLETE_SIZE 3
  1583. #define EVT_CMD_STATUS 0x0F
  1584. typedef struct {
  1585. uint8_t status;
  1586. uint8_t ncmd;
  1587. uint16_t opcode;
  1588. } __attribute__ ((packed)) evt_cmd_status;
  1589. #define EVT_CMD_STATUS_SIZE 4
  1590. #define EVT_HARDWARE_ERROR 0x10
  1591. typedef struct {
  1592. uint8_t code;
  1593. } __attribute__ ((packed)) evt_hardware_error;
  1594. #define EVT_HARDWARE_ERROR_SIZE 1
  1595. #define EVT_FLUSH_OCCURRED 0x11
  1596. typedef struct {
  1597. uint16_t handle;
  1598. } __attribute__ ((packed)) evt_flush_occured;
  1599. #define EVT_FLUSH_OCCURRED_SIZE 2
  1600. #define EVT_ROLE_CHANGE 0x12
  1601. typedef struct {
  1602. uint8_t status;
  1603. bdaddr_t bdaddr;
  1604. uint8_t role;
  1605. } __attribute__ ((packed)) evt_role_change;
  1606. #define EVT_ROLE_CHANGE_SIZE 8
  1607. #define EVT_NUM_COMP_PKTS 0x13
  1608. typedef struct {
  1609. uint8_t num_hndl;
  1610. /* variable length part */
  1611. } __attribute__ ((packed)) evt_num_comp_pkts;
  1612. #define EVT_NUM_COMP_PKTS_SIZE 1
  1613. #define EVT_MODE_CHANGE 0x14
  1614. typedef struct {
  1615. uint8_t status;
  1616. uint16_t handle;
  1617. uint8_t mode;
  1618. uint16_t interval;
  1619. } __attribute__ ((packed)) evt_mode_change;
  1620. #define EVT_MODE_CHANGE_SIZE 6
  1621. #define EVT_RETURN_LINK_KEYS 0x15
  1622. typedef struct {
  1623. uint8_t num_keys;
  1624. /* variable length part */
  1625. } __attribute__ ((packed)) evt_return_link_keys;
  1626. #define EVT_RETURN_LINK_KEYS_SIZE 1
  1627. #define EVT_PIN_CODE_REQ 0x16
  1628. typedef struct {
  1629. bdaddr_t bdaddr;
  1630. } __attribute__ ((packed)) evt_pin_code_req;
  1631. #define EVT_PIN_CODE_REQ_SIZE 6
  1632. #define EVT_LINK_KEY_REQ 0x17
  1633. typedef struct {
  1634. bdaddr_t bdaddr;
  1635. } __attribute__ ((packed)) evt_link_key_req;
  1636. #define EVT_LINK_KEY_REQ_SIZE 6
  1637. #define EVT_LINK_KEY_NOTIFY 0x18
  1638. typedef struct {
  1639. bdaddr_t bdaddr;
  1640. uint8_t link_key[16];
  1641. uint8_t key_type;
  1642. } __attribute__ ((packed)) evt_link_key_notify;
  1643. #define EVT_LINK_KEY_NOTIFY_SIZE 23
  1644. #define EVT_LOOPBACK_COMMAND 0x19
  1645. #define EVT_DATA_BUFFER_OVERFLOW 0x1A
  1646. typedef struct {
  1647. uint8_t link_type;
  1648. } __attribute__ ((packed)) evt_data_buffer_overflow;
  1649. #define EVT_DATA_BUFFER_OVERFLOW_SIZE 1
  1650. #define EVT_MAX_SLOTS_CHANGE 0x1B
  1651. typedef struct {
  1652. uint16_t handle;
  1653. uint8_t max_slots;
  1654. } __attribute__ ((packed)) evt_max_slots_change;
  1655. #define EVT_MAX_SLOTS_CHANGE_SIZE 3
  1656. #define EVT_READ_CLOCK_OFFSET_COMPLETE 0x1C
  1657. typedef struct {
  1658. uint8_t status;
  1659. uint16_t handle;
  1660. uint16_t clock_offset;
  1661. } __attribute__ ((packed)) evt_read_clock_offset_complete;
  1662. #define EVT_READ_CLOCK_OFFSET_COMPLETE_SIZE 5
  1663. #define EVT_CONN_PTYPE_CHANGED 0x1D
  1664. typedef struct {
  1665. uint8_t status;
  1666. uint16_t handle;
  1667. uint16_t ptype;
  1668. } __attribute__ ((packed)) evt_conn_ptype_changed;
  1669. #define EVT_CONN_PTYPE_CHANGED_SIZE 5
  1670. #define EVT_QOS_VIOLATION 0x1E
  1671. typedef struct {
  1672. uint16_t handle;
  1673. } __attribute__ ((packed)) evt_qos_violation;
  1674. #define EVT_QOS_VIOLATION_SIZE 2
  1675. #define EVT_PSCAN_REP_MODE_CHANGE 0x20
  1676. typedef struct {
  1677. bdaddr_t bdaddr;
  1678. uint8_t pscan_rep_mode;
  1679. } __attribute__ ((packed)) evt_pscan_rep_mode_change;
  1680. #define EVT_PSCAN_REP_MODE_CHANGE_SIZE 7
  1681. #define EVT_FLOW_SPEC_COMPLETE 0x21
  1682. typedef struct {
  1683. uint8_t status;
  1684. uint16_t handle;
  1685. uint8_t flags;
  1686. uint8_t direction;
  1687. hci_qos qos;
  1688. } __attribute__ ((packed)) evt_flow_spec_complete;
  1689. #define EVT_FLOW_SPEC_COMPLETE_SIZE (5 + HCI_QOS_CP_SIZE)
  1690. #define EVT_INQUIRY_RESULT_WITH_RSSI 0x22
  1691. typedef struct {
  1692. bdaddr_t bdaddr;
  1693. uint8_t pscan_rep_mode;
  1694. uint8_t pscan_period_mode;
  1695. uint8_t dev_class[3];
  1696. uint16_t clock_offset;
  1697. int8_t rssi;
  1698. } __attribute__ ((packed)) inquiry_info_with_rssi;
  1699. #define INQUIRY_INFO_WITH_RSSI_SIZE 14
  1700. typedef struct {
  1701. bdaddr_t bdaddr;
  1702. uint8_t pscan_rep_mode;
  1703. uint8_t pscan_period_mode;
  1704. uint8_t pscan_mode;
  1705. uint8_t dev_class[3];
  1706. uint16_t clock_offset;
  1707. int8_t rssi;
  1708. } __attribute__ ((packed)) inquiry_info_with_rssi_and_pscan_mode;
  1709. #define INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE 15
  1710. #define EVT_READ_REMOTE_EXT_FEATURES_COMPLETE 0x23
  1711. typedef struct {
  1712. uint8_t status;
  1713. uint16_t handle;
  1714. uint8_t page_num;
  1715. uint8_t max_page_num;
  1716. uint8_t features[8];
  1717. } __attribute__ ((packed)) evt_read_remote_ext_features_complete;
  1718. #define EVT_READ_REMOTE_EXT_FEATURES_COMPLETE_SIZE 13
  1719. #define EVT_SYNC_CONN_COMPLETE 0x2C
  1720. typedef struct {
  1721. uint8_t status;
  1722. uint16_t handle;
  1723. bdaddr_t bdaddr;
  1724. uint8_t link_type;
  1725. uint8_t trans_interval;
  1726. uint8_t retrans_window;
  1727. uint16_t rx_pkt_len;
  1728. uint16_t tx_pkt_len;
  1729. uint8_t air_mode;
  1730. } __attribute__ ((packed)) evt_sync_conn_complete;
  1731. #define EVT_SYNC_CONN_COMPLETE_SIZE 17
  1732. #define EVT_SYNC_CONN_CHANGED 0x2D
  1733. typedef struct {
  1734. uint8_t status;
  1735. uint16_t handle;
  1736. uint8_t trans_interval;
  1737. uint8_t retrans_window;
  1738. uint16_t rx_pkt_len;
  1739. uint16_t tx_pkt_len;
  1740. } __attribute__ ((packed)) evt_sync_conn_changed;
  1741. #define EVT_SYNC_CONN_CHANGED_SIZE 9
  1742. #define EVT_SNIFF_SUBRATING 0x2E
  1743. typedef struct {
  1744. uint8_t status;
  1745. uint16_t handle;
  1746. uint16_t max_tx_latency;
  1747. uint16_t max_rx_latency;
  1748. uint16_t min_remote_timeout;
  1749. uint16_t min_local_timeout;
  1750. } __attribute__ ((packed)) evt_sniff_subrating;
  1751. #define EVT_SNIFF_SUBRATING_SIZE 11
  1752. #define EVT_EXTENDED_INQUIRY_RESULT 0x2F
  1753. typedef struct {
  1754. bdaddr_t bdaddr;
  1755. uint8_t pscan_rep_mode;
  1756. uint8_t pscan_period_mode;
  1757. uint8_t dev_class[3];
  1758. uint16_t clock_offset;
  1759. int8_t rssi;
  1760. uint8_t data[HCI_MAX_EIR_LENGTH];
  1761. } __attribute__ ((packed)) extended_inquiry_info;
  1762. #define EXTENDED_INQUIRY_INFO_SIZE 254
  1763. #define EVT_ENCRYPTION_KEY_REFRESH_COMPLETE 0x30
  1764. typedef struct {
  1765. uint8_t status;
  1766. uint16_t handle;
  1767. } __attribute__ ((packed)) evt_encryption_key_refresh_complete;
  1768. #define EVT_ENCRYPTION_KEY_REFRESH_COMPLETE_SIZE 3
  1769. #define EVT_IO_CAPABILITY_REQUEST 0x31
  1770. typedef struct {
  1771. bdaddr_t bdaddr;
  1772. } __attribute__ ((packed)) evt_io_capability_request;
  1773. #define EVT_IO_CAPABILITY_REQUEST_SIZE 6
  1774. #define EVT_IO_CAPABILITY_RESPONSE 0x32
  1775. typedef struct {
  1776. bdaddr_t bdaddr;
  1777. uint8_t capability;
  1778. uint8_t oob_data;
  1779. uint8_t authentication;
  1780. } __attribute__ ((packed)) evt_io_capability_response;
  1781. #define EVT_IO_CAPABILITY_RESPONSE_SIZE 9
  1782. #define EVT_USER_CONFIRM_REQUEST 0x33
  1783. typedef struct {
  1784. bdaddr_t bdaddr;
  1785. uint32_t passkey;
  1786. } __attribute__ ((packed)) evt_user_confirm_request;
  1787. #define EVT_USER_CONFIRM_REQUEST_SIZE 10
  1788. #define EVT_USER_PASSKEY_REQUEST 0x34
  1789. typedef struct {
  1790. bdaddr_t bdaddr;
  1791. } __attribute__ ((packed)) evt_user_passkey_request;
  1792. #define EVT_USER_PASSKEY_REQUEST_SIZE 6
  1793. #define EVT_REMOTE_OOB_DATA_REQUEST 0x35
  1794. typedef struct {
  1795. bdaddr_t bdaddr;
  1796. } __attribute__ ((packed)) evt_remote_oob_data_request;
  1797. #define EVT_REMOTE_OOB_DATA_REQUEST_SIZE 6
  1798. #define EVT_SIMPLE_PAIRING_COMPLETE 0x36
  1799. typedef struct {
  1800. uint8_t status;
  1801. bdaddr_t bdaddr;
  1802. } __attribute__ ((packed)) evt_simple_pairing_complete;
  1803. #define EVT_SIMPLE_PAIRING_COMPLETE_SIZE 7
  1804. #define EVT_LINK_SUPERVISION_TIMEOUT_CHANGED 0x38
  1805. typedef struct {
  1806. uint16_t handle;
  1807. uint16_t timeout;
  1808. } __attribute__ ((packed)) evt_link_supervision_timeout_changed;
  1809. #define EVT_LINK_SUPERVISION_TIMEOUT_CHANGED_SIZE 4
  1810. #define EVT_ENHANCED_FLUSH_COMPLETE 0x39
  1811. typedef struct {
  1812. uint16_t handle;
  1813. } __attribute__ ((packed)) evt_enhanced_flush_complete;
  1814. #define EVT_ENHANCED_FLUSH_COMPLETE_SIZE 2
  1815. #define EVT_USER_PASSKEY_NOTIFY 0x3B
  1816. typedef struct {
  1817. bdaddr_t bdaddr;
  1818. uint32_t passkey;
  1819. } __attribute__ ((packed)) evt_user_passkey_notify;
  1820. #define EVT_USER_PASSKEY_NOTIFY_SIZE 10
  1821. #define EVT_KEYPRESS_NOTIFY 0x3C
  1822. typedef struct {
  1823. bdaddr_t bdaddr;
  1824. uint8_t type;
  1825. } __attribute__ ((packed)) evt_keypress_notify;
  1826. #define EVT_KEYPRESS_NOTIFY_SIZE 7
  1827. #define EVT_REMOTE_HOST_FEATURES_NOTIFY 0x3D
  1828. typedef struct {
  1829. bdaddr_t bdaddr;
  1830. uint8_t features[8];
  1831. } __attribute__ ((packed)) evt_remote_host_features_notify;
  1832. #define EVT_REMOTE_HOST_FEATURES_NOTIFY_SIZE 14
  1833. #define EVT_LE_META_EVENT 0x3E
  1834. typedef struct {
  1835. uint8_t subevent;
  1836. uint8_t data[];
  1837. } __attribute__ ((packed)) evt_le_meta_event;
  1838. #define EVT_LE_META_EVENT_SIZE 1
  1839. #define EVT_LE_CONN_COMPLETE 0x01
  1840. typedef struct {
  1841. uint8_t status;
  1842. uint16_t handle;
  1843. uint8_t role;
  1844. uint8_t peer_bdaddr_type;
  1845. bdaddr_t peer_bdaddr;
  1846. uint16_t interval;
  1847. uint16_t latency;
  1848. uint16_t supervision_timeout;
  1849. uint8_t master_clock_accuracy;
  1850. } __attribute__ ((packed)) evt_le_connection_complete;
  1851. #define EVT_LE_CONN_COMPLETE_SIZE 18
  1852. #define EVT_LE_ADVERTISING_REPORT 0x02
  1853. typedef struct {
  1854. uint8_t evt_type;
  1855. uint8_t bdaddr_type;
  1856. bdaddr_t bdaddr;
  1857. uint8_t length;
  1858. uint8_t data[];
  1859. } __attribute__ ((packed)) le_advertising_info;
  1860. #define LE_ADVERTISING_INFO_SIZE 9
  1861. #define EVT_LE_CONN_UPDATE_COMPLETE 0x03
  1862. typedef struct {
  1863. uint8_t status;
  1864. uint16_t handle;
  1865. uint16_t interval;
  1866. uint16_t latency;
  1867. uint16_t supervision_timeout;
  1868. } __attribute__ ((packed)) evt_le_connection_update_complete;
  1869. #define EVT_LE_CONN_UPDATE_COMPLETE_SIZE 9
  1870. #define EVT_LE_READ_REMOTE_USED_FEATURES_COMPLETE 0x04
  1871. typedef struct {
  1872. uint8_t status;
  1873. uint16_t handle;
  1874. uint8_t features[8];
  1875. } __attribute__ ((packed)) evt_le_read_remote_used_features_complete;
  1876. #define EVT_LE_READ_REMOTE_USED_FEATURES_COMPLETE_SIZE 11
  1877. #define EVT_LE_LTK_REQUEST 0x05
  1878. typedef struct {
  1879. uint16_t handle;
  1880. uint64_t random;
  1881. uint16_t diversifier;
  1882. } __attribute__ ((packed)) evt_le_long_term_key_request;
  1883. #define EVT_LE_LTK_REQUEST_SIZE 12
  1884. #define EVT_PHYSICAL_LINK_COMPLETE 0x40
  1885. typedef struct {
  1886. uint8_t status;
  1887. uint8_t handle;
  1888. } __attribute__ ((packed)) evt_physical_link_complete;
  1889. #define EVT_PHYSICAL_LINK_COMPLETE_SIZE 2
  1890. #define EVT_CHANNEL_SELECTED 0x41
  1891. #define EVT_DISCONNECT_PHYSICAL_LINK_COMPLETE 0x42
  1892. typedef struct {
  1893. uint8_t status;
  1894. uint8_t handle;
  1895. uint8_t reason;
  1896. } __attribute__ ((packed)) evt_disconn_physical_link_complete;
  1897. #define EVT_DISCONNECT_PHYSICAL_LINK_COMPLETE_SIZE 3
  1898. #define EVT_PHYSICAL_LINK_LOSS_EARLY_WARNING 0x43
  1899. typedef struct {
  1900. uint8_t handle;
  1901. uint8_t reason;
  1902. } __attribute__ ((packed)) evt_physical_link_loss_warning;
  1903. #define EVT_PHYSICAL_LINK_LOSS_WARNING_SIZE 2
  1904. #define EVT_PHYSICAL_LINK_RECOVERY 0x44
  1905. typedef struct {
  1906. uint8_t handle;
  1907. } __attribute__ ((packed)) evt_physical_link_recovery;
  1908. #define EVT_PHYSICAL_LINK_RECOVERY_SIZE 1
  1909. #define EVT_LOGICAL_LINK_COMPLETE 0x45
  1910. typedef struct {
  1911. uint8_t status;
  1912. uint16_t log_handle;
  1913. uint8_t handle;
  1914. uint8_t tx_flow_id;
  1915. } __attribute__ ((packed)) evt_logical_link_complete;
  1916. #define EVT_LOGICAL_LINK_COMPLETE_SIZE 5
  1917. #define EVT_DISCONNECT_LOGICAL_LINK_COMPLETE 0x46
  1918. #define EVT_FLOW_SPEC_MODIFY_COMPLETE 0x47
  1919. typedef struct {
  1920. uint8_t status;
  1921. uint16_t handle;
  1922. } __attribute__ ((packed)) evt_flow_spec_modify_complete;
  1923. #define EVT_FLOW_SPEC_MODIFY_COMPLETE_SIZE 3
  1924. #define EVT_NUMBER_COMPLETED_BLOCKS 0x48
  1925. typedef struct {
  1926. uint16_t handle;
  1927. uint16_t num_cmplt_pkts;
  1928. uint16_t num_cmplt_blks;
  1929. } __attribute__ ((packed)) cmplt_handle;
  1930. typedef struct {
  1931. uint16_t total_num_blocks;
  1932. uint8_t num_handles;
  1933. cmplt_handle handles[];
  1934. } __attribute__ ((packed)) evt_num_completed_blocks;
  1935. #define EVT_AMP_STATUS_CHANGE 0x4D
  1936. typedef struct {
  1937. uint8_t status;
  1938. uint8_t amp_status;
  1939. } __attribute__ ((packed)) evt_amp_status_change;
  1940. #define EVT_AMP_STATUS_CHANGE_SIZE 2
  1941. #define EVT_TESTING 0xFE
  1942. #define EVT_VENDOR 0xFF
  1943. /* Internal events generated by BlueZ stack */
  1944. #define EVT_STACK_INTERNAL 0xFD
  1945. typedef struct {
  1946. uint16_t type;
  1947. uint8_t data[];
  1948. } __attribute__ ((packed)) evt_stack_internal;
  1949. #define EVT_STACK_INTERNAL_SIZE 2
  1950. #define EVT_SI_DEVICE 0x01
  1951. typedef struct {
  1952. uint16_t event;
  1953. uint16_t dev_id;
  1954. } __attribute__ ((packed)) evt_si_device;
  1955. #define EVT_SI_DEVICE_SIZE 4
  1956. /* -------- HCI Packet structures -------- */
  1957. #define HCI_TYPE_LEN 1
  1958. typedef struct {
  1959. uint16_t opcode; /* OCF & OGF */
  1960. uint8_t plen;
  1961. } __attribute__ ((packed)) hci_command_hdr;
  1962. #define HCI_COMMAND_HDR_SIZE 3
  1963. typedef struct {
  1964. uint8_t evt;
  1965. uint8_t plen;
  1966. } __attribute__ ((packed)) hci_event_hdr;
  1967. #define HCI_EVENT_HDR_SIZE 2
  1968. typedef struct {
  1969. uint16_t handle; /* Handle & Flags(PB, BC) */
  1970. uint16_t dlen;
  1971. } __attribute__ ((packed)) hci_acl_hdr;
  1972. #define HCI_ACL_HDR_SIZE 4
  1973. typedef struct {
  1974. uint16_t handle;
  1975. uint8_t dlen;
  1976. } __attribute__ ((packed)) hci_sco_hdr;
  1977. #define HCI_SCO_HDR_SIZE 3
  1978. typedef struct {
  1979. uint16_t device;
  1980. uint16_t type;
  1981. uint16_t plen;
  1982. } __attribute__ ((packed)) hci_msg_hdr;
  1983. #define HCI_MSG_HDR_SIZE 6
  1984. /* Command opcode pack/unpack */
  1985. #define cmd_opcode_pack(ogf, ocf) (uint16_t)((ocf & 0x03ff)|(ogf << 10))
  1986. #define cmd_opcode_ogf(op) (op >> 10)
  1987. #define cmd_opcode_ocf(op) (op & 0x03ff)
  1988. /* ACL handle and flags pack/unpack */
  1989. #define acl_handle_pack(h, f) (uint16_t)((h & 0x0fff)|(f << 12))
  1990. #define acl_handle(h) (h & 0x0fff)
  1991. #define acl_flags(h) (h >> 12)
  1992. #endif /* _NO_HCI_DEFS */
  1993. /* HCI Socket options */
  1994. #define HCI_DATA_DIR 1
  1995. #define HCI_FILTER 2
  1996. #define HCI_TIME_STAMP 3
  1997. /* HCI CMSG flags */
  1998. #define HCI_CMSG_DIR 0x0001
  1999. #define HCI_CMSG_TSTAMP 0x0002
  2000. struct sockaddr_hci {
  2001. sa_family_t hci_family;
  2002. unsigned short hci_dev;
  2003. unsigned short hci_channel;
  2004. };
  2005. #define HCI_DEV_NONE 0xffff
  2006. #define HCI_CHANNEL_RAW 0
  2007. #define HCI_CHANNEL_USER 1
  2008. #define HCI_CHANNEL_MONITOR 2
  2009. #define HCI_CHANNEL_CONTROL 3
  2010. #define HCI_CHANNEL_LOGGING 4
  2011. struct hci_filter {
  2012. uint32_t type_mask;
  2013. uint32_t event_mask[2];
  2014. uint16_t opcode;
  2015. };
  2016. #define HCI_FLT_TYPE_BITS 31
  2017. #define HCI_FLT_EVENT_BITS 63
  2018. #define HCI_FLT_OGF_BITS 63
  2019. #define HCI_FLT_OCF_BITS 127
  2020. /* Ioctl requests structures */
  2021. struct hci_dev_stats {
  2022. uint32_t err_rx;
  2023. uint32_t err_tx;
  2024. uint32_t cmd_tx;
  2025. uint32_t evt_rx;
  2026. uint32_t acl_tx;
  2027. uint32_t acl_rx;
  2028. uint32_t sco_tx;
  2029. uint32_t sco_rx;
  2030. uint32_t byte_rx;
  2031. uint32_t byte_tx;
  2032. };
  2033. struct hci_dev_info {
  2034. uint16_t dev_id;
  2035. char name[8];
  2036. bdaddr_t bdaddr;
  2037. uint32_t flags;
  2038. uint8_t type;
  2039. uint8_t features[8];
  2040. uint32_t pkt_type;
  2041. uint32_t link_policy;
  2042. uint32_t link_mode;
  2043. uint16_t acl_mtu;
  2044. uint16_t acl_pkts;
  2045. uint16_t sco_mtu;
  2046. uint16_t sco_pkts;
  2047. struct hci_dev_stats stat;
  2048. };
  2049. struct hci_conn_info {
  2050. uint16_t handle;
  2051. bdaddr_t bdaddr;
  2052. uint8_t type;
  2053. uint8_t out;
  2054. uint16_t state;
  2055. uint32_t link_mode;
  2056. };
  2057. struct hci_dev_req {
  2058. uint16_t dev_id;
  2059. uint32_t dev_opt;
  2060. };
  2061. struct hci_dev_list_req {
  2062. uint16_t dev_num;
  2063. struct hci_dev_req dev_req[]; /* hci_dev_req structures */
  2064. };
  2065. struct hci_conn_list_req {
  2066. uint16_t dev_id;
  2067. uint16_t conn_num;
  2068. struct hci_conn_info conn_info[];
  2069. };
  2070. struct hci_conn_info_req {
  2071. bdaddr_t bdaddr;
  2072. uint8_t type;
  2073. struct hci_conn_info conn_info[];
  2074. };
  2075. struct hci_auth_info_req {
  2076. bdaddr_t bdaddr;
  2077. uint8_t type;
  2078. };
  2079. struct hci_inquiry_req {
  2080. uint16_t dev_id;
  2081. uint16_t flags;
  2082. uint8_t lap[3];
  2083. uint8_t length;
  2084. uint8_t num_rsp;
  2085. };
  2086. #define IREQ_CACHE_FLUSH 0x0001
  2087. #ifdef __cplusplus
  2088. }
  2089. #endif
  2090. #endif /* __HCI_H */