toPacket method

String toPacket()

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';
}