commit
47a0c377ab
@ -0,0 +1,3 @@ |
|||||||
|
/target |
||||||
|
/Cargo.lock |
||||||
|
.idea/ |
@ -0,0 +1,17 @@ |
|||||||
|
[package] |
||||||
|
name = "nep-parser" |
||||||
|
version = "0.1.0" |
||||||
|
edition = "2021" |
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html |
||||||
|
|
||||||
|
[dependencies] |
||||||
|
thiserror = "1" |
||||||
|
byteorder = "1" |
||||||
|
once_cell = "1.14" |
||||||
|
log = "0.4" |
||||||
|
lazy_static = "1.4" |
||||||
|
|
||||||
|
[dev-dependencies] |
||||||
|
simple-logging = "2" |
||||||
|
hex = "0.4" |
@ -0,0 +1,928 @@ |
|||||||
|
#[macro_use] |
||||||
|
extern crate thiserror; |
||||||
|
#[macro_use] |
||||||
|
extern crate log; |
||||||
|
|
||||||
|
use std::collections::HashMap; |
||||||
|
use std::io::{BufRead, Cursor, Read}; |
||||||
|
use byteorder::{BigEndian, ByteOrder, ReadBytesExt}; |
||||||
|
use once_cell::sync::Lazy; |
||||||
|
|
||||||
|
#[derive(Debug, Error)] |
||||||
|
pub enum NepError { |
||||||
|
#[error("Encrypted message parsing not supported!")] |
||||||
|
Encrypted, |
||||||
|
#[error(transparent)] |
||||||
|
Io(#[from] std::io::Error), |
||||||
|
} |
||||||
|
|
||||||
|
#[derive(Debug, Clone, Copy, PartialEq)] |
||||||
|
pub enum NepType { |
||||||
|
// "ASCIIZ retezec, zakonceny 0"
|
||||||
|
STRING = 0, |
||||||
|
// "pole byte, ruzne delky"
|
||||||
|
OCTETS = 1, |
||||||
|
// "32 bitove cislo bez znamenka"
|
||||||
|
UNUMBER = 2, |
||||||
|
// "32 bitove cislo se znamenkem"
|
||||||
|
NUMBER = 3, |
||||||
|
// "IP adresa, 4 byte MSB prvni"
|
||||||
|
IP = 4, |
||||||
|
// "IEEE794 floating point format"
|
||||||
|
FLOAT = 5, |
||||||
|
// "?"
|
||||||
|
OID = 6, |
||||||
|
// "nema datovou cast, pro dotazy na stav promenne"
|
||||||
|
NULL = 7, |
||||||
|
// Unknown
|
||||||
|
INVALID, |
||||||
|
} |
||||||
|
|
||||||
|
#[derive(Debug, Clone, PartialEq)] |
||||||
|
pub enum NepValue { |
||||||
|
String(String), |
||||||
|
Octets(Vec<u8>), |
||||||
|
Unumber(u32), |
||||||
|
Number(i32), |
||||||
|
IP([u8; 4]), |
||||||
|
Float(f32), |
||||||
|
Oid(u16), |
||||||
|
Null, |
||||||
|
Invalid, |
||||||
|
} |
||||||
|
|
||||||
|
impl From<u8> for NepType { |
||||||
|
fn from(b: u8) -> Self { |
||||||
|
match b { |
||||||
|
0 => Self::STRING, |
||||||
|
1 => Self::OCTETS, |
||||||
|
2 => Self::UNUMBER, |
||||||
|
3 => Self::NUMBER, |
||||||
|
4 => Self::IP, |
||||||
|
5 => Self::FLOAT, |
||||||
|
6 => Self::OID, |
||||||
|
7 => Self::NULL, // wrong but will be good enough
|
||||||
|
_ => Self::INVALID, |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
#[derive(Debug, Clone, PartialEq)] |
||||||
|
pub struct NepEntry { |
||||||
|
pub oid: NepOid, |
||||||
|
/// Entry index, NEP uses 1-based indices, 0 indicates no index was specified
|
||||||
|
pub index: u16, |
||||||
|
pub value: NepValue, |
||||||
|
} |
||||||
|
|
||||||
|
pub struct NepOidSpec { |
||||||
|
oid: NepOid, |
||||||
|
hasindex: bool, |
||||||
|
readonly: bool, |
||||||
|
neptype: NepType, |
||||||
|
name: &'static str, |
||||||
|
} |
||||||
|
|
||||||
|
#[allow(non_camel_case_types)] |
||||||
|
#[derive(Debug, Clone, Copy, PartialEq, Hash)] |
||||||
|
pub enum NepOid { |
||||||
|
NAME = 1, |
||||||
|
TYPE = 2, |
||||||
|
SUBTYPE = 3, |
||||||
|
MANUF = 4, |
||||||
|
HWVER = 5, |
||||||
|
HWREV = 6, |
||||||
|
SWVER = 7, |
||||||
|
SWREV = 8, |
||||||
|
LOCATION = 9, |
||||||
|
CONTACT = 10, |
||||||
|
COMMAND = 11, |
||||||
|
UPTIME = 12, |
||||||
|
SYSTIME = 13, |
||||||
|
RESET = 14, |
||||||
|
CONFIG = 15, |
||||||
|
MANUF_ID = 16, |
||||||
|
NEXT_TIMESTAMP = 17, |
||||||
|
NEXT_DELTATIME = 18, |
||||||
|
ENCRYPTED_BLOCK = 19, |
||||||
|
GPS_LATITUDE = 20, |
||||||
|
GPS_LONGITUDE = 21, |
||||||
|
GPS_ALTITUDE = 22, |
||||||
|
BULKCOUNT = 55, |
||||||
|
SEND_ALARMS = 56, |
||||||
|
NEXT_OID = 57, |
||||||
|
AUTORESET_TIMEOUT = 58, |
||||||
|
ALARM_CNT = 59, |
||||||
|
TRAP_CODE = 60, |
||||||
|
SEQ_NUMBER = 61, |
||||||
|
SIGNATURE = 62, |
||||||
|
MSGTYPE = 63, |
||||||
|
CURR_ADDR = 64, |
||||||
|
CURR_LEN = 65, |
||||||
|
MEMORY = 66, |
||||||
|
IOPORTS = 67, |
||||||
|
TASKNAME = 70, |
||||||
|
TASK_STATE = 71, |
||||||
|
TASK_PRIO = 72, |
||||||
|
METHANE_THRESHOLD = 81, |
||||||
|
METHANE = 82, |
||||||
|
ALARM_ON_CODE = 83, |
||||||
|
ALARM_OFF_CODE = 84, |
||||||
|
TVOC_THRESHOLD = 85, |
||||||
|
TVOC = 86, |
||||||
|
CO2_THRESHOLD = 87, |
||||||
|
CO2 = 88, |
||||||
|
CALIBRATION = 89, |
||||||
|
HUMIDITY = 90, |
||||||
|
HUMIDITY_LOW = 91, |
||||||
|
HUMIDITY_HIGH = 92, |
||||||
|
AVALUE_Q = 94, |
||||||
|
AVALUE_KL = 95, |
||||||
|
AVALUE_KH = 96, |
||||||
|
AVALUE = 97, |
||||||
|
IVALUE_TYPE = 98, |
||||||
|
IVALUE_LEVEL = 99, |
||||||
|
IVALUE = 100, |
||||||
|
IVALUE_MULT = 101, |
||||||
|
IVALUE_DIV = 102, |
||||||
|
TEMPERATURE_LOW = 103, |
||||||
|
TEMPERATURE_HIGH = 104, |
||||||
|
TEMPERATURE = 105, |
||||||
|
VOLTAGE = 106, |
||||||
|
OVALUE = 107, |
||||||
|
OVALUE_OFF_TOUT = 108, |
||||||
|
SISA_TIMEOUTS = 109, |
||||||
|
SLRF_CHANNEL = 110, |
||||||
|
SLRF_HOPCOUNT = 111, |
||||||
|
SLRF_TIMESLOTS = 112, |
||||||
|
SLRF_TIMESLOT = 113, |
||||||
|
SLRF_GROUP = 114, |
||||||
|
SLRF_MADDRESS = 115, |
||||||
|
SLRF_REPEATER = 116, |
||||||
|
SLRF_MASTER = 117, |
||||||
|
SLRF_ADDRESS = 118, |
||||||
|
SLRF_PACKET = 119, |
||||||
|
SLRF_RSSI = 120, |
||||||
|
SLRF_PROMISCUOUS = 121, |
||||||
|
SLRF_CD = 122, |
||||||
|
SLRF_TEST = 123, |
||||||
|
SLRF_TEST_TIMEOUT = 124, |
||||||
|
SLRF_TX_PWR = 125, |
||||||
|
SLRF_AADDRESS = 126, |
||||||
|
SLRF_WOR = 127, |
||||||
|
SLRF_PREAMBLE_LEN = 128, |
||||||
|
SLRF_RFA_ACTIVE = 129, |
||||||
|
IFC_NAME = 130, |
||||||
|
IFC_ADMIN = 131, |
||||||
|
IFC_OPER = 132, |
||||||
|
IFC_SPEED = 133, |
||||||
|
IFC_PARAM = 134, |
||||||
|
IFC_TX_ON = 135, |
||||||
|
IFC_TX_OFF = 136, |
||||||
|
IFC_INTERBYTE_TOUT = 137, |
||||||
|
SLRF_DRV_ERROR = 142, |
||||||
|
SLRF_WOR_WAKEUP = 143, |
||||||
|
SLRF_OUT_ERRORS = 144, |
||||||
|
SLRF_IN_ERRORS = 145, |
||||||
|
SLRF_OUT_PKTS = 146, |
||||||
|
SLRF_IN_PKTS = 147, |
||||||
|
SLRF_RFFTC = 148, |
||||||
|
SLRF_CRYPT_KEY = 149, |
||||||
|
RFT_ADDRESS = 150, |
||||||
|
RFT_VALUE = 151, |
||||||
|
RF_UDP_DST_PORT = 152, |
||||||
|
RF_UDP_SRC_PORT = 153, |
||||||
|
RF_DST_IP_ADDR = 154, |
||||||
|
UDP_HEARTBEAT = 155, |
||||||
|
IPRT_ADDR = 156, |
||||||
|
IPRT_MASK = 157, |
||||||
|
IPRT_GW = 158, |
||||||
|
IPRT_IFC_NAME = 159, |
||||||
|
IP_IFC_NAME = 160, |
||||||
|
IP_ADDRESS = 161, |
||||||
|
IP_MASK = 162, |
||||||
|
IP_ADMIN = 163, |
||||||
|
IP_OPER = 164, |
||||||
|
IP_MTU = 165, |
||||||
|
IP_MAC_ADDRESS = 166, |
||||||
|
IP_IFC_TYPE = 167, |
||||||
|
IFC_START_TIME = 168, |
||||||
|
IFC_STTOP_TIME = 169, |
||||||
|
SIGFOX_ID = 180, |
||||||
|
SIGFOX_PAC = 181, |
||||||
|
STORAGE_INTERVAL = 196, |
||||||
|
STORAGE_FLOAT = 197, |
||||||
|
STORAGE_INT = 198, |
||||||
|
STORAGE_TIMESTAMP = 199, |
||||||
|
COLL_RF_ADDR = 200, |
||||||
|
COLL_RF_RSSI = 201, |
||||||
|
COLL_MBUS_ADDR = 205, |
||||||
|
COLL_MBUS_ID = 206, |
||||||
|
COLL_MBUS_FMT = 207, |
||||||
|
COLL_MBUS_MEDIUM = 208, |
||||||
|
COLL_MBUS_C1_RFI = 209, |
||||||
|
COLL_MBUS_C1_VI = 210, |
||||||
|
COLL_MBUS_C2_RFI = 211, |
||||||
|
COLL_MBUS_C2_VI = 212, |
||||||
|
WMBUS_MODE = 213, |
||||||
|
WMBUS_SENDING = 214, |
||||||
|
WMBUS_PACKET = 215, |
||||||
|
WMBUS_RSSI = 216, |
||||||
|
WMBUS_FREQ_RANGE = 217, |
||||||
|
WMBUS_CHANNEL = 218, |
||||||
|
WMBUS_DATARATE = 219, |
||||||
|
WMBUS_FRAME_FORMAT = 220, |
||||||
|
WMBUS_RFFTC = 221, |
||||||
|
WMBUS_IN_PKTS = 222, |
||||||
|
WMBUS_OUT_PKTS = 223, |
||||||
|
WMBUS_IN_ERRORS = 224, |
||||||
|
WMBUS_OUT_ERRORS = 225, |
||||||
|
WMBUS_DRV_ERROR = 226, |
||||||
|
WMBUS_POWER = 227, |
||||||
|
WMBUS_SENDMODE = 228, |
||||||
|
WMBUS_CAPATUN = 229, |
||||||
|
MBUS_PRIMARY = 300, |
||||||
|
MBUS_SECONDARY = 301, |
||||||
|
MBUS_MANUF = 302, |
||||||
|
MBUS_VERSION = 303, |
||||||
|
MBUS_MEDIUM = 304, |
||||||
|
MBUS_ENCRYPT_KEY = 305, |
||||||
|
MBUS_ENCRYPT_TYPE = 306, |
||||||
|
MBUS_PERIOD = 307, |
||||||
|
MBUS_MANUF_NO = 308, |
||||||
|
MBUSV_DEV_INDEX = 320, |
||||||
|
MBUSV_DIF = 321, |
||||||
|
MBUSV_VIF = 322, |
||||||
|
MBUSV_OPTO_ID = 326, |
||||||
|
MBUSV_OPTO_DECIMAL = 327, |
||||||
|
LEAKMEASURETIME = 360, |
||||||
|
LEAKCHECKTIME = 361, |
||||||
|
LEAKZEROTIME = 362, |
||||||
|
BURSTCHECKTIME = 363, |
||||||
|
BURSTFLOW = 364, |
||||||
|
PROTO_DEVICE = 400, |
||||||
|
PROTO_TYPE = 401, |
||||||
|
PROTO_SPEED = 402, |
||||||
|
PROTO_PARAM = 403, |
||||||
|
PROTO_PERIOD = 404, |
||||||
|
PROTO_TRANSACTION_TIMEOUT = 405, |
||||||
|
PROTO_TRANSACTION_DELAY = 406, |
||||||
|
PROTO_ENCRYPTION_KEY = 407, |
||||||
|
PROTO_REPEAT = 408, |
||||||
|
PROTO_MBUS_PRISEC = 415, |
||||||
|
PROTO_MBUS_PRI = 416, |
||||||
|
PROTO_MBUS_SEC_ID = 417, |
||||||
|
PROTO_OPTO_ADDR = 420, |
||||||
|
PROTO_OPTO_MODE = 421, |
||||||
|
PROTO_MODBUS_ADDR = 425, |
||||||
|
PROTO_MODBUS_MODE = 426, |
||||||
|
PROTO_VAR_INDEX = 430, |
||||||
|
PROTO_VAR_DIF_VIF = 431, |
||||||
|
PROTO_VAR_OPTO = 432, |
||||||
|
PROTO_VAR_MODBUS_REGISTER = 433, |
||||||
|
PROTO_VAR_MODBUS_FUNC = 434, |
||||||
|
PROTO_VAR_MODBUS_TYPE = 435, |
||||||
|
PROTO_OUT_OID = 436, |
||||||
|
PROTO_OUT_IDX = 437, |
||||||
|
PROTO_OUT_DIFVIF = 438, |
||||||
|
PROTO_DEC = 439, |
||||||
|
ALARM_INDEX = 452, |
||||||
|
ALARM_TYPE = 453, |
||||||
|
ALARM_BIT = 454, |
||||||
|
SEND_MASK = 459, |
||||||
|
MODEM_IMEI = 460, |
||||||
|
MODEM_CCID = 461, |
||||||
|
MODEM_LAST_RSSI = 462, |
||||||
|
Modem_APN = 463, |
||||||
|
MODEM_PIN = 464, |
||||||
|
MODEM_SENDPKT = 465, |
||||||
|
MODEM_RECVPKT = 466, |
||||||
|
MODEM_IMSI = 467, |
||||||
|
MODEM_SESTIMEOUT = 468, |
||||||
|
MODEM_FLAGS = 469, |
||||||
|
MODEM_TEST_IP = 470, |
||||||
|
RADAR_TYPE = 500, |
||||||
|
RADAR_IDENT = 501, |
||||||
|
RADAR_TIMESTAMP = 502, |
||||||
|
RADAR_RSSI = 503, |
||||||
|
RADAR_STATUS = 504, |
||||||
|
GW_UDP_DST_PORT = 552, |
||||||
|
GW_UDP_SRC_PORT = 553, |
||||||
|
GW_DST_IP_ADDR = 554, |
||||||
|
GW_UDP_HEARTBEAT = 555, |
||||||
|
GW_IP_TIMEOUT = 556, |
||||||
|
GW_MSG_SENT = 557, |
||||||
|
CONFIGVERSION = 600, |
||||||
|
CONFIGTYPE = 601, |
||||||
|
CONFIGVAL = 602, |
||||||
|
EZS1_UPTIME = 1000, |
||||||
|
EZS1_MUPC = 1001, |
||||||
|
EZS1_MLSF = 1002, |
||||||
|
EZS1_MSfAT = 1003, |
||||||
|
EZS1_MSFPF = 1004, |
||||||
|
EZS1_MGFLG = 1005, |
||||||
|
EZS1_MSFLG = 1006, |
||||||
|
EZS1_MTFLG = 1007, |
||||||
|
EZS1_MSMSI = 1008, |
||||||
|
EZS1_MDKEP = 1009, |
||||||
|
EZS1_MDKET = 1010, |
||||||
|
EZS1_MIDK = 1011, |
||||||
|
EZS1_MLVDK = 1012, |
||||||
|
EZS1_MSA = 1013, |
||||||
|
EZS1_MST = 1014, |
||||||
|
EZS1_MEVP = 1015, |
||||||
|
EZS1_MPPIC = 1016, |
||||||
|
EZS1_MSFTO = 1017, |
||||||
|
EZS1_MSFF = 1018, |
||||||
|
EZS1_MSFL = 1019, |
||||||
|
EZS1_MLDK = 1020, |
||||||
|
EZS1_PIN = 1030, |
||||||
|
EZS1_ALARMTIME = 1031, |
||||||
|
EZS1_SIGLOW = 1032, |
||||||
|
EZS1_SIGHIGH = 1033, |
||||||
|
EZS1_ALRMAX = 1050, |
||||||
|
EZS1_ALRCONF = 1051, |
||||||
|
EZS1_ALRMSG = 1052, |
||||||
|
EZS1_NGSMAX = 1055, |
||||||
|
EZS1_NGSCONF = 1056, |
||||||
|
NGS_MSG = 1057, |
||||||
|
EZS1_PCOMAX = 1060, |
||||||
|
EZS1_PCOCONF = 1061, |
||||||
|
EZS1_PCOMSG = 1062, |
||||||
|
EZS1_DKMAX = 1070, |
||||||
|
EZS1_DKCONF = 1071, |
||||||
|
EZS1_DKCODE = 1072, |
||||||
|
EZS1_TLFMAX = 1080, |
||||||
|
EZS1_TLFCONG = 1081, |
||||||
|
EZS1_TLFNUM = 1082, |
||||||
|
EZS1_PRGOUTMAX = 1090, |
||||||
|
EZS1_PRGOUTCONF = 1091, |
||||||
|
EZS1_PRGOUTTOUT = 1092, |
||||||
|
EZS1_PRGOUTVAL = 1093, |
||||||
|
EZS1_PRGOUTTREST = 1094, |
||||||
|
EZS1_ZONEMAX = 1100, |
||||||
|
EZS1_ZONECONF = 1101, |
||||||
|
EZS1_ZONENAME = 1102, |
||||||
|
EZS1_ZONETOUT = 1103, |
||||||
|
EZS1_ZONEBYTES = 1104, |
||||||
|
EZS1_ZONEMTOUT = 1105, |
||||||
|
EZS1_ANLPMAX = 1110, |
||||||
|
EZS1_ANLPCONF = 1111, |
||||||
|
EZS1_ANLPZONE = 1112, |
||||||
|
EZS1_ANLPTOUT = 1113, |
||||||
|
EZS1_ANLPSHORT = 1114, |
||||||
|
EZS1_ANLPOPEN = 1115, |
||||||
|
EZS1_Z1 = 1116, |
||||||
|
EZS1_Z2 = 1117, |
||||||
|
EZS1_Z1_Z2 = 1118, |
||||||
|
EZS1_ANLPMBYTES = 1119, |
||||||
|
EZS1_ANLPMTOUT = 1120, |
||||||
|
EZS1_CONTMAX = 1140, |
||||||
|
EZS1_CONTCONF = 1141, |
||||||
|
EZS1_CONTZONE = 1142, |
||||||
|
EZS1_CONTTOUT = 1143, |
||||||
|
EZS1_CONTMBYTE = 1144, |
||||||
|
EZS1_CONTMTOUT = 1145, |
||||||
|
DIGIN = 8000, |
||||||
|
ANALOGIN = 8001, |
||||||
|
PWMOUT = 8002, |
||||||
|
TMRPERIOD = 8003, |
||||||
|
TMRDUTY = 8004, |
||||||
|
STATUS = 8007, |
||||||
|
TMRIN = 8008, |
||||||
|
CURRENT_PGM = 8021, |
||||||
|
PGM_TIME = 8022, |
||||||
|
PGM_LIST = 8023, |
||||||
|
CAN_SPEED = 8024, |
||||||
|
BIN_OUTPUTS = 8030, |
||||||
|
REZISTORS = 8031, |
||||||
|
} |
||||||
|
|
||||||
|
pub fn oid_spec(oid: NepOid) -> Option<&'static NepOidSpec> { |
||||||
|
OID_TABLE.get(&(oid as u16)) |
||||||
|
} |
||||||
|
|
||||||
|
lazy_static::lazy_static! { |
||||||
|
static ref OID_TABLE: HashMap<u16, NepOidSpec> = HashMap::from([ |
||||||
|
(1, NepOidSpec { oid: NepOid::NAME, hasindex: false, readonly: true, neptype: NepType::STRING, name: "NAME" }), |
||||||
|
(2, NepOidSpec { oid: NepOid::TYPE, hasindex: false, readonly: true, neptype: NepType::UNUMBER, name: "TYPE" }), |
||||||
|
(3, NepOidSpec { oid: NepOid::SUBTYPE, hasindex: false, readonly: true, neptype: NepType::UNUMBER, name: "SUBTYPE" }), |
||||||
|
(4, NepOidSpec { oid: NepOid::MANUF, hasindex: false, readonly: true, neptype: NepType::OCTETS, name: "MANUF" }), |
||||||
|
(5, NepOidSpec { oid: NepOid::HWVER, hasindex: false, readonly: true, neptype: NepType::UNUMBER, name: "HWVER" }), |
||||||
|
(6, NepOidSpec { oid: NepOid::HWREV, hasindex: false, readonly: true, neptype: NepType::UNUMBER, name: "HWREV" }), |
||||||
|
(7, NepOidSpec { oid: NepOid::SWVER, hasindex: false, readonly: true, neptype: NepType::UNUMBER, name: "SWVER" }), |
||||||
|
(8, NepOidSpec { oid: NepOid::SWREV, hasindex: false, readonly: true, neptype: NepType::UNUMBER, name: "SWREV" }), |
||||||
|
(9, NepOidSpec { oid: NepOid::LOCATION, hasindex: false, readonly: false, neptype: NepType::STRING, name: "LOCATION" }), |
||||||
|
(10, NepOidSpec { oid: NepOid::CONTACT, hasindex: false, readonly: false, neptype: NepType::STRING, name: "CONTACT" }), |
||||||
|
(11, NepOidSpec { oid: NepOid::COMMAND, hasindex: false, readonly: false, neptype: NepType::STRING, name: "COMMAND" }), |
||||||
|
(12, NepOidSpec { oid: NepOid::UPTIME, hasindex: false, readonly: true, neptype: NepType::UNUMBER, name: "UPTIME" }), |
||||||
|
(13, NepOidSpec { oid: NepOid::SYSTIME, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "SYSTIME" }), |
||||||
|
(14, NepOidSpec { oid: NepOid::RESET, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "RESET" }), |
||||||
|
(15, NepOidSpec { oid: NepOid::CONFIG, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "CONFIG" }), |
||||||
|
(16, NepOidSpec { oid: NepOid::MANUF_ID, hasindex: false, readonly: false, neptype: NepType::STRING, name: "MANUF_ID" }), |
||||||
|
(17, NepOidSpec { oid: NepOid::NEXT_TIMESTAMP, hasindex: false, readonly: true, neptype: NepType::UNUMBER, name: "NEXT_TIMESTAMP" }), |
||||||
|
(18, NepOidSpec { oid: NepOid::NEXT_DELTATIME, hasindex: false, readonly: true, neptype: NepType::NUMBER, name: "NEXT_DELTATIME" }), |
||||||
|
(19, NepOidSpec { oid: NepOid::ENCRYPTED_BLOCK, hasindex: true, readonly: false, neptype: NepType::OCTETS, name: "ENCRYPTED_BLOCK" }), |
||||||
|
(20, NepOidSpec { oid: NepOid::GPS_LATITUDE, hasindex: false, readonly: true, neptype: NepType::FLOAT, name: "GPS_LATITUDE" }), |
||||||
|
(21, NepOidSpec { oid: NepOid::GPS_LONGITUDE, hasindex: false, readonly: true, neptype: NepType::FLOAT, name: "GPS_LONGITUDE" }), |
||||||
|
(22, NepOidSpec { oid: NepOid::GPS_ALTITUDE, hasindex: false, readonly: true, neptype: NepType::FLOAT, name: "GPS_ALTITUDE" }), |
||||||
|
(55, NepOidSpec { oid: NepOid::BULKCOUNT, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "BULKCOUNT" }), |
||||||
|
(56, NepOidSpec { oid: NepOid::SEND_ALARMS, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "SEND_ALARMS" }), |
||||||
|
(57, NepOidSpec { oid: NepOid::NEXT_OID, hasindex: false, readonly: true, neptype: NepType::OID, name: "NEXT_OID" }), |
||||||
|
(58, NepOidSpec { oid: NepOid::AUTORESET_TIMEOUT, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "AUTORESET_TIMEOUT" }), |
||||||
|
(59, NepOidSpec { oid: NepOid::ALARM_CNT, hasindex: false, readonly: true, neptype: NepType::UNUMBER, name: "ALARM_CNT" }), |
||||||
|
(60, NepOidSpec { oid: NepOid::TRAP_CODE, hasindex: false, readonly: true, neptype: NepType::UNUMBER, name: "TRAP_CODE" }), |
||||||
|
(61, NepOidSpec { oid: NepOid::SEQ_NUMBER, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "SEQ_NUMBER" }), |
||||||
|
(62, NepOidSpec { oid: NepOid::SIGNATURE, hasindex: false, readonly: false, neptype: NepType::OCTETS, name: "SIGNATURE" }), |
||||||
|
(63, NepOidSpec { oid: NepOid::MSGTYPE, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "MSGTYPE" }), |
||||||
|
(64, NepOidSpec { oid: NepOid::CURR_ADDR, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "CURR_ADDR" }), |
||||||
|
(65, NepOidSpec { oid: NepOid::CURR_LEN, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "CURR_LEN" }), |
||||||
|
(66, NepOidSpec { oid: NepOid::MEMORY, hasindex: false, readonly: false, neptype: NepType::OCTETS, name: "MEMORY" }), |
||||||
|
(67, NepOidSpec { oid: NepOid::IOPORTS, hasindex: false, readonly: false, neptype: NepType::OCTETS, name: "IOPORTS" }), |
||||||
|
(70, NepOidSpec { oid: NepOid::TASKNAME, hasindex: true, readonly: true, neptype: NepType::STRING, name: "TASKNAME" }), |
||||||
|
(71, NepOidSpec { oid: NepOid::TASK_STATE, hasindex: true, readonly: true, neptype: NepType::NUMBER, name: "TASK_STATE" }), |
||||||
|
(72, NepOidSpec { oid: NepOid::TASK_PRIO, hasindex: true, readonly: true, neptype: NepType::NUMBER, name: "TASK_PRIO" }), |
||||||
|
(81, NepOidSpec { oid: NepOid::METHANE_THRESHOLD, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "METHANE_THRESHOLD" }), |
||||||
|
(82, NepOidSpec { oid: NepOid::METHANE, hasindex: true, readonly: true, neptype: NepType::UNUMBER, name: "METHANE" }), |
||||||
|
(83, NepOidSpec { oid: NepOid::ALARM_ON_CODE, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "ALARM_ON_CODE" }), |
||||||
|
(84, NepOidSpec { oid: NepOid::ALARM_OFF_CODE, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "ALARM_OFF_CODE" }), |
||||||
|
(85, NepOidSpec { oid: NepOid::TVOC_THRESHOLD, hasindex: true, readonly: false, neptype: NepType::NUMBER, name: "TVOC_THRESHOLD" }), |
||||||
|
(86, NepOidSpec { oid: NepOid::TVOC, hasindex: true, readonly: true, neptype: NepType::NUMBER, name: "TVOC" }), |
||||||
|
(87, NepOidSpec { oid: NepOid::CO2_THRESHOLD, hasindex: true, readonly: false, neptype: NepType::NUMBER, name: "CO2_THRESHOLD" }), |
||||||
|
(88, NepOidSpec { oid: NepOid::CO2, hasindex: true, readonly: true, neptype: NepType::NUMBER, name: "CO2" }), |
||||||
|
(89, NepOidSpec { oid: NepOid::CALIBRATION, hasindex: true, readonly: false, neptype: NepType::NUMBER, name: "CALIBRATION" }), |
||||||
|
(90, NepOidSpec { oid: NepOid::HUMIDITY, hasindex: true, readonly: true, neptype: NepType::NUMBER, name: "HUMIDITY" }), |
||||||
|
(91, NepOidSpec { oid: NepOid::HUMIDITY_LOW, hasindex: true, readonly: false, neptype: NepType::NUMBER, name: "HUMIDITY_LOW" }), |
||||||
|
(92, NepOidSpec { oid: NepOid::HUMIDITY_HIGH, hasindex: true, readonly: false, neptype: NepType::NUMBER, name: "HUMIDITY_HIGH" }), |
||||||
|
(94, NepOidSpec { oid: NepOid::AVALUE_Q, hasindex: true, readonly: false, neptype: NepType::NUMBER, name: "AVALUE_Q" }), |
||||||
|
(95, NepOidSpec { oid: NepOid::AVALUE_KL, hasindex: true, readonly: false, neptype: NepType::NUMBER, name: "AVALUE_KL" }), |
||||||
|
(96, NepOidSpec { oid: NepOid::AVALUE_KH, hasindex: true, readonly: false, neptype: NepType::NUMBER, name: "AVALUE_KH" }), |
||||||
|
(97, NepOidSpec { oid: NepOid::AVALUE, hasindex: true, readonly: true, neptype: NepType::NUMBER, name: "AVALUE" }), |
||||||
|
(98, NepOidSpec { oid: NepOid::IVALUE_TYPE, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "IVALUE_TYPE" }), |
||||||
|
(99, NepOidSpec { oid: NepOid::IVALUE_LEVEL, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "IVALUE_LEVEL" }), |
||||||
|
(100, NepOidSpec { oid: NepOid::IVALUE, hasindex: true, readonly: false, neptype: NepType::NUMBER, name: "IVALUE" }), |
||||||
|
(101, NepOidSpec { oid: NepOid::IVALUE_MULT, hasindex: true, readonly: false, neptype: NepType::NUMBER, name: "IVALUE_MULT" }), |
||||||
|
(102, NepOidSpec { oid: NepOid::IVALUE_DIV, hasindex: true, readonly: false, neptype: NepType::NUMBER, name: "IVALUE_DIV" }), |
||||||
|
(103, NepOidSpec { oid: NepOid::TEMPERATURE_LOW, hasindex: true, readonly: false, neptype: NepType::NUMBER, name: "TEMPERATURE_LOW" }), |
||||||
|
(104, NepOidSpec { oid: NepOid::TEMPERATURE_HIGH, hasindex: true, readonly: false, neptype: NepType::NUMBER, name: "TEMPERATURE_HIGH" }), |
||||||
|
(105, NepOidSpec { oid: NepOid::TEMPERATURE, hasindex: true, readonly: true, neptype: NepType::NUMBER, name: "TEMPERATURE" }), |
||||||
|
(106, NepOidSpec { oid: NepOid::VOLTAGE, hasindex: true, readonly: true, neptype: NepType::NUMBER, name: "VOLTAGE" }), |
||||||
|
(107, NepOidSpec { oid: NepOid::OVALUE, hasindex: true, readonly: false, neptype: NepType::NUMBER, name: "OVALUE" }), |
||||||
|
(108, NepOidSpec { oid: NepOid::OVALUE_OFF_TOUT, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "OVALUE_OFF_TOUT" }), |
||||||
|
(109, NepOidSpec { oid: NepOid::SISA_TIMEOUTS, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "SISA_TIMEOUTS" }), |
||||||
|
(110, NepOidSpec { oid: NepOid::SLRF_CHANNEL, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "SLRF_CHANNEL" }), |
||||||
|
(111, NepOidSpec { oid: NepOid::SLRF_HOPCOUNT, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "SLRF_HOPCOUNT" }), |
||||||
|
(112, NepOidSpec { oid: NepOid::SLRF_TIMESLOTS, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "SLRF_TIMESLOTS" }), |
||||||
|
(113, NepOidSpec { oid: NepOid::SLRF_TIMESLOT, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "SLRF_TIMESLOT" }), |
||||||
|
(114, NepOidSpec { oid: NepOid::SLRF_GROUP, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "SLRF_GROUP" }), |
||||||
|
(115, NepOidSpec { oid: NepOid::SLRF_MADDRESS, hasindex: true, readonly: false, neptype: NepType::OCTETS, name: "SLRF_MADDRESS" }), |
||||||
|
(116, NepOidSpec { oid: NepOid::SLRF_REPEATER, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "SLRF_REPEATER" }), |
||||||
|
(117, NepOidSpec { oid: NepOid::SLRF_MASTER, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "SLRF_MASTER" }), |
||||||
|
(118, NepOidSpec { oid: NepOid::SLRF_ADDRESS, hasindex: true, readonly: true, neptype: NepType::OCTETS, name: "SLRF_ADDRESS" }), |
||||||
|
(119, NepOidSpec { oid: NepOid::SLRF_PACKET, hasindex: true, readonly: false, neptype: NepType::OCTETS, name: "SLRF_PACKET" }), |
||||||
|
(120, NepOidSpec { oid: NepOid::SLRF_RSSI, hasindex: true, readonly: true, neptype: NepType::NUMBER, name: "SLRF_RSSI" }), |
||||||
|
(121, NepOidSpec { oid: NepOid::SLRF_PROMISCUOUS, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "SLRF_PROMISCUOUS" }), |
||||||
|
(122, NepOidSpec { oid: NepOid::SLRF_CD, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "SLRF_CD" }), |
||||||
|
(123, NepOidSpec { oid: NepOid::SLRF_TEST, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "SLRF_TEST" }), |
||||||
|
(124, NepOidSpec { oid: NepOid::SLRF_TEST_TIMEOUT, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "SLRF_TEST_TIMEOUT" }), |
||||||
|
(125, NepOidSpec { oid: NepOid::SLRF_TX_PWR, hasindex: true, readonly: false, neptype: NepType::NUMBER, name: "SLRF_TX_PWR" }), |
||||||
|
(126, NepOidSpec { oid: NepOid::SLRF_AADDRESS, hasindex: true, readonly: false, neptype: NepType::OCTETS, name: "SLRF_AADDRESS" }), |
||||||
|
(127, NepOidSpec { oid: NepOid::SLRF_WOR, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "SLRF_WOR" }), |
||||||
|
(128, NepOidSpec { oid: NepOid::SLRF_PREAMBLE_LEN, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "SLRF_PREAMBLE_LEN" }), |
||||||
|
(129, NepOidSpec { oid: NepOid::SLRF_RFA_ACTIVE, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "SLRF_RFA_ACTIVE" }), |
||||||
|
(130, NepOidSpec { oid: NepOid::IFC_NAME, hasindex: true, readonly: true, neptype: NepType::STRING, name: "IFC_NAME" }), |
||||||
|
(131, NepOidSpec { oid: NepOid::IFC_ADMIN, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "IFC_ADMIN" }), |
||||||
|
(132, NepOidSpec { oid: NepOid::IFC_OPER, hasindex: true, readonly: true, neptype: NepType::UNUMBER, name: "IFC_OPER" }), |
||||||
|
(133, NepOidSpec { oid: NepOid::IFC_SPEED, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "IFC_SPEED" }), |
||||||
|
(134, NepOidSpec { oid: NepOid::IFC_PARAM, hasindex: true, readonly: false, neptype: NepType::STRING, name: "IFC_PARAM" }), |
||||||
|
(135, NepOidSpec { oid: NepOid::IFC_TX_ON, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "IFC_TX_ON" }), |
||||||
|
(136, NepOidSpec { oid: NepOid::IFC_TX_OFF, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "IFC_TX_OFF" }), |
||||||
|
(137, NepOidSpec { oid: NepOid::IFC_INTERBYTE_TOUT, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "IFC_INTERBYTE_TOUT" }), |
||||||
|
(142, NepOidSpec { oid: NepOid::SLRF_DRV_ERROR, hasindex: true, readonly: true, neptype: NepType::UNUMBER, name: "SLRF_DRV_ERROR" }), |
||||||
|
(143, NepOidSpec { oid: NepOid::SLRF_WOR_WAKEUP, hasindex: true, readonly: true, neptype: NepType::UNUMBER, name: "SLRF_WOR_WAKEUP" }), |
||||||
|
(144, NepOidSpec { oid: NepOid::SLRF_OUT_ERRORS, hasindex: true, readonly: true, neptype: NepType::UNUMBER, name: "SLRF_OUT_ERRORS" }), |
||||||
|
(145, NepOidSpec { oid: NepOid::SLRF_IN_ERRORS, hasindex: true, readonly: true, neptype: NepType::UNUMBER, name: "SLRF_IN_ERRORS" }), |
||||||
|
(146, NepOidSpec { oid: NepOid::SLRF_OUT_PKTS, hasindex: true, readonly: true, neptype: NepType::UNUMBER, name: "SLRF_OUT_PKTS" }), |
||||||
|
(147, NepOidSpec { oid: NepOid::SLRF_IN_PKTS, hasindex: true, readonly: true, neptype: NepType::UNUMBER, name: "SLRF_IN_PKTS" }), |
||||||
|
(148, NepOidSpec { oid: NepOid::SLRF_RFFTC, hasindex: true, readonly: true, neptype: NepType::UNUMBER, name: "SLRF_RFFTC" }), |
||||||
|
(149, NepOidSpec { oid: NepOid::SLRF_CRYPT_KEY, hasindex: true, readonly: false, neptype: NepType::STRING, name: "SLRF_CRYPT_KEY" }), |
||||||
|
(150, NepOidSpec { oid: NepOid::RFT_ADDRESS, hasindex: true, readonly: false, neptype: NepType::OCTETS, name: "RFT_ADDRESS" }), |
||||||
|
(151, NepOidSpec { oid: NepOid::RFT_VALUE, hasindex: true, readonly: false, neptype: NepType::NUMBER, name: "RFT_VALUE" }), |
||||||
|
(152, NepOidSpec { oid: NepOid::RF_UDP_DST_PORT, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "RF_UDP_DST_PORT" }), |
||||||
|
(153, NepOidSpec { oid: NepOid::RF_UDP_SRC_PORT, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "RF_UDP_SRC_PORT" }), |
||||||
|
(154, NepOidSpec { oid: NepOid::RF_DST_IP_ADDR, hasindex: false, readonly: false, neptype: NepType::IP, name: "RF_DST_IP_ADDR" }), |
||||||
|
(155, NepOidSpec { oid: NepOid::UDP_HEARTBEAT, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "UDP_HEARTBEAT" }), |
||||||
|
(156, NepOidSpec { oid: NepOid::IPRT_ADDR, hasindex: true, readonly: false, neptype: NepType::IP, name: "IPRT_ADDR" }), |
||||||
|
(157, NepOidSpec { oid: NepOid::IPRT_MASK, hasindex: true, readonly: false, neptype: NepType::IP, name: "IPRT_MASK" }), |
||||||
|
(158, NepOidSpec { oid: NepOid::IPRT_GW, hasindex: true, readonly: false, neptype: NepType::IP, name: "IPRT_GW" }), |
||||||
|
(159, NepOidSpec { oid: NepOid::IPRT_IFC_NAME, hasindex: true, readonly: false, neptype: NepType::STRING, name: "IPRT_IFC_NAME" }), |
||||||
|
(160, NepOidSpec { oid: NepOid::IP_IFC_NAME, hasindex: true, readonly: false, neptype: NepType::STRING, name: "IP_IFC_NAME" }), |
||||||
|
(161, NepOidSpec { oid: NepOid::IP_ADDRESS, hasindex: true, readonly: false, neptype: NepType::IP, name: "IP_ADDRESS" }), |
||||||
|
(162, NepOidSpec { oid: NepOid::IP_MASK, hasindex: true, readonly: false, neptype: NepType::IP, name: "IP_MASK" }), |
||||||
|
(163, NepOidSpec { oid: NepOid::IP_ADMIN, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "IP_ADMIN" }), |
||||||
|
(164, NepOidSpec { oid: NepOid::IP_OPER, hasindex: true, readonly: true, neptype: NepType::UNUMBER, name: "IP_OPER" }), |
||||||
|
(165, NepOidSpec { oid: NepOid::IP_MTU, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "IP_MTU" }), |
||||||
|
(166, NepOidSpec { oid: NepOid::IP_MAC_ADDRESS, hasindex: true, readonly: true, neptype: NepType::OCTETS, name: "IP_MAC_ADDRESS" }), |
||||||
|
(167, NepOidSpec { oid: NepOid::IP_IFC_TYPE, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "IP_IFC_TYPE" }), |
||||||
|
(168, NepOidSpec { oid: NepOid::IFC_START_TIME, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "IFC_START_TIME" }), |
||||||
|
(169, NepOidSpec { oid: NepOid::IFC_STTOP_TIME, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "IFC_STTOP_TIME" }), |
||||||
|
(180, NepOidSpec { oid: NepOid::SIGFOX_ID, hasindex: true, readonly: true, neptype: NepType::STRING, name: "SIGFOX_ID" }), |
||||||
|
(181, NepOidSpec { oid: NepOid::SIGFOX_PAC, hasindex: true, readonly: true, neptype: NepType::STRING, name: "SIGFOX_PAC" }), |
||||||
|
(196, NepOidSpec { oid: NepOid::STORAGE_INTERVAL, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "STORAGE_INTERVAL" }), |
||||||
|
(197, NepOidSpec { oid: NepOid::STORAGE_FLOAT, hasindex: true, readonly: false, neptype: NepType::FLOAT, name: "STORAGE_FLOAT" }), |
||||||
|
(198, NepOidSpec { oid: NepOid::STORAGE_INT, hasindex: true, readonly: false, neptype: NepType::NUMBER, name: "STORAGE_INT" }), |
||||||
|
(199, NepOidSpec { oid: NepOid::STORAGE_TIMESTAMP, hasindex: true, readonly: true, neptype: NepType::UNUMBER, name: "STORAGE_TIMESTAMP" }), |
||||||
|
(200, NepOidSpec { oid: NepOid::COLL_RF_ADDR, hasindex: true, readonly: false, neptype: NepType::OCTETS, name: "COLL_RF_ADDR" }), |
||||||
|
(201, NepOidSpec { oid: NepOid::COLL_RF_RSSI, hasindex: true, readonly: false, neptype: NepType::NUMBER, name: "COLL_RF_RSSI" }), |
||||||
|
(205, NepOidSpec { oid: NepOid::COLL_MBUS_ADDR, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "COLL_MBUS_ADDR" }), |
||||||
|
(206, NepOidSpec { oid: NepOid::COLL_MBUS_ID, hasindex: true, readonly: false, neptype: NepType::OCTETS, name: "COLL_MBUS_ID" }), |
||||||
|
(207, NepOidSpec { oid: NepOid::COLL_MBUS_FMT, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "COLL_MBUS_FMT" }), |
||||||
|
(208, NepOidSpec { oid: NepOid::COLL_MBUS_MEDIUM, hasindex: true, readonly: false, neptype: NepType::OCTETS, name: "COLL_MBUS_MEDIUM" }), |
||||||
|
(209, NepOidSpec { oid: NepOid::COLL_MBUS_C1_RFI, hasindex: true, readonly: false, neptype: NepType::NUMBER, name: "COLL_MBUS_C1_RFI" }), |
||||||
|
(210, NepOidSpec { oid: NepOid::COLL_MBUS_C1_VI, hasindex: true, readonly: false, neptype: NepType::NUMBER, name: "COLL_MBUS_C1_VI" }), |
||||||
|
(211, NepOidSpec { oid: NepOid::COLL_MBUS_C2_RFI, hasindex: true, readonly: false, neptype: NepType::NUMBER, name: "COLL_MBUS_C2_RFI" }), |
||||||
|
(212, NepOidSpec { oid: NepOid::COLL_MBUS_C2_VI, hasindex: true, readonly: false, neptype: NepType::NUMBER, name: "COLL_MBUS_C2_VI" }), |
||||||
|
(213, NepOidSpec { oid: NepOid::WMBUS_MODE, hasindex: true, readonly: false, neptype: NepType::STRING, name: "WMBUS_MODE" }), |
||||||
|
(214, NepOidSpec { oid: NepOid::WMBUS_SENDING, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "WMBUS_SENDING" }), |
||||||
|
(215, NepOidSpec { oid: NepOid::WMBUS_PACKET, hasindex: true, readonly: false, neptype: NepType::OCTETS, name: "WMBUS_PACKET" }), |
||||||
|
(216, NepOidSpec { oid: NepOid::WMBUS_RSSI, hasindex: true, readonly: false, neptype: NepType::NUMBER, name: "WMBUS_RSSI" }), |
||||||
|
(217, NepOidSpec { oid: NepOid::WMBUS_FREQ_RANGE, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "WMBUS_FREQ_RANGE" }), |
||||||
|
(218, NepOidSpec { oid: NepOid::WMBUS_CHANNEL, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "WMBUS_CHANNEL" }), |
||||||
|
(219, NepOidSpec { oid: NepOid::WMBUS_DATARATE, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "WMBUS_DATARATE" }), |
||||||
|
(220, NepOidSpec { oid: NepOid::WMBUS_FRAME_FORMAT, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "WMBUS_FRAME_FORMAT" }), |
||||||
|
(221, NepOidSpec { oid: NepOid::WMBUS_RFFTC, hasindex: true, readonly: true, neptype: NepType::NUMBER, name: "WMBUS_RFFTC" }), |
||||||
|
(222, NepOidSpec { oid: NepOid::WMBUS_IN_PKTS, hasindex: true, readonly: true, neptype: NepType::UNUMBER, name: "WMBUS_IN_PKTS" }), |
||||||
|
(223, NepOidSpec { oid: NepOid::WMBUS_OUT_PKTS, hasindex: true, readonly: true, neptype: NepType::UNUMBER, name: "WMBUS_OUT_PKTS" }), |
||||||
|
(224, NepOidSpec { oid: NepOid::WMBUS_IN_ERRORS, hasindex: true, readonly: true, neptype: NepType::UNUMBER, name: "WMBUS_IN_ERRORS" }), |
||||||
|
(225, NepOidSpec { oid: NepOid::WMBUS_OUT_ERRORS, hasindex: true, readonly: true, neptype: NepType::UNUMBER, name: "WMBUS_OUT_ERRORS" }), |
||||||
|
(226, NepOidSpec { oid: NepOid::WMBUS_DRV_ERROR, hasindex: true, readonly: true, neptype: NepType::UNUMBER, name: "WMBUS_DRV_ERROR" }), |
||||||
|
(227, NepOidSpec { oid: NepOid::WMBUS_POWER, hasindex: true, readonly: false, neptype: NepType::NUMBER, name: "WMBUS_POWER" }), |
||||||
|
(228, NepOidSpec { oid: NepOid::WMBUS_SENDMODE, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "WMBUS_SENDMODE" }), |
||||||
|
(229, NepOidSpec { oid: NepOid::WMBUS_CAPATUN, hasindex: true, readonly: false, neptype: NepType::NUMBER, name: "WMBUS_CAPATUN" }), |
||||||
|
(300, NepOidSpec { oid: NepOid::MBUS_PRIMARY, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "MBUS_PRIMARY" }), |
||||||
|
(301, NepOidSpec { oid: NepOid::MBUS_SECONDARY, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "MBUS_SECONDARY" }), |
||||||
|
(302, NepOidSpec { oid: NepOid::MBUS_MANUF, hasindex: true, readonly: false, neptype: NepType::STRING, name: "MBUS_MANUF" }), |
||||||
|
(303, NepOidSpec { oid: NepOid::MBUS_VERSION, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "MBUS_VERSION" }), |
||||||
|
(304, NepOidSpec { oid: NepOid::MBUS_MEDIUM, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "MBUS_MEDIUM" }), |
||||||
|
(305, NepOidSpec { oid: NepOid::MBUS_ENCRYPT_KEY, hasindex: true, readonly: false, neptype: NepType::OCTETS, name: "MBUS_ENCRYPT_KEY" }), |
||||||
|
(306, NepOidSpec { oid: NepOid::MBUS_ENCRYPT_TYPE, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "MBUS_ENCRYPT_TYPE" }), |
||||||
|
(307, NepOidSpec { oid: NepOid::MBUS_PERIOD, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "MBUS_PERIOD" }), |
||||||
|
(308, NepOidSpec { oid: NepOid::MBUS_MANUF_NO, hasindex: true, readonly: false, neptype: NepType::STRING, name: "MBUS_MANUF_NO" }), |
||||||
|
(320, NepOidSpec { oid: NepOid::MBUSV_DEV_INDEX, hasindex: true, readonly: false, neptype: NepType::NUMBER, name: "MBUSV_DEV_INDEX" }), |
||||||
|
(321, NepOidSpec { oid: NepOid::MBUSV_DIF, hasindex: true, readonly: false, neptype: NepType::OCTETS, name: "MBUSV_DIF" }), |
||||||
|
(322, NepOidSpec { oid: NepOid::MBUSV_VIF, hasindex: true, readonly: false, neptype: NepType::OCTETS, name: "MBUSV_VIF" }), |
||||||
|
(326, NepOidSpec { oid: NepOid::MBUSV_OPTO_ID, hasindex: true, readonly: false, neptype: NepType::STRING, name: "MBUSV_OPTO_ID" }), |
||||||
|
(327, NepOidSpec { oid: NepOid::MBUSV_OPTO_DECIMAL, hasindex: true, readonly: false, neptype: NepType::NUMBER, name: "MBUSV_OPTO_DECIMAL" }), |
||||||
|
(360, NepOidSpec { oid: NepOid::LEAKMEASURETIME, hasindex: true, readonly: true, neptype: NepType::UNUMBER, name: "LEAKMEASURETIME" }), |
||||||
|
(361, NepOidSpec { oid: NepOid::LEAKCHECKTIME, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "LEAKCHECKTIME" }), |
||||||
|
(362, NepOidSpec { oid: NepOid::LEAKZEROTIME, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "LEAKZEROTIME" }), |
||||||
|
(363, NepOidSpec { oid: NepOid::BURSTCHECKTIME, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "BURSTCHECKTIME" }), |
||||||
|
(364, NepOidSpec { oid: NepOid::BURSTFLOW, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "BURSTFLOW" }), |
||||||
|
(400, NepOidSpec { oid: NepOid::PROTO_DEVICE, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "PROTO_DEVICE" }), |
||||||
|
(401, NepOidSpec { oid: NepOid::PROTO_TYPE, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "PROTO_TYPE" }), |
||||||
|
(402, NepOidSpec { oid: NepOid::PROTO_SPEED, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "PROTO_SPEED" }), |
||||||
|
(403, NepOidSpec { oid: NepOid::PROTO_PARAM, hasindex: true, readonly: false, neptype: NepType::STRING, name: "PROTO_PARAM" }), |
||||||
|
(404, NepOidSpec { oid: NepOid::PROTO_PERIOD, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "PROTO_PERIOD" }), |
||||||
|
(405, NepOidSpec { oid: NepOid::PROTO_TRANSACTION_TIMEOUT, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "PROTO_TRANSACTION_TIMEOUT" }), |
||||||
|
(406, NepOidSpec { oid: NepOid::PROTO_TRANSACTION_DELAY, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "PROTO_TRANSACTION_DELAY" }), |
||||||
|
(407, NepOidSpec { oid: NepOid::PROTO_ENCRYPTION_KEY, hasindex: true, readonly: false, neptype: NepType::OCTETS, name: "PROTO_ENCRYPTION_KEY" }), |
||||||
|
(408, NepOidSpec { oid: NepOid::PROTO_REPEAT, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "PROTO_REPEAT" }), |
||||||
|
(415, NepOidSpec { oid: NepOid::PROTO_MBUS_PRISEC, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "PROTO_MBUS_PRISEC" }), |
||||||
|
(416, NepOidSpec { oid: NepOid::PROTO_MBUS_PRI, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "PROTO_MBUS_PRI" }), |
||||||
|
(417, NepOidSpec { oid: NepOid::PROTO_MBUS_SEC_ID, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "PROTO_MBUS_SEC_ID" }), |
||||||
|
(420, NepOidSpec { oid: NepOid::PROTO_OPTO_ADDR, hasindex: true, readonly: false, neptype: NepType::STRING, name: "PROTO_OPTO_ADDR" }), |
||||||
|
(421, NepOidSpec { oid: NepOid::PROTO_OPTO_MODE, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "PROTO_OPTO_MODE" }), |
||||||
|
(425, NepOidSpec { oid: NepOid::PROTO_MODBUS_ADDR, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "PROTO_MODBUS_ADDR" }), |
||||||
|
(426, NepOidSpec { oid: NepOid::PROTO_MODBUS_MODE, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "PROTO_MODBUS_MODE" }), |
||||||
|
(430, NepOidSpec { oid: NepOid::PROTO_VAR_INDEX, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "PROTO_VAR_INDEX" }), |
||||||
|
(431, NepOidSpec { oid: NepOid::PROTO_VAR_DIF_VIF, hasindex: true, readonly: false, neptype: NepType::OCTETS, name: "PROTO_VAR_DIF_VIF" }), |
||||||
|
(432, NepOidSpec { oid: NepOid::PROTO_VAR_OPTO, hasindex: true, readonly: false, neptype: NepType::STRING, name: "PROTO_VAR_OPTO" }), |
||||||
|
(433, NepOidSpec { oid: NepOid::PROTO_VAR_MODBUS_REGISTER, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "PROTO_VAR_MODBUS_REGISTER" }), |
||||||
|
(434, NepOidSpec { oid: NepOid::PROTO_VAR_MODBUS_FUNC, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "PROTO_VAR_MODBUS_FUNC" }), |
||||||
|
(435, NepOidSpec { oid: NepOid::PROTO_VAR_MODBUS_TYPE, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "PROTO_VAR_MODBUS_TYPE" }), |
||||||
|
(436, NepOidSpec { oid: NepOid::PROTO_OUT_OID, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "PROTO_OUT_OID" }), |
||||||
|
(437, NepOidSpec { oid: NepOid::PROTO_OUT_IDX, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "PROTO_OUT_IDX" }), |
||||||
|
(438, NepOidSpec { oid: NepOid::PROTO_OUT_DIFVIF, hasindex: true, readonly: false, neptype: NepType::OCTETS, name: "PROTO_OUT_DIFVIF" }), |
||||||
|
(439, NepOidSpec { oid: NepOid::PROTO_DEC, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "PROTO_DEC" }), |
||||||
|
(452, NepOidSpec { oid: NepOid::ALARM_INDEX, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "ALARM_INDEX" }), |
||||||
|
(453, NepOidSpec { oid: NepOid::ALARM_TYPE, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "ALARM_TYPE" }), |
||||||
|
(454, NepOidSpec { oid: NepOid::ALARM_BIT, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "ALARM_BIT" }), |
||||||
|
(459, NepOidSpec { oid: NepOid::SEND_MASK, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "SEND_MASK" }), |
||||||
|
(460, NepOidSpec { oid: NepOid::MODEM_IMEI, hasindex: true, readonly: true, neptype: NepType::STRING, name: "MODEM_IMEI" }), |
||||||
|
(461, NepOidSpec { oid: NepOid::MODEM_CCID, hasindex: true, readonly: true, neptype: NepType::STRING, name: "MODEM_CCID" }), |
||||||
|
(462, NepOidSpec { oid: NepOid::MODEM_LAST_RSSI, hasindex: true, readonly: true, neptype: NepType::NUMBER, name: "MODEM_LAST_RSSI" }), |
||||||
|
(463, NepOidSpec { oid: NepOid::Modem_APN, hasindex: true, readonly: false, neptype: NepType::STRING, name: "Modem_APN" }), |
||||||
|
(464, NepOidSpec { oid: NepOid::MODEM_PIN, hasindex: true, readonly: false, neptype: NepType::STRING, name: "MODEM_PIN" }), |
||||||
|
(465, NepOidSpec { oid: NepOid::MODEM_SENDPKT, hasindex: true, readonly: true, neptype: NepType::UNUMBER, name: "MODEM_SENDPKT" }), |
||||||
|
(466, NepOidSpec { oid: NepOid::MODEM_RECVPKT, hasindex: true, readonly: true, neptype: NepType::UNUMBER, name: "MODEM_RECVPKT" }), |
||||||
|
(467, NepOidSpec { oid: NepOid::MODEM_IMSI, hasindex: true, readonly: true, neptype: NepType::STRING, name: "MODEM_IMSI" }), |
||||||
|
(468, NepOidSpec { oid: NepOid::MODEM_SESTIMEOUT, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "MODEM_SESTIMEOUT" }), |
||||||
|
(469, NepOidSpec { oid: NepOid::MODEM_FLAGS, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "MODEM_FLAGS" }), |
||||||
|
(470, NepOidSpec { oid: NepOid::MODEM_TEST_IP, hasindex: true, readonly: false, neptype: NepType::IP, name: "MODEM_TEST_IP" }), |
||||||
|
(500, NepOidSpec { oid: NepOid::RADAR_TYPE, hasindex: true, readonly: true, neptype: NepType::NUMBER, name: "RADAR_TYPE" }), |
||||||
|
(501, NepOidSpec { oid: NepOid::RADAR_IDENT, hasindex: true, readonly: true, neptype: NepType::STRING, name: "RADAR_IDENT" }), |
||||||
|
(502, NepOidSpec { oid: NepOid::RADAR_TIMESTAMP, hasindex: true, readonly: true, neptype: NepType::UNUMBER, name: "RADAR_TIMESTAMP" }), |
||||||
|
(503, NepOidSpec { oid: NepOid::RADAR_RSSI, hasindex: true, readonly: true, neptype: NepType::NUMBER, name: "RADAR_RSSI" }), |
||||||
|
(504, NepOidSpec { oid: NepOid::RADAR_STATUS, hasindex: true, readonly: true, neptype: NepType::NUMBER, name: "RADAR_STATUS" }), |
||||||
|
(552, NepOidSpec { oid: NepOid::GW_UDP_DST_PORT, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "GW_UDP_DST_PORT" }), |
||||||
|
(553, NepOidSpec { oid: NepOid::GW_UDP_SRC_PORT, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "GW_UDP_SRC_PORT" }), |
||||||
|
(554, NepOidSpec { oid: NepOid::GW_DST_IP_ADDR, hasindex: true, readonly: false, neptype: NepType::IP, name: "GW_DST_IP_ADDR" }), |
||||||
|
(555, NepOidSpec { oid: NepOid::GW_UDP_HEARTBEAT, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "GW_UDP_HEARTBEAT" }), |
||||||
|
(556, NepOidSpec { oid: NepOid::GW_IP_TIMEOUT, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "GW_IP_TIMEOUT" }), |
||||||
|
(557, NepOidSpec { oid: NepOid::GW_MSG_SENT, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "GW_MSG_SENT" }), |
||||||
|
(600, NepOidSpec { oid: NepOid::CONFIGVERSION, hasindex: true, readonly: true, neptype: NepType::NUMBER, name: "CONFIGVERSION" }), |
||||||
|
(601, NepOidSpec { oid: NepOid::CONFIGTYPE, hasindex: true, readonly: true, neptype: NepType::UNUMBER, name: "CONFIGTYPE" }), |
||||||
|
(602, NepOidSpec { oid: NepOid::CONFIGVAL, hasindex: true, readonly: true, neptype: NepType::STRING, name: "CONFIGVAL" }), |
||||||
|
(1000, NepOidSpec { oid: NepOid::EZS1_UPTIME, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_UPTIME" }), |
||||||
|
(1001, NepOidSpec { oid: NepOid::EZS1_MUPC, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_MUPC" }), |
||||||
|
(1002, NepOidSpec { oid: NepOid::EZS1_MLSF, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_MLSF" }), |
||||||
|
(1003, NepOidSpec { oid: NepOid::EZS1_MSfAT, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_MSfAT" }), |
||||||
|
(1004, NepOidSpec { oid: NepOid::EZS1_MSFPF, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_MSFPF" }), |
||||||
|
(1005, NepOidSpec { oid: NepOid::EZS1_MGFLG, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_MGFLG" }), |
||||||
|
(1006, NepOidSpec { oid: NepOid::EZS1_MSFLG, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_MSFLG" }), |
||||||
|
(1007, NepOidSpec { oid: NepOid::EZS1_MTFLG, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_MTFLG" }), |
||||||
|
(1008, NepOidSpec { oid: NepOid::EZS1_MSMSI, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_MSMSI" }), |
||||||
|
(1009, NepOidSpec { oid: NepOid::EZS1_MDKEP, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_MDKEP" }), |
||||||
|
(1010, NepOidSpec { oid: NepOid::EZS1_MDKET, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_MDKET" }), |
||||||
|
(1011, NepOidSpec { oid: NepOid::EZS1_MIDK, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_MIDK" }), |
||||||
|
(1012, NepOidSpec { oid: NepOid::EZS1_MLVDK, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_MLVDK" }), |
||||||
|
(1013, NepOidSpec { oid: NepOid::EZS1_MSA, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_MSA" }), |
||||||
|
(1014, NepOidSpec { oid: NepOid::EZS1_MST, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_MST" }), |
||||||
|
(1015, NepOidSpec { oid: NepOid::EZS1_MEVP, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_MEVP" }), |
||||||
|
(1016, NepOidSpec { oid: NepOid::EZS1_MPPIC, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_MPPIC" }), |
||||||
|
(1017, NepOidSpec { oid: NepOid::EZS1_MSFTO, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_MSFTO" }), |
||||||
|
(1018, NepOidSpec { oid: NepOid::EZS1_MSFF, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_MSFF" }), |
||||||
|
(1019, NepOidSpec { oid: NepOid::EZS1_MSFL, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_MSFL" }), |
||||||
|
(1020, NepOidSpec { oid: NepOid::EZS1_MLDK, hasindex: false, readonly: false, neptype: NepType::STRING, name: "EZS1_MLDK" }), |
||||||
|
(1030, NepOidSpec { oid: NepOid::EZS1_PIN, hasindex: false, readonly: false, neptype: NepType::STRING, name: "EZS1_PIN" }), |
||||||
|
(1031, NepOidSpec { oid: NepOid::EZS1_ALARMTIME, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_ALARMTIME" }), |
||||||
|
(1032, NepOidSpec { oid: NepOid::EZS1_SIGLOW, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_SIGLOW" }), |
||||||
|
(1033, NepOidSpec { oid: NepOid::EZS1_SIGHIGH, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_SIGHIGH" }), |
||||||
|
(1050, NepOidSpec { oid: NepOid::EZS1_ALRMAX, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_ALRMAX" }), |
||||||
|
(1051, NepOidSpec { oid: NepOid::EZS1_ALRCONF, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_ALRCONF" }), |
||||||
|
(1052, NepOidSpec { oid: NepOid::EZS1_ALRMSG, hasindex: true, readonly: false, neptype: NepType::STRING, name: "EZS1_ALRMSG" }), |
||||||
|
(1055, NepOidSpec { oid: NepOid::EZS1_NGSMAX, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_NGSMAX" }), |
||||||
|
(1056, NepOidSpec { oid: NepOid::EZS1_NGSCONF, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_NGSCONF" }), |
||||||
|
(1057, NepOidSpec { oid: NepOid::NGS_MSG, hasindex: true, readonly: false, neptype: NepType::STRING, name: "NGS_MSG" }), |
||||||
|
(1060, NepOidSpec { oid: NepOid::EZS1_PCOMAX, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_PCOMAX" }), |
||||||
|
(1061, NepOidSpec { oid: NepOid::EZS1_PCOCONF, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_PCOCONF" }), |
||||||
|
(1062, NepOidSpec { oid: NepOid::EZS1_PCOMSG, hasindex: true, readonly: false, neptype: NepType::STRING, name: "EZS1_PCOMSG" }), |
||||||
|
(1070, NepOidSpec { oid: NepOid::EZS1_DKMAX, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_DKMAX" }), |
||||||
|
(1071, NepOidSpec { oid: NepOid::EZS1_DKCONF, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_DKCONF" }), |
||||||
|
(1072, NepOidSpec { oid: NepOid::EZS1_DKCODE, hasindex: true, readonly: false, neptype: NepType::STRING, name: "EZS1_DKCODE" }), |
||||||
|
(1080, NepOidSpec { oid: NepOid::EZS1_TLFMAX, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_TLFMAX" }), |
||||||
|
(1081, NepOidSpec { oid: NepOid::EZS1_TLFCONG, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_TLFCONG" }), |
||||||
|
(1082, NepOidSpec { oid: NepOid::EZS1_TLFNUM, hasindex: true, readonly: false, neptype: NepType::STRING, name: "EZS1_TLFNUM" }), |
||||||
|
(1090, NepOidSpec { oid: NepOid::EZS1_PRGOUTMAX, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_PRGOUTMAX" }), |
||||||
|
(1091, NepOidSpec { oid: NepOid::EZS1_PRGOUTCONF, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_PRGOUTCONF" }), |
||||||
|
(1092, NepOidSpec { oid: NepOid::EZS1_PRGOUTTOUT, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_PRGOUTTOUT" }), |
||||||
|
(1093, NepOidSpec { oid: NepOid::EZS1_PRGOUTVAL, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_PRGOUTVAL" }), |
||||||
|
(1094, NepOidSpec { oid: NepOid::EZS1_PRGOUTTREST, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_PRGOUTTREST" }), |
||||||
|
(1100, NepOidSpec { oid: NepOid::EZS1_ZONEMAX, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_ZONEMAX" }), |
||||||
|
(1101, NepOidSpec { oid: NepOid::EZS1_ZONECONF, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_ZONECONF" }), |
||||||
|
(1102, NepOidSpec { oid: NepOid::EZS1_ZONENAME, hasindex: true, readonly: false, neptype: NepType::STRING, name: "EZS1_ZONENAME" }), |
||||||
|
(1103, NepOidSpec { oid: NepOid::EZS1_ZONETOUT, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_ZONETOUT" }), |
||||||
|
(1104, NepOidSpec { oid: NepOid::EZS1_ZONEBYTES, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_ZONEBYTES" }), |
||||||
|
(1105, NepOidSpec { oid: NepOid::EZS1_ZONEMTOUT, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_ZONEMTOUT" }), |
||||||
|
(1110, NepOidSpec { oid: NepOid::EZS1_ANLPMAX, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_ANLPMAX" }), |
||||||
|
(1111, NepOidSpec { oid: NepOid::EZS1_ANLPCONF, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_ANLPCONF" }), |
||||||
|
(1112, NepOidSpec { oid: NepOid::EZS1_ANLPZONE, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_ANLPZONE" }), |
||||||
|
(1113, NepOidSpec { oid: NepOid::EZS1_ANLPTOUT, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_ANLPTOUT" }), |
||||||
|
(1114, NepOidSpec { oid: NepOid::EZS1_ANLPSHORT, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_ANLPSHORT" }), |
||||||
|
(1115, NepOidSpec { oid: NepOid::EZS1_ANLPOPEN, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_ANLPOPEN" }), |
||||||
|
(1116, NepOidSpec { oid: NepOid::EZS1_Z1, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_Z1" }), |
||||||
|
(1117, NepOidSpec { oid: NepOid::EZS1_Z2, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_Z2" }), |
||||||
|
(1118, NepOidSpec { oid: NepOid::EZS1_Z1_Z2, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_Z1_Z2" }), |
||||||
|
(1119, NepOidSpec { oid: NepOid::EZS1_ANLPMBYTES, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_ANLPMBYTES" }), |
||||||
|
(1120, NepOidSpec { oid: NepOid::EZS1_ANLPMTOUT, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_ANLPMTOUT" }), |
||||||
|
(1140, NepOidSpec { oid: NepOid::EZS1_CONTMAX, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_CONTMAX" }), |
||||||
|
(1141, NepOidSpec { oid: NepOid::EZS1_CONTCONF, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_CONTCONF" }), |
||||||
|
(1142, NepOidSpec { oid: NepOid::EZS1_CONTZONE, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_CONTZONE" }), |
||||||
|
(1143, NepOidSpec { oid: NepOid::EZS1_CONTTOUT, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_CONTTOUT" }), |
||||||
|
(1144, NepOidSpec { oid: NepOid::EZS1_CONTMBYTE, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_CONTMBYTE" }), |
||||||
|
(1145, NepOidSpec { oid: NepOid::EZS1_CONTMTOUT, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "EZS1_CONTMTOUT" }), |
||||||
|
(8000, NepOidSpec { oid: NepOid::DIGIN, hasindex: false, readonly: true, neptype: NepType::OCTETS, name: "DIGIN" }), |
||||||
|
(8001, NepOidSpec { oid: NepOid::ANALOGIN, hasindex: true, readonly: true, neptype: NepType::UNUMBER, name: "ANALOGIN" }), |
||||||
|
(8002, NepOidSpec { oid: NepOid::PWMOUT, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "PWMOUT" }), |
||||||
|
(8003, NepOidSpec { oid: NepOid::TMRPERIOD, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "TMRPERIOD" }), |
||||||
|
(8004, NepOidSpec { oid: NepOid::TMRDUTY, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "TMRDUTY" }), |
||||||
|
(8007, NepOidSpec { oid: NepOid::STATUS, hasindex: false, readonly: false, neptype: NepType::OCTETS, name: "STATUS" }), |
||||||
|
(8008, NepOidSpec { oid: NepOid::TMRIN, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "TMRIN" }), |
||||||
|
(8021, NepOidSpec { oid: NepOid::CURRENT_PGM, hasindex: false, readonly: false, neptype: NepType::STRING, name: "CURRENT_PGM" }), |
||||||
|
(8022, NepOidSpec { oid: NepOid::PGM_TIME, hasindex: false, readonly: false, neptype: NepType::UNUMBER, name: "PGM_TIME" }), |
||||||
|
(8023, NepOidSpec { oid: NepOid::PGM_LIST, hasindex: true, readonly: false, neptype: NepType::STRING, name: "PGM_LIST" }), |
||||||
|
(8024, NepOidSpec { oid: NepOid::CAN_SPEED, hasindex: true, readonly: false, neptype: NepType::UNUMBER, name: "CAN_SPEED" }), |
||||||
|
(8030, NepOidSpec { oid: NepOid::BIN_OUTPUTS, hasindex: false, readonly: false, neptype: NepType::OCTETS, name: "BIN_OUTPUTS" }), |
||||||
|
(8031, NepOidSpec { oid: NepOid::REZISTORS, hasindex: false, readonly: false, neptype: NepType::OCTETS, name: "REZISTORS" }), |
||||||
|
]); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
pub fn parse(payload: &[u8]) -> Result<Vec<NepEntry>, NepError> { |
||||||
|
let hp_len = payload.len() as u64; |
||||||
|
let mut hp = Cursor::new(payload); |
||||||
|
|
||||||
|
let mut parsed = vec![]; |
||||||
|
|
||||||
|
while hp.position() < hp_len { |
||||||
|
let mut entry_start = hp.position(); |
||||||
|
let mut entry_end = 0; |
||||||
|
|
||||||
|
let mut oid = hp.read_u8()? as u16; |
||||||
|
//Log::debug("OID byte ".sprintf("0x%02x", oid));
|
||||||
|
|
||||||
|
let long_oid = (oid & 0x80) != 0; |
||||||
|
let has_index = (oid & 0x40) != 0; |
||||||
|
oid = oid & 0x3F; |
||||||
|
if long_oid { |
||||||
|
//Log::debug("Long OID");
|
||||||
|
oid <<= 8; |
||||||
|
let oid_lsb = hp.read_u8()?; |
||||||
|
//Log::debug("OID LSB ".sprintf("0x%02x", oid_lsb));
|
||||||
|
oid |= oid_lsb as u16; |
||||||
|
} |
||||||
|
|
||||||
|
let mut index = 0; |
||||||
|
if has_index { |
||||||
|
//Log::debug("Has index");
|
||||||
|
|
||||||
|
index = hp.read_u8()? as u16; |
||||||
|
//Log::debug("Index byte ".sprintf("0x%02x", index));
|
||||||
|
let long_index = (index & 0x80) != 0; |
||||||
|
index &= 0x7F; |
||||||
|
|
||||||
|
if long_index { |
||||||
|
//Log::debug("Long index");
|
||||||
|
index <<= 8; |
||||||
|
let index_lsb = hp.read_u8()?; |
||||||
|
//Log::debug("Index LSB ".sprintf("0x%02x", index_lsb));
|
||||||
|
index |= index_lsb as u16; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// \Log::debug("OID " . sprintf(long_oid ? "0x%04x" : "0x%02x", oid)
|
||||||
|
// . " (".oid."), index " . sprintf(longIndex ? "0x%04x" : "0x%02x", index));
|
||||||
|
|
||||||
|
let mut bad = false; |
||||||
|
let nepoid; |
||||||
|
let expected_type = if let Some(spec) = OID_TABLE.get(&oid) { |
||||||
|
nepoid = spec.oid; |
||||||
|
spec.neptype |
||||||
|
} else { |
||||||
|
warn!("Bad NEP oid"); |
||||||
|
bad = true; |
||||||
|
nepoid = NepOid::RESET; // Dummy
|
||||||
|
NepType::INVALID |
||||||
|
}; |
||||||
|
|
||||||
|
let mut neptype = 0; |
||||||
|
|
||||||
|
let specbyte = hp.read_u8()?; |
||||||
|
//Log::debug("Specbyte ".sprintf("0x%02x", specbyte));
|
||||||
|
|
||||||
|
let fieldlen = if 0 != (specbyte & 0x80) { |
||||||
|
//Log::debug("Long type/len");
|
||||||
|
|
||||||
|
// long format
|
||||||
|
neptype = specbyte & 0x7F; |
||||||
|
|
||||||
|
let mut tmplen = hp.read_u8()? as u16; |
||||||
|
if 0 != (tmplen & 0x80) { |
||||||
|
//Log::debug("Double long len");
|
||||||
|
// double length
|
||||||
|
let len_lsb = hp.read_u8()?; |
||||||
|
tmplen = ((tmplen & 0x7F) << 8) | (len_lsb as u16); |
||||||
|
} |
||||||
|
tmplen |
||||||
|
} else { |
||||||
|
//Log::debug("Short type and len");
|
||||||
|
neptype = (specbyte & 0x70) >> 4; |
||||||
|
(specbyte & 0x0F) as u16 |
||||||
|
}; |
||||||
|
|
||||||
|
if neptype > 7 { |
||||||
|
warn!("Bad NEP type"); |
||||||
|
bad = true; |
||||||
|
} |
||||||
|
|
||||||
|
if neptype != expected_type as u8 { |
||||||
|
trace!("OID non-standard type {}, expected {}", neptype, expected_type as u8); |
||||||
|
} |
||||||
|
|
||||||
|
trace!("oid {oid}, type {neptype}, len {fieldlen}"); |
||||||
|
|
||||||
|
if bad { |
||||||
|
debug!("Skip bad entry"); |
||||||
|
hp.consume(fieldlen as usize); |
||||||
|
continue; |
||||||
|
} |
||||||
|
|
||||||
|
let value = match NepType::from(neptype) { |
||||||
|
NepType::STRING => { |
||||||
|
let mut buf = vec![0; fieldlen as usize]; |
||||||
|
hp.read_exact(&mut buf[..])?; |
||||||
|
NepValue::String(String::from_utf8_lossy(&buf).to_string()) |
||||||
|
} |
||||||
|
NepType::OCTETS => { |
||||||
|
let mut buf = vec![0; fieldlen as usize]; |
||||||
|
hp.read_exact(&mut buf[..])?; |
||||||
|
NepValue::Octets(buf) |
||||||
|
} |
||||||
|
NepType::UNUMBER => { |
||||||
|
match fieldlen { |
||||||
|
4 => NepValue::Unumber(hp.read_u32::<BigEndian>()?), |
||||||
|
3 => NepValue::Unumber(hp.read_u24::<BigEndian>()? as u32), |
||||||
|
2 => NepValue::Unumber(hp.read_u16::<BigEndian>()? as u32), |
||||||
|
1 => NepValue::Unumber(hp.read_u8()? as u32), |
||||||
|
_ => { |
||||||
|
debug!("Skip bad entry (unumber bad len)"); |
||||||
|
hp.consume(fieldlen as usize); |
||||||
|
continue; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
NepType::NUMBER => { |
||||||
|
match fieldlen { |
||||||
|
4 => NepValue::Number(hp.read_i32::<BigEndian>()?), |
||||||
|
3 => NepValue::Number(hp.read_i24::<BigEndian>()? as i32), |
||||||
|
2 => NepValue::Number(hp.read_i16::<BigEndian>()? as i32), |
||||||
|
1 => NepValue::Number(hp.read_i8()? as i32), |
||||||
|
_ => { |
||||||
|
debug!("Skip bad entry (number bad len)"); |
||||||
|
hp.consume(fieldlen as usize); |
||||||
|
continue; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
NepType::OID => { |
||||||
|
match fieldlen { |
||||||
|
2 => NepValue::Oid(hp.read_u16::<BigEndian>()? as u16), |
||||||
|
1 => NepValue::Oid(hp.read_u8()? as u16), |
||||||
|
_ => { |
||||||
|
debug!("Skip bad entry (OID bad len)"); |
||||||
|
hp.consume(fieldlen as usize); |
||||||
|
continue; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
NepType::IP => { |
||||||
|
if fieldlen != 4 { |
||||||
|
debug!("Skip bad entry (IP bad len)"); |
||||||
|
hp.consume(fieldlen as usize); |
||||||
|
continue; |
||||||
|
} |
||||||
|
let mut buf = [0; 4]; |
||||||
|
hp.read_exact(&mut buf[..])?; |
||||||
|
NepValue::IP(buf) |
||||||
|
} |
||||||
|
NepType::FLOAT => { |
||||||
|
if fieldlen != 4 { |
||||||
|
debug!("Skip bad entry (float bad len)"); |
||||||
|
hp.consume(fieldlen as usize); |
||||||
|
continue; |
||||||
|
} |
||||||
|
NepValue::Float(hp.read_f32::<BigEndian>()?) |
||||||
|
} |
||||||
|
NepType::NULL => { |
||||||
|
NepValue::Null |
||||||
|
} |
||||||
|
NepType::INVALID => { |
||||||
|
debug!("Skip bad entry (unknown type)"); |
||||||
|
hp.consume(fieldlen as usize); |
||||||
|
continue; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
if oid == NepOid::MSGTYPE as u16 && value == NepValue::Unumber(127) { |
||||||
|
return Err(NepError::Encrypted); |
||||||
|
} |
||||||
|
|
||||||
|
parsed.push(NepEntry { |
||||||
|
oid: nepoid, |
||||||
|
index, |
||||||
|
value, |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
Ok(parsed) |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
#[cfg(test)] |
||||||
|
mod tests { |
||||||
|
use super::*; |
||||||
|
|
||||||
|
#[test] |
||||||
|
fn test_decode() { |
||||||
|
simple_logging::log_to_stderr(log::LevelFilter::Debug); |
||||||
|
|
||||||
|
//let bytes = hex::decode("3f210602220352032101041f3836333730333033323337353635360c2303a0203d210bc069013200bfc06a01320e4dc1ce0131ab1124609c5df0c064012103c0640221001124609c6c00c064012103c0640221001124609c7a10c064012103c0640221001124609c8820c064012103c0640221001124609c9630c064012103c0640221001124609ca440c064012103c064022100").unwrap();
|
||||||
|
let bytes = hex::decode("3f2106c0d801319dc0d7018180adac4424348044041950077aea0000002f2f0413106c0100046d1e29c82904fd17010100000e780594562019004413e7130100426cbf2c840113886a010082016cdf28d3013b930300c4016d372fd4218104fd280182046cdf28840413886a0100c40413b8620100840513bb590100c40513de51010084061342480100c40613cc3b0100840713a92d0100c40713a9200100840813e7130100c40813cd06010084091341fa0000c40913b3ee0000").unwrap(); |
||||||
|
|
||||||
|
let parsed = super::parse(&bytes); |
||||||
|
|
||||||
|
eprintln!("Decoded: {:#?}", parsed.unwrap()); |
||||||
|
|
||||||
|
// TODO verify values
|
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue