Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Erik Strand
lufa
Commits
d03d6513
Commit
d03d6513
authored
Apr 19, 2010
by
Dean Camera
Browse files
Add start of a SDP service table, which will be linked to the Bluetooth SDP code.
parent
d92e9133
Changes
2
Show whitespace changes
Inline
Side-by-side
Demos/Host/Incomplete/BluetoothHost/Lib/ServiceDiscoveryProtocol.c
View file @
d03d6513
...
@@ -31,6 +31,41 @@
...
@@ -31,6 +31,41 @@
#define INCLUDE_FROM_SERVICEDISCOVERYPROTOCOL_C
#define INCLUDE_FROM_SERVICEDISCOVERYPROTOCOL_C
#include
"ServiceDiscoveryProtocol.h"
#include
"ServiceDiscoveryProtocol.h"
SERVICE_ATTRIBUTE_TEXT
(
SDP_Attribute_Name
,
"SDP"
);
SERVICE_ATTRIBUTE_TEXT
(
SDP_Attribute_Description
,
"BT Service Discovery"
);
SERVICE_ATTRIBUTE_8BIT_LEN
(
SDP_Attribute_Availability
,
SDP_DATATYPE_UNSIGNED_INT
,
1
,
{
0xFF
});
const
ServiceAttributeTable_t
SDP_Attribute_Table
[]
PROGMEM
=
{
{.
AttributeID
=
SDP_ATTRIBUTE_NAME
,
.
AttributeData
=
&
SDP_Attribute_Name
},
{.
AttributeID
=
SDP_ATTRIBUTE_DESCRIPTION
,
.
AttributeData
=
&
SDP_Attribute_Description
},
{.
AttributeID
=
SDP_ATTRIBUTE_AVAILABILITY
,
.
AttributeData
=
&
SDP_Attribute_Availability
},
{.
AttributeData
=
NULL
}
};
SERVICE_ATTRIBUTE_TEXT
(
RFCOMM_Attribute_Name
,
"RFCOMM"
);
SERVICE_ATTRIBUTE_TEXT
(
RFCOMM_Attribute_Description
,
"Virtual Serial"
);
SERVICE_ATTRIBUTE_8BIT_LEN
(
RFCOMM_Attribute_Availability
,
SDP_DATATYPE_UNSIGNED_INT
,
1
,
{
0xFF
});
const
ServiceAttributeTable_t
RFCOMM_Attribute_Table
[]
PROGMEM
=
{
{.
AttributeID
=
SDP_ATTRIBUTE_NAME
,
.
AttributeData
=
&
RFCOMM_Attribute_Name
},
{.
AttributeID
=
SDP_ATTRIBUTE_DESCRIPTION
,
.
AttributeData
=
&
RFCOMM_Attribute_Description
},
{.
AttributeID
=
SDP_ATTRIBUTE_AVAILABILITY
,
.
AttributeData
=
&
RFCOMM_Attribute_Availability
},
{.
AttributeData
=
NULL
}
};
const
ServiceTable_t
SDP_Services_Table
[]
=
{
{
// 128-bit UUID for the SDP service
.
UUID
=
{
BASE_96BIT_UUID
,
0x01
,
0x00
,
0x00
,
0x00
},
.
AttributeTable
=
&
SDP_Attribute_Table
,
},
{
// 128-bit UUID for the RFCOMM service
.
UUID
=
{
BASE_96BIT_UUID
,
0x03
,
0x00
,
0x00
,
0x00
},
.
AttributeTable
=
&
RFCOMM_Attribute_Table
,
},
};
void
ServiceDiscovery_ProcessPacket
(
void
*
Data
,
Bluetooth_Channel_t
*
Channel
)
void
ServiceDiscovery_ProcessPacket
(
void
*
Data
,
Bluetooth_Channel_t
*
Channel
)
{
{
SDP_PDUHeader_t
*
SDPHeader
=
(
SDP_PDUHeader_t
*
)
Data
;
SDP_PDUHeader_t
*
SDPHeader
=
(
SDP_PDUHeader_t
*
)
Data
;
...
@@ -40,11 +75,6 @@ void ServiceDiscovery_ProcessPacket(void* Data, Bluetooth_Channel_t* Channel)
...
@@ -40,11 +75,6 @@ void ServiceDiscovery_ProcessPacket(void* Data, Bluetooth_Channel_t* Channel)
BT_SDP_DEBUG
(
2
,
"-- PDU ID: 0x%02X"
,
SDPHeader
->
PDU
);
BT_SDP_DEBUG
(
2
,
"-- PDU ID: 0x%02X"
,
SDPHeader
->
PDU
);
BT_SDP_DEBUG
(
2
,
"-- Param Length: 0x%04X"
,
SDPHeader
->
ParameterLength
);
BT_SDP_DEBUG
(
2
,
"-- Param Length: 0x%04X"
,
SDPHeader
->
ParameterLength
);
printf
(
"
\r\n
"
);
for
(
uint8_t
i
=
0
;
i
<
SDPHeader
->
ParameterLength
;
i
++
)
printf
(
"0x%02X "
,
*
((
uint8_t
*
)
Data
+
sizeof
(
SDP_PDUHeader_t
)
+
i
));
printf
(
"
\r\n
"
);
switch
(
SDPHeader
->
PDU
)
switch
(
SDPHeader
->
PDU
)
{
{
case
SDP_PDU_SERVICESEARCHREQUEST
:
case
SDP_PDU_SERVICESEARCHREQUEST
:
...
@@ -82,13 +112,16 @@ static void ServiceDiscovery_ProcessServiceSearchAttribute(SDP_PDUHeader_t* SDPH
...
@@ -82,13 +112,16 @@ static void ServiceDiscovery_ProcessServiceSearchAttribute(SDP_PDUHeader_t* SDPH
while
(
ServicePatternLength
)
while
(
ServicePatternLength
)
{
{
uint8_t
UUIDLength
=
ServiceDiscovery_GetDataElementSize
(
&
CurrentParameter
,
&
ElementHeaderSize
);
uint8_t
UUIDLength
=
ServiceDiscovery_GetDataElementSize
(
&
CurrentParameter
,
&
ElementHeaderSize
);
uint8_t
UUID
[
16
];
uint8_t
UUID
[
16
]
=
{
BASE_96BIT_UUID
,
0x00
,
0x00
,
0x00
,
0x00
}
;
memset
(
UUID
,
0x00
,
sizeof
(
UUID
));
if
(
UUIDLength
<=
32
)
memcpy
(
&
UUID
[
sizeof
(
UUID
)
-
sizeof
(
uint32_t
)],
CurrentParameter
,
UUIDLength
);
else
memcpy
(
UUID
,
CurrentParameter
,
UUIDLength
);
memcpy
(
UUID
,
CurrentParameter
,
UUIDLength
);
CurrentParameter
+=
UUIDLength
;
CurrentParameter
+=
UUIDLength
;
BT_SDP_DEBUG
(
2
,
"-- UUID (%d): 0x%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X"
,
BT_SDP_DEBUG
(
2
,
"-- UUID (%d): 0x%02X%02X%02X%02X
-
%02X%02X
-
%02X%02X
-
%02X%02X
-
%02X%02X%02X%02X%02X%02X"
,
UUIDLength
,
UUIDLength
,
UUID
[
15
],
UUID
[
14
],
UUID
[
13
],
UUID
[
12
],
UUID
[
11
],
UUID
[
10
],
UUID
[
9
],
UUID
[
8
],
UUID
[
15
],
UUID
[
14
],
UUID
[
13
],
UUID
[
12
],
UUID
[
11
],
UUID
[
10
],
UUID
[
9
],
UUID
[
8
],
UUID
[
7
],
UUID
[
6
],
UUID
[
5
],
UUID
[
4
],
UUID
[
3
],
UUID
[
2
],
UUID
[
1
],
UUID
[
0
]);
UUID
[
7
],
UUID
[
6
],
UUID
[
5
],
UUID
[
4
],
UUID
[
3
],
UUID
[
2
],
UUID
[
1
],
UUID
[
0
]);
...
...
Demos/Host/Incomplete/BluetoothHost/Lib/ServiceDiscoveryProtocol.h
View file @
d03d6513
...
@@ -54,6 +54,31 @@
...
@@ -54,6 +54,31 @@
#define SDP_PDU_SERVICESEARCHATTRIBUTEREQUEST 0x06
#define SDP_PDU_SERVICESEARCHATTRIBUTEREQUEST 0x06
#define SDP_PDU_SERVICESEARCHATTRIBUTERESPONSE 0x07
#define SDP_PDU_SERVICESEARCHATTRIBUTERESPONSE 0x07
#define SDP_ATTRIBUTE_NAME 0x0000
#define SDP_ATTRIBUTE_DESCRIPTION 0x0001
#define SDP_ATTRIBUTE_PROVIDER 0x0002
#define SDP_ATTRIBUTE_AVAILABILITY 0x0008
#define SDP_DATATYPE_NIL (0x00 << 3)
#define SDP_DATATYPE_UNSIGNED_INT (0x01 << 3)
#define SDP_DATATYPE_SIGNED_INT (0x02 << 3)
#define SDP_DATATYPE_UUID (0x03 << 3)
#define SDP_DATATYPE_TEXT (0x04 << 3)
#define SDP_DATATYPE_BOOLEAN (0x05 << 3)
#define SDP_DATATYPE_ELEMENT_SEQUENCE (0x06 << 3)
#define SDP_DATATYPE_ELEMENT_ALTERNATIVE (0x07 << 3)
#define SDP_DATATYPE_URL (0x08 << 3)
#define BASE_96BIT_UUID 0xFB, 0x34, 0x9B, 0x5F, 0x80, 0x00, 0x00, 0x80, 0x00, 0x10, 0x00, 0x00
#define SERVICE_ATTRIBUTE_TEXT(name, string) SERVICE_ATTRIBUTE_8BIT_LEN(name, SDP_DATATYPE_TEXT, sizeof(string), string)
#define SERVICE_ATTRIBUTE_8BIT_LEN(name, type, size, ...) const ServiceAttributeData8Bit_t name PROGMEM = \
{.
Header
=
(
type
|
5
),
.
Size
=
size
,
.
Data
=
__VA_ARGS__
}
#define SERVICE_ATTRIBUTE_16BIT_LEN(name, type, size, ...) const ServiceAttributeData16Bit_t name PROGMEM = \
{.
Header
=
(
type
|
5
),
.
Size
=
size
,
.
Data
=
__VA_ARGS__
}
#define SERVICE_ATTRIBUTE_32BIT_LEN(name, type, size, ...) const ServiceAttributeData32Bit_t name PROGMEM = \
{.
Header
=
(
type
|
5
),
.
Size
=
size
,
.
Data
=
__VA_ARGS__
}
/* Type Defines: */
/* Type Defines: */
typedef
struct
typedef
struct
{
{
...
@@ -62,6 +87,45 @@
...
@@ -62,6 +87,45 @@
uint16_t
ParameterLength
;
uint16_t
ParameterLength
;
}
SDP_PDUHeader_t
;
}
SDP_PDUHeader_t
;
typedef
struct
{
uint16_t
AttributeID
;
const
void
*
AttributeData
;
}
ServiceAttributeTable_t
;
typedef
struct
{
uint8_t
UUID
[
16
];
const
void
*
AttributeTable
;
}
ServiceTable_t
;
typedef
struct
{
uint8_t
Header
;
uint32_t
Size
;
uint8_t
Data
[];
}
ServiceAttributeData32Bit_t
;
typedef
struct
{
uint8_t
Header
;
uint16_t
Size
;
uint8_t
Data
[];
}
ServiceAttributeData16Bit_t
;
typedef
struct
{
uint8_t
Header
;
uint8_t
Size
;
uint8_t
Data
[];
}
ServiceAttributeData8Bit_t
;
typedef
struct
{
uint8_t
Header
;
uint8_t
Data
[];
}
ServiceAttributeData_t
;
/* Function Prototypes: */
/* Function Prototypes: */
void
ServiceDiscovery_ProcessPacket
(
void
*
Data
,
Bluetooth_Channel_t
*
Channel
);
void
ServiceDiscovery_ProcessPacket
(
void
*
Data
,
Bluetooth_Channel_t
*
Channel
);
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment