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()); }
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()); }
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; } } }
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(); }
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(); }