Example #1
0
        public Error Empaqueta(byte[] entrada, out byte[] salida, int longent, EnumPaquete tipo, ushort orden)
        {
            byte[] _salida = new byte[longent + 6];

            if (longent != entrada.Length)
            {
                TransacManager.ProtoConfig.NACK_ENV = NackEnv.EMPAQUETADO;
                salida = null;
                return(new Error("Error protocolo: longitud incorrecta.", (int)ErrProtocolo.LONGITUD, 0));
            }

            _salida[0] = (INI_PAQ);

            _salida[1] = (byte)tipo;

            Array.Copy(DataConverter.Pack("^S", orden), 0, _salida, 2, 2);       // Secuencia en 2 bytes

            Array.Copy(DataConverter.Pack("^S", longent + 9), 0, _salida, 4, 2); // Longitud en 2 bytes

            if (tipo == EnumPaquete.DATOS || tipo == EnumPaquete.NACK || tipo == EnumPaquete.DATOSMULTIPLES)
            {
                Array.Copy(entrada, 0, _salida, 6, longent);
            }

            Crc16Ccitt crc = new Crc16Ccitt(0);

            salida = new byte[_salida.Length + 3];

            _salida = crc.AddCrcToBuffer(_salida, _salida.Length);

            _salida.CopyTo(salida, 0);
            salida[salida.Length - 1] = FIN_PAQ;

            return(new Error());
        }
Example #2
0
        public Error Pack(byte[] entrada, out byte[] salida, EnumPaquete tipo, ushort orden)
        {
            if (tipo == EnumPaquete.ACK || tipo == EnumPaquete.EOT)
            {
                salida = new byte[256];
            }
            else
            {
                salida = new byte[(entrada.Length * 2) + 9];
            }

            if (entrada == null)
            {
                return(new Error("Buffer a enviar nulo.", (int)ErrProtocolo.PARAM_NULO_INVALIDO, 0));
            }

            Enmascarador enmask = new Enmascarador(TransacManager.ProtoConfig.CONFIG);
            Crc16Ccitt   crc    = new Crc16Ccitt(0);
            Empaquetador emp    = new Empaquetador();

            string tipoMen = "";

            if (tipo == EnumPaquete.DATOS)
            {
                tipoMen = Encoding.UTF8.GetString(entrada, 0, 1);
            }
            else
            {
                tipoMen = tipo.ToString();
            }

            int longi = 0;

            byte[] aEnviar3;

            if (TransacManager.ProtoConfig.NACK_ENV == NackEnv.SINERROR)
            {
                byte[] aEnviar2;
                Error  Err = emp.Empaqueta(entrada, out aEnviar2, entrada.Length, tipo, orden);
                if (Err.CodError != 0)
                {
                    return(Err);
                }

                //aEnviar3 = crc.AddCrcToBuffer(aEnviar2, aEnviar2.Length);
                longi = 0;

                // entrada no se usa, para que estaba esto??
                //entrada = new byte[aEnviar3.Length + 1];
                //entrada = aEnviar3;
                //Array.Resize(ref entrada, aEnviar3.Length + 1);
                //entrada[aEnviar3.Length] = 0x03;

                enmask.Enmascara(aEnviar2, aEnviar2.Length, ref salida, ref longi);
                //salida[longi] = Empaquetador.;
                //longi++;
                Array.Resize(ref salida, longi);
            }
            else // envio NACK con el tipo de error (TransacManager.ProtoConfig.NACK_ENV)
            {
                byte[] nac = new byte[1];
                nac = ConstructorMenEnv.crearNack((byte)TransacManager.ProtoConfig.NACK_ENV);

                byte[] aEnviar2;
                Error  Err = emp.Empaqueta(nac, out aEnviar2, nac.Length, EnumPaquete.NACK, orden);
                if (Err.CodError != 0)
                {
                    return(Err);
                }

                aEnviar3 = crc.AddCrcToBuffer(aEnviar2, aEnviar2.Length);
                longi    = 0;

                entrada = new byte[aEnviar3.Length + 1];
                entrada = aEnviar3;
                Array.Resize(ref entrada, aEnviar3.Length + 1);
                entrada[aEnviar3.Length] = 0x03;

                enmask.Enmascara(aEnviar3, aEnviar3.Length, ref salida, ref longi);
                salida[longi] = 0x03;
                longi++;
                Array.Resize(ref salida, longi);
            }

            return(new Error());
        }
Example #3
0
        public void Enviar(byte[] aEnviar, EnumPaquete tipo, ushort orden, int intentos = 0)
        {
            if (TransacManager.ProtoConfig.NACK_ENV == NackEnv.SINERROR)
                LogBMTP.LogBuffer(byteToChar(aEnviar), "Envia " + tipo.ToString() + " ( " + aEnviar.Length.ToString() + "b )", aEnviar.Length, lvlLogTransaccion);
            else
                LogBMTP.LogBuffer(byteToChar(aEnviar), "Envia NACK tipo " + TransacManager.ProtoConfig.NACK_ENV + " ( " + aEnviar.Length.ToString() + "b )", aEnviar.Length, lvlLogError);

            byte[] aEnviar4;
            Error Err = TR.Pack(aEnviar, out aEnviar4, tipo, orden);

            if (Err.CodError != 0) { }

            //if (NivelLog <= lvlLogDebug)
                LogBMTP.LogBuffer(byteToChar(aEnviar4), "Enmascarado ( " + aEnviar4.Length.ToString() + "b )", aEnviar4.Length, lvlLogDebug);

            if (!esPorPuertoSerie)
                bytesCount = sender.Send(aEnviar4);
            else
            {
                try
                {
                    if (port1.CtsHolding == true)
                    {
                        if (TransacManager.ProtoConfig.TIPO_CXN == EnumModoConexion.RADIO)
                        {
                            System.Threading.Thread.Sleep(100);
                            port1.Write(aEnviar4, 0, aEnviar4.Length);
                            EsperaPuertoSerie(port1, aEnviar4.Length);
                            //System.Threading.Thread.Sleep(100);
                        }
                        else if(TransacManager.ProtoConfig.TIPO_CXN == EnumModoConexion.DIALUP )
                        {
                            System.Threading.Thread.Sleep(100);

                            port1.Write(aEnviar4, 0, aEnviar4.Length);
                            port1.WriteLine("01 02 00 00 00 4d 41 00 00 03 0d 00 00 c3 6b 4d 7c 6d 07 33 30 30 39 31 34 31 37 30 34 32 30 00 6d 00 20 00 c1 00 87 ab 67 00 96 14 86 30 38 30 30 36 36 36 35 38 30 37 20 20 20 20 20 20 20 57 69 6e 37 78 38 36 02 00 51 40 f4 83 03");

                            EsperaPuertoSerie(port1, aEnviar4.Length);
                        }
                    }
                    else
                    {
                        if (intentos < 3)
                        {
                            intentos++;
                            Enviar(new byte[ProtocoloConfig.TamBuffer], tipo, orden, intentos);
                        }
                        else
                            throw new ArgumentException("Señal CTS (Clear To Send) en falso. Cantidad máxima de intentos superada.");
                    }
                }
                catch (Exception e)
                {
                        throw e;
                }

            }
        }
Example #4
0
        public Error Empaqueta(byte[] entrada, out byte[] salida, int longent, EnumPaquete tipo, ushort orden)
        {
            salida = new byte[longent + 6];

            if (longent != entrada.Length)
            {
                TransacManager.ProtoConfig.NACK_ENV = NackEnv.EMPAQUETADO;
                return new Error("Error protocolo: longitud incorrecta.", (int)ErrProtocolo.LONGITUD, 0);
            }

            salida[0] = INI_PAQ;

            salida[1] = (byte)tipo;

            Array.Copy(DataConverter.Pack("^S", orden), 0, salida, 2, 2);

            Array.Copy(DataConverter.Pack("^S", longent + 9), 0, salida, 4, 2);

            if (tipo == EnumPaquete.DATOS || tipo == EnumPaquete.NACK || tipo == EnumPaquete.DATOSMULTIPLES)
            {
                Array.Copy(entrada, 0, salida, 6, longent);
            }

            return new Error();
        }
Example #5
0
        public Error Pack(byte[] entrada, out byte[] salida, EnumPaquete tipo, ushort orden)
        {
            if (tipo == EnumPaquete.ACK || tipo == EnumPaquete.EOT)
                salida = new byte[256];
            else
                salida = new byte[(entrada.Length * 2) + 9];

            if (entrada == null)
                return new Error("Buffer a enviar nulo.", (int)ErrProtocolo.PARAM_NULO_INVALIDO , 0);

            Enmascarador enmask = new Enmascarador(TransacManager.ProtoConfig.CONFIG);
            Crc16Ccitt crc = new Crc16Ccitt(0);
            Empaquetador emp = new Empaquetador();

            string tipoMen = "";
            if (tipo == EnumPaquete.DATOS) tipoMen = Encoding.UTF8.GetString(entrada, 0, 1);
            else tipoMen = tipo.ToString();

            int longi = 0;

            byte[] aEnviar3;

            if (TransacManager.ProtoConfig.NACK_ENV == NackEnv.SINERROR)
            {
                byte[] aEnviar2;
                Error Err = emp.Empaqueta(entrada, out aEnviar2, entrada.Length, tipo, orden);
                if (Err.CodError != 0)
                    return Err;

                aEnviar3 = crc.AddCrcToBuffer(aEnviar2, aEnviar2.Length);
                longi = 0;

                entrada = new byte[aEnviar3.Length + 1];
                entrada = aEnviar3;
                Array.Resize(ref entrada, aEnviar3.Length + 1);
                entrada[aEnviar3.Length] = 0x03;

                enmask.Enmascara(aEnviar3, aEnviar3.Length, ref salida, ref longi);
                salida[longi] = 0x03;
                longi++;
                Array.Resize(ref salida, longi);
            }
            else // envio NACK con el tipo de error (TransacManager.ProtoConfig.NACK_ENV)
            {
                byte[] nac = new byte[1];
                nac = ConstructorMenEnv.crearNack((byte)TransacManager.ProtoConfig.NACK_ENV);

                byte[] aEnviar2;
                Error Err = emp.Empaqueta(nac, out aEnviar2, nac.Length, EnumPaquete.NACK, orden);
                if (Err.CodError != 0)
                    return Err;

                aEnviar3 = crc.AddCrcToBuffer(aEnviar2, aEnviar2.Length);
                longi = 0;

                entrada = new byte[aEnviar3.Length + 1];
                entrada = aEnviar3;
                Array.Resize(ref entrada, aEnviar3.Length + 1);
                entrada[aEnviar3.Length] = 0x03;

                enmask.Enmascara(aEnviar3, aEnviar3.Length, ref salida, ref longi);
                salida[longi] = 0x03;
                longi++;
                Array.Resize(ref salida, longi);
            }

            return new Error();
        }