X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=src%2Fdrivers%2Fao_lcd.c;h=6def0c80518ec9ee2bd9579dcee04c97d403bea1;hp=8745b3f631509858b7a83b1fc9aa29c63841a6e2;hb=b4eba3f3a58a9c35e3699ff14405b997c1318d91;hpb=da330c5975b9f565d059ef8084dfdacc20f34246 diff --git a/src/drivers/ao_lcd.c b/src/drivers/ao_lcd.c index 8745b3f6..6def0c80 100644 --- a/src/drivers/ao_lcd.c +++ b/src/drivers/ao_lcd.c @@ -73,6 +73,22 @@ ao_lcd_contrast_set(uint8_t contrast) ao_mutex_put(&ao_lcd_mutex); } +void +ao_lcd_cursor_on(void) +{ + ao_mutex_get(&ao_lcd_mutex); + ao_lcd_send_ins(0x08 | 0x04 | 0x02 | 0x01); + ao_mutex_put(&ao_lcd_mutex); +} + +void +ao_lcd_cursor_off(void) +{ + ao_mutex_get(&ao_lcd_mutex); + ao_lcd_send_ins(0x08 | 0x04); + ao_mutex_put(&ao_lcd_mutex); +} + void ao_lcd_clear(void) { @@ -127,79 +143,8 @@ ao_lcd_start(void) 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 \0Set LCD contrast" }, - { ao_lcd_string, "s \0Send string to LCD" }, - { ao_lcd_delay_set, "t \0Set LCD delay" }, - { 0, NULL }, -}; - void ao_lcd_init(void) { ao_lcd_port_init(); - ao_cmd_register(&ao_lcd_cmds[0]); }