public Byte[] toByteArray() { unsafe { Byte[] resultado = new Byte[sizeof(FormatoParametrosVariaveis)]; fixed(byte *pSrc = resultado) { FormatoParametrosVariaveis *parametros = (FormatoParametrosVariaveis *)pSrc; parametros->versao = (Byte)this.versao; parametros->horaSaida = (Byte)this.horaSaida; parametros->minutosSaida = (Byte)this.minutosSaida; parametros->regiao = (Byte)this.regiao; parametros->sentidoIda = (bool)this.sentidoIda; parametros->roteiro = (UInt32)this.roteiro; parametros->motorista = this.motorista; //parametros->baudRate = this.baudRate; parametros->TurnOffUSB = this.TurnOffUSB; parametros->crc = this.crc; } return(resultado); } }
/* * public void Salvar(string arquivoNome, ControladorPontos.Controlador Ctrdlr) * { * versao = 1; * horaSaida = Ctrdlr.ParametrosVariaveis.HoraSaida; * minutosSaida = Ctrdlr.ParametrosVariaveis.MinutosSaida; * regiao = Ctrdlr.ParametrosVariaveis.RegiaoSelecionada; * sentidoIda = Ctrdlr.ParametrosVariaveis.SentidoIda; * crc = 0; * roteiro = Ctrdlr.ParametrosVariaveis.RoteiroSelecionado; * * Salvar(arquivoNome); * } */ public unsafe void AtualizarCRC() { Byte[] dados = toByteArray(); fixed(byte *pSrc = dados) { FormatoParametrosVariaveis *parametros = (FormatoParametrosVariaveis *)pSrc; this.crc = CalcularCRC(dados); } }
public bool VerificarCRC(byte[] dados) { unsafe { fixed(byte *pSrc = dados) { FormatoParametrosVariaveis *parametros = (FormatoParametrosVariaveis *)pSrc; return(parametros->crc == CalcularCRC(dados)); } } }
private unsafe UInt16 CalcularCRC(Byte[] dados) { Byte[] dadosCRC = new byte[sizeof(FormatoParametrosVariaveis) - sizeof(UInt16)]; fixed(byte *pSrc = dados) { FormatoParametrosVariaveis *parametros = (FormatoParametrosVariaveis *)pSrc; Array.Copy(dados, 0, dadosCRC, 0, (int)¶metros->crc - (int)pSrc); Array.Copy(dados, ((int)¶metros->crc - (int)pSrc + sizeof(UInt16)), dadosCRC, (int)¶metros->crc - (int)pSrc, sizeof(FormatoParametrosVariaveis) - ((int)¶metros->crc - (int)pSrc + sizeof(UInt16))); return(CRC16CCITT.Calcular(dadosCRC)); } }