Files
scottp 97affae86c Who made it, and why: author, credits, licence and support
The README says who wrote it and the two projects it was built for, WII6
and OGLAS, with their sites; credits Ground Control for the modem and
the library that does the protocol work; and gives the licence with
contact details, where to report issues and what helps in a report, and
that it is not a Ground Control product. The licence, every source file
and the Python package's metadata carry the copyright and email; the
package lists its homepage, repository, issues and changelog.
2026-10-09 13:16:30 +11:00

64 lines
2.8 KiB
CMake

# SPDX-License-Identifier: MIT
# Copyright (c) 2026 Scott Penrose <scottp@dd.com.au>
#
# rockblock9704-zephyr: Ground Control's RockBLOCK 9704 library built for
# Zephyr, with the serial port, the timing calls and one worker thread to own
# it. The library itself is not copied or forked: it is Ground Control's
# repository, pristine, pinned in west.yml at modules/lib/rockblock9704, and
# this file compiles the part of it that runs on a microcontroller.
if(CONFIG_RB9704)
if(CONFIG_RB9704_UPSTREAM_DIR)
set(RB9704_UP ${CONFIG_RB9704_UPSTREAM_DIR})
elseif(DEFINED WEST_TOPDIR)
set(RB9704_UP ${WEST_TOPDIR}/modules/lib/rockblock9704)
else()
set(RB9704_UP ${ZEPHYR_BASE}/../modules/lib/rockblock9704)
endif()
get_filename_component(RB9704_UP ${RB9704_UP} ABSOLUTE)
if(NOT EXISTS ${RB9704_UP}/src/rockblock_9704.h)
message(FATAL_ERROR
"rockblock9704-zephyr: Ground Control's library is not at ${RB9704_UP}. "
"Add rock7/RockBLOCK-9704 to your west.yml at modules/lib/rockblock9704 "
"(this repository's west.yml has the pin) and run `west update`, or set "
"CONFIG_RB9704_UPSTREAM_DIR.")
endif()
# The library's portable core. Left out: crossplatform.c (no Zephyr branch;
# src/rb9704_shims.c instead), serial_presets/ (src/rb9704_serial.c is the
# Zephyr preset), gpio.c (libgpiod), kermit (modem firmware update).
set(RB9704_UP_SRCS
${RB9704_UP}/src/rockblock_9704.c
${RB9704_UP}/src/jspr.c
${RB9704_UP}/src/jspr_command.c
${RB9704_UP}/src/imt_queue.c
${RB9704_UP}/src/serial.c
${RB9704_UP}/src/third_party/cJSON/cJSON.c
${RB9704_UP}/src/third_party/base64/base64.c)
zephyr_library_named(rb9704)
zephyr_library_sources(
src/rb9704_serial.c
src/rb9704_shims.c
src/rb9704_worker.c
${RB9704_UP_SRCS})
zephyr_library_sources_ifdef(CONFIG_RB9704_SHELL src/rb9704_shell.c)
zephyr_library_sources_ifdef(CONFIG_RB9704_POWER src/rb9704_power.c)
zephyr_include_directories(include)
zephyr_library_include_directories(${RB9704_UP}/src src)
# Both the library and the worker see these: the message buffers' size,
# CRC included, and the library's hook for a platform's serial port.
math(EXPR RB9704_PAYLOAD "${CONFIG_RB9704_MESSAGE_MAX} + 2")
zephyr_library_compile_definitions(
IMT_PAYLOAD_SIZE=${RB9704_PAYLOAD}U
SERIAL_CONTEXT_SETUP_FUNC=rb9704_serial_set_context)
# The library's own files: the prototypes it calls without a declaration
# in scope outside its presets, the POSIX declarations picolibc guards
# behind feature macros, and -w because it is built pristine and its
# warnings are Ground Control's to fix.
set_source_files_properties(${RB9704_UP_SRCS} PROPERTIES COMPILE_OPTIONS
"-include${CMAKE_CURRENT_LIST_DIR}/src/rb9704_glue.h;-D_POSIX_C_SOURCE=200809L;-D_DEFAULT_SOURCE;-w")
endif()