コード例 #1
0
ファイル: SPort.cs プロジェクト: ymz000/kpgweigher
 private byte bufcnt; //data buffer count
 public FrameBuffer()
 {
     flag   = RF_STATE.RF_IDLE;
     data   = new byte[32];
     bufcnt = 0;
 }
コード例 #2
0
ファイル: SPort.cs プロジェクト: ymz000/kpgweigher
        public void pushc(byte c)
        {
            if (flag == RF_STATE.RF_CKSUM)
            {
                throw new Exception("unexpected incoming char before last frame is handled.");
            }
            if (flag == RF_STATE.RF_DATABUF)
            {
                if (c == get_cksum())
                {
                    flag = RF_STATE.RF_CKSUM; //means we are handling command
                    return;
                }
            }
            if (flag == RF_STATE.RF_DATALEN)
            {
                try
                {
                    data[bufcnt] = c;
                }
                catch
                {
                    MessageBox.Show("so weird " + bufcnt.ToString() + ">" + data.Length);
                }
                bufcnt++;
                if (datalen <= bufcnt)
                {
                    flag = RF_STATE.RF_DATABUF;
                }
                return;
            }
            if (flag == RF_STATE.RF_CMD)
            {
                if ((c > 0) && (c < data.Length)) //valid frame
                {
                    bufcnt  = 0;
                    datalen = c;
                    flag    = RF_STATE.RF_DATALEN;
                }
                else
                {
                    flag = RF_STATE.RF_IDLE;
                }
                return;
            }
            if (flag == RF_STATE.RF_ADDRTO)
            {
                cmd  = c;
                flag = RF_STATE.RF_CMD;
                return;
            }
            if (flag == RF_STATE.RF_ADDRFROM)
            {
                if (c == 0x00) //send to pc node
                {
                    flag = RF_STATE.RF_ADDRTO;
                }
                return;
            }
            if (flag == RF_STATE.RF_HEAD2)
            {
                addr = c;
                flag = RF_STATE.RF_ADDRFROM;
                return;
            }
            if (flag == RF_STATE.RF_HEAD1)
            {
                if (c == 0x68)
                {
                    flag = RF_STATE.RF_HEAD2;
                    return;
                }
            }
            if (flag == RF_STATE.RF_IDLE)
            {
                if (c == 0xfe)
                {
                    flag = RF_STATE.RF_HEAD1;
                    return;
                }
            }

            flag = RF_STATE.RF_IDLE;
        }
コード例 #3
0
ファイル: SPort.cs プロジェクト: ymz000/kpgweigher
 public void ResetFlag()
 {
     flag = RF_STATE.RF_IDLE;
 }
コード例 #4
0
ファイル: SPort.cs プロジェクト: imdmmp/kpgweigher
 public void ResetFlag()
 {
     flag = RF_STATE.RF_IDLE;
 }
コード例 #5
0
ファイル: SPort.cs プロジェクト: imdmmp/kpgweigher
 private byte bufcnt;  //data buffer count
 public FrameBuffer()
 {
     flag = RF_STATE.RF_IDLE;
     data = new byte[32];
     bufcnt = 0;
 }
コード例 #6
0
ファイル: SPort.cs プロジェクト: imdmmp/kpgweigher
        public void pushc(byte c)
        {
            if (flag == RF_STATE.RF_CKSUM)
            {
                throw new Exception("unexpected incoming char before last frame is handled.");
                
            }
            if (flag == RF_STATE.RF_DATABUF)
            {
                if (c == get_cksum())
                {
                    flag = RF_STATE.RF_CKSUM; //means we are handling command
                    return;
                }
            }
            if (flag == RF_STATE.RF_DATALEN)
            {
                try
                {
                    data[bufcnt] = c;
                }
                catch
                {
                    Program.MsgShow("so weird " + bufcnt.ToString() + ">" + data.Length);
                }
                bufcnt++;
                if (datalen <= bufcnt)
                {
                    flag = RF_STATE.RF_DATABUF;
                }
                return;
            }
            if (flag == RF_STATE.RF_CMD)
            {
                if ((c > 0) && (c < data.Length)) //valid frame
                {
                    bufcnt = 0;
                    datalen = c;
                    flag = RF_STATE.RF_DATALEN;
                }
                else
                {
                    flag = RF_STATE.RF_IDLE;
                }
                return;
            }
            if (flag == RF_STATE.RF_ADDRTO)
            {
                cmd = c;
                flag = RF_STATE.RF_CMD;
                return;
            }
            if (flag == RF_STATE.RF_ADDRFROM)
            {
                if (c == 0x00) //send to pc node
                {
                    flag = RF_STATE.RF_ADDRTO;
                }
                return;
            }
            if (flag == RF_STATE.RF_HEAD2)
            {
                addr = c;
                flag = RF_STATE.RF_ADDRFROM;
                return;
            }
            if (flag == RF_STATE.RF_HEAD1)
            {
                if (c == 0x68)
                {
                    flag = RF_STATE.RF_HEAD2;
                    return;
                }
            }
            if (flag == RF_STATE.RF_IDLE)
            {
                if (c == 0xfe)
                {
                    flag = RF_STATE.RF_HEAD1;
                    return;
                }
            }

            flag = RF_STATE.RF_IDLE;
        }