host_template_task.h File Reference


Detailed Description

Management of the USB high-level application host task.

This file manages the USB high-level application host task.

Author:
Atmel Corporation: http://www.atmel.com
Support and FAQ: http://support.atmel.no/

Definition in file host_template_task.h.

#include "conf_usb.h"
#include "usb_host_task.h"

Go to the source code of this file.

Functions

void host_sof_action (void)
 host_sof_action
void host_template_task (void *pvParameters)
 High-level host applicative task entry point Put here the code of your host application.
void host_template_task_init (void)
 This function initializes the high-level host application.

Variables

Pipe_handler host_get_data_callback
Pipe_handler host_send_data_callback


Function Documentation

void host_template_task ( void *  pvParameters  ) 

High-level host applicative task entry point Put here the code of your host application.

The sample code just sends and receives 64 bytes from IN and OUT pipes.

Definition at line 131 of file host_template_task.c.

References buf, busy, configTSK_USB_HTP_PERIOD, Get_class, Get_ep_pipe, Get_nb_supported_interface, host_get_data(), Host_request_resume, Host_request_suspend, host_send_data(), host_send_data_callback, host_send_data_interrupt(), host_set_feature_remote_wakeup, Is_ep_in, Is_host_ready, Is_host_suspended, LED_APPLI_0, LED_APPLI_1, pipe_in, pipe_out, sof_cnt, and tpl_new_device_connected.

Referenced by host_template_task_init(), and main().

00135 {
00136 #if USB_HOST_PIPE_INTERRUPT_TRANSFER == DISABLE
00137   Status_t sta;
00138   U16 nb;
00139 #endif
00140   U8 i;
00141 
00142 #ifdef FREERTOS_USED
00143   portTickType xLastWakeTime;
00144 
00145   xLastWakeTime = xTaskGetTickCount();
00146   while (TRUE)
00147   {
00148     vTaskDelayUntil(&xLastWakeTime, configTSK_USB_HTP_PERIOD);
00149 
00150 #endif  // FREERTOS_USED
00151     // First, check the host controller is in full operating mode with the
00152     // B-device attached and enumerated
00153     if (Is_host_ready())
00154     {
00155       // Put here the code to execute in host mode
00156 
00157 #if BOARD == EVK1100
00158       // For example, display Start-of-Frame counter on LEDs
00159       LED_Display_Field(LED_MONO0_GREEN |
00160                         LED_MONO1_GREEN |
00161                         LED_MONO2_GREEN |
00162                         LED_MONO3_GREEN,
00163                         sof_cnt >> 5);
00164 #elif BOARD == EVK1101 || BOARD == UC3C_EK || BOARD == EVK1104 || BOARD == EVK1105
00165       // For example, display Start-of-Frame counter on LEDs
00166       LED_Display_Field(LED0 |
00167                         LED1,
00168                         sof_cnt >> 5);
00169 #else
00170   #error The display of the SOFs must be defined here.
00171 #endif
00172 
00173       // New device connection (executed only once after device connection)
00174       if (tpl_new_device_connected)
00175       {
00176         tpl_new_device_connected = FALSE;
00177 
00178 #if USB_HOST_PIPE_INTERRUPT_TRANSFER == ENABLE
00179         // No more pipe interrupt transfer pending
00180         busy = FALSE;
00181 #endif
00182 
00183         // For all supported interfaces
00184         for (i = 0; i < Get_nb_supported_interface(); i++)
00185         {
00186           // If vendor-specific class
00187           if (Get_class(i) == VENDOR_CLASS)
00188           {
00189             // Get correct physical pipes associated with IN/OUT endpoints
00190             if (Is_ep_in(i, 0))
00191             { // Yes, associate it with the IN pipe
00192               pipe_in = Get_ep_pipe(i, 0);
00193               pipe_out = Get_ep_pipe(i, 1);
00194             }
00195             else
00196             { // No, invert...
00197               pipe_in = Get_ep_pipe(i, 1);
00198               pipe_out = Get_ep_pipe(i, 0);
00199             }
00200             break;
00201           }
00202         }
00203       }
00204 
00205 #if USB_HOST_PIPE_INTERRUPT_TRANSFER == DISABLE
00206       // The sample task sends 64 bytes through OUT pipe
00207       LED_On(LED_APPLI_0);
00208       sta = host_send_data(pipe_out, sizeof(buf), buf);
00209       LED_Off(LED_APPLI_0);
00210 
00211       // And receives 64 bytes from IN pipe
00212       nb = sizeof(buf);
00213       LED_On(LED_APPLI_1);
00214       sta = host_get_data(pipe_in, &nb, buf);
00215       LED_Off(LED_APPLI_1);
00216 #else
00217       // Similar applicative task under interrupt mode...
00218       if (!busy)
00219       {
00220         busy = TRUE;
00221         LED_On(LED_APPLI_0);
00222         host_send_data_interrupt(pipe_out, sizeof(buf), buf, host_send_data_callback);
00223         LED_Off(LED_APPLI_0);
00224       }
00225 #endif
00226 
00227       // Here is an example of an applicative request to go to USB suspend ...
00228       if (FALSE/* applicative conditions */)
00229       {
00230         host_set_feature_remote_wakeup();
00231         Host_request_suspend();
00232       }
00233     }
00234 
00235     // Here an applicative example of resume request...
00236     if (Is_host_suspended()/* && applicative conditions */)
00237     {
00238       Host_request_resume();
00239     }
00240 #ifdef FREERTOS_USED
00241   }
00242 #endif
00243 }

void host_template_task_init ( void   ) 

This function initializes the high-level host application.

Here initialize specific hardware resources requirements.

Definition at line 102 of file host_template_task.c.

References buf, busy, configTSK_USB_HTP_NAME, configTSK_USB_HTP_PRIORITY, configTSK_USB_HTP_STACK_SIZE, host_template_task(), sof_cnt, and tpl_new_device_connected.

Referenced by main().

00103 {
00104   U8 i;
00105 
00106   sof_cnt = 0;
00107   for (i = 0; i < sizeof(buf); i++) buf[i] = i;
00108 #if USB_HOST_PIPE_INTERRUPT_TRANSFER == ENABLE
00109   busy = FALSE;
00110 #endif
00111   tpl_new_device_connected = FALSE;
00112 
00113 #ifdef FREERTOS_USED
00114   xTaskCreate(host_template_task,
00115               configTSK_USB_HTP_NAME,
00116               configTSK_USB_HTP_STACK_SIZE,
00117               NULL,
00118               configTSK_USB_HTP_PRIORITY,
00119               NULL);
00120 #endif  // FREERTOS_USED
00121 }


Variable Documentation

Pipe_handler host_get_data_callback

Pipe_handler host_send_data_callback


Generated on Fri Feb 19 02:27:50 2010 for AVR32 - USB Enumeration Example by  doxygen 1.5.5