export enum ADDRESS_MODE {
    bound = 0, //Use one or more bound nodes/endpoints, with acknowledgements
    group = 1, //Use a pre-defined group address, with acknowledgements
    short = 2, //Use a 16-bit network address, with acknowledgements
    ieee = 3, //Use a 64-bit IEEE/MAC address, with acknowledgements
    broadcast = 4, //Perform a broadcast
    no_transmit = 5, //Do not transmit
    bound_no_ack = 6, //Perform a bound transmission, with no acknowledgements
    short_no_ack = 7, //Perform a transmission using a 16-bit network address, with no acknowledgements
    ieee_no_ack = 8, //Perform a transmission using a 64-bit IEEE/MAC address, with no acknowledgements
    bound_non_blocking = 9, //Perform a non-blocking bound transmission, with acknowledgements
    bound_non_blocking_no_ack = 10, //Perform a non-blocking bound transmission, with no acknowledgements
}

export enum DEVICE_TYPE {
    coordinator = 0,
    router = 1,
    legacy_router = 2,
}

export enum BOOLEAN {
    false = 0x00,
    true = 0x01,
}

export enum NODE_LOGICAL_TYPE {
    coordinator = 0x00,
    router = 0x01,
    end_device = 0x02,
}

export enum STATUS {
    success = 0,
    invalid_params = 1,
    unhandled_command = 2,
    command_failed = 3,
    busy = 4, //Node is carrying out a lengthy operation and is currently unable to handle the incoming command
    stack_already_started = 5, //Stack already started (no new configuration accepted)
}

export enum PERMIT_JOIN_STATUS {
    on = 1, // devices are allowed to join network
    off = 0, // devices are not allowed join the network
}

export enum NETWORK_JOIN_STATUS {
    joined_existing_network = 0,
    formed_new_network = 1,
    failed_128 = 128, //network join failed (error 0x80)
    failed_129 = 129, //network join failed (error 0x81)
    failed_130 = 130, //network join failed (error 0x82)
    failed_131 = 131, //network join failed (error 0x83)
    failed_132 = 132, //network join failed (error 0x84)
    failed_133 = 133, //network join failed (error 0x85)
    failed_134 = 134, //network join failed (error 0x86)
    failed_135 = 135, //network join failed (error 0x87)
    failed_136 = 136, //network join failed (error 0x88)
    failed_137 = 137, //network join failed (error 0x89)
    failed_138 = 138, //network join failed (error 0x8a)
    failed_139 = 139, //network join failed (error 0x8b)
    failed_140 = 140, //network join failed (error 0x8c)
    failed_141 = 141, //network join failed (error 0x8d)
    failed_142 = 142, //network join failed (error 0x8e)
    failed_143 = 143, //network join failed (error 0x8f)
    failed_144 = 144, //network join failed (error 0x90)
    failed_145 = 145, //network join failed (error 0x91)
    failed_146 = 146, //network join failed (error 0x92)
    failed_147 = 147, //network join failed (error 0x93)
    failed_148 = 148, //network join failed (error 0x94)
    failed_149 = 149, //network join failed (error 0x95)
    failed_150 = 150, //network join failed (error 0x96)
    failed_151 = 151, //network join failed (error 0x97)
    failed_152 = 152, //network join failed (error 0x98)
    failed_153 = 153, //network join failed (error 0x99)
    failed_154 = 154, //network join failed (error 0x9a)
    failed_155 = 155, //network join failed (error 0x9b)
    failed_156 = 156, //network join failed (error 0x9c)
    failed_157 = 157, //network join failed (error 0x9d)
    failed_158 = 158, //network join failed (error 0x9e)
    failed_159 = 159, //network join failed (error 0x9f)
    failed_160 = 160, //network join failed (error 0xa0)
    failed_161 = 161, //network join failed (error 0xa1)
    failed_162 = 162, //network join failed (error 0xa2)
    failed_163 = 163, //network join failed (error 0xa3)
    failed_164 = 164, //network join failed (error 0xa4)
    failed_165 = 165, //network join failed (error 0xa5)
    failed_166 = 166, //network join failed (error 0xa6)
    failed_167 = 167, //network join failed (error 0xa7)
    failed_168 = 168, //network join failed (error 0xa8)
    failed_169 = 169, //network join failed (error 0xa9)
    failed_170 = 170, //network join failed (error 0xaa)
    failed_171 = 171, //network join failed (error 0xab)
    failed_172 = 172, //network join failed (error 0xac)
    failed_173 = 173, //network join failed (error 0xad)
    failed_174 = 174, //network join failed (error 0xae)
    failed_175 = 175, //network join failed (error 0xaf)
    failed_176 = 176, //network join failed (error 0xb0)
    failed_177 = 177, //network join failed (error 0xb1)
    failed_178 = 178, //network join failed (error 0xb2)
    failed_179 = 179, //network join failed (error 0xb3)
    failed_180 = 180, //network join failed (error 0xb4)
    failed_181 = 181, //network join failed (error 0xb5)
    failed_182 = 182, //network join failed (error 0xb6)
    failed_183 = 183, //network join failed (error 0xb7)
    failed_184 = 184, //network join failed (error 0xb8)
    failed_185 = 185, //network join failed (error 0xb9)
    failed_186 = 186, //network join failed (error 0xba)
    failed_187 = 187, //network join failed (error 0xbb)
    failed_188 = 188, //network join failed (error 0xbc)
    failed_189 = 189, //network join failed (error 0xbd)
    failed_190 = 190, //network join failed (error 0xbe)
    failed_191 = 191, //network join failed (error 0xbf)
    failed_192 = 192, //network join failed (error 0xc0)
    failed_193 = 193, //network join failed (error 0xc1)
    failed_194 = 194, //network join failed (error 0xc2)
    failed_195 = 195, //network join failed (error 0xc3)
    failed_196 = 196, //network join failed (error 0xc4)
    failed_197 = 197, //network join failed (error 0xc5)
    failed_198 = 198, //network join failed (error 0xc6)
    failed_199 = 199, //network join failed (error 0xc7)
    failed_200 = 200, //network join failed (error 0xc8)
    failed_201 = 201, //network join failed (error 0xc9)
    failed_202 = 202, //network join failed (error 0xca)
    failed_203 = 203, //network join failed (error 0xcb)
    failed_204 = 204, //network join failed (error 0xcc)
    failed_205 = 205, //network join failed (error 0xcd)
    failed_206 = 206, //network join failed (error 0xce)
    failed_207 = 207, //network join failed (error 0xcf)
    failed_208 = 208, //network join failed (error 0xd0)
    failed_209 = 209, //network join failed (error 0xd1)
    failed_210 = 210, //network join failed (error 0xd2)
    failed_211 = 211, //network join failed (error 0xd3)
    failed_212 = 212, //network join failed (error 0xd4)
    failed_213 = 213, //network join failed (error 0xd5)
    failed_214 = 214, //network join failed (error 0xd6)
    failed_215 = 215, //network join failed (error 0xd7)
    failed_216 = 216, //network join failed (error 0xd8)
    failed_217 = 217, //network join failed (error 0xd9)
    failed_218 = 218, //network join failed (error 0xda)
    failed_219 = 219, //network join failed (error 0xdb)
    failed_220 = 220, //network join failed (error 0xdc)
    failed_221 = 221, //network join failed (error 0xdd)
    failed_222 = 222, //network join failed (error 0xde)
    failed_223 = 223, //network join failed (error 0xdf)
    failed_224 = 224, //network join failed (error 0xe0)
    failed_225 = 225, //network join failed (error 0xe1)
    failed_226 = 226, //network join failed (error 0xe2)
    failed_227 = 227, //network join failed (error 0xe3)
    failed_228 = 228, //network join failed (error 0xe4)
    failed_229 = 229, //network join failed (error 0xe5)
    failed_230 = 230, //network join failed (error 0xe6)
    failed_231 = 231, //network join failed (error 0xe7)
    failed_232 = 232, //network join failed (error 0xe8)
    failed_233 = 233, //network join failed (error 0xe9)
    failed_234 = 234, //network join failed (error 0xea)
    failed_235 = 235, //network join failed (error 0xeb)
    failed_236 = 236, //network join failed (error 0xec)
    failed_237 = 237, //network join failed (error 0xed)
    failed_238 = 238, //network join failed (error 0xee)
    failed_239 = 239, //network join failed (error 0xef)
    failed_240 = 240, //network join failed (error 0xf0)
    failed_241 = 241, //network join failed (error 0xf1)
    failed_242 = 242, //network join failed (error 0xf2)
    failed_243 = 243, //network join failed (error 0xf3)
    failed_244 = 244, //network join failed (error 0xf4)
}

