Compare commits
No commits in common. "master" and "mueller/master" have entirely different histories.
master
...
mueller/ma
2
.gitignore
vendored
2
.gitignore
vendored
@ -24,9 +24,7 @@ venv
|
||||
|
||||
# Build folders
|
||||
/build*
|
||||
/cmake-build*
|
||||
|
||||
# Makefile artifacts
|
||||
_dep
|
||||
_obj
|
||||
_bin
|
||||
|
@ -1,7 +0,0 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="fsfw-example-stm32h7-freertos_always_display_size" type="CMakeRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="fsfw-example-stm32h7-freertos" TARGET_NAME="fsfw-example-stm32h7-freertos_always_display_size" CONFIG_NAME="Debug">
|
||||
<method v="2">
|
||||
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
195
CMakeLists.txt
195
CMakeLists.txt
@ -1,48 +1,38 @@
|
||||
# ##############################################################################
|
||||
# CMake support for the Flight Software Framework Author: R. Mueller
|
||||
# ##############################################################################
|
||||
################################################################################
|
||||
# CMake support for the Flight Software Framework
|
||||
# Author: R. Mueller
|
||||
################################################################################
|
||||
|
||||
# ##############################################################################
|
||||
################################################################################
|
||||
# Pre-Project preparation
|
||||
# ##############################################################################
|
||||
################################################################################
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
|
||||
# set(CMAKE_VERBOSE TRUE)
|
||||
|
||||
set(CMAKE_SCRIPT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
||||
set(CMAKE_COMMON_SCRIPT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/example_common/cmake")
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SCRIPT_PATH})
|
||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_COMMON_SCRIPT_PATH})
|
||||
|
||||
message(STATUS ${CMAKE_MODULE_PATH})
|
||||
|
||||
set(STM32_CMAKE_PATH "${CMAKE_SCRIPT_PATH}/stm32-cmake")
|
||||
set(STM32_CUBE_H7_PATH STM32CubeH7)
|
||||
set(STM32_TOOLCHAIN_PATH $ENV{STM32_TOOLCHAIN_PATH})
|
||||
set(TARGET_TRIPLET "arm-none-eabi")
|
||||
set(FSFW_OSAL freertos CACHE STRING "OS for the FSFW")
|
||||
set(STM32_ADD_NETWORKING_CODE ON)
|
||||
set(FSFW_HAL_ADD_STM32H7 ON)
|
||||
|
||||
# This call has to come before the project call
|
||||
set(CMAKE_TOOLCHAIN_FILE ${STM32_CMAKE_PATH}/cmake/stm32_gcc.cmake)
|
||||
# Project Name
|
||||
project(fsfw-example-stm32h7-freertos ASM C CXX)
|
||||
|
||||
set(FSFW_OSAL
|
||||
freertos
|
||||
CACHE STRING "OS for the FSFW")
|
||||
set(STM32_ADD_NETWORKING_CODE ON)
|
||||
set(FSFW_HAL_ADD_STM32H7 ON)
|
||||
|
||||
set(OBSW_MAX_SCHEDULED_TCS 200)
|
||||
|
||||
# ##############################################################################
|
||||
################################################################################
|
||||
# Pre-Sources preparation
|
||||
# ##############################################################################
|
||||
################################################################################
|
||||
|
||||
# Specify the C++ standard
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED True)
|
||||
|
||||
|
||||
set(FSFW_OSAL "freertos")
|
||||
set(TGT_BSP "arm/stm32h743zi-nucleo")
|
||||
set(FREERTOS_NAMESPACE FreeRTOS::STM32::H7::M7)
|
||||
@ -62,41 +52,29 @@ set(BSP_NUCLEO_PATH "${BSP_PATH}/NUCLEO-H743ZI")
|
||||
set(BSP_NUCLEO_INC_PATH "${BSP_NUCLEO_PATH}/Inc")
|
||||
|
||||
# See stm32-cmake documentation for more information
|
||||
find_package(
|
||||
CMSIS
|
||||
COMPONENTS STM32H743ZI STM32H7_M7 RTOS
|
||||
REQUIRED)
|
||||
find_package(
|
||||
FreeRTOS
|
||||
COMPONENTS STM32H7 ARM_CM7
|
||||
REQUIRED)
|
||||
find_package(
|
||||
HAL
|
||||
COMPONENTS STM32H7M7
|
||||
STM32H743ZI
|
||||
RCC
|
||||
GPIO
|
||||
UART
|
||||
TIM
|
||||
CORTEX
|
||||
ETH
|
||||
SPI
|
||||
DMA
|
||||
REQUIRED)
|
||||
find_package(CMSIS COMPONENTS STM32H743ZI STM32H7_M7 RTOS REQUIRED)
|
||||
find_package(FreeRTOS COMPONENTS STM32H7 ARM_CM7 REQUIRED)
|
||||
find_package(HAL COMPONENTS STM32H7M7 STM32H743ZI RCC GPIO UART TIM CORTEX ETH SPI DMA REQUIRED)
|
||||
find_package(LwIP REQUIRED)
|
||||
|
||||
# These need to be set for the FSFW so the sources are compiled with the ABI
|
||||
# flags and to compile FreeRTOS first
|
||||
# These need to be set for the FSFW so the sources are compiled with the ABI flags
|
||||
# and to compile FreeRTOS first
|
||||
set(LIB_OS_NAME ${FREERTOS_NAMESPACE}::ARM_CM7)
|
||||
# This target is used because a custom linker script is used
|
||||
set(CMSIS_LINK_TARGET CMSIS::STM32::H743xx::M7)
|
||||
set(FSFW_ADDITIONAL_LINK_LIBS ${CMSIS_LINK_TARGET})
|
||||
set(FSFW_HAL_LINK_LIBS HAL::STM32::H7::M7::CORTEX ${CMSIS_LINK_TARGET}
|
||||
${LIB_OS_NAME})
|
||||
set(FSFW_HAL_LINK_LIBS
|
||||
HAL::STM32::H7::M7::CORTEX
|
||||
${CMSIS_LINK_TARGET}
|
||||
${LIB_OS_NAME}
|
||||
)
|
||||
set(FSFW_HAL_ADDITIONAL_INC_PATHS ${BSP_NUCLEO_INC_PATH})
|
||||
set(FSFW_ADDITIONAL_INC_PATHS
|
||||
"${COMMON_CONFIG_PATH}" "${CMAKE_CURRENT_BINARY_DIR}"
|
||||
CACHE STRING "FSFW configuration paths")
|
||||
"${COMMON_CONFIG_PATH}"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}"
|
||||
CACHE STRING
|
||||
"FSFW configuration paths"
|
||||
)
|
||||
|
||||
configure_file(${COMMON_CONFIG_PATH}/commonConfig.h.in commonConfig.h)
|
||||
configure_file(${FSFW_CONFIG_PATH}/FSFWConfig.h.in FSFWConfig.h)
|
||||
@ -104,9 +82,25 @@ configure_file(${FSFW_CONFIG_PATH}/OBSWConfig.h.in OBSWConfig.h)
|
||||
configure_file(${BSP_NUCLEO_PATH}/Inc/FreeRTOSConfig.h.in FreeRTOSConfig.h)
|
||||
configure_file(${BSP_NUCLEO_PATH}/Inc/lwipopts.h.in lwipopts.h)
|
||||
|
||||
# ##############################################################################
|
||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
set(WARNING_FLAGS
|
||||
-Wall
|
||||
-Wextra
|
||||
-Wimplicit-fallthrough=1
|
||||
-Wno-unused-parameter
|
||||
-Wno-psabi
|
||||
)
|
||||
|
||||
set(FSFW_WARNING_FLAGS ${WARNING_FLAGS})
|
||||
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||
add_compile_options(/permissive- /d2SSAOptimizer-)
|
||||
# To avoid nameclashes with min and max macro
|
||||
add_compile_definitions(NOMINMAX)
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
# Executable and Sources
|
||||
# ##############################################################################
|
||||
################################################################################
|
||||
|
||||
# Add executable
|
||||
add_executable(${TARGET_NAME})
|
||||
@ -114,44 +108,17 @@ add_executable(${TARGET_NAME})
|
||||
# Add subdirectories
|
||||
add_subdirectory(${BSP_PATH})
|
||||
add_subdirectory(${FSFW_PATH})
|
||||
# add_subdirectory(${LIB_FSFW_HAL_PATH})
|
||||
add_subdirectory(${COMMON_PATH})
|
||||
|
||||
# ##############################################################################
|
||||
################################################################################
|
||||
# Post-Sources preparation
|
||||
# ##############################################################################
|
||||
|
||||
# Check whether the user has already installed ETL first
|
||||
# find_package(etl ${FSFW_ETL_LIB_MAJOR_VERSION} CONFIG QUIET)
|
||||
# Not installed, so use FetchContent to download and provide etl
|
||||
# if(NOT etl_FOUND)
|
||||
# There are issues using find_package. For now, always use FetchContent
|
||||
# See this github issue: https://github.com/ETLCPP/etl/issues/548
|
||||
message(
|
||||
STATUS
|
||||
"No ETL installation was found with find_package. Installing and providing "
|
||||
"etl with FindPackage")
|
||||
include(FetchContent)
|
||||
|
||||
FetchContent_Declare(
|
||||
etl
|
||||
GIT_REPOSITORY https://github.com/ETLCPP/etl
|
||||
GIT_TAG ${FSFW_ETL_LIB_VERSION})
|
||||
|
||||
list(APPEND FSFW_FETCH_CONTENT_TARGETS etl)
|
||||
# endif()
|
||||
|
||||
# The documentation for FetchContent recommends declaring all the dependencies
|
||||
# before making them available. We make all declared dependency available here
|
||||
# after their declaration
|
||||
if(FSFW_FETCH_CONTENT_TARGETS)
|
||||
FetchContent_MakeAvailable(${FSFW_FETCH_CONTENT_TARGETS})
|
||||
endif()
|
||||
################################################################################
|
||||
|
||||
# Add libraries for all sources.
|
||||
target_link_libraries(
|
||||
${TARGET_NAME}
|
||||
PRIVATE ${LIB_FSFW_NAME}
|
||||
etl::etl
|
||||
target_link_libraries(${TARGET_NAME} PRIVATE
|
||||
${LIB_FSFW_NAME}
|
||||
# ${LIB_FSFW_HAL_NAME}
|
||||
${FREERTOS_NAMESPACE}::Heap::4
|
||||
${FREERTOS_NAMESPACE}::ARM_CM7
|
||||
HAL::STM32::H7::M7::RCC
|
||||
@ -172,18 +139,46 @@ target_link_libraries(
|
||||
STM32::Nano::FloatScan
|
||||
LwIP
|
||||
LwIP::IPv4
|
||||
LwIP::NETIF)
|
||||
|
||||
include(common)
|
||||
get_common_build_flags(${TARGET_NAME})
|
||||
LwIP::NETIF
|
||||
)
|
||||
|
||||
# Add include paths for all sources.
|
||||
target_include_directories(
|
||||
${TARGET_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_CURRENT_BINARY_DIR} ${FSFW_CONFIG_PATH})
|
||||
target_include_directories(${TARGET_NAME} PRIVATE
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_CURRENT_BINARY_DIR}
|
||||
${FSFW_CONFIG_PATH}
|
||||
)
|
||||
|
||||
target_compile_options(${TARGET_NAME} PRIVATE ${COMMON_COMPILE_OPTS} ${COMMON_WARNING_FLAGS})
|
||||
target_link_options(${TARGET_NAME} PRIVATE ${COMMON_LINK_OPTS})
|
||||
|
||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
target_link_options(${TARGET_NAME} PRIVATE
|
||||
"-Wl,-Map=${TARGET_NAME}.map"
|
||||
)
|
||||
|
||||
# Remove unused sections.
|
||||
target_compile_options(${TARGET_NAME} PRIVATE
|
||||
"-ffunction-sections"
|
||||
"-fdata-sections"
|
||||
)
|
||||
|
||||
# Removed unused sections.
|
||||
if(NOT FSFW_OSAL MATCHES rtems)
|
||||
target_link_options(${TARGET_NAME} PRIVATE
|
||||
"-Wl,--gc-sections"
|
||||
)
|
||||
endif()
|
||||
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||
endif()
|
||||
|
||||
if(CMAKE_VERBOSE)
|
||||
message(STATUS "Warning flags: ${WARNING_FLAGS}")
|
||||
endif()
|
||||
|
||||
|
||||
# Compile options for all sources.
|
||||
target_compile_options(${TARGET_NAME} PRIVATE
|
||||
${WARNING_FLAGS}
|
||||
)
|
||||
|
||||
if(TGT_BSP)
|
||||
set(TARGET_STRING "Target BSP: ${TGT_BSP}")
|
||||
@ -191,14 +186,16 @@ else()
|
||||
set(TARGET_STRING "Target BSP: Hosted")
|
||||
endif()
|
||||
|
||||
string(CONCAT POST_BUILD_COMMENT "Build directory: ${CMAKE_BINARY_DIR}\n"
|
||||
string(CONCAT POST_BUILD_COMMENT
|
||||
"Build directory: ${CMAKE_BINARY_DIR}\n"
|
||||
"Target OSAL: ${FSFW_OSAL}\n"
|
||||
"Target Build Type: ${CMAKE_BUILD_TYPE}\n" "${TARGET_STRING}")
|
||||
"Target Build Type: ${CMAKE_BUILD_TYPE}\n"
|
||||
"${TARGET_STRING}"
|
||||
)
|
||||
|
||||
stm32_add_linker_script(${TARGET_NAME} "PRIVATE"
|
||||
"${BSP_NUCLEO_PATH}/STM32H743ZITx_FLASH.ld")
|
||||
stm32_add_linker_script(${TARGET_NAME} "PRIVATE" "${BSP_NUCLEO_PATH}/STM32H743ZITx_FLASH.ld")
|
||||
|
||||
include(BuildType)
|
||||
include (${CMAKE_SCRIPT_PATH}/BuildType.cmake)
|
||||
set_build_type()
|
||||
|
||||
stm32_print_size_of_target(${TARGET_NAME})
|
||||
|
213
README.md
213
README.md
@ -1,4 +1,4 @@
|
||||
<img align="center" src="https://egit.irs.uni-stuttgart.de/fsfw/fsfw/raw/branch/development/misc/logo/FSFW_Logo_V3_bw.png" width="50%">
|
||||
<img align="center" src="https://egit.irs.uni-stuttgart.de/fsfw/fsfw/raw/branch/mueller/master/misc/logo/FSFW_Logo_V3_bw.png" width="50%">
|
||||
|
||||
# <a id="top"></a> <a name="linux"></a> FSFW Example Application
|
||||
|
||||
@ -48,28 +48,23 @@ This demo can be run on a STM32H743ZI-Nucleo board with the FreeRTOS OSAL.
|
||||
|
||||
## General Information
|
||||
|
||||
The board is flashed and debugged with [OpenOCD](https://openocd.org/) and this README specifies on
|
||||
how to make this work with the Eclipse IDE. Other IDEs or the command line can be used as well as
|
||||
long as long as OpenOCD integration is given. The example demo uses newlib nano (glibc).
|
||||
Some system calls were overriden so the C and C++ `stdio` functions work. IO is sent via the HUART3,
|
||||
The board is flashed and debugged with OpenOCD and this README specifies on how
|
||||
to make this work with the Eclipse IDE. Other IDEs or the command line can be used as well as long
|
||||
as long as OpenOCD integration is given. The example demo uses newlib nano (glibc).
|
||||
Some system calls were overriden so the C and C++ stdio functions work. IO is sent via the HUART3,
|
||||
so debug output can be read directly from the USB connection to the board.
|
||||
|
||||
## Prerequisites
|
||||
## Prerequisite
|
||||
|
||||
If you have not set up the prerequisites yet, go to the [prerequisites chapter](#prereq) for
|
||||
detailed instructions on how to install these.
|
||||
|
||||
Here is a brief overview of the required tools to develop software for the STM32H7 microcontroller:
|
||||
|
||||
1. CMake build system generator installed
|
||||
2. Build system like [Ninja Build](https://ninja-build.org/) or [Make](https://www.msys2.org/)
|
||||
installed.
|
||||
3. Bare-Metal ARM toolchain installed
|
||||
4. Recommended for application code development:
|
||||
1. [MinGW64](https://www.msys2.org/) or [Ninja Build](https://ninja-build.org/) installed on Windows.
|
||||
Not required on Linux.
|
||||
2. [GNU ARM Toolchain](https://xpack.github.io/arm-none-eabi-gcc/install/) installed, recommended
|
||||
to add binaries to system path.
|
||||
3. Recommended for application code development:
|
||||
[Eclipse for C/C++](https://www.eclipse.org/downloads/packages/) installed with the Eclipse MCU
|
||||
plugin
|
||||
5. [OpenOCD](https://xpack.github.io/openocd/) installed for Eclipse debugging
|
||||
6. STM32 USB drivers installed, separate steps for
|
||||
4. [OpenOCD](https://xpack.github.io/openocd/) installed for Eclipse debugging
|
||||
5. STM32 USB drivers installed, separate steps for
|
||||
[Windows](https://www.st.com/en/development-tools/stsw-link009.html) or
|
||||
[Linux](https://fishpepper.de/2016/09/16/installing-using-st-link-v2-to-flash-stm32-on-linux/)
|
||||
|
||||
@ -80,7 +75,7 @@ after installing MSYS2 or inside another Unix shell like `git bash`.
|
||||
|
||||
1. Clone this repository
|
||||
```sh
|
||||
git clone https://egit.irs.uni-stuttgart.de/fsfw/fsfw-example-stm32h7-freertos
|
||||
git clone https://egit.irs.uni-stuttgart.de/fsfw/fsfw_example.git
|
||||
```
|
||||
|
||||
2. Set up submodules
|
||||
@ -93,8 +88,8 @@ after installing MSYS2 or inside another Unix shell like `git bash`.
|
||||
Debug build folder.
|
||||
|
||||
```sh
|
||||
mkdir cmake-build-debug
|
||||
cd cmake-build-debug
|
||||
mkdir build-Debug
|
||||
cd build-Debug
|
||||
```
|
||||
|
||||
4. Ensure that the ARM compiler has been added to the path and can be called from
|
||||
@ -136,145 +131,79 @@ after installing MSYS2 or inside another Unix shell like `git bash`.
|
||||
The debug output is also sent via the connected USB port and a blink pattern (1 second interval)
|
||||
can be used to verify the software is running properly.
|
||||
|
||||
## <a id="prereq"></a> Setting up Prerequisites
|
||||
## Setting up the prerequisites
|
||||
|
||||
### CMake
|
||||
### Windows
|
||||
|
||||
**Linux**
|
||||
It is recommended to install [MSYS2](https://www.msys2.org/) first.
|
||||
Open MinGW64 and run the following commands to update it and install make and cmake
|
||||
(replace x86_64 if compiling on different architecture):
|
||||
|
||||
```sh
|
||||
sudo apt-get install cmake
|
||||
pacman -Syu
|
||||
```
|
||||
|
||||
**Windows**
|
||||
```sh
|
||||
pacman -S mingw-w64-x86_64-make mingw-w64-x86_64-cmake
|
||||
```
|
||||
|
||||
On Windows, you can use `pacman -S mingw-w64-x86_64-cmake`, but you can also install the Windows
|
||||
CMake via the [installer](https://cmake.org/download/). It is recommended to pick the install
|
||||
option `Add CMake to system PATH for all users` to CMake can be used from the command line.
|
||||
Please note that you need to add the Windows CMake path to the MinGW64 path manually
|
||||
if you want to use it in CMake.
|
||||
Alternatively, you can install [Ninja Build](https://ninja-build.org/), but you need
|
||||
to add the folder containing the `ninja.exe` executable to the system path so you
|
||||
can run `ninja -v` from the command line. If you do this, you can also use
|
||||
`git bash` or the Windows command lines with the CMake Ninja generator
|
||||
to build the software.
|
||||
|
||||
### Cross-Compiler
|
||||
The code needs to be cross-compiled for the ARM target system and we will use the
|
||||
[GNU ARM Toolchain](https://xpack.github.io/arm-none-eabi-gcc/install/).
|
||||
|
||||
The instuctions here specify how to install and use a specific version of the
|
||||
[xPacks cross-compiler](https://xpack.github.io/arm-none-eabi-gcc/) but you can use any other
|
||||
ARM cross-compiler which can generate bare-metal code, usually denoted by the `arm-none-eabi`
|
||||
cross-compiler triplet.
|
||||
1. Install NodeJS LTS. Add nodejs folder (e.g. "C:\Program Files\nodejs\")
|
||||
to system variables. Test by running `npm --version` in command line
|
||||
2. Install [XPM](https://www.npmjs.com/package/xpm)
|
||||
```sh
|
||||
npm install --global xpm
|
||||
```
|
||||
|
||||
3. Install gnu-arm Toolchain for Eclipse (version can be specified)
|
||||
```sh
|
||||
xpm install --global @xpack-dev-tools/arm-none-eabi-gcc@latest
|
||||
```
|
||||
|
||||
`xpm` will display where the package was installed. Search in that path for
|
||||
the hidden `.content` folder, which will contain a `bin` folder and store
|
||||
the full path to that `bin` folder for later.
|
||||
|
||||
Install OpenOCD for STM32 debugging
|
||||
```sh
|
||||
xpm install --global @xpack-dev-tools/openocd@latest
|
||||
```
|
||||
|
||||
4. If you want to build from the command line, you need to add the `arm-none-eabi-gcc`
|
||||
binary location in the xPack folder to system variables. You can do this in a Unix
|
||||
shell like `git bash` or `MinGW64` with the following command
|
||||
|
||||
```sh
|
||||
export PATH=$PATH:"<pathToToolchain>"
|
||||
```
|
||||
|
||||
You can also add these lines to a shell script like `path_setter.sh` and then source
|
||||
the script with `. path_setter.sh` to do this conveniently. You can test whether
|
||||
the path was set up properly by running `arm-none-eabi-gcc -v`
|
||||
|
||||
5. Install the [STM32 USB drivers](https://www.st.com/en/development-tools/stsw-link009.html)
|
||||
|
||||
If you don't want to install nodejs you may go with the
|
||||
[four-command manual installation](https://xpack.github.io/arm-none-eabi-gcc/install/#manual-install).
|
||||
|
||||
**Windows**
|
||||
### Linux
|
||||
|
||||
On Windows, it is recommended to perform the `xpm` and toolchain installation from the Windows
|
||||
command line.The simple way required npm, which can be installed by installing
|
||||
[NodeJS](https://nodejs.org/en/). Make sure `npm` can be run from the command line by adding
|
||||
the folder containing `npm.exe` to the system path and running the following command
|
||||
Install the [GNU ARM toolchain](https://xpack.github.io/arm-none-eabi-gcc/install/)
|
||||
like explained above.
|
||||
|
||||
To install general buildtools for the linux binary, run:
|
||||
```sh
|
||||
npm install --global xpm@latest
|
||||
xpm install --global @xpack-dev-tools/arm-none-eabi-gcc@11.2.1-1.1.1 --verbose
|
||||
sudo apt-get install build-essential
|
||||
```
|
||||
|
||||
On Windows, the toolchain binaries will be located in a folder like this
|
||||
|
||||
```sh
|
||||
C:\Users\<User>\AppData\Roaming\xPacks\@xpack-dev-tools\arm-none-eabi-gcc\<version>\.content\bin
|
||||
```
|
||||
|
||||
You can now run the following commands in the repository root:
|
||||
|
||||
```sh
|
||||
xpm init
|
||||
xpm install @xpack-dev-tools/arm-none-eabi-gcc@11.2.1-1.1.1
|
||||
```
|
||||
|
||||
to create symlinks to the toolchain in `./xpacks/.bin`.
|
||||
You can now set up the environment by using `. load_path.sh` or the following command
|
||||
|
||||
```sh
|
||||
export PATH="$(pwd)/xpacks/.bin":$PATH
|
||||
```
|
||||
|
||||
On Windows, you can use git bash to perform the step above.
|
||||
|
||||
Alternatively, you can use the graphical system environmental variables editor to add the
|
||||
`.bin` path to the system variables permanently or use the appriate command for `CMD` or
|
||||
PowerShell to update the `PATH` variable.
|
||||
|
||||
**Linux**
|
||||
|
||||
Install `npm` and `nodejs` first. Example for Ubuntu according to
|
||||
[this guide](https://linuxize.com/post/how-to-install-node-js-on-ubuntu-20-04/).
|
||||
|
||||
```sh
|
||||
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
|
||||
sudo apt-get update && sudo apt-get install nodejs
|
||||
```
|
||||
|
||||
Check that `npm` is installed with `npm --version`.
|
||||
Then `xpm` and the cross-compiler are installed.
|
||||
|
||||
```sh
|
||||
sudo npm install --global xpm@latest
|
||||
xpm install --global @xpack-dev-tools/arm-none-eabi-gcc@11.2.1-1.1.1 --verbose
|
||||
```
|
||||
|
||||
You can now run the following commands in the repository root:
|
||||
|
||||
```sh
|
||||
xpm init
|
||||
xpm install @xpack-dev-tools/arm-none-eabi-gcc@11.2.1-1.1.1
|
||||
```
|
||||
|
||||
to create symlinks to the toolchain in `./xpacks/.bin`.
|
||||
You can now set up the environment by using `. load_path.sh` or the following command
|
||||
|
||||
```sh
|
||||
export PATH="$(pwd)/xpacks/.bin":$PATH
|
||||
```
|
||||
|
||||
### Build System
|
||||
|
||||
It is recommended to use `ninja` or `make` as the software build system.
|
||||
|
||||
**Windows**
|
||||
|
||||
It is recommended to use the [Ninja build system](https://ninja-build.org/). Download the ninja
|
||||
executable and place it somewhere.
|
||||
You need to add the folder containing the ninja executable to the system environmental variables
|
||||
so it can be used in the build process. You can test whether `ninja` works by running
|
||||
`ninja --version` in the command line.
|
||||
|
||||
Alternatively or additionally, you can also install `mingw32-make`
|
||||
which comes bundled with [MinGW64](https://www.msys2.org/). Make sure to add the binaries path to
|
||||
the Windows path during installation. Otherwise, you need to add `msys64/mingw64/bin` to the
|
||||
Windows path so you can run installed binaries from the command line.
|
||||
Open the `MinGW64` shell and run the following commands.
|
||||
|
||||
```sh
|
||||
pacman -S mingw-w64-x86_64-toolchain mingw-w64-x86_64-make mingw-w64-x86_64-cmake
|
||||
```
|
||||
|
||||
You can test successfull installation with `mingw32-make -v` from the Windows Command Line.
|
||||
|
||||
**Linux**
|
||||
|
||||
On Linux, `make` is pre-installed and it is recommended to use it directly.
|
||||
You can install `ninja` with
|
||||
|
||||
```sh
|
||||
sudo apt-get install ninja-build
|
||||
```
|
||||
|
||||
### USB Drivers
|
||||
|
||||
**Windows**
|
||||
|
||||
Install the [STM32 USB drivers](https://www.st.com/en/development-tools/stsw-link009.html).
|
||||
|
||||
**Linux**
|
||||
|
||||
Install the [USB drivers](https://github.com/stlink-org/stlink) on Linux.
|
||||
On Ubuntu, you can run the following command to install it:
|
||||
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit b340b13929e36a3427b8d94e8b1006022f82273f
|
||||
Subproject commit 5975bffae9358bc2b2890a35a203d940a395efef
|
@ -1,11 +1,16 @@
|
||||
target_sources(${TARGET_NAME} PRIVATE main.cpp)
|
||||
target_sources(${TARGET_NAME} PRIVATE
|
||||
main.cpp
|
||||
)
|
||||
|
||||
target_compile_options(${TARGET_NAME} PRIVATE)
|
||||
target_compile_options(${TARGET_NAME} PRIVATE
|
||||
)
|
||||
|
||||
target_link_options(${TARGET_NAME} PRIVATE)
|
||||
target_link_options(${TARGET_NAME} PRIVATE
|
||||
)
|
||||
|
||||
target_compile_definitions(${TARGET_NAME}
|
||||
PRIVATE BOARD_NAME="stm32h743zi-nucleo")
|
||||
target_compile_definitions(${TARGET_NAME} PRIVATE
|
||||
BOARD_NAME="stm32h743zi-nucleo"
|
||||
)
|
||||
|
||||
add_subdirectory(core)
|
||||
add_subdirectory(utility)
|
||||
|
@ -1,3 +1,5 @@
|
||||
add_subdirectory(Src)
|
||||
|
||||
target_include_directories(${TARGET_NAME} PRIVATE Inc)
|
||||
target_include_directories(${TARGET_NAME} PRIVATE
|
||||
Inc
|
||||
)
|
||||
|
@ -58,6 +58,7 @@ extern "C" {
|
||||
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
|
||||
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
/* Exported functions ------------------------------------------------------- */
|
||||
void ethernet_link_status_updated(struct netif *netif);
|
||||
@ -71,4 +72,6 @@ void set_lwip_addresses(ip_addr_t *ipaddr, ip_addr_t *netmask, ip_addr_t *gw);
|
||||
|
||||
#endif /* __APP_ETHERNET_H */
|
||||
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||
|
||||
|
@ -5,4 +5,6 @@
|
||||
#define DEBUG_UART_MS_TIMEOUT 10
|
||||
#define DEBUG_UART_BAUDRATE 115200
|
||||
|
||||
|
||||
|
||||
#endif /* BSP_STM32_BOARDS_NUCLEO_H743ZI_INC_BOARDCONFIG_H_ */
|
||||
|
@ -9,8 +9,8 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#include <stm32h7xx_hal.h>
|
||||
#include <stm32h7xx_hal_gpio.h>
|
||||
|
@ -380,7 +380,8 @@ typedef int32_t (*lan8742_ReadReg_Func)(uint32_t, uint32_t, uint32_t *);
|
||||
typedef int32_t (*lan8742_WriteReg_Func) (uint32_t, uint32_t, uint32_t);
|
||||
typedef int32_t (*lan8742_GetTick_Func) (void);
|
||||
|
||||
typedef struct {
|
||||
typedef struct
|
||||
{
|
||||
lan8742_Init_Func Init;
|
||||
lan8742_DeInit_Func DeInit;
|
||||
lan8742_WriteReg_Func WriteReg;
|
||||
@ -388,7 +389,9 @@ typedef struct {
|
||||
lan8742_GetTick_Func GetTick;
|
||||
} lan8742_IOCtx_t;
|
||||
|
||||
typedef struct {
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32_t DevAddr;
|
||||
uint32_t Is_Initialized;
|
||||
lan8742_IOCtx_t IO;
|
||||
@ -426,6 +429,7 @@ int32_t LAN8742_GetITStatus(lan8742_Object_t *pObj, uint32_t Interrupt);
|
||||
#endif
|
||||
#endif /* LAN8742_H */
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
@ -98,7 +98,7 @@ a lot of data that needs to be copied, this should be set high. */
|
||||
#define PBUF_POOL_SIZE 4
|
||||
|
||||
/* PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. */
|
||||
#define PBUF_POOL_BUFSIZE 1536
|
||||
#define PBUF_POOL_BUFSIZE 1528
|
||||
|
||||
/* LWIP_SUPPORT_CUSTOM_PBUF == 1: to pass directly MAC Rx buffers to the stack
|
||||
no copy is needed */
|
||||
@ -232,12 +232,12 @@ The STM32H7xx allows computing and verifying the IP, UDP, TCP and ICMP checksums
|
||||
*/
|
||||
|
||||
#define TCPIP_THREAD_NAME "TCP/IP"
|
||||
#define TCPIP_THREAD_STACKSIZE 2048
|
||||
#define TCPIP_THREAD_STACKSIZE 1000
|
||||
#define TCPIP_MBOX_SIZE 6
|
||||
#define DEFAULT_UDP_RECVMBOX_SIZE 6
|
||||
#define DEFAULT_TCP_RECVMBOX_SIZE 6
|
||||
#define DEFAULT_ACCEPTMBOX_SIZE 6
|
||||
#define DEFAULT_THREAD_STACKSIZE 1024
|
||||
#define DEFAULT_THREAD_STACKSIZE 500
|
||||
#define TCPIP_THREAD_PRIO osPriorityHigh
|
||||
|
||||
/*
|
||||
|
@ -62,8 +62,7 @@ extern "C" {
|
||||
/* UDP remote connection port */
|
||||
#define UDP_CLIENT_PORT 2008
|
||||
|
||||
/*Static DEST IP ADDRESS:
|
||||
* DEST_IP_ADDR0.DEST_IP_ADDR1.DEST_IP_ADDR2.DEST_IP_ADDR3 */
|
||||
/*Static DEST IP ADDRESS: DEST_IP_ADDR0.DEST_IP_ADDR1.DEST_IP_ADDR2.DEST_IP_ADDR3 */
|
||||
#define DEST_IP_ADDR0 ((uint8_t)169U)
|
||||
#define DEST_IP_ADDR1 ((uint8_t)254U)
|
||||
#define DEST_IP_ADDR2 ((uint8_t)39U)
|
||||
@ -93,4 +92,5 @@ extern "C" {
|
||||
|
||||
#endif /* __MAIN_H */
|
||||
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||
|
@ -89,22 +89,18 @@ extern "C" {
|
||||
#define HAL_USART_MODULE_ENABLED
|
||||
#define HAL_WWDG_MODULE_ENABLED
|
||||
|
||||
/* ########################## Oscillator Values adaptation
|
||||
* ####################*/
|
||||
/* ########################## Oscillator Values adaptation ####################*/
|
||||
/**
|
||||
* @brief Adjust the value of External High Speed oscillator (HSE) used in your
|
||||
* application. This value is used by the RCC HAL module to compute the system
|
||||
* frequency (when HSE is used as system clock source, directly or through the
|
||||
* PLL).
|
||||
* @brief Adjust the value of External High Speed oscillator (HSE) used in your application.
|
||||
* This value is used by the RCC HAL module to compute the system frequency
|
||||
* (when HSE is used as system clock source, directly or through the PLL).
|
||||
*/
|
||||
#if !defined (HSE_VALUE)
|
||||
#define HSE_VALUE \
|
||||
((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
|
||||
#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
|
||||
#endif /* HSE_VALUE */
|
||||
|
||||
#if !defined (HSE_STARTUP_TIMEOUT)
|
||||
#define HSE_STARTUP_TIMEOUT \
|
||||
((uint32_t)5000) /*!< Time out for HSE start up, in ms */
|
||||
#define HSE_STARTUP_TIMEOUT ((uint32_t)5000) /*!< Time out for HSE start up, in ms */
|
||||
#endif /* HSE_STARTUP_TIMEOUT */
|
||||
|
||||
/**
|
||||
@ -112,50 +108,44 @@ extern "C" {
|
||||
* This value is the default CSI value after Reset.
|
||||
*/
|
||||
#if !defined (CSI_VALUE)
|
||||
#define CSI_VALUE \
|
||||
((uint32_t)4000000) /*!< Value of the Internal oscillator in Hz*/
|
||||
#define CSI_VALUE ((uint32_t)4000000) /*!< Value of the Internal oscillator in Hz*/
|
||||
#endif /* CSI_VALUE */
|
||||
|
||||
/**
|
||||
* @brief Internal High Speed oscillator (HSI) value.
|
||||
* This value is used by the RCC HAL module to compute the system
|
||||
* frequency (when HSI is used as system clock source, directly or through the
|
||||
* PLL).
|
||||
* This value is used by the RCC HAL module to compute the system frequency
|
||||
* (when HSI is used as system clock source, directly or through the PLL).
|
||||
*/
|
||||
#if !defined (HSI_VALUE)
|
||||
#define HSI_VALUE \
|
||||
((uint32_t)64000000) /*!< Value of the Internal oscillator in Hz*/
|
||||
#define HSI_VALUE ((uint32_t)64000000) /*!< Value of the Internal oscillator in Hz*/
|
||||
#endif /* HSI_VALUE */
|
||||
|
||||
/**
|
||||
* @brief External Low Speed oscillator (LSE) value.
|
||||
* This value is used by the UART, RTC HAL module to compute the system
|
||||
* frequency
|
||||
* This value is used by the UART, RTC HAL module to compute the system frequency
|
||||
*/
|
||||
#if !defined (LSE_VALUE)
|
||||
#define LSE_VALUE \
|
||||
((uint32_t)32768) /*!< Value of the External oscillator in Hz*/
|
||||
#define LSE_VALUE ((uint32_t)32768) /*!< Value of the External oscillator in Hz*/
|
||||
#endif /* LSE_VALUE */
|
||||
|
||||
|
||||
#if !defined (LSE_STARTUP_TIMEOUT)
|
||||
#define LSE_STARTUP_TIMEOUT \
|
||||
((uint32_t)5000) /*!< Time out for LSE start up, in ms */
|
||||
#define LSE_STARTUP_TIMEOUT ((uint32_t)5000) /*!< Time out for LSE start up, in ms */
|
||||
#endif /* LSE_STARTUP_TIMEOUT */
|
||||
|
||||
#if !defined (LSI_VALUE)
|
||||
#define LSI_VALUE ((uint32_t)32000) /*!< LSI Typical Value in Hz*/
|
||||
#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz \
|
||||
The real value may vary depending on the variations \
|
||||
#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz
|
||||
The real value may vary depending on the variations
|
||||
in voltage and temperature.*/
|
||||
|
||||
/**
|
||||
* @brief External clock source for I2S peripheral
|
||||
* This value is used by the I2S HAL module to compute the I2S clock
|
||||
* source frequency, this source is inserted directly through I2S_CKIN pad.
|
||||
* This value is used by the I2S HAL module to compute the I2S clock source
|
||||
* frequency, this source is inserted directly through I2S_CKIN pad.
|
||||
*/
|
||||
#if !defined (EXTERNAL_CLOCK_VALUE)
|
||||
#define EXTERNAL_CLOCK_VALUE 12288000U /*!< Value of the External clock in \
|
||||
Hz*/
|
||||
#define EXTERNAL_CLOCK_VALUE 12288000U /*!< Value of the External clock in Hz*/
|
||||
#endif /* EXTERNAL_CLOCK_VALUE */
|
||||
|
||||
/* Tip: To avoid modifying this file each time you need to use different HSE,
|
||||
@ -171,8 +161,7 @@ extern "C" {
|
||||
/* #define USE_SD_TRANSCEIVER 1U */ /*!< use uSD Transceiver */
|
||||
#define USE_SPI_CRC 1U /*!< use CRC in SPI */
|
||||
|
||||
/* ########################### Ethernet Configuration #########################
|
||||
*/
|
||||
/* ########################### Ethernet Configuration ######################### */
|
||||
#define ETH_TX_DESC_CNT 4 /* number of Ethernet Tx DMA descriptors */
|
||||
#define ETH_RX_DESC_CNT 4 /* number of Ethernet Rx DMA descriptors */
|
||||
|
||||
@ -190,6 +179,7 @@ extern "C" {
|
||||
*/
|
||||
/* #define USE_FULL_ASSERT 1 */
|
||||
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief Include module's header file
|
||||
@ -311,6 +301,7 @@ extern "C" {
|
||||
#include "stm32h7xx_hal_mdios.h"
|
||||
#endif /* HAL_MDIOS_MODULE_ENABLED */
|
||||
|
||||
|
||||
#ifdef HAL_MMC_MODULE_ENABLED
|
||||
#include "stm32h7xx_hal_mmc.h"
|
||||
#endif /* HAL_MMC_MODULE_ENABLED */
|
||||
@ -417,8 +408,7 @@ extern "C" {
|
||||
* If expr is true, it returns no value.
|
||||
* @retval None
|
||||
*/
|
||||
#define assert_param(expr) \
|
||||
((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__))
|
||||
#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__))
|
||||
/* Exported functions ------------------------------------------------------- */
|
||||
void assert_failed(uint8_t* file, uint32_t line);
|
||||
#else
|
||||
@ -431,4 +421,5 @@ void assert_failed(uint8_t *file, uint32_t line);
|
||||
|
||||
#endif /* __STM32H7xx_HAL_CONF_H */
|
||||
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||
|
@ -19,10 +19,6 @@
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef USE_HAL_UART_REGISTER_CALLBACKS
|
||||
#define USE_HAL_UART_REGISTER_CALLBACKS 1
|
||||
#endif
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef STM32H7XX_NUCLEO_H
|
||||
#define STM32H7XX_NUCLEO_H
|
||||
@ -63,24 +59,21 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
#if !defined (USE_NUCLEO_144)
|
||||
#error \
|
||||
"Board Pin number not defined!! Add USE_NUCLEO_144 define within stm32h7xx_nucleo_conf.h file"
|
||||
#error "Board Pin number not defined!! Add USE_NUCLEO_144 define within stm32h7xx_nucleo_conf.h file"
|
||||
#endif
|
||||
|
||||
#if !defined(USE_NUCLEO_H745ZI_Q) && !defined(USE_NUCLEO_H743ZI) && \
|
||||
!defined(USE_NUCLEO_H743ZI2) && !defined(USE_NUCLEO_H7A3ZI_Q) && \
|
||||
!defined(USE_NUCLEO_H723ZG)
|
||||
#error \
|
||||
"Board Part number not defined!! Add one of the following define within stm32h7xx_nucleo_conf.h file:\
|
||||
#if !defined (USE_NUCLEO_H745ZI_Q) && !defined (USE_NUCLEO_H743ZI) && !defined (USE_NUCLEO_H743ZI2) &&\
|
||||
!defined (USE_NUCLEO_H7A3ZI_Q) && !defined (USE_NUCLEO_H723ZG)
|
||||
#error "Board Part number not defined!! Add one of the following define within stm32h7xx_nucleo_conf.h file:\
|
||||
USE_NUCLEO_H745ZI_Q, USE_NUCLEO_H743ZI, USE_NUCLEO_H743ZI2, USE_NUCLEO_H7A3ZI_Q, USE_NUCLEO_H723ZG"
|
||||
#endif
|
||||
|
||||
/** @defgroup STM32H7XX_NUCLEO_LOW_LEVEL_Exported_Types LOW LEVEL Exported Types
|
||||
* @{
|
||||
*/
|
||||
#if defined(USE_NUCLEO_H745ZI_Q) || defined(USE_NUCLEO_H743ZI2) || \
|
||||
defined(USE_NUCLEO_H7A3ZI_Q) || defined(USE_NUCLEO_H723ZG)
|
||||
typedef enum {
|
||||
#if defined (USE_NUCLEO_H745ZI_Q) || defined (USE_NUCLEO_H743ZI2) || defined (USE_NUCLEO_H7A3ZI_Q) || defined (USE_NUCLEO_H723ZG)
|
||||
typedef enum
|
||||
{
|
||||
LED1 = 0,
|
||||
LED_GREEN = LED1,
|
||||
LED2 = 1,
|
||||
@ -90,7 +83,8 @@ typedef enum {
|
||||
LEDn
|
||||
}Led_TypeDef;
|
||||
#else /* USE_NUCLEO_H743ZI */
|
||||
typedef enum {
|
||||
typedef enum
|
||||
{
|
||||
LED1 = 0,
|
||||
LED_GREEN = LED1,
|
||||
LED2 = 1,
|
||||
@ -101,38 +95,55 @@ typedef enum {
|
||||
}Led_TypeDef;
|
||||
#endif
|
||||
|
||||
typedef enum { BUTTON_USER = 0U, BUTTONn } Button_TypeDef;
|
||||
typedef enum
|
||||
{
|
||||
BUTTON_USER = 0U,
|
||||
BUTTONn
|
||||
}Button_TypeDef;
|
||||
|
||||
typedef enum { BUTTON_MODE_GPIO = 0, BUTTON_MODE_EXTI = 1 } ButtonMode_TypeDef;
|
||||
typedef enum
|
||||
{
|
||||
BUTTON_MODE_GPIO = 0,
|
||||
BUTTON_MODE_EXTI = 1
|
||||
}ButtonMode_TypeDef;
|
||||
|
||||
#if (USE_BSP_COM_FEATURE > 0)
|
||||
typedef enum { COM1 = 0U, COMn } COM_TypeDef;
|
||||
typedef enum
|
||||
{
|
||||
COM1 = 0U,
|
||||
COMn
|
||||
}COM_TypeDef;
|
||||
|
||||
typedef enum {
|
||||
typedef enum
|
||||
{
|
||||
COM_STOPBITS_1 = UART_STOPBITS_1,
|
||||
COM_STOPBITS_2 = UART_STOPBITS_2,
|
||||
}COM_StopBitsTypeDef;
|
||||
|
||||
typedef enum {
|
||||
typedef enum
|
||||
{
|
||||
COM_PARITY_NONE = UART_PARITY_NONE,
|
||||
COM_PARITY_EVEN = UART_PARITY_EVEN,
|
||||
COM_PARITY_ODD = UART_PARITY_ODD,
|
||||
}COM_ParityTypeDef;
|
||||
|
||||
typedef enum {
|
||||
typedef enum
|
||||
{
|
||||
COM_HWCONTROL_NONE = UART_HWCONTROL_NONE,
|
||||
COM_HWCONTROL_RTS = UART_HWCONTROL_RTS,
|
||||
COM_HWCONTROL_CTS = UART_HWCONTROL_CTS,
|
||||
COM_HWCONTROL_RTS_CTS = UART_HWCONTROL_RTS_CTS,
|
||||
}COM_HwFlowCtlTypeDef;
|
||||
|
||||
typedef enum {
|
||||
typedef enum
|
||||
{
|
||||
COM_WORDLENGTH_7B = UART_WORDLENGTH_7B,
|
||||
COM_WORDLENGTH_8B = UART_WORDLENGTH_8B,
|
||||
COM_WORDLENGTH_9B = UART_WORDLENGTH_9B,
|
||||
}COM_WordLengthTypeDef;
|
||||
|
||||
typedef struct {
|
||||
typedef struct
|
||||
{
|
||||
uint32_t BaudRate;
|
||||
COM_WordLengthTypeDef WordLength;
|
||||
COM_StopBitsTypeDef StopBits;
|
||||
@ -141,7 +152,8 @@ typedef struct {
|
||||
}COM_InitTypeDef;
|
||||
|
||||
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
|
||||
typedef struct {
|
||||
typedef struct
|
||||
{
|
||||
void (* pMspInitCb)(UART_HandleTypeDef *);
|
||||
void (* pMspDeInitCb)(UART_HandleTypeDef *);
|
||||
}BSP_COM_Cb_t;
|
||||
@ -154,8 +166,7 @@ typedef struct {
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32H7XX_NUCLEO_LOW_LEVEL_Exported_Constants LOW LEVEL Exported
|
||||
* Constants
|
||||
/** @defgroup STM32H7XX_NUCLEO_LOW_LEVEL_Exported_Constants LOW LEVEL Exported Constants
|
||||
* @{
|
||||
*/
|
||||
|
||||
@ -165,13 +176,11 @@ typedef struct {
|
||||
#define STM32H7XX_NUCLEO_BSP_VERSION_MAIN (0x01U) /*!< [31:24] main version */
|
||||
#define STM32H7XX_NUCLEO_BSP_VERSION_SUB1 (0x03U) /*!< [23:16] sub1 version */
|
||||
#define STM32H7XX_NUCLEO_BSP_VERSION_SUB2 (0x00U) /*!< [15:8] sub2 version */
|
||||
#define STM32H7XX_NUCLEO_BSP_VERSION_RC (0x00U) /*!< [7:0] release candidate \
|
||||
*/
|
||||
#define STM32H7XX_NUCLEO_BSP_VERSION \
|
||||
((STM32H7XX_NUCLEO_BSP_VERSION_MAIN << 24) | \
|
||||
(STM32H7XX_NUCLEO_BSP_VERSION_SUB1 << 16) | \
|
||||
(STM32H7XX_NUCLEO_BSP_VERSION_SUB2 << 8) | \
|
||||
(STM32H7XX_NUCLEO_BSP_VERSION_RC))
|
||||
#define STM32H7XX_NUCLEO_BSP_VERSION_RC (0x00U) /*!< [7:0] release candidate */
|
||||
#define STM32H7XX_NUCLEO_BSP_VERSION ((STM32H7XX_NUCLEO_BSP_VERSION_MAIN << 24)\
|
||||
|(STM32H7XX_NUCLEO_BSP_VERSION_SUB1 << 16)\
|
||||
|(STM32H7XX_NUCLEO_BSP_VERSION_SUB2 << 8 )\
|
||||
|(STM32H7XX_NUCLEO_BSP_VERSION_RC))
|
||||
|
||||
/** @defgroup STM32H7XX_NUCLEO_LOW_LEVEL_LED LOW LEVEL LED
|
||||
* @{
|
||||
@ -183,8 +192,7 @@ typedef struct {
|
||||
#define LED1_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
|
||||
#define LED1_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
|
||||
|
||||
#if defined(USE_NUCLEO_H745ZI_Q) || defined(USE_NUCLEO_H743ZI2) || \
|
||||
defined(USE_NUCLEO_H7A3ZI_Q) || defined(USE_NUCLEO_H723ZG)
|
||||
#if defined (USE_NUCLEO_H745ZI_Q) || defined (USE_NUCLEO_H743ZI2) || defined (USE_NUCLEO_H7A3ZI_Q) || defined (USE_NUCLEO_H723ZG)
|
||||
#define LED2_PIN GPIO_PIN_1
|
||||
#define LED2_GPIO_PORT GPIOE
|
||||
#define LED2_GPIO_CLK_ENABLE() __HAL_RCC_GPIOE_CLK_ENABLE()
|
||||
@ -275,8 +283,7 @@ extern USART_TypeDef *COM_USART[];
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32H7XX_NUCLEO_LOW_LEVEL_Exported_FunctionsPrototypes LOW LEVEL
|
||||
* Exported Functions Prototypes
|
||||
/** @defgroup STM32H7XX_NUCLEO_LOW_LEVEL_Exported_FunctionsPrototypes LOW LEVEL Exported Functions Prototypes
|
||||
* @{
|
||||
*/
|
||||
int32_t BSP_GetVersion(void);
|
||||
@ -303,8 +310,7 @@ int32_t BSP_COM_SelectLogPort(COM_TypeDef COM);
|
||||
int32_t BSP_COM_RegisterDefaultMspCallbacks(COM_TypeDef COM);
|
||||
int32_t BSP_COM_RegisterMspCallbacks(COM_TypeDef COM , BSP_COM_Cb_t *Callback);
|
||||
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
|
||||
HAL_StatusTypeDef MX_USART3_Init(UART_HandleTypeDef *huart,
|
||||
MX_UART_InitTypeDef *COM_Init);
|
||||
HAL_StatusTypeDef MX_USART3_Init(UART_HandleTypeDef *huart, MX_UART_InitTypeDef *COM_Init);
|
||||
#endif /* USE_BSP_COM_FEATURE */
|
||||
|
||||
/**
|
||||
|
@ -26,8 +26,8 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32h743xx.h"
|
||||
#include "stm32h7xx_hal.h"
|
||||
#include "stm32h743xx.h"
|
||||
|
||||
/** @addtogroup BSP
|
||||
* @{
|
||||
|
@ -1,9 +1,9 @@
|
||||
target_sources(
|
||||
${TARGET_NAME}
|
||||
PRIVATE freertos.c
|
||||
target_sources(${TARGET_NAME} PRIVATE
|
||||
freertos.c
|
||||
hardware_init.cpp
|
||||
stm32h7xx_hal_timebase_tim.c
|
||||
stm32h7xx_nucleo.c
|
||||
lan8742.c
|
||||
stm32h7xx_it.c
|
||||
syscalls.c)
|
||||
syscalls.c
|
||||
)
|
@ -48,11 +48,13 @@
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "FreeRTOS.h"
|
||||
#include "portmacro.h"
|
||||
#include "task.h"
|
||||
#include "portmacro.h"
|
||||
|
||||
/* USER CODE BEGIN Includes */
|
||||
void vRequestContextSwitchFromISR() { portYIELD_FROM_ISR(pdTRUE); }
|
||||
void vRequestContextSwitchFromISR() {
|
||||
portYIELD_FROM_ISR(pdTRUE);
|
||||
}
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
|
@ -6,22 +6,23 @@
|
||||
#include "stm32h7xx_nucleo.h"
|
||||
|
||||
#if OBSW_ADD_LWIP_COMPONENTS == 1
|
||||
#include "example_common/stm32h7/networking/app_ethernet.h"
|
||||
#include <app_ethernet.h>
|
||||
#include "example_common/stm32h7/networking/ethernetif.h"
|
||||
#include "example_common/stm32h7/networking/app_ethernet.h"
|
||||
#include <lwip/netif.h>
|
||||
#include <lwip/init.h>
|
||||
#include <lwip/ip_addr.h>
|
||||
#include <lwip/netif.h>
|
||||
#include <netif/ethernet.h>
|
||||
#endif
|
||||
|
||||
#include <boardconfig.h>
|
||||
#include <cstdio>
|
||||
#include <stdio.h>
|
||||
|
||||
/* Forward declarations */
|
||||
void MPU_Config();
|
||||
void SystemClock_Config();
|
||||
void BSP_Config();
|
||||
void CPU_CACHE_Enable();
|
||||
void MPU_Config(void);
|
||||
void SystemClock_Config(void);
|
||||
void BSP_Config(void);
|
||||
void CPU_CACHE_Enable(void);
|
||||
void MX_USART3_UART_Init(uint32_t baudRate);
|
||||
|
||||
/**
|
||||
@ -54,7 +55,8 @@ void performHardwareInit() {
|
||||
|
||||
BSP_Config();
|
||||
}
|
||||
void MX_USART3_UART_Init(uint32_t baudRate) {
|
||||
void MX_USART3_UART_Init(uint32_t baudRate)
|
||||
{
|
||||
__HAL_RCC_USART3_CONFIG(RCC_USART3CLKSOURCE_HSI);
|
||||
__HAL_RCC_GPIOD_CLK_ENABLE();
|
||||
__HAL_RCC_USART3_CLK_ENABLE();
|
||||
@ -81,8 +83,7 @@ void MX_USART3_UART_Init(uint32_t baudRate) {
|
||||
//huart3.Init.TXFIFOThreshold = UART_TXFIFO_THRESHOLD_1_8;
|
||||
//huart3.Init.RXFIFOThreshold = UART_RXFIFO_THRESHOLD_1_8;
|
||||
huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
|
||||
// we can't do error handling (simple print out first) here because UART3 is
|
||||
// our print interface
|
||||
// we can't do error handling (simple print out first) here because UART3 is our print interface
|
||||
result = HAL_UART_Init(&huart3);
|
||||
if(result == HAL_OK) {
|
||||
//print_uart3("\rUART3 configured successfully !\r\n\0");
|
||||
@ -90,6 +91,7 @@ void MX_USART3_UART_Init(uint32_t baudRate) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief System Clock Configuration
|
||||
* The system Clock is configured as follow :
|
||||
@ -112,23 +114,21 @@ void MX_USART3_UART_Init(uint32_t baudRate) {
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void SystemClock_Config() {
|
||||
void SystemClock_Config(void)
|
||||
{
|
||||
RCC_ClkInitTypeDef RCC_ClkInitStruct;
|
||||
RCC_OscInitTypeDef RCC_OscInitStruct;
|
||||
HAL_StatusTypeDef ret = HAL_OK;
|
||||
|
||||
/*!< Supply configuration update enable */
|
||||
MODIFY_REG(PWR->CR3, PWR_CR3_SCUEN,
|
||||
0); // @suppress("Field cannot be resolved")
|
||||
MODIFY_REG(PWR->CR3, PWR_CR3_SCUEN, 0); // @suppress("Field cannot be resolved")
|
||||
|
||||
/* The voltage scaling allows optimizing the power consumption when the device
|
||||
is clocked below the maximum system frequency, to update the voltage scaling
|
||||
value regarding system frequency refer to product datasheet. */
|
||||
__HAL_PWR_VOLTAGESCALING_CONFIG(
|
||||
PWR_REGULATOR_VOLTAGE_SCALE1); // @suppress("Field cannot be resolved")
|
||||
/* The voltage scaling allows optimizing the power consumption when the device is
|
||||
clocked below the maximum system frequency, to update the voltage scaling value
|
||||
regarding system frequency refer to product datasheet. */
|
||||
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); // @suppress("Field cannot be resolved")
|
||||
|
||||
while (!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {
|
||||
} // @suppress("Field cannot be resolved")
|
||||
while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {} // @suppress("Field cannot be resolved")
|
||||
|
||||
/* Enable D2 domain SRAM3 Clock (0x30040000 AXI)*/
|
||||
__HAL_RCC_D2SRAM3_CLK_ENABLE(); // @suppress("Field cannot be resolved")
|
||||
@ -150,15 +150,15 @@ value regarding system frequency refer to product datasheet. */
|
||||
RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;
|
||||
RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2;
|
||||
ret = HAL_RCC_OscConfig(&RCC_OscInitStruct);
|
||||
if (ret != HAL_OK) {
|
||||
while (1)
|
||||
;
|
||||
if(ret != HAL_OK)
|
||||
{
|
||||
while(1);
|
||||
}
|
||||
|
||||
/* Select PLL as system clock source and configure bus clocks dividers */
|
||||
RCC_ClkInitStruct.ClockType =
|
||||
(RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_D1PCLK1 |
|
||||
RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2 | RCC_CLOCKTYPE_D3PCLK1);
|
||||
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK |
|
||||
RCC_CLOCKTYPE_D1PCLK1 | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2 |
|
||||
RCC_CLOCKTYPE_D3PCLK1);
|
||||
|
||||
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
||||
RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
|
||||
@ -168,14 +168,15 @@ value regarding system frequency refer to product datasheet. */
|
||||
RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;
|
||||
RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;
|
||||
ret = HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4);
|
||||
if (ret != HAL_OK) {
|
||||
while (1)
|
||||
;
|
||||
if(ret != HAL_OK)
|
||||
{
|
||||
while(1);
|
||||
}
|
||||
}
|
||||
|
||||
/*Configure the MPU attributes */
|
||||
void MPU_Config() {
|
||||
void MPU_Config(void)
|
||||
{
|
||||
MPU_Region_InitTypeDef MPU_InitStruct;
|
||||
|
||||
/* Disable the MPU */
|
||||
@ -218,7 +219,8 @@ for LwIP RAM heap which contains the Tx buffers */
|
||||
}
|
||||
|
||||
/*CPU L1-Cache enable*/
|
||||
void CPU_CACHE_Enable() {
|
||||
void CPU_CACHE_Enable(void)
|
||||
{
|
||||
/* Enable I-Cache */
|
||||
SCB_EnableICache();
|
||||
|
||||
@ -226,7 +228,8 @@ void CPU_CACHE_Enable() {
|
||||
SCB_EnableDCache();
|
||||
}
|
||||
|
||||
void BSP_Config() {
|
||||
void BSP_Config(void)
|
||||
{
|
||||
BSP_LED_Init(LED1);
|
||||
BSP_LED_Init(LED2);
|
||||
BSP_LED_Init(LED3);
|
||||
@ -234,7 +237,8 @@ void BSP_Config() {
|
||||
|
||||
#if OBSW_ADD_LWIP_COMPONENTS == 1
|
||||
|
||||
void Netif_Config(void) {
|
||||
void Netif_Config(void)
|
||||
{
|
||||
ip_addr_t ipaddr;
|
||||
ip_addr_t netmask;
|
||||
ip_addr_t gw;
|
||||
@ -250,10 +254,10 @@ void Netif_Config(void) {
|
||||
#endif
|
||||
|
||||
/* add the network interface */
|
||||
struct netif *netif_valid =
|
||||
netif_add(&gnetif, (ip4_addr_t *)&ipaddr, (ip4_addr_t *)&netmask,
|
||||
(ip4_addr_t *)&gw, nullptr, ðernetif_init, ðernet_input);
|
||||
if (netif_valid == nullptr) {
|
||||
struct netif* netif_valid = netif_add(&gnetif, (ip4_addr_t*)&ipaddr,
|
||||
(ip4_addr_t*)&netmask, (ip4_addr_t*) &gw, NULL, ðernetif_init,
|
||||
ðernet_input);
|
||||
if(netif_valid == NULL) {
|
||||
printf("Error: netif initialization failed!\n\r");
|
||||
return;
|
||||
}
|
||||
@ -268,3 +272,4 @@ void Netif_Config(void) {
|
||||
}
|
||||
|
||||
#endif /* OBSW_ADD_LWIP_COMPONENTS == 1 */
|
||||
|
||||
|
@ -60,8 +60,10 @@
|
||||
* @retval LAN8742_STATUS_OK if OK
|
||||
* LAN8742_STATUS_ERROR if missing mandatory function
|
||||
*/
|
||||
int32_t LAN8742_RegisterBusIO(lan8742_Object_t *pObj, lan8742_IOCtx_t *ioctx) {
|
||||
if (!pObj || !ioctx->ReadReg || !ioctx->WriteReg || !ioctx->GetTick) {
|
||||
int32_t LAN8742_RegisterBusIO(lan8742_Object_t *pObj, lan8742_IOCtx_t *ioctx)
|
||||
{
|
||||
if(!pObj || !ioctx->ReadReg || !ioctx->WriteReg || !ioctx->GetTick)
|
||||
{
|
||||
return LAN8742_STATUS_ERROR;
|
||||
}
|
||||
|
||||
@ -83,12 +85,15 @@ int32_t LAN8742_RegisterBusIO(lan8742_Object_t *pObj, lan8742_IOCtx_t *ioctx) {
|
||||
* LAN8742_STATUS_WRITE_ERROR if connot write to register
|
||||
* LAN8742_STATUS_RESET_TIMEOUT if cannot perform a software reset
|
||||
*/
|
||||
int32_t LAN8742_Init(lan8742_Object_t *pObj) {
|
||||
int32_t LAN8742_Init(lan8742_Object_t *pObj)
|
||||
{
|
||||
uint32_t tickstart = 0, regvalue = 0, addr = 0;
|
||||
int32_t status = LAN8742_STATUS_OK;
|
||||
|
||||
if (pObj->Is_Initialized == 0) {
|
||||
if (pObj->IO.Init != 0) {
|
||||
if(pObj->Is_Initialized == 0)
|
||||
{
|
||||
if(pObj->IO.Init != 0)
|
||||
{
|
||||
/* GPIO and Clocks initialization */
|
||||
pObj->IO.Init();
|
||||
}
|
||||
@ -97,60 +102,77 @@ int32_t LAN8742_Init(lan8742_Object_t *pObj) {
|
||||
pObj->DevAddr = LAN8742_MAX_DEV_ADDR + 1;
|
||||
|
||||
/* Get the device address from special mode register */
|
||||
for (addr = 0; addr <= LAN8742_MAX_DEV_ADDR; addr++) {
|
||||
if (pObj->IO.ReadReg(addr, LAN8742_SMR, ®value) < 0) {
|
||||
for(addr = 0; addr <= LAN8742_MAX_DEV_ADDR; addr ++)
|
||||
{
|
||||
if(pObj->IO.ReadReg(addr, LAN8742_SMR, ®value) < 0)
|
||||
{
|
||||
status = LAN8742_STATUS_READ_ERROR;
|
||||
/* Can't read from this device address
|
||||
continue with next address */
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((regvalue & LAN8742_SMR_PHY_ADDR) == addr) {
|
||||
if((regvalue & LAN8742_SMR_PHY_ADDR) == addr)
|
||||
{
|
||||
pObj->DevAddr = addr;
|
||||
status = LAN8742_STATUS_OK;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (pObj->DevAddr > LAN8742_MAX_DEV_ADDR) {
|
||||
if(pObj->DevAddr > LAN8742_MAX_DEV_ADDR)
|
||||
{
|
||||
status = LAN8742_STATUS_ADDRESS_ERROR;
|
||||
}
|
||||
|
||||
/* if device address is matched */
|
||||
if (status == LAN8742_STATUS_OK) {
|
||||
if(status == LAN8742_STATUS_OK)
|
||||
{
|
||||
/* set a software reset */
|
||||
if (pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR,
|
||||
LAN8742_BCR_SOFT_RESET) >= 0) {
|
||||
if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, LAN8742_BCR_SOFT_RESET) >= 0)
|
||||
{
|
||||
/* get software reset status */
|
||||
if (pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, ®value) >= 0) {
|
||||
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, ®value) >= 0)
|
||||
{
|
||||
tickstart = pObj->IO.GetTick();
|
||||
|
||||
/* wait until software reset is done or timeout occured */
|
||||
while (regvalue & LAN8742_BCR_SOFT_RESET) {
|
||||
if ((pObj->IO.GetTick() - tickstart) <= LAN8742_SW_RESET_TO) {
|
||||
if (pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, ®value) < 0) {
|
||||
while(regvalue & LAN8742_BCR_SOFT_RESET)
|
||||
{
|
||||
if((pObj->IO.GetTick() - tickstart) <= LAN8742_SW_RESET_TO)
|
||||
{
|
||||
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, ®value) < 0)
|
||||
{
|
||||
status = LAN8742_STATUS_READ_ERROR;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
status = LAN8742_STATUS_RESET_TIMEOUT;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
status = LAN8742_STATUS_READ_ERROR;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
status = LAN8742_STATUS_WRITE_ERROR;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (status == LAN8742_STATUS_OK) {
|
||||
if(status == LAN8742_STATUS_OK)
|
||||
{
|
||||
tickstart = pObj->IO.GetTick();
|
||||
|
||||
/* Wait for 2s to perform initialization */
|
||||
while ((pObj->IO.GetTick() - tickstart) <= LAN8742_INIT_TO) {
|
||||
while((pObj->IO.GetTick() - tickstart) <= LAN8742_INIT_TO)
|
||||
{
|
||||
}
|
||||
pObj->Is_Initialized = 1;
|
||||
}
|
||||
@ -163,10 +185,14 @@ int32_t LAN8742_Init(lan8742_Object_t *pObj) {
|
||||
* @param pObj: device object LAN8742_Object_t.
|
||||
* @retval None
|
||||
*/
|
||||
int32_t LAN8742_DeInit(lan8742_Object_t *pObj) {
|
||||
if (pObj->Is_Initialized) {
|
||||
if (pObj->IO.DeInit != 0) {
|
||||
if (pObj->IO.DeInit() < 0) {
|
||||
int32_t LAN8742_DeInit(lan8742_Object_t *pObj)
|
||||
{
|
||||
if(pObj->Is_Initialized)
|
||||
{
|
||||
if(pObj->IO.DeInit != 0)
|
||||
{
|
||||
if(pObj->IO.DeInit() < 0)
|
||||
{
|
||||
return LAN8742_STATUS_ERROR;
|
||||
}
|
||||
}
|
||||
@ -184,18 +210,23 @@ int32_t LAN8742_DeInit(lan8742_Object_t *pObj) {
|
||||
* LAN8742_STATUS_READ_ERROR if connot read register
|
||||
* LAN8742_STATUS_WRITE_ERROR if connot write to register
|
||||
*/
|
||||
int32_t LAN8742_DisablePowerDownMode(lan8742_Object_t *pObj) {
|
||||
int32_t LAN8742_DisablePowerDownMode(lan8742_Object_t *pObj)
|
||||
{
|
||||
uint32_t readval = 0;
|
||||
int32_t status = LAN8742_STATUS_OK;
|
||||
|
||||
if (pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) >= 0) {
|
||||
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) >= 0)
|
||||
{
|
||||
readval &= ~LAN8742_BCR_POWER_DOWN;
|
||||
|
||||
/* Apply configuration */
|
||||
if (pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, readval) < 0) {
|
||||
if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, readval) < 0)
|
||||
{
|
||||
status = LAN8742_STATUS_WRITE_ERROR;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
status = LAN8742_STATUS_READ_ERROR;
|
||||
}
|
||||
|
||||
@ -209,18 +240,23 @@ int32_t LAN8742_DisablePowerDownMode(lan8742_Object_t *pObj) {
|
||||
* LAN8742_STATUS_READ_ERROR if connot read register
|
||||
* LAN8742_STATUS_WRITE_ERROR if connot write to register
|
||||
*/
|
||||
int32_t LAN8742_EnablePowerDownMode(lan8742_Object_t *pObj) {
|
||||
int32_t LAN8742_EnablePowerDownMode(lan8742_Object_t *pObj)
|
||||
{
|
||||
uint32_t readval = 0;
|
||||
int32_t status = LAN8742_STATUS_OK;
|
||||
|
||||
if (pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) >= 0) {
|
||||
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) >= 0)
|
||||
{
|
||||
readval |= LAN8742_BCR_POWER_DOWN;
|
||||
|
||||
/* Apply configuration */
|
||||
if (pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, readval) < 0) {
|
||||
if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, readval) < 0)
|
||||
{
|
||||
status = LAN8742_STATUS_WRITE_ERROR;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
status = LAN8742_STATUS_READ_ERROR;
|
||||
}
|
||||
|
||||
@ -234,18 +270,23 @@ int32_t LAN8742_EnablePowerDownMode(lan8742_Object_t *pObj) {
|
||||
* LAN8742_STATUS_READ_ERROR if connot read register
|
||||
* LAN8742_STATUS_WRITE_ERROR if connot write to register
|
||||
*/
|
||||
int32_t LAN8742_StartAutoNego(lan8742_Object_t *pObj) {
|
||||
int32_t LAN8742_StartAutoNego(lan8742_Object_t *pObj)
|
||||
{
|
||||
uint32_t readval = 0;
|
||||
int32_t status = LAN8742_STATUS_OK;
|
||||
|
||||
if (pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) >= 0) {
|
||||
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) >= 0)
|
||||
{
|
||||
readval |= LAN8742_BCR_AUTONEGO_EN;
|
||||
|
||||
/* Apply configuration */
|
||||
if (pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, readval) < 0) {
|
||||
if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, readval) < 0)
|
||||
{
|
||||
status = LAN8742_STATUS_WRITE_ERROR;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
status = LAN8742_STATUS_READ_ERROR;
|
||||
}
|
||||
|
||||
@ -265,61 +306,80 @@ int32_t LAN8742_StartAutoNego(lan8742_Object_t *pObj) {
|
||||
* LAN8742_STATUS_READ_ERROR if connot read register
|
||||
* LAN8742_STATUS_WRITE_ERROR if connot write to register
|
||||
*/
|
||||
int32_t LAN8742_GetLinkState(lan8742_Object_t *pObj) {
|
||||
int32_t LAN8742_GetLinkState(lan8742_Object_t *pObj)
|
||||
{
|
||||
uint32_t readval = 0;
|
||||
|
||||
/* Read Status register */
|
||||
if (pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BSR, &readval) < 0) {
|
||||
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BSR, &readval) < 0)
|
||||
{
|
||||
return LAN8742_STATUS_READ_ERROR;
|
||||
}
|
||||
|
||||
/* Read Status register again */
|
||||
if (pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BSR, &readval) < 0) {
|
||||
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BSR, &readval) < 0)
|
||||
{
|
||||
return LAN8742_STATUS_READ_ERROR;
|
||||
}
|
||||
|
||||
if ((readval & LAN8742_BSR_LINK_STATUS) == 0) {
|
||||
if((readval & LAN8742_BSR_LINK_STATUS) == 0)
|
||||
{
|
||||
/* Return Link Down status */
|
||||
return LAN8742_STATUS_LINK_DOWN;
|
||||
}
|
||||
|
||||
/* Check Auto negotiaition */
|
||||
if (pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) < 0) {
|
||||
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) < 0)
|
||||
{
|
||||
return LAN8742_STATUS_READ_ERROR;
|
||||
}
|
||||
|
||||
if ((readval & LAN8742_BCR_AUTONEGO_EN) != LAN8742_BCR_AUTONEGO_EN) {
|
||||
if (((readval & LAN8742_BCR_SPEED_SELECT) == LAN8742_BCR_SPEED_SELECT) &&
|
||||
((readval & LAN8742_BCR_DUPLEX_MODE) == LAN8742_BCR_DUPLEX_MODE)) {
|
||||
if((readval & LAN8742_BCR_AUTONEGO_EN) != LAN8742_BCR_AUTONEGO_EN)
|
||||
{
|
||||
if(((readval & LAN8742_BCR_SPEED_SELECT) == LAN8742_BCR_SPEED_SELECT) && ((readval & LAN8742_BCR_DUPLEX_MODE) == LAN8742_BCR_DUPLEX_MODE))
|
||||
{
|
||||
return LAN8742_STATUS_100MBITS_FULLDUPLEX;
|
||||
} else if ((readval & LAN8742_BCR_SPEED_SELECT) ==
|
||||
LAN8742_BCR_SPEED_SELECT) {
|
||||
}
|
||||
else if ((readval & LAN8742_BCR_SPEED_SELECT) == LAN8742_BCR_SPEED_SELECT)
|
||||
{
|
||||
return LAN8742_STATUS_100MBITS_HALFDUPLEX;
|
||||
} else if ((readval & LAN8742_BCR_DUPLEX_MODE) == LAN8742_BCR_DUPLEX_MODE) {
|
||||
}
|
||||
else if ((readval & LAN8742_BCR_DUPLEX_MODE) == LAN8742_BCR_DUPLEX_MODE)
|
||||
{
|
||||
return LAN8742_STATUS_10MBITS_FULLDUPLEX;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
return LAN8742_STATUS_10MBITS_HALFDUPLEX;
|
||||
}
|
||||
} else /* Auto Nego enabled */
|
||||
}
|
||||
else /* Auto Nego enabled */
|
||||
{
|
||||
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_PHYSCSR, &readval) < 0)
|
||||
{
|
||||
if (pObj->IO.ReadReg(pObj->DevAddr, LAN8742_PHYSCSR, &readval) < 0) {
|
||||
return LAN8742_STATUS_READ_ERROR;
|
||||
}
|
||||
|
||||
/* Check if auto nego not done */
|
||||
if ((readval & LAN8742_PHYSCSR_AUTONEGO_DONE) == 0) {
|
||||
if((readval & LAN8742_PHYSCSR_AUTONEGO_DONE) == 0)
|
||||
{
|
||||
return LAN8742_STATUS_AUTONEGO_NOTDONE;
|
||||
}
|
||||
|
||||
if ((readval & LAN8742_PHYSCSR_HCDSPEEDMASK) == LAN8742_PHYSCSR_100BTX_FD) {
|
||||
if((readval & LAN8742_PHYSCSR_HCDSPEEDMASK) == LAN8742_PHYSCSR_100BTX_FD)
|
||||
{
|
||||
return LAN8742_STATUS_100MBITS_FULLDUPLEX;
|
||||
} else if ((readval & LAN8742_PHYSCSR_HCDSPEEDMASK) ==
|
||||
LAN8742_PHYSCSR_100BTX_HD) {
|
||||
}
|
||||
else if ((readval & LAN8742_PHYSCSR_HCDSPEEDMASK) == LAN8742_PHYSCSR_100BTX_HD)
|
||||
{
|
||||
return LAN8742_STATUS_100MBITS_HALFDUPLEX;
|
||||
} else if ((readval & LAN8742_PHYSCSR_HCDSPEEDMASK) ==
|
||||
LAN8742_PHYSCSR_10BT_FD) {
|
||||
}
|
||||
else if ((readval & LAN8742_PHYSCSR_HCDSPEEDMASK) == LAN8742_PHYSCSR_10BT_FD)
|
||||
{
|
||||
return LAN8742_STATUS_10MBITS_FULLDUPLEX;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
return LAN8742_STATUS_10MBITS_HALFDUPLEX;
|
||||
}
|
||||
}
|
||||
@ -338,32 +398,44 @@ int32_t LAN8742_GetLinkState(lan8742_Object_t *pObj) {
|
||||
* LAN8742_STATUS_READ_ERROR if connot read register
|
||||
* LAN8742_STATUS_WRITE_ERROR if connot write to register
|
||||
*/
|
||||
int32_t LAN8742_SetLinkState(lan8742_Object_t *pObj, uint32_t LinkState) {
|
||||
int32_t LAN8742_SetLinkState(lan8742_Object_t *pObj, uint32_t LinkState)
|
||||
{
|
||||
uint32_t bcrvalue = 0;
|
||||
int32_t status = LAN8742_STATUS_OK;
|
||||
|
||||
if (pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &bcrvalue) >= 0) {
|
||||
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &bcrvalue) >= 0)
|
||||
{
|
||||
/* Disable link config (Auto nego, speed and duplex) */
|
||||
bcrvalue &= ~(LAN8742_BCR_AUTONEGO_EN | LAN8742_BCR_SPEED_SELECT |
|
||||
LAN8742_BCR_DUPLEX_MODE);
|
||||
bcrvalue &= ~(LAN8742_BCR_AUTONEGO_EN | LAN8742_BCR_SPEED_SELECT | LAN8742_BCR_DUPLEX_MODE);
|
||||
|
||||
if (LinkState == LAN8742_STATUS_100MBITS_FULLDUPLEX) {
|
||||
if(LinkState == LAN8742_STATUS_100MBITS_FULLDUPLEX)
|
||||
{
|
||||
bcrvalue |= (LAN8742_BCR_SPEED_SELECT | LAN8742_BCR_DUPLEX_MODE);
|
||||
} else if (LinkState == LAN8742_STATUS_100MBITS_HALFDUPLEX) {
|
||||
}
|
||||
else if (LinkState == LAN8742_STATUS_100MBITS_HALFDUPLEX)
|
||||
{
|
||||
bcrvalue |= LAN8742_BCR_SPEED_SELECT;
|
||||
} else if (LinkState == LAN8742_STATUS_10MBITS_FULLDUPLEX) {
|
||||
}
|
||||
else if (LinkState == LAN8742_STATUS_10MBITS_FULLDUPLEX)
|
||||
{
|
||||
bcrvalue |= LAN8742_BCR_DUPLEX_MODE;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Wrong link status parameter */
|
||||
status = LAN8742_STATUS_ERROR;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
status = LAN8742_STATUS_READ_ERROR;
|
||||
}
|
||||
|
||||
if (status == LAN8742_STATUS_OK) {
|
||||
if(status == LAN8742_STATUS_OK)
|
||||
{
|
||||
/* Apply configuration */
|
||||
if (pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, bcrvalue) < 0) {
|
||||
if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, bcrvalue) < 0)
|
||||
{
|
||||
status = LAN8742_STATUS_WRITE_ERROR;
|
||||
}
|
||||
}
|
||||
@ -378,18 +450,23 @@ int32_t LAN8742_SetLinkState(lan8742_Object_t *pObj, uint32_t LinkState) {
|
||||
* LAN8742_STATUS_READ_ERROR if connot read register
|
||||
* LAN8742_STATUS_WRITE_ERROR if connot write to register
|
||||
*/
|
||||
int32_t LAN8742_EnableLoopbackMode(lan8742_Object_t *pObj) {
|
||||
int32_t LAN8742_EnableLoopbackMode(lan8742_Object_t *pObj)
|
||||
{
|
||||
uint32_t readval = 0;
|
||||
int32_t status = LAN8742_STATUS_OK;
|
||||
|
||||
if (pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) >= 0) {
|
||||
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) >= 0)
|
||||
{
|
||||
readval |= LAN8742_BCR_LOOPBACK;
|
||||
|
||||
/* Apply configuration */
|
||||
if (pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, readval) < 0) {
|
||||
if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, readval) < 0)
|
||||
{
|
||||
status = LAN8742_STATUS_WRITE_ERROR;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
status = LAN8742_STATUS_READ_ERROR;
|
||||
}
|
||||
|
||||
@ -403,18 +480,23 @@ int32_t LAN8742_EnableLoopbackMode(lan8742_Object_t *pObj) {
|
||||
* LAN8742_STATUS_READ_ERROR if connot read register
|
||||
* LAN8742_STATUS_WRITE_ERROR if connot write to register
|
||||
*/
|
||||
int32_t LAN8742_DisableLoopbackMode(lan8742_Object_t *pObj) {
|
||||
int32_t LAN8742_DisableLoopbackMode(lan8742_Object_t *pObj)
|
||||
{
|
||||
uint32_t readval = 0;
|
||||
int32_t status = LAN8742_STATUS_OK;
|
||||
|
||||
if (pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) >= 0) {
|
||||
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) >= 0)
|
||||
{
|
||||
readval &= ~LAN8742_BCR_LOOPBACK;
|
||||
|
||||
/* Apply configuration */
|
||||
if (pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, readval) < 0) {
|
||||
if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, readval) < 0)
|
||||
{
|
||||
status = LAN8742_STATUS_WRITE_ERROR;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
status = LAN8742_STATUS_READ_ERROR;
|
||||
}
|
||||
|
||||
@ -438,18 +520,23 @@ int32_t LAN8742_DisableLoopbackMode(lan8742_Object_t *pObj) {
|
||||
* LAN8742_STATUS_READ_ERROR if connot read register
|
||||
* LAN8742_STATUS_WRITE_ERROR if connot write to register
|
||||
*/
|
||||
int32_t LAN8742_EnableIT(lan8742_Object_t *pObj, uint32_t Interrupt) {
|
||||
int32_t LAN8742_EnableIT(lan8742_Object_t *pObj, uint32_t Interrupt)
|
||||
{
|
||||
uint32_t readval = 0;
|
||||
int32_t status = LAN8742_STATUS_OK;
|
||||
|
||||
if (pObj->IO.ReadReg(pObj->DevAddr, LAN8742_IMR, &readval) >= 0) {
|
||||
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_IMR, &readval) >= 0)
|
||||
{
|
||||
readval |= Interrupt;
|
||||
|
||||
/* Apply configuration */
|
||||
if (pObj->IO.WriteReg(pObj->DevAddr, LAN8742_IMR, readval) < 0) {
|
||||
if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_IMR, readval) < 0)
|
||||
{
|
||||
status = LAN8742_STATUS_WRITE_ERROR;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
status = LAN8742_STATUS_READ_ERROR;
|
||||
}
|
||||
|
||||
@ -473,18 +560,23 @@ int32_t LAN8742_EnableIT(lan8742_Object_t *pObj, uint32_t Interrupt) {
|
||||
* LAN8742_STATUS_READ_ERROR if connot read register
|
||||
* LAN8742_STATUS_WRITE_ERROR if connot write to register
|
||||
*/
|
||||
int32_t LAN8742_DisableIT(lan8742_Object_t *pObj, uint32_t Interrupt) {
|
||||
int32_t LAN8742_DisableIT(lan8742_Object_t *pObj, uint32_t Interrupt)
|
||||
{
|
||||
uint32_t readval = 0;
|
||||
int32_t status = LAN8742_STATUS_OK;
|
||||
|
||||
if (pObj->IO.ReadReg(pObj->DevAddr, LAN8742_IMR, &readval) >= 0) {
|
||||
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_IMR, &readval) >= 0)
|
||||
{
|
||||
readval &= ~Interrupt;
|
||||
|
||||
/* Apply configuration */
|
||||
if (pObj->IO.WriteReg(pObj->DevAddr, LAN8742_IMR, readval) < 0) {
|
||||
if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_IMR, readval) < 0)
|
||||
{
|
||||
status = LAN8742_STATUS_WRITE_ERROR;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
status = LAN8742_STATUS_READ_ERROR;
|
||||
}
|
||||
|
||||
@ -507,11 +599,13 @@ int32_t LAN8742_DisableIT(lan8742_Object_t *pObj, uint32_t Interrupt) {
|
||||
* @retval LAN8742_STATUS_OK if OK
|
||||
* LAN8742_STATUS_READ_ERROR if connot read register
|
||||
*/
|
||||
int32_t LAN8742_ClearIT(lan8742_Object_t *pObj, uint32_t Interrupt) {
|
||||
int32_t LAN8742_ClearIT(lan8742_Object_t *pObj, uint32_t Interrupt)
|
||||
{
|
||||
uint32_t readval = 0;
|
||||
int32_t status = LAN8742_STATUS_OK;
|
||||
|
||||
if (pObj->IO.ReadReg(pObj->DevAddr, LAN8742_ISFR, &readval) < 0) {
|
||||
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_ISFR, &readval) < 0)
|
||||
{
|
||||
status = LAN8742_STATUS_READ_ERROR;
|
||||
}
|
||||
|
||||
@ -535,13 +629,17 @@ int32_t LAN8742_ClearIT(lan8742_Object_t *pObj, uint32_t Interrupt) {
|
||||
* 0 IT flag is RESET
|
||||
* LAN8742_STATUS_READ_ERROR if connot read register
|
||||
*/
|
||||
int32_t LAN8742_GetITStatus(lan8742_Object_t *pObj, uint32_t Interrupt) {
|
||||
int32_t LAN8742_GetITStatus(lan8742_Object_t *pObj, uint32_t Interrupt)
|
||||
{
|
||||
uint32_t readval = 0;
|
||||
int32_t status = 0;
|
||||
|
||||
if (pObj->IO.ReadReg(pObj->DevAddr, LAN8742_ISFR, &readval) >= 0) {
|
||||
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_ISFR, &readval) >= 0)
|
||||
{
|
||||
status = ((readval & Interrupt) == Interrupt);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
status = LAN8742_STATUS_READ_ERROR;
|
||||
}
|
||||
|
||||
|
@ -4,40 +4,37 @@
|
||||
* @author MCD Application Team
|
||||
* @brief HAL time base based on the hardware TIM.
|
||||
*
|
||||
* This file overrides the native HAL time base functions (defined as
|
||||
*weak) the TIM time base:
|
||||
* + Intializes the TIM peripheral generate a Period elapsed Event
|
||||
*each 1ms
|
||||
* + HAL_IncTick is called inside HAL_TIM_PeriodElapsedCallback ie
|
||||
*each 1ms
|
||||
* This file overrides the native HAL time base functions (defined as weak)
|
||||
* the TIM time base:
|
||||
* + Intializes the TIM peripheral generate a Period elapsed Event each 1ms
|
||||
* + HAL_IncTick is called inside HAL_TIM_PeriodElapsedCallback ie each 1ms
|
||||
*
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
*modification, are permitted provided that the following conditions are met:
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
*notice, this list of conditions and the following disclaimer in the
|
||||
*documentation and/or other materials provided with the distribution.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
*ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
*LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
*CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
*SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
*INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
*CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
*ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
*POSSIBILITY OF SUCH DAMAGE.
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
@ -58,13 +55,13 @@ void TIM6_DAC_IRQHandler(void);
|
||||
* @brief This function configures the TIM6 as a time base source.
|
||||
* The time source is configured to have 1ms time base with a dedicated
|
||||
* Tick interrupt priority.
|
||||
* @note This function is called automatically at the beginning of program
|
||||
* after reset by HAL_Init() or at any time when clock is configured, by
|
||||
* HAL_RCC_ClockConfig().
|
||||
* @note This function is called automatically at the beginning of program after
|
||||
* reset by HAL_Init() or at any time when clock is configured, by HAL_RCC_ClockConfig().
|
||||
* @param TickPriority: Tick interrupt priority.
|
||||
* @retval HAL status
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) {
|
||||
HAL_StatusTypeDef HAL_InitTick (uint32_t TickPriority)
|
||||
{
|
||||
RCC_ClkInitTypeDef clkconfig;
|
||||
uint32_t uwTimclock, uwAPB1Prescaler = 0U;
|
||||
uint32_t uwPrescalerValue = 0U;
|
||||
@ -86,9 +83,12 @@ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) {
|
||||
uwAPB1Prescaler = clkconfig.APB1CLKDivider;
|
||||
|
||||
/* Compute TIM6 clock */
|
||||
if (uwAPB1Prescaler == RCC_HCLK_DIV1) {
|
||||
if (uwAPB1Prescaler == RCC_HCLK_DIV1)
|
||||
{
|
||||
uwTimclock = HAL_RCC_GetPCLK1Freq();
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
uwTimclock = 2*HAL_RCC_GetPCLK1Freq();
|
||||
}
|
||||
|
||||
@ -108,7 +108,8 @@ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) {
|
||||
TimHandle.Init.Prescaler = uwPrescalerValue;
|
||||
TimHandle.Init.ClockDivision = 0;
|
||||
TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||
if (HAL_TIM_Base_Init(&TimHandle) == HAL_OK) {
|
||||
if(HAL_TIM_Base_Init(&TimHandle) == HAL_OK)
|
||||
{
|
||||
/* Start the TIM time Base generation in interrupt mode */
|
||||
return HAL_TIM_Base_Start_IT(&TimHandle);
|
||||
}
|
||||
@ -123,7 +124,8 @@ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) {
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_SuspendTick(void) {
|
||||
void HAL_SuspendTick(void)
|
||||
{
|
||||
/* Disable TIM6 update Interrupt */
|
||||
__HAL_TIM_DISABLE_IT(&TimHandle, TIM_IT_UPDATE);
|
||||
}
|
||||
@ -134,7 +136,8 @@ void HAL_SuspendTick(void) {
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_ResumeTick(void) {
|
||||
void HAL_ResumeTick(void)
|
||||
{
|
||||
/* Enable TIM6 Update interrupt */
|
||||
__HAL_TIM_ENABLE_IT(&TimHandle, TIM_IT_UPDATE);
|
||||
}
|
||||
@ -147,13 +150,19 @@ void HAL_ResumeTick(void) {
|
||||
* @param htim : TIM handle
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { HAL_IncTick(); }
|
||||
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
|
||||
{
|
||||
HAL_IncTick();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles TIM interrupt request.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void TIM6_DAC_IRQHandler(void) { HAL_TIM_IRQHandler(&TimHandle); }
|
||||
void TIM6_DAC_IRQHandler(void)
|
||||
{
|
||||
HAL_TIM_IRQHandler(&TimHandle);
|
||||
}
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||
|
@ -8,35 +8,34 @@
|
||||
*
|
||||
* <h2><center>© COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
*modification, are permitted provided that the following conditions are met:
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
*notice, this list of conditions and the following disclaimer in the
|
||||
*documentation and/or other materials provided with the distribution.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
*ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
*LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
*CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
*SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
*INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
*CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
*ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
*POSSIBILITY OF SUCH DAMAGE.
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32h7xx_it.h"
|
||||
#include "OBSWConfig.h"
|
||||
#include "stm32h7xx_it.h"
|
||||
|
||||
#include "cmsis_os.h"
|
||||
#include "main.h"
|
||||
@ -62,16 +61,20 @@ void ETH_IRQHandler(void);
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void NMI_Handler(void) {}
|
||||
void NMI_Handler(void)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Hard Fault exception.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void HardFault_Handler(void) {
|
||||
void HardFault_Handler(void)
|
||||
{
|
||||
/* Go to infinite loop when Hard Fault exception occurs */
|
||||
while (1) {
|
||||
while (1)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
@ -80,9 +83,11 @@ void HardFault_Handler(void) {
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void MemManage_Handler(void) {
|
||||
void MemManage_Handler(void)
|
||||
{
|
||||
/* Go to infinite loop when Memory Manage exception occurs */
|
||||
while (1) {
|
||||
while (1)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
@ -91,9 +96,11 @@ void MemManage_Handler(void) {
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void BusFault_Handler(void) {
|
||||
void BusFault_Handler(void)
|
||||
{
|
||||
/* Go to infinite loop when Bus Fault exception occurs */
|
||||
while (1) {
|
||||
while (1)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
@ -102,25 +109,34 @@ void BusFault_Handler(void) {
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void UsageFault_Handler(void) {
|
||||
void UsageFault_Handler(void)
|
||||
{
|
||||
/* Go to infinite loop when Usage Fault exception occurs */
|
||||
while (1) {
|
||||
while (1)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief This function handles Debug Monitor exception.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void DebugMon_Handler(void) {}
|
||||
void DebugMon_Handler(void)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles SysTick Handler.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void SysTick_Handler(void) { osSystickHandler(); }
|
||||
void SysTick_Handler(void)
|
||||
{
|
||||
osSystickHandler();
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* STM32H7xx Peripherals Interrupt Handlers */
|
||||
@ -133,12 +149,14 @@ void SysTick_Handler(void) { osSystickHandler(); }
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void ETH_IRQHandler(void) {
|
||||
void ETH_IRQHandler(void)
|
||||
{
|
||||
#if OBSW_ADD_LWIP_COMPONENTS == 1
|
||||
HAL_ETH_IRQHandler(&EthHandle);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
@ -31,13 +31,12 @@
|
||||
*/
|
||||
|
||||
/** @addtogroup STM32H7XX_NUCLEO_LOW_LEVEL
|
||||
* @brief This file provides set of firmware functions to manage Leds and
|
||||
* push-button available on STM32H7xx-Nucleo Kit from STMicroelectronics.
|
||||
* @brief This file provides set of firmware functions to manage Leds and push-button
|
||||
* available on STM32H7xx-Nucleo Kit from STMicroelectronics.
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup STM32H7XX_NUCLEO_LOW_LEVEL_Private_Defines LOW LEVEL Private
|
||||
* Defines
|
||||
/** @defgroup STM32H7XX_NUCLEO_LOW_LEVEL_Private_Defines LOW LEVEL Private Defines
|
||||
* @{
|
||||
*/
|
||||
|
||||
@ -45,8 +44,7 @@
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32H7XX_NUCLEO_LOW_LEVEL_Private_TypesDefinitions LOW LEVEL
|
||||
* Private Typedef
|
||||
/** @defgroup STM32H7XX_NUCLEO_LOW_LEVEL_Private_TypesDefinitions LOW LEVEL Private Typedef
|
||||
* @{
|
||||
*/
|
||||
typedef void (* BSP_EXTI_LineCallback) (void);
|
||||
@ -54,8 +52,7 @@ typedef void (*BSP_EXTI_LineCallback)(void);
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32H7XX_NUCLEO_LOW_LEVEL_Exported_Variables LOW LEVEL Exported
|
||||
* Variables
|
||||
/** @defgroup STM32H7XX_NUCLEO_LOW_LEVEL_Exported_Variables LOW LEVEL Exported Variables
|
||||
* @{
|
||||
*/
|
||||
EXTI_HandleTypeDef hpb_exti[BUTTONn];
|
||||
@ -66,19 +63,23 @@ USART_TypeDef *COM_USART[COMn] = {COM1_UART};
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
/** @defgroup STM32H7XX_NUCLEO_LOW_LEVEL_Private_Variables LOW LEVEL Private
|
||||
* Variables
|
||||
/** @defgroup STM32H7XX_NUCLEO_LOW_LEVEL_Private_Variables LOW LEVEL Private Variables
|
||||
* @{
|
||||
*/
|
||||
static GPIO_TypeDef *LED_PORT[LEDn] = {LED1_GPIO_PORT, LED2_GPIO_PORT,
|
||||
static GPIO_TypeDef* LED_PORT[LEDn] = {LED1_GPIO_PORT,
|
||||
LED2_GPIO_PORT,
|
||||
LED3_GPIO_PORT};
|
||||
|
||||
static const uint16_t LED_PIN[LEDn] = {LED1_PIN, LED2_PIN, LED3_PIN};
|
||||
static const uint16_t LED_PIN[LEDn] = {LED1_PIN,
|
||||
LED2_PIN,
|
||||
LED3_PIN};
|
||||
|
||||
static GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {BUTTON_USER_GPIO_PORT};
|
||||
static const uint16_t BUTTON_PIN[BUTTONn] = {BUTTON_USER_PIN};
|
||||
static const IRQn_Type BUTTON_IRQn[BUTTONn] = {BUTTON_USER_EXTI_IRQn};
|
||||
|
||||
|
||||
|
||||
#if (USE_BSP_COM_FEATURE > 0)
|
||||
#if (USE_COM_LOG > 0)
|
||||
static COM_TypeDef COM_ActiveLogPort = COM1;
|
||||
@ -92,8 +93,7 @@ static uint32_t IsComMspCbValid[COMn] = {0};
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32H7XX_NUCLEO_LOW_LEVEL_Private_FunctionPrototypes LOW LEVEL
|
||||
* Private functions Prototypes
|
||||
/** @defgroup STM32H7XX_NUCLEO_LOW_LEVEL_Private_FunctionPrototypes LOW LEVEL Private functions Prototypes
|
||||
* @{
|
||||
*/
|
||||
static void BUTTON_USER_EXTI_Callback(void);
|
||||
@ -105,8 +105,7 @@ static void COM1_MspDeInit(UART_HandleTypeDef *huart);
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32H7XX_NUCLEO_LOW_LEVEL_Exported_Functions LOW LEVEL Exported
|
||||
* Functions
|
||||
/** @defgroup STM32H7XX_NUCLEO_LOW_LEVEL_Exported_Functions LOW LEVEL Exported Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
@ -114,7 +113,10 @@ static void COM1_MspDeInit(UART_HandleTypeDef *huart);
|
||||
* @brief This method returns the STM32H7XX NUCLEO BSP Driver revision
|
||||
* @retval version: 0xXYZR (8bits for each decimal, R for RC)
|
||||
*/
|
||||
int32_t BSP_GetVersion(void) { return (int32_t)STM32H7XX_NUCLEO_BSP_VERSION; }
|
||||
int32_t BSP_GetVersion(void)
|
||||
{
|
||||
return (int32_t)STM32H7XX_NUCLEO_BSP_VERSION;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Configures LED GPIO.
|
||||
@ -125,19 +127,28 @@ int32_t BSP_GetVersion(void) { return (int32_t)STM32H7XX_NUCLEO_BSP_VERSION; }
|
||||
* @arg LED3
|
||||
* @retval BSP status
|
||||
*/
|
||||
int32_t BSP_LED_Init(Led_TypeDef Led) {
|
||||
int32_t BSP_LED_Init(Led_TypeDef Led)
|
||||
{
|
||||
int32_t ret = BSP_ERROR_NONE;
|
||||
GPIO_InitTypeDef gpio_init_structure;
|
||||
|
||||
if ((Led != LED1) && (Led != LED2) && (Led != LED3)) {
|
||||
if((Led != LED1) && (Led != LED2) && (Led != LED3))
|
||||
{
|
||||
ret = BSP_ERROR_WRONG_PARAM;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Enable the GPIO LED Clock */
|
||||
if (Led == LED1) {
|
||||
if(Led == LED1)
|
||||
{
|
||||
LED1_GPIO_CLK_ENABLE();
|
||||
} else if (Led == LED2) {
|
||||
}
|
||||
else if(Led == LED2)
|
||||
{
|
||||
LED2_GPIO_CLK_ENABLE();
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
LED3_GPIO_CLK_ENABLE();
|
||||
}
|
||||
/* Configure the GPIO_LED pin */
|
||||
@ -163,13 +174,17 @@ int32_t BSP_LED_Init(Led_TypeDef Led) {
|
||||
* @note Led DeInit does not disable the GPIO clock nor disable the Mfx
|
||||
* @retval BSP status
|
||||
*/
|
||||
int32_t BSP_LED_DeInit(Led_TypeDef Led) {
|
||||
int32_t BSP_LED_DeInit(Led_TypeDef Led)
|
||||
{
|
||||
int32_t ret = BSP_ERROR_NONE;
|
||||
GPIO_InitTypeDef gpio_init_structure;
|
||||
|
||||
if ((Led != LED1) && (Led != LED2) && (Led != LED3)) {
|
||||
if((Led != LED1) && (Led != LED2) && (Led != LED3))
|
||||
{
|
||||
ret = BSP_ERROR_WRONG_PARAM;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Turn off LED */
|
||||
HAL_GPIO_WritePin(LED_PORT[Led], LED_PIN[Led], GPIO_PIN_RESET);
|
||||
/* DeInit the GPIO_LED pin */
|
||||
@ -189,12 +204,16 @@ int32_t BSP_LED_DeInit(Led_TypeDef Led) {
|
||||
* @arg LED3
|
||||
* @retval BSP status
|
||||
*/
|
||||
int32_t BSP_LED_On(Led_TypeDef Led) {
|
||||
int32_t BSP_LED_On(Led_TypeDef Led)
|
||||
{
|
||||
int32_t ret = BSP_ERROR_NONE;
|
||||
|
||||
if ((Led != LED1) && (Led != LED2) && (Led != LED3)) {
|
||||
if((Led != LED1) && (Led != LED2) && (Led != LED3))
|
||||
{
|
||||
ret = BSP_ERROR_WRONG_PARAM;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
HAL_GPIO_WritePin(LED_PORT[Led], LED_PIN[Led], GPIO_PIN_SET);
|
||||
}
|
||||
|
||||
@ -210,12 +229,16 @@ int32_t BSP_LED_On(Led_TypeDef Led) {
|
||||
* @arg LED3
|
||||
* @retval BSP status
|
||||
*/
|
||||
int32_t BSP_LED_Off(Led_TypeDef Led) {
|
||||
int32_t BSP_LED_Off(Led_TypeDef Led)
|
||||
{
|
||||
int32_t ret = BSP_ERROR_NONE;
|
||||
|
||||
if ((Led != LED1) && (Led != LED2) && (Led != LED3)) {
|
||||
if((Led != LED1) && (Led != LED2) && (Led != LED3))
|
||||
{
|
||||
ret = BSP_ERROR_WRONG_PARAM;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
HAL_GPIO_WritePin(LED_PORT[Led], LED_PIN[Led], GPIO_PIN_RESET);
|
||||
}
|
||||
|
||||
@ -231,12 +254,16 @@ int32_t BSP_LED_Off(Led_TypeDef Led) {
|
||||
* @arg LED3
|
||||
* @retval BSP status
|
||||
*/
|
||||
int32_t BSP_LED_Toggle(Led_TypeDef Led) {
|
||||
int32_t BSP_LED_Toggle(Led_TypeDef Led)
|
||||
{
|
||||
int32_t ret = BSP_ERROR_NONE;
|
||||
|
||||
if ((Led != LED1) && (Led != LED2) && (Led != LED3)) {
|
||||
if((Led != LED1) && (Led != LED2) && (Led != LED3))
|
||||
{
|
||||
ret = BSP_ERROR_WRONG_PARAM;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
HAL_GPIO_TogglePin(LED_PORT[Led], LED_PIN[Led]);
|
||||
}
|
||||
|
||||
@ -252,12 +279,16 @@ int32_t BSP_LED_Toggle(Led_TypeDef Led) {
|
||||
* @arg LED3
|
||||
* @retval LED status
|
||||
*/
|
||||
int32_t BSP_LED_GetState(Led_TypeDef Led) {
|
||||
int32_t BSP_LED_GetState (Led_TypeDef Led)
|
||||
{
|
||||
int32_t ret;
|
||||
|
||||
if ((Led != LED1) && (Led != LED2) && (Led != LED3)) {
|
||||
if((Led != LED1) && (Led != LED2) && (Led != LED3))
|
||||
{
|
||||
ret = BSP_ERROR_WRONG_PARAM;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
ret = (int32_t)HAL_GPIO_ReadPin (LED_PORT [Led], LED_PIN [Led]);
|
||||
}
|
||||
|
||||
@ -275,10 +306,10 @@ int32_t BSP_LED_GetState(Led_TypeDef Led) {
|
||||
* @arg BUTTON_MODE_EXTI: Button will be connected to EXTI line
|
||||
* with interrupt generation capability
|
||||
*/
|
||||
int32_t BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef ButtonMode) {
|
||||
int32_t BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef ButtonMode)
|
||||
{
|
||||
GPIO_InitTypeDef gpio_init_structure;
|
||||
static BSP_EXTI_LineCallback ButtonCallback[BUTTONn] = {
|
||||
BUTTON_USER_EXTI_Callback};
|
||||
static BSP_EXTI_LineCallback ButtonCallback[BUTTONn] = {BUTTON_USER_EXTI_Callback};
|
||||
static uint32_t BSP_BUTTON_PRIO [BUTTONn] = {BSP_BUTTON_USER_IT_PRIORITY};
|
||||
static const uint32_t BUTTON_EXTI_LINE[BUTTONn] = {BUTTON_USER_EXTI_LINE};
|
||||
|
||||
@ -289,11 +320,13 @@ int32_t BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef ButtonMode) {
|
||||
gpio_init_structure.Pull = GPIO_PULLDOWN;
|
||||
gpio_init_structure.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||
|
||||
if (ButtonMode == BUTTON_MODE_GPIO) {
|
||||
if(ButtonMode == BUTTON_MODE_GPIO)
|
||||
{
|
||||
/* Configure Button pin as input */
|
||||
gpio_init_structure.Mode = GPIO_MODE_INPUT;
|
||||
HAL_GPIO_Init(BUTTON_PORT [Button], &gpio_init_structure);
|
||||
} else /* (ButtonMode == BUTTON_MODE_EXTI) */
|
||||
}
|
||||
else /* (ButtonMode == BUTTON_MODE_EXTI) */
|
||||
{
|
||||
/* Configure Button pin as input with External interrupt */
|
||||
gpio_init_structure.Mode = GPIO_MODE_IT_RISING;
|
||||
@ -301,8 +334,7 @@ int32_t BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef ButtonMode) {
|
||||
HAL_GPIO_Init(BUTTON_PORT[Button], &gpio_init_structure);
|
||||
|
||||
(void)HAL_EXTI_GetHandle(&hpb_exti[Button], BUTTON_EXTI_LINE[Button]);
|
||||
(void)HAL_EXTI_RegisterCallback(&hpb_exti[Button], HAL_EXTI_COMMON_CB_ID,
|
||||
ButtonCallback[Button]);
|
||||
(void)HAL_EXTI_RegisterCallback(&hpb_exti[Button], HAL_EXTI_COMMON_CB_ID, ButtonCallback[Button]);
|
||||
|
||||
/* Enable and set Button EXTI Interrupt to the lowest priority */
|
||||
HAL_NVIC_SetPriority((BUTTON_IRQn[Button]), BSP_BUTTON_PRIO[Button], 0x00);
|
||||
@ -319,7 +351,8 @@ int32_t BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef ButtonMode) {
|
||||
* @arg BUTTON_USER: Wakeup Push Button
|
||||
* @note PB DeInit does not disable the GPIO clock
|
||||
*/
|
||||
int32_t BSP_PB_DeInit(Button_TypeDef Button) {
|
||||
int32_t BSP_PB_DeInit(Button_TypeDef Button)
|
||||
{
|
||||
GPIO_InitTypeDef gpio_init_structure;
|
||||
|
||||
gpio_init_structure.Pin = BUTTON_PIN[Button];
|
||||
@ -336,7 +369,8 @@ int32_t BSP_PB_DeInit(Button_TypeDef Button) {
|
||||
* @arg BUTTON_USER: Wakeup Push Button
|
||||
* @retval The Button GPIO pin value (GPIO_PIN_RESET = button pressed)
|
||||
*/
|
||||
int32_t BSP_PB_GetState(Button_TypeDef Button) {
|
||||
int32_t BSP_PB_GetState(Button_TypeDef Button)
|
||||
{
|
||||
return (int32_t)HAL_GPIO_ReadPin(BUTTON_PORT[Button], BUTTON_PIN[Button]);
|
||||
}
|
||||
|
||||
@ -345,7 +379,8 @@ int32_t BSP_PB_GetState(Button_TypeDef Button) {
|
||||
* @param Button Can only be BUTTON_USER
|
||||
* @retval None
|
||||
*/
|
||||
void BSP_PB_IRQHandler(Button_TypeDef Button) {
|
||||
void BSP_PB_IRQHandler(Button_TypeDef Button)
|
||||
{
|
||||
HAL_EXTI_IRQHandler(&hpb_exti[Button]);
|
||||
}
|
||||
|
||||
@ -354,7 +389,8 @@ void BSP_PB_IRQHandler(Button_TypeDef Button) {
|
||||
* @param Button Specifies the pin connected EXTI line
|
||||
* @retval None
|
||||
*/
|
||||
__weak void BSP_PB_Callback(Button_TypeDef Button) {
|
||||
__weak void BSP_PB_Callback(Button_TypeDef Button)
|
||||
{
|
||||
/* Prevent unused argument(s) compilation warning */
|
||||
UNUSED(Button);
|
||||
|
||||
@ -368,28 +404,34 @@ __weak void BSP_PB_Callback(Button_TypeDef Button) {
|
||||
* @param COM COM port to be configured.
|
||||
* This parameter can be COM1
|
||||
* @param COM_Init Pointer to a UART_HandleTypeDef structure that contains the
|
||||
* configuration information for the specified USART
|
||||
* peripheral.
|
||||
* configuration information for the specified USART peripheral.
|
||||
* @retval BSP error code
|
||||
*/
|
||||
int32_t BSP_COM_Init(COM_TypeDef COM, COM_InitTypeDef *COM_Init) {
|
||||
int32_t BSP_COM_Init(COM_TypeDef COM, COM_InitTypeDef *COM_Init)
|
||||
{
|
||||
int32_t ret = BSP_ERROR_NONE;
|
||||
|
||||
if (COM >= COMn) {
|
||||
if(COM >= COMn)
|
||||
{
|
||||
ret = BSP_ERROR_WRONG_PARAM;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
#if (USE_HAL_UART_REGISTER_CALLBACKS == 0)
|
||||
/* Init the UART Msp */
|
||||
COM1_MspInit(&hcom_uart[COM]);
|
||||
#else
|
||||
if (IsComMspCbValid[COM] == 0U) {
|
||||
if (BSP_COM_RegisterDefaultMspCallbacks(COM) != BSP_ERROR_NONE) {
|
||||
if(IsComMspCbValid[COM] == 0U)
|
||||
{
|
||||
if(BSP_COM_RegisterDefaultMspCallbacks(COM) != BSP_ERROR_NONE)
|
||||
{
|
||||
return BSP_ERROR_MSP_FAILURE;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (MX_USART3_Init(&hcom_uart[COM], COM_Init) != HAL_OK) {
|
||||
if(MX_USART3_Init(&hcom_uart[COM], COM_Init) != HAL_OK)
|
||||
{
|
||||
ret = BSP_ERROR_PERIPH_FAILURE;
|
||||
}
|
||||
}
|
||||
@ -403,12 +445,16 @@ int32_t BSP_COM_Init(COM_TypeDef COM, COM_InitTypeDef *COM_Init) {
|
||||
* This parameter can be COM1
|
||||
* @retval BSP status
|
||||
*/
|
||||
int32_t BSP_COM_DeInit(COM_TypeDef COM) {
|
||||
int32_t BSP_COM_DeInit(COM_TypeDef COM)
|
||||
{
|
||||
int32_t ret = BSP_ERROR_NONE;
|
||||
|
||||
if (COM >= COMn) {
|
||||
if(COM >= COMn)
|
||||
{
|
||||
ret = BSP_ERROR_WRONG_PARAM;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
/* USART configuration */
|
||||
hcom_uart[COM].Instance = COM_USART[COM];
|
||||
|
||||
@ -416,7 +462,8 @@ int32_t BSP_COM_DeInit(COM_TypeDef COM) {
|
||||
COM1_MspDeInit(&hcom_uart[COM]);
|
||||
#endif /* (USE_HAL_UART_REGISTER_CALLBACKS == 0) */
|
||||
|
||||
if (HAL_UART_DeInit(&hcom_uart[COM]) != HAL_OK) {
|
||||
if(HAL_UART_DeInit(&hcom_uart[COM]) != HAL_OK)
|
||||
{
|
||||
ret = BSP_ERROR_PERIPH_FAILURE;
|
||||
}
|
||||
}
|
||||
@ -428,12 +475,11 @@ int32_t BSP_COM_DeInit(COM_TypeDef COM) {
|
||||
* @brief Configures COM port.
|
||||
* @param huart USART handle
|
||||
* @param COM_Init Pointer to a UART_HandleTypeDef structure that contains the
|
||||
* configuration information for the specified USART
|
||||
* peripheral.
|
||||
* configuration information for the specified USART peripheral.
|
||||
* @retval HAL error code
|
||||
*/
|
||||
__weak HAL_StatusTypeDef MX_USART3_Init(UART_HandleTypeDef *huart,
|
||||
MX_UART_InitTypeDef *COM_Init) {
|
||||
__weak HAL_StatusTypeDef MX_USART3_Init(UART_HandleTypeDef *huart, MX_UART_InitTypeDef *COM_Init)
|
||||
{
|
||||
/* USART configuration */
|
||||
huart->Instance = COM_USART[COM1];
|
||||
huart->Init.BaudRate = COM_Init->BaudRate;
|
||||
@ -454,23 +500,29 @@ __weak HAL_StatusTypeDef MX_USART3_Init(UART_HandleTypeDef *huart,
|
||||
* This parameter can be COM1
|
||||
* @retval BSP status
|
||||
*/
|
||||
int32_t BSP_COM_RegisterDefaultMspCallbacks(COM_TypeDef COM) {
|
||||
int32_t BSP_COM_RegisterDefaultMspCallbacks(COM_TypeDef COM)
|
||||
{
|
||||
int32_t ret = BSP_ERROR_NONE;
|
||||
|
||||
if (COM >= COMn) {
|
||||
if(COM >= COMn)
|
||||
{
|
||||
ret = BSP_ERROR_WRONG_PARAM;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
__HAL_UART_RESET_HANDLE_STATE(&hcom_uart[COM]);
|
||||
|
||||
/* Register default MspInit/MspDeInit Callback */
|
||||
if (HAL_UART_RegisterCallback(&hcom_uart[COM], HAL_UART_MSPINIT_CB_ID,
|
||||
COM1_MspInit) != HAL_OK) {
|
||||
if(HAL_UART_RegisterCallback(&hcom_uart[COM], HAL_UART_MSPINIT_CB_ID, COM1_MspInit) != HAL_OK)
|
||||
{
|
||||
ret = BSP_ERROR_PERIPH_FAILURE;
|
||||
} else if (HAL_UART_RegisterCallback(&hcom_uart[COM],
|
||||
HAL_UART_MSPDEINIT_CB_ID,
|
||||
COM1_MspDeInit) != HAL_OK) {
|
||||
}
|
||||
else if(HAL_UART_RegisterCallback(&hcom_uart[COM], HAL_UART_MSPDEINIT_CB_ID, COM1_MspDeInit) != HAL_OK)
|
||||
{
|
||||
ret = BSP_ERROR_PERIPH_FAILURE;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
IsComMspCbValid[COM] = 1U;
|
||||
}
|
||||
}
|
||||
@ -486,23 +538,29 @@ int32_t BSP_COM_RegisterDefaultMspCallbacks(COM_TypeDef COM) {
|
||||
* @param Callbacks pointer to COM1 MspInit/MspDeInit callback functions
|
||||
* @retval BSP status
|
||||
*/
|
||||
int32_t BSP_COM_RegisterMspCallbacks(COM_TypeDef COM, BSP_COM_Cb_t *Callback) {
|
||||
int32_t BSP_COM_RegisterMspCallbacks(COM_TypeDef COM , BSP_COM_Cb_t *Callback)
|
||||
{
|
||||
int32_t ret = BSP_ERROR_NONE;
|
||||
|
||||
if (COM >= COMn) {
|
||||
if(COM >= COMn)
|
||||
{
|
||||
ret = BSP_ERROR_WRONG_PARAM;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
__HAL_UART_RESET_HANDLE_STATE(&hcom_uart[COM]);
|
||||
|
||||
/* Register MspInit/MspDeInit Callbacks */
|
||||
if (HAL_UART_RegisterCallback(&hcom_uart[COM], HAL_UART_MSPINIT_CB_ID,
|
||||
Callback->pMspInitCb) != HAL_OK) {
|
||||
if(HAL_UART_RegisterCallback(&hcom_uart[COM], HAL_UART_MSPINIT_CB_ID, Callback->pMspInitCb) != HAL_OK)
|
||||
{
|
||||
ret = BSP_ERROR_PERIPH_FAILURE;
|
||||
} else if (HAL_UART_RegisterCallback(&hcom_uart[COM],
|
||||
HAL_UART_MSPDEINIT_CB_ID,
|
||||
Callback->pMspDeInitCb) != HAL_OK) {
|
||||
}
|
||||
else if(HAL_UART_RegisterCallback(&hcom_uart[COM], HAL_UART_MSPDEINIT_CB_ID, Callback->pMspDeInitCb) != HAL_OK)
|
||||
{
|
||||
ret = BSP_ERROR_PERIPH_FAILURE;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
IsComMspCbValid[COM] = 1U;
|
||||
}
|
||||
}
|
||||
@ -518,8 +576,10 @@ int32_t BSP_COM_RegisterMspCallbacks(COM_TypeDef COM, BSP_COM_Cb_t *Callback) {
|
||||
* This parameter can be COM1
|
||||
* @retval BSP status
|
||||
*/
|
||||
int32_t BSP_COM_SelectLogPort(COM_TypeDef COM) {
|
||||
if (COM_ActiveLogPort != COM) {
|
||||
int32_t BSP_COM_SelectLogPort(COM_TypeDef COM)
|
||||
{
|
||||
if(COM_ActiveLogPort != COM)
|
||||
{
|
||||
COM_ActiveLogPort = COM;
|
||||
}
|
||||
return BSP_ERROR_NONE;
|
||||
@ -534,8 +594,7 @@ int __io_putchar(int ch)
|
||||
int fputc (int ch, FILE *f)
|
||||
#endif /* __GNUC__ */
|
||||
{
|
||||
HAL_UART_Transmit(&hcom_uart[COM_ActiveLogPort], (uint8_t *)&ch, 1,
|
||||
COM_POLL_TIMEOUT);
|
||||
HAL_UART_Transmit (&hcom_uart [COM_ActiveLogPort], (uint8_t *) &ch, 1, COM_POLL_TIMEOUT);
|
||||
return ch;
|
||||
}
|
||||
#endif /* USE_COM_LOG */
|
||||
@ -545,15 +604,17 @@ int fputc(int ch, FILE *f)
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32H7XX_NUCLEO_LOW_LEVEL_Private_Functions LOW LEVEL Private
|
||||
* functions
|
||||
/** @defgroup STM32H7XX_NUCLEO_LOW_LEVEL_Private_Functions LOW LEVEL Private functions
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Key EXTI line detection callbacks.
|
||||
* @retval BSP status
|
||||
*/
|
||||
static void BUTTON_USER_EXTI_Callback(void) { BSP_PB_Callback(BUTTON_USER); }
|
||||
static void BUTTON_USER_EXTI_Callback(void)
|
||||
{
|
||||
BSP_PB_Callback(BUTTON_USER);
|
||||
}
|
||||
|
||||
#if (USE_BSP_COM_FEATURE > 0)
|
||||
/**
|
||||
@ -561,7 +622,8 @@ static void BUTTON_USER_EXTI_Callback(void) { BSP_PB_Callback(BUTTON_USER); }
|
||||
* @param huart UART handle
|
||||
* @retval BSP status
|
||||
*/
|
||||
static void COM1_MspInit(UART_HandleTypeDef *huart) {
|
||||
static void COM1_MspInit(UART_HandleTypeDef *huart)
|
||||
{
|
||||
GPIO_InitTypeDef gpio_init_structure;
|
||||
|
||||
/* Prevent unused argument(s) compilation warning */
|
||||
@ -594,7 +656,8 @@ static void COM1_MspInit(UART_HandleTypeDef *huart) {
|
||||
* @param huart UART handle
|
||||
* @retval BSP status
|
||||
*/
|
||||
static void COM1_MspDeInit(UART_HandleTypeDef *huart) {
|
||||
static void COM1_MspDeInit(UART_HandleTypeDef *huart)
|
||||
{
|
||||
GPIO_InitTypeDef gpio_init_structure;
|
||||
|
||||
/* Prevent unused argument(s) compilation warning */
|
||||
|
@ -4,18 +4,19 @@
|
||||
* the debug port.
|
||||
*/
|
||||
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <boardconfig.h>
|
||||
#include <hardware_init.h>
|
||||
#include <boardconfig.h>
|
||||
|
||||
|
||||
#define AUTO_RETURN_AFTER_NEWLINE 1
|
||||
|
||||
@ -52,17 +53,19 @@ int _write(int file, const void *ptr, size_t len) {
|
||||
#if AUTO_RETURN_AFTER_NEWLINE
|
||||
if(((const char *) ptr)[i] == '\n' &&
|
||||
((const char *) ptr)[i+1] != '\r') {
|
||||
HAL_UART_Transmit(&huart3, (uint8_t *)"\r", 1, DEBUG_UART_MS_TIMEOUT);
|
||||
HAL_UART_Transmit(&huart3, (uint8_t*)"\r", 1 ,
|
||||
DEBUG_UART_MS_TIMEOUT);
|
||||
}
|
||||
#endif
|
||||
const uint8_t *character = (const uint8_t *)ptr;
|
||||
HAL_UART_Transmit(&huart3, (const uint8_t *)(character + i), 1,
|
||||
DEBUG_UART_MS_TIMEOUT);
|
||||
uint8_t* character = (uint8_t*) ptr;
|
||||
HAL_UART_Transmit(&huart3, (uint8_t*) (character + i),
|
||||
1 , DEBUG_UART_MS_TIMEOUT);
|
||||
}
|
||||
return len;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
int _lseek (int file, int ptr, int dir) {
|
||||
@ -120,7 +123,8 @@ int _stat(const char *path, struct stat *st) {
|
||||
int _isatty(int fd) {
|
||||
if(fd <= STDERR_FILENO) {
|
||||
return 1;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@ -128,19 +132,23 @@ int _isatty(int fd) {
|
||||
void exit(int n) {
|
||||
printf("\n\r EXITING WITH CODE: %u \n\r", n);
|
||||
//restart();
|
||||
while (1)
|
||||
;
|
||||
while(1);
|
||||
}
|
||||
|
||||
void _exit(int n) {
|
||||
printf("\n\r EXITING WITH CODE: %u \n\r", n);
|
||||
//restart();
|
||||
while (1)
|
||||
;
|
||||
while(1);
|
||||
}
|
||||
|
||||
int _kill() { return -1; }
|
||||
int _kill() {
|
||||
return -1;
|
||||
}
|
||||
|
||||
int _getpid() { return 1; }
|
||||
int _getpid() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
int _gettimeofday() { return -1; }
|
||||
int _gettimeofday() {
|
||||
return -1;
|
||||
}
|
||||
|
@ -1 +1,4 @@
|
||||
target_sources(${TARGET_NAME} PRIVATE SpiTest.cpp)
|
||||
target_sources(${TARGET_NAME} PRIVATE
|
||||
SpiTest.cpp
|
||||
)
|
||||
|
||||
|
@ -1,22 +1,20 @@
|
||||
#include "SpiTest.h"
|
||||
#include "fsfw_hal/stm32h7/spi/stm32h743zi.h"
|
||||
|
||||
SpiTest::SpiTest(SpiComIF &spiComIF)
|
||||
: spiComIF(spiComIF),
|
||||
spiCookie(TEST_ADDRESS, spi::SpiBus::SPI_1, spi::TransferModes::POLLING,
|
||||
&mspCfg, 1000000, spi::SpiModes::MODE_0, 32) {
|
||||
SpiTest::SpiTest(SpiComIF &spiComIF):
|
||||
spiComIF(spiComIF), spiCookie(TEST_ADDRESS, spi::SpiBus::SPI_1,
|
||||
spi::TransferModes::POLLING, &mspCfg, 1000000, spi::SpiModes::MODE_0, 32) {
|
||||
stm32h7::h743zi::standardPollingCfg(mspCfg);
|
||||
spiComIF.initializeInterface(&spiCookie);
|
||||
}
|
||||
|
||||
ReturnValue_t SpiTest::performOperation(uint8_t opCode) {
|
||||
std::array<uint8_t, 3> dummyData = {0x01, 0x02, 0x03};
|
||||
ReturnValue_t result =
|
||||
spiComIF.sendMessage(&spiCookie, dummyData.data(), dummyData.size());
|
||||
ReturnValue_t result = spiComIF.sendMessage(&spiCookie, dummyData.data(), dummyData.size());
|
||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||
return result;
|
||||
}
|
||||
std::array<uint8_t, 3> recBuf{};
|
||||
std::array<uint8_t, 3> recBuf;
|
||||
uint8_t* recPtr = recBuf.data();
|
||||
size_t readLen = 0;
|
||||
return spiComIF.readReceivedMessage(&spiCookie, &recPtr, &readLen);
|
||||
|
@ -7,10 +7,9 @@
|
||||
|
||||
class SpiTest {
|
||||
public:
|
||||
explicit SpiTest(SpiComIF &spiComIF);
|
||||
SpiTest(SpiComIF& spiComIF);
|
||||
|
||||
ReturnValue_t performOperation(uint8_t opCode = 0);
|
||||
|
||||
private:
|
||||
static constexpr address_t TEST_ADDRESS = 0x00;
|
||||
spi::MspPollingConfigStruct mspCfg;
|
||||
|
@ -1 +1,5 @@
|
||||
target_sources(${TARGET_NAME} PRIVATE InitMission.cpp ObjectFactory.cpp)
|
||||
target_sources(${TARGET_NAME} PRIVATE
|
||||
InitMission.cpp
|
||||
ObjectFactory.cpp
|
||||
)
|
||||
|
||||
|
@ -6,29 +6,25 @@
|
||||
#include "example/utility/TaskCreation.h"
|
||||
#include "fsfw_tests/integration/assemblies/TestAssembly.h"
|
||||
|
||||
#include "fsfw/devicehandlers/DeviceHandlerIF.h"
|
||||
#include "fsfw/modes/HasModesIF.h"
|
||||
#include "fsfw/modes/ModeMessage.h"
|
||||
#include "fsfw/returnvalues/HasReturnvaluesIF.h"
|
||||
#include "fsfw/serviceinterface/ServiceInterface.h"
|
||||
#include "fsfw/tasks/FixedTimeslotTaskIF.h"
|
||||
#include "fsfw/tasks/PeriodicTaskIF.h"
|
||||
#include "fsfw/tasks/TaskFactory.h"
|
||||
#include "fsfw/devicehandlers/DeviceHandlerIF.h"
|
||||
#include "fsfw/modes/HasModesIF.h"
|
||||
#include "fsfw/modes/ModeMessage.h"
|
||||
|
||||
#include "FreeRTOS.h"
|
||||
|
||||
void assemlyDemo();
|
||||
|
||||
void InitMission::createTasks() {
|
||||
TaskFactory* taskFactory = TaskFactory::instance();
|
||||
ReturnValue_t result = HasReturnvaluesIF::RETURN_OK;
|
||||
static_cast<void>(taskFactory);
|
||||
static_cast<void>(result);
|
||||
|
||||
#if OBSW_ADD_CORE_COMPONENTS == 1
|
||||
/* TMTC Distribution */
|
||||
PeriodicTaskIF *distributerTask =
|
||||
taskFactory->createPeriodicTask("DIST", 5, 1024 * 2, 0.2, nullptr);
|
||||
result = distributerTask->addComponent(objects::CCSDS_DISTRIBUTOR);
|
||||
PeriodicTaskIF* distributerTask = taskFactory->createPeriodicTask(
|
||||
"DIST", 5, 1024 * 2, 0.2, nullptr);
|
||||
ReturnValue_t result = distributerTask->addComponent(objects::CCSDS_DISTRIBUTOR);
|
||||
if(result!=HasReturnvaluesIF::RETURN_OK) {
|
||||
task::printInitError("CCSDS distributor", objects::CCSDS_DISTRIBUTOR);
|
||||
}
|
||||
@ -41,7 +37,6 @@ void InitMission::createTasks() {
|
||||
task::printInitError("TM funnel", objects::TM_FUNNEL);
|
||||
}
|
||||
|
||||
#if OBSW_ADD_LWIP_COMPONENTS == 1
|
||||
/* UDP bridge */
|
||||
PeriodicTaskIF* udpBridgeTask = TaskFactory::instance()->createPeriodicTask(
|
||||
"UDP_UNIX_BRIDGE", 6, 1024 * 2, 0.2, nullptr);
|
||||
@ -49,17 +44,15 @@ void InitMission::createTasks() {
|
||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||
task::printInitError("UDP bridge", objects::UDP_BRIDGE);
|
||||
}
|
||||
PeriodicTaskIF *udpPollingTask = TaskFactory::instance()->createPeriodicTask(
|
||||
"UDP_POLLING", 8, 1024, 0.1, nullptr);
|
||||
PeriodicTaskIF* udpPollingTask = TaskFactory::instance()->
|
||||
createPeriodicTask("UDP_POLLING", 8, 1024, 0.1, nullptr);
|
||||
result = udpPollingTask->addComponent(objects::UDP_POLLING_TASK);
|
||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||
task::printInitError("UDP polling task", objects::UDP_POLLING_TASK);
|
||||
}
|
||||
#endif
|
||||
|
||||
PeriodicTaskIF *eventManagerTask =
|
||||
TaskFactory::instance()->createPeriodicTask("EVENT_MGMT", 4, 1024 * 2,
|
||||
0.1, nullptr);
|
||||
PeriodicTaskIF* eventManagerTask = TaskFactory::instance()->createPeriodicTask(
|
||||
"EVENT_MGMT", 4, 1024 * 2, 0.1, nullptr);
|
||||
result = eventManagerTask->addComponent(objects::EVENT_MANAGER);
|
||||
if(result!=HasReturnvaluesIF::RETURN_OK) {
|
||||
task::printInitError("Event Manager", objects::EVENT_MANAGER);
|
||||
@ -110,14 +103,12 @@ void InitMission::createTasks() {
|
||||
#endif /* OBSW_ADD_PUS_STACK == 1 */
|
||||
|
||||
#if OBSW_ADD_TASK_EXAMPLE == 1
|
||||
FixedTimeslotTaskIF *timeslotDemoTask =
|
||||
TaskFactory::instance()->createFixedTimeslotTask("PST_TASK", 6, 1024 * 2,
|
||||
0.5, nullptr);
|
||||
FixedTimeslotTaskIF* timeslotDemoTask = TaskFactory::instance()->createFixedTimeslotTask(
|
||||
"PST_TASK", 6, 1024 * 2, 0.5, nullptr);
|
||||
result = pst::pollingSequenceExamples(timeslotDemoTask);
|
||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||
sif::error << "InitMission::createTasks: PST initialization failed!"
|
||||
<< std::endl;
|
||||
sif::error << "InitMission::createTasks: PST initialization failed!" << std::endl;
|
||||
#else
|
||||
sif::printError( "InitMission::createTasks: PST initialization failed!\n");
|
||||
#endif
|
||||
@ -132,21 +123,18 @@ void InitMission::createTasks() {
|
||||
#endif /* OBSW_ADD_TASK_EXAMPLE == 1 */
|
||||
|
||||
#if OBSW_ADD_DEVICE_HANDLER_DEMO == 1
|
||||
FixedTimeslotTaskIF *testDevicesTask =
|
||||
TaskFactory::instance()->createFixedTimeslotTask("PST_TEST_TASK", 7,
|
||||
1024 * 2, 1.0, nullptr);
|
||||
FixedTimeslotTaskIF* testDevicesTask = TaskFactory::instance()->createFixedTimeslotTask(
|
||||
"PST_TEST_TASK", 7, 1024 * 2, 1.0, nullptr);
|
||||
result = pst::pollingSequenceDevices(testDevicesTask);
|
||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||
sif::error << "InitMission::createTasks: Test PST initialization failed!"
|
||||
<< std::endl;
|
||||
sif::error << "InitMission::createTasks: Test PST initialization failed!" << std::endl;
|
||||
#else
|
||||
sif::printError(
|
||||
"InitMission::createTasks: Test PST initialization faiedl!\n");
|
||||
sif::printError("InitMission::createTasks: Test PST initialization faiedl!\n");
|
||||
#endif
|
||||
}
|
||||
PeriodicTaskIF *assemblyTask =
|
||||
taskFactory->createPeriodicTask("ASS_TASK", 3, 1024, 2.0, nullptr);
|
||||
PeriodicTaskIF* assemblyTask = taskFactory->createPeriodicTask("ASS_TASK", 3,
|
||||
1024, 2.0, nullptr);
|
||||
if(assemblyTask == nullptr){
|
||||
task::printInitError("ASS_TASK", objects::TEST_ASSEMBLY);
|
||||
}
|
||||
@ -164,17 +152,14 @@ void InitMission::createTasks() {
|
||||
}
|
||||
|
||||
#if OBSW_PERIPHERAL_PST == 1
|
||||
FixedTimeslotTaskIF *peripheralPst =
|
||||
TaskFactory::instance()->createFixedTimeslotTask("PST_PERIPHERAL_TASK", 9,
|
||||
1024 * 2, 2.0, nullptr);
|
||||
FixedTimeslotTaskIF* peripheralPst = TaskFactory::instance()->createFixedTimeslotTask(
|
||||
"PST_PERIPHERAL_TASK", 9, 1024 * 2, 2.0, nullptr);
|
||||
result = pst::pstPeripheralsTest(peripheralPst);
|
||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||
sif::error << "InitMission::createTasks: Test PST initialization failed!"
|
||||
<< std::endl;
|
||||
sif::error << "InitMission::createTasks: Test PST initialization failed!" << std::endl;
|
||||
#else
|
||||
sif::printError(
|
||||
"InitMission::createTasks: Test PST initialization faiedl!\n");
|
||||
sif::printError("InitMission::createTasks: Test PST initialization faiedl!\n");
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
@ -188,10 +173,8 @@ void InitMission::createTasks() {
|
||||
#if OBSW_ADD_CORE_COMPONENTS == 1
|
||||
distributerTask->startTask();
|
||||
eventManagerTask->startTask();
|
||||
#if OBSW_ADD_LWIP_COMPONENTS == 1
|
||||
udpBridgeTask->startTask();
|
||||
udpPollingTask->startTask();
|
||||
#endif
|
||||
#endif /* OBSW_ADD_CORE_COMPONENTS == 1 */
|
||||
|
||||
#if OBSW_ADD_PUS_STACK == 1
|
||||
@ -218,8 +201,8 @@ void InitMission::createTasks() {
|
||||
testTask->startTask();
|
||||
|
||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||
sif::info << "Remaining FreeRTOS heap size: " << std::dec
|
||||
<< xPortGetFreeHeapSize() << " bytes." << std::endl;
|
||||
sif::info << "Remaining FreeRTOS heap size: " << std::dec << xPortGetFreeHeapSize() <<
|
||||
" bytes." << std::endl;
|
||||
sif::info << "Tasks started.." << std::endl;
|
||||
#else
|
||||
sif::printInfo("Remaining FreeRTOS heap size: %lu\n",
|
||||
@ -228,29 +211,20 @@ void InitMission::createTasks() {
|
||||
#endif
|
||||
|
||||
#if OBSW_ADD_DEVICE_HANDLER_DEMO
|
||||
auto *assembly = ObjectManager::instance()->get<HasModesIF>(objects::TEST_ASSEMBLY);
|
||||
HasModesIF* assembly = ObjectManager::instance()->get<HasModesIF>(objects::TEST_ASSEMBLY);
|
||||
if (assembly == nullptr){
|
||||
return;
|
||||
}
|
||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||
sif::info
|
||||
<< "Waiting 5 Seconds and then command Test Assembly to Normal, Dual"
|
||||
<< std::endl;
|
||||
sif::info << "Waiting 5 Seconds and then command Test Assembly to Normal, Dual" << std::endl;
|
||||
#else
|
||||
sif::printInfo(
|
||||
"Waiting 5 Seconds and then command Test Assembly to Normal, Dual \n");
|
||||
sif::printInfo("Waiting 5 Seconds and then command Test Assembly to Normal, Dual \n");
|
||||
#endif
|
||||
|
||||
TaskFactory::delayTask(5000);
|
||||
|
||||
#endif /* OBSW_ADD_DEVICE_HANDLER_DEMO */
|
||||
}
|
||||
|
||||
void assemblyDemo(HasModesIF* assembly) {
|
||||
CommandMessage modeMessage;
|
||||
ModeMessage::setModeMessage(&modeMessage, ModeMessage::CMD_MODE_COMMAND,
|
||||
DeviceHandlerIF::MODE_NORMAL,
|
||||
TestAssembly::submodes::DUAL);
|
||||
DeviceHandlerIF::MODE_NORMAL, TestAssembly::submodes::DUAL);
|
||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||
sif::info << "Commanding Test Assembly to Normal, Dual" << std::endl;
|
||||
#else
|
||||
@ -258,4 +232,6 @@ void assemblyDemo(HasModesIF* assembly) {
|
||||
#endif
|
||||
MessageQueueSenderIF::sendMessage(assembly->getCommandQueue(), &modeMessage,
|
||||
MessageQueueIF::NO_QUEUE);
|
||||
#endif /* OBSW_ADD_DEVICE_HANDLER_DEMO */
|
||||
}
|
||||
|
||||
|
@ -1,22 +1,30 @@
|
||||
#include "ObjectFactory.h"
|
||||
#include "OBSWConfig.h"
|
||||
#include "hardware_init.h"
|
||||
#include "devices/devAddresses.h"
|
||||
#include "objects/systemObjectList.h"
|
||||
#include "hardware_init.h"
|
||||
|
||||
#include "example/utility/TmFunnel.h"
|
||||
#include "example/core/GenericFactory.h"
|
||||
|
||||
#include "example_common/stm32h7/STM32TestTask.h"
|
||||
#include "example_common/stm32h7/networking/TmTcLwIpUdpBridge.h"
|
||||
#include "example_common/stm32h7/networking/UdpTcLwIpPollingTask.h"
|
||||
#include "example_common/stm32h7/networking/TmTcLwIpUdpBridge.h"
|
||||
#include "example_common/stm32h7/STM32TestTask.h"
|
||||
|
||||
#include "fsfw/datapoollocal/LocalDataPoolManager.h"
|
||||
#include "fsfw/monitoring/MonitoringMessageContent.h"
|
||||
#include "fsfw/storagemanager/PoolManager.h"
|
||||
#include "fsfw/tmtcpacket/pus/tm.h"
|
||||
#include "fsfw/tmtcservices/CommandingServiceBase.h"
|
||||
#include "fsfw/tmtcservices/PusServiceBase.h"
|
||||
|
||||
|
||||
#if OBSW_PERFORM_L3GD20H_TEST == 1
|
||||
#include "fsfw/hal/devicehandlers/GyroL3GD20Handler.h"
|
||||
#include "fsfw/hal/stm32h7/spi/SpiComIF.h"
|
||||
#include "fsfw/hal/stm32h7/spi/SpiCookie.h"
|
||||
#include "fsfw/hal/stm32h7/spi/spiCore.h"
|
||||
#include "fsfw/hal/stm32h7/spi/SpiComIF.h"
|
||||
#include "fsfw/hal/devicehandlers/GyroL3GD20Handler.h"
|
||||
#include "fsfw/hal/stm32h7/spi/stm32h743ziSpi.h"
|
||||
#include "fsfw/hal/stm32h7/spi/spiCore.h"
|
||||
DMA_HandleTypeDef* txHandle = nullptr;
|
||||
DMA_HandleTypeDef* rxHandle = nullptr;
|
||||
#endif
|
||||
@ -28,65 +36,65 @@ void ObjectFactory::produce(void *args) {
|
||||
#if OBSW_ADD_CORE_COMPONENTS == 1
|
||||
{
|
||||
LocalPool::LocalPoolConfig poolCfg = {
|
||||
{100, 32}, {30, 64}, {10, 128}, {2, 1024}};
|
||||
{100, 32}, {30, 64}, {10, 128}, {2, 1024}
|
||||
};
|
||||
new PoolManager(objects::TC_STORE, poolCfg);
|
||||
}
|
||||
|
||||
{
|
||||
LocalPool::LocalPoolConfig poolCfg = {
|
||||
{100, 32}, {30, 64}, {10, 128}, {2, 1024}};
|
||||
{100, 32}, {30, 64}, {10, 128}, {2, 1024}
|
||||
};
|
||||
new PoolManager(objects::TM_STORE, poolCfg);
|
||||
}
|
||||
|
||||
{
|
||||
LocalPool::LocalPoolConfig poolCfg = {
|
||||
{100, 32}, {30, 64}, {10, 128}, {2, 1024}};
|
||||
{100, 32}, {30, 64}, {10, 128}, {2, 1024}
|
||||
};
|
||||
new PoolManager(objects::IPC_STORE, poolCfg);
|
||||
}
|
||||
|
||||
#if OBSW_ADD_LWIP_COMPONENTS == 1
|
||||
/* UDP Server */
|
||||
new TmTcLwIpUdpBridge(objects::UDP_BRIDGE, objects::CCSDS_DISTRIBUTOR,
|
||||
objects::TM_STORE, objects::TC_STORE);
|
||||
new UdpTcLwIpPollingTask(objects::UDP_POLLING_TASK, objects::UDP_BRIDGE,
|
||||
&gnetif);
|
||||
#endif
|
||||
new TmTcLwIpUdpBridge(objects::UDP_BRIDGE,
|
||||
objects::CCSDS_DISTRIBUTOR, objects::TM_STORE, objects::TC_STORE);
|
||||
new UdpTcLwIpPollingTask(objects::UDP_POLLING_TASK, objects::UDP_BRIDGE, &gnetif);
|
||||
#endif /* OBSW_ADD_CORE_COMPONENTS == 1 */
|
||||
|
||||
ObjectFactory::produceGenericObjects();
|
||||
|
||||
/* Test Device Handler */
|
||||
new STM32TestTask(objects::TEST_TASK, true, true);
|
||||
new STM32TestTask(objects::TEST_TASK, false, true);
|
||||
|
||||
#if OBSW_PERFORM_L3GD20H_TEST == 1
|
||||
|
||||
spi::MspCfgBase* mspCfg = nullptr;
|
||||
spi::TransferModes transferMode = spi::TransferModes::DMA;
|
||||
if(transferMode == spi::TransferModes::POLLING) {
|
||||
auto typedCfg = new spi::MspPollingConfigStruct();
|
||||
spi::h743zi::standardPollingCfg(*typedCfg);
|
||||
mspCfg = typedCfg;
|
||||
} else if (transferMode == spi::TransferModes::INTERRUPT) {
|
||||
}
|
||||
else if(transferMode == spi::TransferModes::INTERRUPT) {
|
||||
auto typedCfg = new spi::MspIrqConfigStruct();
|
||||
spi::h743zi::standardInterruptCfg(*typedCfg,
|
||||
IrqPriorities::HIGHEST_FREERTOS);
|
||||
spi::h743zi::standardInterruptCfg(*typedCfg, IrqPriorities::HIGHEST_FREERTOS);
|
||||
mspCfg = typedCfg;
|
||||
} else if (transferMode == spi::TransferModes::DMA) {
|
||||
}
|
||||
else if(transferMode == spi::TransferModes::DMA) {
|
||||
auto typedCfg = new spi::MspDmaConfigStruct();
|
||||
txHandle = new DMA_HandleTypeDef();
|
||||
rxHandle = new DMA_HandleTypeDef();
|
||||
spi::setDmaHandles(txHandle, rxHandle);
|
||||
spi::h743zi::standardDmaCfg(*typedCfg, IrqPriorities::HIGHEST_FREERTOS,
|
||||
IrqPriorities::HIGHEST_FREERTOS,
|
||||
IrqPriorities::HIGHEST_FREERTOS);
|
||||
IrqPriorities::HIGHEST_FREERTOS, IrqPriorities::HIGHEST_FREERTOS);
|
||||
mspCfg = typedCfg;
|
||||
}
|
||||
|
||||
new SpiComIF(objects::SPI_COM_IF);
|
||||
auto spiCookie = new SpiCookie(devaddress::L3GD20H, spi::SpiBus::SPI_1,
|
||||
transferMode, mspCfg, 3900000,
|
||||
spi::SpiModes::MODE_3, GPIO_PIN_14, GPIOD, 32);
|
||||
auto gyroDevice = new GyroHandlerL3GD20H(objects::SPI_DEVICE_TEST,
|
||||
objects::SPI_COM_IF, spiCookie);
|
||||
auto spiCookie = new SpiCookie(devaddress::L3GD20H, spi::SpiBus::SPI_1, transferMode, mspCfg,
|
||||
3900000, spi::SpiModes::MODE_3, GPIO_PIN_14, GPIOD, 32);
|
||||
auto gyroDevice = new GyroHandlerL3GD20H(objects::SPI_DEVICE_TEST, objects::SPI_COM_IF,
|
||||
spiCookie);
|
||||
gyroDevice->setStartUpImmediately();
|
||||
gyroDevice->setGoNormalModeAtStartup();
|
||||
#endif
|
||||
|
@ -1,9 +1,10 @@
|
||||
#ifndef MISSION_CORE_OBJECTFACTORY_H_
|
||||
#define MISSION_CORE_OBJECTFACTORY_H_
|
||||
|
||||
|
||||
namespace ObjectFactory {
|
||||
void setStatics();
|
||||
void produce(void* args);
|
||||
}; // namespace ObjectFactory
|
||||
};
|
||||
|
||||
#endif /* MISSION_CORE_OBJECTFACTORY_H_ */
|
||||
|
@ -1,6 +1,11 @@
|
||||
target_sources(
|
||||
${TARGET_NAME} PRIVATE ipc/missionMessageTypes.cpp
|
||||
pollingsequence/pollingSequenceFactory.cpp)
|
||||
target_sources(${TARGET_NAME}
|
||||
PRIVATE
|
||||
ipc/missionMessageTypes.cpp
|
||||
pollingsequence/pollingSequenceFactory.cpp
|
||||
)
|
||||
|
||||
# Add include paths for the executable
|
||||
target_include_directories(${TARGET_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
target_include_directories(${TARGET_NAME}
|
||||
PUBLIC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
)
|
||||
|
@ -4,8 +4,11 @@
|
||||
#include <cstdint>
|
||||
|
||||
namespace devaddress {
|
||||
enum devaddress : uint32_t { L3GD20H = 1 };
|
||||
enum devaddress: uint32_t {
|
||||
L3GD20H = 1
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
||||
#endif /* BSP_STM32_FREERTOS_FSFWCONFIG_DEVICES_DEVADDRESSES_H_ */
|
||||
|
@ -4,7 +4,8 @@
|
||||
#include "commonSubsystemIds.h"
|
||||
|
||||
namespace SUBSYSTEM_ID {
|
||||
enum subsystemId : uint8_t {};
|
||||
enum subsystemId: uint8_t {
|
||||
};
|
||||
}
|
||||
|
||||
#endif /* FSFWCONFIG_TMTC_SUBSYSTEMIDRANGES_H_ */
|
||||
|
@ -7,14 +7,13 @@ class CommandMessage;
|
||||
|
||||
namespace messagetypes {
|
||||
/* First type must have number MESSAGE_TYPE::FW_MESSAGES_COUNT! */
|
||||
/* Remember to add new message types to the clearMissionMessage function below!
|
||||
*/
|
||||
/* Remember to add new message types to the clearMissionMessage function below! */
|
||||
enum MISSION_MESSAGE_TYPE {
|
||||
COSTUM_MESSAGE = FW_MESSAGES_COUNT,
|
||||
};
|
||||
|
||||
void clearMissionMessage(CommandMessage* message);
|
||||
|
||||
} // namespace messagetypes
|
||||
}
|
||||
|
||||
#endif /* FSFWCONFIG_IPC_MISSIONMESSAGETYPES_H_ */
|
||||
|
@ -1,7 +1,7 @@
|
||||
#ifndef FSFWCONFIG_OBJECTS_SYSTEMOBJECTLIST_H_
|
||||
#define FSFWCONFIG_OBJECTS_SYSTEMOBJECTLIST_H_
|
||||
|
||||
#include <commonObjects.h>
|
||||
#include <commonSystemObjects.h>
|
||||
|
||||
namespace objects {
|
||||
enum mission_objects {
|
||||
|
@ -12,26 +12,22 @@ ReturnValue_t pst::pstPeripheralsTest(FixedTimeslotTaskIF *thisSequence) {
|
||||
static_cast<void>(length);
|
||||
|
||||
#if OBSW_PERFORM_L3GD20H_TEST == 1
|
||||
thisSequence->addSlot(objects::SPI_DEVICE_TEST, 0,
|
||||
DeviceHandlerIF::PERFORM_OPERATION);
|
||||
thisSequence->addSlot(objects::SPI_DEVICE_TEST, 0.3,
|
||||
DeviceHandlerIF::SEND_WRITE);
|
||||
thisSequence->addSlot(objects::SPI_DEVICE_TEST, 0, DeviceHandlerIF::PERFORM_OPERATION);
|
||||
thisSequence->addSlot(objects::SPI_DEVICE_TEST, 0.3, DeviceHandlerIF::SEND_WRITE);
|
||||
thisSequence->addSlot(objects::SPI_DEVICE_TEST, 0.45 * length,
|
||||
DeviceHandlerIF::GET_WRITE);
|
||||
thisSequence->addSlot(objects::SPI_DEVICE_TEST, 0.6 * length,
|
||||
DeviceHandlerIF::SEND_READ);
|
||||
thisSequence->addSlot(objects::SPI_DEVICE_TEST, 0.8 * length,
|
||||
DeviceHandlerIF::GET_READ);
|
||||
thisSequence->addSlot(objects::SPI_DEVICE_TEST, 0.6 * length, DeviceHandlerIF::SEND_READ);
|
||||
thisSequence->addSlot(objects::SPI_DEVICE_TEST, 0.8 * length, DeviceHandlerIF::GET_READ);
|
||||
#endif
|
||||
|
||||
if (thisSequence->checkSequence() == HasReturnvaluesIF::RETURN_OK) {
|
||||
return HasReturnvaluesIF::RETURN_OK;
|
||||
}
|
||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||
sif::error << "pst::pollingSequenceInitFunction: Initialization errors!"
|
||||
<< std::endl;
|
||||
sif::error << "pst::pollingSequenceInitFunction: Initialization errors!" << std::endl;
|
||||
#else
|
||||
sif::printError("pst::pollingSequenceInitFunction: Initialization errors!\n");
|
||||
#endif
|
||||
return HasReturnvaluesIF::RETURN_FAILED;
|
||||
|
||||
}
|
||||
|
@ -10,6 +10,6 @@ namespace pst {
|
||||
ReturnValue_t pstPeripheralsTest(FixedTimeslotTaskIF *thisSequence);
|
||||
ReturnValue_t pollingSequenceExamples(FixedTimeslotTaskIF *thisSequence);
|
||||
ReturnValue_t pollingSequenceDevices(FixedTimeslotTaskIF* thisSequence);
|
||||
} // namespace pst
|
||||
}
|
||||
|
||||
#endif /* POLLINGSEQUENCE_POLLINGSEQUENCFACTORY_H_ */
|
||||
|
@ -4,7 +4,9 @@
|
||||
#include <commonConfig.h>
|
||||
|
||||
namespace CLASS_ID {
|
||||
enum classIds : uint8_t {};
|
||||
enum classIds: uint8_t {
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
#endif /* FSFWCONFIG_RETURNVALUES_CLASSIDS_H_ */
|
||||
|
@ -1,8 +1,8 @@
|
||||
#ifndef FSFWCONFIG_TMTC_APID_H_
|
||||
#define FSFWCONFIG_TMTC_APID_H_
|
||||
|
||||
#include <commonConfig.h>
|
||||
#include <cstdint>
|
||||
#include <commonConfig.h>
|
||||
|
||||
namespace apid {
|
||||
static const uint16_t APID = COMMON_APID;
|
||||
|
@ -3,4 +3,5 @@
|
||||
|
||||
#include <commonConfig.h>
|
||||
|
||||
|
||||
#endif /* FSFWCONFIG_TMTC_PUSIDS_H_ */
|
||||
|
@ -1,5 +1,7 @@
|
||||
#include "OBSWConfig.h"
|
||||
#include "hardware_init.h"
|
||||
#include "boardconfig.h"
|
||||
#include "OBSWVersion.h"
|
||||
#include "OBSWConfig.h"
|
||||
|
||||
#if OBSW_ADD_LWIP_COMPONENTS == 1
|
||||
#include <lwip/init.h>
|
||||
@ -14,14 +16,16 @@
|
||||
#include <fsfw/serviceinterface/ServiceInterface.h>
|
||||
#include <fsfw/tasks/TaskFactory.h>
|
||||
|
||||
#include "cmsis_os.h"
|
||||
#include "FreeRTOS.h"
|
||||
#include "task.h"
|
||||
#include "cmsis_os.h"
|
||||
|
||||
#include <cstdio>
|
||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||
#include <iostream>
|
||||
#endif
|
||||
|
||||
|
||||
#if !defined(BOARD_NAME)
|
||||
#define BOARD_NAME "unknown board"
|
||||
#endif
|
||||
@ -80,5 +84,7 @@ void initTask(void *parameters) {
|
||||
sif::printInfo("Creating tasks..\n\r");
|
||||
#endif
|
||||
InitMission::createTasks();
|
||||
TaskFactory::deleteTask(nullptr);
|
||||
TaskFactory::instance()->deleteTask(nullptr);
|
||||
|
||||
}
|
||||
|
||||
|
@ -1 +1,4 @@
|
||||
target_sources(${TARGET_NAME} PRIVATE print.c)
|
||||
target_sources(${TARGET_NAME} PRIVATE
|
||||
print.c
|
||||
)
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
#include <boardconfig.h>
|
||||
#include <hardware_init.h>
|
||||
#include <boardconfig.h>
|
||||
|
||||
void printChar(const char* character) {
|
||||
HAL_UART_Transmit(&huart3, (const uint8_t *)character, 1, DEBUG_UART_MS_TIMEOUT);
|
||||
HAL_UART_Transmit(&huart3, (uint8_t *)character, 1 , DEBUG_UART_MS_TIMEOUT);
|
||||
}
|
||||
|
||||
|
45
cmake/BuildType.cmake
Normal file
45
cmake/BuildType.cmake
Normal file
@ -0,0 +1,45 @@
|
||||
function(set_build_type)
|
||||
|
||||
message(STATUS "Used build generator: ${CMAKE_GENERATOR}")
|
||||
|
||||
# Set a default build type if none was specified
|
||||
set(DEFAULT_BUILD_TYPE "RelWithDebInfo")
|
||||
if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
|
||||
set(DEFAULT_BUILD_TYPE "Debug")
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
||||
message(STATUS
|
||||
"Setting build type to '${DEFAULT_BUILD_TYPE}' as none was specified."
|
||||
)
|
||||
set(CMAKE_BUILD_TYPE "${DEFAULT_BUILD_TYPE}" CACHE
|
||||
STRING "Choose the type of build." FORCE
|
||||
)
|
||||
# Set the possible values of build type for cmake-gui
|
||||
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
|
||||
"Debug" "Release" "MinSizeRel" "RelWithDebInfo"
|
||||
)
|
||||
endif()
|
||||
|
||||
if(${CMAKE_BUILD_TYPE} MATCHES "Debug")
|
||||
message(STATUS
|
||||
"Building Debug application with flags: ${CMAKE_C_FLAGS_DEBUG}"
|
||||
)
|
||||
elseif(${CMAKE_BUILD_TYPE} MATCHES "RelWithDebInfo")
|
||||
message(STATUS
|
||||
"Building Release (Debug) application with "
|
||||
"flags: ${CMAKE_C_FLAGS_RELWITHDEBINFO}"
|
||||
)
|
||||
elseif(${CMAKE_BUILD_TYPE} MATCHES "MinSizeRel")
|
||||
message(STATUS
|
||||
"Building Release (Size) application with "
|
||||
"flags: ${CMAKE_C_FLAGS_MINSIZEREL}"
|
||||
)
|
||||
else()
|
||||
message(STATUS
|
||||
"Building Release (Speed) application with "
|
||||
"flags: ${CMAKE_C_FLAGS_RELEASE}"
|
||||
)
|
||||
endif()
|
||||
|
||||
endfunction()
|
33
cmake/scripts/make-debug-cfg.sh
Executable file
33
cmake/scripts/make-debug-cfg.sh
Executable file
@ -0,0 +1,33 @@
|
||||
#!/bin/sh
|
||||
counter=0
|
||||
cfg_script_name="cmake-build-cfg.py"
|
||||
while [ ${counter} -lt 5 ]
|
||||
do
|
||||
if [ -f ${cfg_script_name} ];then
|
||||
break
|
||||
fi
|
||||
counter=$((counter=counter + 1))
|
||||
cd ..
|
||||
done
|
||||
|
||||
if [ "${counter}" -ge 5 ];then
|
||||
echo "${cfg_script_name} not found in upper directories!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
build_generator=""
|
||||
os_fsfw="freertos"
|
||||
builddir="build-Debug"
|
||||
if [ "${OS}" = "Windows_NT" ]; then
|
||||
build_generator="MinGW Makefiles"
|
||||
python="py"
|
||||
# Could be other OS but this works for now.
|
||||
else
|
||||
build_generator="Unix Makefiles"
|
||||
python="python3"
|
||||
fi
|
||||
|
||||
echo "Running command (without the leading +):"
|
||||
set -x # Print command
|
||||
${python} ${cfg_script_name} -o "${os_fsfw}" -g "${build_generator}" -b "debug" -l "${builddir}"
|
||||
# set +x
|
33
cmake/scripts/make-release-cfg.sh
Executable file
33
cmake/scripts/make-release-cfg.sh
Executable file
@ -0,0 +1,33 @@
|
||||
#!/bin/sh
|
||||
counter=0
|
||||
cfg_script_name="cmake-build-cfg.py"
|
||||
while [ ${counter} -lt 5 ]
|
||||
do
|
||||
if [ -f ${cfg_script_name} ];then
|
||||
break
|
||||
fi
|
||||
counter=$((counter=counter + 1))
|
||||
cd ..
|
||||
done
|
||||
|
||||
if [ "${counter}" -ge 5 ];then
|
||||
echo "${cfg_script_name} not found in upper directories!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
build_generator=""
|
||||
os_fsfw="freertos"
|
||||
builddir="build-Release"
|
||||
if [ "${OS}" = "Windows_NT" ]; then
|
||||
build_generator="MinGW Makefiles"
|
||||
python="py"
|
||||
# Could be other OS but this works for now.
|
||||
else
|
||||
build_generator="Unix Makefiles"
|
||||
python="python3"
|
||||
fi
|
||||
|
||||
echo "Running command (without the leading +):"
|
||||
set -x # Print command
|
||||
${python} ${cfg_script_name} -o "${os_fsfw}" -g "${build_generator}" -b "release" -l "${builddir}"
|
||||
# set +x
|
33
cmake/scripts/make-size-cfg.sh
Executable file
33
cmake/scripts/make-size-cfg.sh
Executable file
@ -0,0 +1,33 @@
|
||||
#!/bin/sh
|
||||
counter=0
|
||||
cfg_script_name="cmake-build-cfg.py"
|
||||
while [ ${counter} -lt 5 ]
|
||||
do
|
||||
if [ -f ${cfg_script_name} ];then
|
||||
break
|
||||
fi
|
||||
counter=$((counter=counter + 1))
|
||||
cd ..
|
||||
done
|
||||
|
||||
if [ "${counter}" -ge 5 ];then
|
||||
echo "${cfg_script_name} not found in upper directories!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
build_generator=""
|
||||
os_fsfw="freertos"
|
||||
builddir="build-Release"
|
||||
if [ "${OS}" = "Windows_NT" ]; then
|
||||
build_generator="MinGW Makefiles"
|
||||
python="py"
|
||||
# Could be other OS but this works for now.
|
||||
else
|
||||
build_generator="Unix Makefiles"
|
||||
python="python3"
|
||||
fi
|
||||
|
||||
echo "Running command (without the leading +):"
|
||||
set -x # Print command
|
||||
${python} ${cfg_script_name} -o "${os_fsfw}" -g "${build_generator}" -b "size" -l "${builddir}"
|
||||
# set +x
|
32
cmake/scripts/ninja-debug-cfg.sh
Executable file
32
cmake/scripts/ninja-debug-cfg.sh
Executable file
@ -0,0 +1,32 @@
|
||||
#!/bin/sh
|
||||
counter=0
|
||||
cfg_script_name="cmake-build-cfg.py"
|
||||
while [ ${counter} -lt 5 ]
|
||||
do
|
||||
if [ -f ${cfg_script_name} ];then
|
||||
break
|
||||
fi
|
||||
counter=$((counter=counter + 1))
|
||||
cd ..
|
||||
done
|
||||
|
||||
if [ "${counter}" -ge 5 ];then
|
||||
echo "${cfg_script_name} not found in upper directories!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
build_generator=""
|
||||
os_fsfw="freertos"
|
||||
builddir="build-Debug"
|
||||
build_generator="Ninja"
|
||||
if [ "${OS}" = "Windows_NT" ]; then
|
||||
python="py"
|
||||
# Could be other OS but this works for now.
|
||||
else
|
||||
python="python3"
|
||||
fi
|
||||
|
||||
echo "Running command (without the leading +):"
|
||||
set -x # Print command
|
||||
${python} ${cfg_script_name} -o "${os_fsfw}" -g "${build_generator}" -b "debug" -l "${builddir}"
|
||||
# set +x
|
@ -1,42 +0,0 @@
|
||||
#!/bin/sh
|
||||
counter=0
|
||||
init_dir=$(pwd)
|
||||
cfg_script_name="cmake-build-cfg.py"
|
||||
cfg_script=""
|
||||
if [ ! -z ${REPO_ROOT} ]; then
|
||||
cfg_script=${REPO_ROOT}/cmake/${cfg_script_name}
|
||||
else
|
||||
while [ ${counter} -lt 5 ]
|
||||
do
|
||||
if [ -f ${cfg_script_name} ];then
|
||||
cfg_script=$(pwd)/${cfg_script_name}
|
||||
break
|
||||
fi
|
||||
counter=$((counter=counter + 1))
|
||||
cd ..
|
||||
done
|
||||
|
||||
if [ "${counter}" -ge 5 ];then
|
||||
echo "${cfg_script_name} not found in upper directories!"
|
||||
cd ${init_dir}
|
||||
exit 1
|
||||
fi
|
||||
cd ${init_dir}
|
||||
fi
|
||||
|
||||
build_generator=""
|
||||
os_fsfw="freertos"
|
||||
builddir="cmake-build-debug"
|
||||
if [ "${OS}" = "Windows_NT" ]; then
|
||||
build_generator="MinGW Makefiles"
|
||||
python="py"
|
||||
# Could be other OS but this works for now.
|
||||
else
|
||||
build_generator="Unix Makefiles"
|
||||
python="python3"
|
||||
fi
|
||||
|
||||
echo "Running command (without the leading +):"
|
||||
set -x # Print command
|
||||
${python} ${cfg_script} -o "${os_fsfw}" -g "${build_generator}" -b "debug" -l "${builddir}"
|
||||
# set +x
|
@ -1,42 +0,0 @@
|
||||
#!/bin/sh
|
||||
counter=0
|
||||
init_dir=$(pwd)
|
||||
cfg_script_name="cmake-build-cfg.py"
|
||||
cfg_script=""
|
||||
if [ ! -z ${REPO_ROOT} ]; then
|
||||
cfg_script=${REPO_ROOT}/cmake/${cfg_script_name}
|
||||
else
|
||||
while [ ${counter} -lt 5 ]
|
||||
do
|
||||
if [ -f ${cfg_script_name} ];then
|
||||
cfg_script=$(pwd)/${cfg_script_name}
|
||||
break
|
||||
fi
|
||||
counter=$((counter=counter + 1))
|
||||
cd ..
|
||||
done
|
||||
|
||||
if [ "${counter}" -ge 5 ];then
|
||||
echo "${cfg_script_name} not found in upper directories!"
|
||||
cd ${init_dir}
|
||||
exit 1
|
||||
fi
|
||||
cd ${init_dir}
|
||||
fi
|
||||
|
||||
build_generator=""
|
||||
os_fsfw="freertos"
|
||||
builddir="cmake-build-release"
|
||||
if [ "${OS}" = "Windows_NT" ]; then
|
||||
build_generator="MinGW Makefiles"
|
||||
python="py"
|
||||
# Could be other OS but this works for now.
|
||||
else
|
||||
build_generator="Unix Makefiles"
|
||||
python="python3"
|
||||
fi
|
||||
|
||||
echo "Running command (without the leading +):"
|
||||
set -x # Print command
|
||||
${python} ${cfg_script} -o "${os_fsfw}" -g "${build_generator}" -b "release" -l "${builddir}"
|
||||
# set +x
|
@ -1,42 +0,0 @@
|
||||
#!/bin/sh
|
||||
counter=0
|
||||
init_dir=$(pwd)
|
||||
cfg_script_name="cmake-build-cfg.py"
|
||||
cfg_script=""
|
||||
if [ ! -z ${REPO_ROOT} ]; then
|
||||
cfg_script=${REPO_ROOT}/cmake/${cfg_script_name}
|
||||
else
|
||||
while [ ${counter} -lt 5 ]
|
||||
do
|
||||
if [ -f ${cfg_script_name} ];then
|
||||
cfg_script=$(pwd)/${cfg_script_name}
|
||||
break
|
||||
fi
|
||||
counter=$((counter=counter + 1))
|
||||
cd ..
|
||||
done
|
||||
|
||||
if [ "${counter}" -ge 5 ];then
|
||||
echo "${cfg_script_name} not found in upper directories!"
|
||||
cd ${init_dir}
|
||||
exit 1
|
||||
fi
|
||||
cd ${init_dir}
|
||||
fi
|
||||
|
||||
build_generator=""
|
||||
os_fsfw="freertos"
|
||||
builddir="cmake-build-size"
|
||||
if [ "${OS}" = "Windows_NT" ]; then
|
||||
build_generator="MinGW Makefiles"
|
||||
python="py"
|
||||
# Could be other OS but this works for now.
|
||||
else
|
||||
build_generator="Unix Makefiles"
|
||||
python="python3"
|
||||
fi
|
||||
|
||||
echo "Running command (without the leading +):"
|
||||
set -x # Print command
|
||||
${python} ${cfg_script} -o "${os_fsfw}" -g "${build_generator}" -b "size" -l "${builddir}"
|
||||
# set +x
|
@ -1,41 +0,0 @@
|
||||
#!/bin/sh
|
||||
counter=0
|
||||
init_dir=$(pwd)
|
||||
cfg_script_name="cmake-build-cfg.py"
|
||||
cfg_script=""
|
||||
if [ ! -z ${REPO_ROOT} ]; then
|
||||
cfg_script=${REPO_ROOT}/cmake/${cfg_script_name}
|
||||
else
|
||||
while [ ${counter} -lt 5 ]
|
||||
do
|
||||
if [ -f ${cfg_script_name} ];then
|
||||
cfg_script=$(pwd)/${cfg_script_name}
|
||||
break
|
||||
fi
|
||||
counter=$((counter=counter + 1))
|
||||
cd ..
|
||||
done
|
||||
|
||||
if [ "${counter}" -ge 5 ];then
|
||||
echo "${cfg_script_name} not found in upper directories!"
|
||||
cd ${init_dir}
|
||||
exit 1
|
||||
fi
|
||||
cd ${init_dir}
|
||||
fi
|
||||
|
||||
build_generator=""
|
||||
os_fsfw="freertos"
|
||||
builddir="cmake-build-debug"
|
||||
build_generator="Ninja"
|
||||
if [ "${OS}" = "Windows_NT" ]; then
|
||||
python="py"
|
||||
# Could be other OS but this works for now.
|
||||
else
|
||||
python="python3"
|
||||
fi
|
||||
|
||||
echo "Running command (without the leading +):"
|
||||
set -x # Print command
|
||||
${python} ${cfg_script} -o "${os_fsfw}" -g "${build_generator}" -b "debug" -l "${builddir}"
|
||||
# set +x
|
@ -1 +1 @@
|
||||
Subproject commit 5ae35e844c2b223f7bdacdf003f61791174848c6
|
||||
Subproject commit e3a834d8409c394136af43bdf8c084941ed44b53
|
@ -1 +1 @@
|
||||
Subproject commit c564fa37fde467a0216c041bb81eeed7343ac505
|
||||
Subproject commit 797801ffde3defc48e5f3f69df31f36e5d3879c5
|
2
fsfw
2
fsfw
@ -1 +1 @@
|
||||
Subproject commit 678f8710c6656c70c56f4ea6e0ee6c0195052bff
|
||||
Subproject commit 7c2e50b665f515d6234f3d2f070609f8f37efde2
|
@ -1 +1 @@
|
||||
Subproject commit 6d423f7106e49f93743fb69e9436e1e652f9e001
|
||||
Subproject commit e6f5ff18129984b591a6a286968b1ace42c278b2
|
@ -1,10 +1,2 @@
|
||||
#!/bin/bash
|
||||
if [ ! -d bsp_stm32h7_freertos ]; then
|
||||
echo "This script should be sourced inside the example repository"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
export PATH="$(pwd)/xpacks/.bin":$PATH
|
||||
export PATH="$(pwd)/cmake/scripts:$PATH"
|
||||
|
||||
export REPO_ROOT="$(pwd)"
|
||||
|
@ -1,32 +0,0 @@
|
||||
#!/bin/bash
|
||||
if [[ ! -f README.md ]]; then
|
||||
cd ..
|
||||
fi
|
||||
|
||||
folder_list=(
|
||||
"./bsp_stm32h7_freertos"
|
||||
"./example_common"
|
||||
)
|
||||
|
||||
cmake_fmt="cmake-format"
|
||||
file_selectors="-iname CMakeLists.txt"
|
||||
if command -v ${cmake_fmt} &> /dev/null; then
|
||||
echo "Auto-formatting all CMakeLists.txt files"
|
||||
${cmake_fmt} -i CMakeLists.txt
|
||||
for dir in ${folder_list[@]}; do
|
||||
find ${dir} ${file_selectors} | xargs ${cmake_fmt} -i
|
||||
done
|
||||
else
|
||||
echo "No ${cmake_fmt} tool found, not formatting CMake files"
|
||||
fi
|
||||
|
||||
cpp_format="clang-format"
|
||||
file_selectors="-iname *.h -o -iname *.cpp -o -iname *.c -o -iname *.tpp"
|
||||
if command -v ${cpp_format} &> /dev/null; then
|
||||
for dir in ${folder_list[@]}; do
|
||||
echo "Auto-formatting C/C++ files in ${dir} recursively"
|
||||
find ${dir} ${file_selectors} | xargs ${cpp_format} --style=file -i
|
||||
done
|
||||
else
|
||||
echo "No ${cpp_format} tool found, not formatting C++/C files"
|
||||
fi
|
1
tmtc/.gitignore
vendored
1
tmtc/.gitignore
vendored
@ -1 +0,0 @@
|
||||
/tmtc_conf.json
|
24
tmtc/.idea/runConfigurations/tmtccli.xml
generated
24
tmtc/.idea/runConfigurations/tmtccli.xml
generated
@ -1,24 +0,0 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="tmtccli" type="PythonConfigurationType" factoryName="Python" nameIsGenerated="true">
|
||||
<module name="tmtc" />
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
<option name="PARENT_ENVS" value="true" />
|
||||
<envs>
|
||||
<env name="PYTHONUNBUFFERED" value="1" />
|
||||
</envs>
|
||||
<option name="SDK_HOME" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
||||
<option name="IS_MODULE_SDK" value="true" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
|
||||
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/tmtccli.py" />
|
||||
<option name="PARAMETERS" value="" />
|
||||
<option name="SHOW_COMMAND_LINE" value="false" />
|
||||
<option name="EMULATE_TERMINAL" value="true" />
|
||||
<option name="MODULE_MODE" value="false" />
|
||||
<option name="REDIRECT_INPUT" value="false" />
|
||||
<option name="INPUT_FILE" value="" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
</component>
|
@ -1 +1 @@
|
||||
Subproject commit 3cca54f66fe72f292787499e1e9bf2497a2cfdbf
|
||||
Subproject commit 99ca187b50ad9cd6ee1ba4bcbf9db981bed653ae
|
@ -1,11 +0,0 @@
|
||||
from common_tmtc.config.hook_implementation import CommonFsfwHookBase
|
||||
from tmtccmd.tc.definitions import TcQueueT
|
||||
|
||||
|
||||
class FsfwHookBase(CommonFsfwHookBase):
|
||||
def pack_service_queue(self, service: int, op_code: str, service_queue: TcQueueT):
|
||||
from common_tmtc.pus_tc.tc_packing import common_service_queue_user
|
||||
|
||||
common_service_queue_user(
|
||||
service=service, op_code=op_code, tc_queue=service_queue
|
||||
)
|
@ -1,4 +0,0 @@
|
||||
{
|
||||
"com_if": "udp",
|
||||
"tcpip_udp_recv_max_size": 1500
|
||||
}
|
56
tmtc/tmtc_client_cli.py
Executable file
56
tmtc/tmtc_client_cli.py
Executable file
@ -0,0 +1,56 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
@brief TMTC Commander entry point for command line mode.
|
||||
@details
|
||||
This client was developed by KSat for the SOURCE project to test the on-board software but
|
||||
has evolved into a more generic tool for satellite developers to perform TMTC (Telemetry and Telecommand)
|
||||
handling and testing via different communication interfaces. Currently, only the PUS standard is
|
||||
implemented as a packet standard.
|
||||
|
||||
Run this file with the -h flag to display options.
|
||||
|
||||
@license
|
||||
Copyright 2020 KSat e.V. Stuttgart
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
https://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
@author R. Mueller
|
||||
"""
|
||||
import sys
|
||||
|
||||
from common_tmtc.config.hook_implementation import FsfwHookBase
|
||||
from common_tmtc.config.definitions import PUS_APID
|
||||
from common_tmtc.pus_tm.factory_hook import ccsds_tm_handler
|
||||
try:
|
||||
from tmtccmd.runner import run_tmtc_commander, initialize_tmtc_commander, add_ccsds_handler
|
||||
from tmtccmd.ccsds.handler import CcsdsTmHandler
|
||||
except ImportError as error:
|
||||
run_tmtc_commander = None
|
||||
initialize_tmtc_commander = None
|
||||
print(error)
|
||||
print("Python tmtccmd submodule could not be imported")
|
||||
print("Install with \"cd tmtccmd && python3 -m pip install -e .\" for interactive installation")
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
def main():
|
||||
hook_obj = FsfwHookBase()
|
||||
initialize_tmtc_commander(hook_object=hook_obj)
|
||||
ccsds_handler = CcsdsTmHandler()
|
||||
ccsds_handler.add_tm_handler(apid=PUS_APID, pus_tm_handler=ccsds_tm_handler, max_queue_len=50)
|
||||
add_ccsds_handler(ccsds_handler)
|
||||
run_tmtc_commander(use_gui=False, app_name="TMTC Commander FSFW")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
56
tmtc/tmtc_client_gui.py
Normal file
56
tmtc/tmtc_client_gui.py
Normal file
@ -0,0 +1,56 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
@brief TMTC Commander entry point for command line mode.
|
||||
@details
|
||||
This client was developed by KSat for the SOURCE project to test the on-board software but
|
||||
has evolved into a more generic tool for satellite developers to perform TMTC (Telemetry and Telecommand)
|
||||
handling and testing via different communication interfaces. Currently, only the PUS standard is
|
||||
implemented as a packet standard.
|
||||
|
||||
Run this file with the -h flag to display options.
|
||||
|
||||
@license
|
||||
Copyright 2020 KSat e.V. Stuttgart
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
https://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
@author R. Mueller
|
||||
"""
|
||||
import sys
|
||||
|
||||
from common_tmtc.config.hook_implementation import FsfwHookBase
|
||||
from common_tmtc.config.definitions import PUS_APID
|
||||
from common_tmtc.pus_tm.factory_hook import ccsds_tm_handler
|
||||
try:
|
||||
from tmtccmd.runner import run_tmtc_commander, initialize_tmtc_commander, add_ccsds_handler
|
||||
from tmtccmd.ccsds.handler import CcsdsTmHandler
|
||||
except ImportError as error:
|
||||
run_tmtc_commander = None
|
||||
initialize_tmtc_commander = None
|
||||
print(error)
|
||||
print("Python tmtccmd submodule could not be imported")
|
||||
print("Install with \"cd tmtccmd && python3 -m pip install -e .\" for interactive installation")
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
def main():
|
||||
hook_obj = FsfwHookBase()
|
||||
initialize_tmtc_commander(hook_object=hook_obj)
|
||||
ccsds_handler = CcsdsTmHandler()
|
||||
ccsds_handler.add_tm_handler(apid=PUS_APID, pus_tm_handler=ccsds_tm_handler, max_queue_len=50)
|
||||
add_ccsds_handler(ccsds_handler)
|
||||
run_tmtc_commander(use_gui=True, app_name="TMTC Commander FSFW")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
@ -1,23 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
"""TMTC commander for FSFW Example"""
|
||||
from common_tmtc.tmtcc import (
|
||||
tmtcc_post_args,
|
||||
tmtcc_pre_args,
|
||||
create_default_args_parser,
|
||||
add_default_tmtccmd_args,
|
||||
parse_default_input_arguments,
|
||||
)
|
||||
from config.hook import FsfwHookBase
|
||||
|
||||
|
||||
def main():
|
||||
tmtcc_pre_args()
|
||||
hook_obj = FsfwHookBase(json_cfg_path="tmtc_conf.json")
|
||||
arg_parser = create_default_args_parser()
|
||||
add_default_tmtccmd_args(arg_parser)
|
||||
args = parse_default_input_arguments(arg_parser, hook_obj)
|
||||
tmtcc_post_args(hook_obj=hook_obj, use_gui=False, args=args)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
@ -1 +1 @@
|
||||
Subproject commit 2354f5d2778c7681ddf6602766dd4e68b943e1c0
|
||||
Subproject commit 4d71822fa1f1cfc16ccd4d0fb750eb2900a263b2
|
@ -1,12 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
"""TMTC commander for the FSFW Example"""
|
||||
from common_tmtc.tmtcc import tmtcc_post_args, tmtcc_pre_args
|
||||
|
||||
|
||||
def main():
|
||||
hook_obj = tmtcc_pre_args()
|
||||
tmtcc_post_args(hook_obj=hook_obj, use_gui=True, args=None)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Loading…
x
Reference in New Issue
Block a user