forked from flarn2006/BHSTools
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconfig_rpt_util.py
59 lines (50 loc) · 1.62 KB
/
config_rpt_util.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
from intellibus import tohex
import struct
def fmt_16bit_hex(n):
return '{:04X}'.format(n)
def make_hexdump(data, width=32):
row_count = len(data) // width
if len(data) % width > 1:
row_count += 1
rows = []
for i in range(row_count):
addr = width*i
row_bytes = data[addr:addr+width]
addr_str = fmt_16bit_hex(addr)
data_row_str = tohex(row_bytes)
ascii_str = ''.join([chr(n) if 32 <= n <= 126 else '.' for n in row_bytes])
rows.append((addr_str, data_row_str, ascii_str))
return rows
def describe_config_block(cmd, arg):
def int16(offset):
return struct.unpack('<H', arg[offset:offset+2])[0]
name = 'Unknown Data'
if cmd == 0xC8:
name = 'Panel Configuration'
elif cmd == 0xC9:
name = 'Communicator {}'.format(int16(2) + 1)
elif cmd == 0xCA:
name = 'Account {}'.format(arg[1] + 1)
elif cmd == 0xCB:
name = 'Keypad {}.{}'.format(arg[1] + 1, arg[2] + 1)
elif cmd == 0xCC:
name = 'Alarm Output'
elif cmd == 0xCE:
name = 'Output {}.{}'.format(int16(2), int16(4) + 1)
elif cmd == 0xCF:
name = 'Area {}.{}'.format(arg[1] + 1, arg[2] + 1)
elif cmd == 0xD0:
name = 'User {}.{}'.format(arg[1] + 1, int16(2) + 1)
elif cmd == 0xD1:
name = 'Zone {}.{}.{}'.format(arg[1] + 1, arg[2] + 1, arg[3] + 1)
elif cmd == 0xD3:
name = 'Device {0} (0x{0:04X})'.format(int16(18))
elif cmd == 0xD5:
name = 'Input {}.{}'.format(int16(4), int16(2) + 1)
elif cmd == 0xD7:
name = 'Installer User'
elif cmd == 0xDA:
name = 'Script {}'.format(int16(4) + 1)
return '[{:04X}] {}'.format(cmd, name)
if __name__ == '__main__':
print('This Python script is designed to be imported as a library, not run directly.')