added keyhandler example
This commit is contained in:
+1
-1
@@ -11,7 +11,7 @@ EFUSE = 0x05
|
||||
|
||||
## === Source files ===
|
||||
# Main C file
|
||||
MAIN = uart_isr.c
|
||||
MAIN = uart_keyhandler.c
|
||||
# Extra C files in this folder
|
||||
LOCAL_SOURCE =
|
||||
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
#include <avr/io.h>
|
||||
#include <avr/pgmspace.h>
|
||||
#include <avr/interrupt.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "lib/uart.h"
|
||||
#include "lib/uart_ansi.h"
|
||||
#include "lib/stream.h"
|
||||
|
||||
//
|
||||
// Example of asynchronous UART key handling
|
||||
//
|
||||
// It recognizes special keys like arrows and some F keys,
|
||||
// check the header file for full list.
|
||||
//
|
||||
// You need uart_ansi for this.
|
||||
//
|
||||
|
||||
ISR(USART_RX_vect)
|
||||
{
|
||||
char c = uart_rx();
|
||||
vt_handle_key(c);
|
||||
// we can do anything further with the received byte
|
||||
}
|
||||
|
||||
|
||||
// Our custom key handler function
|
||||
void key_handler(uint8_t code, bool special)
|
||||
{
|
||||
put_str_P(uart, special ? PSTR("Special: ") : PSTR("Char: "));
|
||||
put_char(uart, code); // the actual character
|
||||
put_char(uart, ' '); // space
|
||||
put_u8(uart, code); // as number
|
||||
put_nl(uart); // crlf
|
||||
}
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
uart_init(9600); // set BAUD-rate
|
||||
uart_isr_rx(1); // enable the ISR
|
||||
vt_init(); // initialize uart_ansi library
|
||||
|
||||
vt_set_key_handler(&key_handler); // assign our custom handler
|
||||
|
||||
sei();
|
||||
|
||||
put_str_P(uart, PSTR("UART key handler test!\r\n"));
|
||||
|
||||
while(1);
|
||||
}
|
||||
@@ -38,6 +38,7 @@ void put_str_P(const STREAM *p, const char* str);
|
||||
|
||||
|
||||
/** Send signed int8 */
|
||||
#define put_char(p, c) (p)->tx((c))
|
||||
void put_u8(const STREAM *p, const uint8_t num);
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user