Beispiel #1
0
        public static short _GetCommandStatusAskSize(SelectedStatusValues mySel, byte telegrammType)
        {
            short size = 0;

            if (telegrammType == 0x13)
            {
                if ((mySel & SelectedStatusValues.STW) > 0)
                {
                    size += 2;
                }
                if ((mySel & SelectedStatusValues.Akku1) > 0)
                {
                    size += 4;
                }
                if ((mySel & SelectedStatusValues.Akku2) > 0)
                {
                    size += 4;
                }
                if ((mySel & SelectedStatusValues.AR1) > 0)
                {
                    size += 4;
                }
                if ((mySel & SelectedStatusValues.AR2) > 0)
                {
                    size += 4;
                }
                if ((mySel & SelectedStatusValues.DB) > 0)
                {
                    size += 6;
                }
                return(size);
            }
            else
            {
                if ((mySel & SelectedStatusValues.STW) > 0)
                {
                    size += 2;
                }
                if ((mySel & SelectedStatusValues.Akku1) > 0 || (mySel & SelectedStatusValues.Akku2) > 0)
                {
                    size += 8;
                }
                if ((mySel & SelectedStatusValues.AR1) > 0)
                {
                    size += 4;
                }
                if ((mySel & SelectedStatusValues.AR2) > 0)
                {
                    size += 4;
                }
                if ((mySel & SelectedStatusValues.DB) > 0)
                {
                    size += 6;
                }
                return(size);
            }
        }
Beispiel #2
0
            public static BlockStatus ReadBlockStatus(byte[] daten, int startpos, SelectedStatusValues selStat, BlockStatus oldStatus)
            {
                BlockStatus ret = new BlockStatus();

                ret.STW   = oldStatus.STW;
                ret.Akku1 = oldStatus.Akku1;
                ret.Akku2 = oldStatus.Akku2;
                ret.AR1   = oldStatus.AR1;
                ret.AR2   = oldStatus.AR2;
                ret.DB    = oldStatus.DB;
                ret.DI    = oldStatus.DI;

                int pos = startpos;

                if ((selStat & SelectedStatusValues.STW) > 0)
                {
                    ret.STW = (short?)(daten[pos] * 0x100 + daten[pos + 1]);
                    pos    += 2;
                }
                if ((selStat & SelectedStatusValues.Akku1) > 0)
                {
                    ret.Akku1 = libnodave.getS32from(daten, pos);
                    pos      += 4;
                }
                if ((selStat & SelectedStatusValues.Akku2) > 0)
                {
                    ret.Akku2 = libnodave.getS32from(daten, pos);
                    pos      += 4;
                }
                if ((selStat & SelectedStatusValues.AR1) > 0)
                {
                    ret.AR1 = libnodave.getS32from(daten, pos);
                    pos    += 4;
                }
                if ((selStat & SelectedStatusValues.AR2) > 0)
                {
                    ret.AR2 = libnodave.getS32from(daten, pos);
                    pos    += 4;
                }
                if ((selStat & SelectedStatusValues.DB) > 0)
                {
                    //if (daten[pos] > 0)
                    ret.DB = libnodave.getU16from(daten, pos + 2);
                    //if (daten[pos + 1] > 0)
                    ret.DI = libnodave.getU16from(daten, pos + 4);
                    pos   += 6;
                }
                return(ret);
            }
