Changeset 15 in flair-src for trunk/lib/FlairSensorActuator/src/AfroBldc_impl.cpp
- Timestamp:
- 04/08/16 15:40:57 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/lib/FlairSensorActuator/src/AfroBldc_impl.cpp
r3 r15 34 34 using namespace flair::actuator; 35 35 36 AfroBldc_impl::AfroBldc_impl(AfroBldc * self,Layout *layout,I2cPort*i2cport) {37 this->self=self;38 this->i2cport=i2cport;39 nb_mot=self->MotorsCount();36 AfroBldc_impl::AfroBldc_impl(AfroBldc *self, Layout *layout, I2cPort *i2cport) { 37 this->self = self; 38 this->i2cport = i2cport; 39 nb_mot = self->MotorsCount(); 40 40 } 41 41 42 AfroBldc_impl::~AfroBldc_impl() { 42 AfroBldc_impl::~AfroBldc_impl() {} 43 43 44 void AfroBldc_impl::SetMotors(float *value) { 45 uint16_t tosend_value[nb_mot]; 46 47 for (int i = 0; i < nb_mot; i++) 48 tosend_value[i] = (uint16_t)(MAX_VALUE * value[i]); 49 50 i2cport->GetMutex(); 51 52 for (int i = 0; i < nb_mot; i++) { 53 i2cport->SetSlave(BASE_ADDRESS + i); 54 WriteValue(tosend_value[i]); 55 } 56 i2cport->ReleaseMutex(); 44 57 } 45 58 46 void AfroBldc_impl::SetMotors(float* value) { 47 uint16_t tosend_value[nb_mot]; 59 // I2cPort mutex must be taken before calling this function 60 void AfroBldc_impl::WriteValue(uint16_t value) { 61 uint8_t tx[2]; 62 ssize_t written; 48 63 49 for(int i=0; i<nb_mot; i++) tosend_value[i]=(uint16_t)(MAX_VALUE*value[i]); 50 51 i2cport->GetMutex(); 52 53 for(int i=0; i<nb_mot; i++) { 54 i2cport->SetSlave(BASE_ADDRESS+i); 55 WriteValue(tosend_value[i]); 56 } 57 i2cport->ReleaseMutex(); 64 tx[0] = (uint8_t)(value >> 3); // msb 65 tx[1] = (value & 0x07); // lsb 66 written = i2cport->Write(tx, 2); 67 if (written < 0) { 68 self->Err("rt_dev_write error (%s)\n", strerror(-written)); 69 } else if (written != sizeof(tx)) { 70 self->Err("rt_dev_write error %i/%i\n", written, sizeof(tx)); 71 } 58 72 } 59 60 //I2cPort mutex must be taken before calling this function61 void AfroBldc_impl::WriteValue(uint16_t value) {62 uint8_t tx[2];63 ssize_t written;64 65 tx[0]=(uint8_t)(value>>3);//msb66 tx[1]=(value&0x07);//lsb67 written =i2cport->Write(tx, 2);68 if(written<0) {69 self->Err("rt_dev_write error (%s)\n",strerror(-written));70 } else if (written != sizeof(tx)) {71 self->Err("rt_dev_write error %i/%i\n",written,sizeof(tx));72 }73 }
Note:
See TracChangeset
for help on using the changeset viewer.