kopia lustrzana https://github.com/jgromes/RadioLib
182 wiersze
4.1 KiB
C++
182 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;
|
|
uint8_t len = 0;
|
|
|
|
init(src, dest, dat, len);
|
|
}
|
|
|
|
Packet::Packet(const char* dest, const char* dat) {
|
|
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++) {
|
|
char str[] = {dest[3*i], dest[3*i + 1]};
|
|
destTmp[i] = strtoul(str, NULL, 16);
|
|
}
|
|
|
|
init(src, destTmp, dat);
|
|
}
|
|
|
|
Packet::Packet(uint8_t* dest, const char* dat) {
|
|
uint8_t src[8] = {0, 0, 0, 0, 0, 0, 0, 0};
|
|
getLoRaAddress(src);
|
|
|
|
init(src, dest, dat);
|
|
}
|
|
|
|
Packet::Packet(const char* src, const char* dest, const char* dat) {
|
|
uint8_t srcTmp[8];
|
|
for(uint8_t i = 0; i < 8; i++) {
|
|
char str[] = {src[3*i], src[3*i + 1]};
|
|
srcTmp[i] = strtoul(str, NULL, 16);
|
|
}
|
|
|
|
uint8_t destTmp[8];
|
|
for(uint8_t i = 0; i < 8; i++) {
|
|
char str[] = {dest[3*i], dest[3*i + 1]};
|
|
destTmp[i] = strtoul(str, NULL, 16);
|
|
}
|
|
|
|
init(srcTmp, destTmp, dat);
|
|
}
|
|
|
|
Packet::Packet(uint8_t* src, uint8_t* dest, const char* dat) {
|
|
init(src, dest, dat);
|
|
}
|
|
|
|
Packet::Packet(const char* dest, 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++) {
|
|
char str[] = {dest[3*i], dest[3*i + 1]};
|
|
destTmp[i] = strtoul(str, NULL, 16);
|
|
}
|
|
|
|
init(src, destTmp, dat, len);
|
|
}
|
|
|
|
Packet::Packet(uint8_t* dest, 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, const char* dest, uint8_t* dat, uint8_t len) {
|
|
uint8_t srcTmp[8];
|
|
for(uint8_t i = 0; i < 8; i++) {
|
|
char str[] = {src[3*i], src[3*i + 1]};
|
|
srcTmp[i] = strtoul(str, NULL, 16);
|
|
}
|
|
|
|
uint8_t destTmp[8];
|
|
for(uint8_t i = 0; i < 8; i++) {
|
|
char str[] = {dest[3*i], dest[3*i + 1]};
|
|
destTmp[i] = strtoul(str, NULL, 16);
|
|
}
|
|
|
|
init(srcTmp, destTmp, dat, len);
|
|
}
|
|
|
|
Packet::Packet(uint8_t* src, uint8_t* dest, uint8_t* dat, uint8_t len) {
|
|
init(src, dest, dat, len);
|
|
}
|
|
|
|
void Packet::init(uint8_t* src, uint8_t* dest, const char* dat) {
|
|
init(src, dest, (uint8_t*)dat, strlen(dat));
|
|
}
|
|
|
|
void Packet::init(uint8_t* src, uint8_t* dest, uint8_t* dat, uint8_t len) {
|
|
memcpy(source, src, 8);
|
|
memcpy(destination, dest, 8);
|
|
length = len + 16;
|
|
data = new char[len + 1];
|
|
memcpy(data, dat, len + 1);
|
|
}
|
|
|
|
String Packet::getSourceStr() {
|
|
char charArray[24];
|
|
|
|
for(uint8_t i = 0; i < 8; i++) {
|
|
sprintf(charArray + 3*i, "%02X", source[i]);
|
|
charArray[3*i+2] = ':';
|
|
}
|
|
charArray[23] = '\0';
|
|
|
|
String str(charArray);
|
|
return(str);
|
|
}
|
|
|
|
String Packet::getDestinationStr() {
|
|
char charArray[24];
|
|
|
|
for(uint8_t i = 0; i < 8; i++) {
|
|
sprintf(charArray + 3*i, "%02X", destination[i]);
|
|
charArray[3*i+2] = ':';
|
|
}
|
|
charArray[23] = '\0';
|
|
|
|
String str(charArray);
|
|
return(str);
|
|
}
|
|
|
|
void Packet::setSourceStr(const char* src) {
|
|
for(uint8_t i = 0; i < 8; i++) {
|
|
char str[] = {src[3*i], src[3*i + 1]};
|
|
source[i] = strtoul(str, NULL, 16);
|
|
}
|
|
}
|
|
|
|
void Packet::setDestinationStr(const char* dest) {
|
|
for(uint8_t i = 0; i < 8; i++) {
|
|
char str[] = {dest[3*i], dest[3*i + 1]};
|
|
destination[i] = strtoul(str, NULL, 16);
|
|
}
|
|
}
|
|
|
|
void Packet::copyInto(Packet& pack) {
|
|
memcpy(pack.source, source, 8);
|
|
memcpy(pack.destination, destination, 8);
|
|
strcpy(pack.data, data);
|
|
}
|
|
|
|
void Packet::setPacketData(char* charArray) {
|
|
char* newData = new char[strlen(charArray)];
|
|
length = strlen(charArray) + 16;
|
|
strcpy(newData, charArray);
|
|
delete[] data;
|
|
data = newData;
|
|
}
|
|
|
|
void Packet::setPacketData(String str) {
|
|
setPacketData((char*)str.c_str());
|
|
}
|
|
|
|
void Packet::setPacketData(float f, uint8_t decimals) {
|
|
int i = f;
|
|
float res = f - i;
|
|
if (res == 0) {
|
|
char charArray[16];
|
|
itoa(i, charArray, 10);
|
|
setPacketData(charArray);
|
|
} else {
|
|
String floatString = String(f, decimals);
|
|
setPacketData(floatString);
|
|
}
|
|
}
|
|
|
|
void Packet::getLoRaAddress(uint8_t* addr) {
|
|
for(uint8_t i = 0; i < 8; i++) {
|
|
addr[i] = EEPROM.read(i);
|
|
}
|
|
}
|