/// <summary>
        /// 获取服务器时间
        /// </summary>
        /// <returns></returns>
        public string UP0012(string cp_code, string cb_code, string bodyData)
        {
            string sendData = "";
            Dictionary <string, object> tcpClientDic = Config.g_tcpClientDic[cp_code];
            Listener_ChargePile_Data_AC data         = (Listener_ChargePile_Data_AC)tcpClientDic["data"];

            string checkbody = "DW0012[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "]";

            sendData =
                tcpClientDic["version"].ToString() +
                data.cs_id +
                cp_code +
                cb_code +
                CRC16.GetString(checkbody) +
                checkbody;
            return(sendData);
        }
示例#2
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public override byte[] MakeCommand()
        {
            byte[] r = new byte[9];
            r[0] = 0x21;                  //!
            r[1] = 0x58;                  //X
            r[2] = 0x44;                  //D
            r[3] = (byte)Station.Address; //dev adr
            r[4] = 0xA0;                  //dev type
            r[5] = 0x1E;                  // func code
            r[6] = 00;                    // inner data len
            byte hi, lo;

            CRC16.CalculateCRC(r, 7, out hi, out lo);
            r[7] = lo;
            r[8] = hi;
            return(r);
        }
示例#3
0
        /// <summary>
        /// 线圈写入
        /// </summary>
        /// <param name="address"></param>
        /// <param name="value"></param>
        /// <param name="stationNumber"></param>
        /// <param name="functionCode"></param>
        public Result Write(string address, bool value, byte stationNumber = 1, byte functionCode = 5)
        {
            if (isAutoOpen)
            {
                Connect();
            }
            var result = new Result();

            try
            {
                var command      = GetWriteCoilCommand(address, value, stationNumber, functionCode);
                var commandCRC16 = CRC16.GetCRC16(command);
                result.Requst = string.Join(" ", commandCRC16.Select(t => t.ToString("X2")));
                //发送命令并获取响应报文
                var responsePackage = SendPackage(commandCRC16);
                if (!responsePackage.Any())
                {
                    result.IsSucceed = false;
                    result.Err       = "响应结果为空";
                    return(result);
                }
                else if (!CRC16.CheckCRC16(responsePackage))
                {
                    result.IsSucceed = false;
                    result.Err       = "响应结果CRC16验证失败";
                    //return result;
                }
                byte[] resultBuffer = new byte[responsePackage.Length - 2];
                Buffer.BlockCopy(responsePackage, 0, resultBuffer, 0, resultBuffer.Length);
                result.Response = string.Join(" ", responsePackage.Select(t => t.ToString("X2")));
            }
            catch (Exception ex)
            {
                result.IsSucceed = false;
                result.Err       = ex.Message;
                result.ErrList.Add(ex.Message);
            }
            finally
            {
                if (isAutoOpen)
                {
                    Dispose();
                }
            }
            return(result);
        }
        /// <summary>
        /// Upload to a remote device
        /// </summary>
        /// <param name="serialPort">Serial port</param>
        /// <param name="fileaName">Full file name</param>
        /// <returns></returns>
        private bool Upload(string filename, byte[] data, DateTimeOffset lastWriteTimeUtc)
        {
            var hasUploadedSuccessfully = default(bool);

            var sw = new Stopwatch();

            sw.Start();

            var crc16 = new CRC16();
            var crc32 = new CRC32();

            // Close serial port if already open.
            CloseSerialPortIfOpen();

            // Initiate session
            var hasExecutedCommandSuccessfully = SendZRQINITFrame(crc16);

            if (hasExecutedCommandSuccessfully)
            {
                // Send ZFILE header with filename.
                hasUploadedSuccessfully = hasExecutedCommandSuccessfully = SendZFILEHeaderCommand(filename, data.Length, lastWriteTimeUtc, crc32);
            }

            if (hasExecutedCommandSuccessfully)
            {
                // Send binary data wrapped into ZDATA header.
                SendZDATAPackets(data, 0, ChunkSize, crc32);
            }

            if (hasExecutedCommandSuccessfully)
            {
                // Send EOF command
                hasUploadedSuccessfully = hasExecutedCommandSuccessfully = SendEOFCommand(data.Length, crc16);
            }

            // Send ZFIN to finish the session
            hasExecutedCommandSuccessfully = SendFinishSession(crc16);

            // Send over and out
            SendCommand("OO");

            sw.Stop();
            Console.WriteLine($"Took: {sw.ElapsedMilliseconds}ms");

            return(hasUploadedSuccessfully);
        }
示例#5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public override CommResultState ProcessReceived(byte[] data)
        {
            if (data == null || data.Length == 0)
            {
                return(CommResultState.NullData);
            }
            if (data.Length != 9 + 0x0A)
            {
                return(CommResultState.LengthError);
            }

            if (data[4] != 0xA0 || data[5] != 0x14)
            {
                return(CommResultState.DataError);
            }

            if (data[6] != 0x0A)
            {
                return(CommResultState.DataError);
            }

            byte cachi, caclo;

            CRC16.CalculateCRC(data, data.Length - 2, out cachi, out caclo);

            byte hi = data[data.Length - 1];
            byte lo = data[data.Length - 2];

            if (cachi != hi || caclo != lo)
            {
                return(CommResultState.CheckError);
            }

            byte[] innerData = GRCommandMaker.GetReceivedInnerData(data);

            if (innerData[0] != GRDef.MC_GIVETEMP_MODE)
            {
                return(CommResultState.DataError);
            }

            _giveTempMode  = GetGiveTempMode(innerData[1]);
            _giveTempValue = BitConverter.ToSingle(innerData, 2);

            return(CommResultState.Correct);
        }
