@@ -965,7 +965,7 @@ RDMResponse *ResponderHelper::GetParamDescription(
965965 uint32_t min_value,
966966 uint32_t default_value,
967967 uint32_t max_value,
968- string description,
968+ const string description,
969969 uint8_t queued_message_count) {
970970 PACK (
971971 struct parameter_description_s {
@@ -1019,7 +1019,7 @@ RDMResponse *ResponderHelper::GetASCIIParamDescription(
10191019 const RDMRequest *request,
10201020 uint16_t pid,
10211021 rdm_command_class command_class,
1022- string description,
1022+ const string description,
10231023 uint8_t queued_message_count) {
10241024 return GetParamDescription (
10251025 request,
@@ -1041,7 +1041,7 @@ RDMResponse *ResponderHelper::GetBitFieldParamDescription(
10411041 uint16_t pid,
10421042 uint8_t pdl_size,
10431043 rdm_command_class command_class,
1044- string description,
1044+ const string description,
10451045 uint8_t queued_message_count) {
10461046 return GetParamDescription (
10471047 request,
@@ -1110,6 +1110,65 @@ RDMResponse *ResponderHelper::SetTestData(
11101110 queued_message_count);
11111111}
11121112
1113+ /* *
1114+ * Get NSC comms status
1115+ */
1116+ RDMResponse *ResponderHelper::GetCommsStatusNSC (
1117+ const RDMRequest *request,
1118+ const NSCStatus *status,
1119+ uint8_t queued_message_count) {
1120+ if (request->ParamDataSize ()) {
1121+ return NackWithReason (request, NR_FORMAT_ERROR, queued_message_count);
1122+ }
1123+
1124+ PACK (
1125+ struct comms_status_nsc_s {
1126+ uint8_t supported_fields;
1127+ uint32_t additive_checksum;
1128+ uint32_t packet_count;
1129+ uint16_t most_recent_slot_count;
1130+ uint16_t min_slot_count;
1131+ uint16_t max_slot_count;
1132+ uint32_t packet_error_count;
1133+ });
1134+ STATIC_ASSERT (sizeof (comms_status_nsc_s) == 19 );
1135+
1136+ struct comms_status_nsc_s comms_status_nsc;
1137+ comms_status_nsc.supported_fields = status->SupportedFieldsBitMask ();
1138+ comms_status_nsc.additive_checksum = HostToNetwork (
1139+ status->AdditiveChecksum ());
1140+ comms_status_nsc.packet_count = HostToNetwork (status->PacketCount ());
1141+ comms_status_nsc.most_recent_slot_count = HostToNetwork (
1142+ status->MostRecentSlotCount ());
1143+ comms_status_nsc.min_slot_count = HostToNetwork (status->MinSlotCount ());
1144+ comms_status_nsc.max_slot_count = HostToNetwork (status->MaxSlotCount ());
1145+ comms_status_nsc.packet_error_count = HostToNetwork (
1146+ status->PacketErrorCount ());
1147+ return GetResponseFromData (
1148+ request,
1149+ reinterpret_cast <const uint8_t *>(&comms_status_nsc),
1150+ sizeof (comms_status_nsc),
1151+ RDM_ACK,
1152+ queued_message_count);
1153+ }
1154+
1155+ /* *
1156+ * Set NSC comms status
1157+ */
1158+ RDMResponse *ResponderHelper::SetCommsStatusNSC (
1159+ const RDMRequest *request,
1160+ NSCStatus *status,
1161+ uint8_t queued_message_count) {
1162+ if (request->ParamDataSize ()) {
1163+ return NackWithReason (request, NR_FORMAT_ERROR, queued_message_count);
1164+ }
1165+
1166+ // Reset the counts...
1167+ status->Reset ();
1168+
1169+ return GetResponseFromData (request, NULL , queued_message_count);
1170+ }
1171+
11131172RDMResponse *ResponderHelper::GetListTags (
11141173 const RDMRequest *request,
11151174 const TagSet *tag_set,
@@ -1187,6 +1246,63 @@ RDMResponse *ResponderHelper::SetClearTags(
11871246 return ResponderHelper::EmptySetResponse (request, queued_message_count);
11881247}
11891248
1249+ RDMResponse *ResponderHelper::GetMetadataParameterVersion (
1250+ const RDMRequest *request,
1251+ uint16_t pid,
1252+ uint16_t version,
1253+ uint8_t queued_message_count) {
1254+ PACK (
1255+ struct metadata_parameter_version_s {
1256+ uint16_t pid;
1257+ uint16_t version;
1258+ });
1259+ STATIC_ASSERT (sizeof (metadata_parameter_version_s) == 4 );
1260+
1261+ struct metadata_parameter_version_s metadata_param_version;
1262+ metadata_param_version.pid = HostToNetwork (pid);
1263+ metadata_param_version.version = HostToNetwork (version);
1264+
1265+ return GetResponseFromData (
1266+ request,
1267+ reinterpret_cast <uint8_t *>(&metadata_param_version),
1268+ sizeof (metadata_parameter_version_s),
1269+ RDM_ACK,
1270+ queued_message_count);
1271+ }
1272+
1273+ RDMResponse *ResponderHelper::GetMetadataJSON (
1274+ const RDMRequest *request,
1275+ uint16_t pid,
1276+ const string json,
1277+ uint8_t queued_message_count) {
1278+ PACK (
1279+ struct metadata_json_s {
1280+ uint16_t pid;
1281+ // TODO(Peter): This should effectively be unlimited...?
1282+ char json[(UINT8_MAX - 2 )];
1283+ });
1284+ STATIC_ASSERT (sizeof (metadata_json_s) == UINT8_MAX);
1285+
1286+ struct metadata_json_s metadata_json;
1287+ metadata_json.pid = HostToNetwork (pid);
1288+
1289+ size_t str_len = min (json.size (),
1290+ sizeof (metadata_json.json ));
1291+ strncpy (metadata_json.json , json.c_str (), str_len);
1292+
1293+ unsigned int param_data_size = (
1294+ sizeof (metadata_json) -
1295+ sizeof (metadata_json.json ) + str_len);
1296+
1297+ return GetResponseFromData (
1298+ request,
1299+ reinterpret_cast <uint8_t *>(&metadata_json),
1300+ param_data_size,
1301+ RDM_ACK,
1302+ queued_message_count);
1303+ }
1304+
1305+
11901306/* *
11911307 * @brief Handle a request that returns a string
11921308 * @note this truncates the string to max_length
0 commit comments