X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/26421b38cd59191cd42d8e6f0d1499c3775e75d7..57fe6b4fb97668eb15c4fa56095c0abd746d6c99:/Demos/Host/Incomplete/BluetoothHost/BluetoothHost.c diff --git a/Demos/Host/Incomplete/BluetoothHost/BluetoothHost.c b/Demos/Host/Incomplete/BluetoothHost/BluetoothHost.c index d2bd07589..e74d37749 100644 --- a/Demos/Host/Incomplete/BluetoothHost/BluetoothHost.c +++ b/Demos/Host/Incomplete/BluetoothHost/BluetoothHost.c @@ -36,6 +36,14 @@ #include "BluetoothHost.h" +/** Bluetooth configuration structure. This structure configures the bluetooth stack's user alterable settings. */ +Bluetooth_Device_t Bluetooth_DeviceConfiguration = + { + Class: (DEVICE_CLASS_SERVICE_CAPTURING | DEVICE_CLASS_MAJOR_COMPUTER | DEVICE_CLASS_MINOR_COMPUTER_PALM), + PINCode: "0000", + Name: "LUFA Bluetooth Demo" + }; + /** Main program entry point. This routine configures the hardware required by the application, then * enters a loop to run the application tasks in sequence. */ @@ -46,6 +54,7 @@ int main(void) puts_P(PSTR(ESC_FG_CYAN "Bluetooth Host Demo running.\r\n" ESC_FG_WHITE)); LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); + sei(); for (;;) { @@ -196,18 +205,27 @@ void Bluetooth_Host_Task(void) } } +/** Bluetooth stack callback event for when the Bluetooth stack has fully initialized using the attached + * Bluetooth dongle. + */ +void Bluetooth_StackInitialized(void) +{ + printf_P(PSTR("Stack initialized with local address %02X:%02X:%02X:%02X:%02X:%02X.\r\n"), + Bluetooth_State.LocalBDADDR[5], Bluetooth_State.LocalBDADDR[4], Bluetooth_State.LocalBDADDR[3], + Bluetooth_State.LocalBDADDR[2], Bluetooth_State.LocalBDADDR[1], Bluetooth_State.LocalBDADDR[0]); +} + /** Bluetooth stack callback event for a Bluetooth connection request. When this callback fires, the * user application must indicate if the connection is to be allowed or rejected. * - * \param RemoteAddress Bluetooth address of the remote device attempting the connection + * \param[in] RemoteAddress Bluetooth address of the remote device attempting the connection * * \return Boolean true to accept the connection, false to reject it */ -bool Bluetooth_ConnectionRequest(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"), - RemoteAddress[5], RemoteAddress[4], - RemoteAddress[3], RemoteAddress[2], + printf_P(PSTR("Connection Request from Device %02X:%02X:%02X:%02X:%02X:%02X.\r\n"), + RemoteAddress[5], RemoteAddress[4], RemoteAddress[3], RemoteAddress[2], RemoteAddress[1], RemoteAddress[0]); /* Always accept connections from remote devices */ @@ -219,7 +237,7 @@ bool Bluetooth_ConnectionRequest(uint8_t* RemoteAddress) */ void Bluetooth_ConnectionComplete(void) { - printf_P(PSTR("Connection Complete to Device %02X:%02X:%02X:%02X:%02X:%02X\r\n"), + printf_P(PSTR("Connection Complete to Device %02X:%02X:%02X:%02X:%02X:%02X.\r\n"), Bluetooth_Connection.RemoteAddress[5], Bluetooth_Connection.RemoteAddress[4], Bluetooth_Connection.RemoteAddress[3], Bluetooth_Connection.RemoteAddress[2], Bluetooth_Connection.RemoteAddress[1], Bluetooth_Connection.RemoteAddress[0]); @@ -232,27 +250,48 @@ void Bluetooth_ConnectionComplete(void) */ void Bluetooth_DisconnectionComplete(void) { - printf_P(PSTR("Disconnection Complete to Device %02X:%02X:%02X:%02X:%02X:%02X\r\n"), + printf_P(PSTR("Disconnection Complete to Device %02X:%02X:%02X:%02X:%02X:%02X.\r\n"), Bluetooth_Connection.RemoteAddress[5], Bluetooth_Connection.RemoteAddress[4], Bluetooth_Connection.RemoteAddress[3], Bluetooth_Connection.RemoteAddress[2], Bluetooth_Connection.RemoteAddress[1], Bluetooth_Connection.RemoteAddress[0]); } +/** Bluetooth stack callback event for a Bluetooth ACL Channel connection request. When is callback fires, + * the user application must indicate if the channel connection should be rejected or not, based on the + * protocol (PSM) value of the requested channel. + * + * \param PSM Protocol PSM value for the requested channel + * + * \return Boolean true to accept the channel connection request, false to reject it + */ +bool Bluetooth_ChannelConnectionRequest(const uint16_t PSM) +{ + /* Always accept channel connection requests regardless of PSM */ + return true; +} + /** Bluetooth stack callback event for a non-signal ACL packet reception. This callback fires once a connection * to a remote Bluetooth device has been made, and the remote device has sent a non-signalling ACL packet. * - * \param PacketLength Length of the packet data, in bytes - this must be decremented as data is read - * \param Channel Bluetooth ACL data channel information structure for the packet's destination channel + * \param[in] Data Pointer to a buffer where the received data is stored + * \param[in] DataLen Length of the packet data, in bytes + * \param[in] Channel Bluetooth ACL data channel information structure for the packet's destination channel */ -void Bluetooth_PacketReceived(uint16_t* PacketLength, Bluetooth_Channel_t* Channel) +void Bluetooth_PacketReceived(void* Data, uint16_t DataLen, Bluetooth_Channel_t* const Channel) { - uint8_t DataPayload[*PacketLength]; - - Pipe_Read_Stream_LE(&DataPayload, *PacketLength); - *PacketLength = 0; - - printf_P(PSTR("Packet Received (Channel 0x%04X, PSM: 0x%02x):\r\n"), Channel->LocalNumber, Channel->PSM); - for (uint16_t Byte = 0; Byte < sizeof(DataPayload); Byte++) - printf_P(PSTR("0x%02X "), DataPayload[Byte]); - puts_P(PSTR("\r\n")); + switch (Channel->PSM) + { + case CHANNEL_PSM_SDP: + /* Service Discovery Protocol packet */ + ServiceDiscovery_ProcessPacket(Data, Channel); + break; + default: + /* Unknown Protocol packet */ + printf_P(PSTR("Packet Received (Channel 0x%04X, PSM: 0x%02x):\r\n"), Channel->LocalNumber, Channel->PSM); + for (uint16_t Byte = 0; Byte < DataLen; Byte++) + printf_P(PSTR("0x%02X "), ((uint8_t*)Data)[Byte]); + puts_P(PSTR("\r\n")); + + break; + } }