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

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

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

                    return(parametros->crc == CalcularCRC(dados));
                }
            }
        }
Esempio n. 3
0
        public void GerarFormatoNovo(string arquivoNome, string diretorioRaiz)
        {
            FileStream fs = File.OpenRead(arquivoNome + Util.Util.sequencial_arquivo_mensagens.ToString("X8") + Util.Util.ARQUIVO_EXT_MPT);

            byte[] dados = new byte[(int)fs.Length];
            fs.Read(dados, 0, dados.Length);
            fs.Close();

            unsafe
            {
                fixed(byte *pSrc = dados)
                {
                    FormatoMensagemPaths *mensagemPaths = (FormatoMensagemPaths *)pSrc;

                    this.versao     = mensagemPaths->versao;
                    this.reservado  = mensagemPaths->reservado;
                    this.idMensagem = mensagemPaths->idMensagem;
                    for (int i = 0; i < 58; i++)
                    {
                        this.reservado2[i] = mensagemPaths->reservado2[i];
                    }
                    this.crc       = mensagemPaths->crc;
                    this.pathVideo = Util.Util.TrataDiretorio(ArrayLDX2.ByteArrayToString(mensagemPaths->pathVideo, 64));
                }

                //fs = File.OpenRead(diretorioRaiz + this.pathVideo);
                fs = File.OpenRead(this.pathVideo);
                byte[] dadosVideo = new byte[(int)fs.Length];
                fs.Read(dadosVideo, 0, dadosVideo.Length);
                fs.Close();

                Array.Resize(ref dados, (dados.Length - 64) + dadosVideo.Length);
                Array.Copy(dadosVideo, 0, dados, 64, dadosVideo.Length);

                fixed(byte *pSrc = dados)
                {
                    FormatoMensagemPaths *mensagemPaths = (FormatoMensagemPaths *)pSrc;

                    mensagemPaths->crc = CalcularCRC(dados);
                }

                fs = File.Create(arquivoNome + Util.Util.sequencial_arquivo_mensagens.ToString("X8") + Util.Util.ARQUIVO_EXT_MPT);
                fs.Write(dados, 0, dados.Length);
                fs.Close();
            }
        }
Esempio n. 4
0
        public bool VerificarCRC(string caminhoMPT)
        {
            FileStream fs = File.OpenRead(caminhoMPT);

            byte[] dados = new byte[(int)fs.Length];
            fs.Read(dados, 0, dados.Length);
            fs.Close();

            unsafe
            {
                fixed(byte *pSrc = dados)
                {
                    FormatoMensagemPaths *parametros = (FormatoMensagemPaths *)pSrc;

                    return(parametros->crc == CalcularCRC(dados));
                }
            }
        }
Esempio n. 5
0
        private unsafe UInt16 CalcularCRC(Byte[] dados)
        {
            int tamanho;

            Byte[] dadosCRC = new byte[dados.Length - sizeof(UInt16)];

            fixed(byte *pSrc = dados)
            {
                FormatoMensagemPaths *regiao = (FormatoMensagemPaths *)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,
                           dados.Length - ((int)&regiao->crc - (int)pSrc + sizeof(UInt16)));

                return(CRC16CCITT.Calcular(dadosCRC));
            }
        }
Esempio n. 6
0
        private void FromBytesToFormatoPainelCfg(byte[] dados)
        {
            unsafe
            {
                fixed(byte *pSrc = dados)
                {
                    FormatoMensagemPaths *mensagemPaths = (FormatoMensagemPaths *)pSrc;

                    this.versao     = mensagemPaths->versao;
                    this.reservado  = mensagemPaths->reservado;
                    this.idMensagem = mensagemPaths->idMensagem;
                    for (int i = 0; i < 58; i++)
                    {
                        this.reservado2[i] = mensagemPaths->reservado2[i];
                    }
                    this.crc       = mensagemPaths->crc;
                    this.pathVideo = ArrayLDX2.ByteArrayToString(mensagemPaths->pathVideo, 64);
                }
            }
        }
