test public

Dependencies:   HttpServer_snapshot_mbed-os

Committer:
anhtran
Date:
Fri Oct 18 03:09:43 2019 +0000
Revision:
0:e9fd5575b10e
abc

Who changed what in which revision?

UserRevisionLine numberNew 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