[an error occurred while processing this directive]
|
void sendto(byte node, void *p, byte len, byte ses)
{
tHdr h;
byte i, crc = 0, *b;
h.dstAddr = node;
h.srcAddr = M_ADDR;
h.Cmd = cmQuery;
h.Session = ses;
b = (byte *)&h;
for (i = 0; i < sizeof(h); i++)
com_putchar(dowcrc(b[i], crc));
b = (byte *)p;
for (i = 0; i < len; i++)
com_putchar(dowcrc(b[i], crc));
com_putchar(crc);
com_send();
while (!ERX) net_idle();
}
byte ei;
bool recv(byte node, void *p, byte len, byte &ses)
{
byte i = 0, s, ch, crc;
word t0 = GetMsTicks();
extern byte test,test1;
len += sizeof(tHdr);
while (i <= (len+1)) {
while (!com_getchar(ch)) {
if ((GetMsTicks()-t0) > 10) {
ei = i;
test++;
return false;
}
else {
net_idle(); }
}
switch (i)
{
case 0:
if (ch == M_ADDR) {
crc = 0; i++;
dowcrc(ch, crc);
} else i = 0;
break;
case 1:
if (ch == node) {
dowcrc(ch, crc); i++;
} else i = 0;
break;
case 2:
if (ch == cmQuery) {
dowcrc(ch, crc); i++;
} else i = 0;
break;
case 3:
s = dowcrc(ch, crc); i++;
break;
default:
if (i < len) {
((byte *)p)[i-sizeof(tHdr)] = dowcrc(ch, crc);
i++;
} else {
if (ch == crc) {
ses = s;
test1++;
return true;
}
else
i = 0;
}
}
}
return false;
}