Skip to content

Commit 8ca3cf4

Browse files
authored
Merge pull request #19 from Serial-IO/upgrade/cpp-core-v2-linux
Implement serial communication functions and refactor existing code
2 parents 49e2405 + 90991cb commit 8ca3cf4

96 files changed

Lines changed: 3110 additions & 653 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.github/workflows/build_binary.yml‎

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ jobs:
2727
- name: 'Setup GCC'
2828
uses: egor-tensin/setup-gcc@v2
2929
with:
30-
version: '14'
30+
version: '16'
3131
platform: 'x64'
3232

3333
- name: 'Setup CMake'
@@ -36,11 +36,10 @@ jobs:
3636
cmake-version: '3.31.x'
3737

3838
- name: 'Configure CMake'
39-
env:
40-
CXX: g++
41-
4239
run: |
43-
cmake --preset linux-gcc-release
40+
cmake --preset linux-gcc-release \
41+
-DCMAKE_C_COMPILER=gcc-16 \
42+
-DCMAKE_CXX_COMPILER=g++-16
4443
4544
- name: 'Build'
4645
run: |
@@ -91,7 +90,7 @@ jobs:
9190
needs: ['build-binary']
9291
uses: './.github/workflows/test_unit_cpp.yml'
9392
with:
94-
artifact-name: cpp_bindings_linux_tests
93+
artifact-name: libcpp_bindings_linux
9594

9695
permissions:
9796
contents: read

‎.github/workflows/code_coverage_cpp.yml‎

Lines changed: 0 additions & 88 deletions
This file was deleted.
Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,23 +14,32 @@ jobs:
1414
matrix:
1515
deno: ["2.6.0", "2.5.0"]
1616

17-
container:
18-
image: denoland/deno:${{ matrix.deno }}
19-
2017
steps:
2118
- name: Checkout repository
2219
uses: actions/checkout@v4
2320

21+
- name: Setup Deno
22+
uses: denoland/setup-deno@v2
23+
with:
24+
deno-version: v${{ matrix.deno }}
25+
26+
- name: Setup GCC
27+
uses: egor-tensin/setup-gcc@v2
28+
with:
29+
version: '16'
30+
platform: 'x64'
31+
2432
- name: Install build dependencies
2533
run: |
26-
apt-get update
27-
apt-get install -y cmake ninja-build g++ socat git
34+
sudo apt-get update
35+
sudo apt-get install -y cmake ninja-build socat git
2836
2937
- name: Configure CMake
30-
env:
31-
CXX: g++
3238
run: |
33-
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
39+
cmake -S . -B build -G Ninja \
40+
-DCMAKE_BUILD_TYPE=Release \
41+
-DCMAKE_C_COMPILER=gcc-16 \
42+
-DCMAKE_CXX_COMPILER=g++-16
3443
3544
- name: Build
3645
run: |
@@ -49,5 +58,3 @@ jobs:
4958
SERIAL_TEST_PORT: /tmp/ttyCI_A
5059
run: |
5160
deno task test
52-
53-

‎.github/workflows/test_unit_cpp.yml‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,13 @@ jobs:
2626
- name: 'Download artifact'
2727
uses: actions/download-artifact@v4
2828
with:
29-
name: ${{ github.event.inputs.artifact-name }}
29+
name: ${{ inputs.artifact-name }}
3030
path: 'artifacts'
3131

3232
- name: 'Setup GCC'
3333
uses: egor-tensin/setup-gcc@v2
3434
with:
35-
version: '14'
35+
version: '16'
3636
platform: 'x64'
3737

3838
- name: 'Setup CMake'
@@ -42,7 +42,9 @@ jobs:
4242

4343
- name: 'Configure CMake'
4444
run: |
45-
cmake --preset linux-gcc-release
45+
cmake --preset linux-gcc-release \
46+
-DCMAKE_C_COMPILER=gcc-16 \
47+
-DCMAKE_CXX_COMPILER=g++-16
4648
4749
- name: 'Build'
4850
id: 'build'
@@ -92,5 +94,3 @@ jobs:
9294
transformers: '[{"searchValue": "${{ github.workspace }}", "replaceValue": ""}]'
9395
check_title_template: '{{FILE_NAME}} | {{TEST_NAME}}'
9496

