aboutsummaryrefslogtreecommitdiffstats
path: root/Demos/Host
diff options
context:
space:
mode:
Diffstat (limited to 'Demos/Host')
-rw-r--r--Demos/Host/Incomplete/AndroidAccessoryHost/AndroidAccessoryHost.c50
-rw-r--r--Demos/Host/Incomplete/AndroidAccessoryHost/AndroidAccessoryHost.h13
-rw-r--r--Demos/Host/Incomplete/AndroidAccessoryHost/Lib/AndroidAccessoryCommands.c83
-rw-r--r--Demos/Host/Incomplete/AndroidAccessoryHost/Lib/AndroidAccessoryCommands.h74
-rw-r--r--Demos/Host/Incomplete/AndroidAccessoryHost/makefile1
-rw-r--r--Demos/Host/Incomplete/BluetoothHost/BluetoothHost.h4
6 files changed, 197 insertions, 28 deletions
diff --git a/Demos/Host/Incomplete/AndroidAccessoryHost/AndroidAccessoryHost.c b/Demos/Host/Incomplete/AndroidAccessoryHost/AndroidAccessoryHost.c
index 9b5ffbea6..d4df9a11d 100644
--- a/Demos/Host/Incomplete/AndroidAccessoryHost/AndroidAccessoryHost.c
+++ b/Demos/Host/Incomplete/AndroidAccessoryHost/AndroidAccessoryHost.c
@@ -139,9 +139,8 @@ void Android_Host_Task(void)
/* Get and process the configuration descriptor data */
ErrorCode = ProcessDeviceDescriptor();
- /* Save whether the Android device needs to be mode-switched later on */
bool RequiresModeSwitch = (ErrorCode == NonAccessoryModeAndroidDevice);
-
+
/* Error out if the device is not an Android device or an error occurred */
if ((ErrorCode != AccessoryModeAndroidDevice) && !(RequiresModeSwitch))
{
@@ -179,20 +178,43 @@ void Android_Host_Task(void)
/* Check if a valid Android device was attached, but it is not current in Accessory mode */
if (RequiresModeSwitch)
{
- USB_ControlRequest = (USB_Request_Header_t)
+ uint16_t AndroidProtocol;
+
+ /* Fetch the version of the Android Accessory Protocol supported by the device */
+ if ((ErrorCode = Android_GetAccessoryProtocol(&AndroidProtocol)) != HOST_SENDCONTROL_Successful)
{
- .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_VENDOR | REQREC_DEVICE),
- .bRequest = ANDROID_Req_StartAccessoryMode,
- .wValue = 0,
- .wIndex = 0,
- .wLength = 0,
- };
-
- /* Send the control request for the Android device to switch to accessory mode */
- Pipe_SelectPipe(PIPE_CONTROLPIPE);
- USB_Host_SendControlRequest(NULL);
+ printf_P(PSTR(ESC_FG_RED "Control Error (Get Protocol).\r\n"
+ " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode);
+
+ /* Indicate error via status LEDs */
+ LEDs_SetAllLEDs(LEDS_LED1);
+
+ /* Wait until USB device disconnected */
+ USB_HostState = HOST_STATE_WaitForDeviceRemoval;
+ break;
+ }
- puts_P(PSTR("Switching to Accessory Mode.\r\n"));
+ /* Validate the returned protocol version */
+ if (AndroidProtocol != ANDROID_PROTOCOL_Accessory)
+ {
+ puts_P(PSTR(ESC_FG_RED "Accessory Mode Not Supported."));
+
+ /* Indicate error via status LEDs */
+ LEDs_SetAllLEDs(LEDS_LED1);
+
+ /* Wait until USB device disconnected */
+ USB_HostState = HOST_STATE_WaitForDeviceRemoval;
+ break;
+ }
+
+ /* Send the device strings and start the Android Accessory Mode */
+ Android_SendString(ANDROID_STRING_Manufacturer, "Dean Camera");
+ Android_SendString(ANDROID_STRING_Model, "LUFA Android Demo");
+ Android_SendString(ANDROID_STRING_Description, "LUFA Android Demo");
+ Android_SendString(ANDROID_STRING_Version, "1.0");
+ Android_SendString(ANDROID_STRING_URI, "http://www.lufa-lib.org");
+ Android_SendString(ANDROID_STRING_Serial, "0000000012345678");
+ Android_StartAccessoryMode();
/* Wait until USB device disconnected */
USB_HostState = HOST_STATE_WaitForDeviceRemoval;
diff --git a/Demos/Host/Incomplete/AndroidAccessoryHost/AndroidAccessoryHost.h b/Demos/Host/Incomplete/AndroidAccessoryHost/AndroidAccessoryHost.h
index aea0b4447..59f49c518 100644
--- a/Demos/Host/Incomplete/AndroidAccessoryHost/AndroidAccessoryHost.h
+++ b/Demos/Host/Incomplete/AndroidAccessoryHost/AndroidAccessoryHost.h
@@ -46,6 +46,7 @@
#include "DeviceDescriptor.h"
#include "ConfigDescriptor.h"
+ #include "Lib/AndroidAccessoryCommands.h"
#include <LUFA/Version.h>
#include <LUFA/Drivers/Misc/TerminalCodes.h>
@@ -69,17 +70,6 @@
/** LED mask for the library LED driver, to indicate that the USB interface is busy. */
#define LEDMASK_USB_BUSY LEDS_LED2
- /* Enums: */
- enum Android_Requests_t
- {
- ANDROID_Req_GetAccessoryProtocol = 51,
- ANDROID_Req_GetString = 52,
- ANDROID_Req_StartAccessoryMode = 53,
- };
-
- /* Task Definitions: */
- void Android_Host_Task(void);
-
/* Event Handlers: */
void EVENT_USB_Host_DeviceAttached(void);
void EVENT_USB_Host_DeviceUnattached(void);
@@ -89,6 +79,7 @@
const uint8_t SubErrorCode);
/* Function Prototypes: */
+ void Android_Host_Task(void);
void SetupHardware(void);
#endif
diff --git a/Demos/Host/Incomplete/AndroidAccessoryHost/Lib/AndroidAccessoryCommands.c b/Demos/Host/Incomplete/AndroidAccessoryHost/Lib/AndroidAccessoryCommands.c
new file mode 100644
index 000000000..cd26538eb
--- /dev/null
+++ b/Demos/Host/Incomplete/AndroidAccessoryHost/Lib/AndroidAccessoryCommands.c
@@ -0,0 +1,83 @@
+/*
+ LUFA Library
+ Copyright (C) Dean Camera, 2011.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+*/
+
+/*
+ Copyright 2011 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
+ *
+ * Android Accessory Mode utility functions, for the configuration of an attached
+ * Android device into Android Accessory Mode ready for general communication.
+ */
+
+#include "AndroidAccessoryCommands.h"
+
+uint8_t Android_GetAccessoryProtocol(uint16_t* const Protocol)
+{
+ USB_ControlRequest = (USB_Request_Header_t)
+ {
+ .bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_VENDOR | REQREC_DEVICE),
+ .bRequest = ANDROID_Req_GetAccessoryProtocol,
+ .wValue = 0,
+ .wIndex = 0,
+ .wLength = sizeof(uint16_t),
+ };
+
+ Pipe_SelectPipe(PIPE_CONTROLPIPE);
+ return USB_Host_SendControlRequest(Protocol);
+}
+
+uint8_t Android_SendString(const uint8_t StringIndex,
+ char* String)
+{
+ USB_ControlRequest = (USB_Request_Header_t)
+ {
+ .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_VENDOR | REQREC_DEVICE),
+ .bRequest = ANDROID_Req_SendString,
+ .wValue = 0,
+ .wIndex = StringIndex,
+ .wLength = (strlen(String) + 1),
+ };
+
+ Pipe_SelectPipe(PIPE_CONTROLPIPE);
+ return USB_Host_SendControlRequest(String);
+}
+
+uint8_t Android_StartAccessoryMode(void)
+{
+ USB_ControlRequest = (USB_Request_Header_t)
+ {
+ .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_VENDOR | REQREC_DEVICE),
+ .bRequest = ANDROID_Req_StartAccessoryMode,
+ .wValue = 0,
+ .wIndex = 0,
+ .wLength = 0,
+ };
+
+ Pipe_SelectPipe(PIPE_CONTROLPIPE);
+ return USB_Host_SendControlRequest(NULL);
+}
diff --git a/Demos/Host/Incomplete/AndroidAccessoryHost/Lib/AndroidAccessoryCommands.h b/Demos/Host/Incomplete/AndroidAccessoryHost/Lib/AndroidAccessoryCommands.h
new file mode 100644
index 000000000..d5f6fa842
--- /dev/null
+++ b/Demos/Host/Incomplete/AndroidAccessoryHost/Lib/AndroidAccessoryCommands.h
@@ -0,0 +1,74 @@
+/*
+ LUFA Library
+ Copyright (C) Dean Camera, 2011.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+*/
+
+/*
+ Copyright 2011 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
+ *
+ * Header file for AndroidAccessoryCommands.c.
+ */
+
+#ifndef _ANDROID_ACCESSORY_COMMANDS_H_
+#define _ANDROID_ACCESSORY_COMMANDS_H_
+
+ /* Includes: */
+ #include <stdint.h>
+ #include <stdbool.h>
+
+ #include <LUFA/Drivers/USB/USB.h>
+
+ /* Enums: */
+ enum Android_Requests_t
+ {
+ ANDROID_Req_GetAccessoryProtocol = 51,
+ ANDROID_Req_SendString = 52,
+ ANDROID_Req_StartAccessoryMode = 53,
+ };
+
+ enum Android_Strings_t
+ {
+ ANDROID_STRING_Manufacturer = 0,
+ ANDROID_STRING_Model = 1,
+ ANDROID_STRING_Description = 2,
+ ANDROID_STRING_Version = 3,
+ ANDROID_STRING_URI = 4,
+ ANDROID_STRING_Serial = 5,
+ };
+
+ enum Android_Protocols_t
+ {
+ ANDROID_PROTOCOL_Accessory = 0x0001,
+ };
+
+ /* Function Prototypes: */
+ uint8_t Android_GetAccessoryProtocol(uint16_t* const Protocol);
+ uint8_t Android_SendString(const uint8_t StringIndex,
+ char* String);
+ uint8_t Android_StartAccessoryMode(void);
+
+#endif
diff --git a/Demos/Host/Incomplete/AndroidAccessoryHost/makefile b/Demos/Host/Incomplete/AndroidAccessoryHost/makefile
index 434bad48c..1d1cb0cbd 100644
--- a/Demos/Host/Incomplete/AndroidAccessoryHost/makefile
+++ b/Demos/Host/Incomplete/AndroidAccessoryHost/makefile
@@ -132,6 +132,7 @@ include $(LUFA_PATH)/LUFA/makefile
SRC = $(TARGET).c \
DeviceDescriptor.c \
ConfigDescriptor.c \
+ Lib/AndroidAccessoryCommands.c \
$(LUFA_SRC_USB) \
$(LUFA_SRC_SERIAL)
diff --git a/Demos/Host/Incomplete/BluetoothHost/BluetoothHost.h b/Demos/Host/Incomplete/BluetoothHost/BluetoothHost.h
index aecdf965c..b452271b5 100644
--- a/Demos/Host/Incomplete/BluetoothHost/BluetoothHost.h
+++ b/Demos/Host/Incomplete/BluetoothHost/BluetoothHost.h
@@ -71,9 +71,6 @@
/** LED mask for the library LED driver, to indicate that the USB interface is busy. */
#define LEDMASK_USB_BUSY LEDS_LED2
- /* Task Definitions: */
- void Bluetooth_Host_Task(void);
-
/* Event Handlers: */
void EVENT_USB_Host_DeviceAttached(void);
void EVENT_USB_Host_DeviceUnattached(void);
@@ -83,6 +80,7 @@
const uint8_t SubErrorCode);
/* Function Prototypes: */
+ void Bluetooth_Host_Task(void);
void SetupHardware(void);
#endif