public override IMessage Decode(IFrame frame) { var buffer = AsString(frame); if (buffer == null) { return(null); } IMessage salida; var msgId = ParserUtils.GetMsgIdTaip(buffer); var data = buffer.Split(';')[0].Split(','); var tipoReporte = Reporte.GetTipoReporte(data); switch (tipoReporte) { case Reporte.Nada: return(null); case Reporte.EventoCq: { if (ParserUtils.IsInvalidDeviceId(Id)) { return(null); } byte entradas; int codEv; var gpsPoint = ParseCq(buffer, out entradas, out codEv, false); //TODO chequear que sea en kilometros o knots salida = GetSalida(gpsPoint, "00000000", codEv, this, msgId); break; } default: //es un ack o un mensaje no reconocido, no se responde, solo paso la info arriba salida = new UserMessage(Id, msgId); //CheckFota(msgId); break; } if ((msgId != ParserUtils.MsgIdNotSet) && (!salida.IsPending())) { salida.AddStringToSend(BuildAck(buffer)); } return(salida); }