a barely functional driver. hooray!
This commit is contained in:
commit
7ec406c5af
3 changed files with 143 additions and 0 deletions
5
CMakeLists.txt
Normal file
5
CMakeLists.txt
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
idf_component_register(SRCS
|
||||||
|
"main/dfplayermini.c"
|
||||||
|
|
||||||
|
INCLUDE_DIRS "include"
|
||||||
|
)
|
8
include/dfplayermini.h
Normal file
8
include/dfplayermini.h
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
#ifndef __DFPLAYERMINI_H_
|
||||||
|
#define __DFPLAYERMINI_H_
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
uint8_t dfplayermini_init();
|
||||||
|
|
||||||
|
#endif
|
130
main/dfplayermini.c
Normal file
130
main/dfplayermini.c
Normal file
|
@ -0,0 +1,130 @@
|
||||||
|
#include "stdint.h"
|
||||||
|
#include "driver/uart.h"
|
||||||
|
#include "dfplayermini.h"
|
||||||
|
|
||||||
|
#define BUF_SIZE (1024)
|
||||||
|
#define PACKET_LEN (8)
|
||||||
|
#define BYTE_START (0x7E)
|
||||||
|
#define BYTE_END (0xEF)
|
||||||
|
|
||||||
|
|
||||||
|
struct DFPlayerMini {
|
||||||
|
uart_config_t *uart_config;
|
||||||
|
} dfplayermini;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 0x7E START
|
||||||
|
* 0xFF VER
|
||||||
|
* 0x06 LEN
|
||||||
|
* 0x00 ACK
|
||||||
|
* 0x01 CMD
|
||||||
|
* 0x00 PARAM-hi
|
||||||
|
* 0x00 PARAM-lo
|
||||||
|
* 0x00 CHECK-hi
|
||||||
|
* 0x00 CHECK-lo
|
||||||
|
* 0xEF FIN
|
||||||
|
*/
|
||||||
|
uint8_t packet[] = { 0x7E, 0xFF, 0x06, 0x00, 0x01, 0x00, 0x00, 0xEF };
|
||||||
|
|
||||||
|
uint8_t send_packet(uint8_t cmd, uint8_t arg_low, uint8_t arg_high) {
|
||||||
|
uint8_t i = 0;
|
||||||
|
uint16_t sum = 0;
|
||||||
|
|
||||||
|
packet[3] = cmd;
|
||||||
|
packet[4] = 1;
|
||||||
|
packet[5] = arg_high;
|
||||||
|
packet[6] = arg_low;
|
||||||
|
|
||||||
|
for(i = 1; i < 7; i++) {
|
||||||
|
sum += packet[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
//packet[7] = -sum << 8;
|
||||||
|
//packet[8] = -sum;
|
||||||
|
|
||||||
|
return uart_write_bytes(UART_NUM_1, (const char*)&packet, PACKET_LEN);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t set_volume(uint8_t vol) {
|
||||||
|
return send_packet(0x06, vol, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void dfplayermini_uart_read_task(void *arg) {
|
||||||
|
setvbuf(stdout, NULL, _IONBF, 0);
|
||||||
|
|
||||||
|
uint8_t buf[PACKET_LEN];
|
||||||
|
uint8_t err;
|
||||||
|
uint8_t idx = 0;
|
||||||
|
uint8_t inited = 0;
|
||||||
|
uint8_t timeout = 1;
|
||||||
|
|
||||||
|
while(true) {
|
||||||
|
int len = uart_read_bytes(UART_NUM_1, &buf[idx], 1, 20 / portTICK_RATE_MS);
|
||||||
|
|
||||||
|
if(len == 0) {
|
||||||
|
if(inited == 0 && timeout++ == 0) {
|
||||||
|
printf("timeout, sending reset\n");
|
||||||
|
send_packet(0x0C, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(buf[0] == BYTE_START) {
|
||||||
|
printf("0x%02X ", buf[idx]);
|
||||||
|
|
||||||
|
idx++;
|
||||||
|
//printf("got start byte\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(buf[idx - 1] == BYTE_END) {
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
switch(buf[3]) {
|
||||||
|
case 0x3F:
|
||||||
|
printf("player ready\n");
|
||||||
|
inited = 1;
|
||||||
|
|
||||||
|
//send_packet(0x0C, 0, 0);
|
||||||
|
//vTaskDelay(10 / portTICK_RATE_MS);
|
||||||
|
|
||||||
|
//if(!(err = send_packet(0x09, 1, 0))) {
|
||||||
|
//printf("Failed to set play source: %d\n", err);
|
||||||
|
//}
|
||||||
|
|
||||||
|
if(!(err = set_volume(10))) {
|
||||||
|
printf("Failed to set volume: %d\n", err);
|
||||||
|
}
|
||||||
|
|
||||||
|
vTaskDelay(100 / portTICK_RATE_MS);
|
||||||
|
|
||||||
|
send_packet(0x03, 0, 0);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
idx = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t dfplayermini_init() {
|
||||||
|
uart_config_t uart_config = {
|
||||||
|
.baud_rate = 9600,
|
||||||
|
.data_bits = UART_DATA_8_BITS,
|
||||||
|
.parity = UART_PARITY_DISABLE,
|
||||||
|
.stop_bits = UART_STOP_BITS_1,
|
||||||
|
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
|
||||||
|
.source_clk = UART_SCLK_APB,
|
||||||
|
};
|
||||||
|
|
||||||
|
dfplayermini.uart_config = &uart_config;
|
||||||
|
|
||||||
|
uart_driver_install(UART_NUM_1, BUF_SIZE * 2, 0, 0, NULL, 0);
|
||||||
|
uart_param_config(UART_NUM_1, dfplayermini.uart_config);
|
||||||
|
uart_set_pin(UART_NUM_1, 13, 34, -1, -1);
|
||||||
|
|
||||||
|
xTaskCreate(dfplayermini_uart_read_task, "dfplayermini_uart_read_task", 2048, NULL, 10, NULL);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in a new issue