/// <summary> /// Sends config frame. /// </summary> /// <param name="commandCode"> /// Command data to be sent. /// </param> public void SendConfigFrame(FrameConfigDataModel configData) { // TODO : ajouter la commande dans la FILE pour ACK + timer //SendByteArray(FrameConstruction.ConstructWriteConfigDataFrame(configData)); AddTrameOut(FrameConstruction.ConstructWriteConfigDataFrame(configData)); //FramesWrittenCounter.CommandFrames++; }
/// <summary> /// Sends exercice frame. /// </summary> /// <param name="commandCode"> /// Command data to be sent. /// </param> public void SendExerciceGameFrame(FrameExerciceDataModel exerciceData) { // TODO : ajouter la commande dans la FILE pour ACK + timer //SendByteArray(FrameConstruction.ConstructWriteExerciceDataFrame(exerciceData)); AddTrameOut(FrameConstruction.ConstructWriteExerciceDataFrame(exerciceData)); //FramesWrittenCounter.CommandFrames++; }
/// <summary> /// Initializes a new instance of the PortSerieModel class. /// </summary> public PortSerieService() { try { _frameBufferEvent = new AutoResetEvent(false); _frameBufferEventOut = new AutoResetEvent(false); _inFrameBuffer = new ConcurrentQueue <byte[]>(); _outFrameBuffer = new ConcurrentQueue <byte[]>(); // Instanciation du thread, on spécifie dans le // délégué ThreadStart le nom de la méthode qui // sera exécutée lorsque l'on appele la méthode // Start() de notre thread. _closeThread = new Thread(new ThreadStart(ThreadDispose)); _frameInBuffer = new Thread(() => { for (; ;) { if (_inFrameBuffer.Count == 0) { _frameBufferEvent.WaitOne(); } //Debug.Print("WaitOne"+ DateTime.Now); aXdataModel dataObject = null; try { _inFrameBuffer.TryDequeue(out encodedFrameQ); if (encodedFrameQ != null) { dataObject = FrameConstruction.DeconstructFrame(encodedFrameQ); } } catch (Exception ex) { ReceptionErrors++; // TODO : et l'affichage ??? } if (dataObject != null) // if frame successfully deconstructed { OnaXdataReceived(dataObject); if (dataObject is ErrorDataModel) { OnErrorDataReceived((ErrorDataModel)dataObject); FramesReadCounter.ErrorFrames++; } else if (dataObject is CoupleDataModel) { OnCoupleDataReceived((CoupleDataModel)dataObject); } else if (dataObject is PositionDataModel) { OnPositionDataReceived((PositionDataModel)dataObject); } else if (dataObject is Position2DataModel) { OnPosition2DataReceived((Position2DataModel)dataObject); } else if (dataObject is PprDataModel) { OnPprDataReceived((PprDataModel)dataObject); } else if (dataObject is ForceDataModel) { OnForceDataReceived((ForceDataModel)dataObject); } else if (dataObject is Force2DataModel) { OnForce2DataReceived((Force2DataModel)dataObject); } else if (dataObject is ForceRapDataModel) { OnForceRapDataReceived((ForceRapDataModel)dataObject); } else if (dataObject is ForceRap2DataModel) { OnForceRap2DataReceived((ForceRap2DataModel)dataObject); } else if (dataObject is AcosTDataModel) { OnAcosTDataReceived((AcosTDataModel)dataObject); } else if (dataObject is VitesseModel) { OnVitesseDataReceived((VitesseModel)dataObject); } else if (dataObject is Vitesse2Model) { OnVitesse2DataReceived((Vitesse2Model)dataObject); } else if (dataObject is ACKDataModel) { OnACKDataReceived((ACKDataModel)dataObject); } else if (dataObject is StreamAckDataModel) { OnStreamACKDataReceived((StreamAckDataModel)dataObject); } else if (dataObject is FrameConfigDataModel) { OnFrameConfigDataReceived((FrameConfigDataModel)dataObject); } else if (dataObject is FrameExerciceDataModel) { OnFrameExerciceDataReceived((FrameExerciceDataModel)dataObject); } else if (dataObject is BorneDataModel) { OnBorneDataReceived((BorneDataModel)dataObject); } } } }, 1); _frameInBuffer.IsBackground = true; _frameInBuffer.Name = "Frame Buffer Thread IN"; _frameInBuffer.Start(); _frameOutBuffer = new Thread(() => { for (; ;) { if (_outFrameBuffer.Count == 0) { _frameBufferEventOut.WaitOne(); } try { //if (ACK_ok == true) // TODO : ack c'est bien comme ca ? //{ //ACK_ok = false; _outFrameBuffer.TryDequeue(out encodedFrameOutQ); if (encodedFrameOutQ != null) { SendByteArray(encodedFrameOutQ); System.Threading.Thread.Sleep(12); // TODO : Pause car pas encore d'ACK } // } } catch { // TODO : erreur ++ envois } } }, 1); _frameOutBuffer.IsBackground = true; _frameOutBuffer.Name = "Frame Buffer Thread OUT"; _frameOutBuffer.Start(); //SFrame STrame = new SFrame(SendFrame); //_outDataBuffer = new ProducerConsumerQueue(STrame); this._portSerie = new SerialPort(); // Création d'un nouvel objet SerialPort par défaut FramesReadCounter = new FrameCountModel(); FramesWrittenCounter = new FrameCountModel(); ReceptionErrors = 0; Debug.Print("PortSerieModel OK"); } catch (Exception ex) { GestionErreur.GerrerErreur(ex); } }
/// <summary> /// Sends command frame. /// </summary> /// <param name="commandCode"> /// Command data to be sent. /// </param> public void SendCommandFrame(CommandCodes commandCode) { // TODO : ajouter la commande dans la FILE pour ACK + timer AddTrameOut(FrameConstruction.ConstructCommandFrame(commandCode)); //FramesWrittenCounter.CommandFrames++; }