42#define CHIP_NAME "Waytronic Electronic WT588E02B"
43#define MANUFACTURER_NAME "Waytronic Electronic"
44#define SUPPLY_VOLTAGE_MIN 2.0f
45#define SUPPLY_VOLTAGE_MAX 5.5f
46#define MAX_CURRENT 16.0f
47#define TEMPERATURE_MIN -20.0f
48#define TEMPERATURE_MAX 85.0f
49#define DRIVER_VERSION 1000
54#define WT588E02B_COMMAND_PLAY 0xF0
55#define WT588E02B_COMMAND_VOL 0xF1
56#define WT588E02B_COMMAND_PLAY_LOOP 0xF2
57#define WT588E02B_COMMAND_PLAY_LIST 0xF3
58#define WT588E02B_COMMAND_STOP 0xFF
59#define WT588E02B_COMMAND_UPDATE_ADDR 0xE0
60#define WT588E02B_COMMAND_UPDATE_ALL 0xE1
61#define WT588E02B_COMMAND_UPDATE_STATUS 0xDF
62#define WT588E02B_COMMAND_UPDATE_END 0xEF
105static uint8_t a_wt588e02b_write_with_no_cs(
wt588e02b_handle_t *handle, uint32_t us, uint8_t data)
111 for (i = 0; i < 8; i++)
113 mosi = (data >> (7 - i)) & 0x01;
147static uint8_t a_wt588e02b_read_with_no_cs(
wt588e02b_handle_t *handle, uint32_t us, uint8_t *data)
159 for (i = 0; i < 8; i++)
179 *data |= 1 << (7 - i);
206 handle->
debug_print(
"wt588e02b: sclk gpio write failed.\n");
213 handle->
debug_print(
"wt588e02b: cs gpio write failed.\n");
221 handle->
debug_print(
"wt588e02b: write with no cs failed.\n");
226 res = a_wt588e02b_read_with_no_cs(handle, 20, &data1);
229 handle->
debug_print(
"wt588e02b: read with no cs failed.\n");
234 res = a_wt588e02b_read_with_no_cs(handle, 20, &data2);
237 handle->
debug_print(
"wt588e02b: read2 with no cs failed.\n");
241 *sum = (uint16_t)((uint16_t)(data2) << 8) | data1;
245 handle->
debug_print(
"wt588e02b: cs gpio write failed.\n");
270 handle->
debug_print(
"wt588e02b: sclk gpio write failed.\n");
277 handle->
debug_print(
"wt588e02b: cs gpio write failed.\n");
285 handle->
debug_print(
"wt588e02b: write with no cs failed.\n");
291 res = a_wt588e02b_write_with_no_cs(handle, 100, addr);
294 handle->
debug_print(
"wt588e02b: write with no cs failed.\n");
302 handle->
debug_print(
"wt588e02b: cs gpio write failed.\n");
326 handle->
debug_print(
"wt588e02b: sclk gpio write failed.\n");
333 handle->
debug_print(
"wt588e02b: cs gpio write failed.\n");
341 handle->
debug_print(
"wt588e02b: write with no cs failed.\n");
347 res = a_wt588e02b_write_with_no_cs(handle, 100, 0xFF);
350 handle->
debug_print(
"wt588e02b: write with no cs failed.\n");
358 handle->
debug_print(
"wt588e02b: cs gpio write failed.\n");
381 handle->
debug_print(
"wt588e02b: sclk gpio write failed.\n");
388 handle->
debug_print(
"wt588e02b: cs gpio write failed.\n");
396 handle->
debug_print(
"wt588e02b: write with no cs failed.\n");
403 handle->
debug_print(
"wt588e02b: cs gpio write failed.\n");
421static uint8_t a_update_send_pack(
wt588e02b_handle_t *handle, uint8_t *buf, uint16_t len)
431 handle->
debug_print(
"wt588e02b: sclk gpio write failed.\n");
438 handle->
debug_print(
"wt588e02b: cs gpio write failed.\n");
442 for (i = 0; i < len; i++)
445 res = a_wt588e02b_write_with_no_cs(handle, 2, buf[i]);
448 handle->
debug_print(
"wt588e02b: write with no cs failed.\n");
454 check = check | ((uint16_t)(buf[i]) << 8);
455 handle->
sum += check;
465 handle->
debug_print(
"wt588e02b: cs gpio write failed.\n");
505 res = a_wt588e02b_check_busy(handle, &busy);
508 handle->
debug_print(
"wt588e02b: check busy failed.\n");
522 handle->
debug_print(
"wt588e02b: sclk gpio write failed.\n");
529 handle->
debug_print(
"wt588e02b: cs gpio write failed.\n");
537 handle->
debug_print(
"wt588e02b: write with no cs failed.\n");
541 res = a_wt588e02b_write_with_no_cs(handle, 100, ind);
544 handle->
debug_print(
"wt588e02b: write with no cs failed.\n");
551 handle->
debug_print(
"wt588e02b: cs gpio write failed.\n");
593 handle->
debug_print(
"wt588e02b: sclk gpio write failed.\n");
600 handle->
debug_print(
"wt588e02b: cs gpio write failed.\n");
608 handle->
debug_print(
"wt588e02b: write with no cs failed.\n");
612 res = a_wt588e02b_write_with_no_cs(handle, 100, vol);
615 handle->
debug_print(
"wt588e02b: write with no cs failed.\n");
622 handle->
debug_print(
"wt588e02b: cs gpio write failed.\n");
656 handle->
debug_print(
"wt588e02b: sclk gpio write failed.\n");
663 handle->
debug_print(
"wt588e02b: cs gpio write failed.\n");
671 handle->
debug_print(
"wt588e02b: write with no cs failed.\n");
675 res = a_wt588e02b_write_with_no_cs(handle, 100, 0xEF);
678 handle->
debug_print(
"wt588e02b: write with no cs failed.\n");
685 handle->
debug_print(
"wt588e02b: cs gpio write failed.\n");
729 for (i = 0; i < len; i++)
733 handle->
debug_print(
"wt588e02b: list[%d] > 0xDF.\n", i);
738 res = a_wt588e02b_check_busy(handle, &busy);
741 handle->
debug_print(
"wt588e02b: check busy failed.\n");
755 handle->
debug_print(
"wt588e02b: sclk gpio write failed.\n");
762 handle->
debug_print(
"wt588e02b: cs gpio write failed.\n");
770 handle->
debug_print(
"wt588e02b: write with no cs failed.\n");
774 for (i = 0; i < len; i ++)
776 res = a_wt588e02b_write_with_no_cs(handle, 100, list[i]);
779 handle->
debug_print(
"wt588e02b: write with no cs failed.\n");
787 handle->
debug_print(
"wt588e02b: cs gpio write failed.\n");
828 res = a_wt588e02b_check_busy(handle, &busy);
831 handle->
debug_print(
"wt588e02b: check busy failed.\n");
845 handle->
debug_print(
"wt588e02b: sclk gpio write failed.\n");
852 handle->
debug_print(
"wt588e02b: cs gpio write failed.\n");
860 handle->
debug_print(
"wt588e02b: write with no cs failed.\n");
864 res = a_wt588e02b_write_with_no_cs(handle, 100, 0x02);
867 handle->
debug_print(
"wt588e02b: write with no cs failed.\n");
871 res = a_wt588e02b_write_with_no_cs(handle, 100, ind);
874 handle->
debug_print(
"wt588e02b: write with no cs failed.\n");
881 handle->
debug_print(
"wt588e02b: cs gpio write failed.\n");
922 res = a_wt588e02b_check_busy(handle, &busy);
925 handle->
debug_print(
"wt588e02b: check busy failed.\n");
939 handle->
debug_print(
"wt588e02b: sclk gpio write failed.\n");
946 handle->
debug_print(
"wt588e02b: cs gpio write failed.\n");
954 handle->
debug_print(
"wt588e02b: write with no cs failed.\n");
958 res = a_wt588e02b_write_with_no_cs(handle, 100, 0x01);
961 handle->
debug_print(
"wt588e02b: write with no cs failed.\n");
965 res = a_wt588e02b_write_with_no_cs(handle, 100, ind);
968 handle->
debug_print(
"wt588e02b: write with no cs failed.\n");
975 handle->
debug_print(
"wt588e02b: cs gpio write failed.\n");
1008 res = a_wt588e02b_check_busy(handle, &busy);
1011 handle->
debug_print(
"wt588e02b: check busy failed.\n");
1017 handle->
debug_print(
"wt588e02b: chip is busy.\n");
1025 handle->
debug_print(
"wt588e02b: sclk gpio write failed.\n");
1032 handle->
debug_print(
"wt588e02b: cs gpio write failed.\n");
1040 handle->
debug_print(
"wt588e02b: write with no cs failed.\n");
1044 res = a_wt588e02b_write_with_no_cs(handle, 100, 0x03);
1047 handle->
debug_print(
"wt588e02b: write with no cs failed.\n");
1054 handle->
debug_print(
"wt588e02b: cs gpio write failed.\n");
1104 handle->
debug_print(
"wt588e02b: bin read init failed.\n");
1111 res = a_update(handle, ind);
1114 handle->
debug_print(
"wt588e02b: update failed.\n");
1121 for (i = 0; i < m; i++)
1127 handle->
debug_print(
"wt588e02b: bin read failed.\n");
1133 res = a_update_get_status(handle, &sum);
1136 handle->
debug_print(
"wt588e02b: update get status failed.\n");
1141 if (handle->
sum != sum)
1143 handle->
debug_print(
"wt588e02b: sum check error.\n");
1149 res = a_update_send_pack(handle, handle->
buf, 512);
1152 handle->
debug_print(
"wt588e02b: update send pack failed.\n");
1161 memset(handle->
buf, 0,
sizeof(uint8_t) * 512);
1165 handle->
debug_print(
"wt588e02b: bin read failed.\n");
1171 res = a_update_get_status(handle, &sum);
1174 handle->
debug_print(
"wt588e02b: update get status failed.\n");
1179 if (handle->
sum != sum)
1181 handle->
debug_print(
"wt588e02b: sum check error.\n");
1187 res = a_update_send_pack(handle, handle->
buf, 512);
1190 handle->
debug_print(
"wt588e02b: update send pack failed.\n");
1196 res = a_update_end(handle);
1199 handle->
debug_print(
"wt588e02b: update end failed.\n");
1207 handle->
debug_print(
"wt588e02b: bin read deinit failed.\n");
1249 handle->
debug_print(
"wt588e02b: bin read init failed.\n");
1253 if ((size % 512) != 0)
1255 handle->
debug_print(
"wt588e02b: bin size is invalid.\n");
1262 res = a_update_all(handle);
1265 handle->
debug_print(
"wt588e02b: update all failed.\n");
1272 for (i = 0; i < m; i++)
1278 handle->
debug_print(
"wt588e02b: bin read failed.\n");
1284 res = a_update_get_status(handle, &sum);
1287 handle->
debug_print(
"wt588e02b: update get status failed.\n");
1292 if (handle->
sum != sum)
1294 handle->
debug_print(
"wt588e02b: sum check error.\n");
1300 res = a_update_send_pack(handle, handle->
buf, 512);
1303 handle->
debug_print(
"wt588e02b: update send pack failed.\n");
1309 res = a_update_end(handle);
1312 handle->
debug_print(
"wt588e02b: update end failed.\n");
1320 handle->
debug_print(
"wt588e02b: bin read deinit failed.\n");
1353 res = a_wt588e02b_check_busy(handle, &busy);
1356 handle->
debug_print(
"wt588e02b: check busy failed.\n");
1394 handle->
debug_print(
"wt588e02b: sclk_gpio_init is null.\n");
1400 handle->
debug_print(
"wt588e02b: sclk_gpio_deinit is null.\n");
1406 handle->
debug_print(
"wt588e02b: sclk_gpio_write is null.\n");
1412 handle->
debug_print(
"wt588e02b: mosi_gpio_init is null.\n");
1418 handle->
debug_print(
"wt588e02b: mosi_gpio_deinit is null.\n");
1424 handle->
debug_print(
"wt588e02b: mosi_gpio_write is null.\n");
1430 handle->
debug_print(
"wt588e02b: miso_gpio_init is null.\n");
1436 handle->
debug_print(
"wt588e02b: miso_gpio_deinit is null.\n");
1442 handle->
debug_print(
"wt588e02b: miso_gpio_read is null.\n");
1448 handle->
debug_print(
"wt588e02b: cs_gpio_init is null.\n");
1454 handle->
debug_print(
"wt588e02b: cs_gpio_deinit is null.\n");
1460 handle->
debug_print(
"wt588e02b: cs_gpio_write is null.\n");
1466 handle->
debug_print(
"wt588e02b: delay_ms is null.\n");
1472 handle->
debug_print(
"wt588e02b: delay_us is null.\n");
1478 handle->
debug_print(
"wt588e02b: bin_read_init is null.\n");
1484 handle->
debug_print(
"wt588e02b: bin_read is null.\n");
1490 handle->
debug_print(
"wt588e02b: bin_read_deinit is null.\n");
1497 handle->
debug_print(
"wt588e02b: sclk gpio init failed.\n");
1503 handle->
debug_print(
"wt588e02b: mosi gpio init failed.\n");
1510 handle->
debug_print(
"wt588e02b: miso gpio init failed.\n");
1518 handle->
debug_print(
"wt588e02b: cs gpio init failed.\n");
1557 handle->
debug_print(
"wt588e02b: sclk gpio deinit failed.\n");
1564 handle->
debug_print(
"wt588e02b: mosi gpio deinit failed.\n");
1571 handle->
debug_print(
"wt588e02b: miso gpio deinit failed.\n");
1578 handle->
debug_print(
"wt588e02b: cs gpio deinit failed.\n");
1617 handle->
debug_print(
"wt588e02b: sclk gpio write failed.\n");
1624 handle->
debug_print(
"wt588e02b: cs gpio write failed.\n");
1628 for (i = 0; i < len; i++)
1631 res = a_wt588e02b_write_with_no_cs(handle, us, buf[i]);
1634 handle->
debug_print(
"wt588e02b: write with no cs failed.\n");
1642 handle->
debug_print(
"wt588e02b: cs gpio write failed.\n");
1680 handle->
debug_print(
"wt588e02b: sclk gpio write failed.\n");
1687 handle->
debug_print(
"wt588e02b: cs gpio write failed.\n");
1691 for (i = 0; i < len; i++)
1694 res = a_wt588e02b_read_with_no_cs(handle, us, &buf[i]);
1697 handle->
debug_print(
"wt588e02b: read with no cs failed.\n");
1705 handle->
debug_print(
"wt588e02b: cs gpio write failed.\n");
#define WT588E02B_COMMAND_UPDATE_ADDR
#define WT588E02B_COMMAND_PLAY_LOOP
#define WT588E02B_COMMAND_PLAY_LIST
#define WT588E02B_COMMAND_PLAY
chip command definition
#define SUPPLY_VOLTAGE_MAX
#define WT588E02B_COMMAND_UPDATE_STATUS
#define WT588E02B_COMMAND_UPDATE_ALL
#define MANUFACTURER_NAME
#define SUPPLY_VOLTAGE_MIN
#define WT588E02B_COMMAND_STOP
#define WT588E02B_COMMAND_UPDATE_END
#define CHIP_NAME
chip information definition
#define WT588E02B_COMMAND_VOL
driver wt588e02b header file
struct wt588e02b_info_s wt588e02b_info_t
wt588e02b information structure definition
uint8_t wt588e02b_update(wt588e02b_handle_t *handle, uint8_t ind, char *path)
update audio
struct wt588e02b_handle_s wt588e02b_handle_t
wt588e02b handle structure definition
uint8_t wt588e02b_play(wt588e02b_handle_t *handle, uint8_t ind)
play audio
uint8_t wt588e02b_play_loop(wt588e02b_handle_t *handle, uint8_t ind)
play loop
uint8_t wt588e02b_info(wt588e02b_info_t *info)
get chip's information
uint8_t wt588e02b_deinit(wt588e02b_handle_t *handle)
deinit the chip
uint8_t wt588e02b_check_busy(wt588e02b_handle_t *handle, wt588e02b_bool_t *enable)
check chip busy
uint8_t wt588e02b_play_loop_advance(wt588e02b_handle_t *handle, uint8_t ind)
play loop advance
wt588e02b_bool_t
wt588e02b bool enumeration definition
uint8_t wt588e02b_set_vol(wt588e02b_handle_t *handle, uint8_t vol)
set the volume
uint8_t wt588e02b_init(wt588e02b_handle_t *handle)
initialize the chip
uint8_t wt588e02b_play_loop_all(wt588e02b_handle_t *handle)
play loop all
uint8_t wt588e02b_play_list(wt588e02b_handle_t *handle, uint8_t *list, uint8_t len)
play list
uint8_t wt588e02b_update_all(wt588e02b_handle_t *handle, char *path)
update all audio
uint8_t wt588e02b_stop(wt588e02b_handle_t *handle)
stop audio
uint8_t wt588e02b_get_reg(wt588e02b_handle_t *handle, uint8_t *buf, uint16_t len, uint32_t us)
get the chip register
uint8_t wt588e02b_set_reg(wt588e02b_handle_t *handle, uint8_t *buf, uint16_t len, uint32_t us)
set the chip register
uint8_t(* mosi_gpio_write)(uint8_t data)
uint8_t(* mosi_gpio_deinit)(void)
uint8_t(* mosi_gpio_init)(void)
uint8_t(* miso_gpio_read)(uint8_t *data)
void(* delay_ms)(uint32_t ms)
uint8_t(* sclk_gpio_deinit)(void)
uint8_t(* bin_read_init)(char *name, uint32_t *size)
uint8_t(* cs_gpio_deinit)(void)
uint8_t(* cs_gpio_write)(uint8_t data)
uint8_t(* sclk_gpio_write)(uint8_t data)
void(* debug_print)(const char *const fmt,...)
uint8_t(* bin_read)(uint32_t addr, uint16_t size, uint8_t *buffer)
void(* delay_us)(uint32_t us)
uint8_t(* cs_gpio_init)(void)
uint8_t(* sclk_gpio_init)(void)
uint8_t(* miso_gpio_init)(void)
uint8_t(* bin_read_deinit)(void)
uint8_t(* miso_gpio_deinit)(void)
float supply_voltage_max_v
char manufacturer_name[32]
float supply_voltage_min_v