Add comments and partial Doxygen documentation to the incomplete Bluetooth SDP handler code.

This commit is contained in:
Dean Camera 2010-05-21 09:38:44 +00:00
parent 58a0ee67a3
commit a20a9086f7
3 changed files with 177 additions and 71 deletions

View file

@ -53,25 +53,26 @@
#define SDP_PDU_SERVICEATTRIBUTERESPONSE 0x05
#define SDP_PDU_SERVICESEARCHATTRIBUTEREQUEST 0x06
#define SDP_PDU_SERVICESEARCHATTRIBUTERESPONSE 0x07
#define SDP_ATTRIBUTE_NAME 0x0000
#define SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE 0x0000
#define SDP_ATTRIBUTE_ID_SERVICECLASSIDS 0x0001
#define SDP_ATTRIBUTE_ID_LANGIDOFFSET 0x0006
#define SDP_ATTRIBUTE_ID_AVAILABILITY 0x0008
#define SDP_ATTRIBUTE_IDO_DESCRIPTION 0x0001
#define SDP_ATTRIBUTE_IDO_PROVIDER 0x0002
#define SDP_ATTRIBUTE_ID_NAME (0x0000 + SDP_ATTRIBUTE_LANGOFFSET)
#define SDP_ATTRIBUTE_ID_DESCRIPTION (0x0001 + SDP_ATTRIBUTE_LANGOFFSET)
/** Size of a full 128 bit UUID, in bytes */
/** Attribute ID offset for localised language string attributes. */
#define SDP_ATTRIBUTE_LANGOFFSET 0x0100
/** Size of a full 128 bit UUID, in bytes. */
#define UUID_SIZE_BYTES 16
/** First 96 bits common to all standadized Bluetooth services */
/** First 96 bits common to all standadized Bluetooth services. */
#define BASE_96BIT_UUID 0xFB, 0x34, 0x9B, 0x5F, 0x80, 0x00, 0x00, 0x80, 0x00, 0x10, 0x00, 0x00
/** Terminator for a service attribute table of type \ref ServiceAttributeTable_t. */
#define SERVICE_ATTRIBUTE_TABLE_TERMINATOR {.Data = NULL}
/* Enums: */
enum ServiceDiscovery_DataTypes_t
{
@ -114,39 +115,44 @@
} ClassUUID_t;
/* Inline Functions: */
static inline uint16_t* ServiceDiscovery_AddDataElementHeader(uint8_t** BufferPos, const uint8_t Type)
/** Adds a new Data Element container of the given type with a 16-bit size header to the buffer. The
* buffer pointer's position is advanced past the added header once the element has been added. The
* returned size header value is pre-zeroed out so that it can be incremented as data is placed into
* the Data Element container.
*
* The total added size of the container header is three bytes, regardless of the size of its contents
* as long as the contents' size in bytes fits into a 16-bit integer.
*
* \param[in, out] BufferPos Pointer to a buffer where the container header is to be placed
* \param[in] Type Type of data the container is to store, a value from the \ref ServiceDiscovery_DataTypes_t enum
*
* \return Pointer to the 16-bit size value of the contaner header, which has been pre-zeroed
*/
static inline uint16_t* SDP_AddDataElementHeader16(uint8_t** BufferPos, const uint8_t Type)
{
**BufferPos = (6 | Type);
*BufferPos += 1;
uint16_t* SizePos = (uint16_t*)*BufferPos;
*BufferPos += 2;
uint16_t* SizePos = (uint16_t*)*(BufferPos + 1);
*SizePos = 0;
return SizePos;
}
static inline uint16_t ServiceDiscovery_Read16BitParameter(const void** AttributeHeader)
{
uint16_t ParamValue = *((uint16_t*)*AttributeHeader);
*AttributeHeader += sizeof(uint16_t);
return ParamValue;
*BufferPos += 3;
return SizePos;
}
/* Function Prototypes: */
void ServiceDiscovery_ProcessPacket(void* Data, Bluetooth_Channel_t* Channel);
void SDP_ProcessPacket(void* Data, Bluetooth_Channel_t* Channel);
#if defined(INCLUDE_FROM_SERVICEDISCOVERYPROTOCOL_C)
static void ServiceDiscovery_ProcessServiceSearch(SDP_PDUHeader_t* SDPHeader, Bluetooth_Channel_t* Channel);
static void ServiceDiscovery_ProcessServiceAttribute(SDP_PDUHeader_t* SDPHeader, Bluetooth_Channel_t* Channel);
static void ServiceDiscovery_ProcessServiceSearchAttribute(SDP_PDUHeader_t* SDPHeader, Bluetooth_Channel_t* Channel);
static void SDP_ProcessServiceSearch(const SDP_PDUHeader_t* const SDPHeader, Bluetooth_Channel_t* const Channel);
static void SDP_ProcessServiceAttribute(const SDP_PDUHeader_t* const SDPHeader, Bluetooth_Channel_t* const Channel);
static void SDP_ProcessServiceSearchAttribute(const SDP_PDUHeader_t* const SDPHeader, Bluetooth_Channel_t* const Channel);
static void* ServiceDiscovery_GetAttributeValue(ServiceAttributeTable_t* AttributeTable, uint16_t AttributeID);
static ServiceAttributeTable_t* ServiceDiscovery_GetAttributeTable(uint8_t* UUID);
static uint8_t ServiceDiscovery_GetAttributeList(uint16_t AttributeList[][2], const void** CurrentParameter);
static uint8_t ServiceDiscovery_GetUUIDList(uint8_t UUIDList[][UUID_SIZE_BYTES], const void** CurrentParameter);
static uint32_t ServiceDiscovery_GetLocalAttributeSize(const void* AttributeData);
static uint32_t ServiceDiscovery_GetDataElementSize(const void** AttributeHeader, uint8_t* ElementHeaderSize);
static void* SDP_GetAttributeValue(const ServiceAttributeTable_t* AttributeTable, const uint16_t AttributeID);
static ServiceAttributeTable_t* SDP_GetAttributeTable(const uint8_t* const UUID);
static uint8_t SDP_GetAttributeList(uint16_t AttributeList[][2], const void** const CurrentParameter);
static uint8_t SDP_GetUUIDList(uint8_t UUIDList[][UUID_SIZE_BYTES], const void** const CurrentParameter);
static uint32_t SDP_GetLocalAttributeContainerSize(const void* const AttributeData);
static uint32_t SDP_GetDataElementSize(const void** const AttributeHeader, uint8_t* const ElementHeaderSize);
#endif
#endif