Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: ChaNFSSD mbed ChaNFS
Revision 2:5db90410bb90, committed 2011-12-23
- Comitter:
- okini3939
- Date:
- Fri Dec 23 16:37:58 2011 +0000
- Parent:
- 1:bb08a84162b7
- Commit message:
Changed in this revision
diff -r bb08a84162b7 -r 5db90410bb90 USBCDCMSC/USBCDCMSC.cpp
--- a/USBCDCMSC/USBCDCMSC.cpp Fri Dec 23 15:39:13 2011 +0000
+++ b/USBCDCMSC/USBCDCMSC.cpp Fri Dec 23 16:37:58 2011 +0000
@@ -27,6 +27,7 @@
#define CDC_SET_LINE_CODING 0x20
#define CDC_GET_LINE_CODING 0x21
#define CDC_SET_CONTROL_LINE_STATE 0x22
+#define CDC_SEND_BREAK 0x23
#define MAX_CDC_REPORT_SIZE MAX_PACKET_SIZE_EPBULK
@@ -77,9 +78,11 @@
USBCDCMSC::USBCDCMSC(SDFileSystem *sd, uint16_t vendor_id, uint16_t product_id, uint16_t product_release): USBDevice(vendor_id, product_id, product_release), cdcbuf(128), _sd(sd) {
+ cdcbreak = 0;
_status = NO_INIT;
connect();
- USBDevice::connect();
+// USBDevice::connect();
+ USBHAL::connect();
}
bool USBCDCMSC::USBCallback_request(void) {
@@ -106,6 +109,10 @@
case CDC_SET_CONTROL_LINE_STATE:
success = true;
break;
+ case CDC_SEND_BREAK:
+ cdcbreak = 1;
+ success = true;
+ break;
case MSC_REQUEST_RESET:
reset();
success = true;
@@ -411,7 +418,7 @@
}
//connect the device
- USBDevice::connect();
+// USBDevice::connect();
return true;
}
@@ -838,6 +845,12 @@
return true;
}
+int USBCDCMSC::isBreak () {
+ int ret = cdcbreak;
+ cdcbreak = 0;
+ return ret;
+}
+
int USBCDCMSC::disk_initialize() {
if (_sd->disk_initialize()) {
_status |= NO_DISK;
diff -r bb08a84162b7 -r 5db90410bb90 USBCDCMSC/USBCDCMSC.h
--- a/USBCDCMSC/USBCDCMSC.h Fri Dec 23 15:39:13 2011 +0000
+++ b/USBCDCMSC/USBCDCMSC.h Fri Dec 23 16:37:58 2011 +0000
@@ -191,7 +191,7 @@
FunctionPointer rx;
CircBuffer<uint8_t> cdcbuf;
-
+ int cdcbreak;
// MSC Bulk-only Stage
enum Stage {
@@ -265,6 +265,8 @@
void reset();
void fail();
+ int isBreak();
+
int disk_initialize();
int disk_write(const char *buffer, int block_number);
int disk_read(char *buffer, int block_number);
diff -r bb08a84162b7 -r 5db90410bb90 main.cpp
--- a/main.cpp Fri Dec 23 15:39:13 2011 +0000
+++ b/main.cpp Fri Dec 23 16:37:58 2011 +0000
@@ -3,6 +3,7 @@
#include "SDFileSystem.h"
#include <new>
+DigitalOut myled(LED1);
Serial pc(USBTX, USBRX);
SDFileSystem sd(p5, p6, p7, p8, "sd");
USBCDCMSC cdcmsc(&sd);
@@ -75,27 +76,45 @@
}
int main() {
- int c;
+ int c, u = 0;
+ Timer timer;
set_new_handler(no_memory); // new handler function
readfile("/sd/test.txt");
+ timer.start();
while(1) {
- if (cdcmsc.available()) {
+ if (timer.read_ms() > 500) {
+ myled = myled ? 0 : 1;
+ timer.reset();
+ }
+
+ if (u != cdcmsc.configured()) {
+ u = cdcmsc.configured();
+ printf("configured %d\r\n", u);
+ }
+
+ if (u && cdcmsc.available()) {
// CDC -> pc serial
c = cdcmsc.getc();
- pc.putc(c);
if (c == '?') {
listdir(&cdcmsc);
+ } else {
+ pc.putc(c);
}
}
if (pc.readable()) {
// PC serial -> CDC
c = pc.getc();
- cdcmsc.putc(c);
if (c == '?') {
listdir(&pc);
+ } else {
+ if (u) {
+ cdcmsc.putc(c);
+ } else {
+ pc.putc(c);
+ }
}
}
}