application: add LCD initialisation
This commit is contained in:
parent
88e13ccd67
commit
3cb4b3689e
|
@ -45,6 +45,7 @@
|
||||||
#include "terminal.h" // handle the terminal interface
|
#include "terminal.h" // handle the terminal interface
|
||||||
#include "menu.h" // menu utilities
|
#include "menu.h" // menu utilities
|
||||||
#include "usb_cables.h" // USB cables definition
|
#include "usb_cables.h" // USB cables definition
|
||||||
|
#include "lcd_hd44780.h" // LCD utilities
|
||||||
|
|
||||||
/** watchdog period in ms */
|
/** watchdog period in ms */
|
||||||
#define WATCHDOG_PERIOD 10000
|
#define WATCHDOG_PERIOD 10000
|
||||||
|
@ -165,6 +166,15 @@ static void command_inter(void* argument)
|
||||||
*/
|
*/
|
||||||
static void command_cables(void* argument)
|
static void command_cables(void* argument)
|
||||||
{
|
{
|
||||||
|
// get cable number
|
||||||
|
uint8_t cable_i = 0xff;
|
||||||
|
if (argument) {
|
||||||
|
cable_i = *(uint32_t*)argument;
|
||||||
|
if (cable_i >= LENGTH(usb_cables)) {
|
||||||
|
printf("cable number %u out of range 0-%u\n", cable_i, LENGTH(usb_cables) - 1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
(void)argument; // we won't use the argument
|
(void)argument; // we won't use the argument
|
||||||
|
|
||||||
usb_pins_float(); // start with all pins in safe floating state
|
usb_pins_float(); // start with all pins in safe floating state
|
||||||
|
@ -172,9 +182,11 @@ static void command_cables(void* argument)
|
||||||
// step 2: check for known cable configuration
|
// step 2: check for known cable configuration
|
||||||
printf("= cable check =\n");
|
printf("= cable check =\n");
|
||||||
for (uint8_t cable = 0; cable < LENGTH(usb_cables); cable++) { // test every cable
|
for (uint8_t cable = 0; cable < LENGTH(usb_cables); cable++) { // test every cable
|
||||||
uint8_t pair_defined, pair_undefined;
|
if (0xff == cable_i || cable == cable_i) {
|
||||||
bool result = usb_cables_check_cable(&usb_cables[cable], &pair_defined, &pair_undefined, false);
|
uint8_t pair_defined, pair_undefined;
|
||||||
printf("%s: %s (defined=%u/%u, undefined=%u)\n", result ? "OK" : "KO", usb_cables[cable].name, pair_defined, usb_cables[cable].pin_pairs_nb, pair_undefined);
|
bool result = usb_cables_check_cable(&usb_cables[cable], &pair_defined, &pair_undefined, false);
|
||||||
|
printf("%02u %s: %s (defined=%u/%u, undefined=%u)\n", cable, result ? "OK" : "KO", usb_cables[cable].name, pair_defined, usb_cables[cable].pin_pairs_nb, pair_undefined);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
usb_pins_float(); // put all pins back in safe floating state
|
usb_pins_float(); // put all pins back in safe floating state
|
||||||
|
@ -563,9 +575,9 @@ static const struct menu_command_t menu_commands[] = {
|
||||||
{
|
{
|
||||||
.shortcut = 'c',
|
.shortcut = 'c',
|
||||||
.name = "cables",
|
.name = "cables",
|
||||||
.command_description = "test cables",
|
.command_description = "test cable(s)",
|
||||||
.argument = MENU_ARGUMENT_NONE,
|
.argument = MENU_ARGUMENT_UNSIGNED,
|
||||||
.argument_description = NULL,
|
.argument_description = "[nb]",
|
||||||
.command_handler = &command_cables,
|
.command_handler = &command_cables,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -797,6 +809,20 @@ void main(void)
|
||||||
nvic_enable_irq(NVIC_RTC_IRQ); // allow the RTC to interrupt
|
nvic_enable_irq(NVIC_RTC_IRQ); // allow the RTC to interrupt
|
||||||
time_start = rtc_get_counter_val(); // get start time from internal RTC
|
time_start = rtc_get_counter_val(); // get start time from internal RTC
|
||||||
|
|
||||||
|
// setup LCD display
|
||||||
|
printf("setup LCD: ");
|
||||||
|
led_on(); // this actually power the I²C backpack and display
|
||||||
|
lcd_hd44780_i2c_addr = 0x3f;
|
||||||
|
if (lcd_hd44780_setup(true, false)) {
|
||||||
|
lcd_hd44780_display_control(true, false, true);
|
||||||
|
lcd_hd44780_write_line(false, "USB cable tester", 16);
|
||||||
|
lcd_hd44780_write_line(true, "testing ...", 11);
|
||||||
|
printf("OK");
|
||||||
|
} else {
|
||||||
|
printf("KO");
|
||||||
|
}
|
||||||
|
putc('\n');
|
||||||
|
|
||||||
// setup USB connectors
|
// setup USB connectors
|
||||||
gpio_primary_remap(AFIO_MAPR_SWJ_CFG_JTAG_OFF_SW_ON, 0); // only use SWD and reuse JTAG pins
|
gpio_primary_remap(AFIO_MAPR_SWJ_CFG_JTAG_OFF_SW_ON, 0); // only use SWD and reuse JTAG pins
|
||||||
rcc_periph_clock_enable(RCC_GPIOA); // enable clock to all GPIO port domains since we use them all
|
rcc_periph_clock_enable(RCC_GPIOA); // enable clock to all GPIO port domains since we use them all
|
||||||
|
@ -819,16 +845,14 @@ void main(void)
|
||||||
iwdg_reset(); // kick the dog
|
iwdg_reset(); // kick the dog
|
||||||
if (user_input_available) { // user input is available
|
if (user_input_available) { // user input is available
|
||||||
action = true; // action has been performed
|
action = true; // action has been performed
|
||||||
led_toggle(); // toggle LED
|
//led_toggle(); // toggle LED
|
||||||
char c = user_input_get(); // store receive character
|
char c = user_input_get(); // store receive character
|
||||||
terminal_send(c); // send received character to terminal
|
terminal_send(c); // send received character to terminal
|
||||||
}
|
}
|
||||||
if (rtc_internal_tick_flag) { // the internal RTC ticked
|
if (rtc_internal_tick_flag) { // the internal RTC ticked
|
||||||
rtc_internal_tick_flag = false; // reset flag
|
rtc_internal_tick_flag = false; // reset flag
|
||||||
action = true; // action has been performed
|
action = true; // action has been performed
|
||||||
if (0 == (rtc_get_counter_val() % RTC_TICKS_SECOND)) { // one seond has passed
|
//led_toggle(); // toggle LED (good to indicate if main function is stuck)
|
||||||
led_toggle(); // toggle LED (good to indicate if main function is stuck)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (action) { // go to sleep if nothing had to be done, else recheck for activity
|
if (action) { // go to sleep if nothing had to be done, else recheck for activity
|
||||||
action = false;
|
action = false;
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
/** set I²C peripheral if I²C backpack adapter(s) is(/are) used */
|
/** set I²C peripheral if I²C backpack adapter(s) is(/are) used */
|
||||||
//#define LCD_HD44780_I2C I2C1
|
#define LCD_HD44780_I2C I2C1
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
#ifdef LCD_HD44780_I2C
|
#ifdef LCD_HD44780_I2C
|
||||||
|
|
Loading…
Reference in New Issue