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
d92e9133
Commit
d92e9133
authored
Apr 19, 2010
by
Dean Camera
Browse files
Make bluetooth SDP code correctly unpack the search UUIDs and parameters.
Minor documentation improvements.
parent
fc8e4837
Changes
10
Show whitespace changes
Inline
Side-by-side
Demos/Device/ClassDriver/Keyboard/Keyboard.c
View file @
d92e9133
...
@@ -7,8 +7,7 @@
...
@@ -7,8 +7,7 @@
*/
*/
/*
/*
Copyright 2010 Denver Gingerich (denver [at] ossguy [dot] com)
Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com)
Based on code by Dean Camera (dean [at] fourwalledcubicle [dot] com)
Permission to use, copy, modify, distribute, and sell this
Permission to use, copy, modify, distribute, and sell this
software and its documentation for any purpose is hereby granted
software and its documentation for any purpose is hereby granted
...
...
Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c
View file @
d92e9133
...
@@ -8,7 +8,6 @@
...
@@ -8,7 +8,6 @@
/*
/*
Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com)
Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com)
Copyright 2010 Denver Gingerich (denver [at] ossguy [dot] com)
Permission to use, copy, modify, distribute, and sell this
Permission to use, copy, modify, distribute, and sell this
software and its documentation for any purpose is hereby granted
software and its documentation for any purpose is hereby granted
...
...
Demos/Device/LowLevel/Keyboard/Keyboard.c
View file @
d92e9133
...
@@ -7,8 +7,8 @@
...
@@ -7,8 +7,8 @@
*/
*/
/*
/*
Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com)
Copyright 2010 Denver Gingerich (denver [at] ossguy [dot] com)
Copyright 2010 Denver Gingerich (denver [at] ossguy [dot] com)
Based on code by Dean Camera (dean [at] fourwalledcubicle [dot] com)
Permission to use, copy, modify, distribute, and sell this
Permission to use, copy, modify, distribute, and sell this
software and its documentation for any purpose is hereby granted
software and its documentation for any purpose is hereby granted
...
...
Demos/Host/Incomplete/BluetoothHost/BluetoothHost.c
View file @
d92e9133
...
@@ -206,8 +206,7 @@ void Bluetooth_Host_Task(void)
...
@@ -206,8 +206,7 @@ void Bluetooth_Host_Task(void)
bool
Bluetooth_ConnectionRequest
(
const
uint8_t
*
RemoteAddress
)
bool
Bluetooth_ConnectionRequest
(
const
uint8_t
*
RemoteAddress
)
{
{
printf_P
(
PSTR
(
"Connection Request from Device %02X:%02X:%02X:%02X:%02X:%02X
\r\n
"
),
printf_P
(
PSTR
(
"Connection Request from Device %02X:%02X:%02X:%02X:%02X:%02X
\r\n
"
),
RemoteAddress
[
5
],
RemoteAddress
[
4
],
RemoteAddress
[
5
],
RemoteAddress
[
4
],
RemoteAddress
[
3
],
RemoteAddress
[
2
],
RemoteAddress
[
3
],
RemoteAddress
[
2
],
RemoteAddress
[
1
],
RemoteAddress
[
0
]);
RemoteAddress
[
1
],
RemoteAddress
[
0
]);
/* Always accept connections from remote devices */
/* Always accept connections from remote devices */
...
...
Demos/Host/Incomplete/BluetoothHost/Lib/BluetoothACLPackets.c
View file @
d92e9133
...
@@ -493,17 +493,17 @@ static inline void Bluetooth_Signal_ConfigurationReq(const BT_Signal_Header_t* c
...
@@ -493,17 +493,17 @@ static inline void Bluetooth_Signal_ConfigurationReq(const BT_Signal_Header_t* c
while
(
OptionPos
<
OptionsLen
)
while
(
OptionPos
<
OptionsLen
)
{
{
BT_Config_Option_Header_t
*
OptionHeader
=
(
BT_Config_Option_Header_t
*
)
&
Options
[
OptionPos
];
BT_Config_Option_Header_t
*
OptionHeader
=
(
BT_Config_Option_Header_t
*
)
&
Options
[
OptionPos
];
void
*
OptionData
=
&
Options
[
OptionPos
+
sizeof
(
*
OptionHeader
)];
void
*
OptionData
=
&
Options
[
OptionPos
+
sizeof
(
BT_Config_
Option
_
Header
_t
)];
BT_ACL_DEBUG
(
2
,
"-- Option Type: 0x%04X"
,
OptionHeader
->
Type
);
BT_ACL_DEBUG
(
2
,
"-- Option Type: 0x%04X"
,
OptionHeader
->
Type
);
BT_ACL_DEBUG
(
2
,
"-- Option Length: 0x%04X"
,
(
sizeof
(
*
OptionHeader
)
+
OptionHeader
->
Length
));
BT_ACL_DEBUG
(
2
,
"-- Option Length: 0x%04X"
,
(
sizeof
(
BT_Config_
Option
_
Header
_t
)
+
OptionHeader
->
Length
));
/* Store the remote MTU option's value if present */
/* Store the remote MTU option's value if present */
if
(
OptionHeader
->
Type
==
BT_CONFIG_OPTION_MTU
)
if
(
OptionHeader
->
Type
==
BT_CONFIG_OPTION_MTU
)
ChannelData
->
RemoteMTU
=
*
((
uint16_t
*
)
OptionData
);
ChannelData
->
RemoteMTU
=
*
((
uint16_t
*
)
OptionData
);
/* Progress to the next option in the packet */
/* Progress to the next option in the packet */
OptionPos
+=
(
sizeof
(
*
OptionHeader
)
+
OptionHeader
->
Length
);
OptionPos
+=
(
sizeof
(
BT_Config_
Option
_
Header
_t
)
+
OptionHeader
->
Length
);
}
}
}
}
...
...
Demos/Host/Incomplete/BluetoothHost/Lib/ServiceDiscoveryProtocol.c
View file @
d92e9133
...
@@ -40,6 +40,11 @@ void ServiceDiscovery_ProcessPacket(void* Data, Bluetooth_Channel_t* Channel)
...
@@ -40,6 +40,11 @@ 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
:
...
@@ -66,60 +71,92 @@ static void ServiceDiscovery_ProcessServiceAttribute(SDP_PDUHeader_t* SDPHeader)
...
@@ -66,60 +71,92 @@ static void ServiceDiscovery_ProcessServiceAttribute(SDP_PDUHeader_t* SDPHeader)
static
void
ServiceDiscovery_ProcessServiceSearchAttribute
(
SDP_PDUHeader_t
*
SDPHeader
)
static
void
ServiceDiscovery_ProcessServiceSearchAttribute
(
SDP_PDUHeader_t
*
SDPHeader
)
{
{
uint8_t
*
CurrentParameter
=
((
uint8_t
*
)
SDPHeader
+
sizeof
(
SDP_PDUHeader_t
));
void
*
CurrentParameter
=
((
void
*
)
SDPHeader
+
sizeof
(
SDP_PDUHeader_t
));
BT_SDP_DEBUG
(
1
,
"<< Service Search Attribute"
,
NULL
);
BT_SDP_DEBUG
(
1
,
"<< Service Search Attribute"
,
NULL
);
uint8_t
ServicePatternLength
=
ServiceDiscovery_GetDataElementSize
(
CurrentParameter
);
uint8_t
ElementHeaderSize
;
uint16_t
ServicePatternLength
=
ServiceDiscovery_GetDataElementSize
(
&
CurrentParameter
,
&
ElementHeaderSize
);
BT_SDP_DEBUG
(
2
,
"-- Total UUID Length: 0x%04X"
,
ServicePatternLength
);
while
(
ServicePatternLength
)
while
(
ServicePatternLength
)
{
{
uint8_t
UUIDLength
=
ServiceDiscovery_GetDataElementSize
(
CurrentParameter
);
uint8_t
UUIDLength
=
ServiceDiscovery_GetDataElementSize
(
&
CurrentParameter
,
&
ElementHeaderSize
);
uint8_t
UUID
[
16
];
uint8_t
UUID
[
16
];
memset
(
UUID
,
0x00
,
sizeof
(
UUID
));
memset
(
UUID
,
0x00
,
sizeof
(
UUID
));
memcpy
(
&
UUID
[
sizeof
(
UUID
)
-
UUIDLength
],
CurrentParameter
,
UUIDLength
);
memcpy
(
UUID
,
CurrentParameter
,
UUIDLength
);
CurrentParameter
+=
UUIDLength
;
BT_SDP_DEBUG
(
2
,
"-- UUID: 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"
,
UUID
[
0
],
UUID
[
1
],
UUID
[
2
],
UUID
[
3
],
UUID
[
4
],
UUID
[
5
],
UUID
[
6
],
UUID
[
7
],
UUIDLength
,
UUID
[
8
],
UUID
[
9
],
UUID
[
10
],
UUID
[
11
],
UUID
[
12
],
UUID
[
13
],
UUID
[
14
],
UUID
[
15
]);
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
]);
ServicePatternLength
-=
UUIDLength
;
ServicePatternLength
-=
(
UUIDLength
+
ElementHeaderSize
)
;
}
}
uint16_t
MaxAttributeSize
=
ServiceDiscovery_Read16BitParameter
(
CurrentParameter
);
uint16_t
MaxAttributeSize
=
ServiceDiscovery_Read16BitParameter
(
&
CurrentParameter
);
BT_SDP_DEBUG
(
2
,
"-- Max Return Attribute Bytes: 0x%04X"
,
MaxAttributeSize
);
uint8_t
AttributeIDListLength
=
ServiceDiscovery_GetDataElementSize
(
CurrentParameter
);
uint16_t
AttributeIDListLength
=
ServiceDiscovery_GetDataElementSize
(
&
CurrentParameter
,
&
ElementHeaderSize
);
BT_SDP_DEBUG
(
2
,
"-- Total Attribute Length: 0x%04X"
,
AttributeIDListLength
);
while
(
AttributeIDListLength
)
while
(
AttributeIDListLength
)
{
{
uint8_t
AttributeLength
=
ServiceDiscovery_GetDataElementSize
(
CurrentParameter
);
uint8_t
AttributeLength
=
ServiceDiscovery_GetDataElementSize
(
&
CurrentParameter
,
&
ElementHeaderSize
);
uint32_t
Attribute
=
0
;
BT_SDP_DEBUG
(
2
,
"-- Attribute Length: 0x%04X"
,
AttributeLength
);
memcpy
(
&
Attribute
,
CurrentParameter
,
AttributeLength
);
CurrentParameter
+=
AttributeLength
;
AttributeIDListLength
-=
AttributeLength
;
BT_SDP_DEBUG
(
2
,
"-- Attribute(%d): 0x%08lX"
,
AttributeLength
,
Attribute
);
AttributeIDListLength
-=
(
AttributeLength
+
ElementHeaderSize
);
}
}
}
}
static
uint32_t
ServiceDiscovery_GetDataElementSize
(
void
*
DataElementHeader
)
static
uint32_t
ServiceDiscovery_GetDataElementSize
(
void
*
*
DataElementHeader
,
uint8_t
*
ElementHeaderSize
)
{
{
uint8_t
SizeIndex
=
(
*
((
uint8_t
*
)
DataElementHeader
++
)
&
0x07
);
uint8_t
SizeIndex
=
(
*
((
uint8_t
*
)
*
DataElementHeader
)
&
0x07
);
*
DataElementHeader
+=
sizeof
(
uint8_t
);
*
ElementHeaderSize
=
1
;
uint32_t
ElementValue
;
switch
(
SizeIndex
)
switch
(
SizeIndex
)
{
{
case
0
:
case
0
:
return
1
;
ElementValue
=
1
;
break
;
case
1
:
case
1
:
return
2
;
ElementValue
=
2
;
break
;
case
2
:
case
2
:
return
4
;
ElementValue
=
4
;
break
;
case
3
:
case
3
:
return
8
;
ElementValue
=
8
;
break
;
case
4
:
case
4
:
return
16
;
ElementValue
=
16
;
break
;
case
5
:
case
5
:
return
*
((
uint8_t
*
)
DataElementHeader
++
);
ElementValue
=
*
((
uint8_t
*
)
*
DataElementHeader
);
*
DataElementHeader
+=
sizeof
(
uint8_t
);
*
ElementHeaderSize
=
(
1
+
sizeof
(
uint8_t
));
break
;
case
6
:
case
6
:
return
*
((
uint16_t
*
)
DataElementHeader
++
);
ElementValue
=
*
((
uint16_t
*
)
*
DataElementHeader
);
*
DataElementHeader
+=
sizeof
(
uint16_t
);
*
ElementHeaderSize
=
(
1
+
sizeof
(
uint16_t
));
break
;
default:
default:
return
*
((
uint32_t
*
)
DataElementHeader
++
);
ElementValue
=
*
((
uint32_t
*
)
*
DataElementHeader
);
*
DataElementHeader
+=
sizeof
(
uint32_t
);
*
ElementHeaderSize
=
(
1
+
sizeof
(
uint32_t
));
break
;
}
}
return
ElementValue
;
}
}
Demos/Host/Incomplete/BluetoothHost/Lib/ServiceDiscoveryProtocol.h
View file @
d92e9133
...
@@ -70,12 +70,14 @@
...
@@ -70,12 +70,14 @@
static
void
ServiceDiscovery_ProcessServiceAttribute
(
SDP_PDUHeader_t
*
SDPHeader
);
static
void
ServiceDiscovery_ProcessServiceAttribute
(
SDP_PDUHeader_t
*
SDPHeader
);
static
void
ServiceDiscovery_ProcessServiceSearchAttribute
(
SDP_PDUHeader_t
*
SDPHeader
);
static
void
ServiceDiscovery_ProcessServiceSearchAttribute
(
SDP_PDUHeader_t
*
SDPHeader
);
static
inline
uint16_t
ServiceDiscovery_Read16BitParameter
(
void
*
AttributeHeader
)
static
inline
uint16_t
ServiceDiscovery_Read16BitParameter
(
void
*
*
AttributeHeader
)
{
{
return
*
((
uint16_t
*
)
AttributeHeader
++
);
uint16_t
ParamValue
=
*
((
uint16_t
*
)
*
AttributeHeader
);
*
AttributeHeader
+=
sizeof
(
uint16_t
);
return
ParamValue
;
}
}
static
uint32_t
ServiceDiscovery_GetDataElementSize
(
void
*
AttributeHeader
);
static
uint32_t
ServiceDiscovery_GetDataElementSize
(
void
*
*
AttributeHeader
,
uint8_t
*
ElementHeaderSize
);
#endif
#endif
#endif
#endif
LUFA/ManPages/LUFAPoweredProjects.txt
View file @
d92e9133
...
@@ -43,15 +43,18 @@
...
@@ -43,15 +43,18 @@
* - "Fingerlicking Wingdinger" (WARNING: Bad Language if no Javascript), a MIDI controller: http://noisybox.net/electronics/wingdinger/
* - "Fingerlicking Wingdinger" (WARNING: Bad Language if no Javascript), a MIDI controller: http://noisybox.net/electronics/wingdinger/
* - Garmin GPS USB to NMEA standard serial sentence translator: http://github.com/nall/garmin-transmogrifier/tree/master
* - Garmin GPS USB to NMEA standard serial sentence translator: http://github.com/nall/garmin-transmogrifier/tree/master
* - Generic HID Device Creator: http://generichid.sourceforge.net/
* - Generic HID Device Creator: http://generichid.sourceforge.net/
* - NES Controller USB modification: http://projects.peterpolidoro.net/video/NESUSB.htm
* - IR Remote to Keyboard decoder: http://netzhansa.blogspot.com/2010/04/our-living-room-hi-fi-setup-needs-mp3.html
* - LED Panel controller: http://projects.peterpolidoro.net/caltech/panelscontroller/panelscontroller.htm
* - Linux Secure Storage Dongle: http://github.com/TomMD/teensy
* - Linux Secure Storage Dongle: http://github.com/TomMD/teensy
* - MakeTV Episode Dispenser: http://www.youtube.com/watch?v=BkWUi18hl3g
* - MakeTV Episode Dispenser: http://www.youtube.com/watch?v=BkWUi18hl3g
* - Midimonster, a USB-to-MIDI gateway board: http://www.dorkbotpdx.org/wiki/midimonster
* - MidiMonster, a USB-to-MIDI gateway board: http://www.dorkbotpdx.org/wiki/midimonster
* - NES Controller USB modification: http://projects.peterpolidoro.net/video/NESUSB.htm
* - Opendous-JTAG, an open source JTAG device: http://code.google.com/p/opendous-jtag/
* - Opendous-JTAG, an open source JTAG device: http://code.google.com/p/opendous-jtag/
* - Openkubus, an open source hardware-based authentication dongle: http://code.google.com/p/openkubus/
* - Openkubus, an open source hardware-based authentication dongle: http://code.google.com/p/openkubus/
* - Orbee, a USB connected RGB Orb for notifications: http://www.franksworkshop.com.au/Electronics/Orbee/Orbee.htm
* - Orbee, a USB connected RGB Orb for notifications: http://www.franksworkshop.com.au/Electronics/Orbee/Orbee.htm
* - Programmable XBOX controller: http://richard-burke.dyndns.org/wordpress/pan-galactic-gargantuan-gargle-brain-aka-xbox-360-usb-controller/
* - Programmable XBOX controller: http://richard-burke.dyndns.org/wordpress/pan-galactic-gargantuan-gargle-brain-aka-xbox-360-usb-controller/
* - Reprap with LUFA, a LUFA powered 3D printer: http://code.google.com/p/at90usb1287-code-for-arduino-and-eclipse/
* - Reprap with LUFA, a LUFA powered 3D printer: http://code.google.com/p/at90usb1287-code-for-arduino-and-eclipse/
* - SD Card reader: http://elasticsheep.com/2010/04/teensy2-usb-mass-storage-with-an-sd-card/
* - SEGA Megadrive/Genesis Development Cartridge: http://www.makestuff.eu/wordpress/?page_id=398
* - SEGA Megadrive/Genesis Development Cartridge: http://www.makestuff.eu/wordpress/?page_id=398
* - Stripe Snoop, a Magnetic Card reader: http://www.ossguy.com/ss_usb/
* - Stripe Snoop, a Magnetic Card reader: http://www.ossguy.com/ss_usb/
* - USB Interface for Playstation Portable Devices: http://forums.ps2dev.org/viewtopic.php?t=11001
* - USB Interface for Playstation Portable Devices: http://forums.ps2dev.org/viewtopic.php?t=11001
...
...
LUFA/ManPages/LibraryApps.txt
View file @
d92e9133
...
@@ -103,6 +103,7 @@
...
@@ -103,6 +103,7 @@
* - <b>LEDNotifier</b> - USB LED Notification project
* - <b>LEDNotifier</b> - USB LED Notification project
* - <b>Magstripe</b> - Magnetic Stripe Card Reader project
* - <b>Magstripe</b> - Magnetic Stripe Card Reader project
* - <b>MissileLaucher</b> - Toy Missile Launcher Host project
* - <b>MissileLaucher</b> - Toy Missile Launcher Host project
* - <b>RelayBoard</b> - Relay board controller, controllable via the "sismpctl" Linux application
* - <b>TemperatureDataLogger</b> - Temperature Datalogging project, using the FatFS library
* - <b>TemperatureDataLogger</b> - Temperature Datalogging project, using the FatFS library
* - <b>USBtoSerial</b> - USB to USART Serial Converter project
* - <b>USBtoSerial</b> - USB to USART Serial Converter project
* - <b>Webserver</b> - RNDIS Host Webserver with DHCP client, powered by uIP TCP/IP stack project and FatFS library
* - <b>Webserver</b> - RNDIS Host Webserver with DHCP client, powered by uIP TCP/IP stack project and FatFS library
...
...
LUFA/ManPages/SoftwareBootloaderJump.txt
View file @
d92e9133
...
@@ -34,8 +34,8 @@
...
@@ -34,8 +34,8 @@
* void Bootloader_Jump_Check(void) ATTR_INIT_SECTION(3);
* void Bootloader_Jump_Check(void) ATTR_INIT_SECTION(3);
* void Bootloader_Jump_Check(void)
* void Bootloader_Jump_Check(void)
* {
* {
* // If the bootloader key is correct, clear it and jump to the bootloader
* // If the
reset source was the
bootloader
and the
key is correct, clear it and jump to the bootloader
* if (Boot_Key == MAGIC_BOOT_KEY)
* if
((MCUSR & (1<<WDRF)) &&
(Boot_Key == MAGIC_BOOT_KEY)
)
* {
* {
* Boot_Key = 0;
* Boot_Key = 0;
* ((void (*)(void))BOOTLOADER_START_ADDRESS)();
* ((void (*)(void))BOOTLOADER_START_ADDRESS)();
...
...
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