1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-08-12 20:49:16 +03:00

Update Bridge library

This commit is contained in:
Cristian Maglie
2013-05-15 18:06:25 +02:00
parent b97fdb451f
commit 05b0fc5f0b
3 changed files with 156 additions and 36 deletions

View File

@@ -18,12 +18,23 @@
#include "Bridge.h"
BridgeClass::BridgeClass(Stream &_stream) : index(0), stream(_stream), started(false) {
// Empty
}
void BridgeClass::begin() {
if (started)
return;
started = true;
// TODO: A more robust restart
// Wait for Atheros bootloader to finish startup
do {
dropAll();
delay(1100);
} while (available()>0);
// Bridge startup:
// - If the bridge is not running starts it safely
print(CTRL_C);
@@ -88,7 +99,7 @@ unsigned int BridgeClass::readCommandOutput(uint8_t handle,
}
void BridgeClass::writeCommandInput(uint8_t handle,
uint8_t *buff, unsigned int size) {
const uint8_t *buff, unsigned int size) {
// TODO: do it in a more efficient way
uint8_t *tmp = new uint8_t[size+2];
tmp[0] = 'I';
@@ -98,6 +109,49 @@ void BridgeClass::writeCommandInput(uint8_t handle,
delete[] tmp;
}
unsigned int BridgeClass::readMessage(uint8_t *buff, unsigned int size) {
uint8_t tmp[] = { 'm' };
return transfer(tmp, 1, buff, size);
}
void BridgeClass::writeMessage(const uint8_t *buff, unsigned int size) {
// TODO: do it in a more efficient way
uint8_t *tmp = new uint8_t[size+1];
tmp[0] = 'M';
memcpy(tmp+1, buff, size);
transfer(tmp, size+1);
delete[] tmp;
}
unsigned int BridgeClass::messageAvailable() {
uint8_t tmp[] = { 'n' };
uint8_t res[2];
transfer(tmp, 1, res, 2);
return (res[0] << 8) + res[1];
}
void BridgeClass::put(const char *key, const char *value) {
// TODO: do it in a more efficient way
String cmd = "D";
cmd += key;
cmd += "\xFE";
cmd += value;
transfer((uint8_t*)cmd.c_str(), cmd.length());
}
unsigned int BridgeClass::get(const char *key, uint8_t *value, unsigned int maxlen) {
// TODO: do it in a more efficient way
unsigned int l = strlen(key);
uint8_t *tmp = new uint8_t[l+1];
tmp[0] = 'd';
memcpy(tmp+1, key, strlen(key));
l = transfer(tmp, l+1, value, maxlen);
if (l<maxlen)
value[l] = 0; // Zero-terminate string
delete[] tmp;
return l;
}
void BridgeClass::crcUpdate(uint8_t c) {
CRC = CRC ^ c;
CRC = (CRC >> 8) + (CRC << 8);
@@ -116,7 +170,7 @@ bool BridgeClass::crcCheck(uint16_t _CRC) {
return CRC == _CRC;
}
uint8_t BridgeClass::transfer(uint8_t *buff, uint8_t len,
uint8_t BridgeClass::transfer(const uint8_t *buff, uint8_t len,
uint8_t *rxbuff, uint8_t rxlen)
{
for ( ; ; delay(100), dropAll() /* Delay for retransmission */) {