+++ /dev/null
-/* usbtest.c */\r
-#include <string.h>\r
-\r
-#include "kernel.h"\r
-#include "kernel_id.h"\r
-\r
-#include "ecrobot_interface.h"\r
-#include "usb_test.h"\r
-\r
-/* OSEK declarations */\r
-DeclareTask(Task_ts1);\r
-DeclareTask(Task_background);\r
-DeclareResource(USB_Rx);\r
-DeclareCounter(SysTimerCnt);\r
-\r
-#define MAX_NUM_OF_CHAR 16\r
-#define MAX_NUM_OF_LINE 8\r
-\r
-static int pos_x = 0;\r
-static int pos_y = 0;\r
-\r
-static void showInitScreen(void)\r
-{\r
- pos_x = 0;\r
- pos_y = 0;\r
-\r
- display_clear(0);\r
- display_goto_xy(0, 0);\r
- display_string("USB TEST");\r
- display_goto_xy(0, 1);\r
- display_string("Run usbhost.exe");\r
- display_update(); \r
-}\r
-\r
-static void display_usb_data(U8 *data, int len)\r
-{\r
- int i;\r
-\r
- /* set LCD postion in x, y */\r
- if (pos_x >= MAX_NUM_OF_CHAR)\r
- {\r
- pos_x = 0;\r
- pos_y++;\r
- }\r
-\r
- if (pos_y >= MAX_NUM_OF_LINE)\r
- {\r
- pos_x = 0;\r
- pos_y = 0;\r
- }\r
- \r
- if (pos_x == 0 && pos_y == 0)\r
- {\r
- display_clear(0);\r
- }\r
- display_goto_xy(pos_x, pos_y);\r
-\r
- for (i = 0; i < len; i++)\r
- {\r
- if (data[i] == '\n')\r
- {\r
- pos_x = 0;\r
- pos_y++;\r
- break;\r
- }\r
- else\r
- {\r
- display_string((char *)&data[i]);\r
- display_update();\r
- if (i == (len - 1))\r
- {\r
- pos_x += len;\r
- break;\r
- }\r
- }\r
- }\r
-}\r
-\r
-/* ECRobot hooks */\r
-void ecrobot_device_initialize()\r
-{\r
- ecrobot_init_usb(); /* init USB */\r
-}\r
-\r
-void ecrobot_device_terminate()\r
-{\r
- ecrobot_term_usb(); /* terminate USB */\r
-}\r
-\r
-/* nxtOSEK hook to be invoked from an ISR in category 2 */\r
-void user_1ms_isr_type2(void)\r
-{\r
- /* Increment System Timer Count to activate periodical Tasks */\r
- (void)SignalCounter(SysTimerCnt);\r
-}\r
-\r
-/* 1msec periodical Task */\r
-TASK(Task_ts1)\r
-{\r
- GetResource(USB_Rx);\r
- ecrobot_process1ms_usb(); /* USB process handler (must be invoked every 1msec) */\r
- ReleaseResource(USB_Rx);\r
-\r
- TerminateTask();\r
-}\r
-\r
-/* background Task */\r
-TASK(Task_background)\r
-{\r
- int len;\r
- U8 data[MAX_USB_DATA_LEN]; /* first byte is preserved for disconnect request from host */\r
-\r
- showInitScreen();\r
-\r
- while(1)\r
- {\r
- memset(data, 0, MAX_USB_DATA_LEN); /* flush buffer */\r
- /* critical section */\r
- GetResource(USB_Rx);\r
- len = ecrobot_read_usb(data, 0, MAX_USB_DATA_LEN); /* read USB data */\r
- ReleaseResource(USB_Rx);\r
-\r
- if (len > 0)\r
- {\r
- if (data[0] == DISCONNECT_REQ)\r
- {\r
- /* disconnect current connection */\r
- ecrobot_disconnect_usb();\r
- showInitScreen();\r
- }\r
- else\r
- {\r
- data[0] = 0x00;\r
- ecrobot_send_usb(data, 0, len); /* send back received USB data */\r
- display_usb_data(&data[1], len-1);\r
- }\r
- }\r
- }\r
-}\r