Skip to content

Commit cd96ee1

Browse files
authored
Merge pull request #264 from HyperloopUPV-H8/development
v2.3.1
2 parents d38bb00 + 5beaf79 commit cd96ee1

22 files changed

Lines changed: 1940 additions & 531 deletions

File tree

CMakeLists.txt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@ option(BOARD "Board clock config" OFF)
2828
option(NUCLEO "Nucleo clock config" OFF)
2929

3030
if(BOARD)
31-
add_definitions(-DNUCLEO)
31+
add_definitions(-DBOARD)
3232
add_definitions(-DHSE_VALUE=25000000)
3333
endif()
3434

3535
if(NUCLEO)
36-
add_definitions(-DBOARD)
36+
add_definitions(-DNUCLEO)
3737
add_definitions(-DHSE_VALUE=8000000)
3838
endif()
3939

@@ -44,7 +44,8 @@ target_compile_options(${LIBRARY} PUBLIC
4444
-mfloat-abi=hard
4545
-mthumb
4646

47-
-O0
47+
-Og
48+
-g3
4849
-ffunction-sections
4950
-fdata-sections
5051
-fno-exceptions
Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
1-
21
#pragma once
3-
enum BoardID{
4-
VCU,
5-
BLCU_VEHICLE,
6-
BLCU_INFRASTRUCTURE,
7-
TCU,
8-
LCU_MASTER,
9-
LCU_SLAVE,
10-
PCU,
11-
BMSA,
12-
OBCCU,
13-
NOBOARD
14-
};
2+
3+
namespace Boards {
4+
5+
enum ID{
6+
VCU,
7+
BLCU_VEHICLE,
8+
BLCU_INFRASTRUCTURE,
9+
TCU,
10+
LCU_MASTER,
11+
LCU_SLAVE,
12+
PCU,
13+
BMSA,
14+
OBCCU,
15+
NOBOARD
16+
};
17+
18+
}

Inc/HALAL/Services/Communication/Ethernet/TCP/ServerSocket.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,12 @@ class ServerSocket : OrderProtocol{
5959
}
6060

6161
uint8_t* order_buffer = order.build();
62-
if(order.size > tcp_sndbuf(client_control_block)){
62+
if(order.get_size() > tcp_sndbuf(client_control_block)){
6363
return false;
6464
}
6565

66-
struct pbuf* packet = pbuf_alloc(PBUF_TRANSPORT, order.size, PBUF_POOL);
67-
pbuf_take(packet, order_buffer, order.size);
66+
struct pbuf* packet = pbuf_alloc(PBUF_TRANSPORT, order.get_size(), PBUF_POOL);
67+
pbuf_take(packet, order_buffer, order.get_size());
6868
tx_packet_buffer.push(packet);
6969
send();
7070
return true;

Inc/HALAL/Services/Communication/FDCAN/FDCAN.hpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,9 +112,6 @@ class FDCAN{
112112

113113
static bool read(uint8_t id, FDCAN::Packet* data);
114114

115-
//The use of this method is highly discouraged.
116-
static bool wait_and_read(uint8_t id, FDCAN::Packet* data);
117-
118115
/**
119116
* @brief This method is used to check if the FDCAN have received any new packet.
120117
*

Inc/HALAL/Services/Communication/SNTP/SNTP.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,6 @@ class SNTP{
1313
public:
1414
static void sntp_update(uint8_t address_head, uint8_t address_second, uint8_t address_third, uint8_t address_last);
1515
static void sntp_update(string ip);
16+
static void sntp_update();
1617

1718
};

Inc/ST-LIB_HIGH/Protections/ProtectionManager.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class ProtectionManager {
2626
public:
2727
typedef uint8_t state_id;
2828

29-
static void set_id(BoardID id);
29+
static void set_id(Boards::ID id);
3030

3131
static void link_state_machine(StateMachine& general_state_machine, state_id fault_id);
3232

@@ -52,7 +52,7 @@ class ProtectionManager {
5252
static size_t message_size;
5353
static constexpr const char* format = "{\"boardId\": %s, \"timestamp\":{%s}, %s}";
5454

55-
static BoardID board_id;
55+
static Boards::ID board_id;
5656
static vector<Protection> low_frequency_protections;
5757
static vector<Protection> high_frequency_protections;
5858
static StateMachine* general_state_machine;

Inc/ST-LIB_LOW/StateMachine/StateMachine.hpp

Lines changed: 41 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class TimedAction {
2525
uint32_t period;
2626
AlarmType alarm_precision;
2727
uint8_t id = -1;
28+
bool is_on = false;
2829

2930
TimedAction() = default;
3031
};
@@ -37,15 +38,17 @@ class State {
3738
void enter();
3839
void exit();
3940
template<class TimeUnit>
40-
void add_new_timed_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period, AlarmType precision_type);
41+
TimedAction* add_new_timed_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period, AlarmType precision_type);
4142
template<class TimeUnit>
42-
void register_new_timed_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period, AlarmType precision_type);
43+
TimedAction* register_new_timed_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period, AlarmType precision_type);
4344
void unregister_all_timed_actions();
4445
void register_all_timed_actions();
46+
void unregister_timed_action(TimedAction* timed_action);
47+
void erase_timed_action(TimedAction* timed_action);
4548
};
4649

4750
template<class TimeUnit>
48-
void State::register_new_timed_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period, AlarmType precision_type){
51+
TimedAction* State::register_new_timed_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period, AlarmType precision_type){
4952
TimedAction timed_action = {};
5053
timed_action.alarm_precision = precision_type;
5154
timed_action.action = action;
@@ -66,14 +69,15 @@ void State::register_new_timed_action(function<void()> action, chrono::duration<
6669
break;
6770
default:
6871
ErrorHandler("Alarm Precision Type does not exist, AlarmType: %d", precision_type);
69-
return;
7072
break;
7173
}
74+
timed_action.is_on = true;
7275
cyclic_actions.push_back(timed_action);
76+
return &cyclic_actions.back();
7377
}
7478

7579
template<class TimeUnit>
76-
void State::add_new_timed_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period, AlarmType precision_type){
80+
TimedAction* State::add_new_timed_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period, AlarmType precision_type){
7781
TimedAction timed_action = {};
7882
timed_action.alarm_precision = precision_type;
7983
timed_action.action = action;
@@ -91,10 +95,11 @@ void State::add_new_timed_action(function<void()> action, chrono::duration<int64
9195
break;
9296
default:
9397
ErrorHandler("Alarm Precision Type does not exist, AlarmType: %d", precision_type);
94-
return;
98+
return nullptr;
9599
break;
96100
}
97101
cyclic_actions.push_back(timed_action);
102+
return &cyclic_actions.back();
98103
}
99104

100105

@@ -115,19 +120,22 @@ class StateMachine {
115120
void add_transition(state_id old_state, state_id new_state, function<bool()> transition);
116121

117122
template<class TimeUnit>
118-
void add_low_precision_cyclic_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period);
123+
TimedAction* add_low_precision_cyclic_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period);
119124
template<class TimeUnit>
120-
void add_low_precision_cyclic_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period, state_id state);
125+
TimedAction* add_low_precision_cyclic_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period, state_id state);
121126

122127
template<class TimeUnit>
123-
void add_mid_precision_cyclic_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period);
128+
TimedAction* add_mid_precision_cyclic_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period);
124129
template<class TimeUnit>
125-
void add_mid_precision_cyclic_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period, state_id state);
130+
TimedAction* add_mid_precision_cyclic_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period, state_id state);
126131

127132
template<class TimeUnit>
128-
void add_high_precision_cyclic_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period);
133+
TimedAction* add_high_precision_cyclic_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period);
129134
template<class TimeUnit>
130-
void add_high_precision_cyclic_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period, state_id state);
135+
TimedAction* add_high_precision_cyclic_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period, state_id state);
136+
137+
void remove_cyclic_action(TimedAction* timed_action);
138+
void remove_cyclic_action(TimedAction* timed_action, state_id state);
131139

132140
void add_enter_action(function<void()> action);
133141
void add_enter_action(function<void()> action, state_id state);
@@ -148,72 +156,72 @@ class StateMachine {
148156
};
149157

150158
template<class TimeUnit>
151-
void StateMachine::add_low_precision_cyclic_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period, state_id state) {
159+
TimedAction* StateMachine::add_low_precision_cyclic_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period, state_id state) {
152160
if (not states.contains(state)) {
153161
ErrorHandler("The state %d is not added to the state machine", state);
154-
return;
162+
return nullptr;
155163
}
156164

157165
uint32_t microseconds = (uint32_t)chrono::duration_cast<chrono::microseconds>(period).count();
158166

159167
if(microseconds % 1000 != 0){
160168
ErrorHandler("Low precision cyclic action does not have enough resolution for the desired period, Desired period: %d uS", microseconds);
161-
return;
169+
return nullptr;
162170
}
171+
if(state == current_state && is_on) return states[state].register_new_timed_action(action, period, LOW_PRECISION);
172+
else return states[state].add_new_timed_action(action, period,LOW_PRECISION);
163173

164-
if(state == current_state && is_on) states[state].register_new_timed_action(action, period, LOW_PRECISION);
165-
else states[state].add_new_timed_action(action, period,LOW_PRECISION);
166174
}
167175

168176
template<class TimeUnit>
169-
void StateMachine::add_low_precision_cyclic_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period){
170-
add_low_precision_cyclic_action(action, period, current_state);
177+
TimedAction* StateMachine::add_low_precision_cyclic_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period){
178+
return add_low_precision_cyclic_action(action, period, current_state);
171179
}
172180

173181
template<class TimeUnit>
174-
void StateMachine::add_mid_precision_cyclic_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period, state_id state) {
182+
TimedAction* StateMachine::add_mid_precision_cyclic_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period, state_id state) {
175183
if (not states.contains(state)) {
176184
ErrorHandler("The state %d is not added to the state machine", state);
177-
return;
185+
return nullptr;
178186
}
179187

180188
uint32_t microseconds = (uint32_t)chrono::duration_cast<chrono::microseconds>(period).count();
181189

182190
if(microseconds % 50 != 0){
183191
ErrorHandler("Mid precision cyclic action does not have enough resolution for the desired period, Desired period: %d uS", microseconds);
184-
return;
192+
return nullptr;
185193
}
186194

187-
if(state == current_state && is_on) states[state].register_new_timed_action(action, period, MID_PRECISION);
188-
else states[state].add_new_timed_action(action, period,MID_PRECISION);
195+
if(state == current_state && is_on) return states[state].register_new_timed_action(action, period, MID_PRECISION);
196+
else return states[state].add_new_timed_action(action, period,MID_PRECISION);
189197
}
190198

191199
template<class TimeUnit>
192-
void StateMachine::add_mid_precision_cyclic_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period){
193-
add_mid_precision_cyclic_action(action, period, current_state);
200+
TimedAction* StateMachine::add_mid_precision_cyclic_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period){
201+
return add_mid_precision_cyclic_action(action, period, current_state);
194202
}
195203

196204
template<class TimeUnit>
197-
void StateMachine::add_high_precision_cyclic_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period, state_id state) {
205+
TimedAction* StateMachine::add_high_precision_cyclic_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period, state_id state) {
198206
if (not states.contains(state)) {
199207
ErrorHandler("The state %d is not added to the state machine", state);
200-
return;
208+
return nullptr;
201209
}
202210

203211
uint32_t microseconds = (uint32_t)chrono::duration_cast<chrono::microseconds>(period).count();
204212

205213
if(microseconds < 1){
206214
ErrorHandler("High precision cyclic action does not have enough resolution for the desired period, Desired period: %d uS", microseconds);
207-
return;
215+
return nullptr;
208216
}
209217

210-
if(state == current_state && is_on) states[state].register_new_timed_action(action, period, HIGH_PRECISION);
211-
else states[state].add_new_timed_action(action, period,HIGH_PRECISION);
218+
if(state == current_state && is_on) return states[state].register_new_timed_action(action, period, HIGH_PRECISION);
219+
else return states[state].add_new_timed_action(action, period,HIGH_PRECISION);
212220
}
213221

214222
template<class TimeUnit>
215-
void StateMachine::add_high_precision_cyclic_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period){
216-
add_high_precision_cyclic_action(action, period, current_state);
223+
TimedAction* StateMachine::add_high_precision_cyclic_action(function<void()> action, chrono::duration<int64_t, TimeUnit> period){
224+
return add_high_precision_cyclic_action(action, period, current_state);
217225
}
218226

219227
#endif

LWIP/App/lwip.c

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -59,20 +59,6 @@ uint8_t GATEWAY_ADDRESS[4];
5959
*/
6060
void MX_LWIP_Init(void)
6161
{
62-
/* IP addresses initialization */
63-
IP_ADDRESS[0] = 192;
64-
IP_ADDRESS[1] = 168;
65-
IP_ADDRESS[2] = 1;
66-
IP_ADDRESS[3] = 4;
67-
NETMASK_ADDRESS[0] = 255;
68-
NETMASK_ADDRESS[1] = 255;
69-
NETMASK_ADDRESS[2] = 0;
70-
NETMASK_ADDRESS[3] = 0;
71-
GATEWAY_ADDRESS[0] = 192;
72-
GATEWAY_ADDRESS[1] = 168;
73-
GATEWAY_ADDRESS[2] = 1;
74-
GATEWAY_ADDRESS[3] = 1;
75-
7662
/* USER CODE BEGIN IP_ADDRESSES */
7763
/* USER CODE END IP_ADDRESSES */
7864

0 commit comments

Comments
 (0)