Select one of the symbols to view example projects that use it.
 
Outline
Includes
#include "waveplayer.h"
#include "waverecorder.h"
Private define
#define TOUCH_RECORD_XMIN
#define TOUCH_RECORD_XMAX
#define TOUCH_RECORD_YMIN
#define TOUCH_RECORD_YMAX
#define TOUCH_PLAYBACK_XMIN
#define TOUCH_PLAYBACK_XMAX
#define TOUCH_PLAYBACK_YMIN
#define TOUCH_PLAYBACK_YMAX
Private variables
AudioDemo
AudioState
Private function prototypes
AUDIO_MenuProcess()
AUDIO_ChangeSelectMode(AUDIO_DEMO_SelectMode)
LCD_ClearTextZone()
Files
loading...
CodeScopeSTM32 Libraries and SamplesAudio_playback_and_recordSrc/menu.c
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/** ****************************************************************************** * @file Audio/Audio_playback_and_record/Src/menu.c * @author MCD Application Team * @brief This file implements Menu Functions ****************************************************************************** * @attention * * Copyright (c) 2017 STMicroelectronics. * All rights reserved. * * This software is licensed under terms that can be found in the LICENSE file * in the root directory of this software component. * If no LICENSE file comes with this software, it is provided AS-IS. * ****************************************************************************** *//* ... */ /* Includes ------------------------------------------------------------------*/ #include "waveplayer.h" #include "waverecorder.h" Includes /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ #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 /* Private macro -------------------------------------------------------------*/ /* Global extern variables ---------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ AUDIO_DEMO_StateMachine AudioDemo; AUDIO_PLAYBACK_StateTypeDef AudioState; Private variables /* Private function prototypes -----------------------------------------------*/ static void AUDIO_ChangeSelectMode(AUDIO_DEMO_SelectMode select_mode); static void LCD_ClearTextZone(void); Private function prototypes /* Private functions ---------------------------------------------------------*/ /** * @brief Manages AUDIO Menu Process. * @param None * @retval None *//* ... */ 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); /* Clear touch screen buttons dedicated zone */ 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); /* Playback sign */ BSP_LCD_FillCircle((TOUCH_RECORD_XMAX+TOUCH_RECORD_XMIN)/2, /* Record circle */ (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 { ... } /* Wait for touch released */ 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 { /* Start Playing */ AudioState = AUDIO_STATE_INIT; }else { ... } /* Clear the LCD */ 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 /* Not idle */ { if(AUDIO_PLAYER_Process() == AUDIO_ERROR_IO) { /* Clear the LCD */ 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) { /* Start Playing */ AudioState = AUDIO_STATE_INIT; /* Clear the LCD */ LCD_ClearTextZone(); /* Init storage */ AUDIO_StorageInit(); /* Configure the audio recorder: sampling frequency, bits-depth, number of channels */ 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 /* Not idle */ { status = AUDIO_REC_Process(); if((status == AUDIO_ERROR_IO) || (status == AUDIO_ERROR_EOF)) { /* Clear the LCD */ 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 Functions *******************************************************************************//* ... */ /** * @brief Changes the selection mode. * @param select_mode: Selection mode * @retval None *//* ... */ 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) { ... } }{ ... } /** * @brief Clears the text zone. * @param None * @retval None *//* ... */ 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++) { ... } }{ ... }