private byte bufcnt; //data buffer count public FrameBuffer() { flag = RF_STATE.RF_IDLE; data = new byte[32]; bufcnt = 0; }
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; }
public void ResetFlag() { flag = RF_STATE.RF_IDLE; }
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; }