From f063c4d19339144df89d6bc060ee2017b0572c5c Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Sat, 20 Jan 2018 11:44:14 +0000 Subject: Mass update of the Apache 2.0 license statement. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@11361 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/main.c | 696 +++++++++++------------ 1 file changed, 348 insertions(+), 348 deletions(-) (limited to 'demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/main.c') diff --git a/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/main.c b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/main.c index e9d4051d0..37aaa065f 100644 --- a/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/main.c +++ b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/main.c @@ -1,348 +1,348 @@ -/* - ChibiOS - Copyright (C) 2006..2016 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 -#include - -#include "ch.h" -#include "hal.h" -#include "rt_test_root.h" - -#include "chprintf.h" -#include "shell.h" - -#include "lwipthread.h" -#include "web/web.h" - -#include "ff.h" - -#include "portab.h" -#include "usbcfg.h" - -/*===========================================================================*/ -/* Card insertion monitor. */ -/*===========================================================================*/ - -#define POLLING_INTERVAL 10 -#define POLLING_DELAY 10 - -/** - * @brief Card monitor timer. - */ -static virtual_timer_t tmr; - -/** - * @brief Debounce counter. - */ -static unsigned cnt; - -/** - * @brief Card event sources. - */ -static event_source_t inserted_event, removed_event; - -/** - * @brief Insertion monitor timer callback function. - * - * @param[in] p pointer to the @p BaseBlockDevice object - * - * @notapi - */ -static void tmrfunc(void *p) { - BaseBlockDevice *bbdp = p; - - chSysLockFromISR(); - if (cnt > 0) { - if (blkIsInserted(bbdp)) { - if (--cnt == 0) { - chEvtBroadcastI(&inserted_event); - } - } - else - cnt = POLLING_INTERVAL; - } - else { - if (!blkIsInserted(bbdp)) { - cnt = POLLING_INTERVAL; - chEvtBroadcastI(&removed_event); - } - } - chVTSetI(&tmr, TIME_MS2I(POLLING_DELAY), tmrfunc, bbdp); - chSysUnlockFromISR(); -} - -/** - * @brief Polling monitor start. - * - * @param[in] p pointer to an object implementing @p BaseBlockDevice - * - * @notapi - */ -static void tmr_init(void *p) { - - chEvtObjectInit(&inserted_event); - chEvtObjectInit(&removed_event); - chSysLock(); - cnt = POLLING_INTERVAL; - chVTSetI(&tmr, TIME_MS2I(POLLING_DELAY), tmrfunc, p); - chSysUnlock(); -} - -/*===========================================================================*/ -/* FatFs related. */ -/*===========================================================================*/ - -/** - * @brief FS object. - */ -static FATFS SDC_FS; - -/* FS mounted and ready.*/ -static bool fs_ready = FALSE; - -/* Generic large buffer.*/ -static uint8_t fbuff[1024]; - -static FRESULT scan_files(BaseSequentialStream *chp, char *path) { - static FILINFO fno; - FRESULT res; - DIR dir; - size_t i; - char *fn; - - res = f_opendir(&dir, path); - if (res == FR_OK) { - i = strlen(path); - while (((res = f_readdir(&dir, &fno)) == FR_OK) && fno.fname[0]) { - if (FF_FS_RPATH && fno.fname[0] == '.') - continue; - fn = fno.fname; - if (fno.fattrib & AM_DIR) { - *(path + i) = '/'; - strcpy(path + i + 1, fn); - res = scan_files(chp, path); - *(path + i) = '\0'; - if (res != FR_OK) - break; - } - else { - chprintf(chp, "%s/%s\r\n", path, fn); - } - } - } - return res; -} - -/*===========================================================================*/ -/* Command line related. */ -/*===========================================================================*/ - -#define SHELL_WA_SIZE THD_WORKING_AREA_SIZE(2048) - -static void cmd_tree(BaseSequentialStream *chp, int argc, char *argv[]) { - FRESULT err; - uint32_t fre_clust; - FATFS *fsp; - - (void)argv; - if (argc > 0) { - chprintf(chp, "Usage: tree\r\n"); - return; - } - if (!fs_ready) { - chprintf(chp, "File System not mounted\r\n"); - return; - } - err = f_getfree("/", &fre_clust, &fsp); - if (err != FR_OK) { - chprintf(chp, "FS: f_getfree() failed\r\n"); - return; - } - chprintf(chp, - "FS: %lu free clusters with %lu sectors (%lu bytes) per cluster\r\n", - fre_clust, (uint32_t)fsp->csize, (uint32_t)fsp->csize * 512); - fbuff[0] = 0; - scan_files(chp, (char *)fbuff); -} - -static const ShellCommand commands[] = { - {"tree", cmd_tree}, - {NULL, NULL} -}; - -static const ShellConfig shell_cfg1 = { - (BaseSequentialStream *)&PORTAB_SDU1, - commands -}; - -/*===========================================================================*/ -/* Main and generic code. */ -/*===========================================================================*/ - -static thread_t *shelltp = NULL; - -/* - * Card insertion event. - */ -static void InsertHandler(eventid_t id) { - FRESULT err; - - (void)id; - /* - * On insertion SDC initialization and FS mount. - */ - if (sdcConnect(&SDCD1)) - return; - - err = f_mount(&SDC_FS, "/", 1); - if (err != FR_OK) { - sdcDisconnect(&SDCD1); - return; - } - fs_ready = TRUE; -} - -/* - * Card removal event. - */ -static void RemoveHandler(eventid_t id) { - - (void)id; - sdcDisconnect(&SDCD1); - fs_ready = FALSE; -} - -/* - * Shell exit event. - */ -static void ShellHandler(eventid_t id) { - - (void)id; - if (chThdTerminatedX(shelltp)) { - chThdRelease(shelltp); - shelltp = NULL; - } -} - -/* - * Green LED blinker thread, times are in milliseconds. - */ -static THD_WORKING_AREA(waThread1, 128); -static THD_FUNCTION(Thread1, arg) { - - (void)arg; - chRegSetThreadName("blinker"); - while (true) { - palToggleLine(PORTAB_BLINK_LED1); - chThdSleepMilliseconds(fs_ready ? 250 : 500); - } -} - -/* - * Application entry point. - */ -int main(void) { - static const evhandler_t evhndl[] = { - InsertHandler, - RemoveHandler, - ShellHandler - }; - event_listener_t el0, el1, el2; - - /* - * System initializations. - * - HAL initialization, this also initializes the configured device drivers - * and performs the board-specific initializations. - * - Kernel initialization, the main() function becomes a thread and the - * RTOS is active. - * - lwIP subsystem initialization using the default configuration. - */ - halInit(); - chSysInit(); - - /* - * Initialize RNG - */ - rccEnableAHB2(RCC_AHB2ENR_RNGEN, 0); - RNG->CR |= RNG_CR_IE; - RNG->CR |= RNG_CR_RNGEN; - - /* lwip */ - lwipInit(NULL); - - /* - * Target-dependent setup code. - */ - portab_setup(); - - /* - * Initializes a serial-over-USB CDC driver. - */ - sduObjectInit(&PORTAB_SDU1); - sduStart(&PORTAB_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. - */ - shellInit(); - - /* - * Activates the SDC driver 1 using default configuration. - */ - sdcStart(&SDCD1, NULL); - - /* - * Activates the card insertion monitor. - */ - tmr_init(&SDCD1); - - /* - * Creates the blinker thread. - */ - chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL); - - /* - * Creates the HTTPS thread (it changes priority internally). - */ - chThdCreateStatic(wa_https_server, sizeof(wa_https_server), NORMALPRIO + 1, - https_server, NULL); - - /* - * Normal main() thread activity, handling SD card events and shell - * start/exit. - */ - chEvtRegister(&inserted_event, &el0, 0); - chEvtRegister(&removed_event, &el1, 1); - chEvtRegister(&shell_terminated, &el2, 2); - while (true) { - if (!shelltp && (PORTAB_SDU1.config->usbp->state == USB_ACTIVE)) { - shelltp = chThdCreateFromHeap(NULL, SHELL_WA_SIZE, - "shell", NORMALPRIO + 1, - shellThread, (void *)&shell_cfg1); - } - chEvtDispatch(evhndl, chEvtWaitOneTimeout(ALL_EVENTS, TIME_MS2I(500))); - } -} +/* + 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 +#include + +#include "ch.h" +#include "hal.h" +#include "rt_test_root.h" + +#include "chprintf.h" +#include "shell.h" + +#include "lwipthread.h" +#include "web/web.h" + +#include "ff.h" + +#include "portab.h" +#include "usbcfg.h" + +/*===========================================================================*/ +/* Card insertion monitor. */ +/*===========================================================================*/ + +#define POLLING_INTERVAL 10 +#define POLLING_DELAY 10 + +/** + * @brief Card monitor timer. + */ +static virtual_timer_t tmr; + +/** + * @brief Debounce counter. + */ +static unsigned cnt; + +/** + * @brief Card event sources. + */ +static event_source_t inserted_event, removed_event; + +/** + * @brief Insertion monitor timer callback function. + * + * @param[in] p pointer to the @p BaseBlockDevice object + * + * @notapi + */ +static void tmrfunc(void *p) { + BaseBlockDevice *bbdp = p; + + chSysLockFromISR(); + if (cnt > 0) { + if (blkIsInserted(bbdp)) { + if (--cnt == 0) { + chEvtBroadcastI(&inserted_event); + } + } + else + cnt = POLLING_INTERVAL; + } + else { + if (!blkIsInserted(bbdp)) { + cnt = POLLING_INTERVAL; + chEvtBroadcastI(&removed_event); + } + } + chVTSetI(&tmr, TIME_MS2I(POLLING_DELAY), tmrfunc, bbdp); + chSysUnlockFromISR(); +} + +/** + * @brief Polling monitor start. + * + * @param[in] p pointer to an object implementing @p BaseBlockDevice + * + * @notapi + */ +static void tmr_init(void *p) { + + chEvtObjectInit(&inserted_event); + chEvtObjectInit(&removed_event); + chSysLock(); + cnt = POLLING_INTERVAL; + chVTSetI(&tmr, TIME_MS2I(POLLING_DELAY), tmrfunc, p); + chSysUnlock(); +} + +/*===========================================================================*/ +/* FatFs related. */ +/*===========================================================================*/ + +/** + * @brief FS object. + */ +static FATFS SDC_FS; + +/* FS mounted and ready.*/ +static bool fs_ready = FALSE; + +/* Generic large buffer.*/ +static uint8_t fbuff[1024]; + +static FRESULT scan_files(BaseSequentialStream *chp, char *path) { + static FILINFO fno; + FRESULT res; + DIR dir; + size_t i; + char *fn; + + res = f_opendir(&dir, path); + if (res == FR_OK) { + i = strlen(path); + while (((res = f_readdir(&dir, &fno)) == FR_OK) && fno.fname[0]) { + if (FF_FS_RPATH && fno.fname[0] == '.') + continue; + fn = fno.fname; + if (fno.fattrib & AM_DIR) { + *(path + i) = '/'; + strcpy(path + i + 1, fn); + res = scan_files(chp, path); + *(path + i) = '\0'; + if (res != FR_OK) + break; + } + else { + chprintf(chp, "%s/%s\r\n", path, fn); + } + } + } + return res; +} + +/*===========================================================================*/ +/* Command line related. */ +/*===========================================================================*/ + +#define SHELL_WA_SIZE THD_WORKING_AREA_SIZE(2048) + +static void cmd_tree(BaseSequentialStream *chp, int argc, char *argv[]) { + FRESULT err; + uint32_t fre_clust; + FATFS *fsp; + + (void)argv; + if (argc > 0) { + chprintf(chp, "Usage: tree\r\n"); + return; + } + if (!fs_ready) { + chprintf(chp, "File System not mounted\r\n"); + return; + } + err = f_getfree("/", &fre_clust, &fsp); + if (err != FR_OK) { + chprintf(chp, "FS: f_getfree() failed\r\n"); + return; + } + chprintf(chp, + "FS: %lu free clusters with %lu sectors (%lu bytes) per cluster\r\n", + fre_clust, (uint32_t)fsp->csize, (uint32_t)fsp->csize * 512); + fbuff[0] = 0; + scan_files(chp, (char *)fbuff); +} + +static const ShellCommand commands[] = { + {"tree", cmd_tree}, + {NULL, NULL} +}; + +static const ShellConfig shell_cfg1 = { + (BaseSequentialStream *)&PORTAB_SDU1, + commands +}; + +/*===========================================================================*/ +/* Main and generic code. */ +/*===========================================================================*/ + +static thread_t *shelltp = NULL; + +/* + * Card insertion event. + */ +static void InsertHandler(eventid_t id) { + FRESULT err; + + (void)id; + /* + * On insertion SDC initialization and FS mount. + */ + if (sdcConnect(&SDCD1)) + return; + + err = f_mount(&SDC_FS, "/", 1); + if (err != FR_OK) { + sdcDisconnect(&SDCD1); + return; + } + fs_ready = TRUE; +} + +/* + * Card removal event. + */ +static void RemoveHandler(eventid_t id) { + + (void)id; + sdcDisconnect(&SDCD1); + fs_ready = FALSE; +} + +/* + * Shell exit event. + */ +static void ShellHandler(eventid_t id) { + + (void)id; + if (chThdTerminatedX(shelltp)) { + chThdRelease(shelltp); + shelltp = NULL; + } +} + +/* + * Green LED blinker thread, times are in milliseconds. + */ +static THD_WORKING_AREA(waThread1, 128); +static THD_FUNCTION(Thread1, arg) { + + (void)arg; + chRegSetThreadName("blinker"); + while (true) { + palToggleLine(PORTAB_BLINK_LED1); + chThdSleepMilliseconds(fs_ready ? 250 : 500); + } +} + +/* + * Application entry point. + */ +int main(void) { + static const evhandler_t evhndl[] = { + InsertHandler, + RemoveHandler, + ShellHandler + }; + event_listener_t el0, el1, el2; + + /* + * System initializations. + * - HAL initialization, this also initializes the configured device drivers + * and performs the board-specific initializations. + * - Kernel initialization, the main() function becomes a thread and the + * RTOS is active. + * - lwIP subsystem initialization using the default configuration. + */ + halInit(); + chSysInit(); + + /* + * Initialize RNG + */ + rccEnableAHB2(RCC_AHB2ENR_RNGEN, 0); + RNG->CR |= RNG_CR_IE; + RNG->CR |= RNG_CR_RNGEN; + + /* lwip */ + lwipInit(NULL); + + /* + * Target-dependent setup code. + */ + portab_setup(); + + /* + * Initializes a serial-over-USB CDC driver. + */ + sduObjectInit(&PORTAB_SDU1); + sduStart(&PORTAB_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. + */ + shellInit(); + + /* + * Activates the SDC driver 1 using default configuration. + */ + sdcStart(&SDCD1, NULL); + + /* + * Activates the card insertion monitor. + */ + tmr_init(&SDCD1); + + /* + * Creates the blinker thread. + */ + chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL); + + /* + * Creates the HTTPS thread (it changes priority internally). + */ + chThdCreateStatic(wa_https_server, sizeof(wa_https_server), NORMALPRIO + 1, + https_server, NULL); + + /* + * Normal main() thread activity, handling SD card events and shell + * start/exit. + */ + chEvtRegister(&inserted_event, &el0, 0); + chEvtRegister(&removed_event, &el1, 1); + chEvtRegister(&shell_terminated, &el2, 2); + while (true) { + if (!shelltp && (PORTAB_SDU1.config->usbp->state == USB_ACTIVE)) { + shelltp = chThdCreateFromHeap(NULL, SHELL_WA_SIZE, + "shell", NORMALPRIO + 1, + shellThread, (void *)&shell_cfg1); + } + chEvtDispatch(evhndl, chEvtWaitOneTimeout(ALL_EVENTS, TIME_MS2I(500))); + } +} -- cgit v1.2.3