/*
 *  USB Endpoint 3 Event Callback
 *   Called automatically on USB Endpoint 3 Event
 *    Parameter:       event
 */
ErrorCode_t USB_EndPoint3(USBD_HANDLE_T hUsb, void* data, uint32_t event) {
	uint32_t cnt;
	unsigned char packet[LASERSHARK_USB_DATA_BULK_SIZE*4];

	switch (event) {
	case USB_EVT_OUT:
		//while (1) {
		//	if (LASERSHARK_USB_DATA_BULK_SIZE <= lasershark_get_empty_sample_count()) {
		//		break;
		//	}
		//}
		//LPC_USB->Ctrl = ((USB_ENDPOINT_OUT(3) & 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");
		
		//cnt = pUsbApi->hw->ReadEP(hUsb, USB_CDC_EP_BULK_OUT, pVcom->rxBuf);
		cnt = pUsbApi->hw->ReadEP(hUsb, 3, packet);

		//if ((cnt = LPC_USB->RxPLen) & PKT_DV) { // We have data...
		//	cnt &= PKT_LNGTH_MASK; // Get length in bytes
			lasershark_process_data(packet, cnt);
		//	LPC_USB->Ctrl = 0;
		//}
		//LPC_USB->Ctrl = 0; // Disable read mode.. do this if you ever want to see a USB packet again
	    //WrCmdEP(USB_ENDPOINT_OUT(3), CMD_CLR_BUF);
		break;
	}

	return LPC_OK;
}
示例#2
0
/*
 *  USB Endpoint 3 Event Callback
 *   Called automatically on USB Endpoint 3 Event
 *    Parameter:       event
 */
void USB_EndPoint3(uint32_t event) {
	uint32_t cnt;
	switch (event) {
	case USB_EVT_OUT:
		if (LASERSHARK_USB_DATA_BULK_PACKET_SAMPLE_COUNT+1 > lasershark_get_empty_sample_count()) {
			//We can't sit around here all day! Have the main thread loop trigger this when ready.
			lasershark_set_bulk_data_interrupt_needs_retrigger();
			return;
		}

		LPC_USB->Ctrl = ((USB_ENDPOINT_OUT(3) & 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
	    WrCmdEP(USB_ENDPOINT_OUT(3), CMD_CLR_BUF);
		break;
	}
}
/*
 *  USB Endpoint 3 Event Callback
 *   Called automatically on USB Endpoint 3 Event
 *    Parameter:       event
 */
void USB_EndPoint3(uint32_t event) {
	uint32_t cnt;
	switch (event) {
	case USB_EVT_OUT:
		while (1) {
			if (LASERSHARK_USB_DATA_BULK_SIZE <= lasershark_get_empty_sample_count()) {
				break;
			}
		}

		LPC_USB->Ctrl = ((USB_ENDPOINT_OUT(3) & 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
	    WrCmdEP(USB_ENDPOINT_OUT(3), CMD_CLR_BUF);
		break;
	}
}
示例#4
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
	}
}