export enum ON_OFF_STATUS {
    on = 1,
    off = 0,
}

export enum RESTART_STATUS {
    startup = 0,
    nfn_start = 2,
    running = 6,
}

export enum ZiGateCommandCode {
    GetNetworkState = 0x0009,
    RawMode = 0x0002,
    SetExpendedPANID = 0x0020,
    SetChannelMask = 0x0021,
    GetVersion = 0x0010,
    Reset = 0x0011,
    ErasePersistentData = 0x0012,
    RemoveDevice = 0x0026,
    PermitJoin = 0x0049,
    RawAPSDataRequest = 0x0530,
    GetTimeServer = 0x0017,
    SetTimeServer = 0x0016,
    PermitJoinStatus = 0x0014,
    GetDevicesList = 0x0015,

    StartNetwork = 0x0024,
    StartNetworkScan = 0x0025,
    SetCertification = 0x0019,
    Bind = 0x0030,
    UnBind = 0x0031,

    // ResetFactoryNew = 0x0013,
    OnOff = 0x0092,
    OnOffTimed = 0x0093,
    ActiveEndpoint = 0x0045,
    AttributeDiscovery = 0x0140,
    AttributeRead = 0x0100,
    AttributeWrite = 0x0110,
    DescriptorComplex = 0x0531,
    NodeDescriptor = 0x0042,
    PowerDescriptor = 0x0044,
    SimpleDescriptor = 0x0043,
    SetDeviceType = 0x0023,
    IEEEAddress = 0x0041,
    LED = 0x0018,
    SetTXpower = 0x0806,
    ManagementLQI = 0x004E,
    SetSecurityStateKey = 0x0022,
}


export enum ZiGateMessageCode {
    DeviceAnnounce = 0x004D,
    Status = 0x8000,
    DataIndication = 0x8002,
    ActiveEndpointResponse = 0x8005,
    SimpleDescriptorResponse = 0x8004,
    // NodeDescriptorResponse = 0x8002,
    NetworkState = 0x8009,
    VersionList = 0x8010,
    APSDataConfirm = 0x8011,
    NetworkJoined = 0x8024,
    LeaveIndication = 0x8048,
    RouterDiscoveryConfirm = 0x8701,
    APSDataConfirmFail = 0x8702,
    PermitJoinStatus = 0x8014,
    GetTimeServer = 0x8017,
}

export interface ZiGateObjectPayload {
    [key: string]: string | number | number[] | boolean | Buffer
}
