X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/b98158bd50e95c65e20989d048ab42cc6de799c2..8e20e8697ff88d38ac01d62198dbdd552449e4aa:/Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.c?ds=inline diff --git a/Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.c b/Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.c index 28b9d7774..1170121e4 100644 --- a/Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.c +++ b/Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.c @@ -1,196 +1,184 @@ -/* - LUFA Library - Copyright (C) Dean Camera, 2010. - - dean [at] fourwalledcubicle [dot] com - www.fourwalledcubicle.com -*/ - -/* - Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) - - Permission to use, copy, modify, distribute, and sell this - software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in - all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the - software without specific, written prior permission. - - The author disclaim all warranties with regard to this - software, including all implied warranties of merchantability - and fitness. In no event shall the author be liable for any - special, indirect or consequential damages or any damages - whatsoever resulting from loss of use, data or profits, whether - in an action of contract, negligence or other tortious action, - arising out of or in connection with the use or performance of - this software. -*/ - -#include "SDPServices.h" - -const struct -{ - uint8_t Header; - uint32_t Data; -} PROGMEM SDP_Attribute_ServiceHandle = - { - (SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_32Bit), - SWAPENDIAN_32(0x00010000), - }; - -const struct -{ - uint8_t Header; - uint16_t Size; - ItemUUID_t UUIDList[]; -} PROGMEM SDP_Attribute_ServiceClassIDs = - { - (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit), - SWAPENDIAN_16(sizeof(ItemUUID_t) * 1), - { - {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), {BASE_80BIT_UUID, {0x00, 0x00, 0x00, 0x00, 0x10, 0x00}}} - } - }; - -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}}}, - } - } - }; - -const struct -{ - uint8_t Header; - uint8_t Size; - Item16Bit_t VersionList[]; -} PROGMEM SDP_Attribute_Version = - { - (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit), - (sizeof(Item16Bit_t) * 1), - { - {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), SWAPENDIAN_16(0x0100)} - } - }; - -const struct -{ - uint8_t Header; - uint8_t Size; - char Text[]; -} PROGMEM SDP_Attribute_ServiceName = - { - (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit), - (sizeof("SDP") - 1), - "SDP", - }; - -const struct -{ - uint8_t Header; - uint8_t Size; - char Text[]; -} PROGMEM SDP_Attribute_ServiceDescription = - { - (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit), - (sizeof("Service Discovery Protocol Server") - 1), - "Service Discovery Protocol Server", - }; - -/** Service Discovery Protocol attribute table, listing all supported attributes of the service. */ -const ServiceAttributeTable_t SDP_Attribute_Table[] PROGMEM = - { - {.AttributeID = SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE, .Data = &SDP_Attribute_ServiceHandle }, - {.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_SERVICENAME, .Data = &SDP_Attribute_ServiceName }, - {.AttributeID = SDP_ATTRIBUTE_ID_SERVICEDESCRIPTION, .Data = &SDP_Attribute_ServiceDescription }, - - SERVICE_ATTRIBUTE_TABLE_TERMINATOR - }; - -const struct -{ - uint8_t Header; - uint32_t Data; -} PROGMEM RFCOMM_Attribute_ServiceHandle = - { - (SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_32Bit), - SWAPENDIAN_32(0x00010001), - }; - -const struct -{ - uint8_t Header; - uint16_t Size; - ItemUUID_t UUIDList[]; -} PROGMEM RFCOMM_Attribute_ServiceClassIDs = - { - (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit), - SWAPENDIAN_16(sizeof(ItemUUID_t) * 1), - { - {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), {BASE_80BIT_UUID, {0x00, 0x00, 0x00, 0x00, 0x11, 0x01}}} - } - }; - -const struct -{ - uint8_t Header; - uint8_t Size; - Item16Bit_t OffsetList[]; -} PROGMEM RFCOMM_Attribute_LangOffset = - { - (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit), - (sizeof(Item16Bit_t) * 1), - { - {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), SWAPENDIAN_16(0x0100)} - } - }; - -const struct -{ - uint8_t Header; - uint8_t Size; - char Text[]; -} PROGMEM RFCOMM_Attribute_ServiceName = - { - (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit), - sizeof("Serial Port") - 1, - "Serial Port", - }; - -const struct -{ - uint8_t Header; - uint8_t Size; - char Text[]; -} PROGMEM RFCOMM_Attribute_ServiceDescription = - { - (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit), - sizeof("Wireless Serial Port Service") - 1, - "Wireless Serial Port Service", - }; - -const ServiceAttributeTable_t RFCOMM_Attribute_Table[] PROGMEM = - { - {.AttributeID = SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE, .Data = &RFCOMM_Attribute_ServiceHandle }, - {.AttributeID = SDP_ATTRIBUTE_ID_SERVICECLASSIDS, .Data = &RFCOMM_Attribute_ServiceClassIDs }, - {.AttributeID = SDP_ATTRIBUTE_ID_SERVICENAME, .Data = &RFCOMM_Attribute_ServiceName }, - {.AttributeID = SDP_ATTRIBUTE_ID_SERVICEDESCRIPTION, .Data = &RFCOMM_Attribute_ServiceDescription }, - - SERVICE_ATTRIBUTE_TABLE_TERMINATOR - }; +/* + LUFA Library + Copyright (C) Dean Camera, 2012. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * SDP Service Attribute definitions. This file contains the attributes + * and attribute tables of all the services the device supports, which can + * then be retrieved by a connected Bluetooth device via the SDP server. + */ + +#include "SDPServices.h" + +/** Serial Port Profile attribute, listing the unique service handle of the Serial Port service + * within the device. This handle can then be requested by the SDP client in future transactions + * in lieu of a search UUID list. + */ +const struct +{ + uint8_t Header; + uint32_t Data; +} PROGMEM SerialPort_Attribute_ServiceHandle = + { + (SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_32Bit), + SWAPENDIAN_32(0x00010001), + }; + +/** Serial Port Profile attribute, listing the implemented Service Class UUIDs of the Serial Port service + * within the device. This list indicates all the class UUIDs that apply to the Serial Port service, so that + * a SDP client can search by a generalized class rather than a specific UUID to determine supported services. + */ +const struct +{ + uint8_t Header; + uint8_t Size; + ItemUUID_t UUIDList[]; +} PROGMEM SerialPort_Attribute_ServiceClassIDs = + { + (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit), + (sizeof(ItemUUID_t) * 1), + { + {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), SP_CLASS_UUID}, + }, + }; + +/** Serial Port Profile attribute, listing the Protocols (and their attributes) of the Serial Port service + * within the device. This list indicates what protocols the service is layered on top of, as well as any + * configuration information for each layer. + */ +const struct +{ + uint8_t Header; + uint8_t Size; + + ItemProtocol_t L2CAP; + ItemProtocol_8BitParam_t RFCOMM; +} PROGMEM SerialPort_Attribute_ProtocolDescriptor = + { + (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit), + (sizeof(ItemProtocol_t) + sizeof(ItemProtocol_8BitParam_t)), + { + (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit), + sizeof(ItemUUID_t), + { + {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), L2CAP_UUID}, + }, + }, + { + (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit), + (sizeof(ItemUUID_t) + sizeof(Item8Bit_t)), + { + {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), RFCOMM_UUID}, + {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_8Bit), 0x03}, + }, + }, + }; + +/** Serial Port Profile attribute, listing the Browse Group List UUIDs which this service is a member of. + * Browse Group UUIDs give a way to group together services within a device in a simple hierarchy, so that + * a SDP client can progressively narrow down an general browse to a specific service which it requires. + */ +const struct +{ + uint8_t Header; + uint8_t Size; + ItemUUID_t UUIDList[]; +} PROGMEM SerialPort_Attribute_BrowseGroupList = + { + (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit), + (sizeof(ItemUUID_t) * 1), + { + {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), PUBLICBROWSEGROUP_CLASS_UUID}, + }, + }; + +/** Serial Port Profile attribute, listing the languages (and their encodings) supported + * by the Serial Port service in its text string attributes. + */ +const struct +{ + uint8_t Header; + uint8_t Size; + ItemLangEncoding_t LanguageEncodings[]; +} PROGMEM SerialPort_Attribute_LanguageBaseIDOffset = + { + (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit), + (sizeof(ItemLangEncoding_t) * 1), + { + { + {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), SWAPENDIAN_16(0x454E)}, + {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), SWAPENDIAN_16(0x006A)}, + {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), SWAPENDIAN_16(0x0100)}, + }, + }, + }; + +/** Serial Port Profile attribute, listing a human readable name of the service. */ +const struct +{ + uint8_t Header; + uint8_t Size; + char Text[]; +} PROGMEM SerialPort_Attribute_ServiceName = + { + (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit), + sizeof("Wireless Serial Port") - 1, + "Wireless Serial Port", + }; + +/** Serial Port Profile attribute, listing a human readable description of the service. */ +const struct +{ + uint8_t Header; + uint8_t Size; + char Text[]; +} PROGMEM SerialPort_Attribute_ServiceDescription = + { + (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit), + sizeof("Wireless Serial Port Service") - 1, + "Wireless Serial Port Service", + }; + +/** Service Attribute Table for the Serial Port service, linking each supported attribute ID to its data, so that + * the SDP server can retrieve it for transmission back to a SDP client upon request. + */ +const ServiceAttributeTable_t PROGMEM SerialPort_Attribute_Table[] = + { + {.AttributeID = SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE, .Data = &SerialPort_Attribute_ServiceHandle }, + {.AttributeID = SDP_ATTRIBUTE_ID_SERVICECLASSIDS, .Data = &SerialPort_Attribute_ServiceClassIDs }, + {.AttributeID = SDP_ATTRIBUTE_ID_PROTOCOLDESCRIPTORLIST, .Data = &SerialPort_Attribute_ProtocolDescriptor }, + {.AttributeID = SDP_ATTRIBUTE_ID_BROWSEGROUPLIST, .Data = &SerialPort_Attribute_BrowseGroupList }, + {.AttributeID = SDP_ATTRIBUTE_ID_LANGUAGEBASEATTROFFSET, .Data = &SerialPort_Attribute_LanguageBaseIDOffset}, + {.AttributeID = SDP_ATTRIBUTE_ID_SERVICENAME, .Data = &SerialPort_Attribute_ServiceName }, + {.AttributeID = SDP_ATTRIBUTE_ID_SERVICEDESCRIPTION, .Data = &SerialPort_Attribute_ServiceDescription }, + + SERVICE_ATTRIBUTE_TABLE_TERMINATOR + }; +