// %flair:license{ // This file is part of the Flair framework distributed under the // CECILL-C License, Version 1.0. // %flair:license} // created: 2013/11/13 // filename: XBldc_impl.cpp // // author: Guillaume Sanahuja // Copyright Heudiasyc UMR UTC/CNRS 7253 // // version: $Id: $ // // purpose: objet integrant les moteurs i2c Xufo // // /*********************************************************************/ #include "XBldc_impl.h" #include "XBldc.h" #include #include #include #define BASE_ADDRESS 0x01 #define MAX_VALUE 200 using namespace flair::core; using namespace flair::gui; using namespace flair::actuator; XBldc_impl::XBldc_impl(XBldc* self,I2cPort* i2cport) { this->self=self; this->i2cport=i2cport; i2cport->SetTxTimeout(5000000); } XBldc_impl::~XBldc_impl() { } void XBldc_impl::SetMotors(float* value) { uint8_t tosend_value[5]; for(int i=0;i<4;i++) tosend_value[i]=(uint8_t)(MAX_VALUE*value[i]); ssize_t written; tosend_value[4]=0xaa; for(int i=0;i<4;i++) tosend_value[4]+=tosend_value[i]; self->Err("please verify motors adresses\n"); //todo faire la procedure changement addresse par la station sol /* i2cport->GetMutex(); i2cport->SetSlave(BASE_ADDRESS); written =i2cport->Write(tosend_value, sizeof(tosend_value)); if(written<0) { self->Err("rt_dev_write error (%s)\n",strerror(-written)); } else if (written != sizeof(tosend_value)) { self->Err("rt_dev_write error %i/%i\n",written,sizeof(tosend_value)); } i2cport->ReleaseMutex();*/ } /* void XBldc_impl::StartTest(uint8_t moteur) { unsigned char tx[4]; ssize_t written; tx[0]=251; tx[1]=moteur; tx[2]=0; tx[3]=231+moteur; i2cport->GetMutex(); i2cport->SetSlave(BASE_ADDRESS); written =i2cport->Write(tx, sizeof(tx)); if(written<0) { self->Err("rt_dev_write error (%s)\n",strerror(-written)); } else if (written != sizeof(tx)) { self->Err("rt_dev_write %i/%i error\n",written,sizeof(tx)); } i2cport->ReleaseMutex(); } */ void XBldc_impl::ChangeDirection(uint8_t moteur) { unsigned char tx[4]; ssize_t written; tx[0]=254; tx[1]=moteur; tx[2]=0; tx[3]=234+moteur; i2cport->GetMutex(); i2cport->SetSlave(BASE_ADDRESS); written =i2cport->Write(tx, sizeof(tx)); if(written<0) { self->Err("rt_dev_write (%s) error\n",strerror(-written)); } else if (written != sizeof(tx)) { self->Err("rt_dev_write %i/%i error\n",written,sizeof(tx)); } i2cport->ReleaseMutex(); } void XBldc_impl::ChangeAdress(uint8_t old_add,uint8_t new_add) { unsigned char tx[4]; ssize_t written; tx[0]=250; tx[1]=old_add; tx[2]=new_add; tx[3]=230+old_add+new_add; i2cport->GetMutex(); i2cport->SetSlave(BASE_ADDRESS); written =i2cport->Write(tx, sizeof(tx)); if(written<0) { self->Err("rt_dev_write error (%s)\n",strerror(-written)); } else if (written != sizeof(tx)) { self->Err("rt_dev_write error %i/%i\n",written,sizeof(tx)); } i2cport->ReleaseMutex(); } uint8_t XBldc_impl::Sat(float value,uint8_t min,uint8_t max) { uint8_t sat_value=(uint8_t)value; if(value>((float)sat_value+0.5)) sat_value++; if(value<(float)min) sat_value=min; if(value>(float)max) sat_value=max; return sat_value; }