示例#6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="address"></param>
        /// <param name="deviceType"></param>
        /// <param name="functionCode"></param>
        /// <param name="datas"></param>
        /// <returns></returns>
        public static CommResultState CheckReceivedData(int address, int deviceType,
                                                        int functionCode, byte[] datas)
        {
            if (datas == null || datas.Length < XGDefinition.ZERO_DATA_CMD_LENGTH)
            {
                return(CommResultState.LengthError);
            }

            int innerDataLen = datas[XGDefinition.INNER_DATA_LENGTH_POS];

            if (innerDataLen != XGDefinition.GetInnerDataLen(functionCode))
            {
                return(CommResultState.LengthError);
            }

            if (datas.Length != XGDefinition.ZERO_DATA_CMD_LENGTH + innerDataLen)
            {
                return(CommResultState.LengthError);
            }

            byte calcHi, calcLo;

            CRC16.CalculateCRC(datas, datas.Length - 2, out calcHi, out calcLo);

            byte lo = datas[datas.Length - 2];
            byte hi = datas[datas.Length - 1];

            if (hi != calcHi || lo != calcLo)
            {
                return(CommResultState.CheckError);
            }

            int rAddress    = datas[XGDefinition.ADDRESS_POS];
            int rDeviceType = datas [XGDefinition.DEVICE_TYPE_POS];
            int rFC         = datas[XGDefinition.FUNCTION_CODE_POS];

            if (rAddress != address ||
                rDeviceType != deviceType ||
                rFC != functionCode)
            {
                return(CommResultState.DataError);
            }

            return(CommResultState.Correct);
        }
示例#7
0
        public string CreateQRString(QRInfo qrData)
        {
            var EMVCo               = "000201";
            var applicationID       = "0016A000000677010112";
            var BillerID            = $"{qrData.TaxID}{qrData.Suffix}";
            var defaultBiller       = "00000000000001";
            var billPaymentBillerID = !String.IsNullOrEmpty(BillerID) ? $"01{fieldIsNull(BillerID)}" : $"01{fieldIsNull(defaultBiller)}";
            var reference1          = $"02{fieldIsNull(qrData.Ref1)}";
            var reference2          = $"03{fieldIsNull(qrData.Ref2)}";
            var transactionAmount   = "";

            if (!String.IsNullOrEmpty(qrData.Amount))
            {
                var amount = String.Format("{0:0.00}", Convert.ToDouble(qrData.Amount));
                transactionAmount = $"54{len(amount)}{amount}";
            }
            else
            {
                transactionAmount = "";
            }
            var transactionCurrency = !String.IsNullOrEmpty(qrData.Currency) ? $"5303{qrData.Currency}" : $"5303764";
            var countryCode         = !String.IsNullOrEmpty(qrData.CountryCode) ? $"5802{(qrData.CountryCode).ToUpper()}" : "5802TH";
            var merchantName        = !String.IsNullOrEmpty(qrData.MerchantName) ? $"59{fieldIsNull(qrData.MerchantName)}" : "";
            var terminalNumber      = !String.IsNullOrEmpty(qrData.TerminalNo) ? $"62{fieldIsNull(qrData.TerminalNo)}" : "";
            var qrUse           = qrData.PointOfInherite == "No" ? "010212" : "010211";
            var billPayment     = $"{applicationID}{billPaymentBillerID}{reference1}{reference2}";
            var billPaymentInfo = $"30{fieldIsNull(billPayment)}";
            var qrcode          = new StringBuilder();

            qrcode.Append(EMVCo)
            .Append(qrUse)
            .Append(billPaymentInfo)
            .Append(transactionCurrency)
            .Append(transactionAmount)
            .Append(countryCode)
            .Append(merchantName)
            .Append(terminalNumber)
            .Append("6304");
            var payload = qrcode.ToString().Select(x => Convert.ToByte(x)).ToArray();
            var crc     = new CRC16().ComputeCheckSum(payload);
            var crc16   = crc.ToString("X").PadLeft(4, '0');

            qrcode.Append(crc16);
            return(qrcode.ToString());
        }
