Index: CloudConnect/CloudConnectController.cpp =================================================================== diff -u -rcaca75be9a284ac5f98c078ec47c2e826ac5e980 -rc6a4b63a37f3beb1e8a51702ec3a56a1c32cfe8f --- CloudConnect/CloudConnectController.cpp (.../CloudConnectController.cpp) (revision caca75be9a284ac5f98c078ec47c2e826ac5e980) +++ CloudConnect/CloudConnectController.cpp (.../CloudConnectController.cpp) (revision c6a4b63a37f3beb1e8a51702ec3a56a1c32cfe8f) @@ -11,6 +11,7 @@ * */ #include +#include #include #include "CloudConnectController.h" @@ -86,53 +87,64 @@ void CloudConnectController::loadMsgHandling(const QString &msgHandlingPath) { static const QHash actionMap = { - { QStringLiteral("send_always"), MsgAction::SendAlways }, - { QStringLiteral("send_delta"), MsgAction::SendDelta }, - { QStringLiteral("drop"), MsgAction::Drop }, + { QStringLiteral("SendAlways"), MsgAction::SendAlways }, + { QStringLiteral("SendDelta"), MsgAction::SendDelta }, + { QStringLiteral("Drop"), MsgAction::Drop }, }; - static const QHash topicMap = { - { QStringLiteral("ClinicalData"), CloudConnectFrame::MsgId::ClinicalData }, - { QStringLiteral("Diagnostic"), CloudConnectFrame::MsgId::Diagnostic }, - { QStringLiteral("Ack"), CloudConnectFrame::MsgId::Ack }, - { QStringLiteral("Alarms"), CloudConnectFrame::MsgId::Alarms }, - { QStringLiteral("Audit"), CloudConnectFrame::MsgId::Audit }, - { QStringLiteral("DeviceLogFile"), CloudConnectFrame::MsgId::DeviceLogFile }, - { QStringLiteral("TreatmentLogFile"), CloudConnectFrame::MsgId::TreatmentLogFile }, - { QStringLiteral("CloudSyncLogFile"), CloudConnectFrame::MsgId::CloudSyncLogFile }, + static const QHash topicMap = { + { QStringLiteral("HighPriority"), CloudConnectFrame::Type::HighPriority }, + { QStringLiteral("NormalPriority"), CloudConnectFrame::Type::NormalPriority }, + { QStringLiteral("DeviceLogFile"), CloudConnectFrame::Type::DeviceLogFile }, + { QStringLiteral("TreatmentLogFile"), CloudConnectFrame::Type::TreatmentLogFile }, + { QStringLiteral("CloudSyncLogFile"), CloudConnectFrame::Type::CloudSyncLogFile }, }; + if (! QFile::exists(msgHandlingPath)) { + qWarning().noquote() << "CloudConnect: handling INI" << msgHandlingPath << "does not exist"; + return; + } + QSettings msgHandlingIni(msgHandlingPath, QSettings::IniFormat); if (msgHandlingIni.status() != QSettings::NoError) { qWarning().noquote() << "CloudConnect: could not read message handling INI" << msgHandlingPath << "— all messages will be dropped"; return; } - int loaded = 0; + int msgCount = 0; for (const QString &group : msgHandlingIni.childGroups()) { bool ok = false; const Can::MsgId msgId = static_cast(group.toUInt(&ok, 16)); if (!ok) { + qWarning().noquote() << QString("CloudConnect: could not convert group \"%1\" to MsgId").arg(group); continue; } msgHandlingIni.beginGroup(group); - const QString actionStr = msgHandlingIni.value(QStringLiteral("action"), QStringLiteral("drop")).toString().trimmed(); + const QString msgIdStr = msgHandlingIni.value(QStringLiteral("msg_id")).toString(); + const QString actionStr = msgHandlingIni.value(QStringLiteral("action")).toString().trimmed(); const QString topicStr = msgHandlingIni.value(QStringLiteral("topic")).toString().trimmed(); + qInfo().noquote() << QString("%1 (0x%2): action=%3, topic=%4") + .arg(msgIdStr).arg(QString("%1").arg(quint16(msgId), 4, 16, QChar('0')).toUpper()).arg(actionStr).arg(topicStr); msgHandlingIni.endGroup(); MsgHandling msgHandling; msgHandling.action = actionMap.value(actionStr, MsgAction::Drop); - msgHandling.topic = topicMap.value(topicStr, CloudConnectFrame::MsgId::ClinicalData); + msgHandling.topic = topicMap.value(topicStr, CloudConnectFrame::Type::NormalPriority); - if (!actionMap.contains(actionStr)) { - qWarning().noquote() << QString("CloudConnect: unknown message action \"%1\" for msgId=0x%2 — defaulting to drop") - .arg(actionStr).arg(msgId, 4, 16, QChar('0')); + if (actionStr.length() > 0 && !actionMap.contains(actionStr)) { + qWarning().noquote() << QString("CloudConnect: unknown message action \"%1\" for msgId=0x%2 — defaulting to Drop") + .arg(actionStr).arg(QString("%1").arg(quint16(msgId), 4, 16, QChar('0').toUpper())); } + if (topicStr.length() > 0 && !topicMap.contains(topicStr)) { + qWarning().noquote() << QString("CloudConnect: unknown message topic \"%1\" for msgId=0x%2 — defaulting to NormalPriority") + .arg(topicStr).arg(QString("%1").arg(quint16(msgId), 4, 16, QChar('0').toUpper())); + } + _msgHandling.insert(msgId, msgHandling); - loaded++; + msgCount++; } - qInfo().noquote() << QString("CloudConnect: loaded message handling %1 (%2 entries)").arg(msgHandlingPath).arg(loaded); + qInfo().noquote() << QString("CloudConnect: loaded message handling %1 (%2 entries)").arg(msgHandlingPath).arg(msgCount); } /*! Index: CloudConnect/CloudConnectController.h =================================================================== diff -u -rcaca75be9a284ac5f98c078ec47c2e826ac5e980 -rc6a4b63a37f3beb1e8a51702ec3a56a1c32cfe8f --- CloudConnect/CloudConnectController.h (.../CloudConnectController.h) (revision caca75be9a284ac5f98c078ec47c2e826ac5e980) +++ CloudConnect/CloudConnectController.h (.../CloudConnectController.h) (revision c6a4b63a37f3beb1e8a51702ec3a56a1c32cfe8f) @@ -69,7 +69,7 @@ */ struct MsgHandling { MsgAction action = MsgAction::Drop; - CloudConnectFrame::MsgId topic = CloudConnectFrame::MsgId::ClinicalData; + CloudConnectFrame::Type topic = CloudConnectFrame::Type::NormalPriority; }; void loadMsgHandling(const QString &msgHandlingPath); Fisheye: Tag c6a4b63a37f3beb1e8a51702ec3a56a1c32cfe8f refers to a dead (removed) revision in file `CloudConnect/config/CloudConnectMsgHandling.ini'. Fisheye: No comparison available. Pass `N' to diff? Index: CloudConnect/config/LeahiMsgHandling.ini =================================================================== diff -u -rcaca75be9a284ac5f98c078ec47c2e826ac5e980 -rc6a4b63a37f3beb1e8a51702ec3a56a1c32cfe8f --- CloudConnect/config/LeahiMsgHandling.ini (.../LeahiMsgHandling.ini) (revision caca75be9a284ac5f98c078ec47c2e826ac5e980) +++ CloudConnect/config/LeahiMsgHandling.ini (.../LeahiMsgHandling.ini) (revision c6a4b63a37f3beb1e8a51702ec3a56a1c32cfe8f) @@ -1,2370 +1,1431 @@ +; Group format: +; [ ] +; msg_id = +; action = (default: Drop) +; topic = (default: NormalPriority) + [0x0000] msg_id = MSG_ID_UNUSED -action = drop -topic = [0x0080] msg_id = MSG_ID_TESTER_LOGIN_REQUEST -action = drop -topic = [0x00A0] msg_id = MSG_ID_DD_TESTER_LOGIN_REQUEST -action = drop -topic = [0x00B0] msg_id = MSG_ID_FP_TESTER_LOGIN_REQUEST -action = drop -topic = [0x0100] msg_id = MSG_ID_ALARM_STATUS_DATA -action = drop -topic = +topic = HighPriority [0x0180] msg_id = MSG_ID_TD_SOFTWARE_RESET_REQUEST -action = drop -topic = [0x01A0] msg_id = MSG_ID_DD_SOFTWARE_RESET_REQUEST -action = drop -topic = [0x01B0] msg_id = MSG_ID_FP_SOFTWARE_RESET_REQUEST -action = drop -topic = [0x0200] msg_id = MSG_ID_ALARM_TRIGGERED -action = drop -topic = [0x0280] msg_id = MSG_ID_TD_SEND_TEST_CONFIGURATION -action = drop -topic = [0x02A0] msg_id = MSG_ID_DD_SEND_TEST_CONFIGURATION -action = drop -topic = [0x02B0] msg_id = MSG_ID_FP_SEND_TEST_CONFIGURATION -action = drop -topic = [0x0300] msg_id = MSG_ID_ALARM_CLEARED -action = drop -topic = [0x0380] msg_id = MSG_ID_TD_BUBBLE_OVERRIDE_REQUEST -action = drop -topic = [0x03A0] msg_id = MSG_ID_DD_VALVE_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x03B0] msg_id = MSG_ID_FP_VALVE_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x0400] msg_id = MSG_ID_ALARM_CONDITION_CLEARED -action = drop -topic = [0x0480] msg_id = MSG_ID_TD_VOLTAGE_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x04A0] msg_id = MSG_ID_DD_VALVE_STATE_OVERRIDE_REQUEST -action = drop -topic = [0x04B0] msg_id = MSG_ID_FP_VALVE_CMD_STATE_OVERRIDE_REQUEST -action = drop -topic = [0x0500] msg_id = MSG_ID_USER_ALARM_SILENCE_REQUEST -action = drop -topic = [0x0580] msg_id = MSG_ID_TD_VOLTAGE_OVERRIDE_REQUEST -action = drop -topic = [0x05A0] msg_id = MSG_ID_DD_VALVE_SENSED_STATE_OVERRIDE_REQUEST -action = drop -topic = [0x05B0] msg_id = MSG_ID_FP_VALVE_SENSED_STATE_OVERRIDE_REQUEST -action = drop -topic = [0x0600] msg_id = MSG_ID_UI_ALARM_USER_ACTION_REQUEST -action = drop -topic = [0x0680] msg_id = MSG_ID_TD_BUBBLE_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x06A0] msg_id = MSG_ID_DD_PRESSURE_SENSOR_READINGS_OVERRIDE_REQUEST -action = drop -topic = [0x06B0] msg_id = MSG_ID_FP_FLUID_PUMP_SET_PWM_REQUEST -action = drop -topic = [0x0700] msg_id = MSG_ID_TD_ALARM_INFORMATION_DATA -action = drop -topic = [0x0780] msg_id = MSG_ID_TD_PRESSURE_OVERRIDE_REQUEST -action = drop -topic = [0x07A0] msg_id = MSG_ID_DD_PRESSURE_SENSOR_TEMPERATURE_OVERRIDE_REQUEST -action = drop -topic = [0x07B0] msg_id = MSG_ID_FP_FLUID_PUMP_READ_PWM_OVERRIDE_REQUEST -action = drop -topic = [0x0800] msg_id = MSG_ID_DD_ALARM_INFO_DATA -action = drop -topic = [0x0880] msg_id = MSG_ID_TD_AIR_PUMP_SET_STATE_REQUEST -action = drop -topic = [0x08A0] msg_id = MSG_ID_DD_PRESSURE_SENSOR_READ_COUNTER_OVERRIDE_REQUEST -action = drop -topic = [0x08B0] msg_id = MSG_ID_FP_FLUID_PUMP_SPEED_OVERRIDE_REQUEST -action = drop -topic = [0x0900] msg_id = MSG_ID_UI_ACTIVE_ALARMS_LIST_REQUEST -action = drop -topic = [0x0980] msg_id = MSG_ID_TD_AIR_PUMP_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x09A0] msg_id = MSG_ID_DD_PRESSURE_SENSOR_ERROR_COUNTER_OVERRIDE_REQUEST -action = drop -topic = [0x09B0] msg_id = MSG_ID_FP_RO_PUMP_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x0A00] msg_id = MSG_ID_TD_ACTIVE_ALARMS_LIST_REQUEST_RESPONSE -action = drop -topic = [0x0A80] msg_id = MSG_ID_TD_SWITCHES_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x0AA0] msg_id = MSG_ID_DD_PRESSURE_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x0AB0] msg_id = MSG_ID_FP_PRESSURE_OVERRIDE_REQUEST -action = drop -topic = [0x0B00] msg_id = MSG_ID_UI_SET_ALARM_AUDIO_VOLUME_LEVEL_CMD_REQUEST -action = drop -topic = [0x0B80] msg_id = MSG_ID_TD_SWITCH_STATE_OVERRIDE_REQUEST -action = drop -topic = [0x0BA0] msg_id = MSG_ID_DD_PRESSURE_SENSOR_FILTER_READINGS_OVERRIDE_REQUEST -action = drop -topic = [0x0BB0] msg_id = MSG_ID_FP_PRESSURE_TEMP_OVERRIDE_REQUEST -action = drop -topic = [0x0C00] msg_id = MSG_ID_TD_ALARM_AUDIO_VOLUME_SET_RESPONSE -action = drop -topic = [0x0C80] msg_id = MSG_ID_TD_OFF_BUTTON_OVERRIDE_REQUEST -action = drop -topic = [0x0CA0] msg_id = MSG_ID_DD_PRESSURE_SENSOR_FILTER_TEMPERATURE_OVERRIDE_REQUEST -action = drop -topic = [0x0CB0] msg_id = MSG_ID_FP_PRESSURE_SENSOR_FILTER_READINGS_OVERRIDE_REQUEST -action = drop -topic = [0x0D00] msg_id = MSG_ID_FW_VERSIONS_REQUEST -action = drop -topic = [0x0D80] msg_id = MSG_ID_TD_STOP_BUTTON_OVERRIDE_REQUEST -action = drop -topic = [0x0DA0] msg_id = MSG_ID_DD_CONDUCTIVITY_SENSOR_READINGS_OVERRIDE_REQUEST -action = drop -topic = [0x0DB0] msg_id = MSG_ID_FP_PRESSURE_SENSOR_FILTER_TEMPERATURE_OVERRIDE_REQUEST -action = drop -topic = [0x0E00] msg_id = MSG_ID_TD_VERSION_RESPONSE -action = drop -topic = [0x0E80] msg_id = MSG_ID_TD_ALARM_LAMP_PATTERN_OVERRIDE_REQUEST -action = drop -topic = [0x0EA0] msg_id = MSG_ID_DD_CONDUCTIVITY_SENSOR_TEMPERATURE_OVERRIDE_REQUEST -action = drop -topic = [0x0EB0] msg_id = MSG_ID_FP_PRESSURE_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x0F00] msg_id = MSG_ID_DD_VERSION_RESPONSE -action = drop -topic = [0x0F80] msg_id = MSG_ID_TD_ALARM_AUDIO_LEVEL_OVERRIDE_REQUEST -action = drop -topic = [0x0FA0] msg_id = MSG_ID_DD_CONDUCTIVITY_SENSOR_CONDUCTIVITY_READ_COUNTER_OVERRIDE_REQUEST -action = drop -topic = [0x0FB0] msg_id = MSG_ID_FP_LEVEL_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x1000] msg_id = MSG_ID_UI_CHECK_IN -action = drop -topic = [0x1080] msg_id = MSG_ID_TD_ALARM_AUDIO_CURRENT_HG_OVERRIDE_REQUEST -action = drop -topic = [0x10A0] msg_id = MSG_ID_DD_CONDUCTIVITY_SENSOR_CONDUCTIVITY_ERROR_COUNTER_OVERRIDE_REQUEST -action = drop -topic = [0x10B0] msg_id = MSG_ID_FP_FLOATER_LEVEL_OVERRIDE_REQUEST -action = drop -topic = [0x1100] msg_id = MSG_ID_TD_BLOOD_PUMP_DATA -action = drop -topic = [0x1180] msg_id = MSG_ID_TD_ALARM_AUDIO_CURRENT_LG_OVERRIDE_REQUEST -action = drop -topic = [0x11A0] msg_id = MSG_ID_DD_CONDUCTIVITY_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x11B0] msg_id = MSG_ID_FP_FLOWS_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x1200] msg_id = MSG_ID_TD_OP_MODE_DATA -action = drop -topic = +action = SendAlways +topic = HighPriority [0x1280] msg_id = MSG_ID_TD_BACKUP_ALARM_AUDIO_CURRENT_OVERRIDE_REQUEST -action = drop -topic = [0x12A0] msg_id = MSG_ID_DD_CONCENTRATE_PUMP_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x12B0] msg_id = MSG_ID_FP_FLOW_RATE_OVERRIDE_REQUEST -action = drop -topic = [0x1300] msg_id = MSG_ID_DD_OP_MODE_DATA -action = drop -topic = [0x1380] msg_id = MSG_ID_TD_PRESSURE_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x13A0] msg_id = MSG_ID_DD_CONCENTRATE_PUMP_TARGET_SPEED_OVERRIDE_REQUEST -action = drop -topic = [0x13B0] msg_id = MSG_ID_FP_FLOW_TEMP_OVERRIDE_REQUEST -action = drop -topic = [0x1400] msg_id = MSG_ID_DD_COMMAND_RESPONSE -action = drop -topic = [0x1480] msg_id = MSG_ID_TD_AIR_TRAP_LEVEL_OVERRIDE_REQUEST -action = drop -topic = [0x14A0] msg_id = MSG_ID_DD_CONCENTRATE_PUMP_MEASURED_SPEED_OVERRIDE_REQUEST -action = drop -topic = [0x14B0] msg_id = MSG_ID_FP_CONDUCTIVITY_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x1500] msg_id = MSG_ID_TD_UI_VERSION_INFO_REQUEST -action = drop -topic = [0x1580] msg_id = MSG_ID_TD_AIR_TRAP_LEVEL_RAW_OVERRIDE_REQUEST -action = drop -topic = [0x15A0] msg_id = MSG_ID_DD_CONCENTRATE_PUMP_PARKED_OVERRIDE_REQUEST -action = drop -topic = [0x15B0] msg_id = MSG_ID_FP_CONDUCTIVITY_SENSOR_READINGS_OVERRIDE_REQUEST -action = drop -topic = [0x1600] msg_id = MSG_ID_UI_VERSION_INFO_RESPONSE -action = drop -topic = [0x1680] msg_id = MSG_ID_TD_AIR_TRAP_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x16A0] msg_id = MSG_ID_DD_CONCENTRATE_PUMP_PARK_FAULT_OVERRIDE_REQUEST -action = drop -topic = [0x16B0] msg_id = MSG_ID_FP_CONDUCTIVITY_SENSOR_TEMPERATURE_OVERRIDE_REQUEST -action = drop -topic = [0x1700] msg_id = MSG_ID_TD_EVENT -action = drop -topic = [0x1780] msg_id = MSG_ID_TD_3_WAY_VALVE_SET_STATE_REQUEST -action = drop -topic = [0x17A0] msg_id = MSG_ID_DD_CONCENTRATE_PUMP_PARK_REQUEST_OVERRIDE_REQUEST -action = drop -topic = [0x17B0] msg_id = MSG_ID_FP_CONDUCTIVITY_SENSOR_CONDUCTIVITY_READ_COUNT_OVERRIDE_REQUEST -action = drop -topic = [0x1800] msg_id = MSG_ID_DD_EVENT -action = drop -topic = [0x1880] msg_id = MSG_ID_TD_ROTARY_PINCH_VALVE_SET_POS_REQUEST -action = drop -topic = [0x18A0] msg_id = MSG_ID_DD_TEMPERATURE_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x18B0] msg_id = MSG_ID_FP_CONDUCTIVITY_SENSOR_CONDUCTIVITY_ERROR_COUNT_OVERRIDE_REQUEST -action = drop -topic = [0x1900] msg_id = MSG_ID_TD_DD_ALARMS_REQUEST -action = drop -topic = [0x1980] msg_id = MSG_ID_TD_ROTARY_PINCH_VALVE_STATUS_OVERRIDE_REQUEST -action = drop -topic = [0x19A0] msg_id = MSG_ID_DD_TEMPERATURE_SENSOR_MEASURED_TEMPERATURE_OVERRIDE_REQUEST -action = drop -topic = [0x19B0] msg_id = MSG_ID_FP_TEMPERATURE_OVERRIDE_REQUEST -action = drop -topic = [0x1A00] msg_id = MSG_ID_UI_TD_RESET_IN_SERVICE_MODE_REQUEST -action = drop -topic = [0x1A80] msg_id = MSG_ID_TD_ROTARY_PINCH_VALVE_POSITION_OVERRIDE_REQUEST -action = drop -topic = [0x1AA0] msg_id = MSG_ID_DD_TEMPERATURE_SENSOR_READ_COUNTER_OVERRIDE_REQUEST -action = drop -topic = [0x1AB0] msg_id = MSG_ID_FP_FILTERED_FLOW_RATE_OVERRIDE_REQUEST -action = drop -topic = [0x1B00] msg_id = MSG_ID_DD_VALVES_STATES_DATA -action = drop -topic = [0x1B80] msg_id = MSG_ID_TD_VALVES_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x1BA0] msg_id = MSG_ID_DD_TEMPERATURE_SENSOR_FILTERED_TEMP_OVERRIDE_REQUEST -action = drop -topic = [0x1BB0] msg_id = MSG_ID_FP_FILTERED_FLOW_TEMP_OVERRIDE_REQUEST -action = drop -topic = [0x1C00] msg_id = MSG_ID_DD_PRESSURES_DATA -action = drop -topic = [0x1C80] msg_id = MSG_ID_TD_ALARM_STATUS_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x1CA0] msg_id = MSG_ID_DD_SET_OPERATION_SUB_MODE_OVERRIDE_REQUEST -action = drop -topic = [0x1CB0] msg_id = MSG_ID_FP_PRE_GEN_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x1D00] msg_id = MSG_ID_TD_VOLTAGES_DATA -action = drop -topic = [0x1D80] msg_id = MSG_ID_TD_ALARM_INFO_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x1DA0] msg_id = MSG_ID_DD_DIALYSATE_PUMPS_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x1DB0] msg_id = MSG_ID_FP_SET_OPERATION_MODE_REQUEST -action = drop -topic = [0x1E00] msg_id = MSG_ID_TD_BUBBLES_DATA -action = drop -topic = [0x1E80] msg_id = MSG_ID_TD_ALARM_START_TIME_OVERRIDE_REQUEST -action = drop -topic = [0x1EA0] msg_id = MSG_ID_DD_DIALYSATE_PUMPS_TARGET_SPEED_OVERRIDE_REQUEST -action = drop -topic = [0x1EB0] msg_id = MSG_ID_FP_OPERATION_MODE_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x1F00] msg_id = MSG_ID_DD_CONDUCTIVITY_DATA -action = drop -topic = [0x1F80] msg_id = MSG_ID_TD_ALARM_CLEAR_ALL_ALARMS_REQUEST -action = drop -topic = [0x1FA0] msg_id = MSG_ID_DD_DIALYSATE_PUMPS_MEASURED_SPEED_OVERRIDE_REQUEST -action = drop -topic = [0x1FB0] msg_id = MSG_ID_FP_TEMPERATURE_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x2000] msg_id = MSG_ID_TD_AIR_PUMP_DATA -action = drop -topic = [0x2080] msg_id = MSG_ID_TD_WATCHDOG_OVERRIDE_REQUEST -action = drop -topic = [0x20A0] msg_id = MSG_ID_DD_DIALYSATE_PUMPS_TARGET_PRESSURE_OVERRIDE_REQUEST -action = drop -topic = [0x20B0] msg_id = MSG_ID_FP_RO_PUMP_TARGET_PRESSURE_OVERRIDE_REQUEST -action = drop -topic = [0x2100] msg_id = MSG_ID_TD_SWITCHES_DATA -action = drop -topic = [0x2180] msg_id = MSG_ID_TD_ALARM_STATE_OVERRIDE_REQUEST -action = drop -topic = [0x21A0] msg_id = MSG_ID_DD_DIALYSATE_PUMPS_MEASURED_CURRENT_OVERRIDE_REQUEST -action = drop -topic = [0x21B0] msg_id = MSG_ID_FP_RO_PUMP_TARGET_FLOW_OVERRIDE_REQUEST -action = drop -topic = [0x2200] msg_id = MSG_ID_POWER_OFF_WARNING -action = drop -topic = [0x2280] msg_id = MSG_ID_TD_SAFETY_SHUTDOWN_OVERRIDE_REQUEST -action = drop -topic = [0x22A0] msg_id = MSG_ID_DD_DIALYSATE_PUMPS_MEASURED_DIRECTION_OVERRIDE_REQUEST -action = drop -topic = [0x22B0] msg_id = MSG_ID_FP_RO_PUMP_TARGET_PWM_OVERRIDE_REQUEST -action = drop -topic = [0x2300] msg_id = MSG_ID_OFF_BUTTON_PRESS_REQUEST -action = drop -topic = [0x2380] msg_id = MSG_ID_TD_PINCH_VALVE_SET_POSITION_REQUEST -action = drop -topic = [0x23A0] msg_id = MSG_ID_DD_HEATERS_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x23B0] msg_id = MSG_ID_FP_BOOST_PUMP_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x2400] msg_id = MSG_ID_TD_PRESSURE_DATA -action = drop -topic = [0x2480] msg_id = MSG_ID_TD_PINCH_VALVE_HOME_REQUEST -action = drop -topic = [0x24A0] msg_id = MSG_ID_DD_HEATERS_DUTY_CYCLE_OVERRIDE_REQUEST -action = drop -topic = [0x24B0] msg_id = MSG_ID_FP_BOOST_PUMP_TARGET_PRESSURE_OVERRIDE_REQUEST -action = drop -topic = [0x2500] msg_id = MSG_ID_DD_CONCENTRATE_PUMP_DATA -action = drop -topic = [0x2580] msg_id = MSG_ID_TD_BLOOD_PUMP_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x25A0] msg_id = MSG_ID_DD_LEVELS_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x25B0] msg_id = MSG_ID_FP_BOOST_PUMP_TARGET_FLOW_OVERRIDE_REQUEST -action = drop -topic = [0x2600] msg_id = MSG_ID_DD_TEMPERATURE_DATA -action = drop -topic = [0x2680] msg_id = MSG_ID_TD_BLOOD_PUMP_SET_FLOW_RATE_REQUEST -action = drop -topic = [0x26A0] msg_id = MSG_ID_DD_LEVELS_STATUS_OVERRIDE_REQUEST -action = drop -topic = [0x26B0] msg_id = MSG_ID_FP_BOOST_PUMP_TARGET_PWM_OVERRIDE_REQUEST -action = drop -topic = [0x2700] msg_id = MSG_ID_DIALYSATE_PUMPS_DATA -action = drop -topic = [0x2780] msg_id = MSG_ID_TD_BLOOD_PUMP_SET_SPEED_REQUEST -action = drop -topic = [0x27B0] msg_id = MSG_ID_FP_BOOST_PUMP_STOP_REQUEST -action = drop -topic = [0x2800] msg_id = MSG_ID_DD_HEATERS_DATA -action = drop -topic = [0x2880] msg_id = MSG_ID_TD_BLOOD_PUMP_MEASURED_FLOW_RATE_OVERRIDE_REQUEST -action = drop -topic = [0x28A0] msg_id = MSG_ID_DD_OP_MODE_STATUS_OVERRIDE_REQUEST -action = drop -topic = [0x28B0] msg_id = MSG_ID_FP_RO_PUMP_STOP_REQUEST -action = drop -topic = [0x2900] msg_id = MSG_ID_DD_LEVEL_DATA -action = drop -topic = [0x2980] msg_id = MSG_ID_TD_BLOOD_PUMP_MEASURED_MOTOR_SPEED_OVERRIDE_REQUEST -action = drop -topic = [0x29A0] msg_id = MSG_ID_DD_SET_OPERATION_MODE_OVERRIDE_REQUEST -action = drop -topic = [0x29B0] msg_id = MSG_ID_FP_SAFETY_SHUTDOWN_OVERRIDE_REQUEST -action = drop -topic = [0x2A00] msg_id = MSG_ID_TD_AIR_TRAP_DATA -action = drop -topic = [0x2A80] msg_id = MSG_ID_TD_BLOOD_PUMP_MEASURED_ROTOR_SPEED_OVERRIDE_REQUEST -action = drop -topic = [0x2AA0] msg_id = MSG_ID_DD_UF_DATA_PUBLISH_OVERRIDE_REQUEST -action = drop -topic = [0x2AB0] msg_id = MSG_ID_FP_PERMEATE_TANK_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x2B00] msg_id = MSG_ID_TD_VALVES_DATA -action = drop -topic = [0x2B80] msg_id = MSG_ID_TD_BLOOD_PUMP_ROTOR_COUNT_OVERRIDE_REQUEST -action = drop -topic = [0x2BA0] msg_id = MSG_ID_DD_DIALYSATE_PUMPS_START_STOP_OVERRIDE_REQUEST -action = drop -topic = [0x2BB0] msg_id = MSG_ID_FP_ALARM_STATE_OVERRIDE_REQUEST -action = drop -topic = [0x2C00] msg_id = MSG_ID_FP_EVENT -action = drop -topic = [0x2C80] msg_id = MSG_ID_TD_TMP_PRESSURE_OVERRIDE_REQUEST -action = drop -topic = [0x2CA0] msg_id = MSG_ID_DD_GEND_MODE_DATA_PUBLISH_OVERRIDE_REQUEST -action = drop -topic = [0x2CB0] msg_id = MSG_ID_FP_ALARM_CLEAR_ALL_ALARMS_REQUEST -action = drop -topic = [0x2D00] msg_id = MSG_ID_FP_ALARM_INFO_DATA -action = drop -topic = [0x2D80] msg_id = MSG_ID_TD_REQ_CURRENT_TREATMENT_PARAMETERS -action = drop -topic = [0x2DA0] msg_id = MSG_ID_DD_CONCENTRATE_PUMPS_START_STOP_OVERRIDE_REQUEST -action = drop -topic = [0x2DB0] msg_id = MSG_ID_FP_SET_TEST_CONFIGURATION -action = drop -topic = [0x2E00] msg_id = MSG_ID_DD_BAL_CHAMBER_DATA -action = drop -topic = [0x2E80] msg_id = MSG_ID_TD_RSP_CURRENT_TREATMENT_PARAMETERS -action = drop -topic = [0x2EA0] msg_id = MSG_ID_DD_HEATERS_START_STOP_OVERRIDE_REQUEST -action = drop -topic = [0x2EB0] msg_id = MSG_ID_FP_GET_TEST_CONFIGURATION -action = drop -topic = [0x2F00] msg_id = MSG_ID_DD_GEN_DIALYSATE_MODE_DATA -action = drop -topic = [0x2F80] msg_id = MSG_ID_TD_SET_TREATMENT_PARAMETER -action = drop -topic = [0x2FA0] msg_id = MSG_ID_DD_VALVES_OPEN_CLOSE_STATE_OVERRIDE_REQUEST -action = drop -topic = [0x2FB0] msg_id = MSG_ID_FP_RESET_ALL_TEST_CONFIGURATIONS -action = drop -topic = [0x3000] msg_id = MSG_ID_DD_GEN_DIALYSATE_REQUEST_DATA -action = drop -topic = [0x3080] msg_id = MSG_ID_TD_OP_MODE_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x30B0] msg_id = MSG_ID_FP_INLET_PRES_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x3100] msg_id = MSG_ID_FP_VALVES_STATES_DATA -action = drop -topic = [0x3180] msg_id = MSG_ID_TD_OP_MODE_OVERRIDE_REQUEST -action = drop -topic = [0x31A0] msg_id = MSG_ID_DD_BAL_CHAMBER_DATA_PUBLISH_OVERRIDE_REQUEST -action = drop -topic = [0x31B0] msg_id = MSG_ID_FP_INLET_PRES_CHECK_TIME_OVERRIDE_REQUEST -action = drop -topic = [0x3200] msg_id = MSG_ID_FP_RO_PUMP_DATA -action = drop -topic = [0x3280] msg_id = MSG_ID_TD_EJECTOR_MOTOR_SET_SPEED_REQUEST -action = drop -topic = [0x32A0] msg_id = MSG_ID_DD_BAL_CHAMBER_SWITCH_FREQ_OVERRIDE_REQUEST -action = drop -topic = [0x32B0] msg_id = MSG_ID_FP_FILTERED_COND_SENSOR_READINGS_OVERRIDE_REQUEST -action = drop -topic = [0x3300] msg_id = MSG_ID_FP_OP_MODE_DATA -action = drop -topic = [0x3380] msg_id = MSG_ID_TD_EJECTOR_COMMAND -action = drop -topic = [0x33A0] msg_id = MSG_ID_DD_DIAL_DELIVERY_IN_PROGRESS_OVERRIDE_REQUEST -action = drop -topic = [0x33B0] msg_id = MSG_ID_FP_FILTERED_COND_SENSOR_TEMPERATURE_OVERRIDE_REQUEST -action = drop -topic = [0x3400] msg_id = MSG_ID_FP_PRESSURES_DATA -action = drop -topic = [0x3480] msg_id = MSG_ID_TD_EJECTOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x34A0] msg_id = MSG_ID_DD_DIAL_DELIVERY_GOOD_TO_DELIVER_OVERRIDE_REQUEST -action = drop -topic = [0x34B0] msg_id = MSG_ID_FP_SET_START_STOP_OVERRIDE_REQUEST -action = drop -topic = [0x3500] msg_id = MSG_ID_FP_LEVEL_DATA -action = drop -topic = [0x3580] msg_id = MSG_ID_TD_SET_AIR_TRAP_CONTROL -action = drop -topic = [0x35A0] msg_id = MSG_ID_DD_HEATERS_TARGET_TEMPERATURE_OVERRIDE_REQUEST -action = drop -topic = [0x35B0] msg_id = MSG_ID_FP_RO_REJECTION_RATIO_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x3600] msg_id = MSG_ID_FP_FLOW_DATA -action = drop -topic = [0x3680] msg_id = MSG_ID_TD_HOME_BLOOD_PUMP -action = drop -topic = [0x36A0] msg_id = MSG_ID_DD_BC_VALVE_STATES_OVERRIDE_REQUEST -action = drop -topic = [0x36B0] msg_id = MSG_ID_FP_RO_FILTERED_REJECTION_RATIO_OVERRIDE_REQUEST -action = drop -topic = [0x3700] msg_id = MSG_ID_FP_CONDUCTIVITY_DATA -action = drop -topic = [0x3780] msg_id = MSG_ID_TD_BLOOD_FLOW_STROKE_VOLUME_OVERRIDE_REQUEST -action = drop -topic = [0x37A0] msg_id = MSG_ID_DD_BC_SWITCH_ONLY_START_STOP_OVERRIDE_REQUEST -action = drop -topic = [0x37B0] msg_id = MSG_ID_FP_RO_GET_CALCULATED_DUTY_CYCLE_REQUEST -action = drop -topic = [0x3800] msg_id = MSG_ID_AVAILABLE_6 -action = drop -topic = [0x3880] msg_id = MSG_ID_TD_BLOOD_FLOW_WEAR_A_TERM_OVERRIDE_REQUEST -action = drop -topic = [0x38A0] msg_id = MSG_ID_DD_HYD_CHAMBER_TARGET_TEMP_OVERRIDE_REQUEST -action = drop -topic = [0x38B0] msg_id = MSG_ID_FP_RO_CALCULATED_DUTY_CYCLE_RESPONSE -action = drop -topic = [0x3900] msg_id = MSG_ID_FP_TEMPERATURE_DATA -action = drop -topic = [0x3980] msg_id = MSG_ID_TD_BLOOD_FLOW_WEAR_B_TERM_OVERRIDE_REQUEST -action = drop -topic = [0x39A0] msg_id = MSG_ID_DD_ACID_DOSING_VOLUME_OVERRIDE_REQUEST -action = drop -topic = [0x39B0] msg_id = MSG_ID_FP_FLUSH_FILTER_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x3A00] msg_id = MSG_ID_FP_HEATER_DATA -action = drop -topic = [0x3A80] msg_id = MSG_ID_TD_SET_TEST_CONFIGURATION -action = drop -topic = [0x3AA0] msg_id = MSG_ID_DD_BICARB_DOSING_VOLUME_OVERRIDE_REQUEST -action = drop -topic = [0x3AB0] msg_id = MSG_ID_FP_FLUSH_FILTER_TIMER_OVERRIDE_REQUEST -action = drop -topic = [0x3B00] msg_id = MSG_ID_TD_TREATMENT_TIME_DATA -action = drop -topic = [0x3B80] msg_id = MSG_ID_TD_GET_TEST_CONFIGURATION -action = drop -topic = [0x3BA0] msg_id = MSG_ID_DD_GEND_EXEC_STATE_OVERRIDE_REQUEST -action = drop -topic = [0x3BB0] msg_id = MSG_ID_FP_FLUSH_PERMEATE_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x3C00] msg_id = MSG_ID_TD_TREATMENT_STATE_DATA -action = drop -topic = [0x3C80] msg_id = MSG_ID_TD_RESET_ALL_TEST_CONFIGURATIONS -action = drop -topic = [0x3CA0] msg_id = MSG_ID_DD_HEATERS_PWM_PERIOD_OVERIDE_REQUEST -action = drop -topic = [0x3CB0] msg_id = MSG_ID_FP_FLUSH_PERMEATE_TIMER_OVERRIDE_REQUEST -action = drop -topic = [0x3D00] msg_id = MSG_ID_TD_FLUID_BOLUS_DATA -action = drop -topic = [0x3D80] msg_id = MSG_ID_TD_AIR_PUMP_POWER_RAISE_OVERRIDE_REQUEST -action = drop -topic = [0x3DA0] msg_id = MSG_ID_DD_PRE_GEND_MODE_DATA_PUBLISH_OVERRIDE_REQUEST -action = drop -topic = [0x3DB0] msg_id = MSG_ID_FP_FLUSH_PERMEATE_ALARM_TIMER_OVERRIDE_REQUEST -action = drop -topic = [0x3E00] msg_id = MSG_ID_TD_ULTRAFILTRATION_DATA -action = drop -topic = [0x3E80] msg_id = MSG_ID_TD_AIR_PUMP_POWER_LOWER_OVERRIDE_REQUEST -action = drop -topic = [0x3EA0] msg_id = MSG_ID_DD_POST_GEND_MODE_DATA_PUBLISH_OVERRIDE_REQUEST -action = drop -topic = [0x3EB0] msg_id = MSG_ID_FP_FLUSH_CONCENTRATE_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x3F00] msg_id = MSG_ID_UI_TREATMENT_PARAMS_TO_VALIDATE -action = drop -topic = [0x3F80] msg_id = MSG_ID_TD_HARD_STOP_BLOOD_PUMP -action = drop -topic = [0x3FA0] msg_id = MSG_ID_DD_SEND_BLOOD_LEAK_EMB_MODE_RESPONSE -action = drop -topic = [0x3FB0] msg_id = MSG_ID_FP_FLUSH_CONCENTRATE_TIMER_OVERRIDE_REQUEST -action = drop -topic = [0x4000] msg_id = MSG_ID_TD_RESP_TREATMENT_PARAMS_TO_VALIDATE -action = drop -topic = [0x4080] msg_id = MSG_ID_TD_BARO_MFG_CRC_OVERRIDE -action = drop -topic = [0x40A0] msg_id = MSG_ID_DD_SPENT_CHAMB_FILL_DATA_PUBLISH_OVERRIDE_REQUEST -action = drop -topic = [0x40B0] msg_id = MSG_ID_FP_DEF_FLUSH_FILTER_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x4100] msg_id = MSG_ID_UI_TREATMENT_UF_VOLUME_VALIDATE_REQUEST -action = drop -topic = [0x4180] msg_id = MSG_ID_TD_BARO_PRESSURE_OVERRIDE -action = drop -topic = [0x41A0] msg_id = MSG_ID_DD_AVAILABLE_TO_USE_4 -action = drop -topic = [0x41B0] msg_id = MSG_ID_FP_DEF_FLUSH_FILTER_TIMER_OVERRIDE_REQUEST -action = drop -topic = [0x4200] msg_id = MSG_ID_TD_TREATMENT_UF_VOLUME_VALIDATE_RESPONSE -action = drop -topic = [0x4280] msg_id = MSG_ID_TD_TEMPERATURE_OVERRIDE -action = drop -topic = [0x42A0] msg_id = MSG_ID_DD_SAFETY_SHUTDOWN_OVERRIDE_REQUEST -action = drop -topic = [0x42B0] msg_id = MSG_ID_FP_DEF_PRE_GEN_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x4300] msg_id = MSG_ID_TD_TREATMENT_PARAM_RANGES -action = drop -topic = [0x4380] msg_id = MSG_ID_TD_TEMPERATURE_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x43A0] msg_id = MSG_ID_DD_SET_TEST_CONFIGURATION -action = drop -topic = [0x43B0] msg_id = MSG_ID_FP_DEF_GEN_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x4400] msg_id = MSG_ID_TD_VALIDATED_TREATMENT_PARAMS -action = drop -topic = [0x4480] msg_id = MSG_ID_TD_EJECTOR_OPT_SENSOR_OVERRIDE_REQUEST -action = drop -topic = [0x44A0] msg_id = MSG_ID_DD_GET_TEST_CONFIGURATION -action = drop -topic = [0x44B0] msg_id = MSG_ID_FP_DEF_STATUS_REQUEST -action = drop -topic = [0x4500] msg_id = MSG_ID_UI_INITIATE_TREATMENT_WORKFLOW -action = drop -topic = [0x4580] msg_id = MSG_ID_TD_BLOOD_PRIME_VOLUME_OVERRIDE -action = drop -topic = [0x45A0] msg_id = MSG_ID_DD_RESET_ALL_TEST_CONFIGURATIONS -action = drop -topic = [0x45B0] msg_id = MSG_ID_FP_DEF_STATUS_RESPONSE -action = drop -topic = [0x4600] msg_id = MSG_ID_TD_RESP_INITIATE_TREATMENT_WORKFLOW -action = drop -topic = [0x4680] msg_id = MSG_ID_TD_BLOOD_PRIME_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x46A0] msg_id = MSG_ID_AVAILABLE_1 -action = drop -topic = [0x46B0] msg_id = MSG_ID_FP_SET_OPERATION_SUB_MODE_REQUEST -action = drop -topic = [0x4700] msg_id = MSG_ID_UI_UF_PAUSE_RESUME_REQUEST -action = drop -topic = [0x4780] msg_id = MSG_ID_TD_ENABLE_VENOUS_BUBBLE_ALARM -action = drop -topic = [0x47A0] msg_id = MSG_ID_DD_BLOOD_LEAK_DATA_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x47B0] msg_id = MSG_ID_FP_CONDUCTIVITY_SENSOR_RESISTANCE_OVERRIDE_REQUEST -action = drop -topic = [0x4800] msg_id = MSG_ID_TD_UF_PAUSE_RESUME_RESPONSE -action = drop -topic = [0x4880] msg_id = MSG_ID_TD_SYRINGE_PUMP_OPERATION_REQUEST -action = drop -topic = [0x48A0] msg_id = MSG_ID_DD_BLOOD_LEAK_STATUS_OVERRIDE_REQUEST -action = drop -topic = [0x48B0] msg_id = MSG_ID_FP_SET_RECOVERY_VALVES_REQUEST -action = drop -topic = [0x4900] msg_id = MSG_ID_FP_GEN_WATER_MODE_DATA -action = drop -topic = [0x4980] msg_id = MSG_ID_HD_SYRINGE_PUMP_PUBLISH_INTERVAL_OVERRIDE -action = drop -topic = [0x49A0] msg_id = MSG_ID_DD_BLOOD_LEAK_SET_TO_EMBEDDED_MODE_REQUEST -action = drop -topic = [0x49B0] msg_id = MSG_ID_FP_BOOST_PUMP_INSTALL_STATUS_REQUEST -action = drop -topic = [0x4A00] msg_id = MSG_ID_DD_PRE_GEN_DIALYSATE_STATE_DATA -action = drop -topic = [0x4AA0] msg_id = MSG_ID_DD_BLOOD_LEAK_SET_EMBEDDED_MODE_CMD_REQUEST -action = drop -topic = [0x4AB0] msg_id = MSG_ID_FP_BOOST_PUMP_INSTALL_STATUS_RESPONSE -action = drop -topic = [0x4B00] msg_id = MSG_ID_DD_POST_GEN_DIALYSATE_STATE_DATA -action = drop -topic = [0x4BA0] msg_id = MSG_ID_DD_BLOOD_LEAK_EMBEDDED_MODE_INFO_OVERRIDE_REQUEST -action = drop -topic = [0x4C00] msg_id = MSG_ID_DD_PRE_GEN_DIALYSATE_REQUEST_DATA -action = drop -topic = [0x4CA0] msg_id = MSG_ID_DD_BLOOD_LEAK_INTENSITY_MOVING_AVERAGE_OVERRIDE_REQUEST -action = drop -topic = [0x4CB0] msg_id = MSG_ID_FP_CONDUCTIVITY_SENSOR_VERSION_RESPONSE -action = drop -topic = [0x4D00] msg_id = MSG_ID_FP_PRE_GEN_WATER_MODE_DATA -action = drop -topic = [0x4DA0] msg_id = MSG_ID_DD_BLOOD_LEAK_ZEROING_INTERVAL_IN_MS_OVERRIDE_REQUEST -action = drop -topic = [0x4E00] msg_id = MSG_ID_TD_EJECTOR_DATA -action = drop -topic = [0x4EA0] msg_id = MSG_ID_DD_BLOOD_LEAK_ZERO_REQUEST -action = drop -topic = [0x4EB0] msg_id = MSG_ID_FP_CONDUCTIVITY_SENSOR_CAL_RESPONSE -action = drop -topic = [0x4F00] msg_id = MSG_ID_TD_TREATMENT_SET_POINTS -action = drop -topic = [0x4FA0] msg_id = MSG_ID_DD_FILTERED_COND_SENSOR_READINGS_OVERRIDE_REQUEST -action = drop -topic = [0x5000] msg_id = MSG_ID_FP_BOOST_PUMP_DATA -action = drop -topic = [0x5080] msg_id = MSG_ID_TD_SYRINGE_PUMP_RATE_OVERRIDE_REQUEST -action = drop -topic = [0x50A0] msg_id = MSG_ID_DD_FILTERED_COND_SENSOR_TEMPERATURE_OVERRIDE_REQUEST -action = drop -topic = [0x5100] msg_id = MSG_ID_TD_SERIAL_RESPONSE -action = drop -topic = [0x5180] msg_id = MSG_ID_TD_SYRINGE_PUMP_FORCE_OVERRIDE_REQUEST -action = drop -topic = [0x51A0] msg_id = MSG_ID_DD_VOLTAGE_DATA_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x5200] msg_id = MSG_ID_DD_SERIAL_RESPONSE -action = drop -topic = [0x5280] msg_id = MSG_ID_TD_SYRINGE_PUMP_HOME_OVERRIDE_REQUEST -action = drop -topic = [0x52A0] msg_id = MSG_ID_DD_MONITORED_VOLTAGE_OVERRIDE_REQUEST -action = drop -topic = [0x5300] msg_id = MSG_ID_TD_TEMPERATURE_DATA -action = drop -topic = [0x5380] msg_id = MSG_ID_TD_SYRINGE_PUMP_POSITION_OVERRIDE_REQUEST -action = drop -topic = [0x53A0] msg_id = MSG_ID_DD_RINSE_PUMP_DATA_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x5400] msg_id = MSG_ID_TD_BATTERY_DATA -action = drop -topic = [0x5480] msg_id = MSG_ID_TD_SYRINGE_PUMP_VOLUME_OVERRIDE_REQUEST -action = drop -topic = [0x54A0] msg_id = MSG_ID_DD_RINSE_PUMP_PWM_PERCENT_OVERRIDE_REQUEST -action = drop -topic = [0x5500] msg_id = MSG_ID_UI_PATIENT_DISCONNECT_CONFIRM_REQUEST -action = drop -topic = [0x5580] msg_id = MSG_ID_TD_SYRINGE_PUMP_STATUS_OVERRIDE_REQUEST -action = drop -topic = [0x55A0] msg_id = MSG_ID_DD_RINSE_PUMP_TURN_ON_OFF_REQUEST -action = drop -topic = [0x5600] msg_id = MSG_ID_TD_PATIENT_DISCONNECT_CONFIRM_RESPONSE -action = drop -topic = [0x5680] msg_id = MSG_ID_TD_SYRINGE_PUMP_ENCODER_STATUS_OVERRIDE_REQUEST -action = drop -topic = [0x56A0] msg_id = MSG_ID_DD_DRY_BICART_DATA_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x5700] msg_id = MSG_ID_FP_CONCENTRATE_FLUSH_DATA -action = drop -topic = [0x5780] msg_id = MSG_ID_TD_SYRINGE_PUMP_ADC_DAC_STATUS_OVERRIDE_REQUEST -action = drop -topic = [0x57A0] msg_id = MSG_ID_DD_DRY_BICART_FILL_CYCLE_MAX_OVERRIDE_REQUEST -action = drop -topic = [0x5800] msg_id = MSG_ID_FP_GENP_DEF_DATA -action = drop -topic = [0x5880] msg_id = MSG_ID_TD_SYRINGE_PUMP_ADC_READ_COUNTER_OVERRIDE_REQUEST -action = drop -topic = [0x58A0] msg_id = MSG_ID_DD_DRY_BICART_FILL_REQUEST_OVERRIDE_REQUEST -action = drop -topic = [0x5900] msg_id = MSG_ID_FP_PRE_GEN_DEF_DATA -action = drop -topic = [0x5980] msg_id = MSG_ID_TD_HEPARIN_BOLUS_TARGET_RATE_OVERRIDE_REQUEST -action = drop -topic = [0x59A0] msg_id = MSG_ID_DD_BICARB_CHAMBER_FILL_REQUEST_OVERRIDE_REQUEST -action = drop -topic = [0x5A00] msg_id = MSG_ID_FP_VERSION_RESPONSE -action = drop -topic = [0x5AA0] msg_id = MSG_ID_DD_BICART_DRAIN_REQUEST_OVERRIDE_REQUEST -action = drop -topic = [0x5B00] msg_id = MSG_ID_TD_TREATMENT_PAUSED_TIMER_DATA -action = drop -topic = [0x5BA0] msg_id = MSG_ID_DD_BICART_CARTRIDGE_SELECT_OVERRIDE_REQUEST -action = drop -topic = [0x5C00] msg_id = MSG_ID_DD_UF_DATA -action = drop -topic = [0x5CA0] msg_id = MSG_ID_DD_SET_CONDUCTIVITY_MODEL_REQUEST -action = drop -topic = [0x5D00] msg_id = MSG_ID_FP_PERMEATE_TANK_DATA -action = drop -topic = [0x5DA0] msg_id = MSG_ID_DD_CONDUCTIVITY_SENSOR_RESISTANCE_OVERRIDE_REQUEST -action = drop -topic = [0x5E00] msg_id = MSG_ID_DD_SPENT_CHAMBER_FILL_DATA -action = drop -topic = [0x5F00] msg_id = MSG_ID_UI_FLUID_BOLUS_REQUEST -action = drop -topic = [0x5FA0] msg_id = MSG_ID_DD_CONDUCTIVITY_SENSOR_VERSION_RESPONSE -action = drop -topic = [0x6000] msg_id = MSG_ID_TD_FLUID_BOLUS_RESPONSE -action = drop -topic = [0x6080] msg_id = MSG_ID_TD_SYRINGE_PUMP_FORCE_SENSOR_CALIBRATION_REQUEST -action = drop -topic = [0x60A0] msg_id = MSG_ID_DD_BICARB_MIX_VOL_KP_GAIN_COEFF_OVERRIDE_REQUEST -action = drop -topic = [0x6100] msg_id = MSG_ID_DD_BLOOD_LEAK_DATA -action = drop -topic = [0x6180] msg_id = MSG_ID_TD_GET_ALARM_PROPERTIES_REQUEST -action = drop -topic = [0x61A0] msg_id = MSG_ID_DD_BICARB_MIX_VOL_KI_GAIN_COEFF_OVERRIDE_REQUEST -action = drop -topic = [0x6200] msg_id = MSG_ID_FP_INLET_PRESSURE_CHECK_DATA -action = drop -topic = [0x6280] msg_id = MSG_ID_TD_ALARM_PROPERTIES_RESPONSE -action = drop -topic = [0x62A0] msg_id = MSG_ID_DD_ACID_MIX_VOL_KP_GAIN_COEFF_OVERRIDE_REQUEST -action = drop -topic = [0x6300] msg_id = MSG_ID_UI_BLOOD_PRESSURE_REQUEST -action = drop -topic = [0x63A0] msg_id = MSG_ID_DD_ACID_MIX_VOL_KI_GAIN_COEFF_OVERRIDE_REQUEST -action = drop -topic = [0x6400] msg_id = MSG_ID_TD_BLOOD_PRESSURE_READING -action = drop -topic = [0x64A0] msg_id = MSG_ID_DD_ACID_MIX_VOL_OVERRIDE_REQUEST -action = drop -topic = [0x6500] msg_id = MSG_ID_TD_BLOOD_PRESSURE_DATA -action = drop -topic = [0x65A0] msg_id = MSG_ID_DD_BICARB_MIX_VOL_OVERRIDE_REQUEST -action = drop -topic = [0x6600] msg_id = MSG_ID_UI_ULTRAFILTRATION_CHANGE_CONFIRM_REQUEST -action = drop -topic = [0x66A0] msg_id = MSG_ID_DD_BICARB_TARGET_CONDUCTIVITY_OVERRIDE_REQUEST -action = drop -topic = [0x6700] msg_id = MSG_ID_TD_ULTRAFILTRATION_CHANGE_CONFIRM_RESPONSE -action = drop -topic = [0x67A0] msg_id = MSG_ID_DD_BICARB_DELTA_CONDUCTIVITY_OVERRIDE_REQUEST -action = drop -topic = [0x6800] msg_id = MSG_ID_DD_VOLTAGES_DATA -action = drop -topic = [0x68A0] msg_id = MSG_ID_DD_DIALYSATE_TARGET_CONDUCTIVITY_OVERRIDE_REQUEST -action = drop -topic = [0x6900] msg_id = MSG_ID_DD_RINSE_PUMP_DATA -action = drop -topic = [0x69A0] msg_id = MSG_ID_DD_DIALYSATE_DELTA_CONDUCTIVITY_OVERRIDE_REQUEST -action = drop -topic = [0x6A00] msg_id = MSG_ID_TD_TREATMENT_LOG_ALARM_EVENT -action = drop -topic = [0x6AA0] msg_id = MSG_ID_DD_BICART_UPPER_PRESSURE_OVERRIDE_REQUEST -action = drop -topic = [0x6B00] msg_id = MSG_ID_TD_TREATMENT_LOG_EVENT -action = drop -topic = [0x6BA0] msg_id = MSG_ID_DD_BICART_LOWER_PRESSURE_OVERRIDE_REQUEST -action = drop -topic = [0x6C00] msg_id = MSG_ID_TD_DATE_AND_TIME_REQUEST -action = drop -topic = [0x6CA0] msg_id = MSG_ID_DD_FLOATER_LEVEL_OVERRIDE_REQUEST -action = drop -topic = [0x6D00] msg_id = MSG_ID_TD_DATE_AND_TIME_RESPONSE -action = drop -topic = [0x6DA0] msg_id = MSG_ID_DD_SUBSTITUTION_PUMP_START_STOP_OVERRIDE_REQUEST -action = drop -topic = [0x6E00] msg_id = MSG_ID_DD_DATE_AND_TIME_REQUEST -action = drop -topic = [0x6EA0] msg_id = MSG_ID_DD_SUBSTITUTION_PUMP_BROADCAST_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x6F00] msg_id = MSG_ID_DD_DATE_AND_TIME_RESPONSE -action = drop -topic = [0x6FA0] msg_id = MSG_ID_DD_SUBSTITUTION_PUMP_TARGET_RATE_OVERRIDE_REQUEST -action = drop -topic = [0x7000] msg_id = MSG_ID_DD_DRY_BICART_DATA -action = drop -topic = [0x7100] msg_id = MSG_ID_FP_RO_REJECTION_RATIO_DATA -action = drop -topic = [0x71A0] msg_id = MSG_ID_DD_CONDUCTIVITY_SENSOR_CAL_RESPONSE -action = drop -topic = [0x7200] msg_id = MSG_ID_UI_PRESSURE_LIMITS_CHANGE_REQUEST -action = drop -topic = [0x72A0] msg_id = MSG_ID_DD_MIXING_CONTROL_DATA -action = drop -topic = [0x7300] msg_id = MSG_ID_TD_PRESSURE_LIMITS_CHANGE_RESPONSE -action = drop -topic = [0x73A0] msg_id = MSG_ID_DD_MIXING_CONTROL_DATA_PUBLISH_INTERVAL_OVERRIDE_REQUEST -action = drop -topic = [0x7400] msg_id = MSG_ID_UI_BOLUS_VOLUME_CHANGE_REQUEST -action = drop -topic = [0x74A0] msg_id = MSG_ID_DD_BICART_DEPRESSURISE_REQUEST_OVERRIDE_REQUEST -action = drop -topic = [0x7500] msg_id = MSG_ID_TD_BOLUS_VOLUME_CHANGE_RESPONSE -action = drop -topic = [0x75A0] msg_id = MSG_ID_DD_TREATMENT_PARAMS_OVERRIDE_REQUEST -action = drop -topic = [0x7600] msg_id = MSG_ID_UI_DURATION_VALIDATE_REQUEST -action = drop -topic = [0x7700] msg_id = MSG_ID_TD_DURATION_VALIDATE_RESPONSE -action = drop -topic = [0x7800] msg_id = MSG_ID_UI_DURATION_CONFIRM_REQUEST -action = drop -topic = [0x7900] msg_id = MSG_ID_TD_DURATION_CONFIRM_RESPONSE -action = drop -topic = [0x7A00] msg_id = MSG_ID_UI_TREATMENT_SET_POINTS_CHANGE_REQUEST -action = drop -topic = [0x7B00] msg_id = MSG_ID_TD_TREATMENT_SET_POINTS_CHANGE_RESPONSE -action = drop -topic = [0x7C00] msg_id = MSG_ID_UI_TREATMENT_SET_POINT_BLOOD_FLOW_CHANGE_REQUEST -action = drop -topic = [0x7D00] msg_id = MSG_ID_TD_TREATMENT_SET_POINT_BLOOD_FLOW_CHANGE_RESPONSE -action = drop -topic = [0x7E00] msg_id = MSG_ID_UI_TREATMENT_SET_POINT_DIALYSATE_FLOW_CHANGE_REQUEST -action = drop -topic = [0x7F00] msg_id = MSG_ID_TD_TREATMENT_SET_POINT_DIALYSATE_FLOW_CHANGE_RESPONSE -action = drop -topic = [0x8000] msg_id = MSG_ID_UI_TREATMENT_SET_POINT_DIALYSATE_TEMP_CHANGE_REQUEST -action = drop -topic = [0x8100] msg_id = MSG_ID_TD_TREATMENT_SET_POINT_DIALYSATE_TEMP_CHANGE_RESPONSE -action = drop -topic = [0x8200] msg_id = MSG_ID_TD_INSTITUTIONAL_RECORD_REQUEST -action = drop -topic = [0x8300] msg_id = MSG_ID_TD_INSTITUTIONAL_RECORD_RESPONSE -action = drop -topic = [0x8400] msg_id = MSG_ID_TD_ADJUST_INSTITUTIONAL_RECORD_REQUEST -action = drop -topic = [0x8500] msg_id = MSG_ID_TD_ADJUST_INSTITUTIONAL_RECORD_RESPONSE -action = drop -topic = [0x8600] msg_id = MSG_ID_TD_ADVANCED_INSTITUTIONAL_RECORD_REQUEST -action = drop -topic = [0x8700] msg_id = MSG_ID_TD_ADVANCED_INSTITUTIONAL_RECORD_RESPONSE -action = drop -topic = [0x8800] msg_id = MSG_ID_TD_ADVANCED_ADJUST_INSTITUTIONAL_RECORD_REQUEST -action = drop -topic = [0x8900] msg_id = MSG_ID_TD_ADVANCED_ADJUST_INSTITUTIONAL_RECORD_RESPONSE -action = drop -topic = [0x8A00] msg_id = MSG_ID_TD_HEPARIN_REQUEST -action = drop -topic = [0x8B00] msg_id = MSG_ID_TD_HEPARIN_RESPONSE -action = drop -topic = [0x8C00] msg_id = MSG_ID_TD_HEPARIN_DATA -action = drop -topic = [0x8D00] msg_id = MSG_ID_TD_END_TREATMENT_REQUEST -action = drop -topic = [0x8E00] msg_id = MSG_ID_TD_END_TREATMENT_RESPONSE -action = drop -topic = [0x8F00] msg_id = MSG_ID_TD_RINSEBACK_PROGRESS -action = drop -topic = [0x9000] msg_id = MSG_ID_UI_RINSEBACK_CMD_REQUEST -action = drop -topic = [0x9100] msg_id = MSG_ID_TD_RINSEBACK_CMD_RESPONSE -action = drop -topic = [0x9200] msg_id = MSG_ID_UI_ADJUST_DISPOSABLES_CONFIRM_REQUEST -action = drop -topic = [0x9300] msg_id = MSG_ID_TD_ADJUST_DISPOSABLES_CONFIRM_RESPONSE -action = drop -topic = [0x9400] msg_id = MSG_ID_UI_ADJUST_DISPOSABLES_REMOVAL_CONFIRM_REQUEST -action = drop -topic = [0x9500] msg_id = MSG_ID_TD_ADJUST_DISPOSABLES_REMOVAL_CONFIRM_RESPONSE -action = drop -topic = [0x9600] msg_id = MSG_ID_FP_FILTER_FLUSH_DEF_DATA -action = drop -topic = [0x9700] msg_id = MSG_ID_TD_BLOOD_PRIME_PROGRESS_DATA -action = drop -topic = [0x9800] msg_id = MSG_ID_UI_BLOOD_PRIME_CMD_REQUEST -action = drop -topic = [0x9900] msg_id = MSG_ID_TD_BLOOD_PRIME_CMD_RESPONSE -action = drop -topic = [0x9A00] msg_id = MSG_ID_TD_ISOLATED_UF_DATA -action = drop -topic = [0x9B00] msg_id = MSG_ID_UI_ISOLATED_UF_DURATION_CHANGE_REQUEST -action = drop -topic = [0x9C00] msg_id = MSG_ID_TD_ISOLATED_UF_DURATION_CHANGE_RESPONSE -action = drop -topic = [0x9D00] msg_id = MSG_ID_UI_ISOLATED_UF_VOLUME_GOAL_CHANGE_REQUEST -action = drop -topic = [0x9E00] msg_id = MSG_ID_TD_ISOLATED_UF_VOLUME_GOAL_CHANGE_RESPONSE -action = drop -topic = [0x9F00] msg_id = MSG_ID_UI_ISOLATED_UF_CONFIRM_REQUEST -action = drop -topic = [0xA000] msg_id = MSG_ID_TD_ISOLATED_UF_CONFIRM_RESPONSE -action = drop -topic = [0xA100] msg_id = MSG_ID_UI_ADJUST_START_TREATMENT_REQUEST -action = drop -topic = [0xA200] msg_id = MSG_ID_TD_ADJUST_START_TREATMENT_RESPONSE -action = drop -topic = [0xA300] msg_id = MSG_ID_UI_WATER_SAMPLE_RESULT_REQUEST -action = drop -topic = [0xA400] msg_id = MSG_ID_UI_PRESSURE_LIMIT_WIDEN_REQUEST -action = drop -topic = [0xA500] msg_id = MSG_ID_TD_PRESSURE_LIMIT_WIDEN_RESPONSE -action = drop -topic = [0xA600] msg_id = MSG_ID_UI_RECIRCULATE_REQUEST -action = drop -topic = [0xA700] msg_id = MSG_ID_TD_RECIRCULATE_RESPONSE -action = drop -topic = [0xA800] msg_id = MSG_ID_TD_RECIRCULATE_DATA -action = drop -topic = [0xA900] msg_id = MSG_ID_UI_ADJUST_TREATMENT_LOGS_REQUEST -action = drop -topic = [0xAA00] msg_id = MSG_ID_TD_ADJUST_TREATMENT_LOGS_RESPONSE -action = drop -topic = [0xAB00] msg_id = MSG_ID_TD_WATER_SAMPLE_RESULT_RESPONSE -action = drop -topic = [0xAC00] msg_id = MSG_ID_TD_WATER_SAMPLE_DATA -action = drop -topic = [0xAD00] msg_id = MSG_ID_TD_TREATMENT_LOG_AVERAGE_DATA -action = drop -topic = [0xAE00] msg_id = MSG_ID_TD_DRY_SELF_TEST_PROGRESS_DATA -action = drop -topic = [0xAF00] msg_id = MSG_ID_TD_TUBE_SET_AUTHENTICATION_REQUEST -action = drop -topic = [0xB000] msg_id = MSG_ID_TD_TUBE_SET_AUTHENTICATION_ACK_RESPONSE -action = drop -topic = [0xB100] msg_id = MSG_ID_TD_SYRINGE_PUMP_DATA -action = drop -topic = [0xB200] msg_id = MSG_ID_TD_HEPARIN_PAUSE_RESUME_RESPONSE -action = drop -topic = [0xB300] msg_id = MSG_ID_FFU_SIGNAL_TD_UPDATE_AVAILABLE -action = drop -topic = [0xB400] msg_id = MSG_ID_FFU_SIGNAL_DD_UPDATE_AVAILABLE -action = drop -topic = [0xB500] msg_id = MSG_ID_TD_UI_GENERIC_CONFIRMATION_REQUEST -action = drop -topic = [0xB600] msg_id = MSG_ID_UI_GENERIC_CONFIRMATION_RESULT_RESPONSE -action = drop -topic = [0xB700] msg_id = MSG_ID_AVAILABLE_B7 -action = drop -topic = [0xB800] msg_id = MSG_ID_UI_VITALS_ADJUSTMENT_REQUEST -action = drop -topic = [0xB900] msg_id = MSG_ID_TD_VITALS_ADJUSTMENT_RESPONSE -action = drop -topic = [0xD600] msg_id = MSG_ID_UI_SETUP_TUBING_SET_CONNECTIONS_CONFIRM_REQUEST -action = drop -topic = [0xD700] msg_id = MSG_ID_TD_SETUP_TUBING_SET_CONNECTIONS_CONFIRM_RESPONSE -action = drop -topic = [0xDB00] msg_id = MSG_ID_DD_SUBSTITUTION_PUMP_DATA -action = drop -topic = [0xDC00] msg_id = MSG_ID_DD_CONDUCTIVITY_SENSOR_RESISTANCE_DATA -action = drop -topic = [0xDD00] msg_id = MSG_ID_FP_FILTER_FLUSH_DATA -action = drop -topic = [0xDE00] msg_id = MSG_ID_FP_PERMEATE_FLUSH_DATA -action = drop -topic = [0xF1FF] msg_id = MSG_ID_TD_DEBUG_EVENT -action = drop -topic = [0xF2FF] msg_id = MSG_ID_DD_DEBUG_EVENT -action = drop -topic = [0xF3FF] msg_id = MSG_ID_FP_DEBUG_EVENT -action = drop -topic = [0xFFFF] msg_id = MSG_ID_ACK_MESSAGE_THAT_REQUIRES_ACK -action = drop -topic = Index: CloudConnect/main.cpp =================================================================== diff -u -rb915ccc1a72fcca21908c35140af7ac7df1f1f37 -rc6a4b63a37f3beb1e8a51702ec3a56a1c32cfe8f --- CloudConnect/main.cpp (.../main.cpp) (revision b915ccc1a72fcca21908c35140af7ac7df1f1f37) +++ CloudConnect/main.cpp (.../main.cpp) (revision c6a4b63a37f3beb1e8a51702ec3a56a1c32cfe8f) @@ -47,7 +47,7 @@ }); QCommandLineParser parser; - parser.setApplicationDescription("Leahi Real-time Cloud Data Transmission daemon."); + parser.setApplicationDescription("CloudConnect application"); parser.addHelpOption(); parser.addVersionOption(); @@ -63,10 +63,10 @@ parser.addOption(msgHandlingOption); parser.process(app); - CloudConnectController rtController(parser.value(configOption), + CloudConnectController ccController(parser.value(configOption), parser.value(msgHandlingOption)); - rtController.connectToAgent(); - if (!rtController.listenForApp()) { + ccController.connectToAgent(); + if (!ccController.listenForApp()) { return 1; } Index: lib/Comms/include/CloudConnectClient.h =================================================================== diff -u -rcaca75be9a284ac5f98c078ec47c2e826ac5e980 -rc6a4b63a37f3beb1e8a51702ec3a56a1c32cfe8f --- lib/Comms/include/CloudConnectClient.h (.../CloudConnectClient.h) (revision caca75be9a284ac5f98c078ec47c2e826ac5e980) +++ lib/Comms/include/CloudConnectClient.h (.../CloudConnectClient.h) (revision c6a4b63a37f3beb1e8a51702ec3a56a1c32cfe8f) @@ -37,7 +37,7 @@ bool init(const QString &socketPath, int reconnectIntervalMs); bool init(const QString &socketPath, int reconnectIntervalMs, QThread &thread); - bool send(CloudConnectFrame::MsgId msgId, quint16 sequence, const QByteArray &payload = {}); + bool send(CloudConnectFrame::Type type, quint16 sequence, const QByteArray &payload = {}); public Q_SLOTS: void quit(); @@ -46,11 +46,11 @@ /*! * \brief didMessageReceive * \details Emitted when a complete inbound CloudConnectFrame has been parsed. - * \param msgId - message identifier from the frame header + * \param type - message identifier from the frame header * \param sequence - sequence number from the frame header * \param payload - decoded payload bytes, empty for zero-length frames */ - void didMessageReceive(CloudConnectFrame::MsgId msgId, quint16 sequence, QByteArray payload); + void didMessageReceive(CloudConnectFrame::Type type, quint16 sequence, QByteArray payload); /*! * \brief didConnect Index: lib/Comms/include/CloudConnectFrame.h =================================================================== diff -u -rcaca75be9a284ac5f98c078ec47c2e826ac5e980 -rc6a4b63a37f3beb1e8a51702ec3a56a1c32cfe8f --- lib/Comms/include/CloudConnectFrame.h (.../CloudConnectFrame.h) (revision caca75be9a284ac5f98c078ec47c2e826ac5e980) +++ lib/Comms/include/CloudConnectFrame.h (.../CloudConnectFrame.h) (revision c6a4b63a37f3beb1e8a51702ec3a56a1c32cfe8f) @@ -17,14 +17,14 @@ /*! * \brief CloudConnect to Connectivity Agent message framing * \details Transport-agnostic binary framing. build() makes a wire-ready frame; - * feed() parses inbound bytes (see FeedResult). On Complete, read - * msgId()/sequence()/payload(), then reset(). + * read() parses inbound bytes (see ReadState). On Complete, read + * type()/sequence()/payload(), then reset(). * * Frame layout — header only (payload_length == 0): * * Byte: 0 1 2 3 4 5 6-9 10 11 * ┌─────────┬────────┬────────┬───────────┬────────┐ - * │ AA 55 │ msg_id │ seq_num│ pay_length│hdr_crc │ + * │ AA 55 │ type │ seq_num│ pay_length│hdr_crc │ * │ sync │uint16BE│uint16BE│ uint32 BE │uint16BE│ * └─────────┴────────┴────────┴───────────┴────────┘ * @@ -44,51 +44,56 @@ * \brief MQTT topic identifier carried in every frame header * \details The Connectivity Agent uses this value to determine the MQTT topic. */ - enum class MsgId : quint16 { - ClinicalData = 0x0001, - Diagnostic = 0x0002, - Ack = 0x0003, - Alarms = 0x0004, - Audit = 0x0005, - DeviceLogFile = 0x0006, - TreatmentLogFile = 0x0007, - CloudSyncLogFile = 0x0008, + enum class Type : quint16 { + HighPriority = 0x0001, + NormalPriority = 0x0002, + DeviceLogFile = 0x0003, + TreatmentLogFile = 0x0004, + CloudSyncLogFile = 0x0005, + // ClinicalData = 0x0001, + // Diagnostic = 0x0002, + // Ack = 0x0003, + // Alarms = 0x0004, + // Audit = 0x0005, + // DeviceLogFile = 0x0006, + // TreatmentLogFile = 0x0007, + // CloudSyncLogFile = 0x0008, }; /*! * \brief Result returned by feed() after processing each byte chunk */ - enum class FeedResult { + enum class ReadState { Incomplete, ///< More bytes needed — continue feeding. Complete, ///< Full valid frame assembled — read accessors, then call reset(). HeaderError, ///< Header CRC mismatch — frame dropped, state reset automatically. PayloadError, ///< Payload CRC mismatch or oversized payload — frame dropped, state reset automatically. }; - static QByteArray build(MsgId msgId, quint16 sequence, const QByteArray &payload = {}); - FeedResult feed(QByteArray &bytes); + static QByteArray build(Type type, quint16 sequence, const QByteArray &payload = {}); + ReadState read(QByteArray &bytes); - MsgId msgId() const; + Type type() const; quint16 sequence() const; QByteArray payload() const; void reset(); private: - static quint16 crc16ccitt(const quint8 *data, int len); - static quint32 crc32isohdlc(const quint8 *data, int len); - static constexpr int SYNC_SIZE = 2; static constexpr quint8 SYNC[SYNC_SIZE] = {0xAA, 0x55}; static constexpr int HEADER_SIZE = 12; - static constexpr int MSGID_SIZE = 2; + static constexpr int TYPE_SIZE = 2; static constexpr int SEQUENCE_SIZE = 2; static constexpr int HEADER_CRC_SIZE = 2; static constexpr int PAYLOAD_CRC_SIZE = 4; static constexpr quint32 MAX_PAYLOAD_LEN = 64 * 1024; + static quint16 crc16ccitt(const quint8 *data, int len); + static quint32 crc32isohdlc(const quint8 *data, int len); + QByteArray _headerBuf; - MsgId _rxMsgId = MsgId::ClinicalData; + Type _rxType = Type::NormalPriority; quint16 _rxSequence = 0; quint32 _rxPayloadLen = 0; QByteArray _rxPayload; Index: lib/Comms/include/CloudConnectServer.h =================================================================== diff -u -rcaca75be9a284ac5f98c078ec47c2e826ac5e980 -rc6a4b63a37f3beb1e8a51702ec3a56a1c32cfe8f --- lib/Comms/include/CloudConnectServer.h (.../CloudConnectServer.h) (revision caca75be9a284ac5f98c078ec47c2e826ac5e980) +++ lib/Comms/include/CloudConnectServer.h (.../CloudConnectServer.h) (revision c6a4b63a37f3beb1e8a51702ec3a56a1c32cfe8f) @@ -31,18 +31,18 @@ explicit CloudConnectServer(QObject *parent = nullptr); bool listen(const QString &socketPath); - bool send(CloudConnectFrame::MsgId msgId, quint16 sequence, const QByteArray &payload = {}); + bool send(CloudConnectFrame::Type type, quint16 sequence, const QByteArray &payload = {}); bool isConnected() const; Q_SIGNALS: /*! * \brief didMessageReceive * \details Emitted when a complete inbound CloudConnectFrame has been parsed. - * \param msgId - message identifier from the frame header + * \param type - message identifier from the frame header * \param sequence - sequence number from the frame header * \param payload - decoded payload bytes, empty for zero-length frames */ - void didMessageReceive(CloudConnectFrame::MsgId msgId, quint16 sequence, QByteArray payload); + void didMessageReceive(CloudConnectFrame::Type type, quint16 sequence, QByteArray payload); /*! * \brief didConnect Index: lib/Comms/src/CloudConnectClient.cpp =================================================================== diff -u -rcaca75be9a284ac5f98c078ec47c2e826ac5e980 -rc6a4b63a37f3beb1e8a51702ec3a56a1c32cfe8f --- lib/Comms/src/CloudConnectClient.cpp (.../CloudConnectClient.cpp) (revision caca75be9a284ac5f98c078ec47c2e826ac5e980) +++ lib/Comms/src/CloudConnectClient.cpp (.../CloudConnectClient.cpp) (revision c6a4b63a37f3beb1e8a51702ec3a56a1c32cfe8f) @@ -16,7 +16,7 @@ #include #include -static void qRegister() { qRegisterMetaType("CloudConnectFrame::MsgId"); } +static void qRegister() { qRegisterMetaType("CloudConnectFrame::Type"); } Q_COREAPP_STARTUP_FUNCTION(qRegister) /*! @@ -77,17 +77,17 @@ /*! * \brief CloudConnectClient::send * \details Builds a CloudConnectFrame and writes it to the socket. - * \param msgId - message identifier for Agent MQTT topic + * \param type - message identifier for Agent MQTT topic * \param sequence - caller-managed sequence number * \param payload - message payload; pass empty for zero-length frames * \return true if written to the socket, false if not connected */ -bool CloudConnectClient::send(CloudConnectFrame::MsgId msgId, quint16 sequence, const QByteArray &payload) +bool CloudConnectClient::send(CloudConnectFrame::Type type, quint16 sequence, const QByteArray &payload) { if (_socket.state() != QLocalSocket::ConnectedState) { return false; } - const QByteArray frame = CloudConnectFrame::build(msgId, sequence, payload); + const QByteArray frame = CloudConnectFrame::build(type, sequence, payload); _socket.write(frame); _socket.flush(); return true; @@ -178,14 +178,14 @@ { _rxBuf.append(_socket.readAll()); - CloudConnectFrame::FeedResult result; + CloudConnectFrame::ReadState state; do { - result = _rxMsg.feed(_rxBuf); - if (result == CloudConnectFrame::FeedResult::Complete) { - emit didMessageReceive(_rxMsg.msgId(), _rxMsg.sequence(), _rxMsg.payload()); + state = _rxMsg.read(_rxBuf); + if (state == CloudConnectFrame::ReadState::Complete) { + emit didMessageReceive(_rxMsg.type(), _rxMsg.sequence(), _rxMsg.payload()); _rxMsg.reset(); } - } while (result == CloudConnectFrame::FeedResult::Complete && !_rxBuf.isEmpty()); + } while (state == CloudConnectFrame::ReadState::Complete && !_rxBuf.isEmpty()); } /*! Index: lib/Comms/src/CloudConnectFrame.cpp =================================================================== diff -u -rcaca75be9a284ac5f98c078ec47c2e826ac5e980 -rc6a4b63a37f3beb1e8a51702ec3a56a1c32cfe8f --- lib/Comms/src/CloudConnectFrame.cpp (.../CloudConnectFrame.cpp) (revision caca75be9a284ac5f98c078ec47c2e826ac5e980) +++ lib/Comms/src/CloudConnectFrame.cpp (.../CloudConnectFrame.cpp) (revision c6a4b63a37f3beb1e8a51702ec3a56a1c32cfe8f) @@ -21,12 +21,12 @@ /*! * \brief CloudConnectFrame::build * \details Builds a complete wire-ready frame with header and optional payload CRCs. - * \param msgId - message identifier for Agent MQTT topic + * \param type - message identifier for Agent MQTT topic * \param sequence - caller-managed sequence number * \param payload - optional payload; pass empty for zero-length frames (e.g. Ack) * \return complete frame ready to write to the transport */ -QByteArray CloudConnectFrame::build(MsgId msgId, quint16 sequence, const QByteArray &payload) +QByteArray CloudConnectFrame::build(Type type, quint16 sequence, const QByteArray &payload) { const quint32 payloadLen = static_cast(payload.size()); @@ -36,9 +36,9 @@ header[0] = SYNC[0]; header[1] = SYNC[1]; - qToBigEndian(static_cast(msgId), header + SYNC_SIZE); - qToBigEndian(sequence, header + SYNC_SIZE + MSGID_SIZE); - qToBigEndian(payloadLen, header + SYNC_SIZE + MSGID_SIZE + SEQUENCE_SIZE); + qToBigEndian(static_cast(type), header + SYNC_SIZE); + qToBigEndian(sequence, header + SYNC_SIZE + TYPE_SIZE); + qToBigEndian(payloadLen, header + SYNC_SIZE + TYPE_SIZE + SEQUENCE_SIZE); const quint16 hCrc = crc16ccitt(header, HEADER_SIZE - HEADER_CRC_SIZE); qToBigEndian(hCrc, header + HEADER_SIZE - HEADER_CRC_SIZE); @@ -59,21 +59,21 @@ // --------------------------------------------------------------------------- /*! - * \brief CloudConnectFrame::feed + * \brief CloudConnectFrame::read * \details Feeds raw bytes into the inbound parser state machine. * Consumed bytes are removed from the front of the buffer. - * On HeaderError or PayloadError the caller may call feed() again + * On HeaderError or PayloadError the caller may call read() again * immediately if the buffer is non-empty. * \param bytes - raw bytes from the transport; modified in-place - * \return FeedResult indicating the parser outcome + * \return ReadState indicating the parser outcome */ -CloudConnectFrame::FeedResult CloudConnectFrame::feed(QByteArray &bytes) +CloudConnectFrame::ReadState CloudConnectFrame::read(QByteArray &bytes) { int pos = 0; - FeedResult result = FeedResult::Incomplete; + ReadState state = ReadState::Incomplete; - // scan for a valid header — skipped when _headerBuf is already populated from a prior feed() call - while (_headerBuf.size() == 0 && bytes.size() - pos >= HEADER_SIZE && result != FeedResult::HeaderError) { + // scan for a valid header — skipped when _headerBuf is already populated from a prior read() call + while (_headerBuf.size() == 0 && bytes.size() - pos >= HEADER_SIZE && state != ReadState::HeaderError) { if (static_cast(bytes.at(pos)) == SYNC[0] && static_cast(bytes.at(pos + 1)) == SYNC[1]) { _headerBuf.append(bytes.constData() + pos, HEADER_SIZE); if (crc16ccitt(reinterpret_cast(_headerBuf.constData()), HEADER_SIZE - HEADER_CRC_SIZE) == @@ -82,8 +82,8 @@ { const quint8 *header = reinterpret_cast(_headerBuf.constData()); int header_pos = SYNC_SIZE; - _rxMsgId = static_cast(qFromBigEndian(header + header_pos)); - header_pos += MSGID_SIZE; + _rxType = static_cast(qFromBigEndian(header + header_pos)); + header_pos += TYPE_SIZE; _rxSequence = qFromBigEndian(header + header_pos); header_pos += SEQUENCE_SIZE; _rxPayloadLen = qFromBigEndian(header + header_pos); @@ -93,7 +93,7 @@ // TODO: log the header CRC failure _headerBuf.clear(); pos += SYNC_SIZE; - result = FeedResult::HeaderError; + state = ReadState::HeaderError; } } else { @@ -102,14 +102,14 @@ } // process payload if a valid header has been accumulated - if (result != FeedResult::HeaderError && _headerBuf.size() == HEADER_SIZE) { + if (state != ReadState::HeaderError && _headerBuf.size() == HEADER_SIZE) { if (_rxPayloadLen == 0) { - result = FeedResult::Complete; + state = ReadState::Complete; } else if (_rxPayloadLen > MAX_PAYLOAD_LEN) { // TODO: log the oversized payload _headerBuf.clear(); - result = FeedResult::PayloadError; + state = ReadState::PayloadError; } else if (bytes.size() - pos >= static_cast(_rxPayloadLen) + PAYLOAD_CRC_SIZE) { const quint8 *payload = reinterpret_cast(bytes.constData() + pos); @@ -118,37 +118,37 @@ { _rxPayload = QByteArray(reinterpret_cast(payload), static_cast(_rxPayloadLen)); pos += static_cast(_rxPayloadLen) + PAYLOAD_CRC_SIZE; - result = FeedResult::Complete; + state = ReadState::Complete; } else { // TODO: log the payload CRC failure _headerBuf.clear(); - result = FeedResult::PayloadError; + state = ReadState::PayloadError; } } } // remove the consumed bytes from the input buffer bytes.remove(0, pos); - return result; + return state; } /*! - * \brief CloudConnectFrame::msgId + * \brief CloudConnectFrame::type * \details Message identifier of the last complete frame. - * Valid only after feed() returns FeedResult::Complete. - * \return MsgId of the last complete frame + * Valid only after read() returns ReadState::Complete. + * \return Type of the last complete frame */ -CloudConnectFrame::MsgId CloudConnectFrame::msgId() const +CloudConnectFrame::Type CloudConnectFrame::type() const { - return _rxMsgId; + return _rxType; } /*! * \brief CloudConnectFrame::sequence * \details Sequence number of the last complete frame. - * Valid only after feed() returns FeedResult::Complete. + * Valid only after read() returns ReadState::Complete. * \return sequence number of the last complete frame */ quint16 CloudConnectFrame::sequence() const @@ -159,7 +159,7 @@ /*! * \brief CloudConnectFrame::payload * \details Payload bytes of the last complete frame. Empty for zero-length frames. - * Valid only after feed() returns FeedResult::Complete. + * Valid only after read() returns ReadState::Complete. * \return payload of the last complete frame */ QByteArray CloudConnectFrame::payload() const @@ -175,7 +175,7 @@ void CloudConnectFrame::reset() { _headerBuf.clear(); - _rxMsgId = MsgId::ClinicalData; + _rxType = Type::NormalPriority; _rxSequence = 0; _rxPayloadLen = 0; _rxPayload.clear(); Index: lib/Comms/src/CloudConnectServer.cpp =================================================================== diff -u -rcaca75be9a284ac5f98c078ec47c2e826ac5e980 -rc6a4b63a37f3beb1e8a51702ec3a56a1c32cfe8f --- lib/Comms/src/CloudConnectServer.cpp (.../CloudConnectServer.cpp) (revision caca75be9a284ac5f98c078ec47c2e826ac5e980) +++ lib/Comms/src/CloudConnectServer.cpp (.../CloudConnectServer.cpp) (revision c6a4b63a37f3beb1e8a51702ec3a56a1c32cfe8f) @@ -45,17 +45,17 @@ /*! * \brief CloudConnectServer::send * \details Builds a CloudConnectFrame and writes it to the connected client. - * \param msgId Message identifier for the frame header. + * \param type Message identifier for the frame header. * \param sequence Caller-managed sequence number. * \param payload Message payload; pass empty for zero-length frames. * \return true if written to the socket, false if no client is connected. */ -bool CloudConnectServer::send(CloudConnectFrame::MsgId msgId, quint16 sequence, const QByteArray &payload) +bool CloudConnectServer::send(CloudConnectFrame::Type type, quint16 sequence, const QByteArray &payload) { if (_client == nullptr || _client->state() != QLocalSocket::ConnectedState) { return false; } - const QByteArray frame = CloudConnectFrame::build(msgId, sequence, payload); + const QByteArray frame = CloudConnectFrame::build(type, sequence, payload); _client->write(frame); _client->flush(); return true; @@ -119,22 +119,22 @@ { _rxBuf.append(_client->readAll()); - CloudConnectFrame::FeedResult result; + CloudConnectFrame::ReadState state; do { - result = _rxMsg.feed(_rxBuf); - switch (result) { - case CloudConnectFrame::FeedResult::Complete: - emit didMessageReceive(_rxMsg.msgId(), _rxMsg.sequence(), _rxMsg.payload()); + state = _rxMsg.read(_rxBuf); + switch (state) { + case CloudConnectFrame::ReadState::Complete: + emit didMessageReceive(_rxMsg.type(), _rxMsg.sequence(), _rxMsg.payload()); _rxMsg.reset(); break; - case CloudConnectFrame::FeedResult::HeaderError: + case CloudConnectFrame::ReadState::HeaderError: qWarning().noquote() << metaObject()->className() << ": header CRC error — frame dropped"; break; - case CloudConnectFrame::FeedResult::PayloadError: + case CloudConnectFrame::ReadState::PayloadError: qWarning().noquote() << metaObject()->className() << ": payload CRC error — frame dropped"; break; - case CloudConnectFrame::FeedResult::Incomplete: + case CloudConnectFrame::ReadState::Incomplete: break; } - } while (result == CloudConnectFrame::FeedResult::Complete && !_rxBuf.isEmpty()); + } while (state == CloudConnectFrame::ReadState::Complete && !_rxBuf.isEmpty()); } Index: scripts/MsgUtils/msgutils/MsgHandlingIni.py =================================================================== diff -u -r64243101dff61b5c1a40b96ef33080236999acf6 -rc6a4b63a37f3beb1e8a51702ec3a56a1c32cfe8f --- scripts/MsgUtils/msgutils/MsgHandlingIni.py (.../MsgHandlingIni.py) (revision 64243101dff61b5c1a40b96ef33080236999acf6) +++ scripts/MsgUtils/msgutils/MsgHandlingIni.py (.../MsgHandlingIni.py) (revision c6a4b63a37f3beb1e8a51702ec3a56a1c32cfe8f) @@ -13,8 +13,11 @@ # Call loadConf() to load message definitions, then loadIni() to merge in existing # action/topic values, then write_ini() to write the result. class MsgHandlingIni(MsgData): - DEFAULT_ACTION = 'drop' - VALID_ACTIONS = ('send_always', 'send_delta', 'drop') + DEFAULT_ACTION = 'Drop' + VALID_ACTIONS = ('SendAlways', 'SendDelta', 'Drop') + DEFAULT_TOPIC = 'NormalPriority' + VALID_TOPICS = ('HighPriority', 'NormalPriority', 'DeviceLogFile', + 'TreatmentLogFile', 'CloudSyncLogFile') # \brief Initializer def __init__(self): @@ -28,7 +31,7 @@ def loadConf(self, filename, clear=True): super().loadConf(filename, clear) for msg in self.data.values(): - msg['action'] = self.DEFAULT_ACTION + msg['action'] = '' msg['topic'] = '' @@ -55,21 +58,27 @@ print(f"WARNING: could not convert section message ID {section} to valid message ID, skipping") continue if msg_id_value not in self.data.keys(): - action = cfg.get(section, 'action', fallback=self.DEFAULT_ACTION).strip() + action = cfg.get(section, 'action', fallback='').strip() topic = cfg.get(section, 'topic', fallback='').strip() - if action != self.DEFAULT_ACTION or topic: + if action or topic: print(f"WARNING: {MsgData.value_to_hex_string(msg_id_value)} no longer in Unhandled.conf, " - f"dropping section with action={action} topic={topic or ''}") + f"dropping section with action={action or ''} topic={topic or ''}") continue - action = cfg.get(section, 'action', fallback=self.DEFAULT_ACTION).strip() - if action not in self.VALID_ACTIONS: + action = cfg.get(section, 'action', fallback='').strip() + if len(action) and action not in self.VALID_ACTIONS: print(f"WARNING: {MsgData.value_to_hex_string(msg_id_value)} has invalid action \"{action}\", " f"resetting to {self.DEFAULT_ACTION}") - action = self.DEFAULT_ACTION + action = '' + topic = cfg.get(section, 'topic', fallback='').strip() + if len(topic) and topic not in self.VALID_TOPICS: + print(f"WARNING: {MsgData.value_to_hex_string(msg_id_value)} has invalid topic \"{topic}\", " + f"resetting to {self.DEFAULT_TOPIC}") + topic = '' + self.data[msg_id_value]['action'] = action - self.data[msg_id_value]['topic'] = cfg.get(section, 'topic', fallback='').strip() + self.data[msg_id_value]['topic'] = topic # \brief Write the loaded message data to the INI file. Index: scripts/MsgUtils/msgutils/templates/MsgHandlingIni.jinja =================================================================== diff -u -r64243101dff61b5c1a40b96ef33080236999acf6 -rc6a4b63a37f3beb1e8a51702ec3a56a1c32cfe8f --- scripts/MsgUtils/msgutils/templates/MsgHandlingIni.jinja (.../MsgHandlingIni.jinja) (revision 64243101dff61b5c1a40b96ef33080236999acf6) +++ scripts/MsgUtils/msgutils/templates/MsgHandlingIni.jinja (.../MsgHandlingIni.jinja) (revision c6a4b63a37f3beb1e8a51702ec3a56a1c32cfe8f) @@ -1,7 +1,25 @@ -{%- for msg in msg_ini.data.values() -%} +; Group format: +; [ ] +; msg_id = +{%- set config = namespace(actions = []) %} +{%- for action in msg_ini.VALID_ACTIONS %} +{%- set config.actions = config.actions + [ action ] %} +{%- endfor %} +; action = <{{ config.actions | join("|") }}> (default: {{ msg_ini.DEFAULT_ACTION }}) +{%- set config = namespace(topics = []) %} +{%- for topic in msg_ini.VALID_TOPICS %} +{%- set config.topics = config.topics + [ topic ] %} +{%- endfor %} +; topic = <{{ config.topics | join("|") }}> (default: {{ msg_ini.DEFAULT_TOPIC }}) + +{% for msg in msg_ini.data.values() -%} [{{ msg.msg_id_hex_string }}] msg_id = {{ msg.msg_id }} +{%- if msg.action | length %} action = {{ msg.action }} +{%- endif %} +{%- if msg.topic | length %} topic = {{ msg.topic }} +{%- endif %} {% endfor -%} Index: tools/AgentSim/AgentSimController.cpp =================================================================== diff -u -rcaca75be9a284ac5f98c078ec47c2e826ac5e980 -rc6a4b63a37f3beb1e8a51702ec3a56a1c32cfe8f --- tools/AgentSim/AgentSimController.cpp (.../AgentSimController.cpp) (revision caca75be9a284ac5f98c078ec47c2e826ac5e980) +++ tools/AgentSim/AgentSimController.cpp (.../AgentSimController.cpp) (revision c6a4b63a37f3beb1e8a51702ec3a56a1c32cfe8f) @@ -91,49 +91,49 @@ { _rxBuf.append(_client->readAll()); - CloudConnectFrame::FeedResult result; + CloudConnectFrame::ReadState state; do { - result = _rxMsg.feed(_rxBuf); - switch (result) { - case CloudConnectFrame::FeedResult::Complete: + state = _rxMsg.read(_rxBuf); + switch (state) { + case CloudConnectFrame::ReadState::Complete: handleMessage(_rxMsg); _rxMsg.reset(); break; - case CloudConnectFrame::FeedResult::HeaderError: + case CloudConnectFrame::ReadState::HeaderError: qWarning().noquote() << "AgentSim: header CRC error — frame dropped"; break; - case CloudConnectFrame::FeedResult::PayloadError: + case CloudConnectFrame::ReadState::PayloadError: qWarning().noquote() << "AgentSim: payload CRC error — frame dropped"; break; - case CloudConnectFrame::FeedResult::Incomplete: + case CloudConnectFrame::ReadState::Incomplete: break; } - } while (result == CloudConnectFrame::FeedResult::Complete && !_rxBuf.isEmpty()); + } while (state == CloudConnectFrame::ReadState::Complete && !_rxBuf.isEmpty()); } /*! * \brief AgentSimController::handleMessage * \details Decodes a received frame and prints its typed body as JSON, generically - * via the protobuf descriptor pool (msgId -> message name -> dynamic parse). + * via the protobuf descriptor pool (type -> message name -> dynamic parse). * \param msg The complete CloudConnectFrame frame. */ void AgentSimController::handleMessage(const CloudConnectFrame &msg) { const QByteArray payload = msg.payload(); - logMessage(msg.msgId(), msg.sequence(), payload); + logMessage(msg.type(), msg.sequence(), payload); - // Read the Header (field 1, shared by every typed message) to learn the msgId. + // Read the Header (field 1, shared by every typed message) to learn the type. leahi::messages::Envelope envelope; if (!envelope.ParseFromArray(payload.constData(), payload.size())) { qWarning().noquote() << "AgentSim: could not parse Envelope header — frame dropped"; return; } const leahi::messages::Header &header = envelope.header(); - // Identify the concrete message type from the msgId and decode it generically. + // Identify the concrete message type from the type and decode it generically. const std::string &typeName = leahi::msgIdToProtoName(static_cast(header.msgid())); if (typeName.empty()) { - qWarning().noquote() << QString("AgentSim: unknown msgId=0x%1 — cannot decode typed body") + qWarning().noquote() << QString("AgentSim: unknown type=0x%1 — cannot decode typed body") .arg(header.msgid(), 4, 16, QChar('0')); return; } @@ -158,25 +158,25 @@ opts.always_print_primitive_fields = true; google::protobuf::util::MessageToJsonString(*body, &json, opts); - // protobuf renders msgId as a decimal integer; rewrite it as 0x + 4-digit hex. + // protobuf renders type as a decimal integer; rewrite it as 0x + 4-digit hex. QString jsonStr = QString::fromStdString(json); - jsonStr.replace(QString("\"msgId\": %1").arg(header.msgid()), - QString("\"msgId\": \"0x%1\"").arg(header.msgid(), 4, 16, QChar('0'))); + jsonStr.replace(QString("\"type\": %1").arg(header.msgid()), + QString("\"type\": \"0x%1\"").arg(header.msgid(), 4, 16, QChar('0'))); qDebug().noquote() << QString::fromStdString(typeName) << ":" << Qt::endl << jsonStr; } /*! * \brief AgentSimController::logMessage * \details Logs the message identifier, sequence number, and payload length. - * \param msgId Message identifier from the parsed frame. + * \param type Message identifier from the parsed frame. * \param sequence Sequence number from the parsed frame. * \param payload Payload bytes of the parsed frame. */ -void AgentSimController::logMessage(CloudConnectFrame::MsgId msgId, quint16 sequence, const QByteArray &payload) +void AgentSimController::logMessage(CloudConnectFrame::Type type, quint16 sequence, const QByteArray &payload) { - qInfo().noquote() << QString("AgentSim: rx MsgId=0x%1 seq=%2 payloadLen=%3") - .arg(static_cast(msgId), 4, 16, QChar('0')) + qInfo().noquote() << QString("AgentSim: rx Type=0x%1 seq=%2 payloadLen=%3") + .arg(static_cast(type), 4, 16, QChar('0')) .arg(sequence) .arg(payload.size()); } Index: tools/AgentSim/AgentSimController.h =================================================================== diff -u -rcaca75be9a284ac5f98c078ec47c2e826ac5e980 -rc6a4b63a37f3beb1e8a51702ec3a56a1c32cfe8f --- tools/AgentSim/AgentSimController.h (.../AgentSimController.h) (revision caca75be9a284ac5f98c078ec47c2e826ac5e980) +++ tools/AgentSim/AgentSimController.h (.../AgentSimController.h) (revision c6a4b63a37f3beb1e8a51702ec3a56a1c32cfe8f) @@ -40,7 +40,7 @@ private: void handleMessage(const CloudConnectFrame &msg); - void logMessage(CloudConnectFrame::MsgId msgId, quint16 sequence, const QByteArray &payload); + void logMessage(CloudConnectFrame::Type type, quint16 sequence, const QByteArray &payload); QSettings _settings; QLocalServer _server;