usb mass storage progress (#2345)

* usb mass storage

* remove old files

* this file is gone
This commit is contained in:
Matthew Kennedy 2021-02-13 12:06:05 -08:00 committed by GitHub
parent c4159297ca
commit 7562de4f10
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 31 additions and 289 deletions

View File

@ -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 */

View File

@ -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_ */

View File

@ -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