fast-feedback virtual target task code on STM Nucleo

Dependencies:   mbed

Committer:
gwappa
Date:
Mon Jun 25 12:10:31 2018 +0000
Revision:
12:06ea96546af1
Parent:
duration.cpp@11:897ecd5413e0
Child:
13:8ea85a33e37a
extend Pulse class to accommodate the usage for visual cue output

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gwappa 12:06ea96546af1 1 #include "pulse.h"
gwappa 11:897ecd5413e0 2
gwappa 12:06ea96546af1 3 Pulse::Pulse(PinName pin, const uint64_t& onset_us, const uint64_t& duration_us):
gwappa 11:897ecd5413e0 4 out_(pin, 0),
gwappa 11:897ecd5413e0 5 stat_(Rest)
gwappa 11:897ecd5413e0 6 {
gwappa 12:06ea96546af1 7 setOnset(onset_us);
gwappa 11:897ecd5413e0 8 setDuration(duration_us);
gwappa 11:897ecd5413e0 9 }
gwappa 11:897ecd5413e0 10
gwappa 12:06ea96546af1 11 void Pulse::setOnset(const uint64_t& value_us)
gwappa 12:06ea96546af1 12 {
gwappa 12:06ea96546af1 13 onset_ = value_us;
gwappa 12:06ea96546af1 14 }
gwappa 12:06ea96546af1 15
gwappa 12:06ea96546af1 16 void Pulse::setDuration(const uint64_t& value_us)
gwappa 11:897ecd5413e0 17 {
gwappa 11:897ecd5413e0 18 dur_ = value_us;
gwappa 11:897ecd5413e0 19 }
gwappa 11:897ecd5413e0 20
gwappa 12:06ea96546af1 21 void Pulse::attachTurnOnCallback(Callback<void ()> cb)
gwappa 12:06ea96546af1 22 {
gwappa 12:06ea96546af1 23 turnon_ = cb;
gwappa 12:06ea96546af1 24 }
gwappa 12:06ea96546af1 25
gwappa 12:06ea96546af1 26 void Pulse::attachTurnOffCallback(Callback<void ()> cb)
gwappa 12:06ea96546af1 27 {
gwappa 12:06ea96546af1 28 turnoff_ = cb;
gwappa 12:06ea96546af1 29 }
gwappa 12:06ea96546af1 30
gwappa 12:06ea96546af1 31 void Pulse::detachTurnOnCallback()
gwappa 12:06ea96546af1 32 {
gwappa 12:06ea96546af1 33 turnon_ = 0;
gwappa 12:06ea96546af1 34 }
gwappa 12:06ea96546af1 35
gwappa 12:06ea96546af1 36 void Pulse::detachTurnOffCallback()
gwappa 12:06ea96546af1 37 {
gwappa 12:06ea96546af1 38 turnoff_ = 0;
gwappa 12:06ea96546af1 39 }
gwappa 12:06ea96546af1 40
gwappa 12:06ea96546af1 41 void Pulse::run()
gwappa 12:06ea96546af1 42 {
gwappa 12:06ea96546af1 43 if (onset_ < 10) {
gwappa 12:06ea96546af1 44 // do not wait for the onset timeout
gwappa 12:06ea96546af1 45 start();
gwappa 12:06ea96546af1 46 } else {
gwappa 12:06ea96546af1 47 stat_ = Armed;
gwappa 12:06ea96546af1 48 timer_.attach_us(callback(this, &Pulse::start), onset_);
gwappa 12:06ea96546af1 49 }
gwappa 12:06ea96546af1 50 }
gwappa 12:06ea96546af1 51
gwappa 12:06ea96546af1 52 void Pulse::start()
gwappa 11:897ecd5413e0 53 {
gwappa 11:897ecd5413e0 54 stat_ = Active;
gwappa 11:897ecd5413e0 55 out_.write(1);
gwappa 12:06ea96546af1 56 timer_.attach_us(callback(this, &Pulse::stop), dur_);
gwappa 12:06ea96546af1 57 if (turnon_) {
gwappa 12:06ea96546af1 58 turnon_();
gwappa 12:06ea96546af1 59 }
gwappa 11:897ecd5413e0 60 }
gwappa 11:897ecd5413e0 61
gwappa 12:06ea96546af1 62 void Pulse::stop()
gwappa 11:897ecd5413e0 63 {
gwappa 11:897ecd5413e0 64 timer_.detach();
gwappa 11:897ecd5413e0 65 out_.write(0);
gwappa 11:897ecd5413e0 66 stat_ = Rest;
gwappa 12:06ea96546af1 67 if (turnoff_) {
gwappa 12:06ea96546af1 68 turnoff_();
gwappa 12:06ea96546af1 69 }
gwappa 11:897ecd5413e0 70 }
gwappa 11:897ecd5413e0 71
gwappa 12:06ea96546af1 72 void Pulse::direct(const bool& value) {
gwappa 12:06ea96546af1 73 out_.write(value? 1:0);
gwappa 12:06ea96546af1 74 }
gwappa 12:06ea96546af1 75
gwappa 12:06ea96546af1 76 Pulse::Status Pulse::getStatus()
gwappa 11:897ecd5413e0 77 {
gwappa 11:897ecd5413e0 78 return stat_;
gwappa 11:897ecd5413e0 79 }
gwappa 11:897ecd5413e0 80
gwappa 12:06ea96546af1 81 void Pulse::wait()
gwappa 11:897ecd5413e0 82 {
gwappa 11:897ecd5413e0 83 while(stat_ != Rest);
gwappa 11:897ecd5413e0 84 }
gwappa 11:897ecd5413e0 85