private ServiceFirmata(string portname) { this._orchestramessage = OrchestraMessage.GetInstance(); this._arduinoBus = new ArduinoBus(portname, 57600,false,8000,true); this._arduinoBus.SysexCallback = sysexTraitment; this._arduinoBus.Open(true); this.registersActuatorDynamixel = AXXRegisterInfo.GetInstance(); }
internal void SendActionInstructionMessage(ArduinoBus.currentSysexCallback traitement_result) { byte[] dyna_paquet = BioloidCommunicationHelper.ActionInstruction(); byte? identifiant_message = _orchestramessage.GetReferenceMessage(BioloidCommunicationHelper.AX_BROADCAST_ID,traitement_result); if (identifiant_message.HasValue) { try { byte[] message = ServiceFirmata.EncapsulationMessage(dyna_paquet, identifiant_message.Value, ArduinoBus.SYSEXCMD_DYNAMIXEL_INSTRUCTION_PACKET); this._arduinoBus.writeBytes(message); } catch (Exception ex) { _orchestramessage.DeleteReferenceMessage(identifiant_message.Value); } } else { //> prévoir ce que l'on fait à ce niveau } }
/// <summary> /// Permet de transmettre un message de type PING /// </summary> /// <param name="identifiant_dynamixel">identifiant dynamixel concerné</param> /// <param name="traitement_result">Méthode qui sera appelée lors du retour</param> internal void SendPingInstructionMessage(byte identifiant_dynamixel, ArduinoBus.currentSysexCallback traitement_result) { byte[] datas = BioloidCommunicationHelper.CreatePingInstruction(identifiant_dynamixel); //> Récupération d'un nouvel index de message byte? identifiant_message = _orchestramessage.GetReferenceMessage(identifiant_dynamixel, traitement_result); if (identifiant_message.HasValue) { try { byte[] message = ServiceFirmata.EncapsulationMessage(datas, identifiant_message.Value, ArduinoBus.SYSEXCMD_DYNAMIXEL_INSTRUCTION_PACKET); this._arduinoBus.writeBytes(message); } catch (Exception ex) { _orchestramessage.DeleteReferenceMessage(identifiant_message.Value); } } else { //> TODO prévoir ce que l'on fait dans ce cas } }
/// <summary> /// Permet de transmettre un mesage de type Write /// </summary> /// <param name="identifiant_dynamixel">identifiant dynamixel concerné</param> /// <param name="add">Registre de début concerné par l'écriture</param> /// <param name="datas">Ensemble des données inscrites à partir de <paramref name="idenfiant_dyanmixel"/>l'adresse de début</param> /// <param name="traitement_result">Méthode qui sera appelée lors du retour</param> internal void SendWriteInstructionMessage(byte identifiant_dynamixel, BioloidRegister add, byte[] datas, ArduinoBus.currentSysexCallback traitement_result) { //> Création du message dynamixel byte[] dyna_paquet = BioloidCommunicationHelper.WriteInstruction(identifiant_dynamixel, add.StartAdressRegister, datas); //> Récupération d'un nouvel index de message byte? identifiant_message = _orchestramessage.GetReferenceMessage(identifiant_dynamixel, traitement_result); if (identifiant_message.HasValue) { try { byte[] message = ServiceFirmata.EncapsulationMessage(dyna_paquet, identifiant_message.Value, ArduinoBus.SYSEXCMD_DYNAMIXEL_INSTRUCTION_PACKET); this._arduinoBus.writeBytes(message); } catch (Exception ex) { _orchestramessage.DeleteReferenceMessage(identifiant_message.Value); } } else { //> Prévoir ce que l'on fait à ce niveau } }
/// <summary> /// Permet de transmettre un message de type READ /// </summary> /// <param name="identifiant_dynamixel">identifiant dynamixel concerné</param> /// <param name="add">Adresse de début du registre à lire</param> /// <param name="length">Nombre de byte à lire</param> /// <param name="traitement">Méthode qui sera appelée lors du retour</param> internal void SendReadInstructionMessage(byte identifiant_dynamixel,BioloidRegister add,byte length, ArduinoBus.currentSysexCallback traitement) { //> Création d'un paquet ReadInstructionMessage byte[] datas = BioloidCommunicationHelper.CreateReadDataInstruction(identifiant_dynamixel, add.StartAdressRegister , (byte)(add.Length + length)); //> Recuperation d'un nouvel index de message byte? identifiant_message = _orchestramessage.GetReferenceMessage(identifiant_dynamixel,traitement); if (identifiant_message.HasValue) { try { byte[] message = ServiceFirmata.EncapsulationMessage(datas, identifiant_message.Value, ArduinoBus.SYSEXCMD_DYNAMIXEL_INSTRUCTION_PACKET); this._arduinoBus.writeBytes(message); } catch (Exception ex) { _orchestramessage.DeleteReferenceMessage(identifiant_message.Value); } } else { // prevoir ce que l'on fait dans ce cas } }