application: improve pin action output
This commit is contained in:
parent
ba50a0ec84
commit
88e13ccd67
|
@ -320,14 +320,39 @@ static void command_pin(void* argument)
|
|||
pin_level = strtok(NULL, delimiter); // get pin level
|
||||
}
|
||||
}
|
||||
|
||||
// print header
|
||||
if (!pin_level) {
|
||||
printf("pin state (H: out high, L: out low, h in high, l in low, x in floating) and actual level (0: low, 1:high):\n");
|
||||
} else {
|
||||
printf("setting pin\n");
|
||||
if (pin_str && pin_nb >= LENGTH(usb_pins)) {
|
||||
printf("pin %u out of range 0-%u\n", pin_nb, LENGTH(usb_pins) - 1);
|
||||
return;
|
||||
}
|
||||
|
||||
// set pin
|
||||
if (pin_str && pin_level) {
|
||||
const struct usb_pin_t* usb_pin = &usb_pins[pin_nb];
|
||||
switch (pin_level[0]) {
|
||||
case 'h':
|
||||
gpio_set(usb_pin->port, usb_pin->pin);
|
||||
gpio_set_mode(usb_pin->port, GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, usb_pin->pin);
|
||||
break;
|
||||
case 'H':
|
||||
gpio_set(usb_pin->port, usb_pin->pin);
|
||||
gpio_set_mode(usb_pin->port, GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, usb_pin->pin);
|
||||
break;
|
||||
case 'l':
|
||||
gpio_clear(usb_pin->port, usb_pin->pin);
|
||||
gpio_set_mode(usb_pin->port, GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, usb_pin->pin);
|
||||
break;
|
||||
case 'L':
|
||||
gpio_clear(usb_pin->port, usb_pin->pin);
|
||||
gpio_set_mode(usb_pin->port, GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, usb_pin->pin);
|
||||
break;
|
||||
case 'x':
|
||||
default:
|
||||
gpio_set_mode(usb_pin->port, GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, usb_pin->pin);
|
||||
}
|
||||
}
|
||||
|
||||
// print pin level
|
||||
printf("pin state (H: out high, L: out low, h in high, l in low, x in floating) and actual level\n"); // output meaning
|
||||
uint8_t pin_i = 0; // current pin
|
||||
for (uint8_t connector = 0; connector < LENGTH(usb_connectors); connector++) { // test every connector
|
||||
bool connector_print = (!pin_str || (pin_str && pin_nb >= pin_i && pin_nb < pin_i + usb_connectors[connector]->pins_nb)); // if a pin information will be printed for this connector
|
||||
|
@ -336,7 +361,7 @@ static void command_pin(void* argument)
|
|||
}
|
||||
for (uint8_t pin = 0; pin < usb_connectors[connector]->pins_nb; pin++) { // test every pin
|
||||
const struct usb_pin_t* usb_pin = &usb_pins[usb_connectors[connector]->pins[pin]]; // get pin
|
||||
if (!pin_str || (!pin_level && pin_nb == pin_i)) { // show pin state
|
||||
if (!pin_str || pin_nb == pin_i) { // show pin state
|
||||
printf("%03u %s: ", pin_i, usb_pin->name); // print USB pin number
|
||||
uint8_t pin_pos = __builtin_ctz(usb_pin->pin); // get the pin number (position of the 1 in the 16-bit)
|
||||
uint8_t offset = (pin_pos < 8) ? (pin_pos * 4) : ((pin_pos - 8) * 4); // get pin offset within port
|
||||
|
@ -360,34 +385,9 @@ static void command_pin(void* argument)
|
|||
}
|
||||
// show actual value
|
||||
if (gpio_get(usb_pin->port, usb_pin->pin)) {
|
||||
putc('1');
|
||||
putc(0 == mode ? 'h': 'H');
|
||||
} else {
|
||||
putc('0');
|
||||
}
|
||||
putc('\n');
|
||||
}
|
||||
if (pin_level && pin_nb == pin_i) { // set pin
|
||||
printf("%03u %s: %s", pin_i, usb_pin->name, pin_level);
|
||||
switch (pin_level[0]) {
|
||||
case 'h':
|
||||
gpio_set(usb_pin->port, usb_pin->pin);
|
||||
gpio_set_mode(usb_pin->port, GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, usb_pin->pin);
|
||||
break;
|
||||
case 'H':
|
||||
gpio_set(usb_pin->port, usb_pin->pin);
|
||||
gpio_set_mode(usb_pin->port, GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, usb_pin->pin);
|
||||
break;
|
||||
case 'l':
|
||||
gpio_clear(usb_pin->port, usb_pin->pin);
|
||||
gpio_set_mode(usb_pin->port, GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, usb_pin->pin);
|
||||
break;
|
||||
case 'L':
|
||||
gpio_clear(usb_pin->port, usb_pin->pin);
|
||||
gpio_set_mode(usb_pin->port, GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, usb_pin->pin);
|
||||
break;
|
||||
case 'x':
|
||||
default:
|
||||
gpio_set_mode(usb_pin->port, GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, usb_pin->pin);
|
||||
putc(0 == mode ? 'l': 'L');
|
||||
}
|
||||
putc('\n');
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue