Esempio n. 1
0
        public unsafe void AtualizarCRC()
        {
            Byte[] dados = toByteArray();

            fixed(byte *pSrc = dados)
            {
                FormatoAgenda *agenda = (FormatoAgenda *)pSrc;

                this.crc = CalcularCRC(dados);
            }
        }
Esempio n. 2
0
        public bool VerificarCRC(Byte[] dados)
        {
            unsafe
            {
                fixed(byte *pSrc = dados)
                {
                    FormatoAgenda *parametros = (FormatoAgenda *)pSrc;

                    return(parametros->crc == CalcularCRC(dados));
                }
            }
        }
Esempio n. 3
0
        private void FromBytesToFormatoPainelCfg(byte[] dados)
        {
            unsafe
            {
                fixed(byte *pSrc = dados)
                {
                    FormatoAgenda *roteiros = (FormatoAgenda *)pSrc;

                    this.versao    = roteiros->versao;
                    this.reservado = roteiros->reservado;


                    this.crc = roteiros->crc;
                }
            }
        }
Esempio n. 4
0
        private unsafe UInt16 CalcularCRC(Byte[] dados)
        {
            Byte[] dadosCRC = new byte[dados.Length - sizeof(UInt16)];

            fixed(byte *pSrc = dados)
            {
                FormatoAgenda *agenda = (FormatoAgenda *)pSrc;

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

                return(CRC16CCITT.Calcular(dadosCRC));
            }
        }
Esempio n. 5
0
        private byte[] toByteArray()
        {
            unsafe
            {
                Byte[] resultado = new Byte[sizeof(FormatoAgenda)];

                fixed(byte *pSrc = resultado)
                {
                    FormatoAgenda *agenda = (FormatoAgenda *)pSrc;

                    agenda->versao    = this.versao;
                    agenda->reservado = this.reservado;

                    agenda->qntItens = (UInt16)this.itens.Count;

                    agenda->crc = this.crc;

                    unsafe
                    {
                        Byte[] resultado2 = new Byte[this.itens.Count * sizeof(Agendamento)];

                        Agendamento *temp = (Agendamento *)&agenda->itens;

                        for (int i = 0; i < this.itens.Count; i++)
                        {
                            resultado2[(i * sizeof(Agendamento))]     = this.itens[i].segundos;
                            resultado2[(i * sizeof(Agendamento)) + 1] = this.itens[i].minutos;
                            resultado2[(i * sizeof(Agendamento)) + 2] = this.itens[i].horas;
                            resultado2[(i * sizeof(Agendamento)) + 3] = this.itens[i].dia;
                            resultado2[(i * sizeof(Agendamento)) + 4] = this.itens[i].mes;
                            resultado2[(i * sizeof(Agendamento)) + 5] = this.itens[i].diaSemana;
                            BitConverter.GetBytes(this.itens[i].ano).CopyTo(resultado2, (i * sizeof(Agendamento)) + 6);
                            resultado2[(i * sizeof(Agendamento)) + 8]  = this.itens[i].mascara;
                            resultado2[(i * sizeof(Agendamento)) + 9]  = this.itens[i].painel;
                            resultado2[(i * sizeof(Agendamento)) + 10] = 0xff;
                            resultado2[(i * sizeof(Agendamento)) + 11] = this.itens[i].operacao;
                            BitConverter.GetBytes(this.itens[i].valorParametro).CopyTo(resultado2, (i * sizeof(Agendamento)) + 12);
                            resultado2[(i * sizeof(Agendamento)) + 14] = 0xff; // 2 Bytes reservados.
                            resultado2[(i * sizeof(Agendamento)) + 15] = 0xff; // 2 Bytes reservados.
                        }

                        //byte* temp2 = (byte*)&agenda->itens;



                        //for (int i = 0; i<resultado2.Length;i++)
                        //{
                        //    resultado2[i] = temp2[i];
                        //}

                        Array.Resize <byte>(ref resultado, (resultado.Length + resultado2.Length) - sizeof(Int32));
                        resultado2.CopyTo(resultado, 64);

                        ushort crc16    = CalcularCRC(resultado);
                        byte[] dadosCRC = BitConverter.GetBytes(crc16);
                        dadosCRC.CopyTo(resultado, 62);
                    }

                    return(resultado);
                }
            }
        }