uchar GetModemAnswer(void) { uchar i,j; uchar w; if ((IndexInBuff() >= 2) && (IndexInBuff() <= 4)) { w = 0; for (i=0; i<IndexInBuff()-1; i++) { j = InBuff(i); if ((j >= '0') && (j <= '9')) w = w*10 + ToChar(j); else { w = 0xFF; break; } } } else w = 0xFE; if (w < 0x100) return(w); else return(0xFD); }
void SafeTransitExecute3(void) { uint i; uchar j; if (bInBuff5 >= bPORTS) Result(bRES_BADADDRESS); else if (IsSlave(bInBuff5)) Result(bRES_BADPORT); else if (IndexInBuff() <= 10) Result(bRES_BADDATA); else { SaveInBuff(); iwInBuffSave = IndexInBuff(); j = ibPort; ibPort = bInBuff5; cbHeaderBcc = bInBuff8; cwInBuffBcc = 0; InitPush(0); for (i=0; i<iwInBuffSave-11; i++) PushChar(mpbInBuffSave[i+9]); Query(bInBuff6+bInBuff7*0x100, iwInBuffSave-11, 1); InitWaitAnswer(); while (1) { if (fKey == true) { mpSerial[ibPort] = SER_BADLINK; break; } ResetWatchdog(); ShowWaitAnswer(1); if (GetWaitAnswer()) { mpSerial[ibPort] = SER_BADLINK; break; } if (mpSerial[ibPort] == SER_INPUT_MASTER) DecompressK(0); if (mpSerial[ibPort] == SER_POSTINPUT_MASTER) break; else if ((mpSerial[ibPort] == SER_OVERFLOW) || (mpSerial[ibPort] == SER_BADLINK)) break; } MonitorIn(); SaveInBuff(); iwInBuffSave = IndexInBuff(); mpSerial[ibPort] = SER_BEGIN; ibPort = j; InitPushCRC(); if (iwInBuffSave > 0) for (i=0; i<iwInBuffSave; i++) PushChar(mpbInBuffSave[i]); Output(iwInBuffSave); } }
void SafeTransitExecute2(void) { uint i; uchar j; if (bInBuff5 >= bPORTS) Result(bRES_BADADDRESS); else if (IsSlave(bInBuff5)) Result(bRES_BADPORT); else if (IndexInBuff() <= 10) Result(bRES_BADDATA); else { SaveInBuff(); iwInBuffSave = IndexInBuff(); j = ibPort; ibPort = bInBuff5; InitPush(0); for (i=0; i<iwInBuffSave-10; i++) PushChar(mpbInBuffSave[i+8]); Query(bInBuff6+bInBuff7*0x100, iwInBuffSave-10, 1); InitWaitAnswer(); while (1) { if (fKey == true) { mpSerial[ibPort] = SER_BADLINK; break; } ResetWatchdog(); ShowWaitAnswer(1); if (GetWaitAnswer()) { mpSerial[ibPort] = SER_BADLINK; break; } if (mpSerial[ibPort] == SER_POSTINPUT_MASTER) break; else if ((mpSerial[ibPort] == SER_OVERFLOW) || (mpSerial[ibPort] == SER_BADLINK)) break; } if (mpSerial[ibPort] != SER_POSTINPUT_MASTER) { ibPort = j; Result(bRES_BADMODE); } else { mpSerial[ibPort] = SER_BADLINK; // !!! SaveInBuff(); iwInBuffSave = IndexInBuff(); ibPort = j; InitPushCRC(); for (i=0; i<iwInBuffSave; i++) PushChar(mpbInBuffSave[i]); Output(iwInBuffSave); } } }
serial Input31(void) { InputStart(); InitWaitAnswer(); while (1) { if (fKey == true) { mpSerial[ibPort] = SER_BADLINK; break; } ResetWatchdog(); ShowWaitAnswer(1); if (GetWaitAnswer()) { mpSerial[ibPort] = SER_BADLINK; break; } if (mpSerial[ibPort] == SER_INPUT_MASTER) { if ((InBuff(0) == 0x7E) && (IndexInBuff() > 3) && (IndexInBuff() == InBuff(1)+4)) mpSerial[ibPort] = SER_BADLINK; } if (mpSerial[ibPort] == SER_POSTINPUT_MASTER) { uchar bCrc = MakeCrc8Bit31InBuff(1, CountInBuff()-1); if (bCrc == 0) { Unpack31(); InputGoodCheck(); mpSerial[ibPort] = SER_GOODCHECK; } else mpSerial[ibPort] = SER_BADCHECK; break; } else if (mpSerial[ibPort] == SER_BADLINK) { uchar bCrc = MakeCrc8Bit31InBuff(1, IndexInBuff()-1); if (bCrc == 0) { Unpack31(); InputGoodCheck(); mpSerial[ibPort] = SER_GOODCHECK; } else mpSerial[ibPort] = SER_BADCHECK; break; } else if (mpSerial[ibPort] == SER_OVERFLOW) break; } MonitorIn(); return mpSerial[ibPort]; }
void RunResponseCRC(void) { if (mpSerial[ibPort] == SER_POSTINPUT_SLAVE) { mpSerial[ibPort] = SER_BEGIN; ShowResponseCRC(bSTA_BEGIN); MakeCRC16InBuff( 0, IndexInBuff() ); if ((bCRCHi != 0) || (bCRCLo != 0)) { ShowResponseCRC(bSTA_BADCRC); return; } bInBuff0 = InBuff(0); bInBuff1 = InBuff(1); bInBuff2 = InBuff(2); bInBuff3 = InBuff(3); bInBuff4 = InBuff(4); bInBuff5 = InBuff(5); bInBuff6 = InBuff(6); bInBuff7 = InBuff(7); bInBuff8 = InBuff(8); bInBuff9 = InBuff(9); bInBuffA = InBuff(10); bQuery = bInBuff4; if ((bInBuff0 != 0) || (bInBuff1 != 0)) { if ((bInBuff0 != bLogical) || (bInBuff1 != 0)) { ShowResponseCRC(bSTA_BADNUMBER); return; } } if (bInBuff2 + bInBuff3*0x100 != IndexInBuff()) { ShowResponseCRC(bSTA_BADSIZE); Result(bRES_BADSIZE); return; } if ((fDsblAnswer == true) && IsAnswerDisabled()) { if (bInBuff4 != bINQ_ENBL_ANSWER) { ShowResponseCRC(bSTA_BUSY); Result(bRES_BUSY); return; } } ShowResponseCRC(bSTA_OK); Response0_CRC(); } }
bool AutomaticK(void) { uchar i,bT; for (i=0; i<bMINORREPEATS; i++) { QueryCloseK(); QueryOpenK(); if (BccInput() == SER_GOODCHECK) break; if (fKey == true) return(0); bT = InBuff(IndexInBuff() - 1) & 0x7F; if ((bT == '\r') || (bT == '\n')) break; } if (i == bMINORREPEATS) return(0); ReadOpenK(); QueryCloseK(); dbKtrans = 1; // K трансформации reBuffA = 5000; // K преобразования Delay(1000); SetCanalsAll(); // сохранение К преобразования и К трасформации return(1); }
void UnpackW(bool fShow, uchar bOffset) { if (cbHeaderBcc == 0) return; if (cwInBuffBcc == IndexInBuff()) return; cwInBuffBcc = IndexInBuff(); if ((fShow == true) && (IndexInBuff() > 60)) sprintf(szLo," прием: %-4u ",IndexInBuff()); if (IndexInBuff() > 2) { InitPop(1); uint j = 0; uchar i; for (i=0; i<IndexInBuff()-2; i++) { if (PopChar0Bcc() == ')') j++; // MonitorString("\n"); MonitorCharDec(j); MonitorString(" ? "); MonitorCharDec(cbHeaderBcc); // MonitorString(" "); MonitorCharDec(i); MonitorString(" + "); MonitorCharDec(bOffset); MonitorString(" ? "); MonitorCharDec(IndexInBuff()); if ((j == cbHeaderBcc) && (i+bOffset == IndexInBuff()) && (InBuff(IndexInBuff()-2) == 0x03)) { SetCountInBuff(i+bOffset); if ((fShow == true) && (IndexInBuff() > 60)) sprintf(szLo," прием: %-4u ",IndexInBuff()); MonitorIn(); InputMode(); mpSerial[ibPort] = SER_POSTINPUT_MASTER; break; } } } }
void ShowModemQuality(uchar ibPrt) { Clear(); ibPort = ibPrt; diCurr.ibPort = ibPrt; if (SafeReadModemQuality(ibPrt) != 1) Error(); else { uchar i; for (i=0; i<IndexInBuff()-1; i++) { szLo[i] = InBuff(i); } } }
bool DoneProfileW(void) { return ((IndexInBuff() == 10) && ((InBuff(1) & 0x7F) == 'E') && ((InBuff(2) & 0x7F) == 'R') && ((InBuff(3) & 0x7F) == 'R')); }