only for STM32F769NI-DISCOVERY, porting from mbed OS5 unsupport functions

Committer:
kenjiArai
Date:
Wed Aug 07 05:33:53 2019 +0000
Revision:
0:dae1ac0c0a7b
only for STM32F769NI-DISCOVERY, porting from mbed OS5 unsupport functions

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:dae1ac0c0a7b 1 /* mbed USBHost Library
kenjiArai 0:dae1ac0c0a7b 2 * Copyright (c) 2006-2013 ARM Limited
kenjiArai 0:dae1ac0c0a7b 3 *
kenjiArai 0:dae1ac0c0a7b 4 * Licensed under the Apache License, Version 2.0 (the "License");
kenjiArai 0:dae1ac0c0a7b 5 * you may not use this file except in compliance with the License.
kenjiArai 0:dae1ac0c0a7b 6 * You may obtain a copy of the License at
kenjiArai 0:dae1ac0c0a7b 7 *
kenjiArai 0:dae1ac0c0a7b 8 * http://www.apache.org/licenses/LICENSE-2.0
kenjiArai 0:dae1ac0c0a7b 9 *
kenjiArai 0:dae1ac0c0a7b 10 * Unless required by applicable law or agreed to in writing, software
kenjiArai 0:dae1ac0c0a7b 11 * distributed under the License is distributed on an "AS IS" BASIS,
kenjiArai 0:dae1ac0c0a7b 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kenjiArai 0:dae1ac0c0a7b 13 * See the License for the specific language governing permissions and
kenjiArai 0:dae1ac0c0a7b 14 * limitations under the License.
kenjiArai 0:dae1ac0c0a7b 15 */
kenjiArai 0:dae1ac0c0a7b 16
kenjiArai 0:dae1ac0c0a7b 17 #ifndef USBHOSTMSD_H
kenjiArai 0:dae1ac0c0a7b 18 #define USBHOSTMSD_H
kenjiArai 0:dae1ac0c0a7b 19
kenjiArai 0:dae1ac0c0a7b 20 #include "USBHostConf.h"
kenjiArai 0:dae1ac0c0a7b 21
kenjiArai 0:dae1ac0c0a7b 22 #if USBHOST_MSD
kenjiArai 0:dae1ac0c0a7b 23
kenjiArai 0:dae1ac0c0a7b 24 #include "USBHost.h"
kenjiArai 0:dae1ac0c0a7b 25 #include "FATFileSystem.h"
kenjiArai 0:dae1ac0c0a7b 26 #include "BlockDevice.h"
kenjiArai 0:dae1ac0c0a7b 27
kenjiArai 0:dae1ac0c0a7b 28 /**
kenjiArai 0:dae1ac0c0a7b 29 * A class to communicate a USB flash disk
kenjiArai 0:dae1ac0c0a7b 30 */
kenjiArai 0:dae1ac0c0a7b 31 class USBHostMSD : public IUSBEnumerator, public BlockDevice
kenjiArai 0:dae1ac0c0a7b 32 {
kenjiArai 0:dae1ac0c0a7b 33 public:
kenjiArai 0:dae1ac0c0a7b 34 /**
kenjiArai 0:dae1ac0c0a7b 35 * Constructor
kenjiArai 0:dae1ac0c0a7b 36 *
kenjiArai 0:dae1ac0c0a7b 37 * @param rootdir mount name
kenjiArai 0:dae1ac0c0a7b 38 */
kenjiArai 0:dae1ac0c0a7b 39 USBHostMSD();
kenjiArai 0:dae1ac0c0a7b 40
kenjiArai 0:dae1ac0c0a7b 41 /**
kenjiArai 0:dae1ac0c0a7b 42 * Check if a MSD device is connected
kenjiArai 0:dae1ac0c0a7b 43 *
kenjiArai 0:dae1ac0c0a7b 44 * @return true if a MSD device is connected
kenjiArai 0:dae1ac0c0a7b 45 */
kenjiArai 0:dae1ac0c0a7b 46 bool connected();
kenjiArai 0:dae1ac0c0a7b 47
kenjiArai 0:dae1ac0c0a7b 48 /**
kenjiArai 0:dae1ac0c0a7b 49 * Try to connect to a MSD device
kenjiArai 0:dae1ac0c0a7b 50 *
kenjiArai 0:dae1ac0c0a7b 51 * @return true if connection was successful
kenjiArai 0:dae1ac0c0a7b 52 */
kenjiArai 0:dae1ac0c0a7b 53 bool connect();
kenjiArai 0:dae1ac0c0a7b 54 virtual int init();
kenjiArai 0:dae1ac0c0a7b 55 virtual int deinit()
kenjiArai 0:dae1ac0c0a7b 56 {
kenjiArai 0:dae1ac0c0a7b 57 return BD_ERROR_OK;
kenjiArai 0:dae1ac0c0a7b 58 };
kenjiArai 0:dae1ac0c0a7b 59 virtual int read(void *buffer, bd_addr_t addr, bd_size_t size);
kenjiArai 0:dae1ac0c0a7b 60 virtual int program(const void *buffer, bd_addr_t addr, bd_size_t size);
kenjiArai 0:dae1ac0c0a7b 61 virtual int erase(bd_addr_t addr, bd_size_t size);
kenjiArai 0:dae1ac0c0a7b 62 virtual bd_size_t get_read_size() const;
kenjiArai 0:dae1ac0c0a7b 63 virtual bd_size_t get_program_size() const;
kenjiArai 0:dae1ac0c0a7b 64 virtual bd_size_t get_erase_size() const;
kenjiArai 0:dae1ac0c0a7b 65 virtual bd_size_t size() const;
kenjiArai 0:dae1ac0c0a7b 66 virtual const char *get_type() const;
kenjiArai 0:dae1ac0c0a7b 67
kenjiArai 0:dae1ac0c0a7b 68
kenjiArai 0:dae1ac0c0a7b 69
kenjiArai 0:dae1ac0c0a7b 70 protected:
kenjiArai 0:dae1ac0c0a7b 71 //From IUSBEnumerator
kenjiArai 0:dae1ac0c0a7b 72 virtual void setVidPid(uint16_t vid, uint16_t pid);
kenjiArai 0:dae1ac0c0a7b 73 virtual bool parseInterface(uint8_t intf_nb, uint8_t intf_class, uint8_t intf_subclass, uint8_t intf_protocol); //Must return true if the interface should be parsed
kenjiArai 0:dae1ac0c0a7b 74 virtual bool useEndpoint(uint8_t intf_nb, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir); //Must return true if the endpoint will be used
kenjiArai 0:dae1ac0c0a7b 75
kenjiArai 0:dae1ac0c0a7b 76
kenjiArai 0:dae1ac0c0a7b 77 private:
kenjiArai 0:dae1ac0c0a7b 78 USBHost * host;
kenjiArai 0:dae1ac0c0a7b 79 USBDeviceConnected * dev;
kenjiArai 0:dae1ac0c0a7b 80 bool dev_connected;
kenjiArai 0:dae1ac0c0a7b 81 USBEndpoint * bulk_in;
kenjiArai 0:dae1ac0c0a7b 82 USBEndpoint * bulk_out;
kenjiArai 0:dae1ac0c0a7b 83 uint8_t nb_ep;
kenjiArai 0:dae1ac0c0a7b 84
kenjiArai 0:dae1ac0c0a7b 85 // Bulk-only CBW
kenjiArai 0:dae1ac0c0a7b 86 typedef struct {
kenjiArai 0:dae1ac0c0a7b 87 uint32_t Signature;
kenjiArai 0:dae1ac0c0a7b 88 uint32_t Tag;
kenjiArai 0:dae1ac0c0a7b 89 uint32_t DataLength;
kenjiArai 0:dae1ac0c0a7b 90 uint8_t Flags;
kenjiArai 0:dae1ac0c0a7b 91 uint8_t LUN;
kenjiArai 0:dae1ac0c0a7b 92 uint8_t CBLength;
kenjiArai 0:dae1ac0c0a7b 93 uint8_t CB[16];
kenjiArai 0:dae1ac0c0a7b 94 } PACKED CBW;
kenjiArai 0:dae1ac0c0a7b 95
kenjiArai 0:dae1ac0c0a7b 96 // Bulk-only CSW
kenjiArai 0:dae1ac0c0a7b 97 typedef struct {
kenjiArai 0:dae1ac0c0a7b 98 uint32_t Signature;
kenjiArai 0:dae1ac0c0a7b 99 uint32_t Tag;
kenjiArai 0:dae1ac0c0a7b 100 uint32_t DataResidue;
kenjiArai 0:dae1ac0c0a7b 101 uint8_t Status;
kenjiArai 0:dae1ac0c0a7b 102 } PACKED CSW;
kenjiArai 0:dae1ac0c0a7b 103
kenjiArai 0:dae1ac0c0a7b 104 CBW cbw;
kenjiArai 0:dae1ac0c0a7b 105 CSW csw;
kenjiArai 0:dae1ac0c0a7b 106
kenjiArai 0:dae1ac0c0a7b 107 int SCSITransfer(uint8_t * cmd, uint8_t cmd_len, int flags, uint8_t * data, uint32_t transfer_len);
kenjiArai 0:dae1ac0c0a7b 108 int testUnitReady();
kenjiArai 0:dae1ac0c0a7b 109 int readCapacity();
kenjiArai 0:dae1ac0c0a7b 110 int inquiry(uint8_t lun, uint8_t page_code);
kenjiArai 0:dae1ac0c0a7b 111 int SCSIRequestSense();
kenjiArai 0:dae1ac0c0a7b 112 int dataTransfer(uint8_t * buf, uint32_t block, uint8_t nbBlock, int direction);
kenjiArai 0:dae1ac0c0a7b 113 int checkResult(uint8_t res, USBEndpoint * ep);
kenjiArai 0:dae1ac0c0a7b 114 int getMaxLun();
kenjiArai 0:dae1ac0c0a7b 115
kenjiArai 0:dae1ac0c0a7b 116 int blockSize;
kenjiArai 0:dae1ac0c0a7b 117 uint32_t blockCount;
kenjiArai 0:dae1ac0c0a7b 118
kenjiArai 0:dae1ac0c0a7b 119 int msd_intf;
kenjiArai 0:dae1ac0c0a7b 120 bool msd_device_found;
kenjiArai 0:dae1ac0c0a7b 121 bool disk_init;
kenjiArai 0:dae1ac0c0a7b 122
kenjiArai 0:dae1ac0c0a7b 123 void init_usb();
kenjiArai 0:dae1ac0c0a7b 124
kenjiArai 0:dae1ac0c0a7b 125 };
kenjiArai 0:dae1ac0c0a7b 126
kenjiArai 0:dae1ac0c0a7b 127 #endif
kenjiArai 0:dae1ac0c0a7b 128
kenjiArai 0:dae1ac0c0a7b 129 #endif