예제 #1
0
        public int L2SendPingSgn()
        {
            sL1Object_t L1Obj = new sL1Object_t();

            if (L1Object.L1Object_BuildCMDPkg(this, (byte)PKG_TYPE.PING_PKG, u8Seq, ref L1Obj) == 1)
            {
                try
                {
                    byte[] tempByte = new byte[L1Obj.u16DataLen + 1 + L1Object.HEADER_LENGTH];

                    L1Object.L1Object_L1ObjectToArray(L1Obj, ref tempByte);

                    L1Handler.Send(tempByte);
                }
                catch (System.Exception ex)
                {
                    Trace.WriteLine("Can not send PING package!\r\n");
                    return(0);
                }

                /*Reset sequence*/
                u8Seq = 0;
                return(1);
            }
            else
            {
                Trace.WriteLine("Can not build package from input data./r/n");
                return(0);
            }
        }
예제 #2
0
        public int L2ReSendLastCMD()
        {
            try
            {
                byte[] tempByte = new byte[sObjLastCMDPkg.u16DataLen + 1 + L1Object.HEADER_LENGTH];

                L1Object.L1Object_L1ObjectToArray(sObjLastCMDPkg, ref tempByte);

                L1Handler.Send(tempByte);
            }
            catch (System.Exception ex)
            {
                Trace.WriteLine("Can not send data!\r\n");
                return(0);
            }

            return(1);
        }
예제 #3
0
        public int L2SendCMD(byte eMinor)
        {
            sL1Object_t L1Obj = new sL1Object_t();

            if (L1Object.L1Object_BuildCMDPkg(this, eMinor, u8Seq, ref L1Obj) == 1)
            {
                byte[] tempByte = new byte[L1Obj.u16DataLen + 1 + L1Object.HEADER_LENGTH];

                L1Object.L1Object_L1ObjectToArray(L1Obj, ref tempByte);

                try
                {
                    L1Handler.Send(tempByte);
                }
                catch (System.Exception ex)
                {
                    Trace.WriteLine(ex.Message);
                    return(0);
                }

                /*Increase sequence*/
                u8Seq++;

                Buffer.BlockCopy(L1Obj.aPayLoad, 0, sObjLastCMDPkg.aPayLoad, 0, L1Obj.u16DataLen);
                sObjLastCMDPkg.bIsEnableEncrypt   = L1Obj.bIsEnableEncrypt;
                sObjLastCMDPkg.bIsNeedFeedBackACK = L1Obj.bIsNeedFeedBackACK;
                sObjLastCMDPkg.u16DataLen         = L1Obj.u16DataLen;
                sObjLastCMDPkg.u8MajorCmd         = L1Obj.u8MajorCmd;
                sObjLastCMDPkg.u8MinorCmd         = L1Obj.u8MinorCmd;
                sObjLastCMDPkg.u8Seq = L1Obj.u8Seq;

                return(1);
            }
            else
            {
                Trace.WriteLine("Can not build package from input data./r/n");
                return(0);
            }
        }
예제 #4
0
        private void L2SendPkg(L2Pkg pkg)
        {
            if (pkg.isNeededACK)
            {
                int  sendTimes = (int)pkg.resend + 1;
                bool respond   = false;

                //Send data and wait respond
                do
                {
                    l2State = L2State_E.TX_MODE;

                    sL1Object_t obj = new sL1Object_t();
                    L1Object.L1Object_BuildFromData(this, pkg.data, pkg.MinorCmd, u8Seq, ref obj);

                    byte[] temp = new byte[pkg.data.Length + 1 + L1Object.HEADER_LENGTH];

                    L1Object.L1Object_L1ObjectToArray(obj, ref temp);

                    L1Handler.Send(temp);

                    l2State = L2State_E.WAIT_RESP_MODE;
                    //Wait respond event
                    if (ACKRespondEvent.WaitOne(TIME_WAIT_DEV_RESPOND))
                    {
                        respond = true;
                    }
                    else
                    {
                        Trace.WriteLine("L2:Resend " + sendTimes.ToString());
                        if (IsResetEn)
                        {
                            try
                            {
                                L1Handler.Close();
                                L1Handler.Open();
                            }
                            catch (Exception ex)
                            {
                                l2State = L2State_E.ERROR;
                                Trace.WriteLine(ex.Message);
                            }
                        }
                    }

                    ACKRespondEvent.Reset();

                    sendTimes--;
                } while (respond == false && sendTimes > 0);

                if (respond == false && sendTimes <= 0)
                {
                    l2State = L2State_E.ERROR;
                }
                else
                {
                    l2State = L2State_E.NORMAL_MODE;
                }
            }
            else
            {
                l2State = L2State_E.TX_MODE;

                sL1Object_t obj = new sL1Object_t();
                L1Object.L1Object_BuildFromData(this, pkg.data, pkg.MinorCmd, u8Seq, ref obj);

                byte[] temp = new byte[pkg.data.Length + 1 + L1Object.HEADER_LENGTH];

                L1Object.L1Object_L1ObjectToArray(obj, ref temp);

                L1Handler.Send(temp);

                l2State = L2State_E.NORMAL_MODE;
            }
        }