示例#8
0
        protected void BuildPayload(byte command, byte[] data)
        {
            ResponseCode = (byte)(command + 0x80);
            var dataLength    = (ushort)data.Length;
            var payloadLength = 8 + dataLength + 2; //preamble + data + crc

            if (command > 0x80)
            {
                /* this case is actually a response, but since it is
                 * used only for Pong, we threat it as a special case
                 * instead of creating a full ResponseBuildPayload
                 */
                payloadLength += 1; // RET
            }

            /* NOTE: in the original specification, the payload must be less than 400 bytes
             * However, issue #45 found that Facepass devices use much bigger payloads
             *
             * if (dataLength > 400)
             * {
             *     throw new Exception("Payload too big");
             * }
             */
            var i = 0;

            Payload      = new byte[payloadLength];
            Payload[i++] = 0xA5;
            Payload[i++] = (byte)((DeviceId >> 24) % 256);
            Payload[i++] = (byte)((DeviceId >> 16) % 256);
            Payload[i++] = (byte)((DeviceId >> 8) % 256);
            Payload[i++] = (byte)(DeviceId % 256);
            Payload[i++] = command;
            if (command > 0x80)
            {
                Payload[i++] = 0; // RET
            }
            Payload[i++] = (byte)(dataLength >> 8);
            Payload[i++] = (byte)(dataLength % 256);
            data.CopyTo(Payload, i);
            i += data.Length;
            var crc = CRC16.Compute(Payload, Payload.Length - 2); //last 2 bytes = crc

            Payload[i++] = (byte)(crc % 256);
            Payload[i++] = (byte)((crc >> 8) % 256);
        }
示例#9
0
        /// <summary>
        /// Sends a request to a module and then polls the module to get the response.
        /// </summary>
        /// <param name="addr">Module address.</param>
        /// <param name="buffer">I2C data to be sent, I2C data received after method returns.</param>
        /// <returns>Status of communication. True if response is valid, false otherwise.</returns>
        protected virtual bool RequestToModuleFromBuffer(int addr, ref byte[] buffer)
        {
            var m = new I2CManager();

            CRC16.PutCRC(ref buffer);

            LogBuffer(buffer, "I2C data sent");

            int fd = GetFDFromAddress(addr);
            int l  = m.I2CWriteBlock(fd, ref buffer);

            for (int i = 0; i < ICCConstants.PACKETSIZE; i++)
            {
                buffer[i] = 0;
            }

            return(PollModuleForResponse(addr, ref buffer));
        }
示例#10
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public override byte[] MakeCommand()
        {
            byte[] r = new byte[10];
            r[0] = 0x21;                   //!
            r[1] = 0x58;                   //X
            r[2] = 0x44;                   //D
            r[3] = (byte)Station.Address;
            r[4] = 0xA0;                   //dev type
            r[5] = GRDef.FC_READ_SETTINGS; // func code
            r[6] = 01;                     // inner data len
            r[7] = GRDef.MC_GIVETEMP_MODE;
            byte hi, lo;

            CRC16.CalculateCRC(r, 7, out hi, out lo);
            r[8] = lo;
            r[9] = hi;
            return(r);
        }
        private bool SendEOFCommand(int dataLength, CRC16 crcCalculator)
        {
            var result = default(bool);

            Utils.GenerateZModemFileOffset(dataLength, out int p0, out int p1, out int p2, out int p3);

            var zeofCommand = Utils.BuildCommonHexHeader(HeaderType.ZEOF, p0, p1, p2, p3, crcCalculator);

            // Send command
            var response = SendCommand(zeofCommand, true, HeaderType.ZRINIT);

            if (response?.ZHeader == HeaderType.ZRINIT)
            {
                result = true;
            }

            return(result);
        }
示例#12
0
 private void GenerateCommand()
 {
     command = new byte[7];
     byte[] commandCache = new byte[command.Length - 2];
     byte[] CRCCode;
     commandCache[0] = commandType;
     commandCache[1] = 0x00;
     commandCache[2] = 0x00;
     commandCache[3] = addrType;
     commandCache[4] = startLowAddr;
     CRCCode         = CRC16.GetCRC(commandCache);
     for (int i = 0; i < commandCache.Length; i++)
     {
         command[i] = commandCache[i];
     }
     command[5] = CRCCode[0];
     command[6] = CRCCode[1];
 }
示例#13
0
        /// <summary>
        /// 写入TCP
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void but_tcpIn_Click(object sender, RoutedEventArgs e)
        {
            string checkbody = "DW0255" +
                               "[" + text_version.Text + "]" +
                               "[" + text_cs_id.Text + "]" +
                               "[" + text_cp_code.Text + "]";
            string sendData = "(" +
                              text_version.Text +
                              text_cs_id.Text +
                              text_cp_code.Text +
                              "00000000000000000000000000000000" +
                              CRC16.GetString(checkbody) +
                              checkbody +
                              ")";

            m_socket.Send(Encoding.UTF8.GetBytes(sendData));
            text_content.AppendText("TCP数据已发送。\r\n");
        }
