Keisuke Sehara
/
STM32_Whisking
fast-feedback virtual target task code on STM Nucleo
pulse.cpp@20:4c06d3041337, 2018-07-02 (annotated)
- 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?
User | Revision | Line number | New 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 |