-#endif
-
-
-static const int namestr = PIN_MAX;
-static char *pin_names[PIN_MAX+1];
-static uint_least8_t pin_names_width;
-
-void pinnames_get(void)
-{
- static const FLASH char delim1[] = {":= "};
- static const FLASH char delim2[] = {", "};
- char *lp;
- char *ptr;
- uint_fast8_t i;
-
- if (pin_names[namestr] != NULL)
- free(pin_names[namestr]);
- memset(pin_names, 0, sizeof(pin_names));
- pin_names_width = 0;
-
- if ((lp = getenv(PSTR(ENV_PINALIAS))) != NULL) {
- pin_names[namestr] = strdup(lp);
- ptr = strtok_P(pin_names[namestr], delim1);
- while (ptr != NULL) {
- if (((i = strtoul(ptr, &lp, 10)) < PIN_MAX) &&
- lp != ptr &&
- (ptr = strtok_P(NULL, delim2)) != NULL ) {
- pin_names[i] = ptr;
- ptr = strtok_P(NULL, delim1);
- }
- }
-
- for (i = 0; i < PIN_MAX; i++)
- if (strlen(pin_names[i]) > pin_names_width)
- pin_names_width = strlen(pin_names[i]);
- }
-}
-
-
-static void print_blanks(uint_fast8_t count)
-{
- while(count--)
- putchar(' ');
-}
-
-static int xstrlen(char *s)
-{
- if (s == NULL)
- return 0;
- else
- return strlen(s);
-}
-
-static const FLASH char * const FLASH pinconf_str[] = {
- FSTR("?"),
- FSTR("Input"),
- FSTR("Pullup"),
- FSTR("Output"),
- FSTR("Clock"),
- };
-
-static const FLASH char * const FLASH pinlevel_str[] = {
- FSTR("Low"),
- FSTR("High"),
- FSTR(""),
- };
-
-int print_pin(int pin, int multi)
-{
- int pinconf;
- const FLASH char *levelp;
- long div;
-
- pinconf = pin_config_get(pin);
- if (pinconf == OUTPUT_TIMER) {
- div = pin_clockdiv_get(pin);
- levelp = pinlevel_str[2];
- } else
- levelp = pinlevel_str[pin_read(pin)];
-
- if (multi) {
- printf_P(PSTR("%3d "), pin);
- if (pin_names_width) {
- printf_P(PSTR("%s "), pin_names[pin]);
- print_blanks(pin_names_width - xstrlen(pin_names[pin]));
- }
- my_puts_P(pinconf_str[pinconf]);
- print_blanks(7 - strlen_P(pinconf_str[pinconf]));
- my_puts_P(levelp);
- print_blanks(5 - strlen_P(levelp));
- if (pinconf == OUTPUT_TIMER)
- printf_P(PSTR("%8ld %8ld"),
- div, F_CPU/div);
- } else {
- printf_P(PSTR("%d: \"%s\", "), pin, pin_names[pin] ? pin_names[pin] : 0);
- my_puts_P(pinconf_str[pinconf]);
- printf_P(PSTR(", "));
- my_puts_P(levelp);
-
- if (pinconf == OUTPUT_TIMER)
- printf_P(PSTR("divide by %ld (%ldHz)"),
- div, F_CPU/div);
- }
- printf_P(PSTR("\n"));