Renesas / Mbed OS SDG_Mouse_Sample

Dependencies:   Sound_Generator USBHost_custom

Fork of SDG_Mouse_Sample by GR-PEACH_producer_meeting

Information

Japanese version is available in lower part of this page.
このページの後半に日本語版が用意されています.

What is this?

This program is a demonstration that sounds the sound by mouse operation by using USBHost(Mouse) and Sound Generator.

Settings

Close JP3 of GR-PEACH.
/media/uploads/RyoheiHagimoto/sdg-mouse.jpg

Operation

operationeffect
Right clickSounds
Left clickReset to base tone (C)
Moves the mouse to the rightLower the sound
Moves the mouse to the leftHigher the sound
Center cursorAdjust the sensitivity.
Reset the reference value in the click.

Others

The default setting of serial communication (baud rate etc.) in mbed is shown the following link.
Please refer to the link and change the settings of your PC terminal software.
The default value of baud rate in mbed is 9600, and this application uses baud rate 9600.
https://developer.mbed.org/teams/Renesas/wiki/GR-PEACH-Getting-Started#install-the-usb-serial-communication


概要

このプログラムは、USBHost(Mouse) + Sound Generatorで、マウス操作による擬似笛デモです。

設定

GR-PEACHのJP3をショートする必要があります。
/media/uploads/RyoheiHagimoto/sdg-mouse.jpg

操作方法

操作内容
右クリック音出力開始
左クリック基準音(ド)にリセット
マウス右移動高音になります
マウス左移動低音になります
センターカーソル音高低の変化量調整(クリックで基準値にリセット)

Others

mbedのシリアル通信(ボーレート等)のデフォルト設定は以下のリンクに示しています。
リンクを参考に、お使いのPCターミナルソフトの設定を変更して下さい。
mbedでのボーレートのデフォルト値は9600で、このサンプルではボーレート9600を使います。
https://developer.mbed.org/teams/Renesas/wiki/GR-PEACH-Getting-Started#install-the-usb-serial-communication

Committer:
mbed_official
Date:
Tue Jun 03 11:30:38 2014 +0100
Revision:
24:868cbfe611a7
Parent:
13:b58a2204422f
Child:
26:607951c26872
Synchronized with git revision bcacbb9fbf3432829227430830cca4315b57c1b9

Full URL: https://github.com/mbedmicro/mbed/commit/bcacbb9fbf3432829227430830cca4315b57c1b9/

Who changed what in which revision?

UserRevisionLine numberNew contents of line
samux 8:93da8ea2708b 1 /* mbed USBHost Library
samux 8:93da8ea2708b 2 * Copyright (c) 2006-2013 ARM Limited
samux 8:93da8ea2708b 3 *
samux 8:93da8ea2708b 4 * Licensed under the Apache License, Version 2.0 (the "License");
samux 8:93da8ea2708b 5 * you may not use this file except in compliance with the License.
samux 8:93da8ea2708b 6 * You may obtain a copy of the License at
samux 8:93da8ea2708b 7 *
samux 8:93da8ea2708b 8 * http://www.apache.org/licenses/LICENSE-2.0
samux 8:93da8ea2708b 9 *
samux 8:93da8ea2708b 10 * Unless required by applicable law or agreed to in writing, software
samux 8:93da8ea2708b 11 * distributed under the License is distributed on an "AS IS" BASIS,
samux 8:93da8ea2708b 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
samux 8:93da8ea2708b 13 * See the License for the specific language governing permissions and
samux 8:93da8ea2708b 14 * limitations under the License.
samux 8:93da8ea2708b 15 */
mbed_official 0:a554658735bf 16
mbed_official 0:a554658735bf 17 #include "USBHostMSD.h"
mbed_official 0:a554658735bf 18
mbed_official 0:a554658735bf 19 #if USBHOST_MSD
mbed_official 0:a554658735bf 20
mbed_official 0:a554658735bf 21 #include "dbg.h"
mbed_official 0:a554658735bf 22
mbed_official 0:a554658735bf 23 #define CBW_SIGNATURE 0x43425355
mbed_official 0:a554658735bf 24 #define CSW_SIGNATURE 0x53425355
mbed_official 0:a554658735bf 25
mbed_official 0:a554658735bf 26 #define DEVICE_TO_HOST 0x80
mbed_official 0:a554658735bf 27 #define HOST_TO_DEVICE 0x00
mbed_official 0:a554658735bf 28
samux 4:b320d68e98e7 29 #define GET_MAX_LUN (0xFE)
samux 4:b320d68e98e7 30 #define BO_MASS_STORAGE_RESET (0xFF)
mbed_official 0:a554658735bf 31
mbed_official 0:a554658735bf 32 USBHostMSD::USBHostMSD(const char * rootdir) : FATFileSystem(rootdir)
mbed_official 0:a554658735bf 33 {
mbed_official 0:a554658735bf 34 host = USBHost::getHostInst();
mbed_official 0:a554658735bf 35 init();
mbed_official 0:a554658735bf 36 }
mbed_official 0:a554658735bf 37
mbed_official 0:a554658735bf 38 void USBHostMSD::init() {
mbed_official 0:a554658735bf 39 dev_connected = false;
mbed_official 0:a554658735bf 40 dev = NULL;
mbed_official 0:a554658735bf 41 bulk_in = NULL;
mbed_official 0:a554658735bf 42 bulk_out = NULL;
mbed_official 0:a554658735bf 43 dev_connected = false;
mbed_official 0:a554658735bf 44 blockSize = 0;
mbed_official 0:a554658735bf 45 blockCount = 0;
mbed_official 0:a554658735bf 46 msd_intf = -1;
mbed_official 0:a554658735bf 47 msd_device_found = false;
mbed_official 0:a554658735bf 48 disk_init = false;
mbed_official 0:a554658735bf 49 dev_connected = false;
samux 4:b320d68e98e7 50 nb_ep = 0;
mbed_official 0:a554658735bf 51 }
mbed_official 0:a554658735bf 52
mbed_official 0:a554658735bf 53
mbed_official 0:a554658735bf 54 bool USBHostMSD::connected()
mbed_official 0:a554658735bf 55 {
mbed_official 0:a554658735bf 56 return dev_connected;
mbed_official 0:a554658735bf 57 }
mbed_official 0:a554658735bf 58
mbed_official 0:a554658735bf 59 bool USBHostMSD::connect()
mbed_official 0:a554658735bf 60 {
mbed_official 0:a554658735bf 61
mbed_official 0:a554658735bf 62 if (dev_connected) {
mbed_official 0:a554658735bf 63 return true;
mbed_official 0:a554658735bf 64 }
mbed_official 0:a554658735bf 65
samux 5:e48791a1ef18 66 for (uint8_t i = 0; i < MAX_DEVICE_CONNECTED; i++) {
mbed_official 0:a554658735bf 67 if ((dev = host->getDevice(i)) != NULL) {
mbed_official 24:868cbfe611a7 68
samux 4:b320d68e98e7 69 USB_DBG("Trying to connect MSD device\r\n");
mbed_official 24:868cbfe611a7 70
mbed_official 0:a554658735bf 71 if(host->enumerate(dev, this))
mbed_official 0:a554658735bf 72 break;
mbed_official 0:a554658735bf 73
mbed_official 0:a554658735bf 74 if (msd_device_found) {
mbed_official 0:a554658735bf 75 bulk_in = dev->getEndpoint(msd_intf, BULK_ENDPOINT, IN);
mbed_official 0:a554658735bf 76 bulk_out = dev->getEndpoint(msd_intf, BULK_ENDPOINT, OUT);
mbed_official 24:868cbfe611a7 77
mbed_official 0:a554658735bf 78 if (!bulk_in || !bulk_out)
samux 4:b320d68e98e7 79 continue;
mbed_official 24:868cbfe611a7 80
samux 4:b320d68e98e7 81 USB_INFO("New MSD device: VID:%04x PID:%04x [dev: %p - intf: %d]", dev->getVid(), dev->getPid(), dev, msd_intf);
samux 4:b320d68e98e7 82 dev->setName("MSD", msd_intf);
mbed_official 0:a554658735bf 83 host->registerDriver(dev, msd_intf, this, &USBHostMSD::init);
mbed_official 0:a554658735bf 84
mbed_official 0:a554658735bf 85 dev_connected = true;
mbed_official 0:a554658735bf 86 return true;
mbed_official 0:a554658735bf 87 }
mbed_official 0:a554658735bf 88 } //if()
mbed_official 0:a554658735bf 89 } //for()
samux 4:b320d68e98e7 90 init();
mbed_official 0:a554658735bf 91 return false;
mbed_official 0:a554658735bf 92 }
mbed_official 0:a554658735bf 93
mbed_official 0:a554658735bf 94 /*virtual*/ void USBHostMSD::setVidPid(uint16_t vid, uint16_t pid)
mbed_official 0:a554658735bf 95 {
mbed_official 0:a554658735bf 96 // we don't check VID/PID for MSD driver
mbed_official 0:a554658735bf 97 }
mbed_official 0:a554658735bf 98
mbed_official 0:a554658735bf 99 /*virtual*/ bool USBHostMSD::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
mbed_official 0:a554658735bf 100 {
mbed_official 0:a554658735bf 101 if ((msd_intf == -1) &&
mbed_official 0:a554658735bf 102 (intf_class == MSD_CLASS) &&
mbed_official 0:a554658735bf 103 (intf_subclass == 0x06) &&
mbed_official 0:a554658735bf 104 (intf_protocol == 0x50)) {
mbed_official 0:a554658735bf 105 msd_intf = intf_nb;
mbed_official 0:a554658735bf 106 return true;
mbed_official 0:a554658735bf 107 }
mbed_official 0:a554658735bf 108 return false;
mbed_official 0:a554658735bf 109 }
mbed_official 0:a554658735bf 110
mbed_official 0:a554658735bf 111 /*virtual*/ bool USBHostMSD::useEndpoint(uint8_t intf_nb, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir) //Must return true if the endpoint will be used
mbed_official 0:a554658735bf 112 {
mbed_official 0:a554658735bf 113 if (intf_nb == msd_intf) {
mbed_official 0:a554658735bf 114 if (type == BULK_ENDPOINT) {
samux 4:b320d68e98e7 115 nb_ep++;
samux 4:b320d68e98e7 116 if (nb_ep == 2)
samux 4:b320d68e98e7 117 msd_device_found = true;
mbed_official 0:a554658735bf 118 return true;
mbed_official 0:a554658735bf 119 }
mbed_official 0:a554658735bf 120 }
mbed_official 0:a554658735bf 121 return false;
mbed_official 0:a554658735bf 122 }
mbed_official 0:a554658735bf 123
mbed_official 0:a554658735bf 124
mbed_official 0:a554658735bf 125 int USBHostMSD::testUnitReady() {
samux 4:b320d68e98e7 126 USB_DBG("Test unit ready");
mbed_official 0:a554658735bf 127 return SCSITransfer(NULL, 6, DEVICE_TO_HOST, 0, 0);
mbed_official 0:a554658735bf 128 }
mbed_official 0:a554658735bf 129
samux 4:b320d68e98e7 130
mbed_official 0:a554658735bf 131 int USBHostMSD::readCapacity() {
samux 4:b320d68e98e7 132 USB_DBG("Read capacity");
mbed_official 0:a554658735bf 133 uint8_t cmd[10] = {0x25,0,0,0,0,0,0,0,0,0};
mbed_official 0:a554658735bf 134 uint8_t result[8];
mbed_official 0:a554658735bf 135 int status = SCSITransfer(cmd, 10, DEVICE_TO_HOST, result, 8);
mbed_official 0:a554658735bf 136 if (status == 0) {
mbed_official 0:a554658735bf 137 blockCount = (result[0] << 24) | (result[1] << 16) | (result[2] << 8) | result[3];
mbed_official 0:a554658735bf 138 blockSize = (result[4] << 24) | (result[5] << 16) | (result[6] << 8) | result[7];
samux 4:b320d68e98e7 139 USB_INFO("MSD [dev: %p] - blockCount: %lld, blockSize: %d, Capacity: %lld\r\n", dev, blockCount, blockSize, blockCount*blockSize);
mbed_official 0:a554658735bf 140 }
mbed_official 0:a554658735bf 141 return status;
mbed_official 0:a554658735bf 142 }
mbed_official 0:a554658735bf 143
mbed_official 0:a554658735bf 144
mbed_official 0:a554658735bf 145 int USBHostMSD::SCSIRequestSense() {
samux 4:b320d68e98e7 146 USB_DBG("Request sense");
samux 4:b320d68e98e7 147 uint8_t cmd[6] = {0x03,0,0,0,18,0};
samux 4:b320d68e98e7 148 uint8_t result[18];
samux 4:b320d68e98e7 149 int status = SCSITransfer(cmd, 6, DEVICE_TO_HOST, result, 18);
mbed_official 0:a554658735bf 150 return status;
mbed_official 0:a554658735bf 151 }
mbed_official 0:a554658735bf 152
mbed_official 0:a554658735bf 153
mbed_official 0:a554658735bf 154 int USBHostMSD::inquiry(uint8_t lun, uint8_t page_code) {
samux 4:b320d68e98e7 155 USB_DBG("Inquiry");
mbed_official 0:a554658735bf 156 uint8_t evpd = (page_code == 0) ? 0 : 1;
mbed_official 13:b58a2204422f 157 uint8_t cmd[6] = {0x12, uint8_t((lun << 5) | evpd), page_code, 0, 36, 0};
mbed_official 0:a554658735bf 158 uint8_t result[36];
mbed_official 0:a554658735bf 159 int status = SCSITransfer(cmd, 6, DEVICE_TO_HOST, result, 36);
mbed_official 0:a554658735bf 160 if (status == 0) {
samux 4:b320d68e98e7 161 char vid_pid[17];
mbed_official 0:a554658735bf 162 memcpy(vid_pid, &result[8], 8);
mbed_official 0:a554658735bf 163 vid_pid[8] = 0;
mbed_official 0:a554658735bf 164 USB_INFO("MSD [dev: %p] - Vendor ID: %s", dev, vid_pid);
mbed_official 0:a554658735bf 165
samux 4:b320d68e98e7 166 memcpy(vid_pid, &result[16], 16);
samux 4:b320d68e98e7 167 vid_pid[16] = 0;
samux 4:b320d68e98e7 168 USB_INFO("MSD [dev: %p] - Product ID: %s", dev, vid_pid);
mbed_official 0:a554658735bf 169
mbed_official 0:a554658735bf 170 memcpy(vid_pid, &result[32], 4);
mbed_official 0:a554658735bf 171 vid_pid[4] = 0;
mbed_official 0:a554658735bf 172 USB_INFO("MSD [dev: %p] - Product rev: %s", dev, vid_pid);
mbed_official 0:a554658735bf 173 }
mbed_official 0:a554658735bf 174 return status;
mbed_official 0:a554658735bf 175 }
mbed_official 0:a554658735bf 176
mbed_official 0:a554658735bf 177 int USBHostMSD::checkResult(uint8_t res, USBEndpoint * ep) {
mbed_official 0:a554658735bf 178 // if ep stalled: send clear feature
mbed_official 0:a554658735bf 179 if (res == USB_TYPE_STALL_ERROR) {
mbed_official 0:a554658735bf 180 res = host->controlWrite( dev,
mbed_official 0:a554658735bf 181 USB_RECIPIENT_ENDPOINT | USB_HOST_TO_DEVICE | USB_REQUEST_TYPE_STANDARD,
mbed_official 0:a554658735bf 182 CLEAR_FEATURE,
samux 4:b320d68e98e7 183 0, ep->getAddress(), NULL, 0);
mbed_official 0:a554658735bf 184 // set state to IDLE if clear feature successful
mbed_official 0:a554658735bf 185 if (res == USB_TYPE_OK) {
mbed_official 0:a554658735bf 186 ep->setState(USB_TYPE_IDLE);
mbed_official 0:a554658735bf 187 }
mbed_official 0:a554658735bf 188 }
mbed_official 0:a554658735bf 189
mbed_official 0:a554658735bf 190 if (res != USB_TYPE_OK)
mbed_official 0:a554658735bf 191 return -1;
mbed_official 0:a554658735bf 192
mbed_official 0:a554658735bf 193 return 0;
mbed_official 0:a554658735bf 194 }
mbed_official 0:a554658735bf 195
mbed_official 0:a554658735bf 196
mbed_official 0:a554658735bf 197 int USBHostMSD::SCSITransfer(uint8_t * cmd, uint8_t cmd_len, int flags, uint8_t * data, uint32_t transfer_len) {
mbed_official 0:a554658735bf 198
mbed_official 0:a554658735bf 199 int res = 0;
mbed_official 0:a554658735bf 200
mbed_official 0:a554658735bf 201 cbw.Signature = CBW_SIGNATURE;
mbed_official 0:a554658735bf 202 cbw.Tag = 0;
mbed_official 0:a554658735bf 203 cbw.DataLength = transfer_len;
mbed_official 0:a554658735bf 204 cbw.Flags = flags;
mbed_official 0:a554658735bf 205 cbw.LUN = 0;
mbed_official 0:a554658735bf 206 cbw.CBLength = cmd_len;
mbed_official 0:a554658735bf 207 memset(cbw.CB,0,sizeof(cbw.CB));
mbed_official 0:a554658735bf 208 if (cmd) {
mbed_official 0:a554658735bf 209 memcpy(cbw.CB,cmd,cmd_len);
mbed_official 0:a554658735bf 210 }
mbed_official 0:a554658735bf 211
mbed_official 0:a554658735bf 212 // send the cbw
samux 4:b320d68e98e7 213 USB_DBG("Send CBW");
mbed_official 0:a554658735bf 214 res = host->bulkWrite(dev, bulk_out,(uint8_t *)&cbw, 31);
mbed_official 0:a554658735bf 215 if (checkResult(res, bulk_out))
mbed_official 0:a554658735bf 216 return -1;
mbed_official 0:a554658735bf 217
mbed_official 0:a554658735bf 218 // data stage if needed
mbed_official 0:a554658735bf 219 if (data) {
samux 4:b320d68e98e7 220 USB_DBG("data stage");
mbed_official 0:a554658735bf 221 if (flags == HOST_TO_DEVICE) {
mbed_official 24:868cbfe611a7 222
mbed_official 0:a554658735bf 223 res = host->bulkWrite(dev, bulk_out, data, transfer_len);
mbed_official 0:a554658735bf 224 if (checkResult(res, bulk_out))
mbed_official 0:a554658735bf 225 return -1;
mbed_official 0:a554658735bf 226
mbed_official 0:a554658735bf 227 } else if (flags == DEVICE_TO_HOST) {
mbed_official 0:a554658735bf 228
mbed_official 0:a554658735bf 229 res = host->bulkRead(dev, bulk_in, data, transfer_len);
mbed_official 0:a554658735bf 230 if (checkResult(res, bulk_in))
mbed_official 0:a554658735bf 231 return -1;
mbed_official 0:a554658735bf 232 }
mbed_official 0:a554658735bf 233 }
mbed_official 0:a554658735bf 234
mbed_official 0:a554658735bf 235 // status stage
mbed_official 0:a554658735bf 236 csw.Signature = 0;
samux 4:b320d68e98e7 237 USB_DBG("Read CSW");
mbed_official 0:a554658735bf 238 res = host->bulkRead(dev, bulk_in,(uint8_t *)&csw, 13);
mbed_official 0:a554658735bf 239 if (checkResult(res, bulk_in))
mbed_official 0:a554658735bf 240 return -1;
mbed_official 0:a554658735bf 241
mbed_official 0:a554658735bf 242 if (csw.Signature != CSW_SIGNATURE) {
mbed_official 0:a554658735bf 243 return -1;
mbed_official 0:a554658735bf 244 }
mbed_official 24:868cbfe611a7 245
samux 4:b320d68e98e7 246 USB_DBG("recv csw: status: %d", csw.Status);
mbed_official 0:a554658735bf 247
mbed_official 0:a554658735bf 248 // ModeSense?
samux 4:b320d68e98e7 249 if ((csw.Status == 1) && (cmd[0] != 0x03)) {
samux 4:b320d68e98e7 250 USB_DBG("request mode sense");
mbed_official 0:a554658735bf 251 return SCSIRequestSense();
samux 4:b320d68e98e7 252 }
mbed_official 24:868cbfe611a7 253
samux 4:b320d68e98e7 254 // perform reset recovery
samux 4:b320d68e98e7 255 if ((csw.Status == 2) && (cmd[0] != 0x03)) {
mbed_official 24:868cbfe611a7 256
samux 4:b320d68e98e7 257 // send Bulk-Only Mass Storage Reset request
samux 4:b320d68e98e7 258 res = host->controlWrite( dev,
samux 4:b320d68e98e7 259 USB_RECIPIENT_INTERFACE | USB_HOST_TO_DEVICE | USB_REQUEST_TYPE_CLASS,
samux 4:b320d68e98e7 260 BO_MASS_STORAGE_RESET,
samux 4:b320d68e98e7 261 0, msd_intf, NULL, 0);
mbed_official 24:868cbfe611a7 262
samux 4:b320d68e98e7 263 // unstall both endpoints
samux 4:b320d68e98e7 264 res = host->controlWrite( dev,
samux 4:b320d68e98e7 265 USB_RECIPIENT_ENDPOINT | USB_HOST_TO_DEVICE | USB_REQUEST_TYPE_STANDARD,
samux 4:b320d68e98e7 266 CLEAR_FEATURE,
samux 4:b320d68e98e7 267 0, bulk_in->getAddress(), NULL, 0);
mbed_official 24:868cbfe611a7 268
samux 4:b320d68e98e7 269 res = host->controlWrite( dev,
samux 4:b320d68e98e7 270 USB_RECIPIENT_ENDPOINT | USB_HOST_TO_DEVICE | USB_REQUEST_TYPE_STANDARD,
samux 4:b320d68e98e7 271 CLEAR_FEATURE,
samux 4:b320d68e98e7 272 0, bulk_out->getAddress(), NULL, 0);
mbed_official 24:868cbfe611a7 273
samux 4:b320d68e98e7 274 }
mbed_official 0:a554658735bf 275
mbed_official 0:a554658735bf 276 return csw.Status;
mbed_official 0:a554658735bf 277 }
mbed_official 0:a554658735bf 278
mbed_official 0:a554658735bf 279
mbed_official 0:a554658735bf 280 int USBHostMSD::dataTransfer(uint8_t * buf, uint32_t block, uint8_t nbBlock, int direction) {
mbed_official 0:a554658735bf 281 uint8_t cmd[10];
mbed_official 0:a554658735bf 282 memset(cmd,0,10);
mbed_official 0:a554658735bf 283 cmd[0] = (direction == DEVICE_TO_HOST) ? 0x28 : 0x2A;
mbed_official 0:a554658735bf 284
mbed_official 0:a554658735bf 285 cmd[2] = (block >> 24) & 0xff;
mbed_official 0:a554658735bf 286 cmd[3] = (block >> 16) & 0xff;
mbed_official 0:a554658735bf 287 cmd[4] = (block >> 8) & 0xff;
mbed_official 0:a554658735bf 288 cmd[5] = block & 0xff;
mbed_official 0:a554658735bf 289
mbed_official 0:a554658735bf 290 cmd[7] = (nbBlock >> 8) & 0xff;
mbed_official 0:a554658735bf 291 cmd[8] = nbBlock & 0xff;
mbed_official 0:a554658735bf 292
mbed_official 0:a554658735bf 293 return SCSITransfer(cmd, 10, direction, buf, blockSize*nbBlock);
mbed_official 0:a554658735bf 294 }
mbed_official 0:a554658735bf 295
samux 4:b320d68e98e7 296 int USBHostMSD::getMaxLun() {
samux 4:b320d68e98e7 297 uint8_t buf[1], res;
samux 4:b320d68e98e7 298 res = host->controlRead( dev, USB_RECIPIENT_INTERFACE | USB_DEVICE_TO_HOST | USB_REQUEST_TYPE_CLASS,
samux 4:b320d68e98e7 299 0xfe, 0, msd_intf, buf, 1);
samux 4:b320d68e98e7 300 USB_DBG("max lun: %d", buf[0]);
samux 4:b320d68e98e7 301 return res;
samux 4:b320d68e98e7 302 }
mbed_official 0:a554658735bf 303
mbed_official 0:a554658735bf 304 int USBHostMSD::disk_initialize() {
mbed_official 0:a554658735bf 305 USB_DBG("FILESYSTEM: init");
samux 4:b320d68e98e7 306 U16 i, timeout = 10;
mbed_official 24:868cbfe611a7 307
samux 4:b320d68e98e7 308 getMaxLun();
mbed_official 24:868cbfe611a7 309
mbed_official 0:a554658735bf 310 for (i = 0; i < timeout; i++) {
samux 4:b320d68e98e7 311 Thread::wait(100);
mbed_official 0:a554658735bf 312 if (!testUnitReady())
mbed_official 0:a554658735bf 313 break;
mbed_official 0:a554658735bf 314 }
mbed_official 24:868cbfe611a7 315
mbed_official 0:a554658735bf 316 if (i == timeout) {
mbed_official 0:a554658735bf 317 disk_init = false;
mbed_official 0:a554658735bf 318 return -1;
mbed_official 0:a554658735bf 319 }
mbed_official 24:868cbfe611a7 320
mbed_official 0:a554658735bf 321 inquiry(0, 0);
mbed_official 0:a554658735bf 322 disk_init = 1;
mbed_official 0:a554658735bf 323 return readCapacity();
mbed_official 0:a554658735bf 324 }
mbed_official 0:a554658735bf 325
mbed_official 0:a554658735bf 326 int USBHostMSD::disk_write(const uint8_t *buffer, uint64_t block_number) {
mbed_official 0:a554658735bf 327 USB_DBG("FILESYSTEM: write block: %lld", block_number);
mbed_official 0:a554658735bf 328 if (!disk_init) {
mbed_official 0:a554658735bf 329 disk_initialize();
mbed_official 0:a554658735bf 330 }
mbed_official 0:a554658735bf 331 if (!disk_init)
mbed_official 0:a554658735bf 332 return -1;
mbed_official 0:a554658735bf 333 return dataTransfer((uint8_t *)buffer, block_number, 1, HOST_TO_DEVICE);
mbed_official 0:a554658735bf 334 }
mbed_official 0:a554658735bf 335
mbed_official 0:a554658735bf 336 int USBHostMSD::disk_read(uint8_t * buffer, uint64_t block_number) {
mbed_official 0:a554658735bf 337 USB_DBG("FILESYSTEM: read block %lld", block_number);
mbed_official 0:a554658735bf 338 if (!disk_init) {
mbed_official 0:a554658735bf 339 disk_initialize();
mbed_official 0:a554658735bf 340 }
mbed_official 0:a554658735bf 341 if (!disk_init)
mbed_official 0:a554658735bf 342 return -1;
mbed_official 0:a554658735bf 343 return dataTransfer((uint8_t *)buffer, block_number, 1, DEVICE_TO_HOST);
mbed_official 0:a554658735bf 344 }
mbed_official 0:a554658735bf 345
mbed_official 0:a554658735bf 346 uint64_t USBHostMSD::disk_sectors() {
mbed_official 0:a554658735bf 347 USB_DBG("FILESYSTEM: sectors");
mbed_official 0:a554658735bf 348 if (!disk_init) {
mbed_official 0:a554658735bf 349 disk_initialize();
mbed_official 0:a554658735bf 350 }
mbed_official 0:a554658735bf 351 if (!disk_init)
mbed_official 0:a554658735bf 352 return 0;
mbed_official 0:a554658735bf 353 return blockCount;
mbed_official 0:a554658735bf 354 }
mbed_official 0:a554658735bf 355
mbed_official 0:a554658735bf 356 #endif