void _AutomateComm_OnNewTrameArduinoReceived(object sender, NewTrameArduinoReceveidEventArgs e) { byte IDRobot = e.Source.id; ArduinoBotIA Rob; if (_ListArduino.Exists(ArduinoBotIA.ById(IDRobot))) { Rob = _ListArduino.Find(ArduinoBotIA.ById(IDRobot)); } else { Rob = new ArduinoBotIA(IDRobot); _ListArduino.Add(Rob); } switch (e.Message.headerMess) { case (byte)EMBtoPCmessHeads.ASK_CONN: // Rien de spécial sur la demande de connexion break; case (byte)EMBtoPCmessHeads.AUTO_MODE_OFF: // Fin de mode auto / le robot doit avoir pris le cube if (Rob.LastAction == ActionRobot.ROBOT_AUTONOME) { Rob.LastAction = ActionRobot.ROBOT_ARRET; Rob.Saisie = true; Rob.SetTrace(null); // Une fois le cube saisie } else { Logger.GlobalLogger.error("Fin de mode autnome qui n'as pas été lancé par le serveur !" + Rob.ID); } break; case (byte)EMBtoPCmessHeads.RESP_SENSOR: Logger.GlobalLogger.info("Réponse de capteur ? : : " + e.Message.ToString()); break; default: Logger.GlobalLogger.error("Message reçu qui ne devrais pas être remonter dans L'IA : " + e.Message.ToString()); break; } tickIA(); }
private void _ThreadCheckMessageRecus() { while (true) { /* Traitement des trames entrantes */ if (_SerialXbee.TrameRecusDisponible()) { TrameProtocole trame = _SerialXbee.PopTrameRecus(); // Si traitement par l'application (données capteur ou autre ) // Les Ack et autre sont gerrer ici if (TraiteTrameRecue(trame)) { // Envoi au couches supérrieures if (OnNewTrameArduinoReceived != null) { MessageProtocol message = _SerialXbee.DecodeTrame(trame); ArduinoBotComm robot = ArduinoManager.getArduinoBotById(trame.src); NewTrameArduinoReceveidEventArgs arg = new NewTrameArduinoReceveidEventArgs(message, robot); OnNewTrameArduinoReceived(this, arg); } } } /* Verification message en attente envoi */ /*if (_MessagesEnAttenteEnvoi.Count > 0) * { * * int count = _MessagesEnAttenteEnvoi.Count; * for(int i=0 ; i< count;i++) * { * if (_MessagesEnAttenteEnvoi[i].robot.stateComm == StateArduinoComm.STATE_COMM_NONE) * { * Logger.GlobalLogger.debug("Envoi d'un message en attente au robot :" + _MessagesEnAttenteEnvoi[i].robot + " Messsage : " + _MessagesEnAttenteEnvoi[i].message.GetType().ToString(),1); * // L'arduino est libre, on peut envoyer * SendMessageToArduino(_MessagesEnAttenteEnvoi[i].message, _MessagesEnAttenteEnvoi[i].robot); * } * } * * }*/ Thread.Sleep(_ThreadMessageRecuDelay); } }
void _OnNewTrameArduinoReceived(object sender, NewTrameArduinoReceveidEventArgs e) { Logger.GlobalLogger.debug("Nouvelle trame recus ! :" + e.Message.ToString()); if (e.Source.Connected) { if (!_listeArduinoConn.Items.Contains(e.Source.id)) { Invoke(new d_addBotToList(addBotToList), "" + e.Source.id); } //_listeArduinoConn.Items.Add(e.Source.id); } if (e.Source.id == _CurrentArduinoId) { Invoke(new d_updateStateRobot(updateStateRobot), e.Source.Connected); } if (e.Message.headerMess == (byte)EMBtoPCmessHeads.RESP_SENSOR) { EMBtoPCMessageRespSensor mess = ((EMBtoPCMessageRespSensor)e.Message); // Met a jour la valeur des capteur sur L'IHM Invoke(new d_updateStateCapteur(updateStateCapteur), new object[] { mess.idSensor, mess.valueSensor }); } }