Browse Source

Merge pull request #37 from plugz/keyboard_rawkeys

Keyboard rawkeys
main
Paul Stoffregen 4 years ago
parent
commit
df0ef72d8d
No account linked to committer's email address
3 changed files with 43 additions and 0 deletions
  1. +4
    -0
      USBHost_t36.h
  2. +14
    -0
      examples/Test/Test/Test.ino
  3. +25
    -0
      keyboard.cpp

+ 4
- 0
USBHost_t36.h View File

uint8_t getOemKey() { return keyOEM; } uint8_t getOemKey() { return keyOEM; }
void attachPress(void (*f)(int unicode)) { keyPressedFunction = f; } void attachPress(void (*f)(int unicode)) { keyPressedFunction = f; }
void attachRelease(void (*f)(int unicode)) { keyReleasedFunction = f; } void attachRelease(void (*f)(int unicode)) { keyReleasedFunction = f; }
void attachRawPress(void (*f)(uint8_t keycode)) { rawKeyPressedFunction = f; }
void attachRawRelease(void (*f)(uint8_t keycode)) { rawKeyReleasedFunction = f; }
void LEDS(uint8_t leds); void LEDS(uint8_t leds);
uint8_t LEDS() {return leds_.byte;} uint8_t LEDS() {return leds_.byte;}
void updateLEDS(void); void updateLEDS(void);
void key_release(uint32_t mod, uint32_t key); void key_release(uint32_t mod, uint32_t key);
void (*keyPressedFunction)(int unicode); void (*keyPressedFunction)(int unicode);
void (*keyReleasedFunction)(int unicode); void (*keyReleasedFunction)(int unicode);
void (*rawKeyPressedFunction)(uint8_t keycode) = nullptr;
void (*rawKeyReleasedFunction)(uint8_t keycode) = nullptr;
Pipe_t *datapipe; Pipe_t *datapipe;
setup_t setup; setup_t setup;
uint8_t report[8]; uint8_t report[8];

+ 14
- 0
examples/Test/Test/Test.ino View File

Serial.println("USB Host Testing"); Serial.println("USB Host Testing");
myusb.begin(); myusb.begin();
keyboard1.attachPress(OnPress); keyboard1.attachPress(OnPress);
keyboard1.attachRawPress(OnRawPress);
keyboard1.attachRawRelease(OnRawRelease);
keyboard2.attachPress(OnPress); keyboard2.attachPress(OnPress);
midi1.setHandleNoteOff(OnNoteOff); midi1.setHandleNoteOff(OnNoteOff);
midi1.setHandleNoteOn(OnNoteOn); midi1.setHandleNoteOn(OnNoteOn);
//Serial.println(); //Serial.println();
} }


void OnRawPress(uint8_t keycode)
{
Serial.print("raw key press: ");
Serial.println((int)keycode);
}

void OnRawRelease(uint8_t keycode)
{
Serial.print("raw key release: ");
Serial.println((int)keycode);
}

void OnNoteOn(byte channel, byte note, byte velocity) void OnNoteOn(byte channel, byte note, byte velocity)
{ {
Serial.print("Note On, ch="); Serial.print("Note On, ch=");

+ 25
- 0
keyboard.cpp View File

uint32_t key = prev_report[i]; uint32_t key = prev_report[i];
if (key >= 4 && !contains(key, report)) { if (key >= 4 && !contains(key, report)) {
key_release(prev_report[0], key); key_release(prev_report[0], key);
if (rawKeyReleasedFunction) {
rawKeyReleasedFunction(key);
}
}
}
if (rawKeyReleasedFunction) {
// each modifier key is represented by a bit in the first byte
for (int i = 0; i < 8; ++i)
{
uint8_t keybit = 1 << i;
if ((prev_report[0] & keybit) && !(report[0] & keybit)) {
rawKeyReleasedFunction(103 + i);
}
} }
} }
for (int i=2; i < 8; i++) { for (int i=2; i < 8; i++) {
uint32_t key = report[i]; uint32_t key = report[i];
if (key >= 4 && !contains(key, prev_report)) { if (key >= 4 && !contains(key, prev_report)) {
key_press(report[0], key); key_press(report[0], key);
if (rawKeyPressedFunction) {
rawKeyPressedFunction(key);
}
}
}
if (rawKeyPressedFunction) {
for (int i = 0; i < 8; ++i)
{
uint8_t keybit = 1 << i;
if (!(prev_report[0] & keybit) && (report[0] & keybit)) {
rawKeyPressedFunction(103 + i);
}
} }
} }
memcpy(prev_report, report, 8); memcpy(prev_report, report, 8);

Loading…
Cancel
Save