BaseUsbHost example program
Dependencies: BaseUsbHost FATFileSystem mbed mbed-rtos
UsbMouseHost/UsbMouseHost.cpp@1:80205a2de336, 2012-12-05 (annotated)
- Committer:
- va009039
- Date:
- Wed Dec 05 13:25:18 2012 +0000
- Revision:
- 1:80205a2de336
- Parent:
- 0:2a9734a95d55
add LifeCamVX700
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
va009039 | 1:80205a2de336 | 1 | // UsbMouseHost.cpp 2012/12/5 |
va009039 | 0:2a9734a95d55 | 2 | #include "mbed.h" |
va009039 | 0:2a9734a95d55 | 3 | #include "rtos.h" |
va009039 | 0:2a9734a95d55 | 4 | #include "BaseUsbHost.h" |
va009039 | 1:80205a2de336 | 5 | #define DEBUG |
va009039 | 0:2a9734a95d55 | 6 | #include "BaseUsbHostDebug.h" |
va009039 | 0:2a9734a95d55 | 7 | #define TEST |
va009039 | 0:2a9734a95d55 | 8 | #include "BaseUsbHostTest.h" |
va009039 | 0:2a9734a95d55 | 9 | #include "UsbMouseHost.h" |
va009039 | 0:2a9734a95d55 | 10 | |
va009039 | 0:2a9734a95d55 | 11 | UsbMouseHost::UsbMouseHost(ControlEp* ctlEp) |
va009039 | 0:2a9734a95d55 | 12 | { |
va009039 | 0:2a9734a95d55 | 13 | if (ctlEp == NULL) { // root hub |
va009039 | 0:2a9734a95d55 | 14 | DBG_OHCI(LPC_USB->HcRhPortStatus1); |
va009039 | 0:2a9734a95d55 | 15 | int lowSpeed = 0; |
va009039 | 0:2a9734a95d55 | 16 | if (LPC_USB->HcRhPortStatus1 & 0x200) { |
va009039 | 0:2a9734a95d55 | 17 | lowSpeed = 1; |
va009039 | 0:2a9734a95d55 | 18 | } |
va009039 | 1:80205a2de336 | 19 | ctlEp = new ControlEp(lowSpeed); |
va009039 | 1:80205a2de336 | 20 | TEST_ASSERT_TRUE(ctlEp); |
va009039 | 0:2a9734a95d55 | 21 | } |
va009039 | 1:80205a2de336 | 22 | bool r = check(ctlEp); |
va009039 | 1:80205a2de336 | 23 | TEST_ASSERT(r); |
va009039 | 1:80205a2de336 | 24 | |
va009039 | 1:80205a2de336 | 25 | int rc = ctlEp->SetConfiguration(1); |
va009039 | 0:2a9734a95d55 | 26 | TEST_ASSERT_EQUAL(rc, USB_OK); |
va009039 | 0:2a9734a95d55 | 27 | |
va009039 | 1:80205a2de336 | 28 | int addr = ctlEp->GetAddr(); |
va009039 | 1:80205a2de336 | 29 | int lowSpeed = ctlEp->GetLowSpeed(); |
va009039 | 0:2a9734a95d55 | 30 | m_intEp = new InterruptEp(addr, 0x81, 8, lowSpeed); |
va009039 | 0:2a9734a95d55 | 31 | TEST_ASSERT_TRUE(m_intEp); |
va009039 | 0:2a9734a95d55 | 32 | } |
va009039 | 0:2a9734a95d55 | 33 | |
va009039 | 1:80205a2de336 | 34 | bool UsbMouseHost::check(ControlEp* ctlEp) |
va009039 | 1:80205a2de336 | 35 | { |
va009039 | 1:80205a2de336 | 36 | if (ctlEp == NULL) { |
va009039 | 1:80205a2de336 | 37 | return false; |
va009039 | 1:80205a2de336 | 38 | } |
va009039 | 1:80205a2de336 | 39 | uint8_t buf[8]; |
va009039 | 1:80205a2de336 | 40 | int r = ctlEp->GetDescriptor(1, 0, buf, 8); |
va009039 | 1:80205a2de336 | 41 | if (r != USB_OK) { |
va009039 | 1:80205a2de336 | 42 | return false; |
va009039 | 1:80205a2de336 | 43 | } |
va009039 | 1:80205a2de336 | 44 | DBG_HEX(buf, 8); |
va009039 | 1:80205a2de336 | 45 | if (buf[4] != 0x00) { // HID ? |
va009039 | 1:80205a2de336 | 46 | return false; |
va009039 | 1:80205a2de336 | 47 | } |
va009039 | 1:80205a2de336 | 48 | return true; |
va009039 | 1:80205a2de336 | 49 | } |
va009039 | 1:80205a2de336 | 50 | |
va009039 | 0:2a9734a95d55 | 51 | int UsbMouseHost::read(uint32_t* status, int millisec) |
va009039 | 0:2a9734a95d55 | 52 | { |
va009039 | 1:80205a2de336 | 53 | int rc = m_intEp->interruptReceive(reinterpret_cast<uint8_t*>(status), 4, millisec); |
va009039 | 0:2a9734a95d55 | 54 | if (rc < 0) { // error? |
va009039 | 0:2a9734a95d55 | 55 | *status = 0x00000000; |
va009039 | 0:2a9734a95d55 | 56 | return rc; |
va009039 | 0:2a9734a95d55 | 57 | } |
va009039 | 0:2a9734a95d55 | 58 | return USB_OK; |
va009039 | 0:2a9734a95d55 | 59 | } |