示例#14
0
        //--------
        //-------- ScratchPad methods
        //--------

        /// <summary>
        /// Read the scratchpad page of memory from a NVRAM device
        /// This method reads and returns the entire scratchpad after the byte
        /// offset regardless of the actual ending offset
        /// </summary>
        /// <param name="readBuf">       byte array to place read data into
        ///                       length of array is always pageLength. </param>
        /// <param name="offset">        offset into readBuf to pug data </param>
        /// <param name="len">           length in bytes to read </param>
        /// <param name="extraInfo">     byte array to put extra info read into
        ///                       (TA1, TA2, e/s byte)
        ///                       length of array is always extraInfoLength.
        ///                       Can be 'null' if extra info is not needed.
        /// </param>
        /// <exception cref="OneWireIOException"> </exception>
        /// <exception cref="OneWireException"> </exception>
        public override void readScratchpad(byte[] readBuf, int offset, int len, byte[] extraInfo)
        {
            // select the device
            if (!ib.adapter.select(ib.address))
            {
                forceVerify();

                throw new OneWireIOException("Device select failed");
            }

            // build block
            byte[] raw_buf = new byte[extraInfoLength + pageLength + 3];

            raw_buf[0] = READ_SCRATCHPAD_COMMAND;

            Array.Copy(ffBlock, 0, raw_buf, 1, raw_buf.Length - 1);

            // send block, command + (extra) + page data + CRC
            ib.adapter.dataBlock(raw_buf, 0, raw_buf.Length);

            // get the starting offset to see when the crc will show up
            int addr = raw_buf[1];

            addr = (addr | ((raw_buf[2] << 8) & 0xFF00)) & 0xFFFF;

            int num_crc = 35 - (addr & 0x001F) + extraInfoLength;

            // check crc of entire block
            if (CRC16.compute(raw_buf, 0, num_crc, 0) != 0x0000B001)
            {
                forceVerify();

                throw new OneWireIOException("Invalid CRC16 read from device");
            }

            // optionally extract the extra info
            if (extraInfo != null)
            {
                Array.Copy(raw_buf, 1, extraInfo, 0, extraInfoLength);
            }

            // extract the page data
            Array.Copy(raw_buf, extraInfoLength + 1, readBuf, 0, pageLength);
        }
示例#15
0
        public IActionResult Index()
        {
            var builder = new StringBuilder();

            builder.Append("00020101021229370016A0000006770101110113006691493165953037645802TH6304");
            var payload = builder.ToString().Select(x => Convert.ToByte(x)).ToArray();
            var crc     = new CRC16().ComputeCheckSum(payload);

            builder.Append(crc.ToString("X").PadLeft(4, '0'));
            var str = builder.ToString();

            MessagingToolkit.QRCode.Codec.QRCodeEncoder encoder = new MessagingToolkit.QRCode.Codec.QRCodeEncoder();
            encoder.QRCodeScale = 8;
            Bitmap bmp = encoder.Encode(str);



            return(View());
        }
        //--------
        //-------- ScratchPad methods
        //--------

        /// <summary>
        /// Write to the scratchpad page of memory a NVRAM device.
        /// </summary>
        /// <param name="startAddr">     starting address </param>
        /// <param name="writeBuf">      byte array containing data to write </param>
        /// <param name="offset">        offset into readBuf to place data </param>
        /// <param name="len">           length in bytes to write
        /// </param>
        /// <exception cref="OneWireIOException"> </exception>
        /// <exception cref="OneWireException"> </exception>
        public override void writeScratchpad(int startAddr, byte[] writeBuf, int offset, int len)
        {
            bool calcCRC = false;

            // select the device
            if (!ib.adapter.select(ib.address))
            {
                forceVerify();

                throw new OneWireIOException("Device select failed");
            }

            // build block to send
            byte[] raw_buf = new byte[37];

            raw_buf[0] = WRITE_SCRATCHPAD_COMMAND;
            raw_buf[1] = (byte)(startAddr & 0xFF);
            raw_buf[2] = (byte)(((int)((uint)(startAddr & 0xFFFF) >> 8)) & 0xFF);

            Array.Copy(writeBuf, offset, raw_buf, 3, len);

            // check if full page (can utilize CRC)
            if (((startAddr + len) % pageLength) == 0)
            {
                Array.Copy(ffBlock, 0, raw_buf, len + 3, 2);

                calcCRC = true;
            }

            // send block, return result
            ib.adapter.dataBlock(raw_buf, 0, len + 3 + ((calcCRC) ? 2 : 0));

            // check crc
            if (calcCRC)
            {
                if (CRC16.compute(raw_buf, 0, len + 5, 0) != 0x0000B001)
                {
                    forceVerify();

                    throw new OneWireIOException("Invalid CRC16 read from device");
                }
            }
        }
示例#17
0
        /// <summary>
        /// 写入
        /// </summary>
        /// <param name="address"></param>
        /// <param name="values"></param>
        /// <param name="stationNumber"></param>
        /// <param name="functionCode"></param>
        /// <returns></returns>
        public Result Write(string address, byte[] values, byte stationNumber = 1, byte functionCode = 16)
        {
            if (isAutoOpen)
            {
                Connect();
            }

            var result = new Result();

            try
            {
                var command = GetWriteCommand(address, values, stationNumber, functionCode);

                var commandCRC16 = CRC16.GetCRC16(command);
                serialPort.Write(commandCRC16, 0, commandCRC16.Length);
                result.Requst = string.Join(" ", commandCRC16.Select(t => t.ToString("X2")));
                //3 获取响应报文
                var responsePackage = SerialPortRead(serialPort);
                if (!CRC16.CheckCRC16(responsePackage))
                {
                    result.IsSucceed = false;
                    result.Err       = "响应结果CRC16验证失败";
                    return(result);
                }
                byte[] resultBuffer = new byte[responsePackage.Length - 2];
                Array.Copy(responsePackage, 0, resultBuffer, 0, resultBuffer.Length);
                result.Response = string.Join(" ", responsePackage.Select(t => t.ToString("X2")));
            }
            catch (Exception ex)
            {
                result.IsSucceed = false;
                result.Err       = ex.Message;
                result.ErrList.Add(ex.Message);
            }
            finally
            {
                if (isAutoOpen)
                {
                    Dispose();
                }
            }
            return(result);
        }
