kiln_controller/firmware/controller_soft/protocol.cpp

40 wiersze
838 B
C++
Czysty Zwykły widok Historia

2014-11-29 17:04:33 +00:00
#include "protocol.h"
char Comm::buffer[BUFFER_LENGTH+1];
int Comm::_nacts;
char Comm::_commands[MAX_ACTIONS];
char* (*Comm::_actions[MAX_ACTIONS])(int, char*);
char Comm::_current_cmd;
int Comm::_current_len;
Comm::Comm(int addr) {
Wire.begin(addr);
Wire.onReceive(_handle_request);
Wire.onRequest(_handle_response);
}
int Comm::action(char cmd, char* (*func)(int, char*)) {
if (_nacts >= MAX_ACTIONS)
return 1;
_actions[_nacts] = func;
return 0;
}
void Comm::_handle_request(int nbytes) {
_current_cmd = Wire.read();
_current_len = nbytes-1;
for (int i = 0; i < nbytes-1; i++) {
buffer[i] = Wire.read();
}
}
void Comm::_handle_response() {
for (int i = 0; i < MAX_ACTIONS; i++) {
if (_commands[i] == _current_cmd) {
_actions[i](_current_len, buffer);
}
}
Wire.write(buffer);
}