att.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  1. #ifndef _ATT_H_
  2. #define _ATT_H_
  3. #include "yc11xx.h"
  4. #include "ipc.h"
  5. #include "type.h"
  6. #include "ycdef.h"
  7. #include "stddef.h"
  8. #include <string.h>
  9. //#define att_list_struct
  10. #define ATT_LIST_LEN mem_rc_att_list_end-mem_rc_att_list
  11. typedef struct
  12. {
  13. uint8_t Len;
  14. uint8_t uuid[16];
  15. }UUID_TYPE;
  16. typedef struct
  17. {
  18. uint16_t handle;
  19. UUID_TYPE uuids;
  20. uint16_t dataLen;
  21. uint16_t dataPtr;
  22. }FOUND_UUID_TYPE;
  23. typedef struct
  24. {
  25. uint16_t startHandle;
  26. uint16_t endHandle;
  27. UUID_TYPE uuids;
  28. }ATTRIBUTE_GROUP_TYPE;
  29. typedef struct
  30. {
  31. uint8_t Len;
  32. uint8_t uuid[2];
  33. }UUID32_TYPE;
  34. typedef struct
  35. {
  36. uint8_t Len;
  37. uint8_t uuid[16];
  38. }UUID128_TYPE;
  39. typedef struct
  40. {
  41. uint16_t handle;
  42. uint8_t uuid_len;
  43. uint8_t *uuid;
  44. uint8_t dataLen;
  45. uint8_t *dataPtr;
  46. }ATT_TABLE_TYPE;
  47. #define ATT_LIST_DATA_LENGTH_BYTE 2
  48. #define CLIENT_CHARACTERTIC_CONFIGURATION 0X2902
  49. #define EXTERNAL_REPORT_REFERENCE 0X2907
  50. #define REPORT_REFERENCE 0X2908
  51. #define UUID_SERVICE_GENERIC_ACC 0x1800
  52. #define UUID_SERVICE_GENERIC_ATT 0x1801
  53. #define UUID_SERVICE_DEVICE_INFO 0x180a
  54. #define UUID_SERVICE_BATTERY 0x180f
  55. #define UUID_SERVICE_HIDS 0x1812
  56. #define UUID_GATT_PRIMARY_SERVICE 0x2800
  57. #define UUID_GATT_SECONDARY_SERVICE 0x2801
  58. #define UUID_GATT_INCLUDE 0X2802
  59. #define UUID_GATT_CHARACTERISTIC 0X2803
  60. #define UUID_CHRCTR_DEVICE_NAME 0X2A00
  61. #define UUID_CHRCTR_APPEARANCE 0X2A01
  62. #define UUID_CHRCTR_PerPreConn_Parameters 0x2A04
  63. #define UUID_CHRCTR_SERVICE_CHANGED 0X2A05
  64. #define UUID_CHRCTR_BATTERY_LEVEL 0X2A19
  65. #define UUID_CHRCTR_KEYBOARD_INPUT 0X2A22
  66. #define UUID_CHRCTR_SYSTEM_ID 0X2A23
  67. #define UUID_CHRCTR_MODEL_NUMBER 0X2A24
  68. #define UUID_CHRCTR_SERIAL_NUMBER 0X2A25
  69. #define UUID_CHRCTR_FIRMWARE 0X2A26
  70. #define UUID_CHRCTR_MANUFACTURE_NAME 0X2A29
  71. #define UUID_CHRCTR_KEYBOARD_OUTPUT 0X2A32
  72. #define UUID_CHRCTR_MOUSE_INPUT 0X2A33
  73. #define UUID_CHRCTR_HID_INFO 0X2A4A
  74. #define UUID_CHRCTR_REPORT_MAP 0X2A4B
  75. #define UUID_CHRCTR_HID_CTRL_POINT 0X2A4C
  76. #define UUID_CHRCTR_REPORT 0X2A4D
  77. #define UUID_CHRCTR_PROTOCOL_MODE 0X2A4E
  78. #define UUID_CHRCTR_PNP_ID 0X2A50
  79. #define READ_PREMITTED 0x02
  80. #define WRITE_WITHOUT_RESPONSE_PREMITTED 0x04
  81. #define WRITE_PREMITTED 0x08
  82. #define NOTIFY_PREMITTED 0x10
  83. #define INDICATE_PREMITTED 0X20
  84. #define UUID2ARRAY(uuid) uuid&0xff, uuid>>8
  85. // const uint8_t READ_PREMITTED_ONLY[] = {READ_PREMITTED};
  86. // const uint8_t NOTIFY_PREMITTED_ONLY[] = {NOTIFY_PREMITTED};
  87. // const uint8_t INDICATE_PREMITTED_ONLY[] = {INDICATE_PREMITTED};
  88. // const uint8_t WRITE_PREMITTED_ONLY[] = {WRITE_PREMITTED};
  89. // const uint8_t WRITE_WITHOUT_RESPONSE_PREMITTED_ONLY[] = {WRITE_WITHOUT_RESPONSE_PREMITTED};
  90. // const uint8_t READ_NOTIFY_PREMITTED[] = {WRITE_WITHOUT_RESPONSE_PREMITTED|NOTIFY_PREMITTED};
  91. // const uint8_t READ_WRITE_WRITEWITHOUTRSP_PREMITTED[] = {WRITE_WITHOUT_RESPONSE_PREMITTED|READ_PREMITTED|WRITE_PREMITTED};
  92. // const uint8_t READ_WRITE_PREMITTED[] = {READ_PREMITTED|WRITE_PREMITTED};
  93. // const uint8_t READ_WRITEWITHOUTRSP_PREMITTED[] = {READ_PREMITTED|WRITE_WITHOUT_RESPONSE_PREMITTED};
  94. // const uint8_t PRIMARY_SERVICE[] = {UUID2ARRAY(UUID_GATT_PRIMARY_SERVICE)};
  95. // const uint8_t SECONDARY_SERVICE[] = {UUID2ARRAY(UUID_GATT_SECONDARY_SERVICE)};
  96. // const uint8_t SERVICE_GENERIC_ACC[] = {UUID2ARRAY(UUID_SERVICE_GENERIC_ACC)};
  97. // const uint8_t GATT_CHARACTERISTIC[] = {UUID2ARRAY(UUID_GATT_CHARACTERISTIC)};
  98. // const uint8_t CHRCTR_DEVICE_NAME[] = {UUID2ARRAY(UUID_CHRCTR_DEVICE_NAME)};
  99. // const uint8_t CHRCTR_APPEARANCE[] = {UUID2ARRAY(UUID_CHRCTR_APPEARANCE)};
  100. // const uint8_t appearance_value[] = {0x80,0x01};
  101. // const uint8_t SERVICE_GENERIC_ATT[] = {UUID2ARRAY(UUID_SERVICE_GENERIC_ATT)};
  102. // const uint8_t CHCTR_PerPreferred_Connection_Parameters[] = {UUID2ARRAY(UUID_CHRCTR_PerPreConn_Parameters)};
  103. // const uint8_t CHRCTR_SERVICE_CHANGED[] = {UUID2ARRAY(UUID_CHRCTR_SERVICE_CHANGED)};
  104. // const uint8_t service_changed_value[] = {0,0};
  105. // const uint8_t CHARACTERTIC_CONFIGURATION[] = {UUID2ARRAY(CLIENT_CHARACTERTIC_CONFIGURATION)};
  106. // const uint8_t service_changed_conf_value[] = {0,0};
  107. // const uint8_t SERVICE_BATTERY[] = {UUID2ARRAY(UUID_SERVICE_BATTERY)};
  108. // const uint8_t CHRCTR_BATTERY_LEVEL[] = {UUID2ARRAY(UUID_CHRCTR_BATTERY_LEVEL)};
  109. // const uint8_t battery_leval_conf_value[] = {0,0};
  110. // const uint8_t SERVICE_DEVICE_INFO[] = {UUID2ARRAY(UUID_SERVICE_DEVICE_INFO)};
  111. // const uint8_t CHRCTR_MODEL_NUMBER[] = {UUID2ARRAY(UUID_CHRCTR_MODEL_NUMBER)};
  112. // const uint8_t model_number_value[] = {'1','1','1'};
  113. // const uint8_t CHRCTR_MANUFACTURE_NAME[] = {UUID2ARRAY(UUID_CHRCTR_MANUFACTURE_NAME)};
  114. // const uint8_t manufacture_name_value[] = {'n','a','n','o'};
  115. // const uint8_t CHRCTR_PNP_ID[] = {UUID2ARRAY(UUID_CHRCTR_PNP_ID)};
  116. // const uint8_t pnp_id_value[]={0x02,0x54,0x2b,0x00,0x16,0x00,0x00};
  117. // const uint8_t SERVICE_HIDS[] = {UUID2ARRAY(UUID_SERVICE_HIDS)};
  118. // const uint8_t CHRCTR_HID_INFO[] = {UUID2ARRAY(UUID_CHRCTR_HID_INFO)};
  119. // const uint8_t hid_info[] = {0x01,0x01,0x00,0x02};
  120. // const uint8_t CHRCTR_REPORT_MAP[] = {UUID2ARRAY(UUID_CHRCTR_REPORT_MAP)};
  121. // const uint8_t EXTERNAL_REPORT[] = {UUID2ARRAY(EXTERNAL_REPORT_REFERENCE)};
  122. // const uint8_t external_report_value[] ={0x19,0x2a};
  123. // const uint8_t CHRCTR_HID_CTRL_POINT[] = {UUID2ARRAY(UUID_CHRCTR_HID_CTRL_POINT)};
  124. // const uint8_t hid_ctrl_point_value[] = {0,0};
  125. // const uint8_t CHRCTR_KEYBOARD_INPUT[] = {UUID2ARRAY(UUID_CHRCTR_KEYBOARD_INPUT)};
  126. // const uint8_t keyboard_input_value[] = {0,0,0,0,0,0,0,0};
  127. // const uint8_t keyboard_input_conf_value[] = {0,0};
  128. // const uint8_t CHRCTR_KEYBOARD_OUTPUT[] = {UUID2ARRAY(UUID_CHRCTR_KEYBOARD_OUTPUT)};
  129. // const uint8_t keyboard_output_value[] = {0,0,0,0,0,0,0,0};
  130. // const uint8_t CHRCTR_MOUSE_INPUT[] = {UUID2ARRAY(UUID_CHRCTR_MOUSE_INPUT)};
  131. // const uint8_t mouse_input_value[] = {0,0,0,0,0,0,0,0};
  132. // const uint8_t mouse_input_conf_value[] = {0,0};
  133. // const uint8_t CHRCTR_REPORT[] = {UUID2ARRAY(UUID_CHRCTR_REPORT)};
  134. // const uint8_t report1_value[] = {0,0,0,0,0,0,0,0};
  135. // const uint8_t report1_conf_value[] = {0,0};
  136. // const uint8_t GATT_REPORT_REFERENCE[] = {UUID2ARRAY(REPORT_REFERENCE)};
  137. // const uint8_t reportid1_input_value[] = {1,1};
  138. // const uint8_t report8_value[] = {0,0,0,0,0,0,0,0};
  139. // const uint8_t report8_conf_value[] = {0,0};
  140. // const uint8_t reportid8_input_value[] = {8,1};
  141. // const uint8_t report3_value[] = {0,0,0,0,0,0,0,0};
  142. // const uint8_t report3_conf_value[] = {0,0};
  143. // const uint8_t reportid3_input_value[] = {3,1};
  144. // const uint8_t reportb_value[] = {0,0,0,0,0,0,0,0};
  145. // const uint8_t reportb_conf_value[] = {0,0};
  146. // const uint8_t reportidb_input_value[] = {0x0b,1};
  147. // const uint8_t report_output_value[] = {0,0,0,0,0,0,0,0};
  148. // const uint8_t reportid_ouput_value[] = {0,2};
  149. // const uint8_t report_feature_value[] = {0,0,0,0,0,0,0,0};
  150. // const uint8_t reportid_feature_value[] = {0,3};
  151. // const uint8_t CHRCTR_PROTOCOL_MODE[] = {UUID2ARRAY(UUID_CHRCTR_PROTOCOL_MODE)};
  152. // const uint8_t YICHIP_SERVICE[] = {0x49,0x53,0x53,0x43,0xfe,0x7d,0x4a,0xe5,0x8f,0xa9,0x9f,0xaf,0xd2,0x05,0xe4,0x55};
  153. // const uint8_t yichip_ota_notify_value[20] = {0};
  154. // const uint8_t yichip_ota_write_value[20] = {0};
  155. // const uint8_t yichip_ota_notify_conf_value[] = {0,0};
  156. /**
  157. const uint8_t report_map_value[] =
  158. { 0x05 ,0x01 //Usage Page Generic Desktop)
  159. ,0x09 ,0x06 //Usage (Keyboard)
  160. ,0xA1 ,0x01 //Collection (Application)
  161. ,0x85 ,0x0b //report ID (HIDAPP_KEYBOARD_REPORT_ID)
  162. ,0x75 ,0x01 //Report Size (1)
  163. ,0x95 ,0x08 //Report Count (8)
  164. ,0x05 ,0x07 //Usage Page (Key Codes)
  165. ,0x19 ,0xe0 //Usage Minimum (224)
  166. ,0x29 ,0xe7 //Usage Maximum (231)
  167. ,0x15 ,0x00 //Logical Minimum (0)
  168. ,0x25 ,0x01 //Logical Maximum (1)
  169. ,0x81 ,0x02 //Input (Data, Variable, Absolute)
  170. ,0x95 ,0x01 //Report Count (1)
  171. ,0x75 ,0x08 //Report Size (8)
  172. ,0x81 ,0x01 //Input (Constant) reserved byte(1)
  173. ,0x95 ,0x05 //Report Count (5)
  174. ,0x75 ,0x01 //Report Size (1)
  175. ,0x05 ,0x08 //Usage Page (Page//for LEDs)
  176. ,0x19 ,0x01 //Usage Minimum (1)
  177. ,0x29 ,0x05 //Usage Maximum (5)
  178. ,0x91 ,0x02 //Output (Data, Variable, Absolute), Led report
  179. ,0x95 ,0x01 //Report Count (1)
  180. ,0x75 ,0x03 //Report Size (3)
  181. ,0x91 ,0x01 //Output (Constant), Led report padding
  182. ,0x95 ,0x06 //Report Count (6)
  183. ,0x75 ,0x08 //Report Size (8)
  184. ,0x15 ,0x00 //Logical Minimum (0)
  185. ,0x25 ,0xeb //Logical Maximum (101)
  186. ,0x05 ,0x07 //Usage Page (Key codes)
  187. ,0x19 ,0x00 //Usage Minimum (0)
  188. ,0x29 ,0xeb //Usage Maximum (101)
  189. ,0x81 ,0x00 //Input (Data, Array) Key array(6 bytes)
  190. ,0xC0 //End Collection (Application)
  191. //Consumer Usepage
  192. ,0x05 ,0x0c //Usage Page (Consumer Devices)
  193. ,0x09 ,0x01 //Usage (Consumer Control)
  194. ,0xa1 ,0x01 //Collection (Application)
  195. ,0x85 ,0x01 //HIDAPP_REMOTE_REPORT_ID, //report ID (01)
  196. ,0x19 ,0x00 //USAGE_MINIMUM (0)
  197. ,0x2a ,0x9c ,0x02 //USAGE_MINIMUM (29c)
  198. ,0x15 ,0x00 //Logical Minimum (0)
  199. ,0x26 ,0x9c ,0x02 //Logical Maximum (29c)
  200. ,0x95 ,0x01 //Report Count (1)
  201. ,0x75 ,0x10 //Report Size (16)
  202. ,0x81 ,0x00 //Input (Data, array, Absolute)
  203. ,0x09 ,0x02 //Usage (Numeric Key Pad )
  204. ,0xa1 ,0x02 //Collection (Application)
  205. ,0x05 ,0x09 //Usage Page (button)
  206. ,0x19 ,0x01 //Usage Minimum (1)
  207. ,0x29 ,0x0a //Usage Maximum (10)
  208. ,0x15 ,0x01 //Logical Minimum (1)
  209. ,0x25 ,0x0a //Logical Maximum (10)
  210. ,0x95 ,0x01 //Report Count (1)
  211. ,0x75 ,0x08 //Report Size (8)
  212. ,0x81 ,0x40 //Input (Data, Variable, Relative)
  213. ,0xc0 //End Collection
  214. ,0xc0 //End Collection
  215. //optional mouse data
  216. ,0x05 ,0x01 //Usage Page (Generic Desktop)
  217. ,0x09 ,0x02 //USAGE (Mouse)
  218. ,0xa1 ,0x01 //COLLECTION (Application)
  219. ,0x09 ,0x01 //USAGE (Pointer)
  220. ,0xa1 ,0x00 //COLLECTION (Physical)
  221. ,0x85 ,0x03 //HIDAPP_MOUSE_REPORT_ID, //report ID (HIDAPP_MOUSE_REPORT_ID)
  222. ,0x05 ,0x01 //USAGE_PAGE (Generic Desktop)
  223. ,0x09 ,0x30 //USAGE (X)
  224. ,0x09 ,0x31 //USAGE (Y)
  225. ,0x15 ,0x80 //LOGICAL_MINIMUM (-127)
  226. ,0x25 ,0x7f //LOGICAL_MAXIMUM (127)
  227. ,0x75 ,0x08 //REPORT_SIZE (8)
  228. ,0x95 ,0x02 //REPORT_COUNT (2)
  229. ,0x81 ,0x06 //INPUT (Data, Variable, Relative)
  230. ,0x05 ,0x09 //USAGE_PAGE (Button)
  231. ,0x19 ,0x01 //USAGE_MINIMUM (Button 1)
  232. ,0x29 ,0x05 //USAGE_MAXIMUM (Button 5)
  233. ,0x15 ,0x00 //LOGICAL_MINIMUM (0)
  234. ,0x25 ,0x01 //LOGICAL_MAXIMUM (1)
  235. ,0x95 ,0x05 //REPORT_COUNT (5)
  236. ,0x75 ,0x01 //REPORT_SIZE (1)
  237. ,0x81 ,0x02 //INPUT ()
  238. ,0x95 ,0x01 //REPORT_COUNT (1)
  239. ,0x75 ,0x03 //REPORT_SIZE (3)
  240. ,0x81 ,0x03 //INPUT ()
  241. ,0xc0 //End Collection (Physical)
  242. ,0xc0 //End Collection (Application)
  243. //end mouse data
  244. ,0x06 ,0x01 ,0xff
  245. ,0x09 ,0x01 //Usage (Consumer Control)
  246. ,0xa1 ,0x02 //COLLECTION ()
  247. ,0x85 ,0x08 //HIDAPP_VOICE_REPORT_ID, //report ID (HIDAPP_KEYBOARD_REPORT_ID)
  248. ,0x09 ,0x14
  249. ,0x75 ,0x08 //Report Size (8)
  250. ,0x95 ,0x14 //Report Count (20)
  251. ,0x15 ,0x80 //Logical Minimum (80)
  252. ,0x25 ,0x7f //Logical Minimum (7f)
  253. ,0x81 ,0x22 //Input ()
  254. ,0x85 ,0x04 //report ID ()
  255. ,0x09 ,0x04 //USAGE ()
  256. ,0x75 ,0x08 //Report Size (8)
  257. ,0x95 ,0x01 //Report Count (1)
  258. ,0x91 ,0x02 //Output
  259. ,0xc0
  260. };
  261. **/
  262. //#define BLE_NAME_LENTH 7
  263. //uint8_t ble_name[BLE_NAME_LENTH] = {'1','1','x','x','B','L','E'};
  264. //uint8_t ble_conn_parameter[]={0x10,0x00,0x18,0x00,0x10,0x00,0x58,0x02};
  265. //uint8_t YICHIP_OTA_SERVICE[] = {0xf0,0xff};
  266. //uint8_t YICHIP_OTA_NOTIFY[] = {0xf4,0xff};
  267. //uint8_t YICHIP_OTA_WRITE[] = {0xf5,0xff};
  268. // const ATT_TABLE_TYPE Att_list2[] = {
  269. // //Primary Service: GAP
  270. // {0x01, 2, PRIMARY_SERVICE, 2, SERVICE_GENERIC_ACC},
  271. // //#Characteristic: Device Name
  272. // {0x02, 2, GATT_CHARACTERISTIC, 1, READ_PREMITTED_ONLY},
  273. // {0x03, 2, CHRCTR_DEVICE_NAME, BLE_NAME_LENTH, ble_name},
  274. // //Characteristic: Appearance
  275. // {0x04, 2, GATT_CHARACTERISTIC, 1, READ_PREMITTED_ONLY},
  276. // {0x05, 2, CHRCTR_APPEARANCE, 2, appearance_value},
  277. // //Perpheral Preferred Connection Parameters
  278. // {0x06, 2, GATT_CHARACTERISTIC, 1, READ_PREMITTED_ONLY},
  279. // {0x07, 2, CHCTR_PerPreferred_Connection_Parameters, 8, ble_conn_parameter},
  280. // //Primary service yichip transmit
  281. // {0x08, 2, SECONDARY_SERVICE, 2, READ_PREMITTED_ONLY},
  282. // //Service Changed
  283. // {0x09, 2, GATT_CHARACTERISTIC, 1, INDICATE_PREMITTED_ONLY},
  284. // {0x0a, 2, CHRCTR_SERVICE_CHANGED, 1, 0},
  285. // //Client Characteristic Configuration
  286. // {0x0b, 2, CHARACTERTIC_CONFIGURATION, 1, 00},
  287. // //ota service
  288. // {0x0c, 2, PRIMARY_SERVICE, 2, YICHIP_OTA_SERVICE},
  289. // //ota notify
  290. // {0x0d, 2, GATT_CHARACTERISTIC, 1, READ_NOTIFY_PREMITTED},
  291. // {0x0e, 2, YICHIP_OTA_NOTIFY, 20, yichip_ota_notify_value},
  292. // {0x0f, 2, CHARACTERTIC_CONFIGURATION, 2, yichip_ota_notify_conf_value},
  293. // //ota write
  294. // {0x10, 2, GATT_CHARACTERISTIC, 1,WRITE_WITHOUT_RESPONSE_PREMITTED_ONLY},
  295. // {0x11, 2, YICHIP_OTA_WRITE, 20, yichip_ota_write_value},
  296. // 0,
  297. // 0,
  298. // }
  299. #ifdef att_list_struct
  300. uint8_t att_list_init();
  301. #else
  302. uint8_t att_list_init2(uint8_t *AttPtr, uint16_t len);
  303. void Att_profile_Config();
  304. #endif
  305. #endif