Initial commit

This commit is contained in:
Han Dai 2020-02-27 10:42:04 -05:00
parent 445a81b491
commit d5bc47c77f
3 changed files with 66 additions and 0 deletions

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "iSkipper"]
path = iSkipper
url = https://github.com/wizard97/iSkipper

62
iClicker.ino Normal file
View File

@ -0,0 +1,62 @@
#include "iClickerEmulator.h"
#include <string.h>
iClickerEmulator clicker(8, 3, digitalPinToInterrupt(3), true);
bool newCommand;
String command;
void setup(){
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
newCommand = true;
Serial.begin(115200);
clicker.begin(iClickerChannels::AA);
clicker.startPromiscuous(CHANNEL_SEND, recvPacketHandler);
}
void loop(){
if (Serial.available()) {
char c = Serial.read();
if(newCommand && c != '\n') command = c, newCommand = false;
else if(!newCommand && c != '\n') command += c;
else {
newCommand = true;
processCommand(command);
}
}
}
void recvPacketHandler(iClickerPacket *recvd){
if(recvd->type == PACKET_ANSWER){
char tmp[50];
uint8_t *id = recvd->packet.answerPacket.id;
char answer = iClickerEmulator::answerChar(recvd->packet.answerPacket.answer);
snprintf(tmp, sizeof(tmp), "$%c%02X%02X%02X%02X", answer, id[0], id[1], id[2], id[3]);
Serial.println(tmp);
}
}
void processCommand(String command){
if(command[0] == '#'){ // SetChannel (#[CHANNEL])
clicker.setChannel(iClickerChannels::channels[(command[1] - 'A') * 4 + (command[2] - 'A')]);
}else if(command[0] == '$'){ // SendAnswer ($[ANSWER][ID])
uint8_t id[4];
id[0] = hex2int(command[2]) * 16 + hex2int(command[3]);
id[1] = hex2int(command[4]) * 16 + hex2int(command[5]);
id[2] = hex2int(command[6]) * 16 + hex2int(command[7]);
id[3] = hex2int(command[8]) * 16 + hex2int(command[9]);
if(iClickerEmulator::validId(id)){
if(clicker.submitAnswer(id, iClickerEmulator::charAnswer(command[1]), true, DEFAULT_ACK_TIMEOUT, true)) // return status (%[STATUS])
Serial.println("%1");
else
Serial.println("%0");
}
}
}
int hex2int(char ch){
if (ch >= '0' && ch <= '9') return ch - '0';
if (ch >= 'A' && ch <= 'F') return ch - 'A' + 10;
if (ch >= 'a' && ch <= 'f') return ch - 'a' + 10;
return 0;
}

1
iSkipper Submodule

@ -0,0 +1 @@
Subproject commit edf230ff4c221f37b6e242555892f5ebc7f79dc5