aboutsummaryrefslogtreecommitdiffstats
path: root/testhal
diff options
context:
space:
mode:
authorDiego Ismirlian <dismirlian (at) google's mail.com>2017-06-05 10:38:05 -0300
committerDiego Ismirlian <dismirlian (at) google's mail.com>2017-06-05 10:38:05 -0300
commit835bb887c0557f0f26716c7f3570f6049925b1ec (patch)
tree479510fc456f3d78791f7be767c4a5bb522c7c49 /testhal
parenta77ab485fbec2759ad78cc97b5cdf41b7a4eb914 (diff)
downloadChibiOS-Contrib-835bb887c0557f0f26716c7f3570f6049925b1ec.tar.gz
ChibiOS-Contrib-835bb887c0557f0f26716c7f3570f6049925b1ec.tar.bz2
ChibiOS-Contrib-835bb887c0557f0f26716c7f3570f6049925b1ec.zip
Add AOA (Android Accessory) class driver
Diffstat (limited to 'testhal')
-rw-r--r--testhal/STM32/STM32F4xx/USB_HOST/halconf_community.h19
-rw-r--r--testhal/STM32/STM32F4xx/USB_HOST/main.c112
2 files changed, 119 insertions, 12 deletions
diff --git a/testhal/STM32/STM32F4xx/USB_HOST/halconf_community.h b/testhal/STM32/STM32F4xx/USB_HOST/halconf_community.h
index 7b962bc..f0e1195 100644
--- a/testhal/STM32/STM32F4xx/USB_HOST/halconf_community.h
+++ b/testhal/STM32/STM32F4xx/USB_HOST/halconf_community.h
@@ -115,6 +115,20 @@
#define HAL_USBHUVC_WORK_RAM_SIZE 20000
#define HAL_USBHUVC_STATUS_PACKETS_COUNT 10
+/* AOA */
+#define HAL_USBH_USE_AOA TRUE
+
+#define HAL_USBHAOA_MAX_INSTANCES 1
+/* Uncomment this if you need a filter for AOA devices:
+ * #define HAL_USBHAOA_FILTER_CALLBACK _try_aoa
+ */
+#define HAL_USBHAOA_DEFAULT_MANUFACTURER "Diego MFG & Co."
+#define HAL_USBHAOA_DEFAULT_MODEL "Diego's device"
+#define HAL_USBHAOA_DEFAULT_DESCRIPTION "Description of this device..."
+#define HAL_USBHAOA_DEFAULT_VERSION "1.0"
+#define HAL_USBHAOA_DEFAULT_URI NULL
+#define HAL_USBHAOA_DEFAULT_SERIAL NULL
+#define HAL_USBHAOA_DEFAULT_AUDIO_MODE USBHAOA_AUDIO_MODE_DISABLED
/* HUB */
#define HAL_USBH_USE_HUB TRUE
@@ -159,6 +173,11 @@
#define USBHFTDI_DEBUG_ENABLE_WARNINGS TRUE
#define USBHFTDI_DEBUG_ENABLE_ERRORS TRUE
+#define USBHAOA_DEBUG_ENABLE_TRACE FALSE
+#define USBHAOA_DEBUG_ENABLE_INFO TRUE
+#define USBHAOA_DEBUG_ENABLE_WARNINGS TRUE
+#define USBHAOA_DEBUG_ENABLE_ERRORS TRUE
+
/*===========================================================================*/
/* FSMCNAND driver related settings. */
/*===========================================================================*/
diff --git a/testhal/STM32/STM32F4xx/USB_HOST/main.c b/testhal/STM32/STM32F4xx/USB_HOST/main.c
index 9f0c8b3..804eb93 100644
--- a/testhal/STM32/STM32F4xx/USB_HOST/main.c
+++ b/testhal/STM32/STM32F4xx/USB_HOST/main.c
@@ -19,18 +19,7 @@
#include "ff.h"
#include <string.h>
-
-
-#if HAL_USBH_USE_FTDI
-#include "usbh/dev/ftdi.h"
-#include "shell.h"
-#include "chprintf.h"
-
-static THD_WORKING_AREA(waTestFTDI, 1024);
-
-#define SHELL_WA_SIZE THD_WORKING_AREA_SIZE(2048)
-#define TEST_WA_SIZE THD_WORKING_AREA_SIZE(256)
-
+#if HAL_USBH_USE_FTDI || HAL_USBH_USE_AOA
static uint8_t buf[] =
"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
@@ -48,7 +37,17 @@ static uint8_t buf[] =
"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef";
+#endif
+
+#if HAL_USBH_USE_FTDI
+#include "usbh/dev/ftdi.h"
+#include "shell.h"
+#include "chprintf.h"
+static THD_WORKING_AREA(waTestFTDI, 1024);
+
+#define SHELL_WA_SIZE THD_WORKING_AREA_SIZE(2048)
+#define TEST_WA_SIZE THD_WORKING_AREA_SIZE(256)
static void cmd_write(BaseSequentialStream *chp, int argc, char *argv[]) {
@@ -197,7 +196,92 @@ start:
}
#endif
+#if HAL_USBH_USE_AOA
+#include "usbh/dev/aoa.h"
+#include "chprintf.h"
+
+static THD_WORKING_AREA(waTestAOA, 1024);
+
+#define SHELL_WA_SIZE THD_WORKING_AREA_SIZE(2048)
+#define TEST_WA_SIZE THD_WORKING_AREA_SIZE(256)
+
+static void ThreadTestAOA(void *p) {
+ (void)p;
+ USBHAOADriver *const aoap = &USBHAOAD[0];
+ USBHAOAChannel *const aoacp = &aoap->channel;
+
+start:
+ while (usbhaoaGetState(aoap) != USBHAOA_STATE_READY) {
+ chThdSleepMilliseconds(100);
+ }
+
+ usbDbgPuts("AOA: Connected");
+
+ if (usbhaoaGetChannelState(aoap) != USBHAOA_CHANNEL_STATE_READY) {
+ usbhaoaChannelStart(aoap);
+ usbDbgPuts("AOA: Channel started");
+ }
+
+ //loopback
+ if (1) {
+ for(;;) {
+ msg_t m = streamGet(aoacp);
+ if (m < MSG_OK) {
+ usbDbgPuts("AOA: Disconnected");
+ goto start;
+ }
+ streamPut(aoacp, (uint8_t)m);
+ if (m == 'q')
+ break;
+ }
+ }
+
+#define AOA_WRITE_SPEED_TEST_BYTES 3000000UL
+ //write speed test
+ if (1) {
+ systime_t st, et;
+ int i;
+ for (i = 0; i < 5; i++) {
+ uint32_t bytes = AOA_WRITE_SPEED_TEST_BYTES;
+ uint32_t times = bytes / 1024;
+ st = chVTGetSystemTimeX();
+ while (times--) {
+ if (streamWrite(aoacp, buf, 1024) < 1024) {
+ usbDbgPuts("AOA: Disconnected");
+ goto start;
+ }
+ bytes -= 1024;
+ }
+ if (bytes) {
+ if (streamWrite(aoacp, buf, bytes) < bytes) {
+ usbDbgPuts("AOA: Disconnected");
+ goto start;
+ }
+ }
+ et = chVTGetSystemTimeX();
+ usbDbgPrintf("\tRate=%uB/s", AOA_WRITE_SPEED_TEST_BYTES / (et - st) * 100);
+ }
+ }
+
+ //single character write test (tests the timer)
+ if (0) {
+ for (;;) {
+ if (streamPut(aoacp, 'A') != MSG_OK) {
+ usbDbgPuts("AOA: Disconnected");
+ goto start;
+ }
+ chThdSleepMilliseconds(100);
+ }
+ }
+
+ usbhaoaChannelStop(aoap);
+
+ usbDbgPuts("AOA: Tests done, restarting in 3s");
+ chThdSleepMilliseconds(3000);
+ goto start;
+}
+#endif
#if HAL_USBH_USE_MSD
#include "usbh/dev/msd.h"
@@ -400,6 +484,10 @@ int main(void) {
chThdCreateStatic(waTestFTDI, sizeof(waTestFTDI), NORMALPRIO, ThreadTestFTDI, 0);
#endif
+#if HAL_USBH_USE_AOA
+ chThdCreateStatic(waTestAOA, sizeof(waTestAOA), NORMALPRIO, ThreadTestAOA, 0);
+#endif
+
//turn on USB power
palClearPad(GPIOC, GPIOC_OTG_FS_POWER_ON);