1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
21
24
32
33
36
39
40
41
42
43
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
90
92
93
94
95
96
97
99
100
101
102
103
108
109
110
111
112
113
114
115
116
117
118
119
124
129
130
135
136
137
138
139
140
141
142
143
144
156
161
162
163
164
169
170
171
172
173
174
175
179
180
181
182
183
184
185
186
187
188
/* ... */
#include "main.h"
Includes
#define RX_BUFF_SIZE 0x400
Private define
uint8_t *DEMO_RECEIVE_menu[] =
{
(uint8_t *)" 1 - Start receiving data ",
(uint8_t *)" 2 - Return ",
(uint8_t *)" ",
...};
Private typedef
uint16_t xPos, yLinePos;
Private variables
uint8_t CDC_RX_Buffer[RX_BUFF_SIZE];
Private function prototypes
static void DumpReceivedData(void);
static void ReturnFromReceiveMenu(void);
/* ... */
void CDC_Handle_Receive_Menu(void)
{
switch(CdcDemo.Receive_state)
{
case CDC_RECEIVE_IDLE:
CdcDemo.Receive_state = CDC_RECEIVE_WAIT;
CDC_SelectItem(DEMO_RECEIVE_menu, 0);
CdcDemo.select = 0;
USBH_CDC_Stop(&hUSBHost);
BSP_LCD_SetTextColor(LCD_COLOR_GREEN);
BSP_LCD_DisplayStringAtLine(14, (uint8_t *)" ");
BSP_LCD_DisplayStringAtLine(15, (uint8_t *)"Use [Buttons Left/Right] to scroll up/down");
break;
case CDC_RECEIVE_IDLE:
case CDC_RECEIVE_WAIT:
if(CdcDemo.select != PrevSelect)
{
PrevSelect = CdcDemo.select;
CDC_SelectItem(DEMO_RECEIVE_menu, CdcDemo.select & 0x7F);
if(CdcDemo.select & 0x80)
{
switch(CdcDemo.select & 0x7F)
{
case 0:
BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
LCD_ClearTextZone();
BSP_LCD_DisplayStringAtLine(3, (uint8_t *)"Receiving data ...");
xPos = 0;
yLinePos = 4;
memset(CDC_RX_Buffer, 0, RX_BUFF_SIZE);
USBH_CDC_Receive(&hUSBHost, CDC_RX_Buffer, RX_BUFF_SIZE);
CdcDemo.Receive_state = CDC_RECEIVE_WAIT;
break;
case 0:
case 1:
BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
USBH_CDC_Stop(&hUSBHost);
ReturnFromReceiveMenu();
break;
case 1:
default:
break;default
}switch (CdcDemo.select & 0x7F) { ... }
}if (CdcDemo.select & 0x80) { ... }
}if (CdcDemo.select != PrevSelect) { ... }
break;
case CDC_RECEIVE_WAIT:
default:
break;default
}switch (CdcDemo.Receive_state) { ... }
CdcDemo.select &= 0x7F;
}{ ... }
/* ... */
static void ReturnFromReceiveMenu(void)
{
CdcDemo.state = CDC_DEMO_IDLE;
CdcDemo.select = 0;
LCD_ClearTextZone();
LCD_LOG_UpdateDisplay();
Menu_Init();
}{ ... }
/* ... */
void USBH_CDC_ReceiveCallback(USBH_HandleTypeDef *phost)
{
DumpReceivedData();
USBH_CDC_Receive(&hUSBHost, CDC_RX_Buffer, RX_BUFF_SIZE);
}{ ... }
/* ... */
static void DumpReceivedData(void)
{
uint16_t size;
uint8_t *ptr = CDC_RX_Buffer;
size = USBH_CDC_GetLastReceivedDataSize(&hUSBHost);
BSP_LCD_SetTextColor(LCD_COLOR_YELLOW);
while(size--)
{
if((*ptr != '\n') && (*ptr != '\r'))
{
if(*ptr == '\t')
{
BSP_LCD_DisplayChar(xPos, LINE(yLinePos), ' ');
}if (*ptr == '\t') { ... }
else
{
BSP_LCD_DisplayChar(xPos, LINE(yLinePos), *ptr);
}else { ... }
xPos += 7;
}if ((*ptr != '\n') && (*ptr != '\r')) { ... }
else if(*ptr == '\n')
{
yLinePos++;
xPos = 0;
}else if (*ptr == '\n') { ... }
ptr++;
if(xPos > (BSP_LCD_GetXSize() - 7))
{
xPos = 0;
yLinePos++;
}if (xPos > (BSP_LCD_GetXSize() - 7)) { ... }
if(yLinePos > 13)
{
BSP_LCD_SetTextColor(LCD_COLOR_GREEN);
BSP_LCD_DisplayStringAtLine(15, (uint8_t *)"Use [User Key] to see more data");
while(BSP_PB_GetState(BUTTON_KEY) != RESET)
{
}while (BSP_PB_GetState(BUTTON_KEY) != RESET) { ... }
LCD_ClearTextZone();
BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
BSP_LCD_DisplayStringAtLine(3, (uint8_t *)"Receiving data ...");
BSP_LCD_SetTextColor(LCD_COLOR_YELLOW);
xPos = 0;
yLinePos = 4;
}if (yLinePos > 13) { ... }
}while (size--) { ... }
}{ ... }