/* LarkEventsB.c
L. Stewart May 24, 1983 4:24 PM
*/
#include <Env.h>
#include <Queue.h>
#include <Encrypt.h>
#include <Pup.h>
#include <LarkNet.h>
#include <Lark.h>
#include <LarkSlave.h>
#include <LarkVCB.h>
/*
struct WISArgs {
int procType;
int which;
};
*/
struct SREvents {
int next;
int isNil;
int lenLo;
int lenHi;
int length;
struct SEvent eventseq[16];
};
int WhatIsStatus(sp)
int *sp;
{
int which;
struct SREvents *sre;
sre = (struct SREvents *) sp;
which = Swab(sp[1]);
switch (which) {
case 0: return(FillInRelays(sre));
default: {
*sp++ = 0; /* next = 0 */
*sp++ = swapped1; /* isNil = true */
return (2); /* two words of results */
};
};
};
int FillInRelays(sre)
struct SREvents *sre;
{
int *modep, prog;
sre->next = 0;
sre->isNil = 0;
sre->length = sre->lenLo = Swab(12);
sre->lenHi = 0;
FillInEntry(sre, 0, 8, GetPIO(iapioa) & 0x0080); /* revert */
FillInEntry(sre, 1, 24, GetPIO(ipioc) & 0x0020); /* revertHookswitch */
FillInEntry(sre, 2, 9, (GetPIO(iapioa) & 0x0040) ↑ 0x0040); /* offHookRelay */
FillInEntry(sre, 3, 25, (GetPIO(ipioc) & 0x0010) ↑ 0x0010); /* ARelay */
FillInEntry(sre, 4, 10, (GetPIO(iapioc) & 0x0004) ↑ 0x0004); /* sidetone */
FillInEntry(sre, 5, 11, (GetPIO(iapioc) & 0x0008) ↑ 0x0008); /* ringenable */
FillInEntry(sre, 6, 12, (GetPIO(ipioa) & 0x0040) ↑ 0x0040); /* LED */
FillInEntry(sre, 7, 2, ScanIn() & AISwitch); /* switch */
FillInEntry(sre, 8, 7, ScanIn() & AIRing); /* ring detect */
FillInEntry(sre, 9, 1, ScanIn() & AIHookSwitch); /* hookswitch */
modep = (int *) ModeFlag;
FillInEntry(sre, 10, 28, *modep & 3); /* spmode */
modep = (int *) CodeLoc;
switch (*modep) {
case 1: prog = 159; break;
case 2: prog = 160; break;
default: prog = 146;
};
sre->eventseq[11].time = Swab(ReadTmr());
sre->eventseq[11].device = 15;
sre->eventseq[11].event = prog;
return (24 + 5);
};
FillInEntry(sre, i, device, on)
struct SREvents *sre;
int i, device, on;
{
sre->eventseq[i].time = Swab(ReadTmr());
sre->eventseq[i].device = device;
sre->eventseq[i].event = (on) ? 144: 145;
};