Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(stacker): create project #450

Merged
merged 9 commits into from
Jul 22, 2024
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
97 changes: 97 additions & 0 deletions .github/workflows/stacker.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
name: 'Tempdeck Gen3 build/test'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
name: 'Tempdeck Gen3 build/test'
name: 'stacker build/test'

on:
pull_request:
paths:
- 'stm32-modules/stacker/**/*'
- 'stm32-modules/common/**/*'
- 'stm32-modules/include/common/**/*'
- 'stm32-modules/include/stacker/**/*'
- 'cmake/**/*'
- 'CMakeLists.txt'
- 'stm32-modules/CMakeLists.txt'
- 'CMakePresets.json'
- '.clang-format'
- '.clang-tidy'
- 'cpp-utils/**/*'
paths_ignore:
- 'cmake/Arduino*'
push:
paths:
- 'stm32-modules/stacker/**/*'
- 'stm32-modules/common/**/*'
- 'stm32-modules/include/common/**/*'
- 'stm32-modules/include/stacker/**/*'
- 'cmake/**/*'
- 'CMakeLists.txt'
- 'stm32-modules/CMakeLists.txt'
- 'CMakePresets.json'
- '.clang-format'
- '.clang-tidy'
- '.github/workflows/stacker.yaml'
paths_ignore:
- 'cmake/Arduino*'
branches:
- '*'
tags:
- 'stacker@*'
workflow_dispatch:


defaults:
run:
shell: bash


