Skip to content

Commit bc55b88

Browse files
authored
Merge pull request #12 from rogy-AquaLab/fix-iroiro
Fix iroiro
2 parents 8aa3f90 + a2daa6c commit bc55b88

File tree

7 files changed

+74
-59
lines changed

7 files changed

+74
-59
lines changed

.clang-format

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ AccessModifierOffset: -4
55
AlignAfterOpenBracket: BlockIndent
66
AlignArrayOfStructures: None
77
AlignConsecutiveAssignments:
8-
Enabled: true
8+
Enabled: false
99
AcrossEmptyLines: false
1010
AcrossComments: false
1111
AlignCompound: false
@@ -36,7 +36,7 @@ AlignConsecutiveShortCaseStatements:
3636
Enabled: true
3737
AcrossEmptyLines: false
3838
AcrossComments: false
39-
AlignCaseArrows: false
39+
# AlignCaseArrows: false
4040
AlignCaseColons: false
4141

4242
AlignEscapedNewlines: Left

include/umiusi/defered_delay.hpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
#ifndef DEFERED_DELAY_HPP
22
#define DEFERED_DELAY_HPP
33

4+
#include <chrono>
45
#include <cstdint>
56

67
struct DeferedDelay {
7-
const uint16_t duration_ms;
8+
const std::chrono::milliseconds duration;
89

9-
DeferedDelay(uint16_t duration_ms);
10+
DeferedDelay(std::chrono::milliseconds duration);
1011
~DeferedDelay();
1112
};
1213

include/umiusi/outputs.hpp

+22
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,14 @@
22
#define OUTPUTS_HPP
33

44
#include <array>
5+
#include <mutex>
56

67
#include <DigitalOut.h>
8+
#include <Mutex.h>
79
#include <PwmOut.h>
810

11+
#include "umiusi/state.hpp"
12+
913
// Pin Map:
1014
// targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F3x8/TARGET_NUCLEO_F303K8/PeripheralPins.c
1115
// in https://github.com/ARMmbed/mbed-os/tree/869f0d7
@@ -88,4 +92,22 @@ class Outputs {
8892
void reset();
8993
};
9094

95+
class OutputMachine {
96+
private:
97+
Outputs outputs;
98+
State _state;
99+
rtos::Mutex state_mutex;
100+
101+
void set_state(State s);
102+
103+
public:
104+
explicit OutputMachine();
105+
auto state() -> State;
106+
void set_powers(
107+
const std::array<std::pair<uint16_t, uint16_t>, THRUSTER_NUM>& pulsewidths_us
108+
);
109+
void suspend();
110+
void initialize();
111+
};
112+
91113
#endif

include/umiusi/state.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
#include <cstdint>
55

