Exemple #1
0
int USBGetChar()
{
	for(;;)
	{
		USBSetupInterrupt();
		USBGeneralInterrupt();

		//	Read a char
		if (HasData(CDC_RX))
		{
			u8 c = Recv8();
			if (!ReadWriteAllowed())
				ReleaseRX();
			return c;
		} 

		if (!--_timeout) {
			Reboot();	// USB not connected, run firmware
		}
		
		_delay_us(100);	// stretch out the bootloader period to about 5 seconds after enumeration
		LEDPulse();
	}
	return -1;
}
Exemple #2
0
void Recv(volatile u8* data, u8 count)
{
  while (count--)
  {
    *data++ = Recv8();
  }

#ifdef TX_RX_LED_INIT  
  RXLED1;          // light the RX LED
  RxLEDPulse = TX_RX_LED_PULSE_MS;  
#endif // TX_RX_LED_INIT  
}
Exemple #3
0
void Recv(u8 ep, u8* dst, u8 len)
{
	SetEP(ep);
	while (len--)
	{
		while (!ReadWriteAllowed())
			;
		*dst++ = Recv8();
		if (!ReadWriteAllowed())	// release empty buffer
			ReleaseRX();
	}
}
Exemple #4
0
int 
USB_Recv(uint8_t ep, void* d, int len)
{
  if (!_usbConfiguration || len < 0) return (-1);
	
  LockEP lock(ep);
  uint8_t n = FifoByteCount();
  len = min(n,len);
  n = len;
  uint8_t* dst = (uint8_t*)d;
  while (n--)
    *dst++ = Recv8();
  if (len && !FifoByteCount())
    ReleaseRX();
  return (len);
}
//	Non Blocking receive
//	Return number of bytes read
int USB_Recv(u8 ep, void* d, int len)
{
	if (!_usbConfiguration || len < 0)
		return -1;
	
	LockEP lock(ep);
	u8 n = FifoByteCount();
	len = min(n,len);
	n = len;
	u8* dst = (u8*)d;
	while (n--)
		*dst++ = Recv8();
	if (len && !FifoByteCount())	// release empty buffer
		ReleaseRX();
	
	return len;
}