source: flair-src/tags/0.2.1/lib/FlairSensorActuator/src/Bldc.cpp

Last change on this file was 214, checked in by Sanahuja Guillaume, 6 years ago

matrix

File size: 2.7 KB
Line 
1// %flair:license{
2// This file is part of the Flair framework distributed under the
3// CECILL-C License, Version 1.0.
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 <Matrix.h>
21#include <DoubleSpinBox.h>
22#include <sstream>
23#include "compile_info.h"
24
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
32using std::string;
33using std::ostringstream;
34using namespace flair::core;
35using namespace flair::gui;
36
37namespace flair {
38namespace actuator {
39
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);
44
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());
50
51 current << "current_" << i;
52 desc->SetElementName(i, 1, current.str());
53 }
54
55 output = new Matrix(this, desc, floatType);
56 delete desc;
57 AddDataToLog(output);
58}
59
60Bldc::Bldc(const Object *parent, string name, uint8_t motors_count)
61 : IODevice(parent, name) {
62 pimpl_ = new Bldc_impl(this, motors_count);
63
64 SetIsReady(true);
65}
66
67Bldc::~Bldc() { delete pimpl_; }
68
69void Bldc::UpdateFrom(const io_data *data) { pimpl_->UpdateFrom(data); }
70
71void Bldc::LockUserInterface(void) const { pimpl_->LockUserInterface(); }
72
73void Bldc::UnlockUserInterface(void) const { pimpl_->UnlockUserInterface(); }
74
75Layout *Bldc::GetLayout(void) const { return (Layout *)pimpl_->layout; }
76
77void Bldc::UseDefaultPlot(TabWidget *tabwidget) {
78 pimpl_->UseDefaultPlot(tabwidget);
79}
80
81uint8_t Bldc::MotorsCount(void) const { return pimpl_->motors_count; }
82
83Matrix *Bldc::Output(void) const { return output; }
84
85bool Bldc::AreEnabled(void) const { return pimpl_->are_enabled; }
86
87void Bldc::SetEnabled(bool status) {
88 if (pimpl_->are_enabled != status) {
89 pimpl_->are_enabled = status;
90 if (pimpl_->are_enabled) {
91 LockUserInterface();
92 } else {
93 UnlockUserInterface();
94 }
95 }
96}
97
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();
103}
104
105} // end namespace sensor
106} // end namespace flair
Note: See TracBrowser for help on using the repository browser.