コード例 #1
0
        private byte[] toByteArray()
        {
            unsafe
            {
                Byte[] resultado = new Byte[sizeof(FormatoRoteiros)];

                fixed(byte *pSrc = resultado)
                {
                    FormatoRoteiros *roteiros = (FormatoRoteiros *)pSrc;

                    roteiros->versao    = this.versao;
                    roteiros->reservado = this.reservado;
                    roteiros->id        = this.id;
                    roteiros->tarifa    = this.tarifa; // valor da tarifa multiplicado por 100 ex:11,22 é salvo como 1122

                    ArrayLDX2.StringToByteArray(roteiros->labelNumero, this.labelNumero, 20);
                    ArrayLDX2.StringToByteArray(roteiros->labelRoteiro, this.labelRoteiro, 16);
                    ArrayLDX2.StringToByteArray(roteiros->labelRoteiroVolta, this.labelRoteiroVolta, 16);

                    for (int i = 0; i < 2; i++)
                    {
                        roteiros->reservado2[i] = this.reservado2[i];
                    }

                    roteiros->crc = this.crc;

                    return(resultado);
                }
            }
        }
コード例 #2
0
        private void FromBytesToFormatoPainelCfg(byte[] dados)
        {
            unsafe
            {
                fixed(byte *pSrc = dados)
                {
                    FormatoRoteiros *roteiros = (FormatoRoteiros *)pSrc;

                    this.versao    = roteiros->versao;
                    this.reservado = roteiros->reservado;
                    this.id        = roteiros->id;
                    this.tarifa    = roteiros->tarifa; // valor da tarifa multiplicado por 100 ex:11,22 é salvo como 1122

                    this.labelNumero       = ArrayLDX2.ByteArrayToString(roteiros->labelNumero, 20);
                    this.labelRoteiro      = ArrayLDX2.ByteArrayToString(roteiros->labelRoteiro, 16);
                    this.labelRoteiroVolta = ArrayLDX2.ByteArrayToString(roteiros->labelRoteiroVolta, 16);

                    for (int i = 0; i < 2; i++)
                    {
                        this.reservado2[i] = roteiros->reservado2[i];
                    }

                    this.crc = roteiros->crc;
                }
            }
        }
コード例 #3
0
        /*
         * public void Salvar(string diretorio, ControladorPontos.Controlador Ctrdl)
         * {
         *  //for(int painel = 0; painel < Ctrdl.QuantidadePaineis; painel++)
         *  int painel = 0;
         *  {
         *      for(int roteiro = 0; roteiro < Ctrdl.Paineis[painel].Roteiros.Count; roteiro++)
         *      {
         *          labelNumero = Ctrdl.Paineis[painel].Roteiros[roteiro].LabelNumero;
         *          labelRoteiro = Ctrdl.Paineis[painel].Roteiros[roteiro].LabelRoteiroIda;
         *          tarifa = (uint)Ctrdl.Paineis[painel].Roteiros[roteiro].Tarifa;
         *
         *          Salvar(diretorio + @"\" + roteiro.ToString("d3") + ".rot");
         *      }
         *  }
         * }
         */
        public unsafe void AtualizarCRC()
        {
            Byte[] dados = toByteArray();

            fixed(byte *pSrc = dados)
            {
                FormatoRoteiros *regiao = (FormatoRoteiros *)pSrc;

                this.crc = CalcularCRC(dados);
            }
        }
コード例 #4
0
        public bool VerificarCRC(Byte[] dados)
        {
            unsafe
            {
                fixed(byte *pSrc = dados)
                {
                    FormatoRoteiros *parametros = (FormatoRoteiros *)pSrc;

                    return(parametros->crc == CalcularCRC(dados));
                }
            }
        }
コード例 #5
0
        private unsafe UInt16 CalcularCRC(Byte[] dados)
        {
            int tamanho;

            Byte[] dadosCRC = new byte[sizeof(FormatoRoteiros) - sizeof(UInt16)];

            fixed(byte *pSrc = dados)
            {
                FormatoRoteiros *regiao = (FormatoRoteiros *)pSrc;

                Array.Copy(dados, 0, dadosCRC, 0, (int)&regiao->crc - (int)pSrc);
                Array.Copy(dados, ((int)&regiao->crc - (int)pSrc + sizeof(UInt16)), dadosCRC,
                           (int)&regiao->crc - (int)pSrc,
                           sizeof(FormatoRoteiros) - ((int)&regiao->crc - (int)pSrc + sizeof(UInt16)));

                return(CRC16CCITT.Calcular(dadosCRC));
            }
        }