*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
ao_lcd_clear();
}
-void
-ao_lcd_contrast(void)
-{
- ao_cmd_hex();
- if (ao_cmd_status == ao_cmd_success) {
- printf("setting contrast to %02x\n", ao_cmd_lex_i);
- ao_lcd_contrast_set(ao_cmd_lex_i & 0x3f);
- }
-}
-
-static uint8_t
-ao_cmd_hex_nibble(void)
-{
- if ('0' <= ao_cmd_lex_c && ao_cmd_lex_c <= '9')
- return ao_cmd_lex_c - '0';
- if ('a' <= ao_cmd_lex_c && ao_cmd_lex_c <= 'f')
- return ao_cmd_lex_c - ('a' - 10);
- if ('A' <= ao_cmd_lex_c && ao_cmd_lex_c <= 'F')
- return ao_cmd_lex_c - ('A' - 10);
- ao_cmd_status = ao_cmd_syntax_error;
- return 0;
-}
-
-void
-ao_lcd_string(void)
-{
- uint8_t col = 0;
- char c;
-
- ao_cmd_decimal();
- if (ao_cmd_status != ao_cmd_success)
- return;
- ao_lcd_send_ins(0x80 | (ao_cmd_lex_i ? 0x40 : 0x00));
- ao_cmd_white();
- while (ao_cmd_lex_c != '\n') {
- c = ao_cmd_lex_c;
- if (c == '\\') {
- ao_cmd_lex();
- c = ao_cmd_hex_nibble() << 4;
- ao_cmd_lex();
- c |= ao_cmd_hex_nibble();
- }
- ao_lcd_put_byte(c);
- ao_cmd_lex();
- col++;
- }
- while (col < 16) {
- ao_lcd_put_byte(' ');
- col++;
- }
-}
-
-void
-ao_lcd_delay_set(void)
-{
- ao_cmd_decimal();
- if (ao_cmd_status == ao_cmd_success) {
- printf("setting LCD delay to %d\n", ao_cmd_lex_i);
- ao_lcd_time = ao_cmd_lex_i;
- }
-}
-
-__code struct ao_cmds ao_lcd_cmds[] = {
- { ao_lcd_start, "S\0Start LCD" },
- { ao_lcd_contrast, "C <contrast>\0Set LCD contrast" },
- { ao_lcd_string, "s <line> <string>\0Send string to LCD" },
- { ao_lcd_delay_set, "t <delay>\0Set LCD delay" },
- { 0, NULL },
-};
-
void
ao_lcd_init(void)
{
ao_lcd_port_init();
- ao_cmd_register(&ao_lcd_cmds[0]);
}