Add diagnostic bit support to Gateway Modbus
- Introduced new enum value `kShortDiagnosticBit` to `GatewayModbusGeneratedKind`. - Enhanced `GatewayModbusPoint` and `GatewayModbusPointBinding` structures to include diagnostic snapshot, boolean key, and device type. - Added new diagnostic bit specifications and updated the corresponding arrays for generated discrete inputs and holding registers. - Implemented `addGeneratedDiagnosticPoint` function to handle the creation of diagnostic points. - Updated `rebuildMap` method to include generated diagnostic points during the map rebuilding process. Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
@@ -522,6 +522,91 @@ bool gateway_bacnet_stack_upsert_object(
|
||||
}
|
||||
}
|
||||
|
||||
bool gateway_bacnet_stack_set_object_state(
|
||||
gateway_bacnet_object_kind_t object_kind,
|
||||
uint32_t object_instance,
|
||||
bool out_of_service,
|
||||
uint32_t reliability)
|
||||
{
|
||||
BACNET_RELIABILITY object_reliability = (BACNET_RELIABILITY)reliability;
|
||||
|
||||
switch (object_kind) {
|
||||
case GW_BACNET_OBJECT_ANALOG_VALUE:
|
||||
set_analog_value_state(object_instance, out_of_service, object_reliability);
|
||||
return true;
|
||||
case GW_BACNET_OBJECT_ANALOG_OUTPUT:
|
||||
set_analog_output_state(object_instance, out_of_service, object_reliability);
|
||||
return true;
|
||||
case GW_BACNET_OBJECT_BINARY_VALUE:
|
||||
set_binary_value_state(object_instance, out_of_service, object_reliability);
|
||||
return true;
|
||||
case GW_BACNET_OBJECT_BINARY_OUTPUT:
|
||||
set_binary_output_state(object_instance, out_of_service, object_reliability);
|
||||
return true;
|
||||
case GW_BACNET_OBJECT_MULTI_STATE_VALUE:
|
||||
set_multistate_value_state(object_instance, out_of_service, object_reliability);
|
||||
return true;
|
||||
case GW_BACNET_OBJECT_ANALOG_INPUT:
|
||||
set_analog_input_state(object_instance, out_of_service, object_reliability);
|
||||
return true;
|
||||
case GW_BACNET_OBJECT_BINARY_INPUT:
|
||||
set_binary_input_state(object_instance, out_of_service, object_reliability);
|
||||
return true;
|
||||
case GW_BACNET_OBJECT_MULTI_STATE_INPUT:
|
||||
set_multistate_input_state(object_instance, out_of_service, object_reliability);
|
||||
return true;
|
||||
case GW_BACNET_OBJECT_MULTI_STATE_OUTPUT:
|
||||
set_multistate_output_state(object_instance, out_of_service, object_reliability);
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool gateway_bacnet_stack_set_present_value(
|
||||
gateway_bacnet_object_kind_t object_kind,
|
||||
uint32_t object_instance,
|
||||
const gateway_bacnet_write_value_t* value)
|
||||
{
|
||||
if (!value) {
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (object_kind) {
|
||||
case GW_BACNET_OBJECT_ANALOG_VALUE:
|
||||
return Analog_Value_Present_Value_Set(
|
||||
object_instance, (float)value->real_value, BACNET_NO_PRIORITY);
|
||||
case GW_BACNET_OBJECT_ANALOG_OUTPUT:
|
||||
return Analog_Output_Present_Value_Set(
|
||||
object_instance, (float)value->real_value, BACNET_MAX_PRIORITY);
|
||||
case GW_BACNET_OBJECT_ANALOG_INPUT:
|
||||
Analog_Input_Present_Value_Set(object_instance, (float)value->real_value);
|
||||
return true;
|
||||
case GW_BACNET_OBJECT_BINARY_VALUE:
|
||||
return Binary_Value_Present_Value_Set(
|
||||
object_instance, value->boolean_value ? BINARY_ACTIVE : BINARY_INACTIVE);
|
||||
case GW_BACNET_OBJECT_BINARY_OUTPUT:
|
||||
return Binary_Output_Present_Value_Set(
|
||||
object_instance, value->boolean_value ? BINARY_ACTIVE : BINARY_INACTIVE,
|
||||
BACNET_MAX_PRIORITY);
|
||||
case GW_BACNET_OBJECT_BINARY_INPUT:
|
||||
return Binary_Input_Present_Value_Set(
|
||||
object_instance, value->boolean_value ? BINARY_ACTIVE : BINARY_INACTIVE);
|
||||
case GW_BACNET_OBJECT_MULTI_STATE_VALUE:
|
||||
return Multistate_Value_Present_Value_Set(
|
||||
object_instance, value->unsigned_value == 0 ? 1 : value->unsigned_value);
|
||||
case GW_BACNET_OBJECT_MULTI_STATE_OUTPUT:
|
||||
return Multistate_Output_Present_Value_Set(
|
||||
object_instance, value->unsigned_value == 0 ? 1 : value->unsigned_value,
|
||||
BACNET_MAX_PRIORITY);
|
||||
case GW_BACNET_OBJECT_MULTI_STATE_INPUT:
|
||||
return Multistate_Input_Present_Value_Set(
|
||||
object_instance, value->unsigned_value == 0 ? 1 : value->unsigned_value);
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool gateway_bacnet_stack_clear_objects(void)
|
||||
{
|
||||
return clear_analog_value_objects() &&
|
||||
|
||||
Reference in New Issue
Block a user