示例#18
0
        private void AlarmButton_Click(object sender, EventArgs e)
        {
            Task.Run(() =>
            {
                //发送120次报警信号跳变,
                for (int i = 0; i < 120; i++)
                {
                    Thread.Sleep(20);
                    GPIO.SetHigh();
                    Thread.Sleep(20);
                    GPIO.SetLow();
                }
            });

            portString     = textBox.Text;
            comboboxString = selectCombobox.Text;

            uint   portNum   = Convert.ToUInt32(portString);
            IntPtr comHandle = InitPort(portNum, 9600, 'N', 8, 1, false);

            readData = ReadDataCallBackFunc;
            CommSetCallBack(readData);

            CommStartR();

            byte   param  = Convert.ToByte(comboboxString);
            Random random = new Random();
            byte   x      = (byte)(0x50 + random.Next(0, 100));
            byte   y      = (byte)(0x50 + random.Next(0, 100));

            byte[] command = { 0x86, x, y, param, 0x00, 0x0a };

            byte[] crc      = CRC16.crc_16(command);
            byte[] sendData = new byte[command.Length + 2];
            command.CopyTo(sendData, 0);
            sendData[sendData.Length - 2] = crc[1];
            sendData[sendData.Length - 1] = crc[0];

            bool isWriteSuccessful = CommSendDataFunction(sendData, 8);

            ClosePort();
        }
示例#19
0
        public HBFCard()
        {
            Reset();

            // CRC calculator init
            m_crc_generator = new CRC16(0x1021, 0xffff);

            // reserve memory
            m_card_ram = new byte[CardRAMSize];
            m_card_rom = new byte[CardROMSize];

            // create disk drives
            m_disk_drives = new DiskDrive[NumberOfDrives];

            for (int i = 0; i < NumberOfDrives; i++)
            {
                m_disk_drives[i] = new DiskDrive();
            }

            //m_disk_drives[0] = new DiskDrive();
            m_disk_drives[0].Geometry.NumberOfTracks = 80;
            m_disk_drives[0].Geometry.NumberOfSides  = 2;
            m_disk_drives[0].Geometry.SectorPerTrack = 9;
            //m_disk_drives[0].OpenDiskImageFile(@"d:\Projects\Retro\YATE\disk\mralex.dsk");
            //m_disk_drives[0].OpenDiskImageFile(@"d:\Projects\Retro\YATE\disk\IKPLUS_TVC.dsk");
            //m_disk_drives[0].OpenDiskImageFile(@"d:\Projects\Retro\YATE\disk\test.dsk");
            //m_disk_drives[0].OpenDiskImageFile(@"d:\Projects\Retro\YATE\disk\UPM_TEST.dsk");
            //m_disk_drives[0].OpenDiskImageFile(@"d:\Projects\Retro\YATE\disk\UPM_test1.xdi");
            //m_disk_drives[0].OpenDiskImageFile(@"d:\Projects\Retro\YATE\disk\nautilus.dsk");
            m_disk_drives[0].OpenDiskImageFile(@"d:\Projects\Retro\YATE\disk\upmlemez.img");

            //m_disk_drives[1] = new DiskDrive();
            m_disk_drives[1].Geometry.NumberOfTracks = 40;
            m_disk_drives[1].Geometry.NumberOfSides  = 2;
            m_disk_drives[1].Geometry.SectorPerTrack = 9;
            //m_disk_drives[0].OpenDiskImageFile(@"d:\Projects\Retro\YATE\disk\mralex.dsk");
            //m_disk_drives[0].OpenDiskImageFile(@"d:\Projects\Retro\YATE\disk\IKPLUS_TVC.dsk");
            m_disk_drives[1].OpenDiskImageFile(@"d:\Projects\Retro\YATE\disk\test.dsk");
            //m_disk_drives[0].OpenDiskImageFile(@"d:\Projects\Retro\YATE\disk\UPM_TEST.dsk");
            //m_disk_drives[0].OpenDiskImageFile(@"d:\Projects\Retro\YATE\disk\UPM_test1.xdi");
            //m_disk_drives[0].OpenDiskImageFile(@"d:\Projects\Retro\YATE\disk\nautilus.dsk");
        }
