diff --git a/CMakeLists.txt b/CMakeLists.txt index f63cb1ca..354cbc73 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -103,7 +103,7 @@ target_compile_options(${EXECUTABLE} PRIVATE $<$:-w> $<$:-Wall> - $<$:-Wpedantic> + # $<$:-Wpedantic> $<$:-Werror> $<$:-fno-use-cxa-atexit> $<$:-fno-rtti> diff --git a/Core/Inc/Code_generation/JSON_ADE b/Core/Inc/Code_generation/JSON_ADE index 76d1b303..ee857f81 160000 --- a/Core/Inc/Code_generation/JSON_ADE +++ b/Core/Inc/Code_generation/JSON_ADE @@ -1 +1 @@ -Subproject commit 76d1b30360d881a6af4ef9dbf307f418980c9594 +Subproject commit ee857f81e0aef674a19f8fc5db4a2d3c28a75a51 diff --git a/Core/Inc/Code_generation/Packet_generation/DataTemplate.hpp b/Core/Inc/Code_generation/Packet_generation/DataTemplate.hpp index 0d7c81e9..33e3fbc8 100644 --- a/Core/Inc/Code_generation/Packet_generation/DataTemplate.hpp +++ b/Core/Inc/Code_generation/Packet_generation/DataTemplate.hpp @@ -3,43 +3,62 @@ //Data packets for {{board}} -AUTOGENERATED CODE, DO NOT MODIFY- class DataPackets{ - public: - {% for enum in enums %}enum class {{enum.name}}:uint8_t +public: + {% for enum in enums -%} + enum class {{enum.name}} : uint8_t { - {% for value in enum["values"] %}{{value}}={{loop.index0}}{%if not loop.last%},{%endif%} - {% endfor %}}; - - {%endfor %} - - private: - inline static uint32_t id{0}; - public: - {%for packet in packets%}static inline HeapPacket* {{packet.name}}{}; - {% endfor %} - - {% for socket in sockets %}static inline {{socket.type}}* {{socket.name}} = nullptr; - {% endfor %} - - DataPackets({%for value in data %}{{value.type}} &{{value.name}}{%if not loop.last%},{%endif%}{%endfor%}) -{ - {% for socket in ServerSockets%}{{socket.name}} = new ServerSocket("{{socket.board_ip}}",{{socket.port}}); + {%- for value in enum["values"] %} + {{value}} = {{loop.index0}}, + {%- endfor %} + }; {% endfor %} - {% for socket in DatagramSockets%}{{socket.name}} = new DatagramSocket("{{socket.board_ip}}",{{socket.port}},"{{socket.remote_ip}}",{{socket.port}}); + + {% for packet in packets -%} + static void {{packet.name}}_init({% for variable in packet.variables %}{{variable.type}} &{{variable.name}}{% if not loop.last %}, {% endif %}{% endfor %}) + { + {{packet.name}} = new HeapPacket(static_cast({{packet.id}}){% if packet.variables %}, {% for variable in packet.variables %}&{{variable.name}}{% if not loop.last %}, {% endif %}{% endfor %}{% endif %}); + } + + {% endfor -%} + +public: + {%for packet in packets -%} + inline static HeapPacket *{{packet.name}}{nullptr}; {% endfor %} - {% for socket in Sockets%}{{socket.name}} = new Socket("{{socket.board_ip}}",{{socket.local_port}},"{{socket.remote_ip}}",{{socket.remote_port}}); + {% for socket in sockets -%} + inline static {{socket.type}} *{{socket.name}}{nullptr}; {% endfor %} - {% for packet in packets %}{{packet.name}} = new HeapPacket(static_cast({{packet.id}}){% if packet.data%},{{packet.data}}{% endif%}); + + static void start() + { + {% for packet in packets -%} + if ({{packet.name}} == nullptr) { + ErrorHandler("Packet {{packet.name}} not initialized"); + } + {% endfor %} - {% endfor %} - {%for packet in sending_packets %}Scheduler::register_task({% if packet.period_type == "ms" %}{{(packet.period*1000)}}{% else %}{{packet.period}}{% endif %},+[](){ - {% if packet.name is string %} DataPackets::{{packet.socket}}->send_packet(*DataPackets::{{packet.name}}); - {%else%} - {%for name in packet.name%}DataPackets::{{packet.socket}}->send_packet(*{{name}}); - {%endfor%} - {% endif %} - }); - {%endfor%} + {% for socket in ServerSockets -%} + {{socket.name}} = new ServerSocket("{{socket.board_ip}}",{{socket.port}}); + {%- endfor %} + {% for socket in DatagramSockets -%} + {{socket.name}} = new DatagramSocket("{{socket.board_ip}}",{{socket.port}},"{{socket.remote_ip}}",{{socket.port}}); + {% endfor %} + {% for socket in Sockets -%} + {{socket.name}} = new Socket("{{socket.board_ip}}",{{socket.local_port}},"{{socket.remote_ip}}",{{socket.remote_port}}); + {% endfor %} + + {%- for packet in sending_packets %} + Scheduler::register_task({% if packet.period_type == "ms" %}{{ (packet.period*1000)|round|int }}{% else %}{{ packet.period|round|int }}{% endif %}, +[](){ + {% if packet.name is string -%} + DataPackets::{{packet.socket}}->send_packet(*DataPackets::{{packet.name}}); + {% else %} + {% for name in packet.name -%} + DataPackets::{{packet.socket}}->send_packet(*DataPackets::{{name}}); + {% endfor -%} + {%- endif %} + }); {%- endfor %} + } -} -}; \ No newline at end of file + +}; diff --git a/Core/Inc/Code_generation/Packet_generation/OrderTemplate.hpp b/Core/Inc/Code_generation/Packet_generation/OrderTemplate.hpp index dc894260..b947baa2 100644 --- a/Core/Inc/Code_generation/Packet_generation/OrderTemplate.hpp +++ b/Core/Inc/Code_generation/Packet_generation/OrderTemplate.hpp @@ -1,30 +1,43 @@ #pragma once #include "ST-LIB.hpp" -//Order packets for {{board}} -AUTOGENERATED CODE, DO NOT MODIFY- +/*Order packets for {{board}} +-AUTOGENERATED CODE, DO NOT MODIFY- */ + -{%for packet in packets%}extern void {{packet.name}}_cb(); -{% endfor %} class OrderPackets{ - {% for enum in enums %}enum class {{enum.name}}:uint8_t +public: + {% for enum in enums -%} + enum class {{enum.name}} : uint8_t { - {% for value in enum["values"] %}{{value}}={{loop.index0}}{%if not loop.last%},{%endif%} - {% endfor %}}; + {%- for value in enum["values"] %} + {{value}} = {{loop.index0}}, + {%- endfor %} + }; + {% endfor %} + {% for packet in packets -%} + inline static bool {{packet.name}}_flag{false}; {% endfor %} - + OrderPackets() = default; - private: - uint32_t id{0}; - public: - {%for packet in packets%}HeapOrder* {{packet.name}}; - {% endfor %} - - OrderPackets({%for value in data %}{{value.type}} &{{value.name}}{%if not loop.last%},{%endif%}{%endfor%}) -{ + {% for packet in packets -%} + inline static HeapOrder *{{packet.name}}{nullptr}; + {% endfor %} + + {% for packet in packets -%} + static void {{packet.name}}_init({% for variable in packet.variables %}{{variable.type}} &{{variable.name}}{% if not loop.last %}, {% endif %}{% endfor %}) + { + {{packet.name}} = new HeapOrder({{packet.id}}, &{{packet.name}}_cb{% if packet.variables %}, {% for variable in packet.variables %}&{{variable.name}}{% if not loop.last %}, {% endif %}{% endfor %}{% endif %}); + } + {% endfor %} - {% for packet in packets %}{{packet.name}}=new HeapOrder({{packet.id}},&{{packet.name}}_cb{% if packet.data%},{{packet.data}}{% endif%}); +private: + {% for packet in packets -%} + static void {{packet.name}}_cb() + { + {{packet.name}}_flag = true; + } {% endfor %} -} }; \ No newline at end of file diff --git a/Core/Inc/Code_generation/Packet_generation/Packet_descriptions.py b/Core/Inc/Code_generation/Packet_generation/Packet_descriptions.py index f0f43eb7..8001e45f 100644 --- a/Core/Inc/Code_generation/Packet_generation/Packet_descriptions.py +++ b/Core/Inc/Code_generation/Packet_generation/Packet_descriptions.py @@ -157,4 +157,6 @@ def _unsigned_int_correction(type:str): type += "_t" elif type == "float32": type = "float" + elif type == "float64": + type = "double" return type \ No newline at end of file diff --git a/Core/Inc/Code_generation/Packet_generation/Packet_generation.py b/Core/Inc/Code_generation/Packet_generation/Packet_generation.py index a4ad083b..bc4a8211 100644 --- a/Core/Inc/Code_generation/Packet_generation/Packet_generation.py +++ b/Core/Inc/Code_generation/Packet_generation/Packet_generation.py @@ -53,11 +53,20 @@ def GenerateDataPackets(board:BoardDescription): tempdata = tempdata[:-1] if tempdata_but_pointer.endswith(","): tempdata_but_pointer = tempdata_but_pointer[:-1] - aux_packet = {"name": packet_instance.name, "data":tempdata_but_pointer.replace(" ", "_").replace("-", "_") , "id": packet_instance.id} + + packet_variables = [] + for measurement in packet_instance.measurements: + packet_variables.append({ + "name": measurement.id.replace(" ", "_").replace("-", "_"), + "type": measurement.type + }) + + aux_packet = {"name": packet_instance.name, "data":tempdata_but_pointer.replace(" ", "_").replace("-", "_") , "id": packet_instance.id, "variables": packet_variables} Packets.append(aux_packet) for measurement in packet_instance.measurements: aux_data = {"type": measurement.type, "name": measurement.id.replace(" ", "_").replace("-", "_")} - totaldata.append(aux_data) + if not any(x["name"] == aux_data["name"] for x in totaldata): + totaldata.append(aux_data) return Packets,totaldata @@ -120,11 +129,19 @@ def GenerateOrderPackets(board:BoardDescription): if tempdata.endswith(","): tempdata = tempdata[:-1] tempdata_but_pointer = tempdata_but_pointer[:-1] - aux_packet = {"name": packet_instance.name, "data":tempdata_but_pointer , "id": packet_instance.id} + + packet_variables = [] + for measurement in packet_instance.measurements: + packet_variables.append({ + "name": measurement.id.replace(" ", "_").replace("-", "_"), + "type": measurement.type + }) + + aux_packet = {"name": packet_instance.name, "data":tempdata_but_pointer , "id": packet_instance.id, "variables": packet_variables} Packets.append(aux_packet) for measurement in packet_instance.measurements: aux_data = {"type": measurement.type, "name": measurement.id} - if aux_data not in totaldata: + if not any(x["name"] == aux_data["name"] for x in totaldata): totaldata.append(aux_data) return Packets,totaldata diff --git a/Core/Inc/Communications/Packets/.gitignore b/Core/Inc/Communications/Packets/.gitignore deleted file mode 100644 index e69de29b..00000000 diff --git a/Core/Inc/Communications/Packets/.gitkeep b/Core/Inc/Communications/Packets/.gitkeep new file mode 100644 index 00000000..d3f5a12f --- /dev/null +++ b/Core/Inc/Communications/Packets/.gitkeep @@ -0,0 +1 @@ + diff --git a/Core/Inc/stm32h7xx_it.h b/Core/Inc/stm32h7xx_it.h index 56a5e3be..33fe732e 100644 --- a/Core/Inc/stm32h7xx_it.h +++ b/Core/Inc/stm32h7xx_it.h @@ -68,12 +68,8 @@ void DMA2_Stream0_IRQHandler(void); void DMA2_Stream1_IRQHandler(void); void DMA2_Stream2_IRQHandler(void); void FMAC_IRQHandler(void); -void TIM2_IRQHandler(void); void I2C2_EV_IRQHandler(void); -void TIM8_TRG_COM_TIM14_IRQHandler(void); -void TIM5_IRQHandler(void); void SPI3_IRQHandler(void); -void TIM7_IRQHandler(void); void ETH_IRQHandler(void); void LPTIM1_IRQHandler(void); void LPTIM2_IRQHandler(void); diff --git a/Core/Src/Runes/generated_metadata.cpp b/Core/Src/Runes/generated_metadata.cpp index dc82fcfa..6789b95b 100644 --- a/Core/Src/Runes/generated_metadata.cpp +++ b/Core/Src/Runes/generated_metadata.cpp @@ -5,11 +5,11 @@ extern "C"{ const char DESCRIPTION[255] __attribute__((section(".metadata_pool")))= "****************" // placeholder for beggining - "20260123T210152" // DateTime using ISO-8601 format + "20260202T130943" // DateTime using ISO-8601 format " " // alignment - "332e04d7" // STLIB commit + "20be5ece" // STLIB commit "--------" // ADJ commit - "01cca436" // Board commit + "c7c9b795" // Board commit // the '=' is used for unparsing ; } \ No newline at end of file diff --git a/deps/ST-LIB b/deps/ST-LIB index e2a56178..80d9efef 160000 --- a/deps/ST-LIB +++ b/deps/ST-LIB @@ -1 +1 @@ -Subproject commit e2a56178a9ed2cebb53a4840e00f862e5b9e3935 +Subproject commit 80d9efef0634408b10695db836da861a702bcde2