Changeset 214 in flair-src for trunk/lib/FlairSensorActuator/src/SimuBldc.cpp
- Timestamp:
- 02/07/18 17:49:27 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/lib/FlairSensorActuator/src/SimuBldc.cpp
r158 r214 21 21 #include <GroupBox.h> 22 22 #include <SharedMem.h> 23 #include < cvmatrix.h>23 #include <Matrix.h> 24 24 #include <sstream> 25 #include <string.h> 25 26 26 27 using std::string; … … 36 37 : Bldc(parent, layout, name, motors_count) { 37 38 shmem = 38 new SharedMem(this, ShMemName(modelId, deviceId), motors_count * sizeof(float) );39 new SharedMem(this, ShMemName(modelId, deviceId), motors_count * sizeof(float)+sizeof(Time)); 39 40 40 41 GroupBox *groupbox = new GroupBox(layout->NewRow(), "simubldc"); 41 42 k = new DoubleSpinBox(groupbox->NewRow(), "k driver:", 0, 10000, 1); 42 43 44 buf=(char*)malloc(motors_count * sizeof(float)+sizeof(Time)); 45 if(buf==NULL) { 46 Err("error creating buffer\n"); 47 return; 48 } 43 49 SetIsReady(true); 44 50 } … … 48 54 : Bldc(parent, name, motors_count) { 49 55 shmem = 50 new SharedMem(this, ShMemName(modelId, deviceId), motors_count * sizeof(float)); 56 new SharedMem(this, ShMemName(modelId, deviceId), motors_count * sizeof(float)+sizeof(Time)); 57 58 buf=(char*)malloc(motors_count * sizeof(float)+sizeof(Time)); 59 if(buf==NULL) { 60 Err("error creating buffer\n"); 61 return; 62 } 63 64 // reset values 65 float *values=(float*)buf; 66 for (int i = 0; i < motors_count; i++) values[i] = 0; 67 Time time=GetTime(); 68 memcpy(buf+motors_count * sizeof(float),&time,sizeof(Time)); 51 69 52 // reset values 53 float values[motors_count]; 54 for (int i = 0; i < motors_count; i++) 55 values[i] = 0; 56 57 shmem->Write((char *)&values, motors_count * sizeof(float)); 70 shmem->Write(buf, motors_count * sizeof(float)+sizeof(Time)); 58 71 59 72 SetIsReady(true); 60 73 } 61 74 62 SimuBldc::~SimuBldc() {} 75 SimuBldc::~SimuBldc() { 76 if(buf!=NULL) free(buf); 77 } 63 78 64 79 string SimuBldc::ShMemName(uint32_t modelId,uint32_t deviceId) { … … 69 84 70 85 void SimuBldc::SetMotors(float *value) { 71 float values[MotorsCount()]; 86 float *values=(float*)buf; 87 for (int i = 0; i < MotorsCount(); i++) values[i] = k->Value() * value[i]; 88 Time time=GetTime(); 89 memcpy(buf+MotorsCount() * sizeof(float),&time,sizeof(Time)); 72 90 73 for (int i = 0; i < MotorsCount(); i++) 74 values[i] = k->Value() * value[i]; 75 76 shmem->Write((char *)&values, MotorsCount() * sizeof(float)); 91 shmem->Write(buf, MotorsCount() * sizeof(float)+sizeof(Time)); 77 92 78 93 // on prend une fois pour toute le mutex et on fait des accès directs 79 94 output->GetMutex(); 80 for (int i = 0; i < MotorsCount(); i++) 95 for (int i = 0; i < MotorsCount(); i++) { 81 96 output->SetValueNoMutex(i, 0, values[i]); 97 } 82 98 output->ReleaseMutex(); 83 99 } 84 100 85 void SimuBldc::GetSpeeds(float *value) const { 86 float values[MotorsCount()]; 87 shmem->Read((char *)&values, MotorsCount() * sizeof(float)); 101 void SimuBldc::GetSpeeds(float *value,Time* time) const { 102 float *values=(float*)buf; 103 shmem->Read(buf, MotorsCount() * sizeof(float)+sizeof(Time)); 104 memcpy(time,buf+MotorsCount() * sizeof(float),sizeof(Time)); 88 105 89 for (int i = 0; i < MotorsCount(); i++) 106 for (int i = 0; i < MotorsCount(); i++) { 90 107 value[i] = values[i]; 108 } 91 109 } 92 110
Note:
See TracChangeset
for help on using the changeset viewer.