mirror of
https://github.com/skot/ESP-Miner.git
synced 2025-03-18 13:52:07 +01:00
* switched selftest fail to be non fatal * switched to BOOT longpress to reboot after selftest * lots and lots of error handling cleanup. <slippery slope> * move around the DS4432U_Init() function call
110 lines
2.9 KiB
C
110 lines
2.9 KiB
C
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
#include "freertos/FreeRTOS.h"
|
|
#include "freertos/task.h"
|
|
|
|
#include "driver/uart.h"
|
|
|
|
#include "esp_log.h"
|
|
#include "soc/uart_struct.h"
|
|
|
|
#include "bm1397.h"
|
|
#include "bm1368.h"
|
|
#include "serial.h"
|
|
#include "utils.h"
|
|
|
|
#define ECHO_TEST_TXD (17)
|
|
#define ECHO_TEST_RXD (18)
|
|
#define BUF_SIZE (1024)
|
|
|
|
static const char *TAG = "serial";
|
|
|
|
esp_err_t SERIAL_init(void)
|
|
{
|
|
ESP_LOGI(TAG, "Initializing serial");
|
|
// Configure UART1 parameters
|
|
uart_config_t uart_config = {
|
|
.baud_rate = 115200,
|
|
.data_bits = UART_DATA_8_BITS,
|
|
.parity = UART_PARITY_DISABLE,
|
|
.stop_bits = UART_STOP_BITS_1,
|
|
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
|
|
.rx_flow_ctrl_thresh = 122,
|
|
};
|
|
// Configure UART1 parameters
|
|
ESP_ERROR_CHECK_WITHOUT_ABORT(uart_param_config(UART_NUM_1, &uart_config));
|
|
// Set UART1 pins(TX: IO17, RX: I018)
|
|
ESP_ERROR_CHECK_WITHOUT_ABORT(uart_set_pin(UART_NUM_1, ECHO_TEST_TXD, ECHO_TEST_RXD, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE));
|
|
|
|
// Install UART driver (we don't need an event queue here)
|
|
// tx buffer 0 so the tx time doesn't overlap with the job wait time
|
|
// by returning before the job is written
|
|
return uart_driver_install(UART_NUM_1, BUF_SIZE * 2, BUF_SIZE * 2, 0, NULL, 0);
|
|
}
|
|
|
|
esp_err_t SERIAL_set_baud(int baud)
|
|
{
|
|
ESP_LOGI(TAG, "Changing UART baud to %i", baud);
|
|
|
|
// Make sure that we are done writing before setting a new baudrate.
|
|
ESP_ERROR_CHECK_WITHOUT_ABORT(uart_wait_tx_done(UART_NUM_1, 1000 / portTICK_PERIOD_MS));
|
|
|
|
ESP_ERROR_CHECK_WITHOUT_ABORT(uart_set_baudrate(UART_NUM_1, baud));
|
|
|
|
return ESP_OK;
|
|
}
|
|
|
|
int SERIAL_send(uint8_t *data, int len, bool debug)
|
|
{
|
|
if (debug)
|
|
{
|
|
printf("tx: ");
|
|
prettyHex((unsigned char *)data, len);
|
|
printf("\n");
|
|
}
|
|
|
|
return uart_write_bytes(UART_NUM_1, (const char *)data, len);
|
|
}
|
|
|
|
/// @brief waits for a serial response from the device
|
|
/// @param buf buffer to read data into
|
|
/// @param buf number of ms to wait before timing out
|
|
/// @return number of bytes read, or -1 on error
|
|
int16_t SERIAL_rx(uint8_t *buf, uint16_t size, uint16_t timeout_ms)
|
|
{
|
|
int16_t bytes_read = uart_read_bytes(UART_NUM_1, buf, size, timeout_ms / portTICK_PERIOD_MS);
|
|
|
|
#if BM1937_SERIALRX_DEBUG || BM1366_SERIALRX_DEBUG || BM1368_SERIALRX_DEBUG
|
|
size_t buff_len = 0;
|
|
if (bytes_read > 0) {
|
|
uart_get_buffered_data_len(UART_NUM_1, &buff_len);
|
|
printf("rx: ");
|
|
prettyHex((unsigned char*) buf, bytes_read);
|
|
printf(" [%d]\n", buff_len);
|
|
}
|
|
#endif
|
|
|
|
return bytes_read;
|
|
}
|
|
|
|
void SERIAL_debug_rx(void)
|
|
{
|
|
int ret;
|
|
uint8_t buf[100];
|
|
|
|
ret = SERIAL_rx(buf, 100, 20);
|
|
if (ret < 0)
|
|
{
|
|
fprintf(stderr, "unable to read data\n");
|
|
return;
|
|
}
|
|
|
|
memset(buf, 0, 100);
|
|
}
|
|
|
|
void SERIAL_clear_buffer(void)
|
|
{
|
|
uart_flush(UART_NUM_1);
|
|
}
|