X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=backends%2Fkiibohd.py;h=6bd333ce1fdbd4a80672aec6afbd784ede53c80e;hb=refs%2Fheads%2Fdonlayout;hp=09b6dca4245c5d13727a880f5ec353548eb0d380;hpb=f1bad4de4b82d4ebbda78184d9c05edaf999e4c3;p=kiibohd-kll.git diff --git a/backends/kiibohd.py b/backends/kiibohd.py index 09b6dca..6bd333c 100644 --- a/backends/kiibohd.py +++ b/backends/kiibohd.py @@ -1,9 +1,10 @@ #!/usr/bin/env python3 -# KLL Compiler - Kiibohd Backend -# -# Backend code generator for the Kiibohd Controller firmware. -# -# Copyright (C) 2014-2015 by Jacob Alexander +''' +KLL Compiler - Kiibohd Backend + +Backend code generator for the Kiibohd Controller firmware. +''' +# Copyright (C) 2014-2016 by Jacob Alexander # # This file is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -37,6 +38,11 @@ from kll_lib.hid_dict import * ### Classes ### class Backend( BackendBase ): + ''' + Kiibohd Code-Generation Backend + + Kiibohd specific code generation. + ''' # Default templates and output files templatePaths = ["templates/kiibohdKeymap.h", "templates/kiibohdDefs.h"] outputPaths = ["generatedKeymap.h", "kll_defs.h"] @@ -119,11 +125,14 @@ class Backend( BackendBase ): ## Defines ## self.fill_dict['Defines'] = "" + stateWordSize = "" # Iterate through defines and lookup the variables for define in variables.defines.keys(): if define in variables.overallVariables.keys(): self.fill_dict['Defines'] += "\n#define {0} {1}".format( variables.defines[ define ], variables.overallVariables[ define ].replace( '\n', ' \\\n' ) ) + if define == "stateWordSize": + stateWordSize = variables.overallVariables[ define ] else: print( "{0} '{1}' not defined...".format( WARNING, define ) ) @@ -144,6 +153,9 @@ class Backend( BackendBase ): self.fill_dict['CapabilitiesList'] += "};" self.fill_dict['CapabilitiesIndices'] += "} CapabilityIndex;" + # Define for total number of capabilities + self.fill_dict['Defines'] += "\n#define CapabilitiesNum_KLL {0}".format( len( capabilities.keys() ) ) + ## Results Macros ## self.fill_dict['ResultMacros'] = "" @@ -181,7 +193,11 @@ class Backend( BackendBase ): tag = resultItem[1][ arg ].split( '_', 1 )[1] if '_' in tag: tag = tag.replace( '_', '' ) - lookupNum = kll_hid_lookup_dictionary['ConsCode'][ tag ][1] + try: + lookupNum = kll_hid_lookup_dictionary['ConsCode'][ tag ][1] + except KeyError as err: + print ( "{0} {1} Consumer HID kll bug...please report.".format( ERROR, err ) ) + raise byteForm = lookupNum.to_bytes( 2, byteorder='little' ) # XXX Yes, little endian from how the uC structs work self.fill_dict['ResultMacros'] += "{0}, {1}, ".format( *byteForm ) continue @@ -211,15 +227,21 @@ class Backend( BackendBase ): self.fill_dict['ResultMacroList'] += "\tDefine_RM( {0} ),\n".format( result ) self.fill_dict['ResultMacroList'] += "};" + results_count = len( macros.resultsIndexSorted ) + ## Result Macro Record ## self.fill_dict['ResultMacroRecord'] = "ResultMacroRecord ResultMacroRecordList[ ResultMacroNum ];" + # Define for total number of Result Macros + self.fill_dict['Defines'] += "\n#define ResultMacroNum_KLL {0}".format( len( macros.resultsIndexSorted ) ) + ## Trigger Macros ## self.fill_dict['TriggerMacros'] = "" # Iterate through each of the trigger macros + triggers_count = len( macros.triggersIndexSorted ); for trigger in range( 0, len( macros.triggersIndexSorted ) ): self.fill_dict['TriggerMacros'] += "Guide_TM( {0} ) = {{ ".format( trigger ) @@ -245,6 +267,13 @@ class Backend( BackendBase ): self.fill_dict['TriggerMacros'] += "0 };\n" self.fill_dict['TriggerMacros'] = self.fill_dict['TriggerMacros'][ :-1 ] # Remove last newline + # check for too small stateWordSize + if stateWordSize == "8" and (triggers_count > 255 or results_count > 255): + print ("{0} Over 255 trigger or result macros, changing stateWordSize from {1} to 16.".format( WARNING, stateWordSize ) ) + print( "Results count: ", results_count ) + print( "Triggers count: ", triggers_count ) + stateWordSize == "16" + self.fill_dict['Defines'] = self.fill_dict['Defines'].replace("StateWordSize_define 8", "StateWordSize_define 16") ## Trigger Macro List ## self.fill_dict['TriggerMacroList'] = "const TriggerMacro TriggerMacroList[] = {\n" @@ -259,6 +288,9 @@ class Backend( BackendBase ): ## Trigger Macro Record ## self.fill_dict['TriggerMacroRecord'] = "TriggerMacroRecord TriggerMacroRecordList[ TriggerMacroNum ];" + # Define for total number of Trigger Macros + self.fill_dict['Defines'] += "\n#define TriggerMacroNum_KLL {0}".format( len( macros.triggersIndexSorted ) ) + ## Max Scan Code ## self.fill_dict['MaxScanCode'] = "#define MaxScanCode 0x{0:X}".format( macros.overallMaxScanCode ) @@ -350,6 +382,9 @@ class Backend( BackendBase ): self.fill_dict['LayerIndexList'] += '\tLayer_IN( layer{0}_scanMap, "{0}: {2}", 0x{1:02X} ),\n'.format( layer, firstScanCode, stackName ) self.fill_dict['LayerIndexList'] += "};" + # Define for total number of Trigger Macros + self.fill_dict['Defines'] += "\n#define LayerNum_KLL {0}".format( len( macros.triggerList ) ) + ## Layer State ## self.fill_dict['LayerState'] = "uint8_t LayerState[ LayerNum ];"