示例#20
0
        static void Main(string[] args)
        {
            byte[] data = Encoding.ASCII.GetBytes("123456789");

            Crc16 crc16 = new Crc16(Crc16.IBM, true);

            Console.WriteLine("CRC-16 = {0:X4}", crc16.Compute(data));
            HashAlgorithm hash16 = new CRC16();

            Console.WriteLine("Nito CRC-16 = {0:X4}", BitConverter.ToUInt16(hash16.ComputeHash(data), 0));

            Crc16 crc16ccitt = new Crc16(Crc16.CCITT, false, 0xFFFF, 0);

            Console.WriteLine("CRC-16-CCITT = {0:X4}", crc16ccitt.Compute(data));
            HashAlgorithm hash16ccitt = new CRC16(CRC16.Definition.CcittFalse);

            Console.WriteLine("Nito CRC-16-CCITT = {0:X4}", BitConverter.ToUInt16(hash16ccitt.ComputeHash(data), 0));

            Crc32 crc32 = new Crc32(Crc32.IEEE, 0xFFFFFFFF, 0xFFFFFFFF);

            Console.WriteLine("CRC-32 = {0:X8}", crc32.Compute(data));
            HashAlgorithm hash32 = new CRC32();

            Console.WriteLine("Nito CRC-32 = {0:X8}", BitConverter.ToUInt32(hash32.ComputeHash(data), 0));

            XorHash32To16 xor1632 = new XorHash32To16(new Crc32(Crc32.IEEE));

            Console.WriteLine("Xor32To16 CRC-32 IEEE = {0:X4}", xor1632.Compute(data));
            CRC32.Definition crcdef = new CRC32.Definition();
            crcdef.FinalXorValue               = 0x0;
            crcdef.Initializer                 = 0x0;
            crcdef.ReverseDataBytes            = CRC32.Definition.Default.ReverseDataBytes;
            crcdef.ReverseResultBeforeFinalXor = CRC32.Definition.Default.ReverseResultBeforeFinalXor;
            crcdef.TruncatedPolynomial         = CRC32.Definition.Default.TruncatedPolynomial;
            HashAlgorithm hashXor = new Xor32To16Algorithm(crcdef.Create());

            Console.WriteLine("Nito Xor32To16 CRC-32 = {0:X4}", BitConverter.ToUInt16(hashXor.ComputeHash(data), 0));
#if DEBUG
            Console.WriteLine("---> Program finished.");
            Console.ReadKey();
#endif
        }
示例#21
0
        private void ReceiveBody(int BodyLength, bool PreserveBuffer, int SourceOffset)
        {
            var receivedBody = false;
            var timeout      = Environment.TickCount + m_TimeoutSync;

            while (Environment.TickCount < timeout || IGNORE_TIMEOUTS)
            {
                lock (m_ReadSync)
                {
                    if (m_RawReadBufferLength >= BodyLength * 2)
                    {
                        Utils.DeserializeBytesToUShortArray(m_RawReadBuffer, BodyLength * 2, m_ReadBuffer, SourceOffset);
                        if (!PreserveBuffer)
                        {
                            m_RawReadBufferLength -= BodyLength * 2 + SourceOffset;
                        }
                        receivedBody = true;
                    }
                }

                if (receivedBody)
                {
                    var crcComp = CRC16.ComputeCRC(m_ReadBuffer, BodyLength - 1);
                    var crcRec  = m_ReadBuffer[BodyLength - 1];

                    if (crcComp != crcRec)
                    {
                        throw new ProtocolBadCRCException(String.Format(Resources.SCCIMasterAdapter_Parser_error_bad_CRC, crcRec, crcComp), crcRec, crcComp);
                    }

                    break;
                }

                m_DataReceivedEvent.WaitOne((timeout - Environment.TickCount < 0) ? 0 : timeout - Environment.TickCount);
            }

            if (!receivedBody)
            {
                throw new ProtocolTimeoutException(Resources.SCCIMasterAdapter_General_error_timeout_while_reading_frame_body);
            }
        }
示例#22
0
        protected void BuildPayload(byte command, byte[] data)
        {
            ushort dataLength = (ushort)data.Length;
            ushort crc        = 0x0000;

            byte[] commandBytes = new byte[8 + dataLength];
            commandBytes[0] = 0xA5;
            commandBytes[1] = (byte)((deviceId >> 24) % 256);
            commandBytes[2] = (byte)((deviceId >> 16) % 256);
            commandBytes[3] = (byte)((deviceId >> 8) % 256);
            commandBytes[4] = (byte)(deviceId % 256);
            commandBytes[5] = command;
            commandBytes[6] = (byte)(dataLength >> 8);
            commandBytes[7] = (byte)(dataLength % 256);
            data.CopyTo(commandBytes, 8);
            crc     = CRC16.Compute(commandBytes);
            payload = new byte[commandBytes.Length + 2];
            commandBytes.CopyTo(payload, 0);
            payload[9 + dataLength] = (byte)((crc >> 8) % 256);
            payload[8 + dataLength] = (byte)(crc % 256);
        }
示例#23
0
        public static int RequestToModuleFromBuffer(int addr, ref byte[] buffer)
        {
            var m = new I2CManager();

            CRC16.PutCRC(ref buffer);
            int fd = GetFDFromAddress(addr);

            Console.WriteLine(string.Format("RequestToModuleFromBuffer : File descriptor : {0}", fd));
            int l = m.I2CWriteBlock(fd, ref buffer);

            //int l = m.I2CWriteBlockAddr(addr, ref buffer);

            PrintBuffer(buffer, "RequestToModuleFromBuffer");

            for (int i = 0; i < ICCConstants.PACKETSIZE; i++)
            {
                buffer[i] = 0;
            }

            return(PollModuleForResponse(addr, ref buffer));
        }
