Inputs as Key Matrix (ICX-AlphaCom)
From Zenitel Wiki
Use Inputs As Key Matrix
If there is a need for more than the 6 inputs available, it is possible to combine inputs in a diode matrix and use the Event Handler to process. By for example using 3 physical inputs it is possible to get 7 virtual inputs.
The different options are:
- 2 Inputs (input 1-2, Virtual Inputs 1-3)
Input 2 | Input 1 | Virtual Input triggered |
0 | 1 | Virtual Input 1 |
1 | 0 | Virtual Input 2 |
1 | 1 | Virtual Input 3 |
0 | 0 | Inputs released |
- 3 Inputs (input 1-3, Virtual Inputs 1-7):
Input 3 | Input 2 | Input 1 | Virtual Input triggered |
0 | 0 | 1 | Virtual Input 1 |
0 | 1 | 0 | Virtual Input 2 |
0 | 1 | 1 | Virtual Input 3 |
1 | 0 | 0 | Virtual Input 4 |
1 | 0 | 1 | Virtual Input 5 |
1 | 1 | 0 | Virtual Input 6 |
1 | 1 | 1 | Virtual Input 7 |
0 | 0 | 0 | Inputs released |
- 4 Inputs (input 1-4, Virtual Input 1-15):
Input 4 | Input 3 | Input 2 | Input 1 | Virtual Input triggered |
0 | 0 | 0 | 1 | Virtual Input 1 |
0 | 0 | 1 | 0 | Virtual Input 2 |
0 | 0 | 1 | 1 | Virtual Input 3 |
0 | 1 | 0 | 0 | Virtual Input 4 |
0 | 1 | 0 | 1 | Virtual Input 5 |
0 | 1 | 1 | 0 | Virtual Input 6 |
0 | 1 | 1 | 1 | Virtual Input 7 |
1 | 0 | 0 | 0 | Virtual Input 8 |
1 | 0 | 0 | 1 | Virtual Input 9 |
1 | 0 | 1 | 0 | Virtual Input 10 |
1 | 0 | 1 | 1 | Virtual Input 11 |
1 | 1 | 0 | 0 | Virtual Input 12 |
1 | 1 | 0 | 1 | Virtual Input 13 |
1 | 1 | 1 | 0 | Virtual Input 14 |
1 | 1 | 1 | 1 | Virtual Input 15 |
0 | 0 | 0 | 0 | Inputs released |
The Virtual Input actions are configured from the Event Handler.
Events
2 events are required to process inputs as a matrix. Shown below are the events required for 15 inputs (2^4). You can expand this to 63 inputs (2^6) if required.
On button press
Here, we use the serial nature of the Event Handler to process the individual inputs.
By assigning a bitwise value to the input, we can add this value to a UDD associated with the physical number.
As each successive input is processed by the event handler, a total sum is derived.
Action commands:
IF %op(%sev(1),=,1)
!Input 1
WUDD %1.PHY %op(%udd(%1.PHY),+,1)
ENDIF
IF %op(%sev(1),=,2)
!Input 2
WUDD %1.PHY %op(%udd(%1.PHY),+,2)
ENDIF
IF %op(%sev(1),=,3)
!Input 3
WUDD %1.PHY %op(%udd(%1.PHY),+,4)
ENDIF
IF %op(%sev(1),=,4)
!Input 4
WUDD %1.PHY %op(%udd(%1.PHY),+,8)
ENDIF
On button release
Here, we again rely on the serial processing of the input release.
First we check if the UDD has a value other than 0.
Then we check the value of the UDD and process the required command. This can be a $DD, $DIAL_DAK, $SM or any other DP command.
After the first round of processing, the UDD is returned to 0 so that successive input release commands do not execute.
IF %udd(%1.phy)
IF %op(%udd(%1.phy),=,1)
!Virtual Input 1
$DD L%1.DIR L101
ENDIF
IF %op(%udd(%1.phy),=,2)
!Virtual Input 2
$DD L%1.DIR L102
ENDIF
IF %op(%udd(%1.phy),=,3)
!Virtual Input 3
$DD L%1.DIR L103
ENDIF
IF %op(%udd(%1.phy),=,4)
!Virtual Input 4
$DD L%1.DIR L104
ENDIF
IF %op(%udd(%1.phy),=,5)
!Virtual Input 5
$DD L%1.DIR L105
ENDIF
IF %op(%udd(%1.phy),=,6)
!Virtual Input 6
$DD L%1.DIR L106
ENDIF
IF %op(%udd(%1.phy),=,7)
!Virtual Input 7
$DD L%1.DIR L107
ENDIF
IF %op(%udd(%1.phy),=,8)
!Virtual Input 8
$DD L%1.DIR L108
ENDIF
IF %op(%udd(%1.phy),=,9)
!Virtual Input 9
$DD L%1.DIR L109
ENDIF
IF %op(%udd(%1.phy),=,10)
!Virtual Input 10
$DD L%1.DIR L110
ENDIF
IF %op(%udd(%1.phy),=,11)
!Virtual Input 11
$DD L%1.DIR L111
ENDIF
IF %op(%udd(%1.phy),=,12)
!Virtual Input 12
$DD L%1.DIR L112
ENDIF
IF %op(%udd(%1.phy),=,13)
!Virtual Input 13
$DD L%1.DIR L113
ENDIF
IF %op(%udd(%1.phy),=,14)
!Virtual Input 14
$DD L%1.DIR L114
ENDIF
IF %op(%udd(%1.phy),=,15)
!Virtual Input 15
$DD L%1.DIR L115
ENDIF
WUDD %1.phy 0
ENDIF