Пример #1
0
void USB_SOF_Event(void) {
	uint32_t cnt;
	if (USB_Configuration) {
		LPC_USB->Ctrl = ((USB_ENDPOINT_OUT(4) & 0x0F) << 2) | CTRL_RD_EN; // enable read
		// 3 clock cycles to fetch the packet length from RAM.
		asm("nop");
		asm("nop");
		asm("nop");
		asm("nop");

		if ((cnt = LPC_USB->RxPLen) & PKT_DV) { // We have data...
			cnt &= PKT_LNGTH_MASK; // Get length in bytes
			lasershark_process_data(cnt);
			LPC_USB->Ctrl = 0;
		}
		LPC_USB->Ctrl = 0; // Disable read mode.. do this if you ever want to see a USB packet again
	}
}
Пример #2
0
//CLASS SPECIFIC REQUEST
static void VIDEO_Req_GetCurrent(void *pdev, USB_SETUP_REQ *req)
{  
  /* Send the current mute state */

  DCD_EP_Flush (pdev,USB_ENDPOINT_OUT(0));

  if(req->wValue == 256)
  {
	  //Probe Request
	  USBD_CtlSendData (pdev, (uint8_t*)&videoProbeControl, req->wLength);
  }
  else if (req->wValue == 512)
  {
	  //Commit Request

	  USBD_CtlSendData (pdev, (uint8_t*)&videoCommitControl, req->wLength);
  }
}
Пример #3
0
ErrorCode_t UsbdCdc_Bulk_OUT_Hdlr(USBD_HANDLE_T hUsb, void* data, uint32_t event)
{
	uint8_t EpAdd = USB_ENDPOINT_OUT(CALLBACK_UsbdCdc_Register_DataOutEndpointNumber());
	if (event == USB_EVT_OUT)
	{
		UsbdCdc_EPOUT_buffer_count = USBD_API->hw->ReadEP(UsbHandle, EpAdd, UsbdCdc_EPOUT_buffer);
	}
	else if(event == USB_EVT_OUT_NAK)
	{
		if(UsbdCdc_EPOUT_buffer_count == 0)
		{
			/* Reset EP OUT buffer */
			UsbdCdc_EPOUT_buffer_index = 0;
			/* Send DMA request */
			USBD_API->hw->ReadReqEP(UsbHandle, EpAdd, UsbdCdc_EPOUT_buffer, CDC_EP_SIZE);
		}
	}
	return LPC_OK;
}
Пример #4
0
// ---------------------------------------------------------------------------
static ErrorCode_t USB_Reset_Event_Handler(USBD_HANDLE_T hUsb)
{
    int core = USB_CORE(hUsb);
    USB_CONTROLLER_STATE *State = USB_STATE(core);

    // Clear all flags
    USB_ClearEvent(0, USB_EVENT_ALL);

    State->FirstGetDescriptor = TRUE;
    //State->Address = 0;
    //State->DeviceState = USB_DEVICE_STATE_DEFAULT;
    //USB_StateCallback(State);
    USB_FLAGS(core) = 0;

    // Reset endpoints
    USBD_ResetEP(hUsb, USB_ENDPOINT_IN(INT_IN_EP));
    USBD_ResetEP(hUsb, USB_ENDPOINT_IN(BULK_IN_EP));
    USBD_ResetEP(hUsb, USB_ENDPOINT_OUT(BULK_OUT_EP));
    ep_out_count[core] = 0;
    ep_in_count[core] = 0;

    return RET_OK;
}
Пример #5
0
  0x02,                              /* bNumEndpoints */
  USB_DEVICE_CLASS_STORAGE,          /* bInterfaceClass */
  MSC_SUBCLASS_SCSI,                 /* bInterfaceSubClass */
  MSC_PROTOCOL_BULK_ONLY,            /* bInterfaceProtocol */
  0x62,                              /* iInterface */
