Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

IRQ support using Linux kernel Character Device + Posix threads #961

Merged
merged 31 commits into from
Mar 19, 2024
Merged
Show file tree
Hide file tree
Changes from 17 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
e434507
move chip info into GPIOChipCache struct
2bndy5 Mar 13, 2024
af70aa8
make gpioCache static in gpio.h
2bndy5 Mar 13, 2024
32f7803
use pthread & poll with Linux kernel's char-dev API
2bndy5 Mar 13, 2024
abe8d25
fix segfault; avoid using extern funcs
2bndy5 Mar 13, 2024
ed289b4
use pthread_cancel instead; fix ISR callback trigger
2bndy5 Mar 15, 2024
678a144
don't release pin upon exiting attachInterrupt()
2bndy5 Mar 16, 2024
bbd5680
remove unneccessary config flags for FALLING edge detetction
2bndy5 Mar 16, 2024
ec92ac5
clear the edge event from kernel buffer
2bndy5 Mar 16, 2024
995bca5
[example] change IRQ_PIN number and flush cout stream before pin_n_wa…
2bndy5 Mar 16, 2024
004291e
IRQ example timeout
TMRh20 Mar 16, 2024
870d3a6
don't poll(); just read() and track event sequence number
2bndy5 Mar 16, 2024
03661b1
[example] use endl instead of flush
2bndy5 Mar 16, 2024
cf6d5f2
code cleanup (in all Linux driver files)
2bndy5 Mar 17, 2024
a066d0c
review IRQ support in Linux drivers
2bndy5 Mar 17, 2024
bd48742
increase event buffer size; only zero-out `irqEventInfo` once
2bndy5 Mar 17, 2024
b950a42
re-enable wiringPi driver in Linux CI using old makefile build
2bndy5 Mar 17, 2024
b74f17e
Apply suggestions from clang-format code review
2bndy5 Mar 18, 2024
bf2282c
rearrange pre-processor statements in a header file
2bndy5 Mar 18, 2024
1322530
disable wiringPi in linux CI
2bndy5 Mar 18, 2024
7ff5565
reviewed Linux CI (again)
2bndy5 Mar 18, 2024
9aa37b3
[CI] fix typo in path
2bndy5 Mar 18, 2024
f8decf1
some initial code review
2bndy5 Mar 18, 2024
e56ecf4
prefer using time.h
2bndy5 Mar 18, 2024
4f79413
remove INT_EDGE_SETUP define (wiringPi-specific meaning)
2bndy5 Mar 18, 2024
0b80565
review includes for RF24_arch_config.h files
2bndy5 Mar 18, 2024
5ab12b0
add C linkage instead of declaring extern functions
2bndy5 Mar 18, 2024
c3845f7
more `#include` statements review
2bndy5 Mar 18, 2024
d81439f
reviewed wiringPi/spi wrapper
2bndy5 Mar 18, 2024
7973ba6
move gpiochipX init out of cache c'tors
2bndy5 Mar 18, 2024
0df788c
add wiringPi pin number for CE_PIN to linux examples
2bndy5 Mar 18, 2024
3b3187a
wait for thread to terminate before closing pin fd
2bndy5 Mar 19, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions .github/workflows/build_linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ jobs:
- "--driver=SPIDEV"
- "--driver=MRAA"
- "--driver=pigpio"
# - "--soc=BCM2835 --driver=wiringPi"
- "--soc=BCM2835 --driver=wiringPi"

env:
CFLAGS: "-I /usr/local/include"
Expand Down Expand Up @@ -133,9 +133,6 @@ jobs:
run: sudo make install

