serial InputS(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) DecompressS(); if (mpSerial[ibPort] == SER_POSTINPUT_MASTER) { if (ChecksumS() == 0) { InputGoodCheck(); mpSerial[ibPort] = SER_GOODCHECK; } else mpSerial[ibPort] = SER_BADCHECK; break; } else if ((mpSerial[ibPort] == SER_OVERFLOW) || (mpSerial[ibPort] == SER_BADLINK)) break; } return mpSerial[ibPort]; }
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]; }