示例#24
0
        /// <summary>
        /// Test for SHT85
        /// </summary>
        public void TestWrite()
        {
            ResetOneWireAndMatchDeviceRomAddress();

            Master.EnableStrongPullup();

            //byte deviceCommand = (byte)DS28E17_Commands.WriteDataWithStop;
            byte deviceCommand = (byte)DS28E17.DeviceCommand.WriteDataWithStop;
            //deviceCommand = 0x1F;
            byte i2cSlaveAddress = 0x44; //0x44 SHT85 address
            var  sht85cmd        = BitConverter.GetBytes((UInt16)0x2416).Reverse().ToArray();
            //var sht85cmd = BitConverter.GetBytes((UInt16)0x2416).ToArray();

            var i2cCommand = new List <byte>();

            i2cCommand.Add(deviceCommand);
            i2cCommand.Add((byte)(i2cSlaveAddress << 1)); //7 bit for address, bit[0] = 0 (i2c write)
            i2cCommand.Add((byte)sht85cmd.Length);
            i2cCommand.AddRange(sht85cmd);

            var crc16 = CRC16.Compute(i2cCommand.ToArray());

            crc16 = ~crc16;

            foreach (byte b in i2cCommand)
            {
                Master.OneWireWriteByte(b);
                SpinWait.SpinUntil(() => false, 10);
            }

            Master.OneWireWriteByte((byte)(crc16 & 0xFF)); // Least significant byte of 16 bit CRC
            Master.OneWireWriteByte((byte)(crc16 >> 8));   // Most significant byte of 16 bit CRC

            SpinWait.SpinUntil(() => false, 10);

            var status      = Master.OneWireReadByte();
            var writeStatus = Master.OneWireReadByte();

            TestRead();
        }
示例#25
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public override CommResultState ProcessReceived(byte[] data)
        {
            if (data == null || data.Length == 0)
            {
                return(CommResultState.NullData);
            }

            if (data.Length != 113)
            {
                return(CommResultState.LengthError);
            }

            if (data[4] != 0xA0 || data[5] != 0x1E)
            {
                return(CommResultState.DataError);
            }
            byte cachi, caclo;

            CRC16.CalculateCRC(data, 113 - 2, out cachi, out caclo);

            byte hi = data[113 - 1];
            byte lo = data[113 - 2];

            if (cachi != hi || caclo != lo)
            {
                return(CommResultState.CheckError);
            }

            byte[] innerData = GetReceivedInnerData(data);
            int    address   = data[GRDef.ADDRESS_POS];

            GRRealData rd = GRRealData.Parse(innerData, address);

            _realData = rd;
            //Singles.S.OutSideTemperature = _realData.OutSideTemp;

            //Utilities.frmPropertiesGrid f = new frmPropertiesGrid();
            //f.ShowMe( rd,"");
            return(CommResultState.Correct);
        }
示例#26
0
        private void ReceiveDataStream(int DataCount, bool UseCRC, ushort CRC, int SourceBufferOffset)
        {
            var received     = false;
            var timeout      = Environment.TickCount + m_TimeoutSyncStream;
            var streamLength = (DataCount / DATA_STREAM_QUANTA + ((DataCount % DATA_STREAM_QUANTA != 0) ? 1 : 0)) * DATA_STREAM_QUANTA;

            while ((Environment.TickCount < timeout) || IGNORE_TIMEOUTS)
            {
                lock (m_ReadSync)
                {
                    if (m_RawReadBufferLength >= (streamLength * 2 + SourceBufferOffset))
                    {
                        Utils.DeserializeBytesToUShortArray(m_RawReadBuffer, streamLength * 2, m_ReadBuffer, SourceBufferOffset);
                        m_RawReadBufferLength -= streamLength * 2;
                        received = true;
                        break;
                    }
                }

                var tout = timeout - Environment.TickCount;
                tout = (tout < 0) ? 0 : tout;
                m_DataReceivedEvent.WaitOne(tout);
            }

            if (received && UseCRC)
            {
                var crcComp = CRC16.ComputeCRC(m_ReadBuffer, DataCount);

                if (crcComp != CRC)
                {
                    throw new ProtocolBadCRCException(
                              String.Format(Resources.SCCIMasterAdapter_Parser_error_bad_CRC, CRC, crcComp), CRC, crcComp);
                }
            }

            if (!received)
            {
                throw new ProtocolTimeoutException(Resources.SCCIMasterAdapter_General_error_timeout_while_reading_data_stream);
            }
        }
        /// <summary>
        /// 心跳
        /// </summary>
        /// <returns></returns>
        public string UP0001(string cp_code, string cb_code, string bodyData)
        {
            string sendData = "";
            Dictionary <string, object> tcpClientDic = Config.g_tcpClientDic[cp_code];
            Listener_ChargePile_Data_AC data         = (Listener_ChargePile_Data_AC)tcpClientDic["data"];
            //解析包文体
            MatchCollection arr  = Regex.Matches(bodyData, @"(?<=\[)[^\]]*(?=\])");
            string          UP_0 = arr[0].Value;                   //是否在充电
            string          UP_1 = arr[1].Value;                   //枪编号

            string[] UP_2 = arr[2].Value.Split('|');               //电压
            string[] UP_3 = arr[3].Value.Split('|');               //电流
            string   UP_4 = arr[4].Value;                          //有功功率
            string   UP_5 = arr[5].Value;                          //无功功率
            string   UP_6 = arr[6].Value;                          //功率因数
            string   UP_7 = double.Parse(arr[7].Value).ToString(); //电度
            string   UP_8 = arr[8].Value;                          //充电剩余时间
            string   UP_9 = arr[9].Value;                          //用户名

            //枪编号大于0才执行
            if (int.Parse(UP_1) > 0)
            {
                if (int.Parse(UP_0) == 1)
                {
                    data.gundata[int.Parse(UP_1)].cb_code = cb_code;
                    m_incTCPSend002.DW0010(cp_code, cb_code, long.Parse(UP_9));
                }
            }

            string checkbody = "DW0001";

            sendData =
                tcpClientDic["version"].ToString() +
                data.cs_id +
                cp_code +
                cb_code +
                CRC16.GetString(checkbody) +
                checkbody;
            return(sendData);
        }
