2015-02-09 21:21:23 +00:00
/* Copyright (C) 2013-2015 by Jacob Alexander
2014-03-22 21:32:06 +00:00
*
2011-09-30 05:22:19 +00:00
* Permission is hereby granted , free of charge , to any person obtaining a copy
* of this software and associated documentation files ( the " Software " ) , to deal
* in the Software without restriction , including without limitation the rights
* to use , copy , modify , merge , publish , distribute , sublicense , and / or sell
* copies of the Software , and to permit persons to whom the Software is
* furnished to do so , subject to the following conditions :
2014-03-22 21:32:06 +00:00
*
2011-09-30 05:22:19 +00:00
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software .
2014-03-22 21:32:06 +00:00
*
2011-09-30 05:22:19 +00:00
* THE SOFTWARE IS PROVIDED " AS IS " , WITHOUT WARRANTY OF ANY KIND , EXPRESS OR
* IMPLIED , INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY ,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT . IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM , DAMAGES OR OTHER
* LIABILITY , WHETHER IN AN ACTION OF CONTRACT , TORT OR OTHERWISE , ARISING FROM ,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE .
*/
2015-06-14 20:56:56 +00:00
# pragma once
2011-09-30 05:22:19 +00:00
// ----- Includes -----
// Compiler Includes
# include <stdint.h>
// Local Includes
2013-02-02 01:02:55 +00:00
# include <buildvars.h> // Defines USB Parameters, partially generated by CMake
2011-09-30 05:22:19 +00:00
// ----- Defines -----
2014-09-21 18:55:37 +00:00
// Max size of key buffer needed for NKRO
// Boot mode uses only the first 6 bytes
2014-10-03 02:29:56 +00:00
# define USB_NKRO_BITFIELD_SIZE_KEYS 27
2014-09-21 18:55:37 +00:00
# define USB_BOOT_MAX_KEYS 6
// ----- Enumerations -----
// USB NKRO state transitions (indicates which Report ID's need refreshing)
// Boot mode just checks if any keys were changed (as everything is sent every time)
typedef enum USBKeyChangeState {
USBKeyChangeState_None = 0x00 ,
USBKeyChangeState_Modifiers = 0x01 ,
USBKeyChangeState_MainKeys = 0x02 ,
USBKeyChangeState_SecondaryKeys = 0x04 ,
2014-10-02 08:40:14 +00:00
USBKeyChangeState_TertiaryKeys = 0x08 ,
2014-11-11 05:02:25 +00:00
USBKeyChangeState_QuartiaryKeys = 0x10 ,
USBKeyChangeState_System = 0x20 ,
USBKeyChangeState_Consumer = 0x40 ,
USBKeyChangeState_All = 0x7F ,
2014-09-21 18:55:37 +00:00
} USBKeyChangeState ;
2011-09-30 05:22:19 +00:00
// ----- Variables -----
2014-04-06 18:49:27 +00:00
// Variables used to communciate to the output module
// XXX Even if the output module is not USB, this is internally understood keymapping scheme
2014-09-21 18:55:37 +00:00
extern uint8_t USBKeys_Modifiers ;
extern uint8_t USBKeys_Keys [ USB_NKRO_BITFIELD_SIZE_KEYS ] ;
extern uint8_t USBKeys_Sent ;
extern volatile uint8_t USBKeys_LEDs ;
extern uint8_t USBKeys_SysCtrl ; // 1KRO container for System Control HID table
extern uint16_t USBKeys_ConsCtrl ; // 1KRO container for Consumer Control HID table
2013-01-27 06:47:52 +00:00
2014-09-21 18:55:37 +00:00
extern volatile uint8_t USBKeys_Protocol ; // 0 - Boot Mode, 1 - NKRO Mode
2011-09-30 05:22:19 +00:00
2013-01-27 06:47:52 +00:00
// Misc variables (XXX Some are only properly utilized using AVR)
2014-09-21 18:55:37 +00:00
extern uint8_t USBKeys_Idle_Config ;
extern uint8_t USBKeys_Idle_Count ;
extern USBKeyChangeState USBKeys_Changed ;
2013-01-27 06:47:52 +00:00
2015-07-19 01:53:21 +00:00
extern volatile uint8_t Output_Available ; // 0 - Output module not fully functional, 1 - Output module working
2015-02-09 21:21:23 +00:00
2015-02-21 21:06:28 +00:00
extern uint8_t Output_DebugMode ; // 0 - Debug disabled, 1 - Debug enabled
2011-09-30 05:22:19 +00:00
2014-08-08 03:03:39 +00:00
// ----- Capabilities -----
2014-10-02 06:44:12 +00:00
// Output capabilities
2014-09-21 18:55:37 +00:00
void Output_consCtrlSend_capability ( uint8_t state , uint8_t stateType , uint8_t * args ) ;
2015-05-02 21:29:27 +00:00
void Output_noneSend_capability ( uint8_t state , uint8_t stateType , uint8_t * args ) ;
2014-09-21 18:55:37 +00:00
void Output_sysCtrlSend_capability ( uint8_t state , uint8_t stateType , uint8_t * args ) ;
2014-08-08 03:03:39 +00:00
void Output_usbCodeSend_capability ( uint8_t state , uint8_t stateType , uint8_t * args ) ;
2014-10-02 06:44:12 +00:00
// Configuration capabilities
void Output_kbdProtocolBoot_capability ( uint8_t state , uint8_t stateType , uint8_t * args ) ;
void Output_kbdProtocolNKRO_capability ( uint8_t state , uint8_t stateType , uint8_t * args ) ;
2014-08-08 03:03:39 +00:00
2011-09-30 05:22:19 +00:00
// ----- Functions -----
2014-04-06 18:49:27 +00:00
void Output_setup ( ) ;
void Output_send ( ) ;
2014-03-22 21:32:06 +00:00
2014-10-02 06:44:12 +00:00
void Output_flushBuffers ( ) ;
2014-04-06 18:49:27 +00:00
void Output_firmwareReload ( ) ;
void Output_softReset ( ) ;
2014-03-31 08:07:48 +00:00
// Relies on USB serial module
2014-04-06 18:49:27 +00:00
unsigned int Output_availablechar ( ) ;
2014-03-31 08:07:48 +00:00
2014-04-06 18:49:27 +00:00
int Output_getchar ( ) ;
int Output_putchar ( char c ) ;
int Output_putstr ( char * str ) ;
2011-09-30 05:22:19 +00:00