95-
96-

‎CMakeLists.txt‎

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
cmake_minimum_required(VERSION 3.30)
22

3-
# Export compile commands to root directory
43
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
54

65
include(cmake/CPM.cmake)
@@ -11,9 +10,7 @@ CPMAddPackage(
1110
GIT_TAG v1.1.0
1211
)
1312

14-
# Include cmake-git-versioning module
1513
include(${cmake_git_versioning_SOURCE_DIR}/cmake/cmake-git-versioning.cmake)
16-
1714
get_git_version_info()
1815

1916
project(
@@ -23,29 +20,27 @@ project(
2320
LANGUAGES CXX
2421
)
2522

23+
include(CTest)
24+
2625
file(WRITE "${CMAKE_BINARY_DIR}/env.sh" "PACKAGE_VERSION=${GIT_DESCRIBE_NO_V}")
26+
generate_git_version(
27+
OUTPUT_DIR ${CMAKE_BINARY_DIR}/generated
28+
OUTPUT_FILE version.hpp
29+
)
2730

28-
# Set C++ standard
29-
set(CMAKE_CXX_STANDARD 23)
31+
set(CMAKE_CXX_STANDARD 26)
3032
set(CMAKE_CXX_STANDARD_REQUIRED ON)
3133
set(CMAKE_CXX_EXTENSIONS OFF)
32-
33-
# Enable C++23 module support
34-
set(CMAKE_CXX_MODULE_STD 23)
34+
set(CMAKE_CXX_MODULE_STD 26)
3535
set(CMAKE_CXX_MODULE_EXTENSIONS OFF)
3636

3737
CPMAddPackage(
3838
NAME cpp_core
3939
GITHUB_REPOSITORY Serial-IO/cpp-core
40-
GIT_TAG main
40+
GIT_TAG v2.0.0
4141
OPTIONS
4242
"CMAKE_EXPORT_COMPILE_COMMANDS OFF"
43-
)
44-
45-
# Generate version information
46-
generate_git_version(
47-
OUTPUT_DIR ${CMAKE_BINARY_DIR}/generated
48-
OUTPUT_FILE version.hpp
43+
"CPP_CORE_ENABLE_AST_EXPORT ON"
4944
)
5045

5146
CPMAddPackage(
@@ -57,7 +52,6 @@ CPMAddPackage(
5752
"gtest_force_shared_crt ON"
5853
)
5954

60-
# Library sources: src/*.cpp only, exclude *.test.cpp and test_helpers/
6155
file(GLOB_RECURSE LIB_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")
6256
list(FILTER LIB_SOURCES EXCLUDE REGEX ".*\\.test\\.cpp$")
6357
list(FILTER LIB_SOURCES EXCLUDE REGEX ".*/test_helpers/.*")
@@ -86,9 +80,8 @@ target_link_libraries(
8680
cpp_core::cpp_core
8781
)
8882

89-
target_compile_features(cpp_bindings_linux PUBLIC cxx_std_23)
83+
target_compile_features(cpp_bindings_linux PUBLIC cxx_std_26)
9084

91-
# Test sources: src/*.test.cpp, tests/*.test.cpp, src/test_helpers/*.cpp (helpers excluded from lib)
9285
file(GLOB SRC_UNIT_TESTS "${CMAKE_CURRENT_SOURCE_DIR}/src/*.test.cpp")
9386
file(GLOB TESTS_INTEGRATION "${CMAKE_CURRENT_SOURCE_DIR}/tests/*.test.cpp")
9487
file(GLOB TEST_HELPER_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/test_helpers/*.cpp")
@@ -114,7 +107,10 @@ if(TEST_SOURCES)
114107
GTest::gmock
115108
)
116109

117-
target_compile_features(cpp_bindings_linux_tests PRIVATE cxx_std_23)
110+
target_compile_features(cpp_bindings_linux_tests PRIVATE cxx_std_26)
111+
112+
include(GoogleTest)
113+
gtest_discover_tests(cpp_bindings_linux_tests)
118114
endif()
119115

120116
include(GNUInstallDirs)
@@ -133,7 +129,6 @@ install(
133129
FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp"
134130
)
135131

136-
# Copy generated version header
137132
install(
138133
FILES ${CMAKE_BINARY_DIR}/generated/version.hpp
139134
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}

‎jsr/scripts/binary_to_json.sh‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,15 @@ BINARY_FILE_NAME=$(basename "$BINARY_FILE_PATH")
1919

2020
mkdir -p "$(dirname "$JSON_FILE_PATH")"
2121

22-
BASE64_DATA=$(base64 "$BINARY_FILE_PATH" | tr -d '\n')
22+
BASE64_TMP=$(mktemp)
23+
trap 'rm -f "$BASE64_TMP"' EXIT
24+
25+
base64 "$BINARY_FILE_PATH" | tr -d '\n' > "$BASE64_TMP"
2326

2427
jq -n \
2528
--arg target "$TARGET" \
2629
--arg filename "$BINARY_FILE_NAME" \
27-
--arg data "$BASE64_DATA" \
30+
--rawfile data "$BASE64_TMP" \
2831
'{
2932
target: $target,
3033
filename: $filename,
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#pragma once
2+
3+
#include "ensure_handle_state.hpp"
4+
#include "validate_file_descriptor.hpp"
5+
6+
namespace cpp_bindings_linux::detail
7+
{
8+
template <typename ReturnType>
9+
inline auto acquireHandleContext(int64_t handle, ErrorCallbackT error_callback, HandleContext *out_handle_context)
10+
-> ReturnType
11+
{
12+
int file_descriptor = -1;
13+
const auto validation_status = validatePosixFileDescriptor<ReturnType>(handle, error_callback, &file_descriptor);
14+
if (validation_status < 0)
15+
{
16+
return validation_status;
17+
}
18+
19+
out_handle_context->file_descriptor = file_descriptor;
20+
out_handle_context->state = ensureHandleState(file_descriptor);
21+
return static_cast<ReturnType>(StatusCode::kSuccess);
22+
}
23+
} // namespace cpp_bindings_linux::detail

‎src/detail/apply_baudrate.hpp‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#pragma once
2+
3+
#include "termios2.hpp"
4+
5+
#include <termios.h>
6+
7+
namespace cpp_bindings_linux::detail
8+
{
9+
inline auto applyBaudrate(termios2 *serial_settings, int baudrate) -> void
10+
{
11+
serial_settings->c_cflag &= ~CBAUD;
12+
serial_settings->c_cflag |= BOTHER;
13+
serial_settings->c_ispeed = static_cast<speed_t>(baudrate);
14+
serial_settings->c_ospeed = static_cast<speed_t>(baudrate);
15+
}
16+
} // namespace cpp_bindings_linux::detail

‎src/detail/apply_data_bits.hpp‎

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#pragma once
2+
3+
#include "termios2.hpp"
4+
5+
#include <termios.h>
6+
7+
namespace cpp_bindings_linux::detail
8+
{
9+
inline auto applyDataBits(termios2 *serial_settings, int data_bits) -> void
10+
{
11+
serial_settings->c_cflag &= ~CSIZE;
12+
switch (data_bits)
13+
{
14+
case 5:
15+
serial_settings->c_cflag |= CS5;
16+
break;
17+
case 6:
18+
serial_settings->c_cflag |= CS6;
19+
break;
20+
case 7:
21+
serial_settings->c_cflag |= CS7;
22+
break;
23+
case 8:
24+
default:
25+
serial_settings->c_cflag |= CS8;
26+
break;
27+
}
28+
}
29+
} // namespace cpp_bindings_linux::detail

0 commit comments

Comments
 (0)