示例#28
0
        /// <summary>
        /// 组织完整的数据帧
        /// 注意:这里组织默认的都是小端方式
        /// </summary>
        /// <param name="data">数据部分</param>
        /// <returns>完整的数据帧</returns>
        public static byte[] MergeMsg(ref PrepareData.Msg_Bus _frame, byte [] data)
        {
            byte[] sender;
            ushort CRC;

            _frame.data = new byte[PrepareData.BUS_FRAME_IN_DATALEN];
            //数据域小于8,在帧内组织
            if (data.Length <= 8)
            {
                //帧内拷贝
                Array.Copy(data, _frame.data, data.Length);
                _frame.crc16 = 0x0000;
                sender       = ByteStruct.StructToBytes(_frame);
                CRC          = CRC16.CalculateCrc16(sender, 0, sender.Length - 2);
                sender[sender.Length - 1] = (byte)(CRC >> 8);
                sender[sender.Length - 2] = (byte)CRC;
            }
            //数据帧过长需要帧外组织
            else
            {
                _frame.crc16 = 0x0000;
                //帧外的CRC校验
                CRC = CRC16.CalculateCrc16(data);
                byte [] temp = ByteStruct.StructToBytes(_frame);
                //帧内数据的CRC校验码
                ushort crctemp = CRC16.CalculateCrc16(temp, 0, temp.Length - 2);
                temp[temp.Length - 1] = (byte)(crctemp >> 8);
                temp[temp.Length - 2] = (byte)crctemp;
                //整体数据组织
                sender = new byte[PrepareData.BUS_FRAME_MINLEN + data.Length + 2];
                //帧内数据
                temp.CopyTo(sender, 0);
                //帧外数据
                Array.Copy(data, 0, sender, PrepareData.BUS_FRAME_MINLEN, data.Length);
                //帧外CRC
                sender[sender.Length - 1] = (byte)(CRC >> 8);
                sender[sender.Length - 2] = (byte)CRC;
            }
            return(sender);
        }
        /// <summary>
        /// 响应获取充电状态请求
        /// </summary>
        /// <returns></returns>
        public string UP0010(string cp_code, string cb_code, string bodyData)
        {
            string sendData = "";
            Dictionary <string, object> tcpClientDic = Config.g_tcpClientDic[cp_code];
            Listener_ChargePile_Data_AC data         = (Listener_ChargePile_Data_AC)tcpClientDic["data"];

            MatchCollection arr  = Regex.Matches(bodyData, @"(?<=\[)[^\]]*(?=\])");
            string          UP_0 = arr[0].Value; //枪编号
            string          UP_1 = arr[1].Value; //用户名
            string          UP_2 = arr[2].Value; //已充电量
            string          UP_3 = arr[3].Value; //剩余时间
            string          UP_4 = arr[4].Value; //单价,元/度
            string          UP_5 = arr[5].Value; //充电模式,1按时间、2按金额、3按电量、4自动充满
            string          UP_6 = arr[6].Value; //数值(当2为4时,此值为0)

            if (int.Parse(UP_0) > 0)
            {
                //更新充电桩状态
                data.condition = 2;
                data.gundata[int.Parse(UP_0)].useruname = long.Parse(UP_1);
                data.gundata[int.Parse(UP_0)].kwh       = double.Parse(UP_2);
                data.gundata[int.Parse(UP_0)].timeleft  = TimeSpan.FromSeconds(double.Parse(UP_3));
                data.unitmoney = decimal.Parse(UP_4);
                data.gundata[int.Parse(UP_0)].chargemod        = int.Parse(UP_5);
                data.gundata[int.Parse(UP_0)].chargemodcontent = long.Parse(UP_6);
                data.gundata[int.Parse(UP_0)].guncondition     = true;
            }

            string checkbody = "DW0011[1]";

            sendData =
                tcpClientDic["version"].ToString() +
                data.cs_id +
                cp_code +
                cb_code +
                CRC16.GetString(checkbody) +
                checkbody;
            return(sendData);
        }
示例#30
0
    public static byte[] Pack(object msg, out int length)
    {
        byte[] data = new byte[4096];
        using (MemoryStream s = new MemoryStream(data))
        {
            //content
            formatter.Serialize(s, msg);

            //length
            UInt16 l = (UInt16)s.Position;

            //crc
            UInt16 crc16 = CRC16.CalculateCrc16(data, 0, l);
            s.WriteByte((byte)(crc16 >> 8));
            s.WriteByte((byte)(crc16 & 0xff));
            s.Flush();
            s.Close();

            length = l + 2; //content crc
            return(data);
        }
    }
示例#31
0
文件: CRC16.cs 项目: pansk/cscodec
 // static constructor
 static CRC16()
 {
     _crc16TablesCache = Hashtable.Synchronized(new Hashtable());
      _defaultCRC = new CRC16();
 }