Skip to content

Commit 8136da7

Browse files
committed
refactor(VirtIO): move VirtIOSerial as a built-in library
Including OpenAMP. Signed-off-by: Frederic Pillon <[email protected]>
1 parent 376232d commit 8136da7

Some content is hidden

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

47 files changed

+160
-38
lines changed

License.md

+15

cmake/set_base_arduino_config.cmake

+1-1
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,11 @@ target_include_directories(base_config INTERFACE
5656
"${BUILD_CORE_PATH}/avr"
5757
"${BUILD_CORE_PATH}/stm32"
5858
"${BUILD_CORE_PATH}/stm32/usb"
59-
"${BUILD_CORE_PATH}/stm32/OpenAMP"
6059
"${BUILD_CORE_PATH}/stm32/usb/hid"
6160
"${BUILD_CORE_PATH}/stm32/usb/cdc"
6261
"${BUILD_LIB_PATH}/SrcWrapper/inc"
6362
"${BUILD_LIB_PATH}/SrcWrapper/inc/LL"
63+
"${BUILD_LIB_PATH}/VirtIO/inc"
6464
"${BUILD_SYSTEM_PATH}/Middlewares/ST/STM32_USB_Device_Library/Core/Inc"
6565
"${BUILD_SYSTEM_PATH}/Middlewares/ST/STM32_USB_Device_Library/Core/Src"
6666
"${CMSIS5_PATH}/CMSIS/DSP/Include"

cmake/templates/easy_cmake.cmake

+1
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ build_sketch(TARGET "{{tgtname or "@binary_name_here@"}}"
9191
# SD
9292
# Wire
9393
# SPI
94+
# VirtIO
9495
)
9596

9697
# STEP 4: optional features

cores/arduino/CMakeLists.txt

-24
Original file line numberDiff line numberDiff line change
@@ -31,29 +31,6 @@ add_library(core_bin STATIC EXCLUDE_FROM_ALL
3131
pins_arduino.c
3232
Print.cpp
3333
RingBuffer.cpp
34-
stm32/OpenAMP/libmetal/device.c
35-
stm32/OpenAMP/libmetal/generic/condition.c
36-
stm32/OpenAMP/libmetal/generic/cortexm/sys.c
37-
stm32/OpenAMP/libmetal/generic/generic_device.c
38-
stm32/OpenAMP/libmetal/generic/generic_init.c
39-
stm32/OpenAMP/libmetal/generic/generic_io.c
40-
stm32/OpenAMP/libmetal/generic/generic_shmem.c
41-
stm32/OpenAMP/libmetal/generic/time.c
42-
stm32/OpenAMP/libmetal/init.c
43-
stm32/OpenAMP/libmetal/io.c
44-
stm32/OpenAMP/libmetal/log.c
45-
stm32/OpenAMP/libmetal/shmem.c
46-
stm32/OpenAMP/mbox_ipcc.c
47-
stm32/OpenAMP/open-amp/remoteproc/remoteproc_virtio.c
48-
stm32/OpenAMP/open-amp/rpmsg/rpmsg.c
49-
stm32/OpenAMP/open-amp/rpmsg/rpmsg_virtio.c
50-
stm32/OpenAMP/openamp.c
51-
stm32/OpenAMP/rsc_table.c
52-
stm32/OpenAMP/virt_uart.c
53-
stm32/OpenAMP/virtio/virtio.c
54-
stm32/OpenAMP/virtio/virtqueue.c
55-
stm32/OpenAMP/virtio_buffer.c
56-
stm32/OpenAMP/virtio_log.c
5734
stm32/startup_stm32yyxx.S
5835
stm32/usb/cdc/cdc_queue.c
5936
stm32/usb/cdc/usbd_cdc.c
@@ -70,7 +47,6 @@ add_library(core_bin STATIC EXCLUDE_FROM_ALL
7047
Stream.cpp
7148
Tone.cpp
7249
USBSerial.cpp
73-
VirtIOSerial.cpp
7450
WInterrupts.cpp
7551
wiring_analog.c
7652
wiring_digital.c

cores/arduino/WSerial.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
#include "variant.h"
55
#include "HardwareSerial.h"
66
#include "USBSerial.h"
7-
#include "VirtIOSerial.h"
7+
#if defined(VIRTIOCON)
8+
#include "VirtIOSerial.h"
9+
#endif /* VIRTIOCON */
810

911
#if defined (USBCON) && defined(USBD_USE_CDC)
1012
#ifndef DISABLE_GENERIC_SERIALUSB

libraries/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ add_subdirectory(SPI)
1010
add_subdirectory(Servo)
1111
add_subdirectory(SoftwareSerial)
1212
add_subdirectory(SrcWrapper)
13+
add_subdirectory(VirtIO)
1314
add_subdirectory(Wire)

libraries/VirtIO/CMakeLists.txt

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# v3.21 implemented semantic changes regarding $<TARGET_OBJECTS:...>
2+
# See https://cmake.org/cmake/help/v3.21/command/target_link_libraries.html#linking-object-libraries-via-target-objects
3+
cmake_minimum_required(VERSION 3.21)
4+
5+
add_library(VirtIO INTERFACE)
6+
add_library(VirtIO_usage INTERFACE)
7+
8+
target_include_directories(VirtIO_usage INTERFACE
9+
src
10+
)
11+
12+
13+
target_link_libraries(VirtIO_usage INTERFACE
14+
base_config
15+
)
16+
17+
target_link_libraries(VirtIO INTERFACE VirtIO_usage)
18+
19+
20+
21+
add_library(VirtIO_bin OBJECT EXCLUDE_FROM_ALL
22+
src/libmetal/device.c
23+
src/libmetal/generic/condition.c
24+
src/libmetal/generic/cortexm/sys.c
25+
src/libmetal/generic/generic_device.c
26+
src/libmetal/generic/generic_init.c
27+
src/libmetal/generic/generic_io.c
28+
src/libmetal/generic/generic_shmem.c
29+
src/libmetal/generic/time.c
30+
src/libmetal/init.c
31+
src/libmetal/io.c
32+
src/libmetal/log.c
33+
src/libmetal/shmem.c
34+
src/mbox_ipcc.c
35+
src/open-amp/remoteproc/remoteproc_virtio.c
36+
src/open-amp/rpmsg/rpmsg.c
37+
src/open-amp/rpmsg/rpmsg_virtio.c
38+
src/openamp.c
39+
src/rsc_table.c
40+
src/virt_uart.c
41+
src/virtio/virtio.c
42+
src/virtio/virtqueue.c
43+
src/virtio_buffer.c
44+
src/virtio_log.c
45+
src/VirtIOSerial.cpp
46+
)
47+
target_link_libraries(VirtIO_bin PUBLIC VirtIO_usage)
48+
49+
target_link_libraries(VirtIO INTERFACE
50+
VirtIO_bin
51+
$<TARGET_OBJECTS:VirtIO_bin>
52+
)
53+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
int available;
2+
char buffer[1024];
3+
4+
unsigned long start_time = 0;
5+
6+
void setup() {
7+
Serial.begin(115200);
8+
pinMode(LED_BUILTIN, OUTPUT);
9+
}
10+
11+
void loop() {
12+
available = Serial.available();
13+
while (available > 0) {
14+
int size = min(available, Serial.availableForWrite());
15+
Serial.readBytes(buffer, size);
16+
Serial.write(buffer, size);
17+
available -= size;
18+
}
19+
20+
// Heartbeat. If Arduino stops the LED won't flash anymore.
21+
if ((millis() - start_time) > 1000) {
22+
start_time = millis();
23+
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
24+
}
25+
}
File renamed without changes.

libraries/VirtIO/keywords.txt

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#######################################
2+
# Syntax Coloring Map For VirtIO
3+
#######################################
4+
5+
#######################################
6+
# Datatypes (KEYWORD1)
7+
#######################################
8+
VirtIOSerial KEYWORD1
9+
VIRT_UART_HandleTypeDef KEYWORD1
10+
VirtIOSerialObj_t KEYWORD1
11+
virtio_buffer_t KEYWORD1
12+
13+
#######################################
14+
# Methods and Functions (KEYWORD2)
15+
#######################################
16+
SerialVirtIO KEYWORD2
17+
begin KEYWORD2
18+
available KEYWORD2
19+
availableForWrite KEYWORD2
20+
peek KEYWORD2
21+
read KEYWORD2
22+
readBytes KEYWORD2
23+
write KEYWORD2
24+
flush KEYWORD2
25+
rxGenericCallback KEYWORD2
26+
rxCallback KEYWORD2
27+
28+
#######################################
29+
# Constants (LITERAL1)
30+
#######################################

libraries/VirtIO/library.properties

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
name=VirtIO
2+
version=1.0.0
3+
author=Bumsik kim
4+
maintainer=stm32duino
5+
sentence=Enables serial communication between Cortex-A7 (Linux) and Cortex-M4 (Arduino) on STM32 MPUs via shared memory.
6+
paragraph=Provide VirtIOSerial based on OpenAMP.
7+
category=Communication
8+
url=https://github.com/stm32duino/Arduino_Core_STM32
9+
architectures=stm32

libraries/VirtIO/src/VirtIO.h

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#ifndef __VIRTIO_H__
2+
#define __VIRTIO_H__
3+
4+
#endif /* __VIRTIO_H__ */

platform.txt

+3-2
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,11 @@ cmsis_dir={runtime.tools.CMSIS-5.9.0.path}/CMSIS
3030
cmsis_dev_dir={build.system.path}/Drivers/CMSIS/Device/ST/{build.series}
3131
usbd_core_dir={build.system.path}/Middlewares/ST/STM32_USB_Device_Library/Core
3232
SrcWrapper_include_dir={runtime.platform.path}/libraries/SrcWrapper/inc
33+
VirtIO_include_dir={runtime.platform.path}/libraries/VirtIO/inc
3334

3435
# STM compile variables
3536
# ----------------------
36-
compiler.stm.extra_include="-I{build.source.path}" "-I{build.core.path}/avr" "-I{core_stm32_dir}" "-I{core_stm32_dir}/LL" "-I{SrcWrapper_include_dir}" "-I{core_usb_dir}" "-I{core_stm32_dir}/OpenAMP" "-I{core_usb_dir}/hid" "-I{core_usb_dir}/cdc" "-I{hal_dir}/Inc" "-I{hal_dir}/Src" "-I{build.system.path}/{build.series}" "-I{usbd_core_dir}/Inc" "-I{usbd_core_dir}/Src" {build.virtio_extra_include}
37+
compiler.stm.extra_include="-I{build.source.path}" "-I{build.core.path}/avr" "-I{core_stm32_dir}" "-I{SrcWrapper_include_dir}" "-I{SrcWrapper_include_dir}/LL" "-I{core_usb_dir}" "-I{core_usb_dir}/hid" "-I{core_usb_dir}/cdc" "-I{hal_dir}/Inc" "-I{hal_dir}/Src" "-I{build.system.path}/{build.series}" "-I{usbd_core_dir}/Inc" "-I{usbd_core_dir}/Src" "-I{VirtIO_include_dir}" {build.virtio_extra_include}
3738
compiler.arm.cmsis.c.flags="-I{cmsis_dir}/Core/Include/" "-I{cmsis_dev_dir}/Include/" "-I{cmsis_dev_dir}/Source/Templates/gcc/" "-I{cmsis_dir}/DSP/Include" "-I{cmsis_dir}/DSP/PrivateInclude"
3839

3940
compiler.warning_flags=-w
@@ -145,7 +146,7 @@ build.opt.path={build.path}/sketch/{build.opt.name}
145146
extras.path={build.system.path}/extras
146147

147148
# Create {build.opt} if not exists in the output sketch dir and force include of SrcWrapper library
148-
recipe.hooks.prebuild.1.pattern="{busybox}" sh "{extras.path}/prebuild.sh" "{build.path}" "{build.source.path}" "{runtime.platform.path}"
149+
recipe.hooks.prebuild.1.pattern="{busybox}" sh "{extras.path}/prebuild.sh" "{build.path}" "{build.source.path}" "{runtime.platform.path}" "{build.enable_virtio}"
149150
recipe.hooks.postbuild.1.pattern="{busybox}" sh "{extras.path}/postbuild.sh" "{build.path}" "{build.series}" "{runtime.platform.path}"
150151

151152
# compile patterns

system/extras/prebuild.sh

+6-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
BUILD_PATH="$1"
44
BUILD_SOURCE_PATH="$2"
55
BOARD_PLATFORM_PATH="$3"
6+
BUILD_VIRTIO="$4"
67

78
# Create sketch dir if not exists
89
if [ ! -f "$BUILD_PATH/sketch" ]; then
@@ -43,4 +44,8 @@ esac
4344
printf '\n-fmacro-prefix-map="%s"=.' "${prefix}" >>"$BUILD_PATH/sketch/build.opt"
4445

4546
# Force include of SrcWrapper library
46-
echo "#include <SrcWrapper.h>" >"$BUILD_PATH/sketch/SrcWrapper.cpp"
47+
echo "#include <SrcWrapper.h>" >"$BUILD_PATH/sketch/requiredLibraries.cpp"
48+
# Force include of VirtIO library if required
49+
if [ -n "${BUILD_VIRTIO#*=}" ]; then
50+
echo "#include <VirtIO.h>" >>"$BUILD_PATH/sketch/requiredLibraries.cpp"
51+
fi

tools/platformio/platformio-build.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -259,11 +259,11 @@ def get_arduino_board_id(board_config, mcu):
259259
join(FRAMEWORK_DIR, "cores", "arduino", "avr"),
260260
join(FRAMEWORK_DIR, "cores", "arduino", "stm32"),
261261
join(FRAMEWORK_DIR, "cores", "arduino", "stm32", "usb"),
262-
join(FRAMEWORK_DIR, "cores", "arduino", "stm32", "OpenAMP"),
263262
join(FRAMEWORK_DIR, "cores", "arduino", "stm32", "usb", "hid"),
264263
join(FRAMEWORK_DIR, "cores", "arduino", "stm32", "usb", "cdc"),
265264
join(FRAMEWORK_DIR, "libraries", "SrcWrapper", "inc"),
266265
join(FRAMEWORK_DIR, "libraries", "SrcWrapper", "inc", "LL"),
266+
join(FRAMEWORK_DIR, "libraries", "VirtIO", "inc"),
267267
join(FRAMEWORK_DIR, "system", "Drivers", series + "_HAL_Driver", "Inc"),
268268
join(FRAMEWORK_DIR, "system", "Drivers", series + "_HAL_Driver", "Src"),
269269
join(FRAMEWORK_DIR, "system", series),

variants/STM32MP1xx/MP153AAC_MP153CAC_MP153DAC_MP153FAC_MP157AAC_MP157CAC_MP157DAC_MP157FAC/README.md

+8-8

0 commit comments

Comments
 (0)