예제 #1
0
        public void ReceiveAction(DataPackage pkgData)
        {
            //收到 文件读写请求 的应答【采集器→主机】
            Struct_FileHead fileHead = new Struct_FileHead();
            Struct_Clock clock = new Struct_Clock();

            byte[] dataBuffer = pkgData.PureData;
            using (MemoryStream ms = new MemoryStream(dataBuffer))
            {
                using (BinaryReader br = new BinaryReader(ms))
                {
                    fileHead.Buffer = br.ReadBytes(4);      //要读取文件的参数
                    curDataLen = br.ReadInt32();            //文件长度。为 0 表示文件不存在,后续的内容均应为 0。

                    clock.Buffer = br.ReadBytes(7);         //文件起始时间
                    byte duration = br.ReadByte();          //文件持续时间长度,秒为单位。对于图片,此值为 0
                    br.ReadInt32();                         //保留字节

                    macState = 1;
                }
            }

            if (curDataLen > 0)
            {
                //读取文件数据, 发送读取数据的命令

                //创建数据存储文件
                curFileName = string.Format("File_{0}.dat", DateTime.Now.ToString("yyyyMMddHHmmss"));
                curStream = new FileStream(curFileName, FileMode.Create, FileAccess.Write);
                curBinaryWriter = new BinaryWriter(curStream);

                SendDataRead(curRecNo, 0);
            }
        }
예제 #2
0
        //---------------------------------------------------------------------
        //读取数据
        public void SendDataRead(byte recNo, ushort packID)
        {
            //发送读取数据命令【主机→采集器】
            DataPackage pkgData = new DataPackage();

            pkgData.CtrlHead.CMD_ID = HCCommand.DATA_READ;
            pkgData.CtrlHead.CE_ID = ceInfo.CE_ID;

            Struct_FileHead fileHead = new Struct_FileHead();
            fileHead.TriggerType = RecordTriggerType.Manual;
            fileHead.FileType = RecordFileType.Image;
            fileHead.RecordNO = recNo;
            fileHead.opFlag = 0;

            using (MemoryStream ms = new MemoryStream())
            {
                using (BinaryWriter bw = new BinaryWriter(ms))
                {
                    bw.Write(packID);    //包序号
                    bw.Write(fileHead.Buffer);
                }

                pkgData.PureData = ms.ToArray();
            }

            pkgData.Pack();
            SendData(pkgData);
        }
예제 #3
0
        public void ReceiveDataRead(DataPackage pkgData)
        {
            //收到数据【采集器→主机】
            ushort packID = 0;
            Struct_FileHead fileHead = new Struct_FileHead();

            byte[] dataBuffer = pkgData.PureData;
            using (MemoryStream ms = new MemoryStream(dataBuffer))
            {
                using (BinaryReader br = new BinaryReader(ms))
                {
                    fileHead.Buffer = br.ReadBytes(4);      //要读取文件的参数
                    packID = br.ReadUInt16();               //包序号,0x0000-0xF0EF,0xF0F0 表示最后一帧

                    int packDataLen = br.ReadUInt16();      //该包数据中图像数据长度,最大 506 字节。

                    byte[] readBytes = br.ReadBytes(packDataLen);

                    curReadbytes+= readBytes.Length;

                    curBinaryWriter.Write(readBytes);       //将数据写入本地文件

                }
            }

            if ((packID < 0xF0F0) && curReadbytes < curDataLen)
            {
                //未结束,继续读取下一包数据
                packID++;
                SendDataRead(curRecNo, packID);
                OnProgress();
            }
            else
            {
                //结束,发送确认帧
                SendDataACK(curRecNo);
                OnProgress();
            }
        }
예제 #4
0
        void SendFileWrite()
        {
            //发送 “读取/写入文件”命令 【主机→采集器】
            DataPackage pkgData = new DataPackage();
            pkgData.CtrlHead.CMD_ID = HCCommand.FILE_RW_REQUEST;
            pkgData.CtrlHead.CE_ID = 0;

            Struct_FileHead fileHead = new Struct_FileHead();
            fileHead.RecordNO = 0;

            using (MemoryStream ms = new MemoryStream())
            {
                using (BinaryWriter bw = new BinaryWriter(ms))
                {
                    bw.Write(fileHead.Buffer);                  //要查询文件的参数
                    bw.Write((uint)curDataLen);                 //文件长度。对读取操作时应填 0。
                }

                pkgData.PureData = ms.ToArray();
            }

            pkgData.Pack();
            SendData(pkgData);
        }
