0.前言
在上一篇文章中提到,每次发现一个服务,就会调用回调函数,回调函数会填充相关的服务结构体,本文旨在说明AIOS服务的填充。
1.AIOSPopulateHandles
在回调函数中调用了AIOSPopulateHandles这个函数进行AIOS服务的填充,首先我们来看它的参数:
static void AIOSPopulateHandles(AIOP_Client_Information_t *ClientInfo,
qapi_BLE_GATT_Service_Discovery_Indication_Data_t *ServiceDiscoveryData)
调用:
AIOSPopulateHandles(&(DeviceInfo->AIOPClientInfo),
GATT_Service_Discovery_Event_Data->Event_Data.GATT_Service_Discovery_Indication_Data);
其中,DeviceInfo是回调函数中定义的一个局部变量,GATT_Service_Discovery_Event_Data是回调函数的参数
DeviceInfo_t *DeviceInfo;
DeviceInfo_t结构体定义如下
typedef struct _tagDeviceInfo_t
{
uint8_t Flags;
unsigned int ConnectionID; //远程连接设备的ID
boolean_t RemoteDeviceIsMaster; //远程设备是否为主设备
qapi_BLE_BD_ADDR_t RemoteAddress; //远程设备的地址
qapi_BLE_GAP_LE_Address_Type_t RemoteAddressType; //远程设备的地址类型
qapi_BLE_GAP_LE_Address_Type_t IdentityAddressType;
qapi_BLE_BD_ADDR_t IdentityAddressBD_ADDR;
uint8_t EncryptionKeySize;
qapi_BLE_Long_Term_Key_t LTK;
qapi_BLE_Encryption_Key_t IRK;
qapi_BLE_Random_Number_t Rand;
uint16_t EDIV;
qapi_BLE_GAP_LE_White_List_Entry_t WhiteListEntry;
qapi_BLE_GAP_LE_Resolving_List_Entry_t ResolvingListEntry;
AIOP_Client_Information_t AIOPClientInfo; //用于填充AIOS
uint16_t AIOPServerConfiguration;
qapi_BLE_BAS_Client_Information_t BASClientInfo[MAX_SUPPORTED_BATTERY_INSTANCES];
qapi_BLE_BAS_Server_Information_t BASServerInfo[MAX_SUPPORTED_BATTERY_INSTANCES];
GAPS_Client_Info_t GAPSClientInfo;
qapi_BLE_SCPS_Client_Information_t SCPSClientInfo;
qapi_BLE_SCPS_Server_Information_t SCPSServerInfo;
HIDS_Client_Info_t HIDSClientInfo[MAX_SUPPORTED_HID_INSTANCES];
HIDS_Server_Info_t HIDSServerInfo;
qapi_BLE_HRS_Client_Information_t HRSClientInfo;
SPPLE_Client_Info_t ClientInfo;
SPPLE_Server_Info_t ServerInfo;
unsigned int TransmitCredits;
SPPLE_Data_Buffer_t ReceiveBuffer;
SPPLE_Data_Buffer_t TransmitBuffer;
XferInfo_t XferInfo;
boolean_t ThroughputModeActive;
struct _tagDeviceInfo_t *NextDeviceInfoInfoPtr;
} DeviceInfo_t;
2.qapi_BLE_GATT_Service_Discovery_Indication_Data_t
AIOSPopulateHandles是在这个结构体中将特征信息一一解析出来,最重要的是NumberOfCharacteristics和CharacteristicInformationList
/**
* Structure that represents the data returned in a GATT
* QAPI_BLE_ET_GATT_SERVICE_DISCOVERY_INDICATION_E event.
*/
typedef struct qapi_BLE_GATT_Service_Discovery_Indication_Data_s
{
uint32_t ConnectionID; //GATT连接ID
qapi_BLE_GATT_Service_Information_t ServiceInformation; //GATT服务的信息
uint32_t NumberOfIncludedService; //有多少个包含的服务
qapi_BLE_GATT_Service_Information_t *IncludedServiceList; //包含服务的头指针
uint32_t NumberOfCharacteristics; //服务有多少个GATT 特征
qapi_BLE_GATT_Characteristic_Information_t *CharacteristicInformationList; //指向GATT特征信息头指针
} qapi_BLE_GATT_Service_Discovery_Indication_Data_t;
3.源码