aboutsummaryrefslogtreecommitdiffstats
path: root/testex/STM32/STM32F3xx
diff options
context:
space:
mode:
authorRocco Marco Guglielmi <roccomarco.guglielmi@gmail.com>2018-02-27 20:41:45 +0000
committerRocco Marco Guglielmi <roccomarco.guglielmi@gmail.com>2018-02-27 20:41:45 +0000
commite9f249bc21d5f5711464a53d0183f97a2e601180 (patch)
tree2829a06f90cf4cb827638074634e05989ca3709c /testex/STM32/STM32F3xx
parent8ac0bdb4c892eb7d228059778712dc816f566327 (diff)
downloadChibiOS-e9f249bc21d5f5711464a53d0183f97a2e601180.tar.gz
ChibiOS-e9f249bc21d5f5711464a53d0183f97a2e601180.tar.bz2
ChibiOS-e9f249bc21d5f5711464a53d0183f97a2e601180.zip
Improved LSM303DLHC driver. Modified base demo
git-svn-id: https://svn.code.sf.net/p/chibios/svn2/trunk@11589 110e8d01-0319-4d1e-a829-52ad28d1bb01
Diffstat (limited to 'testex/STM32/STM32F3xx')
-rw-r--r--testex/STM32/STM32F3xx/I2C-LSM303DLHC/.project2
-rw-r--r--testex/STM32/STM32F3xx/I2C-LSM303DLHC/Makefile8
-rw-r--r--testex/STM32/STM32F3xx/I2C-LSM303DLHC/halconf.h6
-rw-r--r--testex/STM32/STM32F3xx/I2C-LSM303DLHC/main.c277
-rw-r--r--testex/STM32/STM32F3xx/I2C-LSM303DLHC/mcuconf.h4
-rw-r--r--testex/STM32/STM32F3xx/I2C-LSM303DLHC/usbcfg.c342
-rw-r--r--testex/STM32/STM32F3xx/I2C-LSM303DLHC/usbcfg.h26
7 files changed, 44 insertions, 621 deletions
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 @@
<link>
<name>board</name>
<type>2</type>
- <locationURI>CHIBIOS/os/hal/boards/ST_STM32F3_DISCOVERY</locationURI>
+ <locationURI>CHIBIOS/os/hal/boards/ST_STM32F3_DISCOVERY_REVC</locationURI>
</link>
<link>
<name>os</name>
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;
@@ -79,213 +78,10 @@ static const LSM303DLHCConfig lsm303dlhccfg = {
};
/*===========================================================================*/
-/* 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 */
-
-/** @} */