fast-feedback virtual target task code on STM Nucleo

Dependencies:   mbed

Committer:
gwappa
Date:
Mon Jul 02 09:04:45 2018 +0000
Revision:
20:4c06d3041337
Parent:
15:20f7f737c256
try extending Pulse to allow tickering output

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gwappa 12:06ea96546af1 1 #include "pulse.h"
gwappa 11:897ecd5413e0 2
gwappa 20:4c06d3041337 3 Pulse::Pulse(PinName pin,
gwappa 20:4c06d3041337 4 const uint64_t& onset_us,
gwappa 20:4c06d3041337 5 const uint64_t& duration_us,
gwappa 20:4c06d3041337 6 const uint64_t& blink_us):
gwappa 11:897ecd5413e0 7 out_(pin, 0),
gwappa 15:20f7f737c256 8 enabled_(true),
gwappa 11:897ecd5413e0 9 stat_(Rest)
gwappa 11:897ecd5413e0 10 {
gwappa 12:06ea96546af1 11 setOnset(onset_us);
gwappa 11:897ecd5413e0 12 setDuration(duration_us);
gwappa 20:4c06d3041337 13 setBlinkDuration(blink_us);
gwappa 11:897ecd5413e0 14 }
gwappa 11:897ecd5413e0 15
gwappa 15:20f7f737c256 16 void Pulse::setEnabled(const bool& value)
gwappa 15:20f7f737c256 17 {
gwappa 15:20f7f737c256 18 enabled_ = value;
gwappa 15:20f7f737c256 19 }
gwappa 15:20f7f737c256 20
gwappa 12:06ea96546af1 21 void Pulse::setOnset(const uint64_t& value_us)
gwappa 12:06ea96546af1 22 {
gwappa 12:06ea96546af1 23 onset_ = value_us;
gwappa 12:06ea96546af1 24 }
gwappa 12:06ea96546af1 25
gwappa 15:20f7f737c256 26 bool Pulse::isEnabled()
gwappa 15:20f7f737c256 27 {
gwappa 15:20f7f737c256 28 return enabled_;
gwappa 15:20f7f737c256 29 }
gwappa 15:20f7f737c256 30
gwappa 12:06ea96546af1 31 void Pulse::setDuration(const uint64_t& value_us)
gwappa 11:897ecd5413e0 32 {
gwappa 11:897ecd5413e0 33 dur_ = value_us;
gwappa 11:897ecd5413e0 34 }
gwappa 11:897ecd5413e0 35
gwappa 20:4c06d3041337 36 void Pulse::setBlinkDuration(const uint64_t& value_us)
gwappa 20:4c06d3041337 37 {
gwappa 20:4c06d3041337 38 blinkdur_ = value_us;
gwappa 20:4c06d3041337 39 }
gwappa 20:4c06d3041337 40
gwappa 12:06ea96546af1 41 void Pulse::attachTurnOnCallback(Callback<void ()> cb)
gwappa 12:06ea96546af1 42 {
gwappa 12:06ea96546af1 43 turnon_ = cb;
gwappa 12:06ea96546af1 44 }
gwappa 12:06ea96546af1 45
gwappa 12:06ea96546af1 46 void Pulse::attachTurnOffCallback(Callback<void ()> cb)
gwappa 12:06ea96546af1 47 {
gwappa 12:06ea96546af1 48 turnoff_ = cb;
gwappa 12:06ea96546af1 49 }
gwappa 12:06ea96546af1 50
gwappa 12:06ea96546af1 51 void Pulse::detachTurnOnCallback()
gwappa 12:06ea96546af1 52 {
gwappa 12:06ea96546af1 53 turnon_ = 0;
gwappa 12:06ea96546af1 54 }
gwappa 12:06ea96546af1 55
gwappa 12:06ea96546af1 56 void Pulse::detachTurnOffCallback()
gwappa 12:06ea96546af1 57 {
gwappa 12:06ea96546af1 58 turnoff_ = 0;
gwappa 12:06ea96546af1 59 }
gwappa 12:06ea96546af1 60
gwappa 12:06ea96546af1 61 void Pulse::run()
gwappa 12:06ea96546af1 62 {
gwappa 15:20f7f737c256 63 if (!enabled_) return;
gwappa 15:20f7f737c256 64
gwappa 12:06ea96546af1 65 if (onset_ < 10) {
gwappa 12:06ea96546af1 66 // do not wait for the onset timeout
gwappa 12:06ea96546af1 67 start();
gwappa 12:06ea96546af1 68 } else {
gwappa 12:06ea96546af1 69 stat_ = Armed;
gwappa 12:06ea96546af1 70 timer_.attach_us(callback(this, &Pulse::start), onset_);
gwappa 12:06ea96546af1 71 }
gwappa 12:06ea96546af1 72 }
gwappa 12:06ea96546af1 73
gwappa 12:06ea96546af1 74 void Pulse::start()
gwappa 11:897ecd5413e0 75 {
gwappa 15:20f7f737c256 76 if (!enabled_) return;
gwappa 15:20f7f737c256 77
gwappa 11:897ecd5413e0 78 stat_ = Active;
gwappa 11:897ecd5413e0 79 out_.write(1);
gwappa 12:06ea96546af1 80 timer_.attach_us(callback(this, &Pulse::stop), dur_);
gwappa 20:4c06d3041337 81 if (blinkdur_ > 0) {
gwappa 20:4c06d3041337 82 blinker_.attach_us(callback(this, &Pulse::blink), blinkdur_);
gwappa 20:4c06d3041337 83 }
gwappa 12:06ea96546af1 84 if (turnon_) {
gwappa 12:06ea96546af1 85 turnon_();
gwappa 12:06ea96546af1 86 }
gwappa 11:897ecd5413e0 87 }
gwappa 11:897ecd5413e0 88
gwappa 12:06ea96546af1 89 void Pulse::stop()
gwappa 11:897ecd5413e0 90 {
gwappa 15:20f7f737c256 91 if (!enabled_) return;
gwappa 15:20f7f737c256 92
gwappa 11:897ecd5413e0 93 timer_.detach();
gwappa 20:4c06d3041337 94 blinker_.detach();
gwappa 20:4c06d3041337 95
gwappa 11:897ecd5413e0 96 out_.write(0);
gwappa 11:897ecd5413e0 97 stat_ = Rest;
gwappa 12:06ea96546af1 98 if (turnoff_) {
gwappa 12:06ea96546af1 99 turnoff_();
gwappa 12:06ea96546af1 100 }
gwappa 11:897ecd5413e0 101 }
gwappa 11:897ecd5413e0 102
gwappa 20:4c06d3041337 103 void Pulse::blink()
gwappa 20:4c06d3041337 104 {
gwappa 20:4c06d3041337 105 out_ = !out_;
gwappa 20:4c06d3041337 106 }
gwappa 20:4c06d3041337 107
gwappa 12:06ea96546af1 108 void Pulse::direct(const bool& value) {
gwappa 12:06ea96546af1 109 out_.write(value? 1:0);
gwappa 12:06ea96546af1 110 }
gwappa 12:06ea96546af1 111
gwappa 12:06ea96546af1 112 Pulse::Status Pulse::getStatus()
gwappa 11:897ecd5413e0 113 {
gwappa 11:897ecd5413e0 114 return stat_;
gwappa 11:897ecd5413e0 115 }
gwappa 11:897ecd5413e0 116
gwappa 12:06ea96546af1 117 void Pulse::wait()
gwappa 11:897ecd5413e0 118 {
gwappa 11:897ecd5413e0 119 while(stat_ != Rest);
gwappa 11:897ecd5413e0 120 }
gwappa 13:8ea85a33e37a 121
gwappa 11:897ecd5413e0 122