#define INCLUDE_FROM_SERVICEDISCOVERYPROTOCOL_C
#include "ServiceDiscoveryProtocol.h"
-/** Service Discovery Protocol attribute, indicationg the service's name. */
-const struct
-{
- uint8_t Header;
- uint8_t Length;
- uint8_t Data[];
-} PROGMEM SDP_Attribute_Name = {(SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit), sizeof("SDP"), "SDP"};
-
-/** Service Discovery Protocol attribute, indicationg the service's description. */
-const struct
-{
- uint8_t Header;
- uint8_t Length;
- uint8_t Data[];
-} PROGMEM SDP_Attribute_Description = {(SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit), sizeof("BT Service Discovery"), "BT Service Discovery"};
-
-/** Service Discovery Protocol attribute, indicationg the service's availability. */
+/** Service Discovery Protocol attribute, indicating the service's availability. */
const struct
{
uint8_t Header;
const struct
{
uint8_t Header;
- uint16_t Data;
-} PROGMEM SDP_Attribute_LanguageOffset = {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), SDP_ATTRIBUTE_LANGOFFSET};
-
-const struct
-{
- uint8_t Header;
uint32_t Data;
-} PROGMEM SDP_Attribute_ServiceHandle = {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_32Bit), 0x00000001};
+} PROGMEM SDP_Attribute_ServiceHandle = {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_32Bit), 0x00010000};
const struct
{
{.AttributeID = SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE, .Data = &SDP_Attribute_ServiceHandle },
{.AttributeID = SDP_ATTRIBUTE_ID_SERVICECLASSIDS, .Data = &SDP_Attribute_ServiceClassIDs },
{.AttributeID = SDP_ATTRIBUTE_ID_VERSION, .Data = &SDP_Attribute_Version },
- {.AttributeID = SDP_ATTRIBUTE_ID_LANGIDOFFSET, .Data = &SDP_Attribute_LanguageOffset },
- {.AttributeID = SDP_ATTRIBUTE_ID_NAME, .Data = &SDP_Attribute_Name },
- {.AttributeID = SDP_ATTRIBUTE_ID_DESCRIPTION, .Data = &SDP_Attribute_Description },
SERVICE_ATTRIBUTE_TABLE_TERMINATOR
};
.UUID = {BASE_96BIT_UUID, 0x00, 0x00, 0x00, 0x01},
.AttributeTable = SDP_Attribute_Table,
},
-#if 0
- { // 128-bit UUID for the RFCOMM service
- .UUID = {BASE_96BIT_UUID, 0x03, 0x00, 0x00, 0x00},
- .AttributeTable = RFCOMM_Attribute_Table,
- },
-#endif
};
/** Base UUID value common to all standardized Bluetooth services */
if (MaxAttributeSize > sizeof(ResponsePacket.ResponseData))
MaxAttributeSize = sizeof(ResponsePacket.ResponseData);
- /* Add the outer Data Element Sequence header for the retrieved Attributes */
+ /* Add the outer Data Element Sequence header for all of the retrieved Attributes */
uint16_t* TotalResponseSize = SDP_AddDataElementHeader16(&CurrResponsePos, SDP_DATATYPE_Sequence);
/* Search through the list of UUIDs one at a time looking for matching search Attributes */
*TotalResponseSize += 3 + *CurrentUUIDResponseSize;
}
}
+
+ /* Continuation state - always zero */
+ *((uint8_t*)CurrResponsePos) = 0;
- /* Set the total response list size to the size of the outer container plus its header size */
- ResponsePacket.AttributeListByteCount = 3 + *TotalResponseSize;
+ /* Set the total response list size to the size of the outer container plus its header size and continuation state */
+ ResponsePacket.AttributeListByteCount = 4 + *TotalResponseSize;
/* Fill in the response packet's header */
ResponsePacket.SDPHeader.PDU = SDP_PDU_SERVICESEARCHATTRIBUTERESPONSE;
while (ClassUUIDListSize)
{
/* Current Service UUID's Class UUID list has a matching entry, return the Attribute table */
- if (!(memcmp_P(UUID, (ClassUUIDs + 1), UUID_SIZE_BYTES)))
+ if (!(memcmp_P(UUID, &((ClassUUID_t*)ClassUUIDs)->UUID, UUID_SIZE_BYTES)))
return CurrAttributeTable;
- ClassUUIDs += sizeof(uint8_t) + UUID_SIZE_BYTES;
- ClassUUIDListSize -= sizeof(uint8_t) + UUID_SIZE_BYTES;
+ ClassUUIDListSize -= sizeof(ClassUUID_t);
+ ClassUUIDs += sizeof(ClassUUID_t);
}
}
* the last page of FLASH (thanks to Gerard Sexton)
* - Fixed AVRISP project not sending a full erase-and-write EEPROM command to XMEGA targets when writing to the EEPROM
* instead of the split write-only command (thanks to Tim Margush)
+ * - Fixed RNDISEthernet demos crashing when calculating checksums for Ethernet/TCP packets of more than ~500 bytes due to
+ * an overflow in the checksum calculation loop (thanks to Kevin Malec)
*
* \section Sec_ChangeLog100513 Version 100513
* <b>New:</b>
* HID_HOST_BOOT_PROTOCOL_ONLY compile time option is set
* - Fixed INTERRUPT_CONTROL_ENDPOINT compile time option preventing other interrupts from occuring while the control endpoint
* request is being processed, causing possible lockups if a USB interrupt occurs during a transfer
- * - Fixed TeensyHID bootloader not working on some USB AVR models with the official TeensyLoader GUI application
* - Remove incorrect Abstract Call Management class specific descriptor from the CDC demos, bootloaders and projects
*
* \section Sec_ChangeLog100219 Version 100219