// vim: autoindent tabstop=8 shiftwidth=4 expandtab softtabstop=4 125 Hz Main Loop +---------------------------------+ | | | | A: Line Sense | / \ | / \ | / \ | / \ yes | / Line \_________________ | \ Detect? / | | \ / | | \ / | | \ / | B: Line in use | \ / no / \ | | / \ | | / \ yes | | / Hold? \_______________________________________ | | I: Idle|Ring \ / | | / \ \ / | | / \ \ / | | / \ \ / no | | yes / \ | | | ________________/ Ring? \ | | | | \ / | F: Active Call | C: Currently on HOLD | | \ / / \ / \ | | \ / / \ / \ | | \ / / \ / \ | | \ / no / \ yes / \ yes | | | / A Lead? \________________ / A Lead? \________________ | | | \ / | \ / | | | | \ / | \ / | | | | \ / | \ / | | | | \ / | \ / no | | | | \ / no | \ / | | | | | | | | | | | | | | | | | | | | | | | | J: Ringing | K: Idle | H: HOLD|Hangup | G: On Call | E: On HOLD | D: Pickup from HOLD | \|/ \|/ \|/ \|/ \|/ \|/ | Line Ringing Line Idle HOLD after 1/20sec Line In Use Call On HOLD Pickup From HOLD __ | +-----------------+ +-----------------+ +-----------------+ +-----------------+ +-----------------+ +-----------------+ | | | 0 -> LX_hold | | 0 -> LX_hold | | 1 -> LX_hold | | 0 -> LX_hold | | 0 -> LX_hold | | 0 -> LX_hold | |-- L1/L2_hold | +-----------------+ +-----------------+ +-----------------+ +-----------------+ +-----------------+ +-----------------+ __| | | | | | | | | \|/ \|/ \|/ \|/ \|/ \|/ __ | +-----------------+ +-----------------+ +-----------------+ +-----------------+ +-----------------+ +-----------------+ | | | 0 -> HOLD_RLY | | 0 -> HOLD_RLY | | 1 -> HOLD_RLY | | 0 -> HOLD_RLY | | 1 -> HOLD_RLY | | 0 -> HOLD_RLY | |-- HOLD_RLY | +-----------------+ +-----------------+ +-----------------+ +-----------------+ +-----------------+ +-----------------+ __| | | | | | | | | \|/ \|/ \|/ \|/ \|/ \|/ __ | +-----------------+ +-----------------+ +-----------------+ +-----------------+ +-----------------+ +-----------------+ | | | RCAD -> RING_RLY| | 0 -> RING_RLY | | 0 -> RING_RLY | | 0 -> RING_RLY | | 0 -> RING_RLY | | 0 -> RING_RLY | |-- RING_RLY | +-----------------+ +-----------------+ +-----------------+ +-----------------+ +-----------------+ +-----------------+ __| | | | | | | | | \|/ \|/ \|/ \|/ \|/ \|/ __ | +-------------------+ +-----------------+ +-------------------+ +-----------------+ +-------------------+ +-----------------+ | | |ring_flash->LX_LAMP| | 0 -> LX_LAMP | |hold_flash->LX_LAMP| | 1 -> LX_LAMP | |hold_flash->LX_LAMP| | 1 -> LX_LAMP | |-- L1/L2_LAMP | +-------------------+ +-----------------+ +-------------------+ +-----------------+ +-------------------+ +-----------------+ __| | | | | | | | | \|/ \|/ \|/ \|/ \|/ \|/ | | | | | | | +-----------o---------------------o----------------------o---------------------o---------------------o---------------------o