2011-07-20 15:32:52 +00:00
/*
2013-01-28 05:06:42 +00:00
Copyright 2011 , 2012 , 2013 Jun Wako < wakojun @ gmail . com >
2011-07-20 15:32:52 +00:00
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 , 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
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program . If not , see < http : //www.gnu.org/licenses/>.
*/
2011-02-08 15:03:58 +00:00
# ifndef KEYBOARD_H
# define KEYBOARD_H
2012-10-05 17:23:12 +00:00
# include <stdbool.h>
2011-02-12 15:15:51 +00:00
# include <stdint.h>
2011-02-08 15:03:58 +00:00
2012-08-25 06:49:08 +00:00
# ifdef __cplusplus
extern " C " {
# endif
2012-10-05 17:23:12 +00:00
2013-01-28 05:06:42 +00:00
/* key matrix position */
2012-10-05 17:23:12 +00:00
typedef struct {
uint8_t col ;
2013-01-17 06:00:41 +00:00
uint8_t row ;
} key_t ;
2013-01-28 05:06:42 +00:00
/* key event */
2012-10-05 17:23:12 +00:00
typedef struct {
2013-01-20 06:03:07 +00:00
key_t key ;
2012-10-05 17:23:12 +00:00
bool pressed ;
2013-01-09 13:33:33 +00:00
uint16_t time ;
2012-10-05 17:23:12 +00:00
} keyevent_t ;
2013-01-28 05:06:42 +00:00
/* equivalent test of key_t */
2013-02-13 03:16:24 +00:00
# define KEYEQ(keya, keyb) ((keya).row == (keyb).row && (keya).col == (keyb).col)
2013-01-28 05:06:42 +00:00
/* (time == 0) means no event and assumes matrix has no 255 line. */
2013-02-13 03:16:24 +00:00
# define IS_NOEVENT(event) ((event).time == 0 || ((event).key.row == 255 && (event).key.col == 255))
2013-01-28 05:06:42 +00:00
2013-01-23 16:02:11 +00:00
# define NOEVENT (keyevent_t){ \
2013-02-13 03:16:24 +00:00
. key = ( key_t ) { . row = 255 , . col = 255 } , \
2013-01-23 16:02:11 +00:00
. pressed = false , \
. time = 0 \
2013-01-14 15:06:52 +00:00
}
2013-01-28 05:06:42 +00:00
/* tick event */
2013-01-26 17:42:48 +00:00
# define TICK (keyevent_t){ \
2013-02-13 03:16:24 +00:00
. key = ( key_t ) { . row = 255 , . col = 255 } , \
2013-01-26 17:42:48 +00:00
. pressed = false , \
2013-01-28 05:06:42 +00:00
. time = ( timer_read ( ) | 1 ) \
2013-01-26 17:42:48 +00:00
}
2013-01-14 15:06:52 +00:00
2012-10-05 17:23:12 +00:00
2011-02-10 06:51:30 +00:00
void keyboard_init ( void ) ;
2012-10-05 17:23:12 +00:00
void keyboard_task ( void ) ;
2011-02-12 15:15:51 +00:00
void keyboard_set_leds ( uint8_t leds ) ;
2012-10-05 17:23:12 +00:00
2012-08-25 06:49:08 +00:00
# ifdef __cplusplus
}
# endif
2011-02-08 15:03:58 +00:00
# endif