jobs:
cross-compile-check:
name: 'Cross-Compile/Check'
runs-on: 'ubuntu-20.04'
timeout-minutes: 10
steps:
- uses: 'actions/checkout@v2'
with:
fetch-depth: 0
- uses: 'actions/cache@v2'
with:
key: stm32-cross-${{ secrets.MODULES_STM32_CACHE_VERSION }}-${{ hashFiles('cmake/*') }}
restore-keys: stm32-cross-${{ secrets.MODULES_STM32_CACHE_VERSION }}-
path: './stm32-tools'
- name: 'Configure'
run: cmake --preset=stm32-cross .
- name: 'Format'
run: cmake --build --preset cross --target stacker-format-ci
- name: 'Lint'
run: cmake --build --preset cross --target stacker-lint
- name: 'Build startup app'
run: cmake --build --preset cross --target stacker-startup
- name: 'Build'
run: cmake --build --preset cross --target stacker-hex
- name: 'Build full image'
run: cmake --build --preset cross --target stacker-image-hex
- name: 'Build full image binary'
run: cmake --build --preset cross --target stacker-image-bin
host-compile-test:
name: 'Host-Compile/Test'
runs-on: 'ubuntu-20.04'
timeout-minutes: 10
env:
CC: gcc-10
CXX: g++-10
steps:
- run: |
sudo apt update
sudo apt install gcc-10 g++-10
- uses: 'actions/checkout@v2'
with:
fetch-depth: 0
- uses: 'actions/cache@v2'
with:
path: './stm32-tools'
key: stm32-host-${{ secrets.MODULES_STM32_CACHE_VERSION }}-${{ hashFiles('cmake/*') }}
restore-keys: stm32-host-${{ secrets.MODULES_STM32_CACHE_VERSION }}-
- name: 'Configure'
run: cmake --preset=stm32-host .
- name: 'Build Simulator'
run: cmake --build --preset host --target stacker-simulator
- name: 'Build and Test'
run: cmake --build --preset stacker-build-and-test
54 changes: 46 additions & 8 deletions CMakePresets.json
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,8 @@
"targets": [
"thermocycler-gen2",
"heater-shaker",
"tempdeck-gen3"
"tempdeck-gen3",
"stacker"
]
},
{
Expand All @@ -90,7 +91,8 @@
"targets": [
"thermocycler-gen2-build-and-test",
"heater-shaker-build-and-test",
"tempdeck-gen3-build-and-test"
"tempdeck-gen3-build-and-test",
"stacker-build-and-test"
]
},
{
Expand Down Expand Up @@ -152,6 +154,26 @@
"tempdeck-gen3-debug"
]
},
{
"name": "stacker-binary",
"displayName": "stacker binary",
"description": "Build the stacker cross binary",
"configurePreset": "stm32-cross",
"jobs": 4,
"targets": [
"stacker"
]
},
{
"name": "stacker-debug",
"displayName": "stacker debug",
"description": "Build the stacker cross debug",
"configurePreset": "stm32-cross",
"jobs": 4,
"targets": [
"stacker-debug"
]
},
{
"name": "lint",
"displayName": "lint all",
Expand All @@ -162,7 +184,8 @@
"heater-shaker-lint",
"common-lint",
"thermocycler-gen2-lint",
"tempdeck-gen3-lint"
"tempdeck-gen3-lint",
"stacker-lint"
]
},
{
Expand All @@ -175,7 +198,8 @@
"heater-shaker-format",
"common-format",
"thermocycler-gen2-format",
"tempdeck-gen3-format"
"tempdeck-gen3-format",
"stacker-format"
]
},
{
Expand All @@ -188,7 +212,8 @@
"heater-shaker-format",
"common-format",
"thermocycler-gen2-format",
"tempdeck-gen3-format"
"tempdeck-gen3-format",
"stacker-format"
]
},
{
Expand All @@ -200,7 +225,8 @@
"targets": [
"heater-shaker-simulator",
"thermocycler-gen2-simulator",
"tempdeck-gen3-simulator"
"tempdeck-gen3-simulator",
"stacker-simulator"
]
},
{
Expand All @@ -212,7 +238,8 @@
"targets": [
"heater-shaker-simulator",
"thermocycler-gen2-simulator",
"tempdeck-gen3-simulator"
"tempdeck-gen3-simulator",
"stacker-simulator"
]
},
{
Expand All @@ -225,7 +252,8 @@
"heater-shaker-build-and-test",
"common-build-and-test",
"thermocycler-gen2-build-and-test",
"tempdeck-gen3-build-and-test"
"tempdeck-gen3-build-and-test",
"stacker-build-and-test"
]
},
{
Expand Down Expand Up @@ -258,6 +286,16 @@
"tempdeck-gen3-build-and-test"
]
},
{
"name": "stacker-tests",
"displayName": "tests",
"description": "Runs build-and-test target for stacker",
"configurePreset": "stm32-host",
"jobs": 4,
"targets": [
"stacker-build-and-test"
]
},
{
"name": "common-tests",
"displayName": "tests",
Expand Down
1 change: 1 addition & 0 deletions stm32-modules/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -36,5 +36,6 @@ add_subdirectory(common)
add_subdirectory(heater-shaker)
add_subdirectory(thermocycler-gen2)
add_subdirectory(tempdeck-gen3)
add_subdirectory(stacker)

coverage_evaluate()
73 changes: 73 additions & 0 deletions stm32-modules/include/stacker/firmware/usb_hardware.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
/**
* @file usb_hardware.h
* @brief Header with forward definitions of functions
* for firmware-specific USB control code.
*/

#ifndef _USB_HARDWARE_C_
#define _USB_HARDWARE_C_

#ifdef __cplusplus
extern "C" {
#endif // __cplusplus

#include <stdint.h>

/**
* @brief Function pointer type to be invoked when a new
* packet is received.
* @details
* - First parameter contains a pointer to the buffer of
* data returned
* - Second parameter contains the length of the data
* returned
* - The return value should be a pointer to the buffer
* where the next packet of RX data shall be stored
*/
typedef uint8_t *(*usb_rx_callback_t)(uint8_t *, uint32_t *);

/**
* @brief Function pointer used for specifying callback
* for CDC initialization
* @details
* - Should return a pointer to a buffer to store RX packets
*/
typedef uint8_t *(*usb_cdc_init_callback_t)();

/**
* @brief Function pointer used for specifying callback
* for CDC deinitialization
*/
typedef void (*usb_cdc_deinit_callback_t)();

/**
* @brief Initializes the USB hardware on the system. Provides function
* pointers to the C code that will be invoked upon certain USB CDC events.
* @param[in] rx_cb The function to call when a USB packet arrives
* @param[in] cdc_init_cb Function to call when initializing CDC
* @param[in] cdc_deinit_cb Function to call when deinitializing CDC
*/
void usb_hw_init(usb_rx_callback_t rx_cb, usb_cdc_init_callback_t cdc_init_cb,
usb_cdc_deinit_callback_t cdc_deinit_cb);

/**
* @brief Starts USB CDC on the system
*/
void usb_hw_start();

/**
* @brief Stop USB
*/
void usb_hw_stop();

/**
* @brief Send a packet over USB CDC
* @param[in] buf The buffer to send
* @param[in] len The length of the buffer to be sent
*/
void usb_hw_send(uint8_t *buf, uint16_t len);

#ifdef __cplusplus
} // extern "C"
#endif // __cplusplus
#endif /* _USB_HARDWARE_C_ */
27 changes: 27 additions & 0 deletions stm32-modules/include/stacker/stacker/errors.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#pragma once
#include <charconv>
#include <cstdint>

#include "core/utility.hpp"

namespace errors {

enum class ErrorCode {
// 0xx - General && comms
NO_ERROR = 0,
USB_TX_OVERRUN = 1,
INTERNAL_QUEUE_FULL = 2,
UNHANDLED_GCODE = 3,
GCODE_CACHE_FULL = 4,
BAD_MESSAGE_ACKNOWLEDGEMENT = 5,
};

auto errorstring(ErrorCode code) -> const char*;

template <typename Input, typename Limit>
requires std::forward_iterator<Input> && std::sized_sentinel_for<Limit, Input>
constexpr auto write_into(Input start, Limit end, ErrorCode code) -> Input {
const char* str = errorstring(code);
return write_string_to_iterpair(start, end, str);
}
}; // namespace errors
37 changes: 37 additions & 0 deletions stm32-modules/stacker/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#FLEX Stacker

# This variable defines the name of the target for this subfolder.
set(TARGET_MODULE_NAME "stacker")

add_subdirectory(src)

if (${CMAKE_CROSSCOMPILING})
add_subdirectory(firmware)
else()
add_subdirectory(tests)
add_subdirectory(simulator)
endif()

file(GLOB_RECURSE ${TARGET_MODULE_NAME}_SOURCES_FOR_FORMAT
./*.cpp ./*.hpp ./*.h
../include/${TARGET_MODULE_NAME}/*.hpp ../include/${TARGET_MODULE_NAME}/*.h)
list(FILTER ${TARGET_MODULE_NAME}_SOURCES_FOR_FORMAT EXCLUDE REGEX ".*MCSDK.*")

# Targets for formatting. These are here rather than in individual target CMakeLists (e.g.
# the ones in tests/ or firmware/) because they don't have semantic reasoning involved and
# can therefore operate on file globs, unlike lint/static analysis

# Target for use during dev - edits files
add_custom_target(
${TARGET_MODULE_NAME}-format
ALL
COMMENT "Formatting code"
COMMAND ${Clang_CLANGFORMAT_EXECUTABLE} -style=file -i ${${TARGET_MODULE_NAME}_SOURCES_FOR_FORMAT}
)

# Target for use in ci - warnings are errors, doesn't edit files
add_custom_target(
${TARGET_MODULE_NAME}-format-ci
COMMENT "Checking format"
COMMAND ${Clang_CLANGFORMAT_EXECUTABLE} -style=file -Werror --ferror-limit=0 -n ${${TARGET_MODULE_NAME}_SOURCES_FOR_FORMAT}
)
Loading
Loading