Paparazzi UAS v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
usbStorage.c
Go to the documentation of this file.
1/*
2 * Copyright (C) 2014-2015 Gautier Hattenberger, Alexandre Bustico
3 *
4 * This file is part of paparazzi.
5 *
6 * paparazzi is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2, or (at your option)
9 * any later version.
10 *
11 * paparazzi is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with paparazzi; see the file COPYING. If not, write to
18 * the Free Software Foundation, 59 Temple Place - Suite 330,
19 * Boston, MA 02111-1307, USA.
20 */
21
22/*
23 * @file modules/loggers/sdlog_chibios/usbStorage.c
24 *
25 */
26
27#include <ch.h>
28#include <hal.h>
29#include "usb_msd.h"
30#include "usbStorage.h"
32#include <stdio.h>
33#include <string.h>
34#include "main_chibios.h"
35#include "mcu.h"
36#include "mcu_periph/sdio.h"
37#include "led.h"
38
39/* Default disable USB on boot enable */
40#ifndef SDLOG_USB_VBUS_BOOT
41#define SDLOG_USB_VBUS_BOOT false
42#endif
43
44static void thdUsbStorage(void *arg);
46/* USB mass storage driver */
47static bool isRunning = false;
50
51/* Turns on a LED when there is I/O activity on the USB port */
52static void usbActivity(bool active __attribute__((unused)))
53{
54#ifdef SDLOG_USB_LED
55 if (active) {
57 } else {
59 }
60#endif
61}
62
63/* USB mass storage configuration */
65 &USBD1,
69 "Pprz_sd",
70 "AutoPilot",
71 "0.2"
72};
73
74
82
83
91
98
99
100static void thdUsbStorage(void *arg)
101{
102 (void) arg;
103
104 chRegSetThreadName("UsbStorage:polling");
105 event_listener_t connected;
106
107#if SDLOG_USB_VBUS_BOOT
108 // Enable usb power with boot
110#endif
111
112 {
113#if HAL_USE_SERIAL_USB
114 // serial usb is used, so the usb vbus detection can't be used
116#else
118 // wait transition to HIGH with rebound management
119 do {
123
124#endif
125 }
126
127 isRunning = true;
129 chRegSetThreadName("UsbStorage:connected");
130
131 /* Stop the logs*/
132 // it's not a powerloss, wa have time to flush the ram buffer
134
135
136 /* connect sdcard sdc interface sdio */
137 if (sdio_connect(&SDLOG_SDIO) == false) {
139 }
140
141 /* initialize the USB mass storage driver */
143
144 /* wait for a real usb storage connexion before shutting down autopilot */
147
148 /* stop autopilot */
150
151 /* wait until usb-storage is unmount and usb cable is unplugged*/
154 }
155
157
159
161}
162
164{
165 return isRunning;
166}
167
168/*
169 * Enable USB storage only if USB is plugged.
170 */
174 } else {
176 }
177}
#define SDLOG_USB_VBUS_PIN
Definition board.h:538
#define SDLOG_USB_LED
Definition board.h:536
#define SDLOG_USB_VBUS_PORT
Definition board.h:537
#define LED_ON(i)
Definition led_hw.h:51
#define LED_OFF(i)
Definition led_hw.h:52
void mcu_reboot(enum reboot_state_t reboot_state)
Reboot the MCU.
Definition mcu_arch.c:206
@ MCU_REBOOT_FAST
Fast reboot (skip bootloader)
Definition mcu.h:45
arch independent LED (Light Emitting Diodes) API
void pprz_terminate_autopilot_threads(void)
Terminate all autopilot threads Wait until proper stop.
uint16_t foo
Definition main_demo5.c:58
Arch independent mcu ( Micro Controller Unit ) utilities.
arch independent SDIO API
bool sdio_connect(SDCDriver *sdc)
Connect a SD card on SDIO peripheral.
Definition sdio_arch.c:48
void sdlog_chibios_finish(const bool flush)
Driver configuration structure.
Definition usb_msd.h:123
static void thdUsbStorage(void *arg)
Definition usbStorage.c:100
void usbStorageStartPolling(void)
Definition usbStorage.c:76
float usb_storage_status
Definition usbStorage.c:48
static thread_t * usbStorageThreadPtr
Definition usbStorage.c:45
static USBMassStorageConfig msdConfig
Definition usbStorage.c:64
static bool isRunning
Definition usbStorage.c:47
static THD_WORKING_AREA(waThdUsbStorage, 4096)
void usbStorageWaitForDeconnexion(void)
Definition usbStorage.c:84
bool usbStorageIsItRunning(void)
Definition usbStorage.c:163
static void usbActivity(bool active)
Definition usbStorage.c:52
void usbStorage_enable_usb_storage(float e)
Definition usbStorage.c:171
static BSEMAPHORE_DECL(bs_start_msd, true)
void usbStorageStop(void)
Definition usbStorage.c:92
void init_msd_driver(void *dbgThreadPtr, USBMassStorageConfig *msdConfig)
Definition usb_msd.c:1126
void msd_register_evt_connected(event_listener_t *elp, eventmask_t mask)
register connected event source in local event mask
Definition usb_msd.c:1144
void deinit_msd_driver(void)
Definition usb_msd.c:1121
#define USB_MS_DATA_EP
Definition usb_msd.h:40