From e9f249bc21d5f5711464a53d0183f97a2e601180 Mon Sep 17 00:00:00 2001 From: Rocco Marco Guglielmi Date: Tue, 27 Feb 2018 20:41:45 +0000 Subject: Improved LSM303DLHC driver. Modified base demo git-svn-id: https://svn.code.sf.net/p/chibios/svn2/trunk@11589 110e8d01-0319-4d1e-a829-52ad28d1bb01 --- testex/STM32/STM32F3xx/I2C-LSM303DLHC/.project | 2 +- testex/STM32/STM32F3xx/I2C-LSM303DLHC/Makefile | 8 +- testex/STM32/STM32F3xx/I2C-LSM303DLHC/halconf.h | 6 +- testex/STM32/STM32F3xx/I2C-LSM303DLHC/main.c | 277 +++---------------- testex/STM32/STM32F3xx/I2C-LSM303DLHC/mcuconf.h | 4 +- testex/STM32/STM32F3xx/I2C-LSM303DLHC/usbcfg.c | 342 ------------------------ testex/STM32/STM32F3xx/I2C-LSM303DLHC/usbcfg.h | 26 -- 7 files changed, 44 insertions(+), 621 deletions(-) delete mode 100644 testex/STM32/STM32F3xx/I2C-LSM303DLHC/usbcfg.c delete mode 100644 testex/STM32/STM32F3xx/I2C-LSM303DLHC/usbcfg.h (limited to 'testex/STM32/STM32F3xx/I2C-LSM303DLHC') diff --git a/testex/STM32/STM32F3xx/I2C-LSM303DLHC/.project b/testex/STM32/STM32F3xx/I2C-LSM303DLHC/.project index 73e5a83ea..94d8e5c66 100644 --- a/testex/STM32/STM32F3xx/I2C-LSM303DLHC/.project +++ b/testex/STM32/STM32F3xx/I2C-LSM303DLHC/.project @@ -27,7 +27,7 @@ board 2 - CHIBIOS/os/hal/boards/ST_STM32F3_DISCOVERY + CHIBIOS/os/hal/boards/ST_STM32F3_DISCOVERY_REVC os diff --git a/testex/STM32/STM32F3xx/I2C-LSM303DLHC/Makefile b/testex/STM32/STM32F3xx/I2C-LSM303DLHC/Makefile index 00d84bee6..248abd281 100644 --- a/testex/STM32/STM32F3xx/I2C-LSM303DLHC/Makefile +++ b/testex/STM32/STM32F3xx/I2C-LSM303DLHC/Makefile @@ -5,7 +5,7 @@ # Compiler options here. ifeq ($(USE_OPT),) - USE_OPT = -O2 -ggdb -fomit-frame-pointer -falign-functions=16 + USE_OPT = -O0 -ggdb -fomit-frame-pointer -falign-functions=16 endif # C specific options here (added to USE_OPT). @@ -92,7 +92,7 @@ include $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC/mk/startup_stm32f3xx.m # HAL-OSAL files (optional). include $(CHIBIOS)/os/hal/hal.mk include $(CHIBIOS)/os/hal/ports/STM32/STM32F3xx/platform.mk -include $(CHIBIOS)/os/hal/boards/ST_STM32F3_DISCOVERY/board.mk +include $(CHIBIOS)/os/hal/boards/ST_STM32F3_DISCOVERY_REVC/board.mk include $(CHIBIOS)/os/hal/osal/rt/osal.mk # RTOS files (optional). include $(CHIBIOS)/os/rt/rt.mk @@ -100,7 +100,6 @@ include $(CHIBIOS)/os/common/ports/ARMCMx/compilers/GCC/mk/port_v7m.mk # Other files (optional). include $(CHIBIOS)/os/ex/ST/lsm303dlhc.mk include $(CHIBIOS)/os/hal/lib/streams/streams.mk -include $(CHIBIOS)/os/various/shell/shell.mk # Define linker script file here LDSCRIPT= $(STARTUPLD)/STM32F303xC.ld @@ -116,8 +115,7 @@ CSRC = $(STARTUPSRC) \ $(BOARDSRC) \ $(LSM303DLHCSRC) \ $(STREAMSSRC) \ - $(SHELLSRC) \ - usbcfg.c main.c + main.c # C++ sources that can be compiled in ARM or THUMB mode depending on the global # setting. diff --git a/testex/STM32/STM32F3xx/I2C-LSM303DLHC/halconf.h b/testex/STM32/STM32F3xx/I2C-LSM303DLHC/halconf.h index 08466411a..5547d5b5f 100644 --- a/testex/STM32/STM32F3xx/I2C-LSM303DLHC/halconf.h +++ b/testex/STM32/STM32F3xx/I2C-LSM303DLHC/halconf.h @@ -146,14 +146,14 @@ * @brief Enables the SERIAL subsystem. */ #if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__) -#define HAL_USE_SERIAL FALSE +#define HAL_USE_SERIAL TRUE #endif /** * @brief Enables the SERIAL over USB subsystem. */ #if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__) -#define HAL_USE_SERIAL_USB TRUE +#define HAL_USE_SERIAL_USB FALSE #endif /** @@ -174,7 +174,7 @@ * @brief Enables the USB subsystem. */ #if !defined(HAL_USE_USB) || defined(__DOXYGEN__) -#define HAL_USE_USB TRUE +#define HAL_USE_USB FALSE #endif /** diff --git a/testex/STM32/STM32F3xx/I2C-LSM303DLHC/main.c b/testex/STM32/STM32F3xx/I2C-LSM303DLHC/main.c index 19aa840b1..b60e5b6a4 100644 --- a/testex/STM32/STM32F3xx/I2C-LSM303DLHC/main.c +++ b/testex/STM32/STM32F3xx/I2C-LSM303DLHC/main.c @@ -17,13 +17,11 @@ #include "ch.h" #include "hal.h" -#include "usbcfg.h" -#include "string.h" -#include "shell.h" #include "chprintf.h" #include "lsm303dlhc.h" +#define cls(chp) chprintf(chp, "\033[2J\033[1;1H") /*===========================================================================*/ /* LSM303DLHC related. */ @@ -32,10 +30,11 @@ /* LSM303DLHC Driver: This object represent an LSM303DLHC instance */ static LSM303DLHCDriver LSM303DLHCD1; -static int32_t rawdata[LSM303DLHC_ACC_NUMBER_OF_AXES + - LSM303DLHC_COMP_NUMBER_OF_AXES]; -static float cookeddata[LSM303DLHC_ACC_NUMBER_OF_AXES + - LSM303DLHC_COMP_NUMBER_OF_AXES]; +static int32_t accraw[LSM303DLHC_ACC_NUMBER_OF_AXES]; +static int32_t compraw[LSM303DLHC_COMP_NUMBER_OF_AXES]; + +static float acccooked[LSM303DLHC_ACC_NUMBER_OF_AXES]; +static float compcooked[LSM303DLHC_COMP_NUMBER_OF_AXES]; static char axisID[LSM303DLHC_ACC_NUMBER_OF_AXES] = {'X', 'Y', 'Z'}; static uint32_t i; @@ -78,214 +77,11 @@ static const LSM303DLHCConfig lsm303dlhccfg = { &lsm303dlhccompcfg }; -/*===========================================================================*/ -/* Command line related. */ -/*===========================================================================*/ - -/* - * DP resistor control is not possible on the STM32F3-Discovery, using stubs - * for the connection macros. - */ -#define usb_lld_connect_bus(usbp) -#define usb_lld_disconnect_bus(usbp) - -/* Enable use of special ANSI escape sequences */ -#define CHPRINTF_USE_ANSI_CODE TRUE -#define SHELL_WA_SIZE THD_WORKING_AREA_SIZE(2048) - -static void cmd_read(BaseSequentialStream *chp, int argc, char *argv[]) { - (void)argv; - if (argc != 2) { - chprintf(chp, "Usage: read [acc|comp|both] [raw|cooked]\r\n"); - return; - } - - while (chnGetTimeout((BaseChannel *)chp, 150) == Q_TIMEOUT) { - if (!strcmp (argv[0], "acc")) { - if (!strcmp (argv[1], "raw")) { -#if CHPRINTF_USE_ANSI_CODE - chprintf(chp, "\033[2J\033[1;1H"); -#endif - accelerometerReadRaw(&LSM303DLHCD1, rawdata); - chprintf(chp, "LSM303DLHC Accelerometer raw data...\r\n"); - for(i = 0; i < LSM303DLHC_ACC_NUMBER_OF_AXES; i++) { - chprintf(chp, "%c-axis: %d\r\n", axisID[i], rawdata[i]); - } - } - else if (!strcmp (argv[1], "cooked")) { -#if CHPRINTF_USE_ANSI_CODE - chprintf(chp, "\033[2J\033[1;1H"); -#endif - accelerometerReadCooked(&LSM303DLHCD1, cookeddata); - chprintf(chp, "LSM303DLHC Accelerometer cooked data...\r\n"); - for(i = 0; i < LSM303DLHC_ACC_NUMBER_OF_AXES; i++) { - chprintf(chp, "%c-axis: %.4f mG\r\n", axisID[i], cookeddata[i]); - } - } - else { - chprintf(chp, "Usage: read [acc|comp|both] [raw|cooked]\r\n"); - return; - } - } - else if (!strcmp (argv[0], "comp")) { - if (!strcmp (argv[1], "raw")) { -#if CHPRINTF_USE_ANSI_CODE - chprintf(chp, "\033[2J\033[1;1H"); -#endif - compassReadRaw(&LSM303DLHCD1, rawdata); - chprintf(chp, "LSM303DLHC Compass raw data...\r\n"); - for(i = 0; i < LSM303DLHC_COMP_NUMBER_OF_AXES; i++) { - chprintf(chp, "%c-axis: %d\r\n", axisID[i], rawdata[i]); - } - } - else if (!strcmp (argv[1], "cooked")) { -#if CHPRINTF_USE_ANSI_CODE - chprintf(chp, "\033[2J\033[1;1H"); -#endif - compassReadCooked(&LSM303DLHCD1, cookeddata); - chprintf(chp, "LSM303DLHC Compass cooked data...\r\n"); - for(i = 0; i < LSM303DLHC_COMP_NUMBER_OF_AXES; i++) { - chprintf(chp, "%c-axis: %.4f Gauss\r\n", axisID[i], cookeddata[i]); - } - } - else { - chprintf(chp, "Usage: read [acc|comp|both] [raw|cooked]\r\n"); - return; - } - } - else if (!strcmp (argv[0], "both")) { - if (!strcmp (argv[1], "raw")) { -#if CHPRINTF_USE_ANSI_CODE - chprintf(chp, "\033[2J\033[1;1H"); -#endif - sensorReadRaw(&LSM303DLHCD1, rawdata); - chprintf(chp, "LSM303DLHC Accelerometer raw data...\r\n"); - for(i = 0; i < LSM303DLHC_ACC_NUMBER_OF_AXES; i++) { - chprintf(chp, "%c-axis: %d\r\n", axisID[i], rawdata[i]); - } - chprintf(chp, "LSM303DLHC Compass raw data...\r\n"); - for(i = 0; i < LSM303DLHC_COMP_NUMBER_OF_AXES; i++) { - chprintf(chp, "%c-axis: %d\r\n", axisID[i], - rawdata[i + LSM303DLHC_ACC_NUMBER_OF_AXES]); - } - } - else if (!strcmp (argv[1], "cooked")) { -#if CHPRINTF_USE_ANSI_CODE - chprintf(chp, "\033[2J\033[1;1H"); -#endif - sensorReadCooked(&LSM303DLHCD1, cookeddata); - chprintf(chp, "LSM303DLHC Accelerometer cooked data...\r\n"); - for(i = 0; i < LSM303DLHC_ACC_NUMBER_OF_AXES; i++) { - chprintf(chp, "%c-axis: %.4f mG\r\n", axisID[i], cookeddata[i]); - } - chprintf(chp, "LSM303DLHC Compass cooked data...\r\n"); - for(i = 0; i < LSM303DLHC_COMP_NUMBER_OF_AXES; i++) { - chprintf(chp, "%c-axis: %.4f Gauss\r\n", axisID[i], - cookeddata[i + LSM303DLHC_ACC_NUMBER_OF_AXES]); - } - } - else { - chprintf(chp, "Usage: read [acc|comp|both] [raw|cooked]\r\n"); - return; - } - } - else { - chprintf(chp, "Usage: read [acc|comp|both] [raw|cooked]\r\n"); - return; - } - } - chprintf(chp, "Stopped\r\n"); -} - -static void cmd_fullscale(BaseSequentialStream *chp, int argc, char *argv[]) { - (void)argv; - if (argc < 1) { - chprintf(chp, "Usage: fullscale [acc|comp] [value]\r\n"); - return; - } - if (!strcmp (argv[0], "acc")) { -#if CHPRINTF_USE_ANSI_CODE - chprintf(chp, "\033[2J\033[1;1H"); -#endif - if(!strcmp (argv[1], "2G")) { - accelerometerSetFullScale(&LSM303DLHCD1, LSM303DLHC_ACC_FS_2G); - chprintf(chp, "LSM303DLHC Accelerometer full scale set to 2G...\r\n"); - } - else if(!strcmp (argv[1], "4G")) { - accelerometerSetFullScale(&LSM303DLHCD1, LSM303DLHC_ACC_FS_4G); - chprintf(chp, "LSM303DLHC Accelerometer full scale set to 4G...\r\n"); - } - else if(!strcmp (argv[1], "8G")) { - accelerometerSetFullScale(&LSM303DLHCD1, LSM303DLHC_ACC_FS_8G); - chprintf(chp, "LSM303DLHC Accelerometer full scale set to 8G...\r\n"); - } - else if(!strcmp (argv[1], "16G")) { - accelerometerSetFullScale(&LSM303DLHCD1, LSM303DLHC_ACC_FS_16G); - chprintf(chp, "LSM303DLHC Accelerometer full scale set to 16G...\r\n"); - } - else { - chprintf(chp, "Usage: fullscale acc [2G|4G|8G|16G]\r\n"); - return; - } - } - else if (!strcmp (argv[0], "comp")) { -#if CHPRINTF_USE_ANSI_CODE - chprintf(chp, "\033[2J\033[1;1H"); -#endif - if(!strcmp (argv[1], "1.3")) { - compassSetFullScale(&LSM303DLHCD1, LSM303DLHC_COMP_FS_1P3GA); - chprintf(chp, "LSM303DLHC Compass full scale set to 1.3 Gauss...\r\n"); - } - else if(!strcmp (argv[1], "1.9")) { - compassSetFullScale(&LSM303DLHCD1, LSM303DLHC_COMP_FS_1P9GA); - chprintf(chp, "LSM303DLHC Compass full scale set to 1.9 Gauss...\r\n"); - } - else if(!strcmp (argv[1], "2.5")) { - compassSetFullScale(&LSM303DLHCD1, LSM303DLHC_COMP_FS_2P5GA); - chprintf(chp, "LSM303DLHC Compass full scale set to 2.5 Gauss...\r\n"); - } - else if(!strcmp (argv[1], "4.0")) { - compassSetFullScale(&LSM303DLHCD1, LSM303DLHC_COMP_FS_4P0GA); - chprintf(chp, "LSM303DLHC Compass full scale set to 4.0 Gauss...\r\n"); - } - else if(!strcmp (argv[1], "4.7")) { - compassSetFullScale(&LSM303DLHCD1, LSM303DLHC_COMP_FS_4P7GA); - chprintf(chp, "LSM303DLHC Compass full scale set to 4.7 Gauss...\r\n"); - } - else if(!strcmp (argv[1], "5.6")) { - compassSetFullScale(&LSM303DLHCD1, LSM303DLHC_COMP_FS_5P6GA); - chprintf(chp, "LSM303DLHC Compass full scale set to 5.6 Gauss...\r\n"); - } - else if(!strcmp (argv[1], "8.1")) { - compassSetFullScale(&LSM303DLHCD1, LSM303DLHC_COMP_FS_8P1GA); - chprintf(chp, "LSM303DLHC Compass full scale set to 8.1 Gauss...\r\n"); - } - else { - chprintf(chp, "Usage: fullscale comp [1.3|1.9|2.5|4.0|4.7|5.6|8.1]\r\n"); - return; - } - } - else { - chprintf(chp, "Usage: fullscale [acc|comp] [value]\r\n"); - return; - } -} - -static const ShellCommand commands[] = { - {"read", cmd_read}, - {"fullscale", cmd_fullscale}, - {NULL, NULL} -}; - -static const ShellConfig shell_cfg1 = { - (BaseSequentialStream *)&SDU1, - commands -}; - /*===========================================================================*/ /* Generic code. */ /*===========================================================================*/ +static BaseSequentialStream* chp = (BaseSequentialStream*)&SD1; /* * Red LED blinker thread, times are in milliseconds. */ @@ -295,13 +91,8 @@ static THD_FUNCTION(Thread1, arg) { (void)arg; chRegSetThreadName("blinker"); while (true) { - systime_t time; - - time = serusbcfg.usbp->state == USB_ACTIVE ? 250 : 500; - palClearLine(LINE_LED3_RED); - chThdSleepMilliseconds(time); - palSetLine(LINE_LED3_RED); - chThdSleepMilliseconds(time); + palToggleLine(LINE_LED3_RED); + chThdSleepMilliseconds(250); } } @@ -321,25 +112,9 @@ int main(void) { chSysInit(); /* - * Initializes a serial-over-USB CDC driver. - */ - sduObjectInit(&SDU1); - sduStart(&SDU1, &serusbcfg); - - /* - * Activates the USB driver and then the USB bus pull-up on D+. - * Note, a delay is inserted in order to not have to disconnect the cable - * after a reset. - */ - usbDisconnectBus(serusbcfg.usbp); - chThdSleepMilliseconds(1500); - usbStart(serusbcfg.usbp, &usbcfg); - usbConnectBus(serusbcfg.usbp); - - /* - * Shell manager initialization. + * Activates the serial driver 1 using the driver default configuration. */ - shellInit(); + sdStart(&SD1, NULL); /* * Creates the blinker thread. @@ -360,13 +135,31 @@ int main(void) { * Normal main() thread activity, spawning shells. */ while (true) { - if (SDU1.config->usbp->state == USB_ACTIVE) { - thread_t *shelltp = chThdCreateFromHeap(NULL, SHELL_WA_SIZE, - "shell", NORMALPRIO + 1, - shellThread, (void *)&shell_cfg1); - chThdWait(shelltp); /* Waiting termination. */ + accelerometerReadRaw(&(LSM303DLHCD1.accelerometer_if), accraw); + chprintf(chp, "LSM303DLHC Accelerometer raw data...\r\n"); + for(i = 0; i < LSM303DLHC_ACC_NUMBER_OF_AXES; i++) { + chprintf(chp, "%c-axis: %d\r\n", axisID[i], accraw[i]); + } + + compassReadRaw(&(LSM303DLHCD1.compass_if), compraw); + chprintf(chp, "LSM303DLHC Compass raw data...\r\n"); + for(i = 0; i < LSM303DLHC_COMP_NUMBER_OF_AXES; i++) { + chprintf(chp, "%c-axis: %d\r\n", axisID[i], compraw[i]); + } + + accelerometerReadCooked(&(LSM303DLHCD1.accelerometer_if), acccooked); + chprintf(chp, "LSM303DLHC Accelerometer cooked data...\r\n"); + for(i = 0; i < LSM303DLHC_ACC_NUMBER_OF_AXES; i++) { + chprintf(chp, "%c-axis: %.3f\r\n", axisID[i], acccooked[i]); + } + + compassReadCooked(&(LSM303DLHCD1.compass_if), compcooked); + chprintf(chp, "LSM303DLHC Compass cooked data...\r\n"); + for(i = 0; i < LSM303DLHC_COMP_NUMBER_OF_AXES; i++) { + chprintf(chp, "%c-axis: %.3f\r\n", axisID[i], compcooked[i]); } - chThdSleepMilliseconds(1000); + chThdSleepMilliseconds(100); + cls(chp); } lsm303dlhcStop(&LSM303DLHCD1); } diff --git a/testex/STM32/STM32F3xx/I2C-LSM303DLHC/mcuconf.h b/testex/STM32/STM32F3xx/I2C-LSM303DLHC/mcuconf.h index b5a9914d3..fa4397141 100644 --- a/testex/STM32/STM32F3xx/I2C-LSM303DLHC/mcuconf.h +++ b/testex/STM32/STM32F3xx/I2C-LSM303DLHC/mcuconf.h @@ -192,7 +192,7 @@ /* * SERIAL driver system settings. */ -#define STM32_SERIAL_USE_USART1 FALSE +#define STM32_SERIAL_USE_USART1 TRUE #define STM32_SERIAL_USE_USART2 FALSE #define STM32_SERIAL_USE_USART3 FALSE #define STM32_SERIAL_USE_UART4 FALSE @@ -240,7 +240,7 @@ /* * USB driver system settings. */ -#define STM32_USB_USE_USB1 TRUE +#define STM32_USB_USE_USB1 FALSE #define STM32_USB_LOW_POWER_ON_SUSPEND FALSE #define STM32_USB_USB1_HP_IRQ_PRIORITY 13 #define STM32_USB_USB1_LP_IRQ_PRIORITY 14 diff --git a/testex/STM32/STM32F3xx/I2C-LSM303DLHC/usbcfg.c b/testex/STM32/STM32F3xx/I2C-LSM303DLHC/usbcfg.c deleted file mode 100644 index b56c7d248..000000000 --- a/testex/STM32/STM32F3xx/I2C-LSM303DLHC/usbcfg.c +++ /dev/null @@ -1,342 +0,0 @@ -/* - ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "hal.h" - -/* Virtual serial port over USB.*/ -SerialUSBDriver SDU1; - -/* - * Endpoints to be used for USBD1. - */ -#define USBD1_DATA_REQUEST_EP 1 -#define USBD1_DATA_AVAILABLE_EP 1 -#define USBD1_INTERRUPT_REQUEST_EP 2 - -/* - * USB Device Descriptor. - */ -static const uint8_t vcom_device_descriptor_data[18] = { - USB_DESC_DEVICE (0x0110, /* bcdUSB (1.1). */ - 0x02, /* bDeviceClass (CDC). */ - 0x00, /* bDeviceSubClass. */ - 0x00, /* bDeviceProtocol. */ - 0x40, /* bMaxPacketSize. */ - 0x0483, /* idVendor (ST). */ - 0x5740, /* idProduct. */ - 0x0200, /* bcdDevice. */ - 1, /* iManufacturer. */ - 2, /* iProduct. */ - 3, /* iSerialNumber. */ - 1) /* bNumConfigurations. */ -}; - -/* - * Device Descriptor wrapper. - */ -static const USBDescriptor vcom_device_descriptor = { - sizeof vcom_device_descriptor_data, - vcom_device_descriptor_data -}; - -/* Configuration Descriptor tree for a CDC.*/ -static const uint8_t vcom_configuration_descriptor_data[67] = { - /* Configuration Descriptor.*/ - USB_DESC_CONFIGURATION(67, /* wTotalLength. */ - 0x02, /* bNumInterfaces. */ - 0x01, /* bConfigurationValue. */ - 0, /* iConfiguration. */ - 0xC0, /* bmAttributes (self powered). */ - 50), /* bMaxPower (100mA). */ - /* Interface Descriptor.*/ - USB_DESC_INTERFACE (0x00, /* bInterfaceNumber. */ - 0x00, /* bAlternateSetting. */ - 0x01, /* bNumEndpoints. */ - 0x02, /* bInterfaceClass (Communications - Interface Class, CDC section - 4.2). */ - 0x02, /* bInterfaceSubClass (Abstract - Control Model, CDC section 4.3). */ - 0x01, /* bInterfaceProtocol (AT commands, - CDC section 4.4). */ - 0), /* iInterface. */ - /* Header Functional Descriptor (CDC section 5.2.3).*/ - USB_DESC_BYTE (5), /* bLength. */ - USB_DESC_BYTE (0x24), /* bDescriptorType (CS_INTERFACE). */ - USB_DESC_BYTE (0x00), /* bDescriptorSubtype (Header - Functional Descriptor. */ - USB_DESC_BCD (0x0110), /* bcdCDC. */ - /* Call Management Functional Descriptor. */ - USB_DESC_BYTE (5), /* bFunctionLength. */ - USB_DESC_BYTE (0x24), /* bDescriptorType (CS_INTERFACE). */ - USB_DESC_BYTE (0x01), /* bDescriptorSubtype (Call Management - Functional Descriptor). */ - USB_DESC_BYTE (0x00), /* bmCapabilities (D0+D1). */ - USB_DESC_BYTE (0x01), /* bDataInterface. */ - /* ACM Functional Descriptor.*/ - USB_DESC_BYTE (4), /* bFunctionLength. */ - USB_DESC_BYTE (0x24), /* bDescriptorType (CS_INTERFACE). */ - USB_DESC_BYTE (0x02), /* bDescriptorSubtype (Abstract - Control Management Descriptor). */ - USB_DESC_BYTE (0x02), /* bmCapabilities. */ - /* Union Functional Descriptor.*/ - USB_DESC_BYTE (5), /* bFunctionLength. */ - USB_DESC_BYTE (0x24), /* bDescriptorType (CS_INTERFACE). */ - USB_DESC_BYTE (0x06), /* bDescriptorSubtype (Union - Functional Descriptor). */ - USB_DESC_BYTE (0x00), /* bMasterInterface (Communication - Class Interface). */ - USB_DESC_BYTE (0x01), /* bSlaveInterface0 (Data Class - Interface). */ - /* Endpoint 2 Descriptor.*/ - USB_DESC_ENDPOINT (USBD1_INTERRUPT_REQUEST_EP|0x80, - 0x03, /* bmAttributes (Interrupt). */ - 0x0008, /* wMaxPacketSize. */ - 0xFF), /* bInterval. */ - /* Interface Descriptor.*/ - USB_DESC_INTERFACE (0x01, /* bInterfaceNumber. */ - 0x00, /* bAlternateSetting. */ - 0x02, /* bNumEndpoints. */ - 0x0A, /* bInterfaceClass (Data Class - Interface, CDC section 4.5). */ - 0x00, /* bInterfaceSubClass (CDC section - 4.6). */ - 0x00, /* bInterfaceProtocol (CDC section - 4.7). */ - 0x00), /* iInterface. */ - /* Endpoint 3 Descriptor.*/ - USB_DESC_ENDPOINT (USBD1_DATA_AVAILABLE_EP, /* bEndpointAddress.*/ - 0x02, /* bmAttributes (Bulk). */ - 0x0040, /* wMaxPacketSize. */ - 0x00), /* bInterval. */ - /* Endpoint 1 Descriptor.*/ - USB_DESC_ENDPOINT (USBD1_DATA_REQUEST_EP|0x80, /* bEndpointAddress.*/ - 0x02, /* bmAttributes (Bulk). */ - 0x0040, /* wMaxPacketSize. */ - 0x00) /* bInterval. */ -}; - -/* - * Configuration Descriptor wrapper. - */ -static const USBDescriptor vcom_configuration_descriptor = { - sizeof vcom_configuration_descriptor_data, - vcom_configuration_descriptor_data -}; - -/* - * U.S. English language identifier. - */ -static const uint8_t vcom_string0[] = { - USB_DESC_BYTE(4), /* bLength. */ - USB_DESC_BYTE(USB_DESCRIPTOR_STRING), /* bDescriptorType. */ - USB_DESC_WORD(0x0409) /* wLANGID (U.S. English). */ -}; - -/* - * Vendor string. - */ -static const uint8_t vcom_string1[] = { - USB_DESC_BYTE(38), /* bLength. */ - USB_DESC_BYTE(USB_DESCRIPTOR_STRING), /* bDescriptorType. */ - 'S', 0, 'T', 0, 'M', 0, 'i', 0, 'c', 0, 'r', 0, 'o', 0, 'e', 0, - 'l', 0, 'e', 0, 'c', 0, 't', 0, 'r', 0, 'o', 0, 'n', 0, 'i', 0, - 'c', 0, 's', 0 -}; - -/* - * Device Description string. - */ -static const uint8_t vcom_string2[] = { - USB_DESC_BYTE(56), /* bLength. */ - USB_DESC_BYTE(USB_DESCRIPTOR_STRING), /* bDescriptorType. */ - 'C', 0, 'h', 0, 'i', 0, 'b', 0, 'i', 0, 'O', 0, 'S', 0, '/', 0, - 'R', 0, 'T', 0, ' ', 0, 'V', 0, 'i', 0, 'r', 0, 't', 0, 'u', 0, - 'a', 0, 'l', 0, ' ', 0, 'C', 0, 'O', 0, 'M', 0, ' ', 0, 'P', 0, - 'o', 0, 'r', 0, 't', 0 -}; - -/* - * Serial Number string. - */ -static const uint8_t vcom_string3[] = { - USB_DESC_BYTE(8), /* bLength. */ - USB_DESC_BYTE(USB_DESCRIPTOR_STRING), /* bDescriptorType. */ - '0' + CH_KERNEL_MAJOR, 0, - '0' + CH_KERNEL_MINOR, 0, - '0' + CH_KERNEL_PATCH, 0 -}; - -/* - * Strings wrappers array. - */ -static const USBDescriptor vcom_strings[] = { - {sizeof vcom_string0, vcom_string0}, - {sizeof vcom_string1, vcom_string1}, - {sizeof vcom_string2, vcom_string2}, - {sizeof vcom_string3, vcom_string3} -}; - -/* - * Handles the GET_DESCRIPTOR callback. All required descriptors must be - * handled here. - */ -static const USBDescriptor *get_descriptor(USBDriver *usbp, - uint8_t dtype, - uint8_t dindex, - uint16_t lang) { - - (void)usbp; - (void)lang; - switch (dtype) { - case USB_DESCRIPTOR_DEVICE: - return &vcom_device_descriptor; - case USB_DESCRIPTOR_CONFIGURATION: - return &vcom_configuration_descriptor; - case USB_DESCRIPTOR_STRING: - if (dindex < 4) - return &vcom_strings[dindex]; - } - return NULL; -} - -/** - * @brief IN EP1 state. - */ -static USBInEndpointState ep1instate; - -/** - * @brief OUT EP1 state. - */ -static USBOutEndpointState ep1outstate; - -/** - * @brief EP1 initialization structure (both IN and OUT). - */ -static const USBEndpointConfig ep1config = { - USB_EP_MODE_TYPE_BULK, - NULL, - sduDataTransmitted, - sduDataReceived, - 0x0040, - 0x0040, - &ep1instate, - &ep1outstate, - 2, - NULL -}; - -/** - * @brief IN EP2 state. - */ -static USBInEndpointState ep2instate; - -/** - * @brief EP2 initialization structure (IN only). - */ -static const USBEndpointConfig ep2config = { - USB_EP_MODE_TYPE_INTR, - NULL, - sduInterruptTransmitted, - NULL, - 0x0010, - 0x0000, - &ep2instate, - NULL, - 1, - NULL -}; - -/* - * Handles the USB driver global events. - */ -static void usb_event(USBDriver *usbp, usbevent_t event) { - extern SerialUSBDriver SDU1; - - switch (event) { - case USB_EVENT_ADDRESS: - return; - case USB_EVENT_CONFIGURED: - chSysLockFromISR(); - - /* Enables the endpoints specified into the configuration. - Note, this callback is invoked from an ISR so I-Class functions - must be used.*/ - usbInitEndpointI(usbp, USBD1_DATA_REQUEST_EP, &ep1config); - usbInitEndpointI(usbp, USBD1_INTERRUPT_REQUEST_EP, &ep2config); - - /* Resetting the state of the CDC subsystem.*/ - sduConfigureHookI(&SDU1); - - chSysUnlockFromISR(); - return; - case USB_EVENT_RESET: - /* Falls into.*/ - case USB_EVENT_UNCONFIGURED: - /* Falls into.*/ - case USB_EVENT_SUSPEND: - chSysLockFromISR(); - - /* Disconnection event on suspend.*/ - sduSuspendHookI(&SDU1); - - chSysUnlockFromISR(); - return; - case USB_EVENT_WAKEUP: - chSysLockFromISR(); - - /* Disconnection event on suspend.*/ - sduWakeupHookI(&SDU1); - - chSysUnlockFromISR(); - return; - case USB_EVENT_STALLED: - return; - } - return; -} - -/* - * Handles the USB driver global events. - */ -static void sof_handler(USBDriver *usbp) { - - (void)usbp; - - osalSysLockFromISR(); - sduSOFHookI(&SDU1); - osalSysUnlockFromISR(); -} - -/* - * USB driver configuration. - */ -const USBConfig usbcfg = { - usb_event, - get_descriptor, - sduRequestsHook, - sof_handler -}; - -/* - * Serial over USB driver configuration. - */ -const SerialUSBConfig serusbcfg = { - &USBD1, - USBD1_DATA_REQUEST_EP, - USBD1_DATA_AVAILABLE_EP, - USBD1_INTERRUPT_REQUEST_EP -}; diff --git a/testex/STM32/STM32F3xx/I2C-LSM303DLHC/usbcfg.h b/testex/STM32/STM32F3xx/I2C-LSM303DLHC/usbcfg.h deleted file mode 100644 index 886cd0222..000000000 --- a/testex/STM32/STM32F3xx/I2C-LSM303DLHC/usbcfg.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef USBCFG_H -#define USBCFG_H - -extern const USBConfig usbcfg; -extern SerialUSBConfig serusbcfg; -extern SerialUSBDriver SDU1; - -#endif /* USBCFG_H */ - -/** @} */ -- cgit v1.2.3