toPacket method
toPacket converts the BleAdvertisement to a raw message following this structure: MAC_ADDRESS;UNIX;LAT;LNG;ALT;MODEL;RSSI;MANUFACTURER+DATA;SERVICE+DATA;CRC16
Implementation
String toPacket() {
String payload = '';
payload += '${macAddress.replaceAll(':', '').toUpperCase()};';
payload += '${timestamp.millisecondsSinceEpoch ~/ 1000};';
if (latitude != null) {
payload += '$latitude;';
} else {
payload += ';';
}
if (longitude != null) {
payload += '$longitude;';
} else {
payload += ';';
}
if (altitude != null) {
payload += '$altitude;';
} else {
payload += ';';
}
payload += '$model;';
if (deviceName != null) {
payload += '$deviceName;';
} else {
payload += ';';
}
payload += '$rssi;';
if (txPower != null) {
payload += '$txPower;';
} else {
payload += ';';
}
payload += '${manufacturerData.map((e) => e.toPacket()).join(',')};';
payload += '${serviceData.map((e) => e.toPacket()).join(',')};';
String crc = calculateCrc(payload.codeUnits).toRadixString(16).padLeft(4, '0').toUpperCase();
return '$payload$crc';
}