Ignore:
Timestamp:
02/07/18 17:49:27 (6 years ago)
Author:
Sanahuja Guillaume
Message:

matrix

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/FlairSensorActuator/src/SimuBldc.cpp

    r158 r214  
    2121#include <GroupBox.h>
    2222#include <SharedMem.h>
    23 #include <cvmatrix.h>
     23#include <Matrix.h>
    2424#include <sstream>
     25#include <string.h>
    2526
    2627using std::string;
     
    3637    : Bldc(parent, layout, name, motors_count) {
    3738  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));
    3940
    4041  GroupBox *groupbox = new GroupBox(layout->NewRow(), "simubldc");
    4142  k = new DoubleSpinBox(groupbox->NewRow(), "k driver:", 0, 10000, 1);
    4243 
     44  buf=(char*)malloc(motors_count * sizeof(float)+sizeof(Time));
     45  if(buf==NULL) {
     46    Err("error creating buffer\n");
     47    return;
     48  }
    4349  SetIsReady(true);
    4450}
     
    4854    : Bldc(parent, name, motors_count) {
    4955  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));
    5169
    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));
    5871 
    5972  SetIsReady(true);
    6073}
    6174
    62 SimuBldc::~SimuBldc() {}
     75SimuBldc::~SimuBldc() {
     76  if(buf!=NULL) free(buf);
     77}
    6378
    6479string SimuBldc::ShMemName(uint32_t modelId,uint32_t deviceId) {
     
    6984
    7085void 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));
    7290
    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));
    7792
    7893  // on prend une fois pour toute le mutex et on fait des accès directs
    7994  output->GetMutex();
    80   for (int i = 0; i < MotorsCount(); i++)
     95  for (int i = 0; i < MotorsCount(); i++) {
    8196    output->SetValueNoMutex(i, 0, values[i]);
     97  }
    8298  output->ReleaseMutex();
    8399}
    84100
    85 void SimuBldc::GetSpeeds(float *value) const {
    86   float values[MotorsCount()];
    87   shmem->Read((char *)&values, MotorsCount() * sizeof(float));
     101void 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));
    88105
    89   for (int i = 0; i < MotorsCount(); i++)
     106  for (int i = 0; i < MotorsCount(); i++) {
    90107    value[i] = values[i];
     108  }
    91109}
    92110
Note: See TracChangeset for help on using the changeset viewer.