// %flair:license{ // This file is part of the Flair framework distributed under the // CECILL-C License, Version 1.0. // %flair:license} // created: 2015/06/15 // filename: AfroBldc_impl.cpp // // author: Guillaume Sanahuja // Copyright Heudiasyc UMR UTC/CNRS 7253 // // version: $Id: $ // // purpose: objet integrant les moteurs i2c // // /*********************************************************************/ #include "AfroBldc_impl.h" #include "AfroBldc.h" #include "Bldc_impl.h" #include "I2cPort.h" #include #include #include #include #include #define BASE_ADDRESS 0x29 #define MAX_VALUE 2047 using std::string; using namespace flair::core; using namespace flair::gui; using namespace flair::sensor; using namespace flair::actuator; AfroBldc_impl::AfroBldc_impl(AfroBldc* self,Layout *layout,I2cPort* i2cport) { this->self=self; this->i2cport=i2cport; nb_mot=self->MotorsCount(); } AfroBldc_impl::~AfroBldc_impl() { } void AfroBldc_impl::SetMotors(float* value) { uint16_t tosend_value[nb_mot]; for(int i=0; iGetMutex(); for(int i=0; iSetSlave(BASE_ADDRESS+i); WriteValue(tosend_value[i]); } i2cport->ReleaseMutex(); } //I2cPort mutex must be taken before calling this function void AfroBldc_impl::WriteValue(uint16_t value) { uint8_t tx[2]; ssize_t written; tx[0]=(uint8_t)(value>>3);//msb tx[1]=(value&0x07);//lsb written =i2cport->Write(tx, 2); 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)); } }