I'm reffering to this part of code from dscKeybusPrintData.cpp:
void dscKeybusInterface::printPanelAccessCode(byte dscCode) {
if (dscCode >= 35) dscCode += 5;
switch (dscCode) {
case 33: stream->print(F("Duress ")); break;
case 34: stream->print(F("Duress ")); break;
case 40: stream->print(F("Master ")); break;
case 41: stream->print(F("Supervisor ")); break;
case 42: stream->print(F("Supervisor ")); break;
default: stream->print(F("User ")); break;
}
stream->print(F("code "));
stream->print(dscCode);
}
Panel versions v1.0 - v1.2 use following scheme for user codes:
1-32: regular user codes
33: Partition 1 duress codes
34: Partition 2 duress codes
40: System master code
41: Partition 1 master code
42: Partition 2 master code
Panel versions v1.2 - v4.1 use following scheme for user codes:
1-32: regular user codes
33-34: duress codes
40: master code
41-42: supervisor code
Panel versions v4.2 - v4.7 use following scheme for user codes:
PC1616: User 1-48, with 40 being master code
PC1832: same as above, with addition of 49-72
PC1864: same as above, with addition of 73-95
Each user code can be set as duress or enabled/disabled for *1/*5/*6 access.
Source: dozens of PowerSeries installation manuals thru different versions.
EDIT: my pc1832 correctly accepts codes until access code 75, instead of 72 as manual says ?!? (I'll test how much codes PC1616 accepts).
I dont belive that PC1864 would be able to do 97 user codes (*5 section 98 is for partition assigment and 99 for attributes) as in array order is *5 user75 = 0x81 and *6 user1 = 0x96. So it perfectly fits 95 users as maximum in *5 range and then start with *6.
Or, if saving panel version and reading it afterwards will took memory space which can be useful for other things, maybe just leave master code and remove the othes ones? But having panel version loaded in memory will be nice addition, as for example DSC panels share same features thru panel versions (for example, every panel after version v3.0 use single group of 8 zones for PC5108 expander and have 16 zone definitions in section 001).
PS: access codes 33-39 and 43+ for newer panel versions are in different printPanelStatus, so no conflicts with 41-42 user codes.
EDIT: I did some user decoding, you can view it on my repo. Decoded *1, *2, *3, *5, *6 and *7/Access code for users 35..39 and 43..95 which panel version 4.2+ supports. It works fine but code is little messy, I need to clean it up and write some comments/notes. I tested only with user codes 1-75 which is supported on my panel (PC1832). About code optimizing, Im sure it can be done (like, to have printPanelAccessCode only one time per *action, not twice for range 35-39 and 43-95. I also decoded arming/disarming for same user codes, but didnt implement it yet. I have big problems with overlaping user codes 35-39 as printPanelAccessCode increases every user code by 5, starting with user 35. Only user code 43-95 is included in my repo, with user codes above 75 pending testing from someone with PC1864, but range matches fine.
I'm reffering to this part of code from
dscKeybusPrintData.cpp:Panel versions
v1.0-v1.2use following scheme for user codes:1-32: regular user codes
33: Partition 1 duress codes
34: Partition 2 duress codes
40: System master code
41: Partition 1 master code
42: Partition 2 master code
Panel versions
v1.2-v4.1use following scheme for user codes:1-32: regular user codes
33-34: duress codes
40: master code
41-42: supervisor code
Panel versions
v4.2-v4.7use following scheme for user codes:PC1616: User 1-48, with 40 being master code
PC1832: same as above, with addition of 49-72
PC1864: same as above, with addition of 73-95
Each user code can be set as duress or enabled/disabled for *1/*5/*6 access.
Source: dozens of PowerSeries installation manuals thru different versions.
EDIT: my pc1832 correctly accepts codes until access code 75, instead of 72 as manual says ?!? (I'll test how much codes PC1616 accepts).
I dont belive that PC1864 would be able to do 97 user codes (*5 section 98 is for partition assigment and 99 for attributes) as in array order is *5 user75 = 0x81 and *6 user1 = 0x96. So it perfectly fits 95 users as maximum in *5 range and then start with *6.
Or, if saving panel version and reading it afterwards will took memory space which can be useful for other things, maybe just leave master code and remove the othes ones? But having panel version loaded in memory will be nice addition, as for example DSC panels share same features thru panel versions (for example, every panel after version
v3.0use single group of 8 zones for PC5108 expander and have 16 zone definitions in section 001).PS: access codes 33-39 and 43+ for newer panel versions are in different printPanelStatus, so no conflicts with 41-42 user codes.
EDIT: I did some user decoding, you can view it on my repo. Decoded *1, *2, *3, *5, *6 and *7/Access code for users 35..39 and 43..95 which panel version 4.2+ supports. It works fine but code is little messy, I need to clean it up and write some comments/notes. I tested only with user codes 1-75 which is supported on my panel (PC1832). About code optimizing, Im sure it can be done (like, to have printPanelAccessCode only one time per *action, not twice for range 35-39 and 43-95. I also decoded arming/disarming for same user codes, but didnt implement it yet. I have big problems with overlaping user codes 35-39 as printPanelAccessCode increases every user code by 5, starting with user 35. Only user code 43-95 is included in my repo, with user codes above 75 pending testing from someone with PC1864, but range matches fine.