mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-07-24 01:51:17 +00:00
Add L2CAP service attribute table. Fix up ProtocolDescriptorList attributes, and add macros for used UUIDs to reduce typing and make the code easier to read.
This commit is contained in:
parent
b98158bd50
commit
da51c1f974
@ -30,6 +30,8 @@
|
|||||||
|
|
||||||
#include "SDPServices.h"
|
#include "SDPServices.h"
|
||||||
|
|
||||||
|
/* ------------------------------ SDP SERVICE ATTRIBUTES ------------------------------ */
|
||||||
|
|
||||||
const struct
|
const struct
|
||||||
{
|
{
|
||||||
uint8_t Header;
|
uint8_t Header;
|
||||||
@ -50,25 +52,7 @@ const struct
|
|||||||
(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),
|
(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),
|
||||||
SWAPENDIAN_16(sizeof(ItemUUID_t) * 1),
|
SWAPENDIAN_16(sizeof(ItemUUID_t) * 1),
|
||||||
{
|
{
|
||||||
{(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), {BASE_80BIT_UUID, {0x00, 0x00, 0x00, 0x00, 0x10, 0x00}}}
|
{(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), SDP_CLASS_UUID}
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const struct
|
|
||||||
{
|
|
||||||
uint8_t Header;
|
|
||||||
uint16_t Size;
|
|
||||||
ItemProtocol_t ProtocolList[];
|
|
||||||
} PROGMEM SDP_Attribute_ProtocolDescriptor =
|
|
||||||
{
|
|
||||||
(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),
|
|
||||||
SWAPENDIAN_16(sizeof(ItemProtocol_t) * 1),
|
|
||||||
{
|
|
||||||
{
|
|
||||||
(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),
|
|
||||||
sizeof(UUID_t),
|
|
||||||
{(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), {BASE_80BIT_UUID, {0x00, 0x00, 0x00, 0x00, 0x01, 0x00}}},
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -115,7 +99,6 @@ const ServiceAttributeTable_t SDP_Attribute_Table[] PROGMEM =
|
|||||||
{
|
{
|
||||||
{.AttributeID = SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE, .Data = &SDP_Attribute_ServiceHandle },
|
{.AttributeID = SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE, .Data = &SDP_Attribute_ServiceHandle },
|
||||||
{.AttributeID = SDP_ATTRIBUTE_ID_SERVICECLASSIDS, .Data = &SDP_Attribute_ServiceClassIDs },
|
{.AttributeID = SDP_ATTRIBUTE_ID_SERVICECLASSIDS, .Data = &SDP_Attribute_ServiceClassIDs },
|
||||||
// {.AttributeID = SDP_ATTRIBUTE_ID_PROTOCOLDESCRIPTORLIST, .Data = &SDP_Attribute_ProtocolDescriptor },
|
|
||||||
{.AttributeID = SDP_ATTRIBUTE_ID_VERSION, .Data = &SDP_Attribute_Version },
|
{.AttributeID = SDP_ATTRIBUTE_ID_VERSION, .Data = &SDP_Attribute_Version },
|
||||||
{.AttributeID = SDP_ATTRIBUTE_ID_SERVICENAME, .Data = &SDP_Attribute_ServiceName },
|
{.AttributeID = SDP_ATTRIBUTE_ID_SERVICENAME, .Data = &SDP_Attribute_ServiceName },
|
||||||
{.AttributeID = SDP_ATTRIBUTE_ID_SERVICEDESCRIPTION, .Data = &SDP_Attribute_ServiceDescription },
|
{.AttributeID = SDP_ATTRIBUTE_ID_SERVICEDESCRIPTION, .Data = &SDP_Attribute_ServiceDescription },
|
||||||
@ -123,6 +106,10 @@ const ServiceAttributeTable_t SDP_Attribute_Table[] PROGMEM =
|
|||||||
SERVICE_ATTRIBUTE_TABLE_TERMINATOR
|
SERVICE_ATTRIBUTE_TABLE_TERMINATOR
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* ------------------------------ RFCOMM SERVICE ATTRIBUTES ------------------------------ */
|
||||||
|
|
||||||
|
|
||||||
const struct
|
const struct
|
||||||
{
|
{
|
||||||
uint8_t Header;
|
uint8_t Header;
|
||||||
@ -143,21 +130,35 @@ const struct
|
|||||||
(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),
|
(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),
|
||||||
SWAPENDIAN_16(sizeof(ItemUUID_t) * 1),
|
SWAPENDIAN_16(sizeof(ItemUUID_t) * 1),
|
||||||
{
|
{
|
||||||
{(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), {BASE_80BIT_UUID, {0x00, 0x00, 0x00, 0x00, 0x11, 0x01}}}
|
{(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), SP_CLASS_UUID}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct
|
const struct
|
||||||
{
|
{
|
||||||
uint8_t Header;
|
uint8_t Header;
|
||||||
uint8_t Size;
|
uint16_t Size;
|
||||||
Item16Bit_t OffsetList[];
|
|
||||||
} PROGMEM RFCOMM_Attribute_LangOffset =
|
ItemProtocol_t ProtocolList[];
|
||||||
|
} PROGMEM RFCOMM_Attribute_ProtocolDescriptor =
|
||||||
{
|
{
|
||||||
(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),
|
(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),
|
||||||
(sizeof(Item16Bit_t) * 1),
|
SWAPENDIAN_16(sizeof(ItemProtocol_t) * 2),
|
||||||
{
|
{
|
||||||
{(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), SWAPENDIAN_16(0x0100)}
|
{
|
||||||
|
(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),
|
||||||
|
sizeof(UUID_t),
|
||||||
|
{
|
||||||
|
{(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), L2CAP_UUID},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),
|
||||||
|
sizeof(UUID_t),
|
||||||
|
{
|
||||||
|
{(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), RFCOMM_UUID},
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -189,8 +190,101 @@ const ServiceAttributeTable_t RFCOMM_Attribute_Table[] PROGMEM =
|
|||||||
{
|
{
|
||||||
{.AttributeID = SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE, .Data = &RFCOMM_Attribute_ServiceHandle },
|
{.AttributeID = SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE, .Data = &RFCOMM_Attribute_ServiceHandle },
|
||||||
{.AttributeID = SDP_ATTRIBUTE_ID_SERVICECLASSIDS, .Data = &RFCOMM_Attribute_ServiceClassIDs },
|
{.AttributeID = SDP_ATTRIBUTE_ID_SERVICECLASSIDS, .Data = &RFCOMM_Attribute_ServiceClassIDs },
|
||||||
|
{.AttributeID = SDP_ATTRIBUTE_ID_PROTOCOLDESCRIPTORLIST, .Data = &RFCOMM_Attribute_ProtocolDescriptor },
|
||||||
{.AttributeID = SDP_ATTRIBUTE_ID_SERVICENAME, .Data = &RFCOMM_Attribute_ServiceName },
|
{.AttributeID = SDP_ATTRIBUTE_ID_SERVICENAME, .Data = &RFCOMM_Attribute_ServiceName },
|
||||||
{.AttributeID = SDP_ATTRIBUTE_ID_SERVICEDESCRIPTION, .Data = &RFCOMM_Attribute_ServiceDescription },
|
{.AttributeID = SDP_ATTRIBUTE_ID_SERVICEDESCRIPTION, .Data = &RFCOMM_Attribute_ServiceDescription },
|
||||||
|
|
||||||
SERVICE_ATTRIBUTE_TABLE_TERMINATOR
|
SERVICE_ATTRIBUTE_TABLE_TERMINATOR
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* ------------------------------ L2CAP SERVICE ATTRIBUTES ------------------------------ */
|
||||||
|
|
||||||
|
|
||||||
|
const struct
|
||||||
|
{
|
||||||
|
uint8_t Header;
|
||||||
|
uint32_t Data;
|
||||||
|
} PROGMEM L2CAP_Attribute_ServiceHandle =
|
||||||
|
{
|
||||||
|
(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_32Bit),
|
||||||
|
SWAPENDIAN_32(0x00010002),
|
||||||
|
};
|
||||||
|
|
||||||
|
const struct
|
||||||
|
{
|
||||||
|
uint8_t Header;
|
||||||
|
uint16_t Size;
|
||||||
|
ItemUUID_t UUIDList[];
|
||||||
|
} PROGMEM L2CAP_Attribute_ServiceClassIDs =
|
||||||
|
{
|
||||||
|
(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),
|
||||||
|
SWAPENDIAN_16(sizeof(ItemUUID_t) * 2),
|
||||||
|
{
|
||||||
|
{(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), SDP_CLASS_UUID },
|
||||||
|
{(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), SP_CLASS_UUID },
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const struct
|
||||||
|
{
|
||||||
|
uint8_t Header;
|
||||||
|
uint16_t Size;
|
||||||
|
|
||||||
|
ItemProtocol_t ProtocolList[];
|
||||||
|
} PROGMEM L2CAP_Attribute_ProtocolDescriptor =
|
||||||
|
{
|
||||||
|
(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),
|
||||||
|
SWAPENDIAN_16(sizeof(ItemProtocol_t) * 2),
|
||||||
|
{
|
||||||
|
{
|
||||||
|
(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),
|
||||||
|
sizeof(UUID_t),
|
||||||
|
{
|
||||||
|
{(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), L2CAP_UUID},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),
|
||||||
|
sizeof(UUID_t),
|
||||||
|
{
|
||||||
|
{(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), RFCOMM_UUID},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const struct
|
||||||
|
{
|
||||||
|
uint8_t Header;
|
||||||
|
uint8_t Size;
|
||||||
|
char Text[];
|
||||||
|
} PROGMEM L2CAP_Attribute_ServiceName =
|
||||||
|
{
|
||||||
|
(SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),
|
||||||
|
sizeof("L2CAP") - 1,
|
||||||
|
"L2CAP",
|
||||||
|
};
|
||||||
|
|
||||||
|
const struct
|
||||||
|
{
|
||||||
|
uint8_t Header;
|
||||||
|
uint8_t Size;
|
||||||
|
char Text[];
|
||||||
|
} PROGMEM L2CAP_Attribute_ServiceDescription =
|
||||||
|
{
|
||||||
|
(SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),
|
||||||
|
sizeof("Logical Link Layer") - 1,
|
||||||
|
"Logical Link Layer",
|
||||||
|
};
|
||||||
|
|
||||||
|
const ServiceAttributeTable_t L2CAP_Attribute_Table[] PROGMEM =
|
||||||
|
{
|
||||||
|
{.AttributeID = SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE, .Data = &L2CAP_Attribute_ServiceHandle },
|
||||||
|
{.AttributeID = SDP_ATTRIBUTE_ID_SERVICECLASSIDS, .Data = &L2CAP_Attribute_ServiceClassIDs },
|
||||||
|
{.AttributeID = SDP_ATTRIBUTE_ID_PROTOCOLDESCRIPTORLIST, .Data = &L2CAP_Attribute_ProtocolDescriptor },
|
||||||
|
{.AttributeID = SDP_ATTRIBUTE_ID_SERVICENAME, .Data = &L2CAP_Attribute_ServiceName },
|
||||||
|
{.AttributeID = SDP_ATTRIBUTE_ID_SERVICEDESCRIPTION, .Data = &L2CAP_Attribute_ServiceDescription },
|
||||||
|
|
||||||
|
SERVICE_ATTRIBUTE_TABLE_TERMINATOR
|
||||||
|
};
|
||||||
|
@ -46,6 +46,14 @@
|
|||||||
/** First 80 bits common to all standardized Bluetooth services. */
|
/** First 80 bits common to all standardized Bluetooth services. */
|
||||||
#define BASE_80BIT_UUID SWAPENDIAN_32(0xFB349B5F), SWAPENDIAN_16(0x8000), SWAPENDIAN_16(0x0080), SWAPENDIAN_16(0x0010)
|
#define BASE_80BIT_UUID SWAPENDIAN_32(0xFB349B5F), SWAPENDIAN_16(0x8000), SWAPENDIAN_16(0x0080), SWAPENDIAN_16(0x0010)
|
||||||
|
|
||||||
|
#define SDP_UUID {BASE_80BIT_UUID, {0x00, 0x00, 0x00, 0x00, 0x00, 0x01}}
|
||||||
|
#define RFCOMM_UUID {BASE_80BIT_UUID, {0x00, 0x00, 0x00, 0x00, 0x00, 0x03}}
|
||||||
|
#define L2CAP_UUID {BASE_80BIT_UUID, {0x00, 0x00, 0x00, 0x00, 0x01, 0x00}}
|
||||||
|
#define UPNP_UUID {BASE_80BIT_UUID, {0x00, 0x00, 0x00, 0x00, 0x00, 0x10}}
|
||||||
|
#define SDP_CLASS_UUID {BASE_80BIT_UUID, {0x00, 0x00, 0x00, 0x00, 0x10, 0x00}}
|
||||||
|
#define SP_CLASS_UUID {BASE_80BIT_UUID, {0x00, 0x00, 0x00, 0x00, 0x11, 0x01}}
|
||||||
|
#define UPNP_CLASS_UUID {BASE_80BIT_UUID, {0x00, 0x00, 0x00, 0x00, 0x12, 0x00}}
|
||||||
|
|
||||||
#define SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE 0x0000
|
#define SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE 0x0000
|
||||||
#define SDP_ATTRIBUTE_ID_SERVICECLASSIDS 0x0001
|
#define SDP_ATTRIBUTE_ID_SERVICECLASSIDS 0x0001
|
||||||
#define SDP_ATTRIBUTE_ID_PROTOCOLDESCRIPTORLIST 0x0004
|
#define SDP_ATTRIBUTE_ID_PROTOCOLDESCRIPTORLIST 0x0004
|
||||||
@ -124,11 +132,15 @@
|
|||||||
uint8_t Header; /**< Data Element header, should be (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit) */
|
uint8_t Header; /**< Data Element header, should be (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit) */
|
||||||
uint8_t Size; /**< Size of the inner Data Element sequence */
|
uint8_t Size; /**< Size of the inner Data Element sequence */
|
||||||
|
|
||||||
ItemUUID_t UUID; /**< UUID to store in the protocol list Data Element sequence */
|
struct
|
||||||
|
{
|
||||||
|
ItemUUID_t UUID; /**< UUID to store in the protocol list Data Element sequence */
|
||||||
|
} Protocol;
|
||||||
} ItemProtocol_t;
|
} ItemProtocol_t;
|
||||||
|
|
||||||
/* External Variables: */
|
/* External Variables: */
|
||||||
extern const ServiceAttributeTable_t SDP_Attribute_Table[];
|
extern const ServiceAttributeTable_t SDP_Attribute_Table[];
|
||||||
extern const ServiceAttributeTable_t RFCOMM_Attribute_Table[];
|
extern const ServiceAttributeTable_t RFCOMM_Attribute_Table[];
|
||||||
|
extern const ServiceAttributeTable_t L2CAP_Attribute_Table[];
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -36,14 +36,9 @@
|
|||||||
*/
|
*/
|
||||||
const ServiceTable_t SDP_Services_Table[] PROGMEM =
|
const ServiceTable_t SDP_Services_Table[] PROGMEM =
|
||||||
{
|
{
|
||||||
{ // 128-bit UUID for the SDP service
|
{ .UUID = SDP_UUID , .AttributeTable = SDP_Attribute_Table },
|
||||||
.UUID = {BASE_80BIT_UUID, {0x00, 0x00, 0x00, 0x00, 0x00, 0x01}},
|
{ .UUID = RFCOMM_UUID, .AttributeTable = RFCOMM_Attribute_Table },
|
||||||
.AttributeTable = SDP_Attribute_Table,
|
{ .UUID = L2CAP_UUID , .AttributeTable = L2CAP_Attribute_Table },
|
||||||
},
|
|
||||||
{ // 128-bit UUID for the RFCOMM service
|
|
||||||
.UUID = {BASE_80BIT_UUID, {0x00, 0x00, 0x00, 0x00, 0x00, 0x03}},
|
|
||||||
.AttributeTable = RFCOMM_Attribute_Table,
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Base UUID value common to all standardized Bluetooth services */
|
/** Base UUID value common to all standardized Bluetooth services */
|
||||||
|
Loading…
Reference in New Issue
Block a user