6-
enum class State: std::uint8_t {
6+
enum class State : std::uint8_t {
77
INITIALIZING = 0,
88
SUSPEND = 1,
99
RUNNING = 2,

src/main.cpp

+1-51
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
#include <array>
2-
#include <chrono>
32
#include <cstdint>
43
#include <mutex>
54

@@ -11,58 +10,9 @@
1110
#include "umiusi/defered_delay.hpp"
1211
#include "umiusi/inputs.hpp"
1312
#include "umiusi/outputs.hpp"
14-
#include "umiusi/state.hpp"
1513

1614
using namespace std::chrono_literals;
1715

18-
class OutputMachine {
19-
private:
20-
Outputs outputs;
21-
State _state;
22-
rtos::Mutex state_mutex;
23-
24-
void set_state(State s) {
25-
std::lock_guard _guard(this->state_mutex);
26-
this->_state = s;
27-
}
28-
29-
public:
30-
explicit OutputMachine() : outputs(), _state(State::SUSPEND), state_mutex() {}
31-
32-
auto state() -> State {
33-
std::lock_guard _guard(this->state_mutex);
34-
return this->_state;
35-
}
36-
37-
void set_powers(
38-
const std::array<std::pair<uint16_t, uint16_t>, THRUSTER_NUM>& pulsewidths_us
39-
) {
40-
if (this->state() != State::RUNNING) {
41-
return;
42-
}
43-
this->outputs.set_powers(pulsewidths_us);
44-
}
45-
46-
void suspend() {
47-
this->outputs.reset();
48-
this->set_state(State::SUSPEND);
49-
this->outputs.deactivate();
50-
}
51-
52-
void initialize() {
53-
if (this->state() == State::INITIALIZING) {
54-
return;
55-
}
56-
this->set_state(State::INITIALIZING);
57-
this->outputs.reset();
58-
this->outputs.setup();
59-
if (this->state() == State::INITIALIZING) {
60-
// setup前後で値が変化する可能性がある
61-
this->set_state(State::RUNNING);
62-
}
63-
}
64-
};
65-
6616
int main() {
6717
constexpr size_t INPUTS_THREAD_STACK_SIZE = 1024;
6818
constexpr size_t SETUP_THREAD_STACK_SIZE = 512;
@@ -104,7 +54,7 @@ int main() {
10454
inputs.read();
10555
}
10656
while (true) {
107-
DeferedDelay _delay(10);
57+
DeferedDelay _delay(10ms);
10858
pc.sync();
10959
uint8_t header = 0;
11060
// TODO: timeout

src/umiusi/defered_delay.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
#include "ThisThread.h"
33
#include <chrono>
44

5-
DeferedDelay::DeferedDelay(uint16_t duration_ms) : duration_ms(duration_ms) {}
5+
DeferedDelay::DeferedDelay(std::chrono::milliseconds duration) : duration(duration) {}
66

77
DeferedDelay::~DeferedDelay() {
8-
rtos::ThisThread::sleep_for(std::chrono::milliseconds(duration_ms));
8+
rtos::ThisThread::sleep_for(this->duration);
99
}

src/umiusi/outputs.cpp

+43-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#include "umiusi/outputs.hpp"
22
#include "umiusi/defered_delay.hpp"
33

4+
using namespace std::chrono_literals;
5+
46
Outputs::Outputs() :
57
init_status(INIT_PIN),
68
bldcs{ mbed::PwmOut(BLDC1_PIN),
@@ -29,7 +31,7 @@ void Outputs::deactivate() {
2931

3032
/// ESC の起動待ち
3133
void Outputs::wake_up() {
32-
DeferedDelay _(2000);
34+
DeferedDelay _(2s);
3335
for (mbed::PwmOut& bldc : this->bldcs) {
3436
bldc.pulsewidth_us(100);
3537
}
@@ -55,3 +57,43 @@ void Outputs::reset() {
5557
reset_pulsewidths_us{};
5658
this->set_powers(reset_pulsewidths_us);
5759
}
60+
61+
void OutputMachine::set_state(State s) {
62+
std::lock_guard _guard(this->state_mutex);
63+
this->_state = s;
64+
}
65+
66+
OutputMachine::OutputMachine() : outputs(), _state(State::SUSPEND), state_mutex() {}
67+
68+
auto OutputMachine::state() -> State {
69+
std::lock_guard _guard(this->state_mutex);
70+
return this->_state;
71+
}
72+
73+
void OutputMachine::set_powers(
74+
const std::array<std::pair<uint16_t, uint16_t>, THRUSTER_NUM>& pulsewidths_us
75+
) {
76+
if (this->state() != State::RUNNING) {
77+
return;
78+
}
79+
this->outputs.set_powers(pulsewidths_us);
80+
}
81+
82+
void OutputMachine::suspend() {
83+
this->outputs.reset();
84+
this->set_state(State::SUSPEND);
85+
this->outputs.deactivate();
86+
}
87+
88+
void OutputMachine::initialize() {
89+
if (this->state() == State::INITIALIZING) {
90+
return;
91+
}
92+
this->set_state(State::INITIALIZING);
93+
this->outputs.reset();
94+
this->outputs.setup();
95+
if (this->state() == State::INITIALIZING) {
96+
// setup前後で値が変化する可能性がある
97+
this->set_state(State::RUNNING);
98+
}
99+
}

0 commit comments

Comments
 (0)