예제 #5
0
        //---------------------------------------------------------------------
        //写入数据
        public void SendDataWrite(byte recNo, ushort packID)
        {
            //发送写入数据命令【主机→采集器】
            DataPackage pkgData = new DataPackage();
            pkgData.CtrlHead.DIR = (uint)E_DIR.DOWN;
            pkgData.CtrlHead.FLAG = (uint)E_FLAG.QUERY;
            pkgData.CtrlHead.CMD_SET = (uint)E_CMD_SET.NET1;
            pkgData.CtrlHead.CMD_ID = HCCommand.DATA_WRITE;
            pkgData.CtrlHead.CE_ID = 0;

            Struct_FileHead fileHead = new Struct_FileHead();
            fileHead.TriggerType = RecordTriggerType.Manual;
            fileHead.FileType = RecordFileType.Image;
            fileHead.RecordNO = recNo;
            fileHead.opFlag = 0;

            int pakDataLen = PAK_DATA_LEN; //每包数据长度,最大 506;
            byte[] pakBuffer = curBinaryReader.ReadBytes(pakDataLen);
            if (pakBuffer.Length <= PAK_DATA_LEN)
            {
                packID = 0xF0F0;    //表示文件结束
            }

            using (MemoryStream ms = new MemoryStream())
            {
                using (BinaryWriter bw = new BinaryWriter(ms))
                {
                    bw.Write(fileHead.Buffer);
                    bw.Write(packID);               //包序号,0x0000-0xF0EF,0xF0F0 表示最后一帧
                    bw.Write((ushort)pakDataLen);
                    bw.Write(pakBuffer);
                }

                pkgData.PureData = ms.ToArray();
            }

            pkgData.Pack();
            SendData(pkgData);
        }
예제 #6
0
        public void ReceiveDataWrite(DataPackage pkgData)
        {
            //收到数据【采集器→主机】
            ushort packID = 0;
            Struct_FileHead fileHead = new Struct_FileHead();

            byte[] dataBuffer = pkgData.PureData;
            using (MemoryStream ms = new MemoryStream(dataBuffer))
            {
                using (BinaryReader br = new BinaryReader(ms))
                {
                    packID = br.ReadUInt16();               //包序号,0x0000-0xF0EF,0xF0F0 表示最后一帧

                    fileHead.Buffer = br.ReadBytes(4);      //要读取文件的参数

                    if (macState == 1) { macState = 2; }
                }
            }

            if (packID < 0xF0F0)
            {
                //未结束,继续写入下一包数据
                packID++;
                SendDataWrite(curRecNo, packID);
            }
            else
            {
                //结束,发送确认帧
                if (macState == 2) { macState = 3; }
                SendDataACK(curRecNo);

            }
        }
예제 #7
0
        public void ReceiveDataReadStream(DataPackage pkgData)
        {
            //收到实时码流数据【采集器→主机】
            ushort packID = 0;
            Struct_FileHead fileHead = new Struct_FileHead();

            byte[] readBytes = null;
            byte[] dataBuffer = pkgData.PureData;
            using (MemoryStream ms = new MemoryStream(dataBuffer))
            {
                using (BinaryReader br = new BinaryReader(ms))
                {
                    fileHead.Buffer = br.ReadBytes(4);      //要读取文件的参数
                    packID = br.ReadUInt16();               //包序号

                    int packDataLen = br.ReadUInt16();      //该包数据中图像数据长度,最大 506 字节。

                    readBytes = br.ReadBytes(packDataLen);

                }
            }

            if (readBytes != null && readBytes.Length > 0)
            {
                if (OnDataChanged != null)
                {
                    //通知主程序处理实时码流数据
                    StreamHandlerEventArgs eventArgs = new StreamHandlerEventArgs(RunMode.Stream);
                    eventArgs.OperState = OperationState.StreamReceiving;
                    eventArgs.Buffer = readBytes;
                    eventArgs.Value = null;

                    //if (readBytes.Length == 12)
                    //{
                    //    //媒体流数据包包头,包含了时间戳以及数据流信息
                    //    Struct_PacketHeader packetHeader = new Struct_PacketHeader(readBytes);
                    //    eventArgs.Value = packetHeader;
                    //}
                    //else
                    //{
                    //    File.WriteAllBytes("H:\\aa", readBytes);
                    //}

                    OnDataChanged(this, eventArgs);
                }
            }
        }