kopia lustrzana https://github.com/jgromes/RadioLib
179 wiersze
4.1 KiB
C++
179 wiersze
4.1 KiB
C++
#include "Packet.h"
|
|
|
|
Packet::Packet(void) {
|
|
uint8_t src[8] = {0, 0, 0, 0, 0, 0, 0, 0};
|
|
getLoRaAddress(src);
|
|
|
|
uint8_t dest[8] = {0, 0, 0, 0, 0, 0, 0, 0};
|
|
uint8_t dat[240];
|
|
uint8_t len = 0;
|
|
|
|
init(src, dest, dat, len);
|
|
}
|
|
|
|
Packet::Packet(const char dest[24], const char dat[240]) {
|
|
uint8_t src[8] = {0, 0, 0, 0, 0, 0, 0, 0};
|
|
getLoRaAddress(src);
|
|
|
|
uint8_t destTmp[8];
|
|
for(uint8_t i = 0; i < 8; i++) {
|
|
destTmp[i] = (parseByte(dest[3*i]) << 4) | parseByte(dest[3*i + 1]);
|
|
}
|
|
|
|
init(src, destTmp, dat);
|
|
}
|
|
|
|
Packet::Packet(uint8_t dest[8], const char dat[240]) {
|
|
uint8_t src[8] = {0, 0, 0, 0, 0, 0, 0, 0};
|
|
getLoRaAddress(src);
|
|
|
|
init(src, dest, dat);
|
|
}
|
|
|
|
Packet::Packet(const char src[24], const char dest[24], const char dat[240]) {
|
|
uint8_t srcTmp[8];
|
|
for(uint8_t i = 0; i < 8; i++) {
|
|
srcTmp[i] = (parseByte(src[3*i]) << 4) | parseByte(src[3*i + 1]);
|
|
}
|
|
|
|
uint8_t destTmp[8];
|
|
for(uint8_t i = 0; i < 8; i++) {
|
|
destTmp[i] = (parseByte(dest[3*i]) << 4) | parseByte(dest[3*i + 1]);
|
|
}
|
|
|
|
init(srcTmp, destTmp, dat);
|
|
}
|
|
|
|
Packet::Packet(uint8_t src[8], uint8_t dest[8], const char dat[240]) {
|
|
init(src, dest, dat);
|
|
}
|
|
|
|
Packet::Packet(const char dest[24], uint8_t* dat, uint8_t len) {
|
|
uint8_t src[8] = {0, 0, 0, 0, 0, 0, 0, 0};
|
|
getLoRaAddress(src);
|
|
|
|
uint8_t destTmp[8];
|
|
for(uint8_t i = 0; i < 8; i++) {
|
|
destTmp[i] = (parseByte(dest[3*i]) << 4) | parseByte(dest[3*i + 1]);
|
|
}
|
|
|
|
init(src, destTmp, dat, len);
|
|
}
|
|
|
|
Packet::Packet(uint8_t dest[8], uint8_t* dat, uint8_t len) {
|
|
uint8_t src[8] = {0, 0, 0, 0, 0, 0, 0, 0};
|
|
getLoRaAddress(src);
|
|
|
|
init(src, dest, dat, len);
|
|
}
|
|
|
|
Packet::Packet(const char src[24], const char dest[24], uint8_t* dat, uint8_t len) {
|
|
uint8_t srcTmp[8];
|
|
for(uint8_t i = 0; i < 8; i++) {
|
|
srcTmp[i] = (parseByte(src[3*i]) << 4) | parseByte(src[3*i + 1]);
|
|
}
|
|
|
|
uint8_t destTmp[8];
|
|
for(uint8_t i = 0; i < 8; i++) {
|
|
destTmp[i] = (parseByte(dest[3*i]) << 4) | parseByte(dest[3*i + 1]);
|
|
}
|
|
|
|
init(srcTmp, destTmp, dat, len);
|
|
}
|
|
|
|
Packet::Packet(uint8_t src[8], uint8_t dest[8], uint8_t* dat, uint8_t len) {
|
|
init(src, dest, dat, len);
|
|
}
|
|
|
|
void Packet::init(uint8_t src[8], uint8_t dest[8], const char dat[240]) {
|
|
for(uint8_t i = 0; i < 8; i++) {
|
|
source[i] = src[i];
|
|
destination[i] = dest[i];
|
|
}
|
|
|
|
length = 0;
|
|
for(uint8_t i = 0; i < 240; i++) {
|
|
data[i] = dat[i];
|
|
if(data[i] == '\0') {
|
|
length = i + 16;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void Packet::init(uint8_t src[8], uint8_t dest[8], uint8_t* dat, uint8_t len) {
|
|
length = len + 16;
|
|
for(uint8_t i = 0; i < 8; i++) {
|
|
source[i] = src[i];
|
|
destination[i] = dest[i];
|
|
}
|
|
|
|
for(uint8_t i = 0; i < length; i++) {
|
|
data[i] = dat[i];
|
|
}
|
|
}
|
|
|
|
void Packet::getSourceStr(char src[24]) {
|
|
for(uint8_t i = 0; i < 8; i++) {
|
|
src[3*i] = reparseChar(source[i] >> 4);
|
|
src[3*i+1] = reparseChar(source[i] & 0x0F);
|
|
src[3*i+2] = ':';
|
|
}
|
|
src[23] = '\0';
|
|
}
|
|
|
|
void Packet::getDestinationStr(char dest[24]) {
|
|
for(uint8_t i = 0; i < 8; i++) {
|
|
dest[3*i] = reparseChar(destination[i] >> 4);
|
|
dest[3*i+1] = reparseChar(destination[i] & 0x0F);
|
|
dest[3*i+2] = ':';
|
|
}
|
|
dest[23] = '\0';
|
|
}
|
|
|
|
void Packet::setSourceStr(const char src[24]) {
|
|
for(uint8_t i = 0; i < 8; i++) {
|
|
source[i] = (parseByte(src[3*i]) << 4) | parseByte(src[3*i + 1]);
|
|
}
|
|
}
|
|
|
|
void Packet::setDestinationStr(const char dest[24]) {
|
|
for(uint8_t i = 0; i < 8; i++) {
|
|
destination[i] = (parseByte(dest[3*i]) << 4) | parseByte(dest[3*i + 1]);
|
|
}
|
|
}
|
|
|
|
void Packet::copyInto(Packet& pack) {
|
|
for(uint8_t i = 0; i < 8; i++) {
|
|
pack.source[i] = source[i];
|
|
pack.destination[i] = destination[i];
|
|
}
|
|
strcpy(pack.data, data);
|
|
}
|
|
|
|
void Packet::getLoRaAddress(uint8_t addr[8]) {
|
|
for(uint8_t i = 0; i < 8; i++) {
|
|
addr[i] = EEPROM.read(i);
|
|
}
|
|
}
|
|
|
|
uint8_t Packet::parseByte(char c) {
|
|
if((c >= 48) && (c <= 57)) {
|
|
return(c - 48);
|
|
} else if((c >= 65) && (c <= 70)) {
|
|
return(c - 55);
|
|
} else if((c >= 97) && (c <= 102)) {
|
|
return(c - 87);
|
|
}
|
|
return(0);
|
|
}
|
|
|
|
char Packet::reparseChar(uint8_t b) {
|
|
if(b <= 9) {
|
|
return(b + 48);
|
|
} else if((b >= 10) && (b <= 16)) {
|
|
return(b + 55);
|
|
}
|
|
return(0);
|
|
}
|