test public
Dependencies: HttpServer_snapshot_mbed-os
mbed-gr-libs/SdUsbConnect.h@0:e9fd5575b10e, 2019-10-18 (annotated)
- Committer:
- anhtran
- Date:
- Fri Oct 18 03:09:43 2019 +0000
- Revision:
- 0:e9fd5575b10e
abc
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
anhtran | 0:e9fd5575b10e | 1 | /* Copyright (c) 2017 dkato |
anhtran | 0:e9fd5575b10e | 2 | * SPDX-License-Identifier: Apache-2.0 |
anhtran | 0:e9fd5575b10e | 3 | * |
anhtran | 0:e9fd5575b10e | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
anhtran | 0:e9fd5575b10e | 5 | * you may not use this file except in compliance with the License. |
anhtran | 0:e9fd5575b10e | 6 | * You may obtain a copy of the License at |
anhtran | 0:e9fd5575b10e | 7 | * |
anhtran | 0:e9fd5575b10e | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
anhtran | 0:e9fd5575b10e | 9 | * |
anhtran | 0:e9fd5575b10e | 10 | * Unless required by applicable law or agreed to in writing, software |
anhtran | 0:e9fd5575b10e | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
anhtran | 0:e9fd5575b10e | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
anhtran | 0:e9fd5575b10e | 13 | * See the License for the specific language governing permissions and |
anhtran | 0:e9fd5575b10e | 14 | * limitations under the License. |
anhtran | 0:e9fd5575b10e | 15 | */ |
anhtran | 0:e9fd5575b10e | 16 | /**************************************************************************//** |
anhtran | 0:e9fd5575b10e | 17 | * @file SdUsbConnect.h |
anhtran | 0:e9fd5575b10e | 18 | * @brief |
anhtran | 0:e9fd5575b10e | 19 | ******************************************************************************/ |
anhtran | 0:e9fd5575b10e | 20 | #ifndef SD_USB_CONNECT_H |
anhtran | 0:e9fd5575b10e | 21 | #define SD_USB_CONNECT_H |
anhtran | 0:e9fd5575b10e | 22 | |
anhtran | 0:e9fd5575b10e | 23 | #include "mbed.h" |
anhtran | 0:e9fd5575b10e | 24 | #include "FATFileSystem.h" |
anhtran | 0:e9fd5575b10e | 25 | #include "SDBlockDevice_GRBoard.h" |
anhtran | 0:e9fd5575b10e | 26 | #include "USBHostConf.h" |
anhtran | 0:e9fd5575b10e | 27 | #if USBHOST_MSD |
anhtran | 0:e9fd5575b10e | 28 | #include "USBHostMSD.h" |
anhtran | 0:e9fd5575b10e | 29 | #endif |
anhtran | 0:e9fd5575b10e | 30 | |
anhtran | 0:e9fd5575b10e | 31 | /** A class to communicate a StorageConnect |
anhtran | 0:e9fd5575b10e | 32 | * |
anhtran | 0:e9fd5575b10e | 33 | */ |
anhtran | 0:e9fd5575b10e | 34 | class SdUsbConnect { |
anhtran | 0:e9fd5575b10e | 35 | public: |
anhtran | 0:e9fd5575b10e | 36 | |
anhtran | 0:e9fd5575b10e | 37 | typedef enum { |
anhtran | 0:e9fd5575b10e | 38 | STORAGE_NON = 0, /*!< NON */ |
anhtran | 0:e9fd5575b10e | 39 | STORAGE_SD, /*!< SD */ |
anhtran | 0:e9fd5575b10e | 40 | STORAGE_USB /*!< USB */ |
anhtran | 0:e9fd5575b10e | 41 | } storage_type_t; |
anhtran | 0:e9fd5575b10e | 42 | |
anhtran | 0:e9fd5575b10e | 43 | SdUsbConnect(const char *name) : fs(name), storage_type(STORAGE_NON) {} |
anhtran | 0:e9fd5575b10e | 44 | |
anhtran | 0:e9fd5575b10e | 45 | bool connected(storage_type_t type = STORAGE_NON) { |
anhtran | 0:e9fd5575b10e | 46 | if (type == STORAGE_SD) { |
anhtran | 0:e9fd5575b10e | 47 | return sd.connected(); |
anhtran | 0:e9fd5575b10e | 48 | } |
anhtran | 0:e9fd5575b10e | 49 | #if USBHOST_MSD |
anhtran | 0:e9fd5575b10e | 50 | if (type == STORAGE_USB) { |
anhtran | 0:e9fd5575b10e | 51 | return usb.connected(); |
anhtran | 0:e9fd5575b10e | 52 | } |
anhtran | 0:e9fd5575b10e | 53 | #endif |
anhtran | 0:e9fd5575b10e | 54 | if (storage_type == STORAGE_SD) { |
anhtran | 0:e9fd5575b10e | 55 | return sd.connected(); |
anhtran | 0:e9fd5575b10e | 56 | } |
anhtran | 0:e9fd5575b10e | 57 | #if USBHOST_MSD |
anhtran | 0:e9fd5575b10e | 58 | if (storage_type == STORAGE_USB) { |
anhtran | 0:e9fd5575b10e | 59 | return usb.connected(); |
anhtran | 0:e9fd5575b10e | 60 | } |
anhtran | 0:e9fd5575b10e | 61 | #endif |
anhtran | 0:e9fd5575b10e | 62 | |
anhtran | 0:e9fd5575b10e | 63 | return false; |
anhtran | 0:e9fd5575b10e | 64 | } |
anhtran | 0:e9fd5575b10e | 65 | |
anhtran | 0:e9fd5575b10e | 66 | storage_type_t connect(storage_type_t type = STORAGE_NON) { |
anhtran | 0:e9fd5575b10e | 67 | if ((storage_type == STORAGE_SD) && (!sd.connected())) { |
anhtran | 0:e9fd5575b10e | 68 | fs.unmount(); |
anhtran | 0:e9fd5575b10e | 69 | storage_type = STORAGE_NON; |
anhtran | 0:e9fd5575b10e | 70 | } |
anhtran | 0:e9fd5575b10e | 71 | #if USBHOST_MSD |
anhtran | 0:e9fd5575b10e | 72 | if ((storage_type == STORAGE_USB) && (!usb.connected())) { |
anhtran | 0:e9fd5575b10e | 73 | fs.unmount(); |
anhtran | 0:e9fd5575b10e | 74 | storage_type = STORAGE_NON; |
anhtran | 0:e9fd5575b10e | 75 | } |
anhtran | 0:e9fd5575b10e | 76 | #endif |
anhtran | 0:e9fd5575b10e | 77 | if ((type == STORAGE_SD) && (storage_type != STORAGE_SD)) { |
anhtran | 0:e9fd5575b10e | 78 | if (sd.connect()) { |
anhtran | 0:e9fd5575b10e | 79 | if (storage_type != STORAGE_NON) { |
anhtran | 0:e9fd5575b10e | 80 | fs.unmount(); |
anhtran | 0:e9fd5575b10e | 81 | } |
anhtran | 0:e9fd5575b10e | 82 | fs.mount(&sd); |
anhtran | 0:e9fd5575b10e | 83 | storage_type = STORAGE_SD; |
anhtran | 0:e9fd5575b10e | 84 | } |
anhtran | 0:e9fd5575b10e | 85 | #if USBHOST_MSD |
anhtran | 0:e9fd5575b10e | 86 | } else if ((type == STORAGE_USB) && (storage_type != STORAGE_USB)) { |
anhtran | 0:e9fd5575b10e | 87 | if (usb.connect()) { |
anhtran | 0:e9fd5575b10e | 88 | if (storage_type != STORAGE_NON) { |
anhtran | 0:e9fd5575b10e | 89 | fs.unmount(); |
anhtran | 0:e9fd5575b10e | 90 | } |
anhtran | 0:e9fd5575b10e | 91 | fs.mount(&usb); |
anhtran | 0:e9fd5575b10e | 92 | storage_type = STORAGE_USB; |
anhtran | 0:e9fd5575b10e | 93 | } |
anhtran | 0:e9fd5575b10e | 94 | #endif |
anhtran | 0:e9fd5575b10e | 95 | } else if (storage_type == STORAGE_NON) { |
anhtran | 0:e9fd5575b10e | 96 | if (sd.connect()) { |
anhtran | 0:e9fd5575b10e | 97 | fs.mount(&sd); |
anhtran | 0:e9fd5575b10e | 98 | storage_type = STORAGE_SD; |
anhtran | 0:e9fd5575b10e | 99 | #if USBHOST_MSD |
anhtran | 0:e9fd5575b10e | 100 | } else if (usb.connect()) { |
anhtran | 0:e9fd5575b10e | 101 | fs.mount(&usb); |
anhtran | 0:e9fd5575b10e | 102 | storage_type = STORAGE_USB; |
anhtran | 0:e9fd5575b10e | 103 | #endif |
anhtran | 0:e9fd5575b10e | 104 | } else { |
anhtran | 0:e9fd5575b10e | 105 | // do nothing |
anhtran | 0:e9fd5575b10e | 106 | } |
anhtran | 0:e9fd5575b10e | 107 | } else { |
anhtran | 0:e9fd5575b10e | 108 | // do nothing |
anhtran | 0:e9fd5575b10e | 109 | } |
anhtran | 0:e9fd5575b10e | 110 | |
anhtran | 0:e9fd5575b10e | 111 | return storage_type; |
anhtran | 0:e9fd5575b10e | 112 | } |
anhtran | 0:e9fd5575b10e | 113 | |
anhtran | 0:e9fd5575b10e | 114 | storage_type_t wait_connect(storage_type_t type = STORAGE_NON) { |
anhtran | 0:e9fd5575b10e | 115 | while (connect(type) == STORAGE_NON) { |
anhtran | 0:e9fd5575b10e | 116 | ThisThread::sleep_for(100); |
anhtran | 0:e9fd5575b10e | 117 | } |
anhtran | 0:e9fd5575b10e | 118 | return storage_type; |
anhtran | 0:e9fd5575b10e | 119 | } |
anhtran | 0:e9fd5575b10e | 120 | |
anhtran | 0:e9fd5575b10e | 121 | bool format(storage_type_t type = STORAGE_NON, int allocation_unit = 0) { |
anhtran | 0:e9fd5575b10e | 122 | if ((storage_type == STORAGE_SD) && (sd.connected())) { |
anhtran | 0:e9fd5575b10e | 123 | fs.unmount(); |
anhtran | 0:e9fd5575b10e | 124 | fs.format(&sd, allocation_unit); |
anhtran | 0:e9fd5575b10e | 125 | fs.mount(&sd); |
anhtran | 0:e9fd5575b10e | 126 | return true; |
anhtran | 0:e9fd5575b10e | 127 | } |
anhtran | 0:e9fd5575b10e | 128 | #if USBHOST_MSD |
anhtran | 0:e9fd5575b10e | 129 | if ((storage_type == STORAGE_USB) && (usb.connected())) { |
anhtran | 0:e9fd5575b10e | 130 | fs.unmount(); |
anhtran | 0:e9fd5575b10e | 131 | fs.format(&usb, allocation_unit); |
anhtran | 0:e9fd5575b10e | 132 | fs.mount(&usb); |
anhtran | 0:e9fd5575b10e | 133 | return true; |
anhtran | 0:e9fd5575b10e | 134 | } |
anhtran | 0:e9fd5575b10e | 135 | #endif |
anhtran | 0:e9fd5575b10e | 136 | return false; |
anhtran | 0:e9fd5575b10e | 137 | } |
anhtran | 0:e9fd5575b10e | 138 | |
anhtran | 0:e9fd5575b10e | 139 | FATFileSystem * get_fs() { |
anhtran | 0:e9fd5575b10e | 140 | return &fs; |
anhtran | 0:e9fd5575b10e | 141 | } |
anhtran | 0:e9fd5575b10e | 142 | |
anhtran | 0:e9fd5575b10e | 143 | private: |
anhtran | 0:e9fd5575b10e | 144 | FATFileSystem fs; |
anhtran | 0:e9fd5575b10e | 145 | SDBlockDevice_GRBoard sd; |
anhtran | 0:e9fd5575b10e | 146 | #if USBHOST_MSD |
anhtran | 0:e9fd5575b10e | 147 | USBHostMSD usb; |
anhtran | 0:e9fd5575b10e | 148 | #endif |
anhtran | 0:e9fd5575b10e | 149 | storage_type_t storage_type; |
anhtran | 0:e9fd5575b10e | 150 | }; |
anhtran | 0:e9fd5575b10e | 151 | |
anhtran | 0:e9fd5575b10e | 152 | #endif |