usb mass storage progress (#2345)
* usb mass storage * remove old files * this file is gone
This commit is contained in:
parent
c4159297ca
commit
7562de4f10
|
@ -1,233 +0,0 @@
|
|||
/*
|
||||
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 "hal.h"
|
||||
|
||||
#if HAL_USE_USB_MSD
|
||||
|
||||
#include "hal_usb_msd.h"
|
||||
#include "usb_msd_cfg.h"
|
||||
|
||||
/*
|
||||
* must be 64 for full speed and 512 for high speed
|
||||
*/
|
||||
#define USB_MSD_EP_SIZE 64U
|
||||
|
||||
/*
|
||||
* USB Device Descriptor.
|
||||
*/
|
||||
static const uint8_t msd_device_descriptor_data[18] = {
|
||||
USB_DESC_DEVICE (0x0200, /* bcdUSB (2.0). */
|
||||
0x02, /* bDeviceClass (CDC). */
|
||||
0x00, /* bDeviceSubClass. */
|
||||
0x00, /* bDeviceProtocol. */
|
||||
0x40, /* bMaxPacketSize. */
|
||||
0x0483, /* idVendor (ST). */
|
||||
0x5742, /* idProduct. */
|
||||
0x0200, /* bcdDevice. */
|
||||
1, /* iManufacturer. */
|
||||
2, /* iProduct. */
|
||||
3, /* iSerialNumber. */
|
||||
1) /* bNumConfigurations. */
|
||||
};
|
||||
|
||||
/*
|
||||
* Device Descriptor wrapper.
|
||||
*/
|
||||
static const USBDescriptor msd_device_descriptor = {
|
||||
sizeof msd_device_descriptor_data,
|
||||
msd_device_descriptor_data
|
||||
};
|
||||
|
||||
/* Configuration Descriptor tree for a CDC.*/
|
||||
static const uint8_t msd_configuration_descriptor_data[67] = {
|
||||
/* Configuration Descriptor.*/
|
||||
USB_DESC_CONFIGURATION(0x0020, /* wTotalLength. */
|
||||
0x01, /* bNumInterfaces. */
|
||||
0x01, /* bConfigurationValue. */
|
||||
0, /* iConfiguration. */
|
||||
0xC0, /* bmAttributes (self powered). */
|
||||
0x32), /* bMaxPower (100mA). */
|
||||
/* Interface Descriptor.*/
|
||||
USB_DESC_INTERFACE (0x00, /* bInterfaceNumber. */
|
||||
0x00, /* bAlternateSetting. */
|
||||
0x02, /* bNumEndpoints. */
|
||||
0x08, /* bInterfaceClass (Mass Storage) */
|
||||
0x06, /* bInterfaceSubClass (SCSI
|
||||
Transparent storage class) */
|
||||
0x50, /* bInterfaceProtocol (Bulk Only) */
|
||||
0), /* iInterface. (none) */
|
||||
/* Mass Storage Data In Endpoint Descriptor.*/
|
||||
USB_DESC_ENDPOINT (USB_MSD_DATA_EP | 0x80,
|
||||
0x02, /* bmAttributes (Bulk). */
|
||||
USB_MSD_EP_SIZE, /* wMaxPacketSize. */
|
||||
0x00), /* bInterval. 1ms */
|
||||
/* Mass Storage Data Out Endpoint Descriptor.*/
|
||||
USB_DESC_ENDPOINT (USB_MSD_DATA_EP,
|
||||
0x02, /* bmAttributes (Bulk). */
|
||||
USB_MSD_EP_SIZE, /* wMaxPacketSize. */
|
||||
0x00) /* bInterval. 1ms */
|
||||
};
|
||||
|
||||
/*
|
||||
* Configuration Descriptor wrapper.
|
||||
*/
|
||||
static const USBDescriptor msd_configuration_descriptor = {
|
||||
sizeof msd_configuration_descriptor_data,
|
||||
msd_configuration_descriptor_data
|
||||
};
|
||||
|
||||
/*
|
||||
* U.S. English language identifier.
|
||||
*/
|
||||
static const uint8_t msd_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 msd_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 msd_string2[] = {
|
||||
USB_DESC_BYTE(62), /* 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, 'M', 0, 'a', 0, 's', 0, 's', 0, ' ', 0,
|
||||
'S', 0, 't', 0, 'o', 0, 'r', 0, 'a', 0, 'g', 0, 'e', 0, ' ', 0,
|
||||
'D', 0, 'e', 0, 'v', 0, 'i', 0, 'c', 0, 'e', 0
|
||||
};
|
||||
|
||||
static const uint8_t msd_string3[] = {
|
||||
USB_DESC_BYTE(26), /* bLength. */
|
||||
USB_DESC_BYTE(USB_DESCRIPTOR_STRING), /* bDescriptorType. */
|
||||
'A', 0, 'E', 0, 'C', 0, 'C', 0, 'E', 0, 'C', 0, 'C', 0, 'C', 0, 'C', 0,
|
||||
'0' + CH_KERNEL_MAJOR, 0,
|
||||
'0' + CH_KERNEL_MINOR, 0,
|
||||
'0' + CH_KERNEL_PATCH, 0
|
||||
};
|
||||
|
||||
/*
|
||||
* Strings wrappers array.
|
||||
*/
|
||||
static const USBDescriptor msd_strings[] = {
|
||||
{sizeof msd_string0, msd_string0},
|
||||
{sizeof msd_string1, msd_string1},
|
||||
{sizeof msd_string2, msd_string2},
|
||||
{sizeof msd_string3, msd_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 &msd_device_descriptor;
|
||||
case USB_DESCRIPTOR_CONFIGURATION:
|
||||
return &msd_configuration_descriptor;
|
||||
case USB_DESCRIPTOR_STRING:
|
||||
if (dindex < 4)
|
||||
return &msd_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,
|
||||
NULL,
|
||||
NULL,
|
||||
USB_MSD_EP_SIZE,
|
||||
USB_MSD_EP_SIZE,
|
||||
&ep1instate,
|
||||
&ep1outstate,
|
||||
4,
|
||||
NULL
|
||||
};
|
||||
|
||||
/*
|
||||
* Handles the USB driver global events.
|
||||
*/
|
||||
static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||
|
||||
switch (event) {
|
||||
case USB_EVENT_RESET:
|
||||
return;
|
||||
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);
|
||||
chSysUnlockFromISR();
|
||||
return;
|
||||
case USB_EVENT_UNCONFIGURED:
|
||||
return;
|
||||
case USB_EVENT_SUSPEND:
|
||||
return;
|
||||
case USB_EVENT_WAKEUP:
|
||||
return;
|
||||
case USB_EVENT_STALLED:
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* USB driver configuration.
|
||||
*/
|
||||
const USBConfig msdusbcfg = {
|
||||
usb_event,
|
||||
get_descriptor,
|
||||
msd_request_hook,
|
||||
NULL
|
||||
};
|
||||
|
||||
#endif /* HAL_USE_USB_MSD */
|
|
@ -1,30 +0,0 @@
|
|||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef USB_MSD_CFG_H_
|
||||
#define USB_MSD_CFG_H_
|
||||
|
||||
|
||||
#define USBD1_DATA_REQUEST_EP 1
|
||||
#define USBD1_DATA_AVAILABLE_EP 1
|
||||
#define USBD1_INTERRUPT_REQUEST_EP 2
|
||||
|
||||
|
||||
#endif /* USB_MSD_CFG_H_ */
|
|
@ -24,8 +24,8 @@
|
|||
#include "hardware.h"
|
||||
#include "engine_configuration.h"
|
||||
#include "status_loop.h"
|
||||
#include "usb_msd_cfg.h"
|
||||
#include "buffered_writer.h"
|
||||
#include "null_device.h"
|
||||
|
||||
#include "rtc_helper.h"
|
||||
|
||||
|
@ -337,8 +337,21 @@ static void mmcUnMount(void) {
|
|||
}
|
||||
|
||||
#if HAL_USE_USB_MSD
|
||||
#define RAMDISK_BLOCK_SIZE 512U
|
||||
static uint8_t blkbuf[RAMDISK_BLOCK_SIZE];
|
||||
static uint8_t blkbuf[MMCSD_BLOCK_SIZE];
|
||||
|
||||
static const scsi_inquiry_response_t scsi_inquiry_response = {
|
||||
0x00, /* direct access block device */
|
||||
0x80, /* removable */
|
||||
0x04, /* SPC-2 */
|
||||
0x02, /* response data format */
|
||||
0x20, /* response has 0x20 + 4 bytes */
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
"rusEFI",
|
||||
"SD Card",
|
||||
{'v',CH_KERNEL_MAJOR+'0','.',CH_KERNEL_MINOR+'0'}
|
||||
};
|
||||
#endif /* HAL_USE_USB_MSD */
|
||||
|
||||
/*
|
||||
|
@ -358,38 +371,30 @@ static void MMCmount(void) {
|
|||
mmcStart(&MMCD1, &mmccfg); // Configures and activates the MMC peripheral.
|
||||
}
|
||||
|
||||
#if HAL_USE_USB_MSD
|
||||
msdObjectInit(&USBMSD1);
|
||||
#endif
|
||||
|
||||
// Performs the initialization procedure on the inserted card.
|
||||
LOCK_SD_SPI;
|
||||
LOCK_SD_SPI;
|
||||
sdStatus = SD_STATE_CONNECTING;
|
||||
if (mmcConnect(&MMCD1) != HAL_SUCCESS) {
|
||||
|
||||
#if HAL_USE_USB_MSD
|
||||
// mount a null device to USB
|
||||
msdMountNullDevice(&USBMSD1, &USBD2, blkbuf, &scsi_inquiry_response);
|
||||
#endif
|
||||
|
||||
sdStatus = SD_STATE_NOT_CONNECTED;
|
||||
warning(CUSTOM_OBD_MMC_ERROR, "Can't connect or mount MMC/SD");
|
||||
UNLOCK_SD_SPI;
|
||||
return;
|
||||
}
|
||||
|
||||
#if HAL_USE_USB_MSD
|
||||
msdObjectInit(&USBMSD1);
|
||||
|
||||
BaseBlockDevice *bbdp = (BaseBlockDevice*)&MMCD1;
|
||||
msdStart(&USBMSD1, usb_driver, bbdp, blkbuf, NULL);
|
||||
|
||||
//const usb_msd_driver_state_t msd_driver_state = msdInit(ms_usb_driver, bbdp, &UMSD1, USB_MS_DATA_EP, USB_MSD_INTERFACE_NUMBER);
|
||||
//UMSD1.chp = NULL;
|
||||
|
||||
/*Disconnect the USB Bus*/
|
||||
usbDisconnectBus(usb_driver);
|
||||
chThdSleepMilliseconds(200);
|
||||
|
||||
///*Start the useful functions*/
|
||||
//msdStart(&UMSD1);
|
||||
usbStart(usb_driver, &msdusbcfg);
|
||||
|
||||
/*Connect the USB Bus*/
|
||||
usbConnectBus(usb_driver);
|
||||
#endif
|
||||
|
||||
|
||||
#if HAL_USE_USB_MSD
|
||||
BaseBlockDevice *bbdp = (BaseBlockDevice*)&MMCD1;
|
||||
msdStart(&USBMSD1, usb_driver, bbdp, blkbuf, &scsi_inquiry_response, NULL);
|
||||
#endif
|
||||
|
||||
UNLOCK_SD_SPI;
|
||||
#if HAL_USE_USB_MSD
|
||||
|
|
Loading…
Reference in New Issue