BV I2C: use shared string buffer and improve code
This commit is contained in:
parent
510d3c7193
commit
bb014ce1e0
|
@ -53,15 +53,15 @@ static enum busvoodoo_uart_setting_t {
|
|||
BUSVOODOO_UART_SETTING_DONE,
|
||||
} busvoodoo_uart_setting = BUSVOODOO_UART_SETTING_NONE;
|
||||
/** UART baud rate (in bps) */
|
||||
uint32_t busvoodoo_uart_baudrate = 115200;
|
||||
static uint32_t busvoodoo_uart_baudrate = 115200;
|
||||
/** UART data bits */
|
||||
uint8_t busvoodoo_uart_databits = 8;
|
||||
static uint8_t busvoodoo_uart_databits = 8;
|
||||
/** UART parity setting */
|
||||
char busvoodoo_uart_parity= 'n';
|
||||
static char busvoodoo_uart_parity= 'n';
|
||||
/** UART stop bits (multiplied by 2) */
|
||||
uint8_t busvoodoo_uart_stopbits = 2;
|
||||
static uint8_t busvoodoo_uart_stopbits = 2;
|
||||
/** pin drive mode */
|
||||
char busvoodoo_uart_drive = 'p';
|
||||
static char busvoodoo_uart_drive = 'p';
|
||||
|
||||
/** setup UART mode
|
||||
* @param[out] prefix terminal prompt prefix
|
||||
|
@ -71,14 +71,13 @@ char busvoodoo_uart_drive = 'p';
|
|||
static bool busvoodoo_uart_setup(char** prefix, const char* line)
|
||||
{
|
||||
bool complete = false; // is the setup complete
|
||||
static char config[39] = {0}; // configuration string used as prefix
|
||||
if (NULL==line) { // first call
|
||||
busvoodoo_uart_setting = BUSVOODOO_UART_SETTING_NONE; // re-start configuration
|
||||
}
|
||||
switch (busvoodoo_uart_setting) {
|
||||
case BUSVOODOO_UART_SETTING_NONE:
|
||||
snprintf(config, LENGTH(config), "baud rate in bps (1-2000000) [%u]", busvoodoo_uart_baudrate);
|
||||
*prefix = config; // ask for baud rate
|
||||
snprintf(busvoodoo_global_string, LENGTH(busvoodoo_global_string), "baud rate in bps (1-2000000) [%u]", busvoodoo_uart_baudrate);
|
||||
*prefix = busvoodoo_global_string; // ask for baud rate
|
||||
busvoodoo_uart_setting = BUSVOODOO_UART_SETTING_BAUDRATE;
|
||||
break;
|
||||
case BUSVOODOO_UART_SETTING_BAUDRATE:
|
||||
|
@ -86,14 +85,14 @@ static bool busvoodoo_uart_setup(char** prefix, const char* line)
|
|||
busvoodoo_uart_setting = BUSVOODOO_UART_SETTING_DATABITS; // go to next setting
|
||||
} else { // setting provided
|
||||
uint32_t baudrate = atoi(line); // parse setting
|
||||
if (baudrate>0 && baudrate<2000000) { // check setting
|
||||
if (baudrate>0 && baudrate<=2000000) { // check setting
|
||||
busvoodoo_uart_baudrate = baudrate; // remember setting
|
||||
busvoodoo_uart_setting = BUSVOODOO_UART_SETTING_DATABITS; // go to next setting
|
||||
}
|
||||
}
|
||||
if (BUSVOODOO_UART_SETTING_DATABITS==busvoodoo_uart_setting) { // if next setting
|
||||
snprintf(config, LENGTH(config), "data bits (8-9) [%u]", busvoodoo_uart_databits); // prepare next setting
|
||||
*prefix = config; // display next setting
|
||||
snprintf(busvoodoo_global_string, LENGTH(busvoodoo_global_string), "data bits (8-9) [%u]", busvoodoo_uart_databits); // prepare next setting
|
||||
*prefix = busvoodoo_global_string; // display next setting
|
||||
}
|
||||
break;
|
||||
case BUSVOODOO_UART_SETTING_DATABITS:
|
||||
|
@ -107,8 +106,8 @@ static bool busvoodoo_uart_setup(char** prefix, const char* line)
|
|||
}
|
||||
}
|
||||
if (BUSVOODOO_UART_SETTING_PARITY==busvoodoo_uart_setting) { // if next setting
|
||||
snprintf(config, LENGTH(config), "parity (n,e,o) [%c]", busvoodoo_uart_parity); // prepare next setting
|
||||
*prefix = config; // display next setting
|
||||
snprintf(busvoodoo_global_string, LENGTH(busvoodoo_global_string), "parity (n,e,o) [%c]", busvoodoo_uart_parity); // prepare next setting
|
||||
*prefix = busvoodoo_global_string; // display next setting
|
||||
}
|
||||
break;
|
||||
case BUSVOODOO_UART_SETTING_PARITY:
|
||||
|
@ -121,8 +120,8 @@ static bool busvoodoo_uart_setup(char** prefix, const char* line)
|
|||
}
|
||||
}
|
||||
if (BUSVOODOO_UART_SETTING_STOPBITS==busvoodoo_uart_setting) { // if next setting
|
||||
snprintf(config, LENGTH(config), "stop bits (0.5-2.0) [%.1f]", busvoodoo_uart_stopbits/2.0); // prepare next setting
|
||||
*prefix = config; // display next setting
|
||||
snprintf(busvoodoo_global_string, LENGTH(busvoodoo_global_string), "stop bits (0.5-2.0) [%.1f]", busvoodoo_uart_stopbits/2.0); // prepare next setting
|
||||
*prefix = busvoodoo_global_string; // display next setting
|
||||
}
|
||||
break;
|
||||
case BUSVOODOO_UART_SETTING_STOPBITS:
|
||||
|
@ -146,8 +145,8 @@ static bool busvoodoo_uart_setup(char** prefix, const char* line)
|
|||
if (BUSVOODOO_UART_SETTING_DRIVE==busvoodoo_uart_setting) { // if next setting
|
||||
printf("p) push-pull (3.3V)\n");
|
||||
printf("o) open-drain (set LV to the desired voltage), with embedded pull-up (2kO)\n");
|
||||
snprintf(config, LENGTH(config), "drive mode (p,o) [%c]", busvoodoo_uart_drive); // show drive mode
|
||||
*prefix = config; // display next setting
|
||||
snprintf(busvoodoo_global_string, LENGTH(busvoodoo_global_string), "drive mode (p,o) [%c]", busvoodoo_uart_drive); // show drive mode
|
||||
*prefix = busvoodoo_global_string; // display next setting
|
||||
}
|
||||
break;
|
||||
case BUSVOODOO_UART_SETTING_DRIVE:
|
||||
|
@ -160,6 +159,7 @@ static bool busvoodoo_uart_setup(char** prefix, const char* line)
|
|||
}
|
||||
}
|
||||
if (BUSVOODOO_UART_SETTING_DONE==busvoodoo_uart_setting) { // we have all settings, configure UART
|
||||
rcc_periph_clock_enable(RCC_AFIO); // enable clock for USART alternate function
|
||||
rcc_periph_clock_enable(USART_RCC(BUSVOODOO_USART_ID)); // enable clock for USART peripheral
|
||||
usart_set_baudrate(USART(BUSVOODOO_USART_ID), busvoodoo_uart_baudrate); // set baud rate
|
||||
usart_set_databits(USART(BUSVOODOO_USART_ID), busvoodoo_uart_databits); // set data bits
|
||||
|
@ -214,7 +214,7 @@ static bool busvoodoo_uart_setup(char** prefix, const char* line)
|
|||
busvoodoo_uart_setting = BUSVOODOO_UART_SETTING_NONE; // restart settings next time
|
||||
*prefix = "UART"; // display mode
|
||||
busvoodoo_oled_text_left("UART"); // set mode title on OLED display
|
||||
const char* pinout_io[10] = {"GND", "3V3", "5V", "LV", "Rx", "Tx", NULL, NULL}; // HiZ mode pinout
|
||||
const char* pinout_io[10] = {"GND", "3V3", "5V", "LV", "Rx", "Tx", NULL, NULL, NULL, NULL}; // UART mode pinout
|
||||
for (uint8_t i=0; i<LENGTH(pinout_io) && i<LENGTH(busvoodoo_global_pinout_io); i++) {
|
||||
busvoodoo_global_pinout_io[i] = pinout_io[i]; // set pin names
|
||||
}
|
||||
|
@ -235,7 +235,7 @@ static bool busvoodoo_uart_setup(char** prefix, const char* line)
|
|||
static void busvoodoo_uart_exit(void)
|
||||
{
|
||||
usart_disable(USART(BUSVOODOO_USART_ID)); // disable USART
|
||||
rcc_periph_clock_enable(USART_RCC(BUSVOODOO_USART_ID)); // disable domain clock
|
||||
rcc_periph_clock_disable(USART_RCC(BUSVOODOO_USART_ID)); // disable domain clock
|
||||
gpio_set_mode(USART_PORT(BUSVOODOO_USART_ID), GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, USART_PIN_TX(BUSVOODOO_USART_ID)); // set pin back to floating input
|
||||
gpio_set_mode(USART_PORT(BUSVOODOO_USART_ID), GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, USART_PIN_RX(BUSVOODOO_USART_ID)); // set pin back to floating input
|
||||
busvoodoo_embedded_pullup(false); // disable embedded pull-ups
|
||||
|
|
Loading…
Reference in New Issue