source: flair-src/trunk/lib/FlairSensorActuator/src/Bldc.cpp @ 157

Last change on this file since 157 was 157, checked in by Sanahuja Guillaume, 5 years ago

iadded isready to iodevice:
avoid problem of imu not ready in ardrone2

File size: 2.7 KB
RevLine 
[3]1// %flair:license{
[15]2// This file is part of the Flair framework distributed under the
3// CECILL-C License, Version 1.0.
[3]4// %flair:license}
5//  created:    2013/11/14
6//  filename:   Bldc.cpp
7//
8//  author:     Guillaume Sanahuja
9//              Copyright Heudiasyc UMR UTC/CNRS 7253
10//
11//  version:    $Id: $
12//
13//  purpose:    Virtual class for brushless drivers
14//
15//
16/*********************************************************************/
17
18#include "Bldc.h"
19#include "Bldc_impl.h"
20#include <cvmatrix.h>
21#include <DoubleSpinBox.h>
22#include <sstream>
[45]23#include "compile_info.h"
[3]24
[45]25//todo: put it on seprate file, but not possible with static lib?
26static void constructor() __attribute__((constructor));
27
28void constructor() {
29  compile_info("FlairSensorActuator");
30}
31
[3]32using std::string;
33using std::ostringstream;
34using namespace flair::core;
35using namespace flair::gui;
36
[15]37namespace flair {
38namespace actuator {
[3]39
[15]40Bldc::Bldc(const IODevice *parent, Layout *layout, string name,
41           uint8_t motors_count)
42    : IODevice(parent, name) {
43  pimpl_ = new Bldc_impl(this, layout, name, motors_count);
[3]44
[15]45  cvmatrix_descriptor *desc = new cvmatrix_descriptor(motors_count, 2);
46  for (int i = 0; i < motors_count; i++) {
47    ostringstream speed, current;
48    speed << "speed_" << i;
49    desc->SetElementName(i, 0, speed.str());
[3]50
[15]51    current << "current_" << i;
52    desc->SetElementName(i, 1, current.str());
53  }
[3]54
[15]55  output = new cvmatrix(this, desc, floatType);
[148]56  delete desc;
[15]57  AddDataToLog(output);
[3]58}
59
[15]60Bldc::Bldc(const Object *parent, string name, uint8_t motors_count)
61    : IODevice(parent, name) {
62  pimpl_ = new Bldc_impl(this, motors_count);
[157]63 
64  SetIsReady(true);
[3]65}
66
[15]67Bldc::~Bldc() { delete pimpl_; }
[3]68
[15]69void Bldc::UpdateFrom(const io_data *data) { pimpl_->UpdateFrom(data); }
[3]70
[15]71void Bldc::LockUserInterface(void) const { pimpl_->LockUserInterface(); }
[3]72
[15]73void Bldc::UnlockUserInterface(void) const { pimpl_->UnlockUserInterface(); }
[3]74
[15]75Layout *Bldc::GetLayout(void) const { return (Layout *)pimpl_->layout; }
[3]76
[15]77void Bldc::UseDefaultPlot(TabWidget *tabwidget) {
78  pimpl_->UseDefaultPlot(tabwidget);
[3]79}
80
[15]81uint8_t Bldc::MotorsCount(void) const { return pimpl_->motors_count; }
[3]82
[15]83cvmatrix *Bldc::Output(void) const { return output; }
[3]84
[15]85bool Bldc::AreEnabled(void) const { return pimpl_->are_enabled; }
[3]86
87void Bldc::SetEnabled(bool status) {
[15]88  if (pimpl_->are_enabled != status) {
89    pimpl_->are_enabled = status;
90    if (pimpl_->are_enabled) {
91      LockUserInterface();
92    } else {
93      UnlockUserInterface();
[3]94    }
[15]95  }
[3]96}
97
[15]98void Bldc::SetPower(int motor_id, float value) {
99  // use output mutex to avoid making a new mutex
100  output->GetMutex();
101  pimpl_->power[motor_id] = value;
102  output->ReleaseMutex();
[3]103}
104
105} // end namespace sensor
106} // end namespace flair
Note: See TracBrowser for help on using the repository browser.