Keisuke Sehara
/
STM32_Whisking
fast-feedback virtual target task code on STM Nucleo
pulse.cpp@13:8ea85a33e37a, 2018-06-25 (annotated)
- Committer:
- gwappa
- Date:
- Mon Jun 25 13:20:00 2018 +0000
- Revision:
- 13:8ea85a33e37a
- Parent:
- 12:06ea96546af1
- Child:
- 15:20f7f737c256
add random pulse feature
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 | 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 | 13:8ea85a33e37a | 85 | |
gwappa | 11:897ecd5413e0 | 86 |