2011-09-17 13:39:50 +00:00
/*
2012-10-09 07:50:14 +00:00
Copyright 2011 , 2012 Jun Wako < wakojun @ gmail . com >
2011-09-17 13:39:50 +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/>.
*/
# include <stdint.h>
# include <avr/interrupt.h>
2012-10-09 05:36:13 +00:00
# include "keycode.h"
2011-09-17 13:39:50 +00:00
# include "host.h"
# include "util.h"
# include "debug.h"
# ifdef NKRO_ENABLE
bool keyboard_nkro = false ;
# endif
2012-10-11 19:46:37 +00:00
static host_driver_t * driver ;
static uint16_t last_system_report = 0 ;
static uint16_t last_consumer_report = 0 ;
2011-09-17 13:39:50 +00:00
void host_set_driver ( host_driver_t * d )
{
driver = d ;
}
host_driver_t * host_get_driver ( void )
{
return driver ;
}
uint8_t host_keyboard_leds ( void )
{
if ( ! driver ) return 0 ;
return ( * driver - > keyboard_leds ) ( ) ;
}
2012-10-11 19:46:37 +00:00
/* send report */
void host_keyboard_send ( report_keyboard_t * report )
{
if ( ! driver ) return ;
( * driver - > send_keyboard ) ( report ) ;
if ( debug_keyboard ) {
2013-07-28 08:34:41 +00:00
dprint ( " keyboard_report: " ) ;
for ( uint8_t i = 0 ; i < REPORT_SIZE ; i + + ) {
2013-10-03 18:30:09 +00:00
dprintf ( " %02X " , report - > raw [ i ] ) ;
2012-10-11 19:46:37 +00:00
}
2013-07-28 08:34:41 +00:00
dprint ( " \n " ) ;
2012-10-11 19:46:37 +00:00
}
}
void host_mouse_send ( report_mouse_t * report )
{
if ( ! driver ) return ;
( * driver - > send_mouse ) ( report ) ;
}
void host_system_send ( uint16_t report )
{
if ( report = = last_system_report ) return ;
last_system_report = report ;
if ( ! driver ) return ;
( * driver - > send_system ) ( report ) ;
}
void host_consumer_send ( uint16_t report )
{
if ( report = = last_consumer_report ) return ;
last_consumer_report = report ;
if ( ! driver ) return ;
( * driver - > send_consumer ) ( report ) ;
}
uint16_t host_last_sysytem_report ( void )
2011-09-17 13:39:50 +00:00
{
2012-10-11 19:46:37 +00:00
return last_system_report ;
2011-09-17 13:39:50 +00:00
}
2012-10-11 19:46:37 +00:00
uint16_t host_last_consumer_report ( void )
2011-09-17 13:39:50 +00:00
{
2012-10-11 19:46:37 +00:00
return last_consumer_report ;
2011-09-17 13:39:50 +00:00
}