Changeset 659bbff in avrstuff


Ignore:
Timestamp:
Jul 31, 2010, 6:22:24 PM (14 years ago)
Author:
Adrien Destugues <pulkomandy@…>
Branches:
main
Children:
d056b2b
Parents:
d851b8b
Message:
  • Firmware fonctionnel

git-svn-id: svn://pulkomandy.tk/avrstuff@12 c6672c3c-f6b6-47f9-9001-1fd6b12fecbe

Location:
aktoserial/code
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • aktoserial/code/Makefile

    rd851b8b r659bbff  
    2121.c.o:
    2222        $(COMPILE) -std=c99 -c $< -o $@
     23
     24flash:
     25        avrdude -c usbasp -p atmega8 -Uflash:w:keyboard.hex
  • aktoserial/code/keyboard.hex

    rd851b8b r659bbff  
    1 :10000000EFC071C212C107C106C105C104C103C15D
    2 :1000100002C101C100C1FFC0FEC0FDC0FCC0FBC0E9
    3 :10002000FAC0F9C0F8C06031323334353637383968
    4 :10003000302D3D5C3F3071776572747975696F70F2
    5 :100040005B5D3F3132336173646667686A6B6C3B3A
    6 :1000500027B93F3435363C7A786376626E6D2C2E44
    7 :100060002F3F2E3738392008090A0A1B7F3F3F3FB0
    8 :100070003F3F55444C5231323334353637383930BE
    9 :100080003F3F3F3F3F4853534358414141413F3F2A
    10 :100090003F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F70
    11 :1000A0003F3F3F3F3F3F351E1F202122232425266F
    12 :1000B000272D2E310062141A0815171C180C121364
    13 :1000C000302F00595A5B041607090A0B0D0E0F3327
    14 :1000D0003432005C5D5E641D1B0619051110363755
    15 :1000E0003800635F60612C4C2B5828292A000000DF
    16 :1000F000560052514F503A3B3C3D3E3F40414243F7
    17 :10010000838254555775000039000000000000003C
    18 :1001100000000000000000000000000000000000DF
    19 :10012000000000000000022000010400088005011A
    20 :100130000906A101050719E029E715002501750148
    21 :1001400095088102950175088103950575010508DB
    22 :10015000190129059102950175039103950675080A
    23 :10016000150025650507190029658100C0040309EC
    24 :10017000042403700075006C006B006F006D00615B
    25 :10018000006E00640079002E006100740068002E8B
    26 :100190000063007800160341006D0069006B006584
    27 :1001A0000079003200750073006200120110010036
    28 :1001B000000008424231E10001010200010902226F
    29 :1001C000000101008032090400000103010100095F
    30 :1001D0002101010001223F000705810308000A00F8
    31 :1001E00011241FBECFE5D4E0DEBFCDBF10E0A0E6F6
    32 :1001F000B0E0ECEDF9E002C005900D92A436B10735
    33 :10020000D9F710E0A4E6B0E001C01D92AB3AB10707
    34 :10021000E1F70FD1E1C3F4CE8C9A949884E591E094
    35 :100220000197F1F7949A8C9808951F920F920FB648
    36 :100230000F9211242F933F938F939F9382B390E457
    37 :10024000892782BB83992CC080917100882339F45F
    38 :1002500081E08093710010927300109272003091CF
    39 :100260007300383090F484990DC02091720080E8BA
    40 :1002700090E0032E02C0959587950A94E2F7282B0B
    41 :10028000209372003F5F3093730080917300883039
    42 :1002900038F0109271001092730081E08093740026
    43 :1002A0009F918F913F912F910F900FBE0F901F90B4
    44 :1002B0001895E82FF0E0EA5DFF4F9491809170006F
    45 :1002C000882311F4892F0895892F80520895839BE4
    46 :1002D000FECF80EA8A95F1F79FDF1092740080913B
    47 :1002E00072000895809174008823E1F3F0DF08958F
    48 :1002F0001092710010927200109273008B98839A82
    49 :1003000085B7886085BF85B78B7F85BF8BB78068D1
    50 :100310008BBF789481DF0895FC0187E690E090938D
    51 :10032000900080938F0080818076803271F581818A
    52 :10033000813011F488E00895893049F486819781ED
    53 :10034000019719F581E0809364008FEF0895823062
    54 :1003500019F486E690E013C08A3029F483818093F3
    55 :10036000660080E00895833031F48381882369F446
    56 :100370001092600008958B3041F480E690E09093F5
    57 :10038000900080938F0081E0089580E00895FC0143
    58 :1003900080916400882329F0613019F48081809372
    59 :1003A00065001092640081E00895DF93CF93CDB78C
    60 :1003B000DEB728970FB6F894DEBF0FBECDBF982FDB
    61 :1003C0008091800084FFFCCFFE01319688E0DF0140
    62 :1003D0001D928A95E9F799836B83CF0168E0D9D2A2
    63 :1003E00028960FB6F894DEBF0FBECDBFCF91DF9138
    64 :1003F000089598E0E7E6F0E0DF011D929A95E9F7AD
    65 :10040000282F30E0F901EA55FF4F9491805688304B
    66 :1004100010F020E004C02A533F4FF90124919923A2
    67 :1004200011F09093690080916700282B209367005A
    68 :100430000895DF92EF92FF920F931F938FE028E1D0
    69 :1004400030E00FB6F894A89521BD0FBE81BD85E0C0
    70 :1004500083BF8E9A69D14CDF789410E080E4D82E67
    71 :10046000EE24E39401C0102FA8956BD1F090740096
    72 :100470008091740081112BDF08B600FE0AC0E8BE2F
    73 :1004800000916600002329F0153030F0012F05504F
    74 :1004900001C0012FFF2039F38091800084FFE3CF5A
    75 :1004A0008CE1A7DF87E690E068E073D282B38D2508
    76 :1004B00082BBD9CFA82FB92F80E090E041E050EA6D
    77 :1004C000609530E009C02D9182279795879510F0AF
    78 :1004D00084279527305EC8F36F5FA8F30895EADF9D
    79 :1004E0008D939D930895CF93CFB7CF93DF93C3950B
    80 :1004F000859BE9F7859B0BC0859B09C0859B07C041
    81 :10050000859B05C0859B03C0859B01C08BC06F93F5
    82 :10051000C0918E00DD27CB56DF4F2F9365E5859B7D
    83 :1005200003C02F916F91E6CF0F931F934F9320E05D
    84 :1005300040E15F9300B3047205FB27F93F9350E05D
    85 :100540003BE039C0147240642F77012F5F5F1EC0FB
    86 :10055000406810B314722F7752501FC0406400B32C
    87 :100560002F770472D1F15F5F00C023C0406210B3E7
    88 :100570002F77147291F15F5F00C025C004721027BD
    89 :10058000515012F45D5F0000115027952C3F10B3BD
    90 :10059000C8F614720127015027952C3FC8F6422750
    91 :1005A000499300B3047210274F73115027952C3FC5
    92 :1005B000A8F64695469510B3147279F001270150BC
    93 :1005C00027952C3F98F66B5A60F3315000B3B0F684
    94 :1005D00000C010E41ABF002719C03B503195C31B5F
    95 :1005E000D04010E41ABF0881033C09F10B34F9F044
    96 :1005F00020918C001981110F1213EDCF4A81441FF5
    97 :10060000093651F10D3211F0013E29F700939300A4
    98 :100610003F915F914F911F910F912F916F91CAB7A9
    99 :10062000C6FD65CFDF91CF91CFBFCF9118952091B7
    100 :100630009300222369F310919100112391F5343036
    101 :1006400092F13093910020938D0010918E003BE049
    102 :10065000311B30938E0027C00091910001300CF5C2
    103 :100660000AE54F7049F43091610034FD1DC00093DC
    104 :100670006100C5E7D0E01CC03091800034FD14C09B
    105 :1006800000938000C1E8D0E013C0052710E000C04F
    106 :10069000000002BB1AC0052710E0221F1DC010E099
    107 :1006A00021C04AE502C032ED432FC4E1D0E032E080
    108 :1006B00011B31462959A02B311BB54E220E865E3CA
    109 :1006C00020FF052702BB279517951C3FF0F666957E
    110 :1006D000B8F7B1F720FF052702BB279517951C3FF8
    111 :1006E000D0F62795179517FF052700001C3F02BB82
    112 :1006F000B0F629913A9519F70B7D10919200110FE0
    113 :10070000C651D04002BB11F010938C0010E41ABF08
    114 :10071000006211B31B7D402F4B7D54E05A95F1F7D9
    115 :1007200002BB11BB42BB74CF85B7836085BF8BB75B
    116 :1007300080648BBF8BE4809381008AE58093800086
    117 :1007400008951F93CF93DF9360919100635067FDED
    118 :10075000C4C080918E00CCE0D0E0C81BD109CB563C
    119 :10076000DF4F80918D008D3209F0A4C0683009F010
    120 :10077000B2C083EC809375008AE58093610010928B
    121 :100780006F008881807641F0CE010E948C01282F75
    122 :100790008F3F09F47EC084C09A8110927E008981C7
    123 :1007A000882321F410927F0022E06CC0853019F478
    124 :1007B0009093920066C0863009F04FC08B818130E3
    125 :1007C00041F48BEA91E09093900080938F0022E1B6
    126 :1007D00040C0823041F48DEB91E090939000809383
    127 :1007E0008F0022E236C08330F9F48A81882341F4F5
    128 :1007F0008DE691E09093900080938F0024E029C0D3
    129 :10080000813041F481E791E09093900080938F00D4
    130 :1008100024E21FC08230E1F485E991E090939000DA
    131 :1008200080938F0026E115C0813241F48FEC91E076
    132 :100830009093900080938F0029E00BC0823241F4A6
    133 :100840008EE291E09093900080938F002FE301C09F
    134 :1008500020E080E480936F0023C0883021F421E001
    135 :1008600084E990E011C0893019F49093940009C094
    136 :100870008A3011F421E006C08B3019F48BE48093A8
    137 :10088000810020E08EE790E09093900080938F00AD
    138 :1008900007C0888187FD2E8180E880936F0006C0A5
    139 :1008A0008F81882319F48E81821708F0822F80931C
    140 :1008B000620011C080916F0087FF0DC0CE010E94C1
    141 :1008C000C7018F3F21F48EE18093610004C088232B
    142 :1008D00011F010926200109291008091610084FFEB
    143 :1008E0004AC0809162008F3F09F445C0182F8930BB
    144 :1008F00008F018E0811B809362008091750098E8F1
    145 :10090000892780937500112341F120918F00309148
    146 :10091000900080916F0086FF0DC0A6E7B0E080E0F8
    147 :1009200090E0F901E80FF91FE491ED930196181793
    148 :10093000C1F708C0912FD901E6E7F0E08D918193CE
    149 :100940009150E1F71150812F90E01F5F0196820FC7
    150 :10095000931F9093900080938F0086E790E0612F23
    151 :100960000E946F02612F6C5F6C3019F08FEF8093E3
    152 :1009700062006093610094E180B3847231F491501D
    153 :10098000D9F71092920010928C00DF91CF911F91B5
    154 :1009900008951F93DC01162F8091800084FF07C00B
    155 :1009A0008091810098E889278093810003C08AE5BF
    156 :1009B00080938000912FE2E8F0E08D918193915037
    157 :1009C0001916DCF382E890E0612F0E946F021C5F31
    158 :0C09D000109380001F910895F894FFCF51
    159 :0409DC00015AFF00BD
     1:10000000A7C076C2CAC0BFC0BEC0BDC0BCC0BBC056
     2:10001000BAC0B9C0B8C0B7C0B6C0B5C0B4C0B3C02C
     3:10002000B2C0B1C0B0C0351E1F2021222324252616
     4:10003000272D2E440062141A0815171C180C1213D1
     5:100040002F3000595A5B041607090A0B0D0E0F33A7
     6:100050003432005C5D5E641D1B06190511103637D5
     7:100060003800635F60612C2A2B5828294C0000005F
     8:10007000560052514F503A3B3C3D3E3F4041424377
     9:100080004A4D54555745000039000000000000005B
     10:10009000000000000000022000010440088005016B
     11:1000A0000906A101050719E029E7150025017501D9
     12:1000B000950881029501750881039505750105086C
     13:1000C000190129059102950175039103950675089B
     14:1000D000150025650507190029658100C00403097D
     15:1000E000042403700075006C006B006F006D0061EC
     16:1000F000006E00640079002E006100740068002E1C
     17:100100000063007800160341006D0069006B006514
     18:1001100000790032007500730062001201100100C6
     19:10012000000008424231E1000101020001090222FF
     20:1001300000010100803209040000010301010009EF
     21:100140002101010001223F000705810308000A0088
     22:1001500011241FBECFE5D4E0DEBFCDBF10E0A0E686
     23:10016000B0E0E6EEF9E002C005900D92A436B107CA
     24:10017000D9F710E0A4E6B0E001C01D92AC3AB10797
     25:10018000E1F716D12EC43CCF8C9A949884E591E087
     26:100190000197F1F7949A8C9808951F920F920FB6D9
     27:1001A0000F9211242F933F938F939F9383992CC089
     28:1001B00080917200882339F481E08093720010925C
     29:1001C00074001092730030917400383090F4849968
     30:1001D0000DC02091730080E890E0032E02C0959539
     31:1001E00087950A94E2F7282B209373003F5F3093A2
     32:1001F000740080917400883038F010927200109270
     33:10020000740081E0809375009F918F913F912F91B1
     34:100210000F900FBE0F901F901895839BFECF80EA22
     35:100220008A95F1F7B1DF10927500809173000895FF
     36:10023000809175008823E1F3F0DF08951092720039
     37:1002400010927300109274008B98839A85B788601F
     38:1002500085BF85B78B7F85BF8BB780688BBF789450
     39:1002600093DF0895282F30E0F901EA5DFF4F4491B4
     40:100270008056883010F090E004C02A5C3F4FF901AE
     41:100280009491442389F080916100883068F4E82FCC
     42:10029000F0E0E859FF4F40838F5F8093610049335E
     43:1002A00019F481E08093660080916800982B909308
     44:1002B00068000895282F30E0F901EA5DFF4F44916E
     45:1002C0008056883010F030E004C02A5C3F4FF901BE
     46:1002D00034914423E9F02091610092E015C0E92FA8
     47:1002E000F0E0E859FF4F8081841769F407C0E92FD7
     48:1002F000F0E0E859FF4F818180839F5F9730B8F32A
     49:1003000010926F0021509F5F921748F32093610075
     50:100310003095809168003823309368000895FC017F
     51:1003200088E690E0909391008093900080818076A1
     52:10033000803271F58181813011F488E0089589302F
     53:1003400049F486819781019719F581E080936400D3
     54:100350008FEF0895823019F487E690E013C08A3059
     55:1003600029F483818093670080E00895833031F41D
     56:100370008381882369F41092600008958B3041F4E2
     57:1003800080E690E0909391008093900081E0089542
     58:1003900080E00895FC0180916400882329F0613099
     59:1003A00019F48081809365001092640081E00895C3
     60:1003B000DF92EF92FF920F931F932FE088E190E07E
     61:1003C0000FB6F894A89581BD0FBE21BD85E083BF0F
     62:1003D000A59AA49A88E0E8E6F0E0DF011D928A95EC
     63:1003E000E9F7A7D12BDF789400E090E1D92E80E2E5
     64:1003F000E82EFF24F39401C0012FA895A7D1809186
     65:100400007500809175008823C1F007DF95B39D25A5
     66:1004100095BB95B39E2595BB982F969580FD03C0FF
     67:10042000892F20DF02C0892F45DF8091810084FF62
     68:1004300004C088E690E068E0B1D208B600FEDDCFE7
     69:10044000F8BE109167001123C1F2053018F0102F8B
     70:100450001550D2CF80916600882321F082E62ADFF2
     71:10046000109266008091810084FFC6CF88E690E0FC
     72:1004700068E094D2C1CFDF93CF93CDB7DEB7289792
     73:100480000FB6F894DEBF0FBECDBF982F80918100CC
     74:1004900084FFFCCFFE01319688E0DF011D928A9532
     75:1004A000E9F799836B83CF0168E078D228960FB67D
     76:1004B000F894DEBF0FBECDBFCF91DF910895A82F76
     77:1004C000B92F80E090E041E050EA609530E009C04B
     78:1004D0002D9182279795879510F084279527305E78
     79:1004E000C8F36F5FA8F30895EADF8D939D93089595
     80:1004F000CF93CFB7CF93DF93C395859BE9F7859BC8
     81:100500000BC0859B09C0859B07C0859B05C0859B4B
     82:1005100003C0859B01C08BC06F93C0918F00DD2706
     83:10052000CA56DF4F2F9365E5859B03C02F916F91CE
     84:10053000E6CF0F931F934F9320E040E15F9300B30A
     85:10054000047205FB27F93F9350E03BE039C0147279
     86:1005500040642F77012F5F5F1EC0406810B3147294
     87:100560002F7752501FC0406400B32F770472D1F12F
     88:100570005F5F00C023C0406210B32F77147291F107
     89:100580005F5F00C025C004721027515012F45D5FF8
     90:100590000000115027952C3F10B3C8F614720127A4
     91:1005A000015027952C3FC8F64227499300B30472A7
     92:1005B00010274F73115027952C3FA8F64695469566
     93:1005C00010B3147279F00127015027952C3F98F64B
     94:1005D0006B5A60F3315000B3B0F600C010E41ABF9C
     95:1005E000002719C03B503195C31BD04010E41ABFFF
     96:1005F0000881033C09F10B34F9F020918D00198139
     97:10060000110F1213EDCF4A81441F093651F10D32FB
     98:1006100011F0013E29F7009394003F915F914F91B3
     99:100620001F910F912F916F91CAB7C6FD65CFDF91D2
     100:10063000CF91CFBFCF91189520919400222369F3D9
     101:1006400010919200112391F5343092F13093920081
     102:1006500020938E0010918F003BE0311B30938F0070
     103:1006600027C00091920001300CF50AE54F7049F463
     104:100670003091620034FD1DC000936200C6E7D0E0F7
     105:100680001CC03091810034FD14C000938100C2E889
     106:10069000D0E013C0052710E000C0000002BB1AC064
     107:1006A000052710E0221F1DC010E021C04AE502C04E
     108:1006B00032ED432FC4E1D0E032E011B31462959AD9
     109:1006C00002B311BB54E220E865E320FF052702BB1B
     110:1006D000279517951C3FF0F66695B8F7B1F720FF00
     111:1006E000052702BB279517951C3FD0F62795179530
     112:1006F00017FF052700001C3F02BBB0F629913A9571
     113:1007000019F70B7D10919300110FC651D04002BB19
     114:1007100011F010938D0010E41ABF006211B31B7D1D
     115:10072000402F4B7D54E05A95F1F702BB11BB42BB01
     116:1007300074CF85B7836085BF8BB780648BBF8BE434
     117:10074000809382008AE58093810008951F93CF9360
     118:10075000DF9360919200635067FDC4C080918F0069
     119:10076000CCE0D0E0C81BD109CA56DF4F80918E0083
     120:100770008D3209F0A4C0683009F0B2C083EC8093D8
     121:1007800076008AE5809362001092700088818076FE
     122:1007900041F0CE010E948F01282F8F3F09F47EC0C7
     123:1007A00084C09A8110927F008981882321F410925D
     124:1007B000800022E06CC0853019F49093930066C0ED
     125:1007C000863009F04FC08B81813041F48BE191E09C
     126:1007D000909391008093900022E140C0823041F4D8
     127:1007E0008DE291E0909391008093900022E236C0D8
     128:1007F0008330F9F48A81882341F48DED90E0909361
     129:1008000091008093900024E029C0813041F481EE72
     130:1008100090E0909391008093900024E21FC082307A
     131:10082000E1F485E091E0909391008093900026E1BF
     132:1008300015C0813241F48FE391E090939100809351
     133:10084000900029E00BC0823241F48EE990E0909351
     134:100850009100809390002FE301C020E080E480931A
     135:10086000700023C0883021F421E085E990E011C0B8
     136:10087000893019F49093950009C08A3011F421E071
     137:1008800006C08B3019F48BE48093820020E08FE760
     138:1008900090E0909391008093900007C0888187FD3D
     139:1008A0002E8180E88093700006C08F81882319F420
     140:1008B0008E81821708F0822F8093630011C080918F
     141:1008C000700087FF0DC0CE010E94CA018F3F21F446
     142:1008D0008EE18093620004C0882311F010926300BF
     143:1008E000109292008091620084FF4AC08091630060
     144:1008F0008F3F09F445C0182F893008F018E0811B9C
     145:10090000809363008091760098E889278093760031
     146:10091000112341F12091900030919100809170005D
     147:1009200086FF0DC0A7E7B0E080E090E0F901E80F96
     148:10093000F91FE491ED9301961817C1F708C0912FA4
     149:10094000D901E7E7F0E08D9181939150E1F71150E3
     150:10095000812F90E01F5F0196820F931F909391006B
     151:100960008093900087E790E0612F0E947402612FCE
     152:100970006C5F6C3019F08FEF8093630060936200BE
     153:1009800094E180B3847231F49150D9F710929300BE
     154:1009900010928D00DF91CF911F9108951F93DC017C
     155:1009A000162F8091810084FF07C08091820098E813
     156:1009B00089278093820003C08AE580938100912F6C
     157:1009C000E3E8F0E08D91819391501916DCF383E810
     158:1009D00090E0612F0E9474021C5F109381001F91B0
     159:0609E0000895F894FFCF1A
     160:0409E60001025AFFB1
    160161:00000001FF
  • aktoserial/code/main.c

    rd851b8b r659bbff  
    1111#include "keycodes.h"
    1212
    13 const uint8_t PROGMEM keymatrix[128] = {
    14 // 0         1                 2            3            4          5          6           7            8            9              A             B             C             D             E              F
    15 KEY_grave,   KEY_1,            KEY_2,       KEY_3,       KEY_4,     KEY_5,     KEY_6,      KEY_7,       KEY_8,       KEY_9,         KEY_0,        KEY_minus,    KEY_equals,   KEY_backslash, KEY_Reserved,  KEY_KP0,      //0
    16 KEY_Q,       KEY_W,            KEY_E,       KEY_R,       KEY_T,     KEY_Y,     KEY_U,      KEY_I,       KEY_O,       KEY_P,         KEY_rbracket, KEY_lbracket, KEY_Reserved, KEY_KP1,       KEY_KP2,       KEY_KP3,      //1
    17 KEY_A,       KEY_S,            KEY_D,       KEY_F,       KEY_G,     KEY_H,     KEY_J,      KEY_K,       KEY_L,       KEY_semicolon, KEY_apostroph,KEY_hash,     KEY_Reserved, KEY_KP4,       KEY_KP5,       KEY_KP6,      //2
    18 KEY_Euro,    KEY_Z,            KEY_X,       KEY_C,       KEY_V,     KEY_B,     KEY_N,      KEY_M,       KEY_comma,   KEY_dot,       KEY_slash,    KEY_Reserved, KEY_KPcomma,  KEY_KP7,       KEY_KP8,       KEY_KP9,      //3
    19 KEY_Spacebar,KEY_DeleteForward,KEY_Tab,     KEY_KPenter, KEY_Return,KEY_ESCAPE,KEY_DELETE, KEY_Reserved,KEY_Reserved,KEY_Reserved,  KEY_KPminus,  KEY_Reserved, KEY_UpArrow,  KEY_DownArrow, KEY_RightArrow,KEY_LeftArrow,//4
    20 KEY_F1,      KEY_F2,           KEY_F3,      KEY_F4,      KEY_F5,    KEY_F6,    KEY_F7,     KEY_F8,      KEY_F9,      KEY_F10,       KEY_KPRParen, KEY_KPLParen, KEY_KPslash,  KEY_KPasterisk,KEY_KPplus,    KEY_Help,     //5
    21 KEY_Reserved,KEY_Reserved,     KEY_capslock,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,  KEY_Reserved,  KEY_Reserved, //6
    22 KEY_Reserved,KEY_Reserved,     KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,  KEY_Reserved,  KEY_Reserved, //7
     13static uint8_t pressingCaps = 0;
     14
     15const uint8_t PROGMEM keymatrix[0x70] = {
     16// 0         1            2            3            4          5          6           7            8            9              A             B             C             D             E              F
     17KEY_grave,   KEY_1,       KEY_2,       KEY_3,       KEY_4,     KEY_5,     KEY_6,      KEY_7,       KEY_8,       KEY_9,         KEY_0,        KEY_minus,    KEY_equals,   KEY_F11,       KEY_Reserved,  KEY_KP0,      //0
     18KEY_Q,       KEY_W,       KEY_E,       KEY_R,       KEY_T,     KEY_Y,     KEY_U,      KEY_I,       KEY_O,       KEY_P,         KEY_lbracket, KEY_rbracket, KEY_Reserved, KEY_KP1,       KEY_KP2,       KEY_KP3,      //1
     19KEY_A,       KEY_S,       KEY_D,       KEY_F,       KEY_G,     KEY_H,     KEY_J,      KEY_K,       KEY_L,       KEY_semicolon, KEY_apostroph,KEY_hash,     KEY_Reserved, KEY_KP4,       KEY_KP5,       KEY_KP6,      //2
     20KEY_Euro,    KEY_Z,       KEY_X,       KEY_C,       KEY_V,     KEY_B,     KEY_N,      KEY_M,       KEY_comma,   KEY_dot,       KEY_slash,    KEY_Reserved, KEY_KPcomma,  KEY_KP7,       KEY_KP8,       KEY_KP9,      //3
     21KEY_Spacebar,KEY_DELETE,  KEY_Tab,     KEY_KPenter, KEY_Return,KEY_ESCAPE,KEY_DeleteForward,KEY_Reserved,KEY_Reserved,KEY_Reserved,  KEY_KPminus,  KEY_Reserved, KEY_UpArrow,  KEY_DownArrow, KEY_RightArrow,KEY_LeftArrow,//4
     22KEY_F1,      KEY_F2,      KEY_F3,      KEY_F4,      KEY_F5,    KEY_F6,    KEY_F7,     KEY_F8,      KEY_F9,      KEY_F10,       KEY_Home, KEY_End, KEY_KPslash,  KEY_KPasterisk,KEY_KPplus,    KEY_F12,     //5
     23KEY_Reserved,KEY_Reserved,KEY_capslock,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,  KEY_Reserved,  KEY_Reserved, //6
    2324};
    2425
     
    3031const uint8_t PROGMEM modmatrix[8] = { // contains positions of modifiers in the matrix
    3132  // 0             1               2                 3         4         5         6                  7
    32 MOD_SHIFT_LEFT,MOD_SHIFT_RIGHT,MOD_NONE,MOD_CONTROL_LEFT,MOD_ALT_LEFT,MOD_NONE, MOD_GUI_LEFT, MOD_GUI_RIGHT,
     33MOD_SHIFT_LEFT,MOD_SHIFT_RIGHT,MOD_NONE,MOD_CONTROL_LEFT,MOD_ALT_LEFT,MOD_ALT_RIGHT, MOD_GUI_LEFT, MOD_GUI_RIGHT,
    3334};
    3435
    3536static uint8_t idleRate;
     37static uint8_t reportIndex = 2;
    3638static uint8_t reportBuffer[8];
    3739
    3840void fillReportBuffer(uint8_t key_code) {
    3941        uint8_t key, modifier;
    40         uint8_t reportIndex = 2; // reportBuffer[0] contains modifiers
    41         memset(reportBuffer, 0, sizeof(reportBuffer)); // clear report buffer
     42        key = pgm_read_byte(&keymatrix[key_code]);
     43        if (key_code >= 0x60 && key_code < 0x68)
     44                modifier = pgm_read_byte(&modmatrix[key_code - 0x60]);
     45        else
     46                modifier = MOD_NONE;
     47        if (key != KEY_Reserved && reportIndex < 8) {
     48                reportBuffer[reportIndex] = key; // set next available entry
     49                reportIndex++;
     50                if (key == KEY_capslock)
     51                        pressingCaps = 1;
     52        }
     53        reportBuffer[0] |= modifier;
     54}
     55
     56
     57void emptyReportBuffer(uint8_t key_code) {
     58       
     59        uint8_t key, modifier;
     60        uint8_t i;
    4261        key = pgm_read_byte(&keymatrix[key_code]);
    4362        if (key_code >= 0x60 && key_code < 0x68)
     
    4665                modifier = MOD_NONE;
    4766        if (key != KEY_Reserved) {
    48                 reportBuffer[reportIndex] = key; // set next available entry
    49                 reportIndex++;
     67                for (i = 2; i < reportIndex; i++) {
     68                        if (reportBuffer[i] == key) {
     69                                for (; i < 7; i++)
     70                                        reportBuffer[i] = reportBuffer[i+1];
     71                                reportBuffer[7] = 0;
     72                                reportIndex--;
     73                        }
     74                }
    5075        }
    51         reportBuffer[0] |= modifier;
     76        reportBuffer[0] &= ~modifier;
    5277}
    5378
     
    7297
    7398        //debug LED - output
    74         DDRD |= (1<<PD6);
     99        DDRC |= (1<<PC5);
     100        DDRC |= (1<<PC4);
    75101
    76102        // Keyboard
    77         uint8_t key_code = 0;
     103        uint8_t key_code = 255;
     104        memset(reportBuffer, 0, sizeof(reportBuffer)); // clear report buffer
    78105
    79106        // USB
     
    90117                if (char_waiting) {
    91118                        key_code = ak_read_scancode();
     119                        PORTC ^= (1<<PC4);
     120                        PORTC ^= (1<<PC5);
     121                        // if an update is needed, send the report
     122                        if ((key_code & 1) == 0)
     123                                fillReportBuffer(key_code>>1);
     124                        else
     125                                emptyReportBuffer(key_code>>1);
     126                        if (usbInterruptIsReady())
     127                                usbSetInterrupt(reportBuffer, sizeof(reportBuffer));
    92128                }
    93129
     
    99135                                        idleCounter -= 5; // 22ms in units of 4ms
    100136                                } else { // yes, it is time now
    101                                         updateNeeded = 1;
    102137                                        idleCounter = idleRate;
     138                                        if (pressingCaps) {
     139                                                emptyReportBuffer(0x62);
     140                                                pressingCaps = 0;
     141                                        }
     142                                        if (usbInterruptIsReady())
     143                                                usbSetInterrupt(reportBuffer, sizeof(reportBuffer));
    103144                                }
    104145                        }
    105146
    106                 }
    107                 // if an update is needed, send the report
    108                 if (updateNeeded && usbInterruptIsReady()) {
    109                         updateNeeded = 0;
    110                         //fillReportBuffer(key_code);
    111                         fillReportBuffer(KEY_Y);
    112                         usbSetInterrupt(reportBuffer, sizeof(reportBuffer));
    113                         PORTD ^= (1<<PD6);
    114147                }
    115148        }
Note: See TracChangeset for help on using the changeset viewer.