/* 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(); };