- name: make linux examples
# compiling examples for wiringPi is broken see issue #669
# executables linked to wiringPi additionally need to be linked to crypt and shm_open
# interruptConfigure.cpp example is incompatible with MRAA & wiringPi drivers
if: ${{ matrix.config-options != '--soc=BCM2835 --driver=wiringPi' && matrix.config-options != '--driver=MRAA' }}
run: |
cd examples_linux
Expand Down
11 changes: 3 additions & 8 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -137,17 +137,12 @@ if(DEFINED RF24_SPI_SPEED)
)
endif()
# allow user customization of default GPIO chip used with the SPIDEV driver
if(DEFINED RF24_SPIDEV_GPIO_CHIP)
message(STATUS "RF24_SPIDEV_GPIO_CHIP set to ${RF24_SPIDEV_GPIO_CHIP}")
if(DEFINED RF24_LINUX_GPIO_CHIP)
message(STATUS "RF24_LINUX_GPIO_CHIP set to ${RF24_LINUX_GPIO_CHIP}")
target_compile_definitions(${LibTargetName} PUBLIC
RF24_SPIDEV_GPIO_CHIP="${RF24_SPIDEV_GPIO_CHIP}"
RF24_LINUX_GPIO_CHIP="${RF24_LINUX_GPIO_CHIP}"
)
endif()
# conditionally disable interruot support (a pigpio specific feature)
if("${LibPIGPIO}" STREQUAL "LibPIGPIO-NOTFOUND" OR DEFINED RF24_NO_INTERRUPT)
message(STATUS "Disabling IRQ pin support")
target_compile_definitions(${LibTargetName} PUBLIC RF24_NO_INTERRUPT)
endif()


#####################################
Expand Down
10 changes: 2 additions & 8 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,9 @@ OBJECTS=RF24.o
ifeq ($(DRIVER), MRAA)
OBJECTS+=spi.o gpio.o compatibility.o
else ifeq ($(DRIVER), RPi)
OBJECTS+=spi.o bcm2835.o compatibility.o
ifneq (,$(findstring -lpigpio,$(SHARED_LINKER_LIBS)))
OBJECTS+=interrupt.o
endif
OBJECTS+=spi.o bcm2835.o compatibility.o interrupt.o
else ifeq ($(DRIVER), SPIDEV)
OBJECTS+=spi.o gpio.o compatibility.o
ifneq (,$(findstring -lpigpio,$(SHARED_LINKER_LIBS)))
OBJECTS+=interrupt.o
endif
OBJECTS+=spi.o gpio.o compatibility.o interrupt.o
else ifeq ($(DRIVER), wiringPi)
OBJECTS+=spi.o
else ifeq ($(DRIVER), pigpio)
Expand Down
29 changes: 3 additions & 26 deletions configure
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@
CROSS_CC=arm-linux-gnueabihf-gcc
CROSS_CXX=arm-linux-gnueabihf-g++

pigpio_detected=0

function help {
cat <<EOF
configure script for RF24 library.
Expand Down Expand Up @@ -58,11 +56,6 @@ function execute_check {
fi
}

if [[ -f "/usr/lib/libpigpio.so" || -f "/usr/local/lib/libpigpio.so" || -f "/usr/arm-linux-gnueabihf/lib/libpigpio.so" ]]; then
echo "[INFO] pigpio lib found."
pigpio_detected=1
fi

function die {
echo "[ERROR] $1"
exit $2
Expand Down Expand Up @@ -192,7 +185,7 @@ function detect_driver {
result=MRAA
elif [[ $(execute_check "${REMOTE_LDCONFIG} -p | grep liblittlewire-spi") ]]; then
result=LittleWire
elif [ $pigpio_detected -eq 1 ]; then
elif [[ -f "/usr/lib/libpigpio.so" || -f "/usr/local/lib/libpigpio.so" || -f "/usr/arm-linux-gnueabihf/lib/libpigpio.so" ]]; then
result=pigpio
else
result=""
Expand Down Expand Up @@ -407,24 +400,12 @@ fi

case ${DRIVER} in
wiringPi)
SHARED_LINKER_LIBS+=" -lpigpio -lwiringPi"
SHARED_LINKER_LIBS+=" -lwiringPi"
CFLAGS+=" -lwiringPi"
;;
SPIDEV)
if [ $pigpio_detected -eq 1 ]; then
echo "[INFO] linking to pigpio for interrupt compatibility"
SHARED_LINKER_LIBS+=" -lpigpio"
else
CFLAGS+=" -DRF24_NO_INTERRUPT"
fi
;;
RPi)
if [ $pigpio_detected -eq 1 ]; then
echo "[INFO] linking to pigpio for interrupt compatibility"
SHARED_LINKER_LIBS+=" -lpigpio"
else
CFLAGS+=" -DRF24_NO_INTERRUPT"
fi
;;
MRAA)
SHARED_LINKER_LIBS+=" -lmraa"
Expand All @@ -433,11 +414,7 @@ LittleWire)
SHARED_LINKER_LIBS+=" -llittlewire-spi"
;;
pigpio)
if [ $pigpio_detected -eq 0 ]; then
die "[ERROR] pigpio was not detected. Make sure pigpio is installed." 2
else
SHARED_LINKER_LIBS+=" -lpigpio"
fi
SHARED_LINKER_LIBS+=" -lpigpio"
;;
*)
die "Unsupported DRIVER: ${DRIVER}." 2
Expand Down
17 changes: 3 additions & 14 deletions examples_linux/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ find_library(RF24 rf24 REQUIRED)
message(STATUS "using RF24 library: ${RF24}")

