More reliable typing via synchronization to host clock
This commit is contained in:
parent
132552ab87
commit
1c5da6906a
@ -12,8 +12,8 @@ const int dataPin = 3; // in, kbd data
|
|||||||
const int outPin = 4; // out, kbd led
|
const int outPin = 4; // out, kbd led
|
||||||
|
|
||||||
// constant config
|
// constant config
|
||||||
const int slaveClockDivider = 4;
|
const int slaveClockDivider = 8;
|
||||||
const int timerDelay = 528 / slaveClockDivider;
|
const int timerDelay = 530 / slaveClockDivider;
|
||||||
|
|
||||||
// variables
|
// variables
|
||||||
volatile int slaveClockStep = 0;
|
volatile int slaveClockStep = 0;
|
||||||
@ -45,7 +45,7 @@ volatile byte nextKey = 0;
|
|||||||
void typeKey(byte key) {
|
void typeKey(byte key) {
|
||||||
nextKey = key;
|
nextKey = key;
|
||||||
nextKeyReady = true;
|
nextKeyReady = true;
|
||||||
Serial.print("Typing key "); Serial.println((int) key);
|
//Serial.print("Typing key "); Serial.println((int) key);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendKey(byte key) {
|
void sendKey(byte key) {
|
||||||
@ -54,9 +54,7 @@ void sendKey(byte key) {
|
|||||||
dataDelay = 0;
|
dataDelay = 0;
|
||||||
packetDelay = 0;
|
packetDelay = 0;
|
||||||
packetTail = 15;
|
packetTail = 15;
|
||||||
Serial.print("Sending key "); Serial.println((int) key);
|
//Serial.print("Sending key "); Serial.println((int) key);
|
||||||
//Timer1.initialize(timerDelay);
|
|
||||||
//Timer1.start();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void onHostStatusChange() {
|
void onHostStatusChange() {
|
||||||
@ -65,8 +63,9 @@ void onHostStatusChange() {
|
|||||||
lastChange = timeNow;
|
lastChange = timeNow;
|
||||||
if (changeDiff >= 10 && nextKeyReady) {
|
if (changeDiff >= 10 && nextKeyReady) {
|
||||||
nextKeyReady = false;
|
nextKeyReady = false;
|
||||||
Serial.println("Status change with key");
|
|
||||||
sendKey(nextKey);
|
sendKey(nextKey);
|
||||||
|
Timer1.start(); // synchronize with the host
|
||||||
|
slaveClockStep = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -86,7 +85,6 @@ void onHostClockCycle(void)
|
|||||||
packetTail--;
|
packetTail--;
|
||||||
dataBit = LOW;
|
dataBit = LOW;
|
||||||
} else {
|
} else {
|
||||||
//Timer1.stop();
|
|
||||||
}
|
}
|
||||||
digitalWrite(pinData, dataBit);
|
digitalWrite(pinData, dataBit);
|
||||||
}
|
}
|
||||||
@ -145,10 +143,11 @@ void setupKeyMapping() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
char translateKeyToChar(int key) {
|
char translateKeyToChar(int key) {
|
||||||
|
return key; //m[key];
|
||||||
if (sizeof(m) <= key) {
|
if (sizeof(m) <= key) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return key; //m[key];
|
return m[key];
|
||||||
}
|
}
|
||||||
|
|
||||||
void printChar(char keyChar) {
|
void printChar(char keyChar) {
|
||||||
@ -183,10 +182,10 @@ void onTimerInterrupt()
|
|||||||
{
|
{
|
||||||
onSlaveClockInterrupt();
|
onSlaveClockInterrupt();
|
||||||
|
|
||||||
slaveClockStep = (slaveClockStep + 1) % slaveClockDivider;
|
|
||||||
if (slaveClockStep == 0) {
|
if (slaveClockStep == 0) {
|
||||||
onHostClockCycle();
|
onHostClockCycle();
|
||||||
}
|
}
|
||||||
|
slaveClockStep = (slaveClockStep + 1) % slaveClockDivider;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----
|
// ----
|
||||||
@ -211,7 +210,6 @@ void setup(void)
|
|||||||
|
|
||||||
Timer1.initialize(timerDelay);
|
Timer1.initialize(timerDelay);
|
||||||
Timer1.attachInterrupt(onTimerInterrupt);
|
Timer1.attachInterrupt(onTimerInterrupt);
|
||||||
//Timer1.stop();
|
|
||||||
|
|
||||||
Serial.println("Keyboard ready");
|
Serial.println("Keyboard ready");
|
||||||
}
|
}
|
||||||
@ -225,11 +223,19 @@ void loop(void)
|
|||||||
typeKey(key);
|
typeKey(key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/**/
|
||||||
|
|
||||||
// type key from keyboard
|
// type key from keyboard
|
||||||
if (counter >= numbits) {
|
if (counter >= numbits) {
|
||||||
processKbdByte(data);
|
processKbdByte(data);
|
||||||
data = B0;
|
data = B0;
|
||||||
counter = 0;
|
counter = 0;
|
||||||
}
|
}
|
||||||
|
/**/
|
||||||
|
|
||||||
|
/*/ auto-type test
|
||||||
|
delay(500);
|
||||||
|
typeKey('B');
|
||||||
|
/**/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user