1 /*
2 * Copyright (c) 2006-2023, RT-Thread Development Team
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 *
6 * Change Logs:
7 * Date           Author       Notes
8 * 2023-03-29     Rbb666       the first version
9 */
10 
11 #ifndef PLAYER_H
12 #define PLAYER_H
13 
14 #include <rtthread.h>
15 #include <rthw.h>
16 
17 #include "drv_jpeg.h"
18 
19 #define PLAYER_SOUND_SIZE_DEFAULT     0
20 #define PLAYER_SONG_NUM_MAX          20
21 #define PLAYER_SONG_NAME_LEN_MAX     32
22 
23 enum PLAYER_STATUS
24 {
25     PLAYER_IDLE,
26     PLAYER_READY,
27     PLAYER_RUNNING,
28     PLAYER_STOP,
29     PLAYER_DELETE,
30     PLAYER_LAST,
31     PLAYER_NEXT,
32 };
33 enum PLAYER_CMD
34 {
35     PLAYER_CMD_INIT,
36     PLAYER_CMD_PLAY,
37     PLAYER_CMD_STOP,
38     PLAYER_CMD_LAST,
39     PLAYER_CMD_NEXT,
40     PLAYER_CMD_SET_VOL,
41     PLAYER_CMD_GET_VOL,
42     PLAYER_CMD_GET_STATUS
43 };
44 enum AUDIO_OPS_CMD
45 {
46     AUDIO_OPS_CMD_SET_VOL
47 };
48 enum DECODE_OPS_CMD
49 {
50     DECODE_OPS_CMD_GET_NAME,
51     DECODE_OPS_CMD_GET_LEN
52 };
53 
54 struct audio_ops
55 {
56     int (*init)(void);
57     int (*open)(void);
58     int (*close)(void);
59     int (*control)(int cmd, void *arg);
60     int (*write)(void *buffer, int size);
61 };
62 
63 struct player
64 {
65     enum PLAYER_STATUS  status;             /*state*/
66     int16_t             volume;             /*Sound Size*/
67     uint8_t             song_current;       /*Playing video*/
68     uint8_t             video_num;          /*Total number of videos*/
69     uint16_t            song_time_pass;     /*Played time*/
70     uint16_t            song_time_all;      /*Played all time*/
71     char  *             video_list[PLAYER_SONG_NUM_MAX];
72     char                video_name[PLAYER_SONG_NAME_LEN_MAX];
73 
74     rt_sem_t            sem_play;
75     rt_thread_t         play_thread;
76 
77     struct audio_ops    *audio;
78     decode_drv_t        *decode;
79 };
80 typedef struct player *player_t;
81 
82 int player_add_song(player_t player, void *song);
83 int player_start(player_t player);
84 int player_control(player_t player, int cmd, void *arg);
85 int player_show(player_t player);
86 int player_delete(player_t player);
87 
88 #endif
89