1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
43
47
48
49
54
55
56
57
58
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
99
104
108
109
110
111
114
115
116
117
137
138
139
140
141
142
148
153
154
155
156
157
162
163
164
165
166
167
168
169
170
171
172
173
174
175
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
219
220
221
223
224
225
226
232
233
234
237
238
243
255
256
261
/* ... */
#include "waveplayer.h"
#include "waverecorder.h"
Includes
#define TOUCH_RECORD_XMIN 370
#define TOUCH_RECORD_XMAX 430
#define TOUCH_RECORD_YMIN 260
#define TOUCH_RECORD_YMAX 320
#define TOUCH_PLAYBACK_XMIN 200
#define TOUCH_PLAYBACK_XMAX 260
#define TOUCH_PLAYBACK_YMIN 260
#define TOUCH_PLAYBACK_YMAX 320
8 defines
Private define
AUDIO_DEMO_StateMachine AudioDemo;
AUDIO_PLAYBACK_StateTypeDef AudioState;
Private variables
static void AUDIO_ChangeSelectMode(AUDIO_DEMO_SelectMode select_mode);
static void LCD_ClearTextZone(void);
Private function prototypes
/* ... */
void AUDIO_MenuProcess(void)
{
AUDIO_ErrorTypeDef status;
TS_StateTypeDef TS_State;
Point PlaybackLogoPoints[] = {{TOUCH_PLAYBACK_XMIN, TOUCH_PLAYBACK_YMIN},
{TOUCH_PLAYBACK_XMAX, (TOUCH_PLAYBACK_YMIN+TOUCH_PLAYBACK_YMAX)/2},
{TOUCH_PLAYBACK_XMIN, TOUCH_PLAYBACK_YMAX}...};
if(AppliState == APPLICATION_READY)
{
switch(AudioDemo.state)
{
case AUDIO_DEMO_IDLE:
AudioDemo.state = AUDIO_DEMO_WAIT;
BSP_LCD_SetFont(&LCD_LOG_HEADER_FONT);
BSP_LCD_ClearStringLine(14);
BSP_LCD_ClearStringLine(15);
BSP_LCD_ClearStringLine(16);
BSP_LCD_ClearStringLine(17);
BSP_LCD_ClearStringLine(18);
BSP_LCD_ClearStringLine(19);
BSP_LCD_ClearStringLine(20);
BSP_LCD_SetTextColor(LCD_COLOR_CYAN);
BSP_LCD_FillPolygon(PlaybackLogoPoints, 3);
BSP_LCD_FillCircle((TOUCH_RECORD_XMAX+TOUCH_RECORD_XMIN)/2,
(TOUCH_RECORD_YMAX+TOUCH_RECORD_YMIN)/2,
(TOUCH_RECORD_XMAX-TOUCH_RECORD_XMIN)/2);
BSP_LCD_SetTextColor(LCD_COLOR_GREEN);
BSP_LCD_SetFont(&LCD_LOG_HEADER_FONT);
BSP_LCD_DisplayStringAtLine(14, (uint8_t *)" Use touch screen to enter playback or record menu");
BSP_LCD_SetFont(&LCD_LOG_TEXT_FONT);
break;
case AUDIO_DEMO_IDLE:
case AUDIO_DEMO_WAIT:
BSP_TS_GetState(&TS_State);
if(TS_State.touchDetected == 1)
{
if ((TS_State.touchX[0] > TOUCH_RECORD_XMIN-20) && (TS_State.touchX[0] < TOUCH_RECORD_XMAX+20) &&
(TS_State.touchY[0] > TOUCH_RECORD_YMIN-20) && (TS_State.touchY[0] < TOUCH_RECORD_YMAX+20))
{
AudioDemo.state = AUDIO_DEMO_IN;
}if ((TS_State.touchX[0] > TOUCH_RECORD_XMIN-20) && (TS_State.touchX[0] < TOUCH_RECORD_XMAX+20) && (TS_State.touchY[0] > TOUCH_RECORD_YMIN-20) && (TS_State.touchY[0] < TOUCH_RECORD_YMAX+20)) { ... }
else if ((TS_State.touchX[0] > TOUCH_PLAYBACK_XMIN-20) && (TS_State.touchX[0] < TOUCH_PLAYBACK_XMAX+20) &&
(TS_State.touchY[0] > TOUCH_PLAYBACK_YMIN-20) && (TS_State.touchY[0] < TOUCH_PLAYBACK_YMAX+20))
{
AudioDemo.state = AUDIO_DEMO_PLAYBACK;
}else if ((TS_State.touchX[0] > TOUCH_PLAYBACK_XMIN-20) && (TS_State.touchX[0] < TOUCH_PLAYBACK_XMAX+20) && (TS_State.touchY[0] > TOUCH_PLAYBACK_YMIN-20) && (TS_State.touchY[0] < TOUCH_PLAYBACK_YMAX+20)) { ... }
else
{
AudioDemo.state = AUDIO_DEMO_EXPLORE;
}else { ... }
do
{
BSP_TS_GetState(&TS_State);
...}while(TS_State.touchDetected > 0);
}if (TS_State.touchDetected == 1) { ... }
break;
case AUDIO_DEMO_WAIT:
case AUDIO_DEMO_EXPLORE:
if(AppliState == APPLICATION_READY)
{
if(AUDIO_ShowWavFiles() > 0)
{
LCD_ErrLog("There is no WAV file on the USB Key.\n");
AUDIO_ChangeSelectMode(AUDIO_SELECT_MENU);
AudioDemo.state = AUDIO_DEMO_IDLE;
}if (AUDIO_ShowWavFiles() > 0) { ... }
else
{
AudioDemo.state = AUDIO_DEMO_WAIT;
}else { ... }
}if (AppliState == APPLICATION_READY) { ... }
else
{
AudioDemo.state = AUDIO_DEMO_WAIT;
}else { ... }
break;
case AUDIO_DEMO_EXPLORE:
case AUDIO_DEMO_PLAYBACK:
if(AppliState == APPLICATION_READY)
{
if(AudioState == AUDIO_STATE_IDLE)
{
if(AUDIO_ShowWavFiles() > 0)
{
LCD_ErrLog("There is no WAV file on the USB Key.\n");
AUDIO_ChangeSelectMode(AUDIO_SELECT_MENU);
AudioDemo.state = AUDIO_DEMO_IDLE;
}if (AUDIO_ShowWavFiles() > 0) { ... }
else
{
AudioState = AUDIO_STATE_INIT;
}else { ... }
LCD_ClearTextZone();
if(AUDIO_PLAYER_Start(0) == AUDIO_ERROR_IO)
{
AUDIO_ChangeSelectMode(AUDIO_SELECT_MENU);
AudioDemo.state = AUDIO_DEMO_IDLE;
}if (AUDIO_PLAYER_Start(0) == AUDIO_ERROR_IO) { ... }
}if (AudioState == AUDIO_STATE_IDLE) { ... }
else
{
if(AUDIO_PLAYER_Process() == AUDIO_ERROR_IO)
{
LCD_ClearTextZone();
AUDIO_ChangeSelectMode(AUDIO_SELECT_MENU);
AudioDemo.state = AUDIO_DEMO_IDLE;
}if (AUDIO_PLAYER_Process() == AUDIO_ERROR_IO) { ... }
}else { ... }
}if (AppliState == APPLICATION_READY) { ... }
else
{
AudioDemo.state = AUDIO_DEMO_WAIT;
}else { ... }
break;
case AUDIO_DEMO_PLAYBACK:
case AUDIO_DEMO_IN:
if(AppliState == APPLICATION_READY)
{
if(AudioState == AUDIO_STATE_IDLE)
{
AudioState = AUDIO_STATE_INIT;
LCD_ClearTextZone();
AUDIO_StorageInit();
if(AUDIO_REC_Start() == AUDIO_ERROR_IO)
{
AUDIO_ChangeSelectMode(AUDIO_SELECT_MENU);
AudioDemo.state = AUDIO_DEMO_IDLE;
}if (AUDIO_REC_Start() == AUDIO_ERROR_IO) { ... }
}if (AudioState == AUDIO_STATE_IDLE) { ... }
else
{
status = AUDIO_REC_Process();
if((status == AUDIO_ERROR_IO) || (status == AUDIO_ERROR_EOF))
{
LCD_ClearTextZone();
AUDIO_ChangeSelectMode(AUDIO_SELECT_MENU);
AudioDemo.state = AUDIO_DEMO_IDLE;
}if ((status == AUDIO_ERROR_IO) || (status == AUDIO_ERROR_EOF)) { ... }
}else { ... }
}if (AppliState == APPLICATION_READY) { ... }
else
{
AudioDemo.state = AUDIO_DEMO_WAIT;
}else { ... }
break;
case AUDIO_DEMO_IN:
default:
break;default
}switch (AudioDemo.state) { ... }
}if (AppliState == APPLICATION_READY) { ... }
if(AppliState == APPLICATION_DISCONNECT)
{
AppliState = APPLICATION_IDLE;
AUDIO_ChangeSelectMode(AUDIO_SELECT_MENU);
BSP_AUDIO_OUT_Stop(CODEC_PDWN_SW);
}if (AppliState == APPLICATION_DISCONNECT) { ... }
}{ ... }
/* ... */
/* ... */
static void AUDIO_ChangeSelectMode(AUDIO_DEMO_SelectMode select_mode)
{
if(select_mode == AUDIO_SELECT_MENU)
{
LCD_LOG_UpdateDisplay();
AudioDemo.state = AUDIO_DEMO_IDLE;
}if (select_mode == AUDIO_SELECT_MENU) { ... }
else if(select_mode == AUDIO_PLAYBACK_CONTROL)
{
LCD_ClearTextZone();
}else if (select_mode == AUDIO_PLAYBACK_CONTROL) { ... }
}{ ... }
/* ... */
static void LCD_ClearTextZone(void)
{
uint8_t i = 0;
for(i= 0; i < 13; i++)
{
BSP_LCD_ClearStringLine(i + 3);
}for (i= 0; i < 13; i++) { ... }
}{ ... }