i2c_cmd.h
14.1 KB
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
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
#ifndef _CD_CMD_H_
#define _CD_CMD_H_
/*
description:
this file is used for CD/PC I2C command define
*/
//#undef U8
//#define U8 unsigned char
#define MAX_CMD_PARAM_SIZE 120
typedef struct {
U8 packetLen; //exclude self
U8 cmdType; //key or cmd
U8 cmdCode;
U8 param[MAX_CMD_PARAM_SIZE];
} CMD_PACKET;
typedef struct {
U8 keyCode;
U8 type; //up or down
} KEY_MESSAGE;
/*
key code define
*/
#define KEY_CODE_PLAY_PAUSE 0x01
#define KEY_CODE_STOP 0x02
#define KEY_CODE_OPEN 0x03
#define KEY_CODE_CLOSE 0x04
#define KEY_CODE_DBB 0x05
#define KEY_CODE_FF 0x06
#define KEY_CODE_FR 0x07
//#define KEY_CODE_VOL_PLUS 0x08
//#define KEY_CODE_VOL_MINUS 0x09
#define KEY_SEARCH_FORWARD 0x08
#define KEY_SEARCH_BACKWARD 0x09
#define KEY_CODE_ESP 0x0A
#define KEY_CODE_PROG 0x0B
#define KEY_CODE_DISPLAY 0x0C
#define KEY_CODE_MODE 0x0D
#define KEY_CODE_ALBUM_PLUS 0x0E
#define KEY_CODE_ALBUM_MINUS 0x0F
//#define KEY_CODE_RPT 0x10
#define KEY_CODE_CLR_PROG 0x10
//#define KEY_CODE_RND 0x11
#define KEY_CODE_REC 0x11
#define KEY_CODE_REM 0x12
#define KEY_CODE_INTRO 0x13
//#define KEY_CODE_MEM 0x14
#define KEY_CODE_PAUSE 0x14
#define KEY_CODE_0 0x15
#define KEY_CODE_1 0x16
#define KEY_CODE_2 0x17
#define KEY_CODE_3 0x18
#define KEY_CODE_4 0x19
#define KEY_CODE_5 0x1A
//#define KEY_CODE_6 0x1B
#define KEY_CODE_DEL 0x1B
#define KEY_CODE_7 0x1C
#define KEY_CODE_8 0x1D
#define KEY_CODE_9 0x1E
#define KEY_CODE_10PLUS 0x1F
//virtual key define
#define KEY_VKEY_SOURCE_CD 0x10
#define KEY_VKEY_SOURCE_HDD 0x12
#define CMD_TYPE_KEY 0x01
#define CMD_TYPE_CMD 0x10
//define key up..down
#define I2C_KEYMSG_UP 0x01
#define I2C_KEYMSG_DOWN 0x10
/****************************************************
CMDTYPE command format to slave
struct {
BYTE packetLen; //exclude self
BYTE cmdType; //=CMD_TYPE_CMD
BYTE cmdCode; //command that is one of CMDTYPE
BYTE param[MAX_CMD_PARAM_SIZE];//is null
}
****************************************************/
/****************************************************
key command format to slave
struct {
BYTE packetLen; //exclude self
BYTE cmdType; //=CMD_TYPE_KEY
BYTE cmdCode; //keycode,see key code section for detail
BYTE param[MAX_CMD_PARAM_SIZE];//KEYMSG_UP or KEYMSG_DOWN in param[0],other array is not used
}
****************************************************/
typedef enum {
enSOURCE_CD = 1,
enSOURCE_HDD,
enSOURCE_RADIO,
enSOURCE_AUX
} enum_WORK_SOURCE;
typedef enum {
enMODE_DECODE,
enMODE_ENCODE,
enMODE_RIPPLE
} enum_WORK_MODE;
enum {
PROG_ON,
PROG_OFF
};
/*
enum {
STREAM_UNKNOWN,
STREAM_MP3,
STREAM_MP2,
STREAM_MP1,
STREAM_WMA,
STREAM_AAC,
STREAM_BIN,
STREAM_CDDA
};
enum {
NORMAL_PLAY = 0,
REPEAT_ONE,
REPEAT_DIR,
REPEAT_ALL,
REPEAT_ARTIST,
RANDOM_ALL,
RANDOM_REPEAT_ALL,
RANDOM_IN_DIR, //random dir
RANDOM_IN_DIR_REPEAT_ALL,
RANDOM_ARTIST,
DIR_RANDOM, //random in dir
DIR_RANDOM_REPEAT_ALL,
INTRO_PLAY
}
*/
typedef enum {
enCMD_GET_STATE = 1, //return HDD file rcv/buffer status,full/empty
enCMD_GET_FILE_NAME,
enCMD_GET_FOLDER_NAME,
enCMD_GET_ARTIST,
enCMD_GET_TITLE,
enCMD_GET_STREAM_TYPE,
enCMD_GET_DISC_TYPE,
enCMD_GET_DISC_INFO,
enCMD_GET_PROG_STATUS,
enCMD_SET_SOURCE, //cd/hdd/fm
enCMD_SET_MODE, //ripple/encode/decode
enCMD_HDD_PLAY_TRACK, //track no, start time, file length ...
enCMD_HDD_GET_TXD_START_POS, //calculate by start time
enCMD_HDD_START_FILE_TXD,
enCMD_HDD_START_FILE_RCV,
enCMD_HDD_STOP_TRANCEIVE,
enCMD_HDD_FLUSH_FILE,
enCMD_GET_TRACK_INFO,
enSUBCMD_GET_TRACK_NO,
enSUBCMD_GET_TRACK_NAME,
enSUBCMD_GET_TRACK_ID3,
enSUBCMD_GET_TRACK_BPS_SAMPLE_RATE,
enCMD_GET_PLAYING_INFO,
enCMD_GET_SW_VERSION,
enCMD_GET_PLAYING_TIME,
enCMD_CANCEL
} CMDTYPE;
//return: cd/mp3 disc, total tracks, total folders
/***********************************************
1.enCMD_GET_STATE format that return from slave:
struct {
BYTE len;
BYTE STATE;
#if STATE_PLAYING
..............
#else
WORD ALBM;
WORD TATAL_TRACK;
DWORD TOTAL_TIME;
#endif
}STATE_CONTENT;
***********************************************/
typedef enum {
enSTATE_INIT = 0,
enSTATE_OPEN,
enSTATE_OPENING,
enSTATE_CLOSED,
enSTATE_CLOSING,
enSTATE_READING_TOC,
enSTATE_READING_FILE_SYSTEM,
enSTATE_NO_DISC,
enSTATE_NO_AUDIO_FILES,
enSTATE_DISC_READY,
enSTATE_PLAYING,
enSTATE_PAUSE,
enSTATE_STOP,
enSTATE_BROWSE_TRACK,
enSTATE_BROWSE_ALBUM,
enSTATE_WAIT_MUSIC_INIT,
enSTATE_BUFFER_FULL, //for hdd mode use, buffer full/empty, music end
enSTATE_FATAL_ERR,
enSTATE_NEED_UPGRADE_DISC,
enSTATE_READ_UPGRADE_FILE,
enSTATE_ERASE_FLASH,
enSTATE_PROGRAM_FLASH,
enSTATE_UPGRADE_SUCCESS,
enSTATE_UPGARDE_FAIL,
enSTATE_FAST_PLAYING,
enSTATE_BROWSE_TRACK_10P,
enSTATE_BROWSE_ALBUM_10P,
enSTATE_PLAYING_10P,
enSTATE_PAUSE_10P,
enSTATE_PGM_BROWSE_TRACK,
enSTATE_PGM_BROWSE_TRACK_10P,
enSTATE_PGM_BROWSE_ALBUM
} enum_STATE_MACHINE;
//playing time
#define NO_PLAYING_TIME_INFO -1
#define PLAYING_TIME_NOT_READY -2
#define VBR_PLAYING_TIME_UNKNOWN -3
/*
functions def
*/
int cdcmd_init(void);
int cdcmd_open(void);
int cdcmd_close(void);
int cdcmd_receiveCmdPacket( CMD_PACKET * packet );
int cdcmd_sendKeyMessage( KEY_MESSAGE * keyMsg );
int cdcmd_sendCmd( U8 cmdCode, U8 * param, U8 paramLen );
int cdcmd_cmdSetSource(int source);
int cdcmd_cmdSetMode( int mode );
/*Philips MP3 Module*/
/* actions */
#define AC_Bus_Resync 0x03 /* 3 */
#define AC_Clear_Program 0x05 /* 1 */
#define AC_Get_Track_Album_Name_XY 0x06 /* 3 */
#define AC_Get_Track_Num_In_Album_XY 0x09 /* 1 */
#define AC_Next_Album 0x0a /* 0 */
#define AC_Next_Track 0x0c /* 0 */
#define AC_Pause 0x0f /* 0 */
#define AC_Play 0x11 /* 1 */
#define AC_Play_Track_XY 0x12 /* 4 */
#define AC_Prepare_Power_Down 0x14 /* 0 */
#define AC_Previous_Album 0x17 /* 0 */
#define AC_Previous_Track 0x18 /* 0 */
#define AC_Program_Current_Track 0x1b /* 0 */
#define AC_Read_Disc_Content 0x1d /* 0 */
#define AC_Read_ID3_XY 0x1e /* 3 */
#define AC_Release_Disc 0x21 /* 0 */
#define AC_Search_Backward 0x22 /* 1 */
#define AC_Search_FastBackward 0x23 /* 1 */
#define AC_Search_Forward 0x24 /* 1 */
#define AC_Search_FastForward 0x25 /* 1 */
#define AC_Service_Focus_Search_Restart 0x27 /* 0 */
#define AC_Service_Mode_Enter 0x2b /* 0 */
#define AC_Service_Sledge 0x2d /* 1 */
#define AC_Set_Track_XY 0x2e /* 3 */
#define AC_Stop 0x30 /* 0 */
//add
#define AT_Get_Track_ID3_Aritst 0x33 /* 1 */
#define AT_Get_Track_ID3_Title 0x35 /* 1 */
//Test
#define AT_Get_Track_ID3_Aritst_Test 0x37 /* 1 */
#define AT_Get_Track_ID3_Album_Test 0x38 /* 1 */
#define AT_Get_Track_ID3_Title_Test 0x39 /* 1 */
#define AT_Get_Track_Folder_Name 0x40 /* 1 */
#define AT_Get_Album_Info 0x41 /* 1 */
/* attributes */
#define AT_Fetch_Event 0x60 /* 0 */
#define AT_Get_Current_Bitrate 0x63 /* 0 */
#define AT_Get_Current_Compression_Algorithm 0x65 /* 0 */
#define AT_Get_Current_Progress_Info 0x77 /* 0 */
#define AT_Get_Current_Samplerate 0x66 /* 0 */
#define AT_Get_Current_Time 0x69 /* 0 */
#define AT_Get_Current_Track_Album_Number 0x6a /* 0 */
//#define AT_Get_ID3_Tag 0x6c /* 1 */
#define AT_Get_Module_Type 0x6f /* 0 */
#define AT_Get_Play_Mode 0x71 /* 0 */
#define AT_Get_Program_Details 0x72 /* 0 */
#define AT_Get_Program_Element 0x74 /* 1 */
#define AT_Get_State 0x78 /* 0 */
#define AT_Get_SW_Version 0x7b /* 0 */
#define AT_Get_Track_Length_XY 0x7d /* 3 */
#define AT_Set_Max_Name_Length 0x7e /* 1 */
#define AT_Set_Module_Type 0x81 /* 4 */
/* events */
#define EV_Disc_Contents_Ready 0xb1 /* 8 */
#define EV_Disc_Error 0xb2 /* 1 */
#define EV_Disc_Stopped 0xb4 /* 0 */
#define EV_Display_Info_Changed 0xb7 /* 1 */
#define EV_File_Fragmented 0xbd /* 0 */
#define EV_Invalid_Data_Received 0xbb /* 0 */
#define EV_No_Event 0xb8 /* 0 */
#define EV_Send_Buffer_Full 0xbe /* 0 */
#define EV_Service_Focus_Status 0xc0 /* 1 */
#define EV_Slave_Off 0xff /* 0 */
#define EV_State 0xc3 /* 1 */
#define EV_Track_Album_Name_XY 0xc5 /* 3+x */
#define EV_Track_Num_In_Album_XY 0xc6 /* 3 */
#define EV_USB 0xc7 /* 3 */
//add
#define EV_Track_ID3_Artist 0xa1 /* 3+x */
#define EV_Track_ID3_Title 0xa4 /* 3+x */
#define EV_Track_ID3_ALBUM 0xa2 /* 3+x */
#define EV_Album_INFO 0xa3 /* 3+x */
/*MP3 Modlue State*/
#define MSTATE_POWEROFF 0 /* ready for power off */
#define MSTATE_IDLE 1 /* idle (no TOC) */
#define MSTATE_TOCREAD 2 /* TOC reading */
#define MSTATE_ID3READ 3 /* ID3 reading */
#define MSTATE_STOP 4 /* stop */
#define MSTATE_PLAY 5 /* play */
#define MSTATE_SERVICE 6 /* service */
/* repeat state */
#define REPEAT_OFF 0
#define REPEAT_TRACK 7
#define REPEAT_DISC 5
#define SHUFFLE_OFF 0
#define SHUFFLE_ALL 1
#define REPEAT_SHUFFLE_ALL 2
#define MSTATE_USB_PLUG_IN 8
#define MSTATE_USB_NO_CARD_READER 9
#define MSTATE_USB_NO_USB_DEVICE 10
#define MSTATE_USB_FILE_SYSTEM_ERROR 11
#define MSTATE_USB_NO_AUDIO_FILES 12
#define MSTATE_USB_DEVICE_UNPLUG 13
#define MSTATE_USB_ERROR_PLAYING_MUSIC 14
#define MSTATE_USB_DEVICE_NOT_SURPPORT 15
#define MSTATE_USB_UPGRADEING 16
#define MSTATE_USB_UPGRADE_SUCCESS 17
#define MSTATE_USB_UPGRADE_FAILURE 18
#define MSTATE_USB_SLOW_USB 19
#define AT_Get_Usb_Bitrate 0x87
#define EV_USB_Bitrate 0xc9
#define MODULE_BITRATE_OK 0
#define MODULE_BITRATE_NO_USB 1
#define MODULE_BITRATE_NO_TEST_FILE 2
#define MODULE_BITRATE_TEST_ERROR 3
#define AC_Sop_Ripping 0x83
/*------------------------------------------------------------------------------------------------------------------*/
#define AC_Start_Ripping 0x84
#define START_RIPPING_DISC 0
#define START_RIPPING_PROGRAM 1
#define START_RIPPING_ALBUM 2
#define START_RIPPING_TRACK 3
#define START_RIPPING_PLAYLIST 4
#define START_RIPPING_TO_END 5
/* acRParam[0]: 0: ripping disc 1:ripping program 2:ripping album
3: ripping track 4:ripping playlist 5:ripping from current track to end
acRParam[1]: track number high byte
acRParam[2]: track number low byte
acRParam[3]: album number
*/
/*------------------------------------------------------------------------------------------------------------------*/
#define AC_Del_Ripping 0x85
#define DEL_RIPPING_DISC 0
#define DEL_RIPPING_PROGRAM 1
#define DEL_RIPPING_ALBUM 2
#define DEL_RIPPING_TRACK 3
#define DEL_RIPPING_PLAYLIST 4
#define DEL_RIPPING_TO_END 5
/* acRParam[0]: 0: ripping disc 1:ripping program 2:ripping album 3: ripping track 4:ripping playlist
acRParam[1]: track number high byte
acRParam[2]: track number low byte
acRParam[3]: album number
*/
/*------------------------------------------------------------------------------------------------------------------*/
#define AT_Set_Ripping_Quality 0x86
/*
acRParam[0]: 0: 128k bps 1:96k bps 2:48k bps
*/
/*------------------------------------------------------------------------------------------------------------------*/
#define EV_USB_Ripping 0xc8
#define MODULE_RIPPING_DISC 0
#define MODULE_RIPPING_PROGRAM 1
#define MODULE_RIPPING_ALBUM 2
#define MODULE_RIPPING_TRACK 3
#define MODULE_RIPPING_PLAYLIST 4
#define MODULE_RIPPING_TO_END 5
#define MODULE_RIPPING_INVALID 6
#define MODULE_RIPPING_NO_DEVICE 7
#define MODULE_RIPPING_PROTECTED_CD 8
#define MODULE_RIPPING_WMA_DRM 9
#define MODULE_RIPPING_FILE_EXIST 10
#define MODULE_DEL_DISC 0x10
#define MODULE_DEL_PROGRAM 0x11
#define MODULE_DEL_ALBUM 0x12
#define MODULE_DEL_TRACK 0x13
#define MODULE_DEL_PLAYLIST 0x14
#define MODULE_DEL_TO_END 0x15
#define MODULE_DEL_INVALID 0x16
#define MODULE_DEL_ERROR 0x17
#define MODULE_RIPPING_USER_STOP 0x20
#define MODULE_RIPPING_END_STOP 0x21
#define MODULE_RIPPING_ERROR_STOP 0x22
#define MODULE_RIPPING_USB_FULL_STOP 0x23
#define MODULE_RIPPING_NUMBER_FULL_STOP 0x24
#define MODULE_RIPPING_NO_USB 0x25
#define MODULE_RIPPING_DEVICE_NOT_SUPPORT 0X26
#define MODULE_RIPPING_SYSTEM_NOT_SUPPORT 0X27
/*
acRParam[0]: 0: ripping disc 1:ripping program 2:ripping album
3: ripping track 4:ripping playlist 5:ripping from current track to end 6:ripping invalid
0x10:del disc 0x11:del program 0x12:del album
0x13:del track 0x14:del playlist 0x15:del from current track to end 0x16:del invalid
0x20:user stop 0x21:end stop 0x22:error stop 0x23:usb full stop 0x24:number full stop
acRParam[1]: track number high byte
acRParam[2]: track number low byte
acRParam[3]: album number
*/
//#endif
#endif // _CD_CMD_H_