/* Bulk In Endpoint */
  USB_ENDPOINT_DESC_SIZE,            /* bLength */
  USB_ENDPOINT_DESCRIPTOR_TYPE,      /* bDescriptorType */
  USB_ENDPOINT_IN(2),                /* bEndpointAddress */
  USB_ENDPOINT_TYPE_BULK,            /* bmAttributes */
  WBVAL(0x0040),                     /* wMaxPacketSize */
  0,                                 /* bInterval */
/* Bulk Out Endpoint */
  USB_ENDPOINT_DESC_SIZE,            /* bLength */
  USB_ENDPOINT_DESCRIPTOR_TYPE,      /* bDescriptorType */
  USB_ENDPOINT_OUT(2),               /* bEndpointAddress */
  USB_ENDPOINT_TYPE_BULK,            /* bmAttributes */
  WBVAL(0x0040),                     /* wMaxPacketSize */
  0,                                 /* bInterval */
/* Terminator */
  0                                  /* bLength */
};

/* USB String Descriptor (optional) */
const uint8_t USB_StringDescriptor[] = {
/* Index 0x00: LANGID Codes */
  0x04,                              /* bLength */
  USB_STRING_DESCRIPTOR_TYPE,        /* bDescriptorType */
  WBVAL(0x0409), /* US English */    /* wLANGID */
/* Index 0x04: Manufacturer */
  0x1C,                              /* bLength */
Пример #6
0
extern const CDCDescriptor _cdcInterface PROGMEM;
const CDCDescriptor _cdcInterface =
{
	D_IAD(0,2,CDC_COMMUNICATION_INTERFACE_CLASS,CDC_ABSTRACT_CONTROL_MODEL,1),

	//	CDC communication interface
	D_INTERFACE(CDC_ACM_INTERFACE,1,CDC_COMMUNICATION_INTERFACE_CLASS,CDC_ABSTRACT_CONTROL_MODEL,0),
	D_CDCCS(CDC_HEADER,0x10,0x01),								// Header (1.10 bcd)
	D_CDCCS(CDC_CALL_MANAGEMENT,1,1),							// Device handles call management (not)
	D_CDCCS4(CDC_ABSTRACT_CONTROL_MANAGEMENT,6),				// SET_LINE_CODING, GET_LINE_CODING, SET_CONTROL_LINE_STATE supported
	D_CDCCS(CDC_UNION,CDC_ACM_INTERFACE,CDC_DATA_INTERFACE),	// Communication interface is master, data interface is slave 0
	D_ENDPOINT(USB_ENDPOINT_IN (CDC_ENDPOINT_ACM),USB_ENDPOINT_TYPE_INTERRUPT,0x10,0x40),

	//	CDC data interface
	D_INTERFACE(CDC_DATA_INTERFACE,2,CDC_DATA_INTERFACE_CLASS,0,0),
	D_ENDPOINT(USB_ENDPOINT_OUT(CDC_ENDPOINT_OUT),USB_ENDPOINT_TYPE_BULK,USB_EP_SIZE,0),
	D_ENDPOINT(USB_ENDPOINT_IN (CDC_ENDPOINT_IN ),USB_ENDPOINT_TYPE_BULK,USB_EP_SIZE,0)
};

int WEAK CDC_GetInterface(u8* interfaceNum)
{
	interfaceNum[0] += 2;	// uses 2
	return USB_SendControl(TRANSFER_PGM,&_cdcInterface,sizeof(_cdcInterface));
}

bool WEAK CDC_Setup(Setup& setup)
{
	u8 r = setup.bRequest;
	u8 requestType = setup.bmRequestType;

	if (REQUEST_DEVICETOHOST_CLASS_INTERFACE == requestType)
Пример #7
0
  AUDIO_STREAMING_FORMAT_TYPE,          /* bDescriptorSubtype */
  AUDIO_FORMAT_TYPE_I,                  /* bFormatType */
  0x01,                                 /* bNrChannels */
  0x02,                                 /* bSubFrameSize */
  0x10,                                 /* bBitResolution */
  0x05,                                 /* bSamFreqType */
  B3VAL(8000),                          /* tSamFreq 1 */
  B3VAL(11025),                         /* tSamFreq 2 */
  B3VAL(22050),                         /* tSamFreq 3 */
  B3VAL(44100),                         /* tSamFreq 4 */
  B3VAL(48000),                         /* tSamFreq 5 */

/* Endpoint - Standard Descriptor */
  AUDIO_STANDARD_ENDPOINT_DESC_SIZE,    /* bLength */
  USB_ENDPOINT_DESCRIPTOR_TYPE,         /* bDescriptorType */
  USB_ENDPOINT_OUT(0x81),               /* bEndpointAddress */
  USB_ENDPOINT_TYPE_ISOCHRONOUS
  | USB_ENDPOINT_SYNC_ASYNCHRONOUS,     /* bmAttributes */
  WBVAL(0x0064),                        /* wMaxPacketSize */
  0x01,                                 /* bInterval */
  0x00,                                 /* bRefresh */
  0x00,                                 /* bSynchAddress */

/* Endpoint - Audio Streaming */
  AUDIO_STREAMING_ENDPOINT_DESC_SIZE,   /* bLength */
  AUDIO_ENDPOINT_DESCRIPTOR_TYPE,       /* bDescriptorType */
  AUDIO_ENDPOINT_GENERAL,               /* bDescriptor */
  0x01,                                 /* bmAttributes */
  0x00,                                 /* bLockDelayUnits */
  WBVAL(0x0000),                        /* wLockDelay */
Пример #8
0
extern const CDCDescriptor _cdcInterface PROGMEM;
const CDCDescriptor _cdcInterface =
{
	D_IAD(0,2,CDC_COMMUNICATION_INTERFACE_CLASS,CDC_ABSTRACT_CONTROL_MODEL,1),

	//	CDC communication interface
	D_INTERFACE(CDC_ACM_INTERFACE,1,CDC_COMMUNICATION_INTERFACE_CLASS,CDC_ABSTRACT_CONTROL_MODEL,0),
	D_CDCCS(CDC_HEADER,0x10,0x01),								// Header (1.10 bcd)
	D_CDCCS(CDC_CALL_MANAGEMENT,1,1),							// Device handles call management (not)
	D_CDCCS4(CDC_ABSTRACT_CONTROL_MANAGEMENT,6),				// SET_LINE_CODING, GET_LINE_CODING, SET_CONTROL_LINE_STATE supported
	D_CDCCS(CDC_UNION,CDC_ACM_INTERFACE,CDC_DATA_INTERFACE),	// Communication interface is master, data interface is slave 0
	D_ENDPOINT(USB_ENDPOINT_IN (CDC_ENDPOINT_ACM),USB_ENDPOINT_TYPE_INTERRUPT,0x10,0x40),

	//	CDC data interface
	D_INTERFACE(CDC_DATA_INTERFACE,2,CDC_DATA_INTERFACE_CLASS,0,0),
	D_ENDPOINT(USB_ENDPOINT_OUT(CDC_ENDPOINT_OUT),USB_ENDPOINT_TYPE_BULK,0x40,0),
	D_ENDPOINT(USB_ENDPOINT_IN (CDC_ENDPOINT_IN ),USB_ENDPOINT_TYPE_BULK,0x40,0)
};

int WEAK CDC_GetInterface(u8* interfaceNum)
{
	interfaceNum[0] += 2;	// uses 2
	return USB_SendControl(TRANSFER_PGM,&_cdcInterface,sizeof(_cdcInterface));
}

bool WEAK CDC_Setup(Setup& setup)
{
	u8 r = setup.bRequest;
	u8 requestType = setup.bmRequestType;

	if (REQUEST_DEVICETOHOST_CLASS_INTERFACE == requestType)
Пример #9
0
	if ( ret == false) {
		sendZlp(0);
	}
	return ret;
	#endif

	return false;
}

uint32_t EndPoints[] =
{
	USB_ENDPOINT_TYPE_CONTROL,

#ifdef CDC_ENABLED
	USB_ENDPOINT_TYPE_INTERRUPT | USB_ENDPOINT_IN(0),           // CDC_ENDPOINT_ACM
	USB_ENDPOINT_TYPE_BULK      | USB_ENDPOINT_OUT(0),               // CDC_ENDPOINT_OUT
	USB_ENDPOINT_TYPE_BULK | USB_ENDPOINT_IN(0),                // CDC_ENDPOINT_IN
#endif

#ifdef PLUGGABLE_USB_ENABLED
	//allocate 6 endpoints and remove const so they can be changed by the user
	0,
	0,
	0,
	0,
	0,
	0,
#endif
};

void USBDeviceClass::initEndpoints() {
  D_CDCCS(CDC_UNION,CDC_ACM_INTERFACE,CDC_DATA_INTERFACE),  // Communication interface is master, data interface is slave 0 (?)

  D_ENDPOINT(USB_ENDPOINT_IN (CDC_ENDPOINT_ACM),            // IN endpoint for CDC_ENDPOINT_ACM
             USB_ENDPOINT_TYPE_INTERRUPT,                   // INTERRUPT type
             0x10,                                          // max packet size 16
             0x40),                                         // interval 64 frames i.e. 64 msec (see USB spec table 9-13)

  //  SECOND INTERFACE
  //  CDC data interface (endpoints 1, 2)
  D_INTERFACE(CDC_DATA_INTERFACE,                           // 'n'
              2,                                            // number of endpoints
              CDC_DATA_INTERFACE_CLASS,                     // interface class
              0,                                            // interface sub-class
              0),                                           // protocol

  D_ENDPOINT(USB_ENDPOINT_OUT(CDC_ENDPOINT_OUT),            // OUT endpoint, index 'CDC_ENDPOINT_OUT'
             USB_ENDPOINT_TYPE_BULK,                        // BULK data transfers
             0x40,                                          // max packet size 64
             1),                                            // interval 1 (was 0)

  D_ENDPOINT(USB_ENDPOINT_IN (CDC_ENDPOINT_IN),             // IN endpoint, index 'CDC_ENDPOINT_IN'
             USB_ENDPOINT_TYPE_BULK,                        // BULK data transfers
             0x40,                                          // max packet size 64
             0)                                             // interval 0 (apparently not needed)
};

void WEAK CDC_Reset(void)
{
  _usbLineInfo.dwDTERate = 115200;

  _usbLineInfo.bCharFormat
Пример #11
0
static const uint8_t vcom_configuration_descriptor_data[] = {
  /* Configuration Descriptor.*/
  USB_DESC_CONFIGURATION(
    USB_DESC_CONFIGURATION_SIZE +
    (IAD_CDC_IF_DESC_SET_SIZE * 2),         /* wTotalLength.                */
    USB_NUM_INTERFACES,                     /* bNumInterfaces.              */
    0x01,                                   /* bConfigurationValue.         */
    0,                                      /* iConfiguration.              */
    0xC0,                                   /* bmAttributes (self powered). */
    50                                      /* bMaxPower (100mA).           */
  ),
  IAD_CDC_IF_DESC_SET(
    USB_CDC_CIF_NUM0,
    USB_CDC_DIF_NUM0,
    USB_ENDPOINT_IN(USB_INTERRUPT_REQUEST_EP_A),
    USB_ENDPOINT_OUT(USB_DATA_AVAILABLE_EP_A),
    USB_ENDPOINT_IN(USB_DATA_REQUEST_EP_A)
  ),
  IAD_CDC_IF_DESC_SET(
    USB_CDC_CIF_NUM1,
    USB_CDC_DIF_NUM1,
    USB_ENDPOINT_IN(USB_INTERRUPT_REQUEST_EP_B),
    USB_ENDPOINT_OUT(USB_DATA_AVAILABLE_EP_B),
    USB_ENDPOINT_IN(USB_DATA_REQUEST_EP_B)
  ),
};

/*
 * Configuration Descriptor wrapper.
 */
static const USBDescriptor vcom_configuration_descriptor = {
Пример #12
0
ErrorCode_t EP0_hdlr(USBD_HANDLE_T hUsb, void* data, uint32_t event) {
	USB_CORE_CTRL_T* pCtrl = (USB_CORE_CTRL_T*)hUsb;
	static USB_SETUP_PACKET packet;
	pUsbApi->hw->ReadSetupPkt( hUsb, USB_ENDPOINT_OUT(0), (uint32_t *)&packet );

	switch (event) {
		case USB_EVT_SETUP:
			if (packet.bmRequestType.B == 0x80 // Setup Device to Host
					&& packet.bRequest == 0x06 // Get descriptor
					&& packet.wValue.WB.H == 0x06 // Get Device Qualifier Descriptor
				) {
				pUsbApi->hw->WriteEP(pUsbHandle, USB_ENDPOINT_IN(0), UPER_DeviceQualifierDescriptor, USB_DEVICE_QUALI_SIZE);
				return LPC_OK;
			}

			if (packet.bmRequestType.B == 0x80 // Setup Device to Host
					&& packet.bRequest == 0x06 // Get descriptor
					&& packet.wValue.WB.H == 0x03 // Get String Descriptor
					&& packet.wValue.WB.L == 3 // Serial number string
				) {

				uint32_t descSize = UPER_USBSerialStringDescriptor[0];
				if (descSize > packet.wLength)
					descSize = packet.wLength;

				pUsbApi->hw->WriteEP(pUsbHandle, USB_ENDPOINT_IN(0), UPER_USBSerialStringDescriptor, descSize);
				return LPC_OK;
			}

			pCtrl->EP0Data.Count = packet.wLength;   // Number of bytes to transfer

			if ( (packet.bmRequestType.B == REQ_TYPE(REQUEST_HOST_TO_DEVICE,REQUEST_CLASS,REQUEST_TO_INTERFACE) )
				  && (packet.bRequest    == 0x20 ) // SetLineCoding
				  && (packet.wValue.W    == 0 )    // Zero
				  && (packet.wIndex.W == USB_CDC_SFP_CIF_NUM) // Interface number
				) {

				pCtrl->EP0Data.pData = pCtrl->EP0Buf;
				pCtrl->EP0Data.Count = 7;
				//pUsbApi->core->DataOutStage( hUsb );
				pUsbApi->core->StatusInStage(hUsb);
				return LPC_OK;
			}

			if ( (packet.bmRequestType.B == REQ_TYPE(REQUEST_DEVICE_TO_HOST,REQUEST_CLASS,REQUEST_TO_INTERFACE) )
				  && (packet.bRequest    == 0x21 ) // GetLineCoding
				  && (packet.wValue.W    == 0 )  // Zero
				  && (packet.wIndex.W == USB_CDC_SFP_CIF_NUM) // Interface number
				) {
				uint8_t lcs[] = { 0x80, 0x25, 0x00, 0x00, 0x00, 0x00, 0x08 }; // Default 9600 8n1

				pCtrl->EP0Data.Count = 7;
				pCtrl->EP0Data.pData = (uint8_t*)&lcs;
				pUsbApi->core->DataInStage(hUsb);

				return LPC_OK;
			}

			if ( (packet.bmRequestType.B == REQ_TYPE(REQUEST_HOST_TO_DEVICE,REQUEST_CLASS,REQUEST_TO_INTERFACE) )
				  && (packet.bRequest == 0x22 ) // SetControlLineState
				  && (packet.wIndex.W == USB_CDC_SFP_CIF_NUM) // Both interfaces
				) {
				pUsbApi->core->StatusInStage(hUsb);
				return LPC_OK;
			}

			break;
		case USB_EVT_OUT:
			if (pCtrl->EP0Data.Count > 0) {
				pUsbApi->core->DataOutStage(hUsb);
			} else {
				pUsbApi->core->StatusInStage(hUsb);
			}

			return LPC_OK;
			break;

		case USB_EVT_IN:
			/*if (pCtrl->EP0Data.Count > 0) {
				pUsbApi->core->DataInStage( hUsb );
				return LPC_OK;
			} else {
				pUsbApi->core->StatusOutStage( hUsb );
				return LPC_OK;
			}*/

			break;

		default:
			break;
	}

	return ERR_USBD_UNHANDLED;
}
Пример #13
0
{
	interfaceNum[0] += 1;	// uses 1
	return USB_SendControl(TRANSFER_PGM,&_acInterface,sizeof(_acInterface));
}

extern const MIDIDescriptor _midiInterface PROGMEM;
const MIDIDescriptor _midiInterface =
{
	D_INTERFACE(MIDI_INTERFACE,MIDI_ENDPOINT_COUNT,CLASS_AUDIO,SUBCLASS_MIDISTREAMING,0),
	{7, TYPE_CS_INTERFACE, SUBTYPE_HEADER, 0x0100, 34},
	{6, TYPE_CS_INTERFACE, SUBTYPE_MIDI_IN_JACK, JACK_EMBEDDED, JACK1, 0x00},
	{9, TYPE_CS_INTERFACE, SUBTYPE_MIDI_OUT_JACK, JACK_EMBEDDED, JACK2, 1, JACK3, 1, 0x00},
    {6, TYPE_CS_INTERFACE, SUBTYPE_MIDI_IN_JACK, JACK_EXTERNAL, JACK3, 0x00},
    {9, TYPE_CS_INTERFACE, SUBTYPE_MIDI_OUT_JACK, JACK_EXTERNAL, JACK4, 1, JACK1, 1, 0x00},
    {
        D_ENDPOINT(USB_ENDPOINT_OUT(MIDI_ENDPOINT_OUT), USB_ENDPOINT_TYPE_BULK, 0x0040, 0x00),
        { 5, 0x25, 0x01, 0x01, JACK1 }
    },
    { 
        D_ENDPOINT(USB_ENDPOINT_IN(MIDI_ENDPOINT_IN), USB_ENDPOINT_TYPE_BULK, 0x0040, 0x00),
        { 5, 0x25, 0x01, 0x01, JACK2 }
    }
};


int WEAK MIDI_GetInterface(u8* interfaceNum)
{
	interfaceNum[0] += 1;	// uses 1
	return USB_SendControl(TRANSFER_PGM,&_midiInterface,sizeof(_midiInterface));
}
Пример #14
0
/********************************************************************************
 Endpoint 1, Mass Storage Bulk In
*********************************************************************************/
        USB_ENDPOINT_DESCRIPTOR_SIZE,       /* bLength */
        USB_ENDPOINT_DESCRIPTOR_TYPE,       /* bDescriptorType */
        USB_ENDPOINT_IN(MASS_STORAGE_READ_EP_NUM),  /* bEndpointAddress */
        USB_ENDPOINT_TYPE_BULK,        		/* bmAttributes */
        WBVAL(MASS_STORAGE_MAX_PACKET_SIZE),/* wMaxPacketSize */
        0x0,                                /* bInterval  */

/********************************************************************************
 Endpoint 2, Mass Storage Bulk Out
*********************************************************************************/
        USB_ENDPOINT_DESCRIPTOR_SIZE,       /* bLength */
        USB_ENDPOINT_DESCRIPTOR_TYPE,       /* bDescriptorType */
        USB_ENDPOINT_OUT(MASS_STORAGE_WRITE_EP_NUM),    /* bEndpointAddress */
        USB_ENDPOINT_TYPE_BULK,             /* bmAttributes */
        WBVAL(MASS_STORAGE_MAX_PACKET_SIZE), /* wMaxPacketSize */
        0x00,                               /* bInterval: Ignore bulk transfer  */

};




/* USB String Descriptors */
const uint8 MASS_StringLangID[MASS_SIZ_STRING_LANGID] =
{
		MASS_SIZ_STRING_LANGID,
        USB_STRING_DESCRIPTOR_TYPE,
        WBVAL(0x0409) /* LangID = 0x0409: U.S. English */