コード例 #1
0
        /// <summary>
        /// 向下封装PC-RSU数据帧,返回的是FF转义后的STX||RSCTL||DATA||BCC||ETX
        /// </summary>
        /// <param name="src">PC-RSU数据帧,RSCTL||DATA||BCC</param>
        /// <param name="offSet">起始位置</param>
        /// <param name="size">长度</param>
        /// <param name="dest">返回的是FF转义后的STX||RSCTL||DATA||BCC||ETX</param>
        protected void PcRsuFrameDown(byte[] src, int offSet, int size, out byte[] dest)
        {
            List <byte> _pcrsu_frame_down_temp = new List <byte>();

            _pcrsu_frame_down_temp.Add(0XFF);
            _pcrsu_frame_down_temp.Add(0XFF);

            //矫正BCC
            src[offSet + size - 1] = ViaHere.BccCalc(src, offSet, size - 1);

            for (int i = offSet; i < offSet + size; i++)
            {
                switch (src[i])
                {
                case 0xFF:
                    _pcrsu_frame_down_temp.Add(0xfe);
                    _pcrsu_frame_down_temp.Add(0x01);
                    break;

                case 0xFE:
                    _pcrsu_frame_down_temp.Add(0xfe);
                    _pcrsu_frame_down_temp.Add(0x00);
                    break;

                default:
                    _pcrsu_frame_down_temp.Add(src[i]);
                    break;
                }
            }

            _pcrsu_frame_down_temp.Add(0XFF);
            dest = _pcrsu_frame_down_temp.ToArray();
        }
コード例 #2
0
        /// <summary>
        /// 返回FALSE,表示该帧无效
        /// </summary>
        /// <param name="bx"></param>
        /// <returns></returns>
        protected bool BxFrameCheck(byte[] bx)
        {
            if (bx == null)
            {
                return(false);
            }
            if (bx.Length <= 2)
            {
                return(false);
            }

            bool rt = true;

            //帧长度以及帧头标识的检查
            switch (bx[1])
            {
            case 0xB0:
                if (bx.Length != 29 && bx.Length != 28)
                {
                    rt = false;
                }
                break;

            case 0xB1:
                if (bx.Length != 5)
                {
                    rt = false;
                }
                break;

            case 0xB2:
                if (bx.Length >= 7 && bx[6] == 0x80)
                {
                    break;
                }
                else if (bx.Length != 35)
                {
                    rt = false;
                }
                break;

            case 0xB3:
                if (bx.Length != 24)
                {
                    rt = false;
                }
                break;

            case 0xB4:
                if (bx.Length != 98 && bx.Length != 101)
                {
                    rt = false;
                }
                break;

            case 0xB5:
                if (bx.Length != 18 && bx.Length != 40 &&
                    bx.Length < 8        //仅检查到status字段
                    )
                {
                    rt = false;
                }
                break;

            default:
                rt = false;
                break;
            }

            //BCC CHECK
            if (bx[bx.Length - 1] != ViaHere.BccCalc(bx, 0, bx.Length - 1))
            {
                rt = false;
            }

            return(rt);
        }