/* audechob.c L. Stewart September 27, 1982 4:20 PM L. Stewart November 30, 1982 10:21 AM removed net stuff L. Stewart December 3, 1982 1:33 PM, added relays L. Stewart March 11, 1983 9:14 AM, new slave */ #include "Lark.h" #include "Env.h" #include "LarkSlave.h" #include "LarkNet.h" extern GetHex(); extern wf1(); extern wf(); extern wfcr(); extern StartSlave(); extern SetCodec(); extern GetDTMF(); extern ScanIn(); extern Led(); extern SideTone(); extern RingEnable(); extern Revert(); extern GoOffHook(); extern ARelay(); extern RevertHS(); extern SetXbar(); extern ClearXbar(); extern XbarClear(); extern SetIngain(); extern SetOutgain(); extern int igint; extern int ogint; extern int audioMode; extern int first; extern int *silval1; extern int *silval2; extern int *ingain1; extern int *ingain2; extern int *outgain; extern int *bufptr; extern int ledb; extern int fbb; extern int ohb; extern int arb; extern int hsrb; extern int reb; extern int stb; extern int xrow; extern int xcol; extern int encb; static int spmodeb; static int oldAS; ElecPhone() { int was; was = 0; wf("Electronic phone\r"); Revert(false); RevertHS(false); XbarClear(); SetXbar(1, 0); SetXbar(2, 1); for (;;) { Block(); if (Chav()) break; if ((oldAS&AIHookSwitch) != was) { was = oldAS & AIHookSwitch; GoOffHook(was); ARelay(was); }; }; GetChar(); GoOffHook(false); ARelay(false); }; PrintBP() { wf1("BPtr = %d\r", BPtr()); }; NewAudio() { int i, prog, len; wf("audio program: "); prog = GetHex(); switch (prog) { case 0: { StartSlave(0,0); break; }; case 1: { StartSlave(1,0); break; }; case 2: { StartSlave(2,0); break; }; case 3: { GenProg(); break; }; case 4: { BltProg(); break; }; case 5: { JmpProg(); break; }; default: wf("1: O3I1, 2: O2I2, 3: arb, 4: BLT, 5: JMP\n"); }; }; SPMode() { int *mfp; mfp = (int *) ModeFlag; if (spmodeb) { *mfp &= 0xfffc; spmodeb = false; wf("speakerphone mode off\r"); }; else { *mfp |= 3; spmodeb = true; wf("speakerphone mode on\r"); }; }; static GenProg() { int prog, len; wf("\raudio program address (in main CPU) (hex): "); prog = GetHex(); wf("\raudio code length (words)(hex): "); len = GetHex(); wfcr(); StartSlave(prog, len); }; static BltProg() { int from, to, count; wf("\r Slave blt from (hex): "); from = GetHex(); wf("\r Slave blt to (hex): "); to = GetHex(); wf("\r count (words) (hex): "); count = GetHex(); wfcr(); StoreW(from, BltFrom); StoreW(to, BltTo); StoreW(count, BltCount); StartSlave(4, 0); }; static JmpProg() { int prog; wf("\raudio program address in slave (hex): "); prog = GetHex(); wfcr(); StoreW(prog, BltFrom); StartSlave(5, 0); }; SetTS() { wf("Time slot (hex): "); SetCodec(GetHex()); }; CheckAS() { int v, diff, newAS; newAS = ScanIn(); if (oldAS != newAS) { newAS = ScanIn(); diff = oldAS ↑ newAS; if (diff & AIDTMF) { v = GetDTMF(); if (v == 0) v = '.'; wf1("dtmf = %c\r", v); }; if (diff & AISwitch) wf1("switch %s\r", OnOff(newAS & AISwitch)); if (diff & AIRing) wf1("ring %s\r", OnOff(newAS & AIRing)); if (diff & AIHookSwitch) wf1("hooksw %s\r", OnOff(newAS & AIHookSwitch)); oldAS = newAS; }; }; OnOff(i) int i; { if (i) return("on"); else return("off"); }; PrintAS() { int v; v = GetDTMF(); if (v == 0) v = '.'; wf1("dtmf = %c ", v); v = ScanIn(); if (v&AIRing) wf("ring "); else wf(" "); if (v&AIHookSwitch) wf("hooksw "); else wf(" "); if (v&AISwitch) wf("switch "); wfcr(); }; TogEncrypt() { wf("Encryption "); togb(&encb); }; TogLED() { wf("Led "); togb(&ledb); Led(ledb); }; TogSideTone() { wf("SideTone "); togb(&stb); SideTone(stb); }; TogRingEnable() { wf("RingEnable "); togb(&reb); RingEnable(reb); }; togb(b) int *b; { if (*b) *b = false; else *b = true; wf1("%s\r", OnOff(*b)); }; TogFallback() { if (fbb) fbb = false; else fbb = true; if (fbb) wf("Revert to back door\r"); else wf("Teleset active\r"); Revert(fbb); }; TogARelay() { if (arb) arb = false; else arb = true; if (arb) wf("ARelay Closed\r"); else wf("ARelay Open\r"); ARelay(arb); }; TogHSRelay() { if (hsrb) hsrb = false; else hsrb = true; if (hsrb) wf("HS Revert to back door\r"); else wf("HS active\r"); RevertHS(hsrb); }; TogOnHook() { if (ohb) ohb = false; else ohb = true; if (ohb) wf("Telewall Off Hook\r"); else wf("Telewall On Hook\r"); GoOffHook(ohb); }; XbarOn() { wf("xbar set "); GetRowCol(); SetXbar(xrow, xcol); }; XbarOff() { wf("xbar clear "); GetRowCol(); ClearXbar(xrow, xcol); }; static GetRowCol() { wf(" row "); xrow = GetHex(); wf(" col "); xcol = GetHex(); wfcr(); }; xbarreset() { wf("xbar reset\r"); XbarClear(); }; int BPtr() { return(*bufptr); }; SetIG() { int v; wf1("ingain = %04x\r", *ingain1); wf("new value: "); v = GetHex(); *ingain1 = v; *ingain2 = v; wf1("ingain = %04x\r", *ingain1); }; SetOG() { int v; wf1("outgain = %04x\r", *outgain); wf("new value: "); v = GetHex(); *outgain = v; wf1("outgain = %04x\r", *outgain); }; PSV() { wf2("silval1 = %04x, silval2 = %04x\r", *silval1, *silval2); }; CycleIG() { igint = (igint + 1) % 5; wf1("input gain now %d dB\r", igint * -5); SetIngain(3, igint) }; CycleOG() { ogint = (ogint + 1) % 3; wf1("output gain now %d dB\r", ogint * -3); SetOutgain(ogint) }; TogEcho() { AudioIdle(); if (audioMode == AMEcho) { audioMode = AMOff; wf("echo off\r"); }; else { audioMode = AMEcho; wf("echo on\r"); }; };