Beispiel #3
0
        /*public byte _GetCommandStatusAskByte(SelectedStatusValues mySel, byte telegrammType)
         * {
         *  byte retval = 0x00;
         *
         *  if (telegrammType == 0x13)
         *      return (byte) _GetCommandStatusAskValues(mySel);
         *  else
         *  {
         *      SelectedStatusValues tmp = _GetCommandStatusAskValues(mySel);
         *      retval |= (mySel & SelectedStatusValues.STW) > 0 ? (byte)0x00 : (byte)0x00;
         *      retval |= (mySel & SelectedStatusValues.Akku1) > 0 ? (byte)0x01 : (byte)0x00;
         *      retval |= (mySel & SelectedStatusValues.Akku2) > 0 ? (byte)0x01 : (byte)0x00;
         *      retval |= (mySel & SelectedStatusValues.AR1) > 0 ? (byte)0x02 : (byte)0x00;
         *      retval |= (mySel & SelectedStatusValues.AR2) > 0 ? (byte)0x04 : (byte)0x00;
         *      retval |= (mySel & SelectedStatusValues.DB) > 0 ? (byte)0x08 : (byte)0x00;
         *      return retval;
         *  }
         * }*/

        public SelectedStatusValues _GetCommandStatusAskValues(SelectedStatusValues mySel, byte DiagDataTeletype)
        {
            int MN = (int)this.MnemonicLanguage;

            SelectedStatusValues retVal;

            bool isDBcall = false;

            isDBcall = System.Text.RegularExpressions.Regex.IsMatch(this.Parameter, "DB[0-9]");

            //Todo: Look at this commands wich registeres are changed
            if (this.Command == Mnemonic.opCALL[MN] || this.Command == Mnemonic.opCC[MN] ||
                this.Command == Mnemonic.opENT[MN] || this.Command == Mnemonic.opEXP[MN] ||
                this.Command == Mnemonic.opFR[MN] ||
                this.Command == Mnemonic.opINC[MN] || this.Command == Mnemonic.opINVD[MN] ||
                this.Command == Mnemonic.opINVI[MN] || this.Command == Mnemonic.opITB[MN] ||
                this.Command == Mnemonic.opITD[MN] ||

                this.Command == Mnemonic.opLC[MN] || this.Command == Mnemonic.opLEAVE[MN] ||
                this.Command == Mnemonic.opLN[MN] || this.Command == Mnemonic.opLOOP[MN] ||
                this.Command == Mnemonic.opMCRA[MN] || this.Command == Mnemonic.opMCRC[MN] ||
                this.Command == Mnemonic.opMCRD[MN] || this.Command == Mnemonic.opMCRO[MN] ||
                this.Command == Mnemonic.opNEGD[MN] ||
                this.Command == Mnemonic.opNEGI[MN] || this.Command == Mnemonic.opNEGR[MN] ||
                this.Command == Mnemonic.opNOT[MN] ||
                this.Command == Mnemonic.opOD[MN] ||
                this.Command == Mnemonic.opONO[MN] || this.Command == Mnemonic.opOO[MN] ||
                this.Command == Mnemonic.opOW[MN] || this.Command == Mnemonic.opPAR1[MN] ||
                this.Command == Mnemonic.opPAR2[MN] ||
                this.Command == Mnemonic.opPOP[MN] || this.Command == Mnemonic.opPUSH[MN] ||
                this.Command == Mnemonic.opRLD[MN] ||
                this.Command == Mnemonic.opRLDA[MN] || this.Command == Mnemonic.opRND[MN] ||
                this.Command == Mnemonic.opRNDM[MN] || this.Command == Mnemonic.opRNDP[MN] ||
                this.Command == Mnemonic.opRRD[MN] || this.Command == Mnemonic.opRRDA[MN] ||
                this.Command == Mnemonic.opSA[MN] ||
                this.Command == Mnemonic.opSAVE[MN] || this.Command == Mnemonic.opSE[MN] ||
                this.Command == Mnemonic.opSI[MN] ||
                this.Command == Mnemonic.opSS[MN] || this.Command == Mnemonic.opSSD[MN] ||
                this.Command == Mnemonic.opSSI[MN] || this.Command == Mnemonic.opSV[MN] ||
                this.Command == Mnemonic.opTRUNC[MN] ||
                this.Command == Mnemonic.opUO[MN] || this.Command == Mnemonic.opUC[MN] ||
                this.Command == Mnemonic.opUNO[MN] || this.Command == Mnemonic.opUD[MN] ||
                this.Command == Mnemonic.opUW[MN] ||
                this.Command == Mnemonic.opXNO[MN] || this.Command == Mnemonic.opXO[MN] ||
                this.Command == Mnemonic.opXOD[MN] || this.Command == Mnemonic.opXOW[MN] ||
                this.Command == Mnemonic.opZR[MN] || this.Command == Mnemonic.opZV[MN])
            {
                retVal = (SelectedStatusValues.Akku1 | SelectedStatusValues.Akku2 | SelectedStatusValues.AR1 |
                          SelectedStatusValues.AR2 | SelectedStatusValues.DB | SelectedStatusValues.STW) & mySel;
            }
            else if (this.Command == "+I" || this.Command == "-I" || this.Command == "*I" || this.Command == "/I" || this.Command == "+D" || this.Command == "-D" || this.Command == "*D" || this.Command == "/D" || this.Command == "+R" || this.Command == "-R" || this.Command == "*R" || this.Command == "/R" || this.Command == "MOD")
            {
                retVal = (SelectedStatusValues.Akku1 | SelectedStatusValues.Akku2 | SelectedStatusValues.STW) & mySel;
            }
            else if (this.Command == Mnemonic.opPLU[MN] || this.Command == Mnemonic.opABS[MN] || this.Command == Mnemonic.opBTD[MN] ||
                     this.Command == Mnemonic.opACOS[MN] || this.Command == Mnemonic.opASIN[MN] || this.Command == Mnemonic.opBTI[MN] ||
                     this.Command == Mnemonic.opATAN[MN] || this.Command == Mnemonic.opTAN[MN] || this.Command == Mnemonic.opSIN[MN] ||
                     this.Command == Mnemonic.opCOS[MN] || this.Command == Mnemonic.opSQR[MN] || this.Command == Mnemonic.opSQRT[MN] ||
                     this.Command == Mnemonic.opDEC[MN] || this.Command == Mnemonic.opTAW[MN] || this.Command == Mnemonic.opTAD[MN] ||
                     this.Command == Mnemonic.opDTB[MN] || this.Command == Mnemonic.opDTR[MN] || this.Command == Mnemonic.opSLD[MN] ||
                     this.Command == Mnemonic.opSLW[MN] || this.Command == Mnemonic.opSRD[MN] || this.Command == Mnemonic.opSRW[MN])
            {
                retVal = (SelectedStatusValues.Akku1) & mySel;
            }
            else if (this.Command == Mnemonic.opTAR[MN])
            {
                retVal = (SelectedStatusValues.AR1 | SelectedStatusValues.AR2) & mySel;
            }
            else if (this.Command == Mnemonic.opLAR1[MN])
            {
                retVal = (SelectedStatusValues.AR1) & mySel;
            }
            else if (this.Command == Mnemonic.opLAR2[MN])
            {
                retVal = (SelectedStatusValues.AR2) & mySel;
            }
            else if ((this.Command == Mnemonic.opL[MN]) && isDBcall)
            {
                retVal = (SelectedStatusValues.Akku1 | SelectedStatusValues.Akku2 | SelectedStatusValues.DB) & mySel;
            }
            else if ((this.Command == Mnemonic.opT[MN]) && isDBcall)
            {
                retVal = (SelectedStatusValues.DB) & mySel;
            }
            else if (this.Command == Mnemonic.opTAK[MN] || this.Command == Mnemonic.opL[MN] || this.Command == Mnemonic.opTAR1[MN] || this.Command == Mnemonic.opTAR2[MN])
            {
                retVal = (SelectedStatusValues.Akku1 | SelectedStatusValues.Akku2) & mySel;
            }
            else if ((this.Command == Mnemonic.opU[MN] || this.Command == Mnemonic.opUN[MN] || this.Command == Mnemonic.opO[MN] || this.Command == Mnemonic.opON[MN] || this.Command == Mnemonic.opX[MN] || this.Command == Mnemonic.opXN[MN] || this.Command == Mnemonic.opFN[MN] || this.Command == Mnemonic.opFP[MN] || this.Command == Mnemonic.opZUW[MN] || this.Command == Mnemonic.opS[MN] || this.Command == Mnemonic.opR[MN] || this.Command == Mnemonic.opT[MN]) && isDBcall)
            {
                retVal = (SelectedStatusValues.STW | SelectedStatusValues.DB) & mySel;
            }
            else if (this.Command == Mnemonic.opU[MN] || this.Command == Mnemonic.opUN[MN] || this.Command == Mnemonic.opO[MN] ||
                     this.Command == Mnemonic.opON[MN] || this.Command == Mnemonic.opX[MN] || this.Command == Mnemonic.opXN[MN] ||
                     this.Command == Mnemonic.opFN[MN] || this.Command == Mnemonic.opFP[MN] || this.Command == Mnemonic.opZUW[MN] ||
                     this.Command == Mnemonic.opS[MN] || this.Command == Mnemonic.opR[MN] || this.Command == Mnemonic.opBE[MN] ||
                     this.Command == Mnemonic.opBEA[MN] || this.Command == Mnemonic.opBEB[MN] || this.Command == ")")
            {
                retVal = (SelectedStatusValues.STW) & mySel;
            }
            else if (this.Command == Mnemonic.opT[MN] || this.Command == Mnemonic.opBLD[MN] || this.Command == Mnemonic.opNOP[MN] ||
                     this.Command == Mnemonic.opSPA[MN])
            {
                retVal = 0;
            }
            else if (this.Command == Mnemonic.opAUF[MN] || this.Command == Mnemonic.opTDB[MN])
            {
                retVal = (SelectedStatusValues.DB) & mySel;
            }
            else if (this.Command == Mnemonic.opSPB[MN] || this.Command == Mnemonic.opSPBB[MN] ||
                     this.Command == Mnemonic.opSPBI[MN] || this.Command == Mnemonic.opSPBIN[MN] ||
                     this.Command == Mnemonic.opSPBN[MN] || this.Command == Mnemonic.opSPBNB[MN] ||
                     this.Command == Mnemonic.opSPL[MN] || this.Command == Mnemonic.opSPM[MN] ||
                     this.Command == Mnemonic.opSPMZ[MN] || this.Command == Mnemonic.opSPN[MN] ||
                     this.Command == Mnemonic.opSPO[MN] || this.Command == Mnemonic.opSPP[MN] ||
                     this.Command == Mnemonic.opSPPZ[MN] || this.Command == Mnemonic.opSPS[MN] ||
                     this.Command == Mnemonic.opSPU[MN] || this.Command == Mnemonic.opSPZ[MN] ||
                     this.Command == Mnemonic.opSET[MN] || this.Command == Mnemonic.opCLR[MN])
            {
                retVal = (SelectedStatusValues.STW) & mySel;
            }
            else
            {
                retVal = (SelectedStatusValues.Akku1 | SelectedStatusValues.Akku2 | SelectedStatusValues.AR1 |
                          SelectedStatusValues.AR2 | SelectedStatusValues.DB | SelectedStatusValues.STW) & mySel;
            }

            //Return STW as Required minimum every Time (even if nothing is read,
            //but you need it to detect a not called line! (in a jump or smth. similar))
            //if (retVal == 0)
            //    retVal = SelectedStatusValues.STW;
            if (DiagDataTeletype == 0x01 && ((retVal & SelectedStatusValues.Akku1) > 0) || (retVal & SelectedStatusValues.Akku2) > 0)
            {
                retVal |= SelectedStatusValues.Akku1 | SelectedStatusValues.Akku2;
            }
            if (DiagDataTeletype == 0x01 && retVal != 0)
            {
                return(retVal | SelectedStatusValues.STW);
            }

            return(retVal);
        }
            public static BlockStatus ReadBlockStatus(byte[] daten, int startpos, SelectedStatusValues selStat, BlockStatus oldStatus)
            {
                BlockStatus ret = new BlockStatus();

                ret.STW = oldStatus.STW;
                ret.Akku1 = oldStatus.Akku1;
                ret.Akku2 = oldStatus.Akku2;
                ret.AR1 = oldStatus.AR1;
                ret.AR2 = oldStatus.AR2;
                ret.DB = oldStatus.DB;
                ret.DI = oldStatus.DI;

                int pos = startpos;

                if ((selStat & SelectedStatusValues.STW) > 0)
                {
                    ret.STW = (short?)(daten[pos] * 0x100 + daten[pos + 1]);
                    pos += 2;
                }
                if ((selStat & SelectedStatusValues.Akku1) > 0)
                {
                    ret.Akku1 = libnodave.getS32from(daten, pos);
                    pos += 4;
                }
                if ((selStat & SelectedStatusValues.Akku2) > 0)
                {
                    ret.Akku2 = libnodave.getS32from(daten, pos);
                    pos += 4;
                }
                if ((selStat & SelectedStatusValues.AR1) > 0)
                {
                    ret.AR1 = libnodave.getS32from(daten, pos);
                    pos += 4;
                }
                if ((selStat & SelectedStatusValues.AR2) > 0)
                {
                    ret.AR2 = libnodave.getS32from(daten, pos);
                    pos += 4;
                }
                if ((selStat & SelectedStatusValues.DB) > 0)
                {
                    //if (daten[pos] > 0)
                    ret.DB = libnodave.getU16from(daten, pos + 2);
                    //if (daten[pos + 1] > 0)
                    ret.DI = libnodave.getU16from(daten, pos + 4);
                    pos += 6;
                }
                return ret;
            }
        /*public byte _GetCommandStatusAskByte(SelectedStatusValues mySel, byte telegrammType)
        {
            byte retval = 0x00;

            if (telegrammType == 0x13)
                return (byte) _GetCommandStatusAskValues(mySel);
            else
            {
                SelectedStatusValues tmp = _GetCommandStatusAskValues(mySel);
                retval |= (mySel & SelectedStatusValues.STW) > 0 ? (byte)0x00 : (byte)0x00;
                retval |= (mySel & SelectedStatusValues.Akku1) > 0 ? (byte)0x01 : (byte)0x00;
                retval |= (mySel & SelectedStatusValues.Akku2) > 0 ? (byte)0x01 : (byte)0x00;
                retval |= (mySel & SelectedStatusValues.AR1) > 0 ? (byte)0x02 : (byte)0x00;
                retval |= (mySel & SelectedStatusValues.AR2) > 0 ? (byte)0x04 : (byte)0x00;
                retval |= (mySel & SelectedStatusValues.DB) > 0 ? (byte)0x08 : (byte)0x00;
                return retval;
            }
        }*/
        public SelectedStatusValues _GetCommandStatusAskValues(SelectedStatusValues mySel, byte DiagDataTeletype)
        {
            int MN = (int)this.MnemonicLanguage;

            SelectedStatusValues retVal;

            bool isDBcall = false;
            isDBcall = System.Text.RegularExpressions.Regex.IsMatch(this.Parameter, "DB[0-9]");

            //Todo: Look at this commands wich registeres are changed
            if (this.Command == Mnemonic.opCALL[MN] || this.Command == Mnemonic.opCC[MN] ||
                this.Command == Mnemonic.opENT[MN] || this.Command == Mnemonic.opEXP[MN] ||
                this.Command == Mnemonic.opFR[MN] ||
                this.Command == Mnemonic.opINC[MN] || this.Command == Mnemonic.opINVD[MN] ||
                this.Command == Mnemonic.opINVI[MN] || this.Command == Mnemonic.opITB[MN] ||
                this.Command == Mnemonic.opITD[MN] ||

                this.Command == Mnemonic.opLC[MN] || this.Command == Mnemonic.opLEAVE[MN] ||
                this.Command == Mnemonic.opLN[MN] || this.Command == Mnemonic.opLOOP[MN] ||
                this.Command == Mnemonic.opMCRA[MN] || this.Command == Mnemonic.opMCRC[MN] ||
                this.Command == Mnemonic.opMCRD[MN] || this.Command == Mnemonic.opMCRO[MN] ||
                this.Command == Mnemonic.opNEGD[MN] ||
                this.Command == Mnemonic.opNEGI[MN] || this.Command == Mnemonic.opNEGR[MN] ||
                this.Command == Mnemonic.opNOT[MN] ||
                this.Command == Mnemonic.opOD[MN] ||
                this.Command == Mnemonic.opONO[MN] || this.Command == Mnemonic.opOO[MN] ||
                this.Command == Mnemonic.opOW[MN] || this.Command == Mnemonic.opPAR1[MN] ||
                this.Command == Mnemonic.opPAR2[MN] ||
                this.Command == Mnemonic.opPOP[MN] || this.Command == Mnemonic.opPUSH[MN] ||
                this.Command == Mnemonic.opRLD[MN] ||
                this.Command == Mnemonic.opRLDA[MN] || this.Command == Mnemonic.opRND[MN] ||
                this.Command == Mnemonic.opRNDM[MN] || this.Command == Mnemonic.opRNDP[MN] ||
                this.Command == Mnemonic.opRRD[MN] || this.Command == Mnemonic.opRRDA[MN] ||
                this.Command == Mnemonic.opSA[MN] ||
                this.Command == Mnemonic.opSAVE[MN] || this.Command == Mnemonic.opSE[MN] ||
                this.Command == Mnemonic.opSI[MN] ||
                this.Command == Mnemonic.opSS[MN] || this.Command == Mnemonic.opSSD[MN] ||
                this.Command == Mnemonic.opSSI[MN] || this.Command == Mnemonic.opSV[MN] ||
                this.Command == Mnemonic.opTRUNC[MN] ||
                this.Command == Mnemonic.opUO[MN] || this.Command == Mnemonic.opUC[MN] ||
                this.Command == Mnemonic.opUNO[MN] || this.Command == Mnemonic.opUD[MN] ||
                this.Command == Mnemonic.opUW[MN] ||
                this.Command == Mnemonic.opXNO[MN] || this.Command == Mnemonic.opXO[MN] ||
                this.Command == Mnemonic.opXOD[MN] || this.Command == Mnemonic.opXOW[MN] ||
                this.Command == Mnemonic.opZR[MN] || this.Command == Mnemonic.opZV[MN])
                retVal = (SelectedStatusValues.Akku1 | SelectedStatusValues.Akku2 | SelectedStatusValues.AR1 |
                        SelectedStatusValues.AR2 | SelectedStatusValues.DB | SelectedStatusValues.STW) & mySel;
            else if (this.Command == "+I" || this.Command == "-I" || this.Command == "*I" || this.Command == "/I" || this.Command == "+D" || this.Command == "-D" || this.Command == "*D" || this.Command == "/D" || this.Command == "+R" || this.Command == "-R" || this.Command == "*R" || this.Command == "/R" || this.Command == "MOD")
                retVal = (SelectedStatusValues.Akku1 | SelectedStatusValues.Akku2 | SelectedStatusValues.STW) & mySel;
            else if (this.Command == Mnemonic.opPLU[MN] || this.Command == Mnemonic.opABS[MN] || this.Command == Mnemonic.opBTD[MN] ||
                this.Command == Mnemonic.opACOS[MN] || this.Command == Mnemonic.opASIN[MN] || this.Command == Mnemonic.opBTI[MN] ||
                this.Command == Mnemonic.opATAN[MN] || this.Command == Mnemonic.opTAN[MN] || this.Command == Mnemonic.opSIN[MN] ||
                this.Command == Mnemonic.opCOS[MN] || this.Command == Mnemonic.opSQR[MN] || this.Command == Mnemonic.opSQRT[MN] ||
                this.Command == Mnemonic.opDEC[MN] || this.Command == Mnemonic.opTAW[MN] || this.Command == Mnemonic.opTAD[MN] ||
                this.Command == Mnemonic.opDTB[MN] || this.Command == Mnemonic.opDTR[MN] || this.Command == Mnemonic.opSLD[MN] ||
                this.Command == Mnemonic.opSLW[MN] || this.Command == Mnemonic.opSRD[MN] || this.Command == Mnemonic.opSRW[MN])
                retVal = (SelectedStatusValues.Akku1) & mySel;
            else if (this.Command == Mnemonic.opTAR[MN])
                retVal = (SelectedStatusValues.AR1 | SelectedStatusValues.AR2) & mySel;
            else if (this.Command == Mnemonic.opLAR1[MN])
                retVal = (SelectedStatusValues.AR1) & mySel;
            else if (this.Command == Mnemonic.opLAR2[MN])
                retVal = (SelectedStatusValues.AR2) & mySel;
            else if ((this.Command == Mnemonic.opL[MN]) && isDBcall)
                retVal = (SelectedStatusValues.Akku1 | SelectedStatusValues.Akku2 | SelectedStatusValues.DB) & mySel;
            else if ((this.Command == Mnemonic.opT[MN]) && isDBcall)
                retVal = (SelectedStatusValues.DB) & mySel;
            else if (this.Command == Mnemonic.opTAK[MN] || this.Command == Mnemonic.opL[MN] || this.Command == Mnemonic.opTAR1[MN] || this.Command == Mnemonic.opTAR2[MN])
                retVal = (SelectedStatusValues.Akku1 | SelectedStatusValues.Akku2) & mySel;
            else if ((this.Command == Mnemonic.opU[MN] || this.Command == Mnemonic.opUN[MN] || this.Command == Mnemonic.opO[MN] || this.Command == Mnemonic.opON[MN] || this.Command == Mnemonic.opX[MN] || this.Command == Mnemonic.opXN[MN] || this.Command == Mnemonic.opFN[MN] || this.Command == Mnemonic.opFP[MN] || this.Command == Mnemonic.opZUW[MN] || this.Command == Mnemonic.opS[MN] || this.Command == Mnemonic.opR[MN] || this.Command == Mnemonic.opT[MN]) && isDBcall)
                retVal = (SelectedStatusValues.STW | SelectedStatusValues.DB) & mySel;
            else if (this.Command == Mnemonic.opU[MN] || this.Command == Mnemonic.opUN[MN] || this.Command == Mnemonic.opO[MN] ||
                    this.Command == Mnemonic.opON[MN] || this.Command == Mnemonic.opX[MN] || this.Command == Mnemonic.opXN[MN] ||
                    this.Command == Mnemonic.opFN[MN] || this.Command == Mnemonic.opFP[MN] || this.Command == Mnemonic.opZUW[MN] ||
                    this.Command == Mnemonic.opS[MN] || this.Command == Mnemonic.opR[MN] || this.Command == Mnemonic.opBE[MN] ||
                    this.Command == Mnemonic.opBEA[MN] || this.Command == Mnemonic.opBEB[MN] || this.Command == ")")
                retVal = (SelectedStatusValues.STW) & mySel;
            else if (this.Command == Mnemonic.opT[MN] || this.Command == Mnemonic.opBLD[MN] || this.Command == Mnemonic.opNOP[MN] ||
                     this.Command == Mnemonic.opSPA[MN])
                retVal = 0;
            else if (this.Command == Mnemonic.opAUF[MN] || this.Command == Mnemonic.opTDB[MN])
                retVal = (SelectedStatusValues.DB) & mySel;
            else if (this.Command == Mnemonic.opSPB[MN] || this.Command == Mnemonic.opSPBB[MN] ||
                     this.Command == Mnemonic.opSPBI[MN] || this.Command == Mnemonic.opSPBIN[MN] ||
                     this.Command == Mnemonic.opSPBN[MN] || this.Command == Mnemonic.opSPBNB[MN] ||
                     this.Command == Mnemonic.opSPL[MN] || this.Command == Mnemonic.opSPM[MN] ||
                     this.Command == Mnemonic.opSPMZ[MN] || this.Command == Mnemonic.opSPN[MN] ||
                     this.Command == Mnemonic.opSPO[MN] || this.Command == Mnemonic.opSPP[MN] ||
                     this.Command == Mnemonic.opSPPZ[MN] || this.Command == Mnemonic.opSPS[MN] ||
                     this.Command == Mnemonic.opSPU[MN] || this.Command == Mnemonic.opSPZ[MN] ||
                     this.Command == Mnemonic.opSET[MN] || this.Command == Mnemonic.opCLR[MN])
                retVal = (SelectedStatusValues.STW) & mySel;
            else
                retVal = (SelectedStatusValues.Akku1 | SelectedStatusValues.Akku2 | SelectedStatusValues.AR1 |
                      SelectedStatusValues.AR2 | SelectedStatusValues.DB | SelectedStatusValues.STW) & mySel;

            //Return STW as Required minimum every Time (even if nothing is read,
            //but you need it to detect a not called line! (in a jump or smth. similar))
            //if (retVal == 0)
            //    retVal = SelectedStatusValues.STW;
            if (DiagDataTeletype == 0x01 && ((retVal & SelectedStatusValues.Akku1) > 0) || (retVal & SelectedStatusValues.Akku2) > 0)
                retVal |= SelectedStatusValues.Akku1 | SelectedStatusValues.Akku2;
            if (DiagDataTeletype == 0x01 && retVal != 0)
                return retVal | SelectedStatusValues.STW;

            return retVal;
        }
        public static short _GetCommandStatusAskSize(SelectedStatusValues mySel, byte telegrammType)
        {
            short size = 0;

            if (telegrammType == 0x13)
            {
                if ((mySel & SelectedStatusValues.STW) > 0)
                    size += 2;
                if ((mySel & SelectedStatusValues.Akku1) > 0)
                    size += 4;
                if ((mySel & SelectedStatusValues.Akku2) > 0)
                    size += 4;
                if ((mySel & SelectedStatusValues.AR1) > 0)
                    size += 4;
                if ((mySel & SelectedStatusValues.AR2) > 0)
                    size += 4;
                if ((mySel & SelectedStatusValues.DB) > 0)
                    size += 6;
                return size;
            }
            else
            {
                if ((mySel & SelectedStatusValues.STW) > 0)
                    size += 2;
                if ((mySel & SelectedStatusValues.Akku1) > 0 || (mySel & SelectedStatusValues.Akku2) > 0)
                    size += 8;
                if ((mySel & SelectedStatusValues.AR1) > 0)
                    size += 4;
                if ((mySel & SelectedStatusValues.AR2) > 0)
                    size += 4;
                if ((mySel & SelectedStatusValues.DB) > 0)
                    size += 6;
                return size;
            }
        }