#ifndef _ATT_H_ #define _ATT_H_ #include "yc11xx.h" #include "ipc.h" #include "type.h" #include "ycdef.h" #include "stddef.h" #include //#define att_list_struct #define ATT_LIST_LEN mem_rc_att_list_end-mem_rc_att_list typedef struct { uint8_t Len; uint8_t uuid[16]; }UUID_TYPE; typedef struct { uint16_t handle; UUID_TYPE uuids; uint16_t dataLen; uint16_t dataPtr; }FOUND_UUID_TYPE; typedef struct { uint16_t startHandle; uint16_t endHandle; UUID_TYPE uuids; }ATTRIBUTE_GROUP_TYPE; typedef struct { uint8_t Len; uint8_t uuid[2]; }UUID32_TYPE; typedef struct { uint8_t Len; uint8_t uuid[16]; }UUID128_TYPE; typedef struct { uint16_t handle; uint8_t uuid_len; uint8_t *uuid; uint8_t dataLen; uint8_t *dataPtr; }ATT_TABLE_TYPE; #define ATT_LIST_DATA_LENGTH_BYTE 2 #define CLIENT_CHARACTERTIC_CONFIGURATION 0X2902 #define EXTERNAL_REPORT_REFERENCE 0X2907 #define REPORT_REFERENCE 0X2908 #define UUID_SERVICE_GENERIC_ACC 0x1800 #define UUID_SERVICE_GENERIC_ATT 0x1801 #define UUID_SERVICE_DEVICE_INFO 0x180a #define UUID_SERVICE_BATTERY 0x180f #define UUID_SERVICE_HIDS 0x1812 #define UUID_GATT_PRIMARY_SERVICE 0x2800 #define UUID_GATT_SECONDARY_SERVICE 0x2801 #define UUID_GATT_INCLUDE 0X2802 #define UUID_GATT_CHARACTERISTIC 0X2803 #define UUID_CHRCTR_DEVICE_NAME 0X2A00 #define UUID_CHRCTR_APPEARANCE 0X2A01 #define UUID_CHRCTR_PerPreConn_Parameters 0x2A04 #define UUID_CHRCTR_SERVICE_CHANGED 0X2A05 #define UUID_CHRCTR_BATTERY_LEVEL 0X2A19 #define UUID_CHRCTR_KEYBOARD_INPUT 0X2A22 #define UUID_CHRCTR_SYSTEM_ID 0X2A23 #define UUID_CHRCTR_MODEL_NUMBER 0X2A24 #define UUID_CHRCTR_SERIAL_NUMBER 0X2A25 #define UUID_CHRCTR_FIRMWARE 0X2A26 #define UUID_CHRCTR_MANUFACTURE_NAME 0X2A29 #define UUID_CHRCTR_KEYBOARD_OUTPUT 0X2A32 #define UUID_CHRCTR_MOUSE_INPUT 0X2A33 #define UUID_CHRCTR_HID_INFO 0X2A4A #define UUID_CHRCTR_REPORT_MAP 0X2A4B #define UUID_CHRCTR_HID_CTRL_POINT 0X2A4C #define UUID_CHRCTR_REPORT 0X2A4D #define UUID_CHRCTR_PROTOCOL_MODE 0X2A4E #define UUID_CHRCTR_PNP_ID 0X2A50 #define READ_PREMITTED 0x02 #define WRITE_WITHOUT_RESPONSE_PREMITTED 0x04 #define WRITE_PREMITTED 0x08 #define NOTIFY_PREMITTED 0x10 #define INDICATE_PREMITTED 0X20 #define UUID2ARRAY(uuid) uuid&0xff, uuid>>8 // const uint8_t READ_PREMITTED_ONLY[] = {READ_PREMITTED}; // const uint8_t NOTIFY_PREMITTED_ONLY[] = {NOTIFY_PREMITTED}; // const uint8_t INDICATE_PREMITTED_ONLY[] = {INDICATE_PREMITTED}; // const uint8_t WRITE_PREMITTED_ONLY[] = {WRITE_PREMITTED}; // const uint8_t WRITE_WITHOUT_RESPONSE_PREMITTED_ONLY[] = {WRITE_WITHOUT_RESPONSE_PREMITTED}; // const uint8_t READ_NOTIFY_PREMITTED[] = {WRITE_WITHOUT_RESPONSE_PREMITTED|NOTIFY_PREMITTED}; // const uint8_t READ_WRITE_WRITEWITHOUTRSP_PREMITTED[] = {WRITE_WITHOUT_RESPONSE_PREMITTED|READ_PREMITTED|WRITE_PREMITTED}; // const uint8_t READ_WRITE_PREMITTED[] = {READ_PREMITTED|WRITE_PREMITTED}; // const uint8_t READ_WRITEWITHOUTRSP_PREMITTED[] = {READ_PREMITTED|WRITE_WITHOUT_RESPONSE_PREMITTED}; // const uint8_t PRIMARY_SERVICE[] = {UUID2ARRAY(UUID_GATT_PRIMARY_SERVICE)}; // const uint8_t SECONDARY_SERVICE[] = {UUID2ARRAY(UUID_GATT_SECONDARY_SERVICE)}; // const uint8_t SERVICE_GENERIC_ACC[] = {UUID2ARRAY(UUID_SERVICE_GENERIC_ACC)}; // const uint8_t GATT_CHARACTERISTIC[] = {UUID2ARRAY(UUID_GATT_CHARACTERISTIC)}; // const uint8_t CHRCTR_DEVICE_NAME[] = {UUID2ARRAY(UUID_CHRCTR_DEVICE_NAME)}; // const uint8_t CHRCTR_APPEARANCE[] = {UUID2ARRAY(UUID_CHRCTR_APPEARANCE)}; // const uint8_t appearance_value[] = {0x80,0x01}; // const uint8_t SERVICE_GENERIC_ATT[] = {UUID2ARRAY(UUID_SERVICE_GENERIC_ATT)}; // const uint8_t CHCTR_PerPreferred_Connection_Parameters[] = {UUID2ARRAY(UUID_CHRCTR_PerPreConn_Parameters)}; // const uint8_t CHRCTR_SERVICE_CHANGED[] = {UUID2ARRAY(UUID_CHRCTR_SERVICE_CHANGED)}; // const uint8_t service_changed_value[] = {0,0}; // const uint8_t CHARACTERTIC_CONFIGURATION[] = {UUID2ARRAY(CLIENT_CHARACTERTIC_CONFIGURATION)}; // const uint8_t service_changed_conf_value[] = {0,0}; // const uint8_t SERVICE_BATTERY[] = {UUID2ARRAY(UUID_SERVICE_BATTERY)}; // const uint8_t CHRCTR_BATTERY_LEVEL[] = {UUID2ARRAY(UUID_CHRCTR_BATTERY_LEVEL)}; // const uint8_t battery_leval_conf_value[] = {0,0}; // const uint8_t SERVICE_DEVICE_INFO[] = {UUID2ARRAY(UUID_SERVICE_DEVICE_INFO)}; // const uint8_t CHRCTR_MODEL_NUMBER[] = {UUID2ARRAY(UUID_CHRCTR_MODEL_NUMBER)}; // const uint8_t model_number_value[] = {'1','1','1'}; // const uint8_t CHRCTR_MANUFACTURE_NAME[] = {UUID2ARRAY(UUID_CHRCTR_MANUFACTURE_NAME)}; // const uint8_t manufacture_name_value[] = {'n','a','n','o'}; // const uint8_t CHRCTR_PNP_ID[] = {UUID2ARRAY(UUID_CHRCTR_PNP_ID)}; // const uint8_t pnp_id_value[]={0x02,0x54,0x2b,0x00,0x16,0x00,0x00}; // const uint8_t SERVICE_HIDS[] = {UUID2ARRAY(UUID_SERVICE_HIDS)}; // const uint8_t CHRCTR_HID_INFO[] = {UUID2ARRAY(UUID_CHRCTR_HID_INFO)}; // const uint8_t hid_info[] = {0x01,0x01,0x00,0x02}; // const uint8_t CHRCTR_REPORT_MAP[] = {UUID2ARRAY(UUID_CHRCTR_REPORT_MAP)}; // const uint8_t EXTERNAL_REPORT[] = {UUID2ARRAY(EXTERNAL_REPORT_REFERENCE)}; // const uint8_t external_report_value[] ={0x19,0x2a}; // const uint8_t CHRCTR_HID_CTRL_POINT[] = {UUID2ARRAY(UUID_CHRCTR_HID_CTRL_POINT)}; // const uint8_t hid_ctrl_point_value[] = {0,0}; // const uint8_t CHRCTR_KEYBOARD_INPUT[] = {UUID2ARRAY(UUID_CHRCTR_KEYBOARD_INPUT)}; // const uint8_t keyboard_input_value[] = {0,0,0,0,0,0,0,0}; // const uint8_t keyboard_input_conf_value[] = {0,0}; // const uint8_t CHRCTR_KEYBOARD_OUTPUT[] = {UUID2ARRAY(UUID_CHRCTR_KEYBOARD_OUTPUT)}; // const uint8_t keyboard_output_value[] = {0,0,0,0,0,0,0,0}; // const uint8_t CHRCTR_MOUSE_INPUT[] = {UUID2ARRAY(UUID_CHRCTR_MOUSE_INPUT)}; // const uint8_t mouse_input_value[] = {0,0,0,0,0,0,0,0}; // const uint8_t mouse_input_conf_value[] = {0,0}; // const uint8_t CHRCTR_REPORT[] = {UUID2ARRAY(UUID_CHRCTR_REPORT)}; // const uint8_t report1_value[] = {0,0,0,0,0,0,0,0}; // const uint8_t report1_conf_value[] = {0,0}; // const uint8_t GATT_REPORT_REFERENCE[] = {UUID2ARRAY(REPORT_REFERENCE)}; // const uint8_t reportid1_input_value[] = {1,1}; // const uint8_t report8_value[] = {0,0,0,0,0,0,0,0}; // const uint8_t report8_conf_value[] = {0,0}; // const uint8_t reportid8_input_value[] = {8,1}; // const uint8_t report3_value[] = {0,0,0,0,0,0,0,0}; // const uint8_t report3_conf_value[] = {0,0}; // const uint8_t reportid3_input_value[] = {3,1}; // const uint8_t reportb_value[] = {0,0,0,0,0,0,0,0}; // const uint8_t reportb_conf_value[] = {0,0}; // const uint8_t reportidb_input_value[] = {0x0b,1}; // const uint8_t report_output_value[] = {0,0,0,0,0,0,0,0}; // const uint8_t reportid_ouput_value[] = {0,2}; // const uint8_t report_feature_value[] = {0,0,0,0,0,0,0,0}; // const uint8_t reportid_feature_value[] = {0,3}; // const uint8_t CHRCTR_PROTOCOL_MODE[] = {UUID2ARRAY(UUID_CHRCTR_PROTOCOL_MODE)}; // const uint8_t YICHIP_SERVICE[] = {0x49,0x53,0x53,0x43,0xfe,0x7d,0x4a,0xe5,0x8f,0xa9,0x9f,0xaf,0xd2,0x05,0xe4,0x55}; // const uint8_t yichip_ota_notify_value[20] = {0}; // const uint8_t yichip_ota_write_value[20] = {0}; // const uint8_t yichip_ota_notify_conf_value[] = {0,0}; /** const uint8_t report_map_value[] = { 0x05 ,0x01 //Usage Page Generic Desktop) ,0x09 ,0x06 //Usage (Keyboard) ,0xA1 ,0x01 //Collection (Application) ,0x85 ,0x0b //report ID (HIDAPP_KEYBOARD_REPORT_ID) ,0x75 ,0x01 //Report Size (1) ,0x95 ,0x08 //Report Count (8) ,0x05 ,0x07 //Usage Page (Key Codes) ,0x19 ,0xe0 //Usage Minimum (224) ,0x29 ,0xe7 //Usage Maximum (231) ,0x15 ,0x00 //Logical Minimum (0) ,0x25 ,0x01 //Logical Maximum (1) ,0x81 ,0x02 //Input (Data, Variable, Absolute) ,0x95 ,0x01 //Report Count (1) ,0x75 ,0x08 //Report Size (8) ,0x81 ,0x01 //Input (Constant) reserved byte(1) ,0x95 ,0x05 //Report Count (5) ,0x75 ,0x01 //Report Size (1) ,0x05 ,0x08 //Usage Page (Page//for LEDs) ,0x19 ,0x01 //Usage Minimum (1) ,0x29 ,0x05 //Usage Maximum (5) ,0x91 ,0x02 //Output (Data, Variable, Absolute), Led report ,0x95 ,0x01 //Report Count (1) ,0x75 ,0x03 //Report Size (3) ,0x91 ,0x01 //Output (Constant), Led report padding ,0x95 ,0x06 //Report Count (6) ,0x75 ,0x08 //Report Size (8) ,0x15 ,0x00 //Logical Minimum (0) ,0x25 ,0xeb //Logical Maximum (101) ,0x05 ,0x07 //Usage Page (Key codes) ,0x19 ,0x00 //Usage Minimum (0) ,0x29 ,0xeb //Usage Maximum (101) ,0x81 ,0x00 //Input (Data, Array) Key array(6 bytes) ,0xC0 //End Collection (Application) //Consumer Usepage ,0x05 ,0x0c //Usage Page (Consumer Devices) ,0x09 ,0x01 //Usage (Consumer Control) ,0xa1 ,0x01 //Collection (Application) ,0x85 ,0x01 //HIDAPP_REMOTE_REPORT_ID, //report ID (01) ,0x19 ,0x00 //USAGE_MINIMUM (0) ,0x2a ,0x9c ,0x02 //USAGE_MINIMUM (29c) ,0x15 ,0x00 //Logical Minimum (0) ,0x26 ,0x9c ,0x02 //Logical Maximum (29c) ,0x95 ,0x01 //Report Count (1) ,0x75 ,0x10 //Report Size (16) ,0x81 ,0x00 //Input (Data, array, Absolute) ,0x09 ,0x02 //Usage (Numeric Key Pad ) ,0xa1 ,0x02 //Collection (Application) ,0x05 ,0x09 //Usage Page (button) ,0x19 ,0x01 //Usage Minimum (1) ,0x29 ,0x0a //Usage Maximum (10) ,0x15 ,0x01 //Logical Minimum (1) ,0x25 ,0x0a //Logical Maximum (10) ,0x95 ,0x01 //Report Count (1) ,0x75 ,0x08 //Report Size (8) ,0x81 ,0x40 //Input (Data, Variable, Relative) ,0xc0 //End Collection ,0xc0 //End Collection //optional mouse data ,0x05 ,0x01 //Usage Page (Generic Desktop) ,0x09 ,0x02 //USAGE (Mouse) ,0xa1 ,0x01 //COLLECTION (Application) ,0x09 ,0x01 //USAGE (Pointer) ,0xa1 ,0x00 //COLLECTION (Physical) ,0x85 ,0x03 //HIDAPP_MOUSE_REPORT_ID, //report ID (HIDAPP_MOUSE_REPORT_ID) ,0x05 ,0x01 //USAGE_PAGE (Generic Desktop) ,0x09 ,0x30 //USAGE (X) ,0x09 ,0x31 //USAGE (Y) ,0x15 ,0x80 //LOGICAL_MINIMUM (-127) ,0x25 ,0x7f //LOGICAL_MAXIMUM (127) ,0x75 ,0x08 //REPORT_SIZE (8) ,0x95 ,0x02 //REPORT_COUNT (2) ,0x81 ,0x06 //INPUT (Data, Variable, Relative) ,0x05 ,0x09 //USAGE_PAGE (Button) ,0x19 ,0x01 //USAGE_MINIMUM (Button 1) ,0x29 ,0x05 //USAGE_MAXIMUM (Button 5) ,0x15 ,0x00 //LOGICAL_MINIMUM (0) ,0x25 ,0x01 //LOGICAL_MAXIMUM (1) ,0x95 ,0x05 //REPORT_COUNT (5) ,0x75 ,0x01 //REPORT_SIZE (1) ,0x81 ,0x02 //INPUT () ,0x95 ,0x01 //REPORT_COUNT (1) ,0x75 ,0x03 //REPORT_SIZE (3) ,0x81 ,0x03 //INPUT () ,0xc0 //End Collection (Physical) ,0xc0 //End Collection (Application) //end mouse data ,0x06 ,0x01 ,0xff ,0x09 ,0x01 //Usage (Consumer Control) ,0xa1 ,0x02 //COLLECTION () ,0x85 ,0x08 //HIDAPP_VOICE_REPORT_ID, //report ID (HIDAPP_KEYBOARD_REPORT_ID) ,0x09 ,0x14 ,0x75 ,0x08 //Report Size (8) ,0x95 ,0x14 //Report Count (20) ,0x15 ,0x80 //Logical Minimum (80) ,0x25 ,0x7f //Logical Minimum (7f) ,0x81 ,0x22 //Input () ,0x85 ,0x04 //report ID () ,0x09 ,0x04 //USAGE () ,0x75 ,0x08 //Report Size (8) ,0x95 ,0x01 //Report Count (1) ,0x91 ,0x02 //Output ,0xc0 }; **/ //#define BLE_NAME_LENTH 7 //uint8_t ble_name[BLE_NAME_LENTH] = {'1','1','x','x','B','L','E'}; //uint8_t ble_conn_parameter[]={0x10,0x00,0x18,0x00,0x10,0x00,0x58,0x02}; //uint8_t YICHIP_OTA_SERVICE[] = {0xf0,0xff}; //uint8_t YICHIP_OTA_NOTIFY[] = {0xf4,0xff}; //uint8_t YICHIP_OTA_WRITE[] = {0xf5,0xff}; // const ATT_TABLE_TYPE Att_list2[] = { // //Primary Service: GAP // {0x01, 2, PRIMARY_SERVICE, 2, SERVICE_GENERIC_ACC}, // //#Characteristic: Device Name // {0x02, 2, GATT_CHARACTERISTIC, 1, READ_PREMITTED_ONLY}, // {0x03, 2, CHRCTR_DEVICE_NAME, BLE_NAME_LENTH, ble_name}, // //Characteristic: Appearance // {0x04, 2, GATT_CHARACTERISTIC, 1, READ_PREMITTED_ONLY}, // {0x05, 2, CHRCTR_APPEARANCE, 2, appearance_value}, // //Perpheral Preferred Connection Parameters // {0x06, 2, GATT_CHARACTERISTIC, 1, READ_PREMITTED_ONLY}, // {0x07, 2, CHCTR_PerPreferred_Connection_Parameters, 8, ble_conn_parameter}, // //Primary service yichip transmit // {0x08, 2, SECONDARY_SERVICE, 2, READ_PREMITTED_ONLY}, // //Service Changed // {0x09, 2, GATT_CHARACTERISTIC, 1, INDICATE_PREMITTED_ONLY}, // {0x0a, 2, CHRCTR_SERVICE_CHANGED, 1, 0}, // //Client Characteristic Configuration // {0x0b, 2, CHARACTERTIC_CONFIGURATION, 1, 00}, // //ota service // {0x0c, 2, PRIMARY_SERVICE, 2, YICHIP_OTA_SERVICE}, // //ota notify // {0x0d, 2, GATT_CHARACTERISTIC, 1, READ_NOTIFY_PREMITTED}, // {0x0e, 2, YICHIP_OTA_NOTIFY, 20, yichip_ota_notify_value}, // {0x0f, 2, CHARACTERTIC_CONFIGURATION, 2, yichip_ota_notify_conf_value}, // //ota write // {0x10, 2, GATT_CHARACTERISTIC, 1,WRITE_WITHOUT_RESPONSE_PREMITTED_ONLY}, // {0x11, 2, YICHIP_OTA_WRITE, 20, yichip_ota_write_value}, // 0, // 0, // } #ifdef att_list_struct uint8_t att_list_init(); #else uint8_t att_list_init2(uint8_t *AttPtr, uint16_t len); void Att_profile_Config(); #endif #endif