Esempio n. 7
0
        private byte[] toByteArray()
        {
            unsafe
            {
                Byte[] resultado = new Byte[sizeof(FormatoMensagemPaths)];

                fixed(byte *pSrc = resultado)
                {
                    FormatoMensagemPaths *mensagemPaths = (FormatoMensagemPaths *)pSrc;

                    mensagemPaths->versao     = this.versao;
                    mensagemPaths->reservado  = this.reservado;
                    mensagemPaths->idMensagem = this.idMensagem;
                    for (int i = 0; i < 58; i++)
                    {
                        mensagemPaths->reservado2[i] = this.reservado2[i];
                    }
                    mensagemPaths->crc = this.crc;
                    ArrayLDX2.StringToByteArray(mensagemPaths->pathVideo, this.pathVideo, 64);

                    return(resultado);
                }
            }
        }
Esempio n. 8
0
        /// <summary>
        /// Traduz os bytes de dados arrayados para o formato novo.
        /// </summary>
        /// <param name="dados">Arquivo já lido do disco.</param>
        private void FromBytesToFormatoMPT(byte[] dados)
        {
            unsafe
            {
                fixed(byte *pSrc = dados)
                {
                    FormatoMensagemPaths *mensagemPaths = (FormatoMensagemPaths *)pSrc;

                    this.versao     = mensagemPaths->versao;
                    this.reservado  = mensagemPaths->reservado;
                    this.idMensagem = mensagemPaths->idMensagem;
                    for (int i = 0; i < 58; i++)
                    {
                        this.reservado2[i] = mensagemPaths->reservado2[i];
                    }
                    this.crc = mensagemPaths->crc;
                    //a princípio, vamos pular esses 64 bytes.
                    //this.pathVideo = ArrayLDX2.ByteArrayToString(mensagemPaths->pathVideo, 64);

                    //limpa a lista de videos
                    this.Videos.Clear();

                    //indice para leitura dos dados no arquivo.
                    int indice = sizeof(FormatoMensagemPaths) - 64;

                    //efetua a leitura do tamanho do vídeo.(próximos 4 bytes após o FormatoMensagemPaths)
                    uint TamanhoArquivo = BitConverter.ToUInt32(dados, indice);

                    //indice do inicio do arquivo a ser lido
                    int indiceInicial = indice;

                    //pula o tamanho. (já no conteúdo de vídeo.)
                    indice = indice + sizeof(uint);
                    //pula a versão.
                    indice = indice + 1;

                    //aloca o suficiente pra ler o vídeo.
                    byte[] dadosVideo = new byte[TamanhoArquivo];

                    //copia os dados do arquivo de vídeo com o tamanho e versão.
                    Array.Copy(dados, indiceInicial, dadosVideo, 0, TamanhoArquivo);

                    //verifica o tipo do vídeo(v01 ou v02) ou se é Arquivo PLS..Equals("V01")
                    String tipo = Encoding.ASCII.GetString(dados, indice, 3).ToUpper();

                    //todo: tentar substituir as strings e utilizar tipovideo.

                    //caso o vídeo seja apenas vídeo e não PLS então será apenas UM arquivo de vídeo.
                    switch (tipo)
                    {
                    case "V01":
                    {
                        // Instancia o video a partir do formato
                        VideoV01 video = new VideoV01();
                        // Carrega através do ARRAY
                        video.LoadFromBytes(dadosVideo);
                        // Adiciona o video
                        Videos.Add(video);
                    }
                    break;

                    case "V02":
                    {
                        // Instancia o video a partir do formato
                        VideoV02 video = new VideoV02();
                        // Carrega através do ARRAY
                        video.LoadFromBytes(dadosVideo);
                        // Adiciona o video
                        Videos.Add(video);
                    }
                    break;

                    case "V03":
                    {
                    }
                    break;

                    case "V04":
                    {
                    }
                    break;

                    case "PLS":
                    {
                        //Instancia o PLS.
                        Arquivo_PLS please = new Arquivo_PLS();

                        please.LoadFromBytes(dadosVideo);

                        foreach (Video video in please.listaVideos)
                        {
                            Videos.Add(video);
                        }
                    }
                    break;
                    }

                    indice += dadosVideo.Length;
                }
            }
        }