Changeset 8c41328 in avrstuff for aktousb/code/main.c


Ignore:
Timestamp:
Sep 9, 2010, 7:14:21 PM (14 years ago)
Author:
Adrien Destugues <pulkomandy@…>
Branches:
main
Children:
d3f2c17
Parents:
aeff83b
Message:
  • Changement de la méthode d'envi des reports pour éviter les touches qui se bloquent
  • Changement des keycodes de HELP et des touches [] du pavé numérique.

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • aktousb/code/main.c

    raeff83b r8c41328  
    66
    77#include <string.h>
     8#include <stdbool.h>
    89
    910#include "amiga_keyboard/amiga_keyboard.h"
     
    1112#include "keycodes.h"
    1213
     14#define LEDSWAP PORTD ^= (1<<PD6)
     15#define LEDON PORTD |= 1<<PD6
     16#define LEDOFF PORTD &= ~(1<<PD6)
     17
    1318static uint8_t pressingCaps = 0;
    1419
    1520const uint8_t PROGMEM keymatrix[0x70] = {
    16 // 0         1            2            3            4          5          6           7            8            9              A             B             C             D             E              F
    17 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_F11,       KEY_Reserved,  KEY_KP0,      //0
    18 KEY_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
    19 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
    20 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
     21// 0         1            2            3            4          5          6                 7            8            9              A             B             C             D             E              F
     22KEY_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
     23KEY_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
     24KEY_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
     25KEY_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
    2126KEY_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
    22 KEY_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
    23 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
     27KEY_F1,      KEY_F2,      KEY_F3,      KEY_F4,      KEY_F5,    KEY_F6,    KEY_F7,           KEY_F8,      KEY_F9,      KEY_F10,       KEY_KPLParen, KEY_KPRParen, KEY_KPslash,  KEY_KPasterisk,KEY_KPplus,    KEY_Help,     //5
     28KEY_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
    2429};
    2530
     
    8691
    8792
     93/*
    8894void usbSendReport(uint8_t mode, uint8_t key) {
    8995    // buffer for HID reports. we use a private one, so nobody gets disturbed
     
    94100    usbSetInterrupt(repBuffer, sizeof(repBuffer)); // send
    95101}
    96 
     102*/
    97103
    98104int main() {
     
    102108
    103109        wdt_enable(WDTO_2S);
    104     // configure timer 0 for a rate of 12M/(1024 * 256) = 45.78Hz (~22ms)
    105     TCCR0 = 5;          // timer 0 prescaler: 1024
     110    // configure timer 0 for a rate of 16M/(256 * 256) = ~244Hz
     111    TCCR0 = 4;          // timer 0 prescaler: 256
    106112
    107113        //debug LED - output
     
    116122        ak_init_keyboard();
    117123        sei();
     124        bool doReport = false;
     125        bool doRelease = false;
    118126
    119127        while(1) {
     
    126134                        key_code = ak_read_scancode();
    127135                        // if an update is needed, send the report
    128                         if ((key_code & 1) == 0)
     136                        if ((key_code & 1) == 0) {
    129137                                fillReportBuffer(key_code>>1);
    130                         else
     138                                LEDON;
     139                                doReport = true;
     140                        } else {
    131141                                emptyReportBuffer(key_code>>1);
    132                         if (usbInterruptIsReady())
    133                                 usbSetInterrupt(reportBuffer, sizeof(reportBuffer));
     142                                doRelease = true;
     143                        }
     144                }
     145
     146                if (doReport && usbInterruptIsReady()) {
     147                        usbSetInterrupt(reportBuffer, sizeof(reportBuffer));
     148                        LEDOFF;
     149                        doReport = false;
    134150                }
    135151
     
    138154                if (TIFR & (1 << TOV0)) {
    139155                        TIFR = (1 << TOV0); // reset flag
    140 
    141                         // PORTD ^= (1<<PD6); // blink del : we are alive !
    142                         if (pressingCaps)
    143                                 PORTD |= 1<<PD6;
    144                         else
    145                                 PORTD &= ~(1<<PD6);
    146156
    147157                        if (pressingCaps) {
     
    162172                        }
    163173
    164                         if (idleRate != 0) { // do we need periodic reports?
    165                                 if(idleCounter > 4){ // yes, but not yet
    166                                         idleCounter -= 5; // 22ms in units of 4ms
    167                                 } else { // yes, it is time now
    168                                         idleCounter = idleRate;
    169                                         if (pressingCaps) {
    170                                                 emptyReportBuffer(0x62);
    171                                                 pressingCaps = 0;
    172                                         }
    173                                         if (usbInterruptIsReady())
    174                                                 usbSetInterrupt(reportBuffer, sizeof(reportBuffer));
     174                        ++idleCounter;
     175                        if(idleCounter > 4){ // yes, but not yet
     176                                idleCounter -= 5; // 22ms in units of 4ms
     177                        } else { // yes, it is time now
     178                                idleCounter = idleRate;
     179                                /*
     180                                if (pressingCaps) {
     181                                        emptyReportBuffer(0x62);
     182                                        pressingCaps = 0;
     183                                }
     184                                */
     185                                if (doRelease && usbInterruptIsReady()) {
     186                                        usbSetInterrupt(reportBuffer, sizeof(reportBuffer));
     187                                        doRelease = false;
    175188                                }
    176189                        }
    177 
    178190                }
    179191        }
Note: See TracChangeset for help on using the changeset viewer.