diff --git a/bacnet-stack/bactext.c b/bacnet-stack/bactext.c new file mode 100644 index 00000000..7c207bc3 --- /dev/null +++ b/bacnet-stack/bactext.c @@ -0,0 +1,418 @@ +/*####COPYRIGHTBEGIN#### + ------------------------------------------- + Copyright (C) 2005 Steve Karg + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to: + The Free Software Foundation, Inc. + 59 Temple Place - Suite 330 + Boston, MA 02111-1307, USA. + + As a special exception, if other files instantiate templates or + use macros or inline functions from this file, or you compile + this file and link it with other works to produce a work based + on this file, this file does not by itself cause the resulting + work to be covered by the GNU General Public License. However + the source code for this file must still be made available in + accordance with section (3) of the GNU General Public License. + + This exception does not invalidate any other reasons why a work + based on this file might be covered by the GNU General Public + License. + ------------------------------------------- +####COPYRIGHTEND####*/ + +#include "indtext.h" +#include "bacenum.h" + +static const char *bacapp_unknown_str = "unknown"; +static const char *bacapp_unknown_service_str = "unknown service"; +static const char *ASHRAE_Reserved_Fmt = "(%d) Reserved for Use by ASHRAE"; +static const char *Vendor_Proprietary_Fmt = "(%d) Vendor Proprietary Value"; + +const INDTEXT_DATA bacnet_confirmed_service_names[] = { + { SERVICE_CONFIRMED_ACKNOWLEDGE_ALARM, "Acknowledge-Alarm" }, + { SERVICE_CONFIRMED_COV_NOTIFICATION, "COV-Notification" }, + { SERVICE_CONFIRMED_EVENT_NOTIFICATION, "Event-Notification" }, + { SERVICE_CONFIRMED_GET_ALARM_SUMMARY, "Get-Alarm-Summary" }, + { SERVICE_CONFIRMED_GET_ENROLLMENT_SUMMARY, "Get-Enrollment-Summary" }, + { SERVICE_CONFIRMED_SUBSCRIBE_COV, "Subscribe-COV" }, + { SERVICE_CONFIRMED_ATOMIC_READ_FILE, "Atomic-Read-File" }, + { SERVICE_CONFIRMED_ATOMIC_WRITE_FILE, "Atomic-Write-File" }, + { SERVICE_CONFIRMED_ADD_LIST_ELEMENT, "Add-List-Element" }, + { SERVICE_CONFIRMED_REMOVE_LIST_ELEMENT, "Remove-List-Element" }, + { SERVICE_CONFIRMED_CREATE_OBJECT, "Create-Object" }, + { SERVICE_CONFIRMED_DELETE_OBJECT, "Delete-Object" }, + { SERVICE_CONFIRMED_READ_PROPERTY, "Read-Property" }, + { SERVICE_CONFIRMED_READ_PROPERTY_CONDITIONAL, "Read-Property-Conditional" }, + { SERVICE_CONFIRMED_READ_PROPERTY_MULTIPLE, "Read-Property-Multiple" }, + { SERVICE_CONFIRMED_WRITE_PROPERTY, "Write-Property" }, + { SERVICE_CONFIRMED_WRITE_PROPERTY_MULTIPLE, "Write-Property-Multiple" }, + { SERVICE_CONFIRMED_DEVICE_COMMUNICATION_CONTROL, "Device-Communication-Control" }, + { SERVICE_CONFIRMED_PRIVATE_TRANSFER, "Private-Transfer" }, + { SERVICE_CONFIRMED_TEXT_MESSAGE, "Text-Message" }, + { SERVICE_CONFIRMED_REINITIALIZE_DEVICE, "Reinitialize-Device" }, + { SERVICE_CONFIRMED_VT_OPEN, "VT-Open" }, + { SERVICE_CONFIRMED_VT_CLOSE, "VT-Close" }, + { SERVICE_CONFIRMED_VT_DATA, "VT-Data" }, + { SERVICE_CONFIRMED_AUTHENTICATE, "Authenticate" }, + { SERVICE_CONFIRMED_REQUEST_KEY, "Request-Key" }, + { SERVICE_CONFIRMED_READ_RANGE, "Read-Range" }, + { SERVICE_CONFIRMED_LIFE_SAFETY_OPERATION, "Life-Safety_Operation" }, + { SERVICE_CONFIRMED_SUBSCRIBE_COV_PROPERTY, "Subscribe-COV-Property" }, + { SERVICE_CONFIRMED_GET_EVENT_INFORMATION, "Get-Event-Information" }, + { 0, NULL } +}; + +const INDTEXT_DATA bacnet_unconfirmed_service_names[] = { + { SERVICE_UNCONFIRMED_I_AM, "I-Am" }, + { SERVICE_UNCONFIRMED_I_HAVE, "I-Have" }, + { SERVICE_UNCONFIRMED_COV_NOTIFICATION, "COV-Notification" }, + { SERVICE_UNCONFIRMED_EVENT_NOTIFICATION, "Event-Notification" }, + { SERVICE_UNCONFIRMED_PRIVATE_TRANSFER, "Private-Transfer" }, + { SERVICE_UNCONFIRMED_TEXT_MESSAGE, "Text-Message" }, + { SERVICE_UNCONFIRMED_TIME_SYNCHRONIZATION, "Time-Synchronization" }, + { SERVICE_UNCONFIRMED_WHO_HAS, "Who-Has" }, + { SERVICE_UNCONFIRMED_WHO_IS, "Who-Is" }, + { SERVICE_UNCONFIRMED_UTC_TIME_SYNCHRONIZATION, "UTC-Time-Synchronization" }, + { 0, NULL } +}; + +const INDTEXT_DATA bacnet_application_tag_names[] = { + { BACNET_APPLICATION_TAG_NULL, "Null" }, + { BACNET_APPLICATION_TAG_BOOLEAN, "Boolean" }, + { BACNET_APPLICATION_TAG_UNSIGNED_INT, "Unsigned Int" }, + { BACNET_APPLICATION_TAG_SIGNED_INT, "Signed Int" }, + { BACNET_APPLICATION_TAG_REAL, "Real" }, + { BACNET_APPLICATION_TAG_DOUBLE, "Double" }, + { BACNET_APPLICATION_TAG_OCTET_STRING, "Octet String" }, + { BACNET_APPLICATION_TAG_CHARACTER_STRING, "Character String" }, + { BACNET_APPLICATION_TAG_BIT_STRING, "Bit String" }, + { BACNET_APPLICATION_TAG_ENUMERATED, "Enumerated" }, + { BACNET_APPLICATION_TAG_DATE, "Date" }, + { BACNET_APPLICATION_TAG_TIME, "Time" }, + { BACNET_APPLICATION_TAG_OBJECT_ID, "Object ID" }, + { BACNET_APPLICATION_TAG_RESERVED1, "Reserved 1" }, + { BACNET_APPLICATION_TAG_RESERVED2, "Reserved 2" }, + { BACNET_APPLICATION_TAG_RESERVED3, "Reserved 3" }, + { 0, NULL } +}; + +const INDTEXT_DATA bacnet_object_names[] = { + { OBJECT_ANALOG_INPUT, "Analog Input" }, + { OBJECT_ANALOG_OUTPUT, "Analog Output" }, + { OBJECT_ANALOG_VALUE, "Analog Value" }, + { OBJECT_BINARY_INPUT, "Binary Input" }, + { OBJECT_BINARY_OUTPUT, "Binary Output" }, + { OBJECT_BINARY_VALUE, "Binary Value" }, + { OBJECT_CALENDAR, "Calendar" }, + { OBJECT_COMMAND, "Command" }, + { OBJECT_DEVICE, "Device" }, + { OBJECT_EVENT_ENROLLMENT, "Event Enrollment" }, + { OBJECT_FILE, "File" }, + { OBJECT_GROUP, "Group" }, + { OBJECT_LOOP, "Loop" }, + { OBJECT_MULTI_STATE_INPUT, "Multi-State Input" }, + { OBJECT_MULTI_STATE_OUTPUT, "Multi-State Output" }, + { OBJECT_NOTIFICATION_CLASS, "Notification Class" }, + { OBJECT_PROGRAM, "Program" }, + { OBJECT_SCHEDULE, "Schedule" }, + { OBJECT_AVERAGING, "Averaging" }, + { OBJECT_MULTI_STATE_VALUE, "Multi-State Value" }, + { OBJECT_TRENDLOG, "Trendlog" }, + { OBJECT_LIFE_SAFETY_POINT, "Life Safety Point" }, + { OBJECT_LIFE_SAFETY_ZONE, "Life Safety Zone" }, + { OBJECT_ACCUMULATOR, "Accumulator" }, + { OBJECT_PULSE_CONVERTER, "Pulse-Converter" }, + { 0, NULL } +}; + +const INDTEXT_DATA bacnet_property_names[] = { +/* FIXME: use the enumerations from bacenum.h */ + { 0, "acked-transitions"}, + { 1, "ack-required"}, + { 2, "action"}, + { 3, "action-text"}, + { 4, "active-text"}, + { 5, "active-vt-sessions"}, + { 6, "alarm-value"}, + { 7, "alarm-values"}, + { 8, "all"}, + { 9, "all-writes-successful"}, + { 10, "apdu-segment-timeout"}, + { 11, "apdu-timeout"}, + { 12, "application-software-version"}, + { 13, "archive"}, + { 14, "bias"}, + { 15, "change-of-state-count"}, + { 16, "change-of-state-time"}, + { 17, "notification-class"}, + { 18, "(deleted in 135-2001)"}, + { 19, "controlled-variable-reference"}, + { 20, "controlled-variable-units"}, + { 21, "controlled-variable-value"}, + { 22, "COV-increment"}, + { 23, "datelist"}, + { 24, "daylight-savings-status"}, + { 25, "deadband"}, + { 26, "derivative-constant"}, + { 27, "derivative-constant-units"}, + { 28, "description"}, + { 29, "description-of-halt"}, + { 30, "device-address-binding"}, + { 31, "device-type"}, + { 32, "effective-period"}, + { 33, "elapsed-active-time"}, + { 34, "error-limit"}, + { 35, "event-enable"}, + { 36, "event-state"}, + { 37, "event-type"}, + { 38, "exception-schedule"}, + { 39, "fault-values"}, + { 40, "feedback-value"}, + { 41, "file-access-method"}, + { 42, "file-size"}, + { 43, "file-type"}, + { 44, "firmware-version"}, + { 45, "high-limit"}, + { 46, "inactive-text"}, + { 47, "in-process"}, + { 48, "instance-of"}, + { 49, "integral-constant"}, + { 50, "integral-constant-units"}, + { 51, "issue-confirmednotifications"}, + { 52, "limit-enable"}, + { 53, "list-of-group-members"}, + { 54, "list-of-object-property-references"}, + { 55, "list-of-session-keys"}, + { 56, "local-date"}, + { 57, "local-time"}, + { 58, "location"}, + { 59, "low-limit"}, + { 60, "manipulated-variable-reference"}, + { 61, "maximum-output"}, + { 62, "max-apdu-length-accepted"}, + { 63, "max-info-frames"}, + { 64, "max-master"}, + { 65, "max-pres-value"}, + { 66, "minimum-off-time"}, + { 67, "minimum-on-time"}, + { 68, "minimum-output"}, + { 69, "min-pres-value"}, + { 70, "model-name"}, + { 71, "modification-date"}, + { 72, "notify-type"}, + { 73, "number-of-APDU-retries"}, + { 74, "number-of-states"}, + { 75, "object-identifier"}, + { 76, "object-list"}, + { 77, "object-name"}, + { 78, "object-property-reference"}, + { 79, "object-type"}, + { 80, "optional"}, + { 81, "out-of-service"}, + { 82, "output-units"}, + { 83, "event-parameters"}, + { 84, "polarity"}, + { 85, "present-value"}, + { 86, "priority"}, + { 87, "priority-array"}, + { 88, "priority-for-writing"}, + { 89, "process-identifier"}, + { 90, "program-change"}, + { 91, "program-location"}, + { 92, "program-state"}, + { 93, "proportional-constant"}, + { 94, "proportional-constant-units"}, + { 95, "protocol-conformance-class"}, + { 96, "protocol-object-types-supported"}, + { 97, "protocol-services-supported"}, + { 98, "protocol-version"}, + { 99, "read-only"}, + { 100, "reason-for-halt"}, + { 101, "recipient"}, + { 102, "recipient-list"}, + { 103, "reliability"}, + { 104, "relinquish-default"}, + { 105, "required"}, + { 106, "resolution"}, + { 107, "segmentation-supported"}, + { 108, "setpoint"}, + { 109, "setpoint-reference"}, + { 110, "state-text"}, + { 111, "status-flags"}, + { 112, "system-status"}, + { 113, "time-delay"}, + { 114, "time-of-active-time-reset"}, + { 115, "time-of-state-count-reset"}, + { 116, "time-synchronization-recipients"}, + { 117, "units"}, + { 118, "update-interval"}, + { 119, "utc-offset"}, + { 120, "vendor-identifier"}, + { 121, "vendor-name"}, + { 122, "vt-classes-supported"}, + { 123, "weekly-schedule"}, + { 124, "attempted-samples"}, + { 125, "average-value"}, + { 126, "buffer-size"}, + { 127, "client-cov-increment"}, + { 128, "cov-resubscription-interval"}, + { 129, "current-notify-time"}, + { 130, "event-time-stamps"}, + { 131, "log-buffer"}, + { 132, "log-device-object-property"}, + { 133, "log-enable"}, + { 134, "log-interval"}, + { 135, "maximum-value"}, + { 136, "minimum-value"}, + { 137, "notification-threshold"}, + { 138, "previous-notify-time"}, + { 139, "protocol-revision"}, + { 140, "records-since-notification"}, + { 141, "record-count"}, + { 142, "start-time"}, + { 143, "stop-time"}, + { 144, "stop-when-full"}, + { 145, "total-record-count"}, + { 146, "valid-samples"}, + { 147, "window-interval"}, + { 148, "window-samples"}, + { 149, "maximum-value-timestamp"}, + { 150, "minimum-value-timestamp"}, + { 151, "variance-value"}, + { 152, "active-cov-subscriptions"}, + { 153, "backup-failure-timeout"}, + { 154, "configuration-files"}, + { 155, "database-revision"}, + { 156, "direct-reading"}, + { 157, "last-restore-time"}, + { 158, "maintenance-required"}, + { 159, "member-of"}, + { 160, "mode"}, + { 161, "operation-expected"}, + { 162, "setting"}, + { 163, "silenced"}, + { 164, "tracking-value"}, + { 165, "zone-members"}, + { 166, "life-safety-alarm-values"}, + { 167, "max-segments-accepted"}, + { 168, "profile-name"}, + { 0, NULL } +}; + +const INDTEXT_DATA bacnet_engineering_unit_names[] = { +/* FIXME: add the first 144 names...*/ +/* FIXME: use the enumerations from bacenum.h */ +{145,"milliohms"}, +{146,"megawatt-hours"}, +{147,"kilo-btus"}, +{148,"mega-btus"}, +{149,"kilojoules-per-kilogram-dry-air"}, +{150,"megajoules-per-kilogram-dry-air"}, +{151,"kilojoules-per-degree-Kelvin"}, +{152,"megajoules-per-degree-Kelvin"}, +{153,"newton"}, +{154,"grams-per-second"}, +{155,"grams-per-minute"}, +{156,"tons-per-hour"}, +{157,"kilo-btus-per-hour"}, +{158,"hundredths-seconds"}, +{159,"milliseconds"}, +{160,"newton-meters"}, +{161,"millimeters-per-second"}, +{162,"millimeters-per-minute"}, +{163,"meters-per-minute"}, +{164,"meters-per-hour"}, +{165,"cubic-meters-per-minute"}, +{166,"meters-per-second-per-second"}, +{167,"amperes-per-meter"}, +{168,"amperes-per-square-meter"}, +{169,"ampere-square-meters"}, +{170,"farads"}, +{171,"henrys"}, +{172,"ohm-meters"}, +{173,"siemens"}, +{174,"siemens-per-meter"}, +{175,"teslas"}, +{176,"volts-per-degree-Kelvin"}, +{177,"volts-per-meter"}, +{178,"webers"}, +{179,"candelas"}, +{180,"candelas-per-square-meter"}, +{181,"degrees-Kelvin-per-hour"}, +{182,"degrees-Kelvin-per-minute"}, +{183,"joule-seconds"}, +{184,"radians-per-second"}, +{185,"square-meters-per-Newton"}, +{186,"kilograms-per-cubic-meter"}, +{187,"newton-seconds"}, +{188,"newtons-per-meter"}, +{189,"watts-per-meter-per-degree-Kelvin"}, +{0,NULL} +/* Enumerated values 0-255 are reserved for definition by ASHRAE. + Enumerated values 256-65535 may be used by others subject to + the procedures and constraints described in Clause 23. */ + }; + +#if 0 +/* FIXME: add the value */ +/* FIXME: use the enumerations from bacenum.h */ +INDTEXT_DATA bacnet_reject_reason_names[] = { + "Other", + "Buffer Overflow", + "Inconsistent Parameters", + "Invalid Parameter Data Type", + "Invalid Tag", + "Missing Required Parameter", + "Parameter Out of Range", + "Too Many Arguments", + "Undefined Enumeration", + "Unrecognized Service" + {0,NULL} +}; +#endif + + +#if 0 +/* FIXME: add the value */ +/* FIXME: use the enumerations from bacenum.h */ +INDTEXT_DATA bacnet_abort_reason_name[] = { + "Other", + "Buffer Overflow", + "Invalid APDU in this State", + "Preempted by Higher Priority Task", + "Segmentation Not Supported" +}; +#endif + +#if 0 +/* generic handling for proprietary range or reserved for ASHRAE */ ++val_to_split_str(guint32 val, guint32 split_val, const value_string *vs, ++ const char *fmt, const char *split_fmt) ++{ ++ if (val < split_val) ++ return val_to_str(val, vs, fmt); ++ else ++ return val_to_str(val, vs, split_fmt); ++}; + ++ val_to_split_str(index,\ ++ BACNET_REJECT_REASON_PROPRIETARY,\ ++ BACnetRejectReason,\ ++ ASHRAE_Reserved_Text,\ ++ Vendor_Proprietary_Text) +#endif + + +