Webcam Server.
Dependencies: uvchost FatFileSystem mbed HTTPServer NetServicesMin
Diff: usb/UsbDevice2.cpp
- Revision:
- 1:7a4f2c038803
- Parent:
- 0:2b4ea8a138e5
--- a/usb/UsbDevice2.cpp Wed Jun 06 11:47:06 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,133 +0,0 @@ -#include "UsbDevice.h" -//#define __DEBUG -#include "mydbg.h" - -#define PORT_RESET 4 -#define PORT_POWER 8 -#define C_PORT_CONNECTION 16 -#define C_PORT_RESET 20 - -UsbErr UsbDevice::hub_init() -{ - UsbErr rc; - uint8_t buf[9]; - rc = controlReceive( - USB_DEVICE_TO_HOST | USB_REQUEST_TYPE_CLASS | USB_RECIPIENT_DEVICE, // 0xa0 - GET_DESCRIPTOR, - (USB_DESCRIPTOR_TYPE_HUB << 8), 0, buf, sizeof(buf)); - DBG_ASSERT(rc == USBERR_OK); - DBG_ASSERT(buf[0] == 9); - DBG_ASSERT(buf[1] == 0x29); - DBG_BYTES("HUB DESCRIPTOR", buf, sizeof(buf)); - - m_hub_ports = buf[2]; - VERBOSE("NbrPorts: %d\n", m_hub_ports); - int PwrOn2PwrGood = buf[5]; - VERBOSE("PwrOn2PwrGood: %d %d ms\n", PwrOn2PwrGood, PwrOn2PwrGood*2); - VERBOSE("HubContrCurrent: %d\n", buf[6]); - - rc = setConfiguration(1); - DBG_ASSERT(rc == USBERR_OK); - - uint8_t status[4]; - rc = controlReceive( - USB_DEVICE_TO_HOST | USB_REQUEST_TYPE_CLASS | USB_RECIPIENT_DEVICE, // 0xa0 - GET_STATUS, - 0, 0, status, sizeof(status)); - DBG_ASSERT(rc == USBERR_OK); - DBG_BYTES("HUB STATUS", status, sizeof(status)); - - for(int i = 1; i <= m_hub_ports; i++) { - rc = SetPortFeature(PORT_POWER, i); - DBG("PORT_POWER port=%d rc=%d\n", i, rc); - DBG_ASSERT(rc == USBERR_OK); - if (rc != USBERR_OK) { - return rc; - } - } - wait_ms(PwrOn2PwrGood*2); - - m_enumerated = true; - return USBERR_OK; -} - -UsbErr UsbDevice::hub_poll() -{ - DBG("%p m_hub=%d m_port=%d m_addr=%d\n", this, m_hub, m_port, m_addr); - // check status - for(int port = 1; port <= m_hub_ports; port++) { - uint8_t status[4]; - UsbErr rc = GetPortStatus(port, status, sizeof(status)); - DBG_ASSERT(rc == USBERR_OK); - DBG("port=%d\n", port); - DBG_BYTES("STATUS", status, sizeof(status)); - if (status[2] & 0x01) { // Connect Status Change, has changed - DBG_ASSERT(status[0] & 0x01); - ClearPortFeature(C_PORT_CONNECTION, port); - DBG_ASSERT(m_pMgr); - m_pMgr->onUsbDeviceConnected(m_addr, port); - return USBERR_PROCESSING; - } - } - return USBERR_OK; -} - -UsbErr UsbDevice::hub_PortReset(int port) -{ - DBG("%p port=%d\n", this, port); - DBG_ASSERT(port >= 1); - SetPortReset(port); - // wait reset - for(int i = 0; i < 100; i++) { - uint8_t status[4]; - UsbErr rc = GetPortStatus(port, status, sizeof(status)); - DBG_ASSERT(rc == USBERR_OK); - DBG_BYTES("RESET", status, sizeof(status)); - if (status[2] & 0x10) { // Reset change , Reset complete - return USBERR_OK; - } - wait_ms(5); - } - return USBERR_ERROR; -} - -UsbErr UsbDevice::SetPortFeature(int feature, int index) -{ - //DBG("feature=%d index=%d\n", feature, index); - UsbErr rc; - rc = controlSend( - USB_HOST_TO_DEVICE | USB_REQUEST_TYPE_CLASS | USB_RECIPIENT_OTHER, - SET_FEATURE, feature, index, 0, 0); - return rc; -} - -UsbErr UsbDevice::ClearPortFeature(int feature, int index) -{ - UsbErr rc; - rc = controlSend( - USB_HOST_TO_DEVICE | USB_REQUEST_TYPE_CLASS | USB_RECIPIENT_OTHER, - CLEAR_FEATURE, feature, index, 0, 0); - return rc; -} - -UsbErr UsbDevice::SetPortReset(int port) -{ - //DBG("port=%d\n", port); - UsbErr rc = SetPortFeature(PORT_RESET, port); - DBG_ASSERT(rc == USBERR_OK); - return rc; -} - -UsbErr UsbDevice::GetPortStatus(int port, uint8_t* buf, int size) -{ - DBG_ASSERT(size == 4); - UsbErr rc; - //return USBControlTransfer(device, - //DEVICE_TO_HOST | REQUEST_TYPE_CLASS | RECIPIENT_OTHER, - //GET_STATUS,0,port,(u8*)status,4); - - rc = controlReceive( - USB_DEVICE_TO_HOST | USB_REQUEST_TYPE_CLASS | USB_RECIPIENT_OTHER, - GET_STATUS, 0, port, buf, sizeof(buf)); - return rc; -} \ No newline at end of file