void CDMRRX::processDataSync(const unsigned char* buffer) { CDMRSlotType slotType; slotType.putData(buffer); unsigned char type = slotType.getDataType(); unsigned char cc = slotType.getColorCode(); if (type == DT_IDLE) { unsigned int ber = idleBER(m_buffer); LogMessage("%u [Data Sync] [IDLE] CC=%u BER=%.1f%%", m_slotNo, cc, float(ber) / 1.96F); m_idleBits += 196U; m_idleErrs += ber; } else if (type == DT_VOICE_LC_HEADER) { CDMRFullLC fullLC; CDMRLC* lc = fullLC.decode(buffer, type); if (lc != NULL) { LogMessage("%u [Data Sync] [VOICE_LC_HEADER] CC=%u src=%u dest=%s%u", m_slotNo, cc, lc->getSrcId(), lc->getFLCO() == FLCO_GROUP ? "TG" : "", lc->getDstId()); delete lc; } else { LogMessage("%u [Data Sync] [VOICE_LC_HEADER] CC=%u <Invalid LC>", m_slotNo, cc); } } else if (type == DT_TERMINATOR_WITH_LC) { CDMRFullLC fullLC; CDMRLC* lc = fullLC.decode(buffer, type); if (lc != NULL) { LogMessage("%u [Data Sync] [DT_TERMINATOR_WITH_LC] CC=%u src=%u dest=%s%u", m_slotNo, cc, lc->getSrcId(), lc->getFLCO() == FLCO_GROUP ? "TG" : "", lc->getDstId()); delete lc; } else { LogMessage("%u [Data Sync] [DT_TERMINATOR_WITH_LC] CC=%u <Invalid LC>", m_slotNo, cc); } } else if (type == DT_VOICE_PI_HEADER) { LogMessage("%u [Data Sync] [VOICE_PI_HEADER] CC=%u", m_slotNo, cc); } else if (type == DT_DATA_HEADER) { CDMRDataHeader header; bool valid = header.put(buffer); if (valid) LogMessage("%u [Data Sync] [DATA_HEADER] CC=%u src=%u dest=%s%u", m_slotNo, cc, header.getSrcId(), header.getGI() ? "TG" : "", header.getDstId()); else LogMessage("%u [Data Sync] [DATA_HEADER] CC=%u invalid", m_slotNo, cc); } else if (type == DT_RATE_12_DATA) { LogMessage("%u [Data Sync] [RATE_1/2_DATA] CC=%u", m_slotNo, cc); } else if (type == DT_RATE_34_DATA) { LogMessage("%u [Data Sync] [RATE_3/4_DATA] CC=%u", m_slotNo, cc); } else if (type == DT_RATE_1_DATA) { LogMessage("%u [Data Sync] [RATE_1_DATA] CC=%u", m_slotNo, cc); } else if (type == DT_CSBK) { CDMRCSBK csbk; bool valid = csbk.put(buffer); if (valid) { CSBKO csbko = csbk.getCSBKO(); switch (csbko) { case CSBKO_UUVREQ: LogMessage("%u [Data Sync] [CSBK] [UUVREQ] CC=%u src=%u dest=%s%u", m_slotNo, cc, csbk.getSrcId(), csbk.getGI() ? "TG" : "", csbk.getDstId()); break; case CSBKO_UUANSRSP: LogMessage("%u [Data Sync] [CSBK] [UUANSRSP] CC=%u src=%u dest=%s%u", m_slotNo, cc, csbk.getSrcId(), csbk.getGI() ? "TG" : "", csbk.getDstId()); break; case CSBKO_NACKRSP: LogMessage("%u [Data Sync] [CSBK] [NACKRSP] CC=%u src=%u dest=%s%u", m_slotNo, cc, csbk.getSrcId(), csbk.getGI() ? "TG" : "", csbk.getDstId()); break; case CSBKO_PRECCSBK: LogMessage("%u [Data Sync] [CSBK] [PRECCSBK] CC=%u src=%u dest=%s%u DETAILS: %s:%u", m_slotNo, cc, csbk.getSrcId(), csbk.getGI() ? "TG" : "", csbk.getDstId(), csbk.getDataContent() ? "Data" : "CSBK", csbk.getCBF()); break; default: LogMessage("%u [Data Sync] [CSBK] [UNKNOWN] CC=%u src=%u dest=%s%u CSBKO: %02X", m_slotNo, cc, csbk.getSrcId(), csbk.getGI() ? "TG" : "", csbk.getDstId(), csbko); break; } } else { LogMessage("%u [Data Sync] [CSBK] CC=%u invalid", m_slotNo, cc); } } else { LogMessage("%u [Data Sync] [UNKNOWN] CC=%u type=%u", m_slotNo, cc, type); } }