/* Larkaud.c
L. Stewart November 11, 1982 12:11 PM
L. Stewart November 1, 1982 9:01 AM, other stuff
L. Stewart, November 11, 1982 12:08 PM, CheckFromNet
L. Stewart, December 7, 1982 1:24 PM, New relays
L. Stewart, December 8, 1982 4:06 PM, dismiss command, LarkSlave refs
L. Stewart, January 14, 1983 4:09 PM, Lark.mesa revisions
L. Stewart, March 2, 1983 3:31 PM, Larkinitial connections
*/
#include "Lark.h"
#include "Env.h"
#include "LarkSlave.h"
#include "LarkNet.h"
/* context package */
extern Block();
extern Free();
extern int sysZone;
extern int totAv;
extern int largest;
/* Allocate package */
extern Allocate();
/* Lark stuff */
extern InitAnalog();
extern SetInGain();
extern SetOutGain();
extern StartSlave();
extern PlayTone();
/* CharIO package */
extern wf2();
extern wf4();
extern int DEBUG;
extern int wToneCB;
int first;
AudioProcess()
{
for (;;) {
Block();
TryEcho();
Block(); /* should this be here? */
CheckFromNet(IOut1);
CheckFromNet(IOut2);
CheckFromNet(IOut3);
};
};
AudioStuff()
{
first = false;
InitAnalog(); /* redundant probably, it is in InitOS, but restarts... */
InitNetStuff();
InitToneStuff();
SetInGain(0, 0)
SetInGain(1, 0)
SetOutGain(0)
StartSlave(1, 0);
Revert(false);
RevertHS(false);
SetXbar(1, 4);
SetXbar(0, 3);
SetXbar(3, 0);
};
AudCmd(p)
struct EvSeq *p;
{
int i, on;
char d, e;
if (p->length > 20) return;
for (i = 0; i < p->length; i += 1) {
Block();
d = p->evs[i].device;
e = p->evs[i].event;
if (e == 144) on = true;
else on = false;
switch (p->evs[i].device) {
case 4: PutC(0, e); break;
case 5: PutC(1, e); break;
case 8: Revert(on); break;
case 9: GoOffHook(on); break;
case 10: SideTone(on); break;
case 11: RingEnable(on); break;
case 12: Led(on); break;
case 13: XbarClear(); break;
case 14: SetTS(e); break;
case 15: SetVoice(e); break;
case 16: case 17:
case 18: case 19:
SetTable(d, e); break;
case 22: YXBar(e); break;
case 23: XXBar(e); break;
case 24: RevertHS(on); break;
case 25: ARelay(on); break;
case 27: { on = e; Dismiss(on * 10); break; };
default: break;
};
};
};
static SetTS(c)
char c;
{
if (c == 147) SetCodec(0);
if (c == 148) SetCodec(0x0c);
};
static YXBar(c)
char c;
{
ClearXbar(((c >> 4) & 0x0f), (c & 0x0f));
};
static XXBar(c)
char c;
{
SetXbar(((c >> 4) & 0x0f), (c & 0x0f));
};
static SetVoice(c)
char c;
{
switch (c) {
case 159: StartSlave(1, 0); break;
case 160: StartSlave(2, 0); break;
default: StartSlave(1, 0); break;
};
};
static SetTable(d, e)
char d, e;
{
int table;
table = e - 149;
switch (d) {
case 16: SetInGain(0, table); break;
case 17: SetInGain(1, table); break;
case 18: SetOutGain(table); break;
case 19: SetOutGain(table); break;
default: break;
};
};
/* Actual calls via RPC */
Reset(rName)
struct ShortSTRING *rName;
{
if (DEBUG) wf1("Reset[%r]\r", rName);
AudioStuff(); /* initialize */
/* place to hang this */
Allocate(sysZone, 0);
wf2("Alloc: totAv = %u, largest = %u\r", totAv, largest);
Free(sysZone, rName);
};
int GenerateTones(f1, f2, modulation, on, off, repetitions, waveTable, queueIt, notify)
int f1, f2, modulation, on, off, repetitions, waveTable, queueIt, notify;
{
int i;
i = PlayTone(f1, f2, on, off, repetitions, queueIt, waveTable, notify);
return ((i) ? 1: 0);
};
Disconnect(junk, id)
int junk, id;
{
StopNet(id);
};
PleaseRegister()
{
if (DEBUG) wf("PleaseRegister[]\r");
};
int WhatIsStatus(which)
int which;
{
int res;
if (DEBUG) wf1("WhatIsStatus[which: %d] = [0, NIL]\r", which);
/* args[2] = 0; */ /* FIR can't really handle multiple returns */
if (which >= 3) res = 0;
else res = which + 1;
return (res);
};
int WhatAreConnections(which)
int which;
{
int res;
if (DEBUG) wf1("WhatAreConnections[which: %d] = [0, NIL]\r", which);
/* args[2] = 0; */ /* FIR can't really handle multiple returns */
if (which >= 3) res = 0;
else res = which + 1;
return (res);
};
int WhatAreTones()
{
if (DEBUG) wf("WhatAreTones[] = [FALSE]\r");
return ((wToneCB) ? 1: 0);
};