// diagnose commands static void cmd_diagnose(void) { u08 cmd, res; u08 exit = 0; while((cmd = get_char()) != 0) { switch(cmd) { case 'b': // buttons -> returns 0=no button 1=button2 2=button2 3=both buttons res = button1_pressed() | (button2_pressed() << 1); set_result(res); break; case 'l': // led: param: 1=green 2=yellow 3=both { cmd = parse_hex_byte(3); led_green(cmd & 1); led_yellow(cmd & 2); set_result(cmd); delay_ms(1000); } break; case 'i': // io sd diagnose: show sd detect and sd protect { res = sdpin_no_card() ? 1 :0; res |= sdpin_write_protect() ? 2:0; set_result(res); } break; default: set_result(ERROR_SYNTAX); case '.': exit = 1; break; } if(exit) break; } }
u08 cmd_uart_get_next(u08 **data) { rx_size = 0; int button_press = 0; while(1) { while(!uart_read_ready()) { #ifdef USE_BUTTON_CONTROL // check buttons if(button1_pressed()) { while(button1_pressed()) {} rx_buf[0] = 'R'; rx_size = 1; button_press = 1; break; } if(button2_pressed()) { while(button2_pressed()) {} rx_buf[0] = 'W'; rx_size = 1; button_press = 1; break; } #endif } if(button_press) { break; } u08 c; uart_read(&c); uart_send(c); if((c == '\n')||(c == '\r')) { break; } rx_buf[rx_size] = c; rx_size++; } *data = rx_buf; uart_send_crlf(); return rx_size; }
/* * Task of polling buttons. */ void poll_buttons (void *data) { unsigned char pagenum = 0; unsigned char b1_pressed = 0, b2_pressed = 0; unsigned char b3_pressed = 0, b4_pressed = 0; printf (&line1, "Testing LCD."); printf (&line2, "Use buttons."); for (;;) { timer_delay (&timer, 10); if (! button1_pressed ()) b1_pressed = 0; else if (! b1_pressed) { b1_pressed = 1; /* Button 1: clear screen. */ lcd_clear_all (&line1, &line2); printf (&line1, "Cleared."); } if (! button2_pressed ()) b2_pressed = 0; else if (! b2_pressed) { b2_pressed = 1; /* Button 2: show previous page of symbols. */ display_page (--pagenum); } if (! button3_pressed ()) b3_pressed = 0; else if (! b3_pressed) { b3_pressed = 1; /* Button 3: show next page of symbols. */ display_page (++pagenum); } if (! button4_pressed ()) b4_pressed = 0; else if (! b4_pressed) { b4_pressed = 1; /* Button 4: scroll long message. */ printf (&line2, message1); timer_delay (&timer, 500); printf (&line2, message2); } } }