/* RegMain.c
Stewart September 29, 1983 1:50 PM, created
*/
#include "Env.h"
#include "Lark.h"
#include "LarkSlave.h"
#include "RegEPROM.h"
int lastDigit; /* last DTMF digit punched */
int number[20]; /* stored number */
int numDigits; /* length of stored number */
int oldEvent; /* last event acted upon */
extern int event; /* current event */
int getNumber; /* state bit, inside getNumber */
/* local variables */
int diffEvent; /* used internally by HandleEvent */
MonMain()
{
PokeWDT();
InitAnalog();
PokeWDT();
InitToneStuff();
Reset();
PokeWDT();
event = 0;
oldEvent = 0;
numDigits = 0;
for (;;) {
/* wait for event */
CheckWDT();
if (NewEvent()) HandleEvent();
TryEcho();
};
};
HandleEvent()
{
diffEvent = event ↑ oldEvent;
if (diffEvent & AIDTMF) {
if (event & AIDTMF) lastDigit = GetDTMF();
else ExecuteDigit();
};
if (diffEvent & AISwitch) Led(event & AISwitch);
if (diffEvent & AIRing) Led(event & AIRing);
if (diffEvent & AIHookSwitch) {
if ((event & AIHookSwitch) == 0) Reset();
};
oldEvent = event;
};
ExecuteDigit()
{
if (getNumber) {
if (lastDigit == TTot) getNumber = false;
else {
number[numDigits] = lastDigit;
if (numDigits < 19) numDigits += 1;
};
};
else switch (lastDigit) {
case TT1: { PickUpLine(); break; };
case TT2: { HangUpLine(); break; };
case TT3: { numDigits = 0; getNumber = true; break; };
case TT4: { DialNumber(); break; };
case TT5: { DoEcho(); break; };
case TT6: { MikeToLine(); break; };
case TT7: { LineAToLine(); break; };
case TT8: { LineBToLine(); break; };
case TT9: { RevertPhone(); break; };
case TT0: { TSToLine(); break; };
case TTst: { LineToSpeaker(); break; };
default: { Reset(); };
};
};
Reset()
{
CheckWDT();
Revert(false);
RevertHS(false);
GoOffHook(false);
ARelay(false);
XbarClear();
StartSlave(1, 0); /* O3I1 */
SPMode(false);
AudioIdle();
SetXbar(XBTeleSet, XBDTMF);
SetXbar(XBTeleWall, XBLine1);
SetXbar(XBCodec1, XBLine2);
SetXbar(XBTeleWall, XBTeleSet);
SetXbar(XBCodec1, XBTeleWall);
SetXbar(XBCodec1, XBSpeaker);
RingEnable(false);
SideTone(true);
getNumber = false;
FlushAverage();
};