# conditionally append "interruptConfigure" to the EXAMPLES_LIST
if("${RF24_DRIVER}" STREQUAL "MRAA" OR "${RF24_DRIVER}" STREQUAL "wiringPi" OR "${LibPIGPIO}" STREQUAL "LibPIGPIO-NOTFOUND")
if("${RF24_DRIVER}" STREQUAL "MRAA")
message(STATUS "Skipping interruptConfigure.cpp example as it is incompatible with selected driver library")
else() # not using MRAA or wiringPi drivers (or pigpio lib was found)
list(APPEND EXAMPLES_LIST interruptConfigure)
Expand Down Expand Up @@ -52,26 +52,15 @@ elseif("${RF24_DRIVER}" STREQUAL "wiringPi")
else()
message(FATAL "Lib ${RF24_DRIVER} not found.")
endif()
elseif(NOT "${LibPIGPIO}" STREQUAL "LibPIGPIO-NOTFOUND" AND NOT DEFINED RF24_NO_INTERUPT)
if(NOT "${RF24_DRIVER}" STREQUAL "pigpio")
message(STATUS "linking to ${LibPIGPIO} for interrupt support")
else()
message(STATUS "linking to ${LibPIGPIO}")
endif()
elseif(NOT "${LibPIGPIO}" STREQUAL "LibPIGPIO-NOTFOUND")
message(STATUS "linking to ${LibPIGPIO}")
# linking to pigpio requires pthread to be listed as last linked lib
list(APPEND linked_libs ${LibPIGPIO} pthread)
else()
message(STATUS "Disabling IRQ pin support")
endif()

foreach(example ${EXAMPLES_LIST})
#make a target
add_executable(${example} ${example}.cpp)

# avoid including interrupt.h when pigpio is not available
if("${LibPIGPIO}" STREQUAL "LibPIGPIO-NOTFOUND" OR DEFINED RF24_NO_INTERRUPT)
target_compile_definitions(${example} PUBLIC RF24_NO_INTERRUPT)
endif()

target_link_libraries(${example} PUBLIC ${linked_libs})
endforeach()
Expand Down
2 changes: 1 addition & 1 deletion examples_linux/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ include ../Makefile.inc

# define all programs
PROGRAMS = gettingstarted acknowledgementPayloads manualAcknowledgements streamingData multiceiverDemo scanner
ifneq (,$(findstring -lpigpio,$(SHARED_LINKER_LIBS)))
ifneq ($(DRIVER), MRAA)
PROGRAMS+=interruptConfigure
endif

Expand Down
2 changes: 2 additions & 0 deletions examples_linux/Makefile.examples
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ SOURCES = $(PROGRAMS:=.cpp)
LIBS=-l$(LIB)
ifeq ($(DRIVER), LittleWire)
LIBS+= -llittlewire-spi
else ifeq ($(DRIVER), wiringPi)
LIBS+= -lwiringPi -lcrypt -lrt
endif

all: $(PROGRAMS)
Expand Down
13 changes: 9 additions & 4 deletions examples_linux/interruptConfigure.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
using namespace std;

// We will be using the nRF24L01's IRQ pin for this example
#define IRQ_PIN 12 // this needs to be a digital input capable pin
#define IRQ_PIN 24 // this needs to be a digital input capable pin

// this example is a sequential program. so we need to wait for the event to be handled
volatile bool got_interrupt = false; // used to signify that the event started
Expand Down Expand Up @@ -167,14 +167,14 @@ void master()
// Test the "data ready" event with the IRQ pin
cout << "\nConfiguring IRQ pin to ignore the 'data sent' event\n";
radio.maskIRQ(true, false, false); // args = "data_sent", "data_fail", "data_ready"
cout << " Pinging RX node for 'data ready' event...";
cout << " Pinging RX node for 'data ready' event..." << endl;
ping_n_wait(); // transmit a payload and detect the IRQ pin
pl_iterator++; // increment iterator for next test

// Test the "data sent" event with the IRQ pin
cout << "\nConfiguring IRQ pin to ignore the 'data ready' event\n";
radio.maskIRQ(false, false, true); // args = "data_sent", "data_fail", "data_ready"
cout << " Pinging RX node for 'data sent' event...";
cout << " Pinging RX node for 'data sent' event..." << endl;
radio.flush_tx(); // flush payloads from any failed prior test
ping_n_wait(); // transmit a payload and detect the IRQ pin
pl_iterator++; // increment iterator for next test
Expand All @@ -196,7 +196,7 @@ void master()
// test the "data fail" event with the IRQ pin
cout << "\nConfiguring IRQ pin to reflect all events\n";
radio.maskIRQ(0, 0, 0); // args = "data_sent", "data_fail", "data_ready"
cout << " Pinging inactive RX node for 'data fail' event...";
cout << " Pinging inactive RX node for 'data fail' event..." << endl;
ping_n_wait(); // transmit a payload and detect the IRQ pin

// CE pin is still HIGH which consumes more power. Example is now idling so...
Expand Down Expand Up @@ -250,7 +250,12 @@ void ping_n_wait()
// use the non-blocking call to write a payload and begin transmission
// the "false" argument means we are expecting an ACK packet response
radio.startFastWrite(tx_payloads[pl_iterator], tx_pl_size, false);
uint32_t timer = millis();
while (!got_interrupt) {
if (millis() - timer > 500) {
cout << "\tIRQ NOT received" << endl;
break;
}
/*
* IRQ pin is LOW when activated. Otherwise it is always HIGH
* Wait in this empty loop until IRQ pin is activated.
Expand Down
3 changes: 0 additions & 3 deletions examples_linux/ncurses/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,3 @@ target_link_libraries(${example} PUBLIC
${linked_libs}
${CURSES_LIBRARIES}
)
if("${LibPIGPIO}" STREQUAL "LibPIGPIO-NOTFOUND" OR DEFINED RF24_NO_INTERRUPT)
target_compile_definitions(${example} PUBLIC RF24_NO_INTERRUPT)
endif()
2 changes: 1 addition & 1 deletion examples_linux/readme.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
Note: These examples were originally designed for RPi, but should work on any supported Linux platform, with the proper pin configuration.

See http://tmrh20.github.io/RF24 for more information
See http://nRF24.github.io/RF24 for more information
11 changes: 1 addition & 10 deletions pyRF24/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@
os.environ[identifier] = value

except FileNotFoundError: # assuming lib was built & installed with CMake

# get LIB_VERSION from library.properties file for Arduino IDE
with open(os.path.join(git_dir, "library.properties"), "r", encoding="utf-8") as f:
for line in f.read().splitlines():
Expand All @@ -44,7 +43,6 @@

# check C++ RF24 lib is installed
finally:

# check for possible linker flags set via CFLAGS environment variable
for flag in cflags.split("-"):
if flag.startswith("L"):
Expand All @@ -71,13 +69,6 @@
)
)

# avoid IRQ support if pigpio is not available; link to pigpio if it is found
found_pigpio = False
for symlink_loc in symlink_directory:
if os.path.exists(symlink_loc + "/libpigpio.so"):
found_pigpio = True
# IRQ pin features will be implemented in python via pigpio's python API or RPi.GPIO
cflags += " -DRF24_NO_INTERRUPT"

# append any additionally found compiler flags
os.environ["CFLAGS"] = cflags
Expand Down Expand Up @@ -114,7 +105,7 @@
Extension(
"RF24",
sources=["pyRF24.cpp"],
libraries=["rf24", BOOST_LIB] + (["pigpio"] if found_pigpio else [])
libraries=["rf24", BOOST_LIB],
)
],
)
74 changes: 22 additions & 52 deletions utility/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,14 @@ if ("${RF24_DRIVER}" STREQUAL "wiringPi") # Use wiringPi
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/includes.h
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/spi.cpp
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/RF24_arch_config.h
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/interrupt.h
PARENT_SCOPE
)
install(FILES
${RF24_DRIVER}/includes.h
${RF24_DRIVER}/spi.h
${RF24_DRIVER}/RF24_arch_config.h
${RF24_DRIVER}/interrupt.h
DESTINATION include/RF24/utility/${RF24_DRIVER}
)
elseif("${RF24_DRIVER}" STREQUAL "RPi") # use RPi
Expand All @@ -23,34 +25,18 @@ elseif("${RF24_DRIVER}" STREQUAL "RPi") # use RPi
${RF24_DRIVER}/spi.h
${RF24_DRIVER}/compatibility.h
${RF24_DRIVER}/RF24_arch_config.h
${RF24_DRIVER}/interrupt.h
DESTINATION include/RF24/utility/${RF24_DRIVER}
)
if(NOT "${LibPIGPIO}" STREQUAL "LibPIGPIO-NOTFOUND" AND NOT DEFINED RF24_NO_INTERRUPT)
set(RF24_LINKED_DRIVER ${LibPIGPIO} PARENT_SCOPE)
message(STATUS "linking to pigpio lib for interrupt functionality")
install(FILES
${RF24_DRIVER}/interrupt.h
DESTINATION include/RF24/utility/${RF24_DRIVER}
)
set(RF24_DRIVER_SOURCES
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/includes.h
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/bcm2835.c
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/spi.cpp
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/compatibility.cpp
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/RF24_arch_config.h
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/interrupt.cpp
PARENT_SCOPE
)
else()
set(RF24_DRIVER_SOURCES
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/includes.h
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/bcm2835.c
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/spi.cpp
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/compatibility.cpp
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/RF24_arch_config.h
PARENT_SCOPE
)
endif()
set(RF24_DRIVER_SOURCES
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/includes.h
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/bcm2835.c
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/spi.cpp
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/compatibility.cpp
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/RF24_arch_config.h
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/interrupt.cpp
PARENT_SCOPE
)
elseif("${RF24_DRIVER}" STREQUAL "SPIDEV") # use SPIDEV
if(NOT SPIDEV_EXISTS)
message(WARNING "Detecting /dev/spidev0.0 failed - continuing anyway. Please make sure SPI is enabled.")
Expand All @@ -61,34 +47,18 @@ elseif("${RF24_DRIVER}" STREQUAL "SPIDEV") # use SPIDEV
${RF24_DRIVER}/spi.h
${RF24_DRIVER}/compatibility.h
${RF24_DRIVER}/RF24_arch_config.h
${RF24_DRIVER}/interrupt.h
DESTINATION include/RF24/utility/${RF24_DRIVER}
)
if(NOT "${LibPIGPIO}" STREQUAL "LibPIGPIO-NOTFOUND" AND NOT DEFINED RF24_NO_INTERRUPT)
set(RF24_LINKED_DRIVER ${LibPIGPIO} PARENT_SCOPE)
message(STATUS "linking to pigpio lib for interrupt functionality")
install(FILES
${RF24_DRIVER}/interrupt.h
DESTINATION include/RF24/utility/${RF24_DRIVER}
)
set(RF24_DRIVER_SOURCES
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/includes.h
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/gpio.cpp
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/spi.cpp
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/compatibility.cpp
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/RF24_arch_config.h
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/interrupt.cpp
PARENT_SCOPE
)
else()
set(RF24_DRIVER_SOURCES
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/includes.h
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/gpio.cpp
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/spi.cpp
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/compatibility.cpp
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/RF24_arch_config.h
PARENT_SCOPE
)
endif()
set(RF24_DRIVER_SOURCES
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/includes.h
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/gpio.cpp
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/spi.cpp
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/compatibility.cpp
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/RF24_arch_config.h
${CMAKE_CURRENT_LIST_DIR}/${RF24_DRIVER}/interrupt.cpp
PARENT_SCOPE
)
elseif("${RF24_DRIVER}" STREQUAL "MRAA") # use MRAA
set(RF24_LINKED_DRIVER ${LibMRAA} PARENT_SCOPE)
set(RF24_DRIVER_SOURCES
Expand Down
Loading
Loading