示例#1
0
/****************************************************************************
*    Name        : USBInterfaceTransmitTask                                 *
*                                                                           *
*    Inputs      : None                                                     *
*    Outputs     : None                                                     *
*    Returns     : None                                                     *
*                                                                           *
*    Description : This is a Transmit Task which handles all the USB        *
*                 Transmissions.                                            * 
*                 1. It pends on the event for start of USB transmission    * 
*                 2. It calls the USB stack functions to Transmit the data  *
*                    on USB PHY and wait (block) till the Transmission      *
*                    completes or Timeout or error event.                   *
*                 3. On completetion of transmission it resets teh USB      *
*                    interface layer states to RX_ENB to receive new geni   *
*                    Request.                                               *
*                                                                           *
*****************************************************************************
*/    
void USBInterfaceTransmitTask(void)
{
  GF_UINT32 telegram_length = 0;
  GF_UINT32 packet_length = 0;
  GF_UINT32 tx_index = 0;

  /* USB Buffer (FU) Enable. After this register setting HOST can detect 
  the USBFU. Also Attach the USB to the USB PHY. */
  GENI_USBSIGCTRL = 0x000C;
  GENI_GPMODE1 |= 0x0030;
  GENI_GPDATA0 &= 0xFBFF;

  while (1)
  {
    /* Wait for transmit start event */
    OS_WaitEvent(USB_TXSETUP_EVENT);                    

    usb_int_state = TX_START;
    usb_tx_index = 0;

    while (usb_int_state != TX_DONE)
    {
      SendTxByte(USB_CH_NO);  
    }

    /* Obtain total length */
    telegram_length = usb_tx_index;

    for (tx_index = 0; tx_index < telegram_length; tx_index += 64)
    {
      packet_length = telegram_length - tx_index;
      packet_length = (packet_length > 64) ? 64 : packet_length;

      usb_tx_idle_active = FALSE;
      usb_tx_idle_cnt = usb_tx_idle_cnt_reset_value * 2; // restart Idle countdown
      usb_tx_idle_active = TRUE;    

      USB_CDC_WriteTimed(&cdc_tx_buff_p[tx_index], packet_length, USB_TX_WAIT_TIME);
    }
  }
}
示例#2
0
void TestTask2(void)
{
	uint32_t ts,te;
	uint32_t i,j;
	uint16_t t;
	while(1)
	{
		switch(testcase)
		{
			case 0:
				// Task Priority
				assert(testvar ==2);
				testvar++;
				break;
			case 1:
				// Timer / Wait
				OS_WaitTicks(OSALMTest2, 2);
				
				t=50;
				OS_GetTicks(&i); // get time
				OS_WaitTicks(OSALMTest2, t);
				OS_GetTicks(&j); // get time
				assert(j-i == t); // waited time was correct
				break;
			case 2:
				// WaitEvent
				// SetEvent

				break;
			case 3:
				// MutexGet
				// MutexRelease			
				// two cases: 
				// 1:mutex is occupied by higher prio
				WasteOfTime(10);
				OS_MutexGet(0);
				testvar = 7;
				WasteOfTime(50);
				assert(testvar == 7);
				OS_MutexRelease(0);
				OS_SetEvent(OSTestTskID1,1<<1);
				// 2:mutex is occupied
				OS_MutexGet(0);
				testvar = 4;
				WasteOfTime(50);
				assert(testvar == 4);
				OS_MutexRelease(0);


				break;
			case 4:
				// QueueIn
				// QueueOut

				break;
			case 5:
				// SetAlarm
				// WaitAlarm
				OS_GetTicks(&ts);
				OS_WaitAlarm(OSALMTest2);
				OS_GetTicks(&te);
				assert(te-ts == 44);

				break;
			case 6:
				// Event with timeout


				break;
			case 7:
				// long queue


				break;
			default:
				break;
		}
	OS_WaitEvent(1<<7);
	}// while(1)

}
示例#3
0
void TestTask1(void)
{
	uint8_t ret,i;
	uint32_t ts,te;
	uint8_t v;
	uint16_t t=25;
	uint32_t ti,tj;

	while(1)
	{
		switch(testcase)
		{
			case 0:
				// Task Priority
				assert(testvar ==1);
				testvar++;
				break;
			case 1:
				OS_WaitTicks(OSALMTest1, 1);
				// Timer / Wait
				OS_GetTicks(&ti); // get time
				OS_WaitTicks(OSALMTest1, t);
				OS_GetTicks(&tj); // get time
				assert(tj-ti == t); // waited time was correct
									
				break;
			case 2:
				// WaitEvent
				// SetEvent
				// wait for A, then A occurs
				testvar=1;
				OS_WaitEvent(1<<0);
				testvar=2;
				// A occurs, then wait for A
				WasteOfTime(50);
				assert(testvar==3);
				OS_WaitEvent(1<<0);
				testvar=4;

				// wait for more events, one occurs, then the other
				ret = OS_WaitEvent(1<<1 | 1<<2);
				testvar=5;
				assert(ret == (1<<2));
				testvar=6;
				ret = OS_WaitEvent(1<<1 | 1<<2);
				testvar=7;
				assert(ret == (1<<1));
				testvar=8;

				// wait for less events

				break;
			case 3:
				// MutexGet
				// MutexRelease			
				// two cases: 
				// 1:mutex is free
				OS_MutexGet(0);
				WasteOfTime(50);
				testvar = 1;
				OS_WaitTicks(OSALMTest1, 50);
				assert(testvar == 1);
				OS_MutexRelease(0);

				OS_WaitEvent(1<<1);
				// 2:mutex is occupied by lower prio
				OS_WaitTicks(OSALMTest1, 50);
				OS_MutexGet(0);
				testvar = 3;
				WasteOfTime(50);
				assert(testvar == 3);
				OS_MutexRelease(0);

				break;
			case 4:
				// QueueIn
				// QueueOut

				TestQ.read = 13; // tweak the queue to a "used" state
				TestQ.write =13;

				ret = OS_QueueOut(&TestQ,&v); // q empty at start
				assert(ret == 1);
				OS_WaitEvent(1<<6);
				for (i=0;i<20;i++) // forward
				{
					ret = OS_QueueOut(&TestQ,&v);
					assert(v==i);
					assert(ret ==0);
				}
				// Q empty
				ret = OS_QueueOut(&TestQ,&v);
				//assert(v==i);
				assert(ret ==1);
				OS_WaitEvent(1<<6);
				for (i=20;i>0;i--) // backward
				{
					ret = OS_QueueOut(&TestQ,&v);
					assert(v==i);
					assert(ret ==0);
				}
				// Q empty
				ret = OS_QueueOut(&TestQ,&v);
				
				assert(ret ==1);
				//OS_WaitEvent(1<<6);

				break;
			case 5:
				// SetAlarm
				// WaitAlarm
				OS_GetTicks(&ts);
				OS_WaitAlarm(OSALMTest1);
				OS_GetTicks(&te);
				assert(te-ts == 53);
				break;
			case 6:
				// Event with timeout
				ret = OS_WaitEventTimeout(1<<3,OSALMTest1, 30);
				assert(ret == 1<<3); // no timeout, it was the event.


				OS_GetTicks(&ti); // get time
				ret = OS_WaitEventTimeout(1<<3,OSALMTest1, t); // wait for the event, which never comes...
				assert(ret == 0); // timeout recoginzed
				OS_GetTicks(&tj); // get time
				assert(tj-ti == t); // waited time was correct


				break;
			case 7:
				// long queue


				break;
			default:
				break;
		}
	OS_WaitEvent(1<<7);
	}// while(1)

}
示例#4
0
void GUI_X_WaitEvent(void)    {
  _pGUITask = OS_GetpCurrentTask();
  OS_WaitEvent(1);
}