diff --git a/.drone.yml b/.drone.yml index f935d15..8f769f8 100644 --- a/.drone.yml +++ b/.drone.yml @@ -8,7 +8,7 @@ pipeline: commands: - curl https://apt.matrix.one/doc/apt-key.gpg | apt-key add - - apt-get update - - apt-get install --yes libfftw3-dev wiringpi libgflags-dev + - apt-get install --yes libfftw3-dev libgpiod-dev libgflags-dev - debuild -us -uc -b - mv ../*.deb . diff --git a/README.md b/README.md index 84a3c8e..5d11cc0 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ sudo apt-get update sudo apt-get upgrade # Install MATRIX HAL Packages and Build Prerequisites -sudo apt-get install cmake g++ git libfftw3-dev wiringpi libgflags-dev matrixio-creator-init +sudo apt-get install cmake g++ git libfftw3-dev libgpiod-dev libgflags-dev matrixio-creator-init # Reboot your Pi sudo reboot diff --git a/cpp/driver/CMakeLists.txt b/cpp/driver/CMakeLists.txt index 026399a..1fef715 100644 --- a/cpp/driver/CMakeLists.txt +++ b/cpp/driver/CMakeLists.txt @@ -4,11 +4,12 @@ cmake_minimum_required(VERSION 2.8) set(CMAKE_BUILD_TYPE Release) find_library (FFTW_LIBRARIES NAMES fftw3f ) -FIND_LIBRARY(WIRINGPI_LIB NAMES wiringPi) -FIND_LIBRARY(WIRINGPI_DEV_LIB NAMES wiringPiDev) +find_package(PkgConfig REQUIRED) +pkg_check_modules(GPIODCXX REQUIRED gpiodcxx) FIND_LIBRARY(CRYPT_LIB NAMES crypt) -add_compile_options(-std=c++11) +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) # Enable extra warnings. Not needed. include (../../cmake/FatalWarnings.cmake) @@ -18,6 +19,7 @@ find_package(Threads) include_directories( ../.. + ${GPIODCXX_INCLUDE_DIRS} ) set(matrix_creator_hal_src @@ -43,10 +45,10 @@ set(matrix_creator_hal_src ) add_library(matrix_creator_hal SHARED ${matrix_creator_hal_src}) - set_property(TARGET matrix_creator_hal PROPERTY CXX_STANDARD 11) + set_property(TARGET matrix_creator_hal PROPERTY CXX_STANDARD 17) target_link_libraries(matrix_creator_hal ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries(matrix_creator_hal ${FFTW_LIBRARIES}) - target_link_libraries(matrix_creator_hal ${WIRINGPI_LIB} ${WIRINGPI_DEV_LIB} ${CRYPT_LIB}) + target_link_libraries(matrix_creator_hal ${GPIODCXX_LIBRARIES} ${CRYPT_LIB}) set (matrix_creator_hal_headers circular_queue.h diff --git a/cpp/driver/microphone_array.cpp b/cpp/driver/microphone_array.cpp index 1a6d28a..cf83a6e 100644 --- a/cpp/driver/microphone_array.cpp +++ b/cpp/driver/microphone_array.cpp @@ -15,9 +15,7 @@ * along with this program. If not, see . */ -#include #include -#include #include #include #include @@ -25,20 +23,16 @@ #include #include #include +#include #include "cpp/driver/creator_memory_map.h" #include "cpp/driver/microphone_array.h" #include "cpp/driver/microphone_array_location.h" -static std::mutex irq_m; -static std::condition_variable irq_cv; - -void irq_callback(void) { irq_cv.notify_all(); } - namespace matrix_hal { MicrophoneArray::MicrophoneArray(bool enable_beamforming) - : lock_(irq_m), gain_(3), sampling_frequency_(16000), enable_beamforming_(enable_beamforming) { + : gain_(3), sampling_frequency_(16000), enable_beamforming_(enable_beamforming) { raw_data_.resize(kMicarrayBufferSize); if (enable_beamforming_) @@ -58,10 +52,21 @@ MicrophoneArray::~MicrophoneArray() {} void MicrophoneArray::Setup(MatrixIOBus *bus) { MatrixDriver::Setup(bus); - wiringPiSetup(); + const char *chip_name = "gpiochip0"; + gpiod::chip chip(chip_name); + gpiod::line line = chip.get_line(kMicrophoneArrayIRQ); + + gpiod::request_config req_cfg; + req_cfg.consumer = "matrix-hal-micarray"; + + gpiod::line_settings settings; + settings.set_direction(gpiod::line::direction::INPUT); + settings.set_edge_detection(gpiod::line::edge::BOTH); + + gpiod::line_config line_cfg; + line_cfg.add_line_settings(line, settings); - pinMode(kMicrophoneArrayIRQ, INPUT); - wiringPiISR(kMicrophoneArrayIRQ, INT_EDGE_BOTH, &irq_callback); + line_request_ = std::make_unique(chip.request_lines(req_cfg, line_cfg)); ReadConfValues(); } @@ -69,9 +74,19 @@ void MicrophoneArray::Setup(MatrixIOBus *bus) { // Read audio from the FPGA and calculate beam using delay & sum method bool MicrophoneArray::Read() { // TODO(andres.calderon@admobilize.com): avoid double buffer - if (!bus_) return false; + if (!bus_ || !line_request_) return false; - irq_cv.wait(lock_); + try { + if (line_request_->wait_edge_events(std::chrono::seconds(1))) { + gpiod::edge_event_buffer events; + line_request_->read_edge_events(events); + } else { + return false; + } + } catch (const std::exception &e) { + std::cerr << "Error waiting for microphone interrupt: " << e.what() << std::endl; + return false; + } if (!bus_->Read(kMicrophoneArrayBaseAddress, reinterpret_cast(&raw_data_[0]), diff --git a/cpp/driver/microphone_array.h b/cpp/driver/microphone_array.h index b2ea926..68e2730 100644 --- a/cpp/driver/microphone_array.h +++ b/cpp/driver/microphone_array.h @@ -18,9 +18,10 @@ #ifndef CPP_DRIVER_MICROPHONE_ARRAY_H_ #define CPP_DRIVER_MICROPHONE_ARRAY_H_ -#include #include #include +#include +#include #include "./circular_queue.h" #include "./matrix_driver.h" @@ -34,7 +35,7 @@ static const uint32_t MIC_sampling_frequencies[][3] = { {96000, 30, 10}, {0, 0, 0}}; const uint16_t kMicarrayBufferSize = 4096; -const uint16_t kMicrophoneArrayIRQ = 22; // GPIO06 - WiringPi:22 +const uint16_t kMicrophoneArrayIRQ = 6; // GPIO06 const uint16_t kMicrophoneChannels = 8; class MicrophoneArray : public MatrixDriver { @@ -76,7 +77,6 @@ class MicrophoneArray : public MatrixDriver { float sound_speed_mmseg = 320 * 1000.0); private: - std::unique_lock lock_; // delay and sum beamforming result std::valarray beamformed_; std::valarray raw_data_; @@ -88,6 +88,7 @@ class MicrophoneArray : public MatrixDriver { // beamforming delay and sum support std::valarray> fifos_; + std::unique_ptr line_request_; }; }; // namespace matrix_hal #endif // CPP_DRIVER_MICROPHONE_ARRAY_H_ diff --git a/cpp/driver/uart_control.cpp b/cpp/driver/uart_control.cpp index 26420c0..66a25ec 100644 --- a/cpp/driver/uart_control.cpp +++ b/cpp/driver/uart_control.cpp @@ -15,9 +15,9 @@ * along with this program. If not, see . */ -#include #include #include +#include #include "cpp/driver/creator_memory_map.h" #include "cpp/driver/uart_control.h" @@ -28,12 +28,20 @@ const uint16_t kUartIRQ = 5; const uint16_t UART_BUSY = 0x0010; uint16_t UartControl::GetUartValue() { - if (!bus_) return false; + if (!bus_ || !line_request_) return false; uint16_t value; - if (waitForInterrupt(kUartIRQ, -1) > 0) { - bus_->Read(kUartBaseAddress + 1, &value); - return value; + + try { + if (line_request_->wait_edge_events(std::chrono::seconds(1))) { + gpiod::edge_event_buffer events; + line_request_->read_edge_events(events); + bus_->Read(kUartBaseAddress + 1, &value); + return value; + } + } catch (const std::exception &e) { + std::cerr << "Error waiting for UART interrupt: " << e.what() << std::endl; } + return false; } @@ -58,11 +66,21 @@ UartControl::UartControl() : ucr_(0x0) {} void UartControl::Setup(MatrixIOBus *bus) { MatrixDriver::Setup(bus); - // TODO(andres.calderon@admobilize.com): avoid systems calls - std::system("gpio edge 5 rising"); - wiringPiSetupSys(); + const char *chip_name = "gpiochip0"; + gpiod::chip chip(chip_name); + gpiod::line line = chip.get_line(kUartIRQ); + + gpiod::request_config req_cfg; + req_cfg.consumer = "matrix-hal-uart"; + + gpiod::line_settings settings; + settings.set_direction(gpiod::line::direction::INPUT); + settings.set_edge_detection(gpiod::line::edge::RISING); + + gpiod::line_config line_cfg; + line_cfg.add_line_settings(line, settings); - pinMode(kUartIRQ, INPUT); + line_request_ = std::make_unique(chip.request_lines(req_cfg, line_cfg)); } } // namespace matrix_hal diff --git a/cpp/driver/uart_control.h b/cpp/driver/uart_control.h index 60025c6..d85b4ea 100644 --- a/cpp/driver/uart_control.h +++ b/cpp/driver/uart_control.h @@ -19,6 +19,8 @@ #define CPP_DRIVER_UART_CONTROL_H_ #include #include +#include +#include #include "./matrix_driver.h" namespace matrix_hal { @@ -31,6 +33,8 @@ class UartControl : public MatrixDriver { bool GetUartUCR(); bool SetUartValue(uint16_t data); uint16_t ucr_; + private: + std::unique_ptr line_request_; }; }; // namespace matrix_hal diff --git a/debian/control b/debian/control index 348509e..229ad79 100644 --- a/debian/control +++ b/debian/control @@ -2,7 +2,7 @@ Source: libmatrixio-creator-hal Section: libs Priority: optional Maintainer: MATRIX Labs -Build-Depends: debhelper (>= 9) +Build-Depends: debhelper (>= 9), libgpiod-dev Standards-Version: 3.9.5 Homepage: https://github.com/matrix-io/matrix-creator-hal @@ -12,7 +12,7 @@ Replaces: libmatrix-creator-hal Architecture: any Multi-Arch: same Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends}, wiringpi, libfftw3-dev, libgflags-dev +Depends: ${shlibs:Depends}, ${misc:Depends}, libgpiod2, libfftw3-dev, libgflags-dev Description: Hardware Abstraction Layer for MATRIX. Package: libmatrixio-creator-hal-dev diff --git a/demos/CMakeLists.txt b/demos/CMakeLists.txt index 2c27ce8..0b5cd8e 100644 --- a/demos/CMakeLists.txt +++ b/demos/CMakeLists.txt @@ -1,7 +1,8 @@ project(malos_service C CXX) cmake_minimum_required(VERSION 2.8) -add_definitions(-std=c++11) +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) # Enable extra warnings. Not needed. include (../cmake/FatalWarnings.cmake) @@ -9,8 +10,6 @@ ADM_EXTRA_WARNINGS() find_package(Threads) find_library (FFTW_LIBRARIES NAMES fftw3f ) -FIND_LIBRARY(WIRINGPI_LIB NAMES wiringPi) -FIND_LIBRARY(WIRINGPI_DEV_LIB NAMES wiringPiDev) FIND_LIBRARY(CRYPT_LIB NAMES crypt) FIND_LIBRARY(GFLAGS_LIB NAMES gflags) message(STATUS "gflags found =>" "${GFLAGS_LIB}") @@ -18,125 +17,125 @@ message(STATUS "gflags found =>" "${GFLAGS_LIB}") add_subdirectory(../cpp/driver driver) add_executable(compass_demo compass_demo.cpp) - set_property(TARGET compass_demo PROPERTY CXX_STANDARD 11) + set_property(TARGET compass_demo PROPERTY CXX_STANDARD 17) target_link_libraries(compass_demo matrix_creator_hal) target_link_libraries(compass_demo ${CMAKE_THREAD_LIBS_INIT}) add_executable(everloop_demo everloop_demo.cpp) - set_property(TARGET everloop_demo PROPERTY CXX_STANDARD 11) + set_property(TARGET everloop_demo PROPERTY CXX_STANDARD 17) target_link_libraries(everloop_demo matrix_creator_hal) target_link_libraries(everloop_demo ${CMAKE_THREAD_LIBS_INIT}) add_executable(arc_demo arc_demo.cpp) - set_property(TARGET arc_demo PROPERTY CXX_STANDARD 11) + set_property(TARGET arc_demo PROPERTY CXX_STANDARD 17) target_link_libraries(arc_demo matrix_creator_hal) target_link_libraries(arc_demo ${CMAKE_THREAD_LIBS_INIT}) add_executable(sensors_demo sensors_demo.cpp) - set_property(TARGET sensors_demo PROPERTY CXX_STANDARD 11) + set_property(TARGET sensors_demo PROPERTY CXX_STANDARD 17) target_link_libraries(sensors_demo matrix_creator_hal) target_link_libraries(sensors_demo ${CMAKE_THREAD_LIBS_INIT}) add_executable(uv_demo uv_demo.cpp) - set_property(TARGET uv_demo PROPERTY CXX_STANDARD 11) + set_property(TARGET uv_demo PROPERTY CXX_STANDARD 17) target_link_libraries(uv_demo matrix_creator_hal) target_link_libraries(uv_demo ${CMAKE_THREAD_LIBS_INIT}) add_executable(mic_demo_direct mic_demo_direct.cpp) - set_property(TARGET mic_demo_direct PROPERTY CXX_STANDARD 11) + set_property(TARGET mic_demo_direct PROPERTY CXX_STANDARD 17) target_link_libraries(mic_demo_direct matrix_creator_hal) target_link_libraries(mic_demo_direct ${CMAKE_THREAD_LIBS_INIT}) - target_link_libraries(mic_demo_direct ${WIRINGPI_LIB} ${WIRINGPI_DEV_LIB} ${CRYPT_LIB}) + target_link_libraries(mic_demo_direct ${CRYPT_LIB}) target_link_libraries(mic_demo_direct ${GFLAGS_LIB}) add_executable(ir_demo ir_demo.cpp) - set_property(TARGET ir_demo PROPERTY CXX_STANDARD 11) + set_property(TARGET ir_demo PROPERTY CXX_STANDARD 17) target_link_libraries(ir_demo matrix_creator_hal) target_link_libraries(ir_demo ${CMAKE_THREAD_LIBS_INIT}) - target_link_libraries(ir_demo ${WIRINGPI_LIB} ${WIRINGPI_DEV_LIB} ${CRYPT_LIB}) + target_link_libraries(ir_demo ${CRYPT_LIB}) add_executable(micarray_recorder_direct micarray_recorder_direct.cpp) - set_property(TARGET micarray_recorder_direct PROPERTY CXX_STANDARD 11) + set_property(TARGET micarray_recorder_direct PROPERTY CXX_STANDARD 17) target_link_libraries(micarray_recorder_direct matrix_creator_hal) target_link_libraries(micarray_recorder_direct ${CMAKE_THREAD_LIBS_INIT}) - target_link_libraries(micarray_recorder_direct ${WIRINGPI_LIB} ${WIRINGPI_DEV_LIB} ${CRYPT_LIB}) + target_link_libraries(micarray_recorder_direct ${CRYPT_LIB}) target_link_libraries(micarray_recorder_direct ${GFLAGS_LIB}) add_executable(micarray_raw_recorder_direct micarray_raw_recorder_direct.cpp) - set_property(TARGET micarray_raw_recorder_direct PROPERTY CXX_STANDARD 11) + set_property(TARGET micarray_raw_recorder_direct PROPERTY CXX_STANDARD 17) target_link_libraries(micarray_raw_recorder_direct matrix_creator_hal) target_link_libraries(micarray_raw_recorder_direct ${CMAKE_THREAD_LIBS_INIT}) - target_link_libraries(micarray_raw_recorder_direct ${WIRINGPI_LIB} ${WIRINGPI_DEV_LIB} ${CRYPT_LIB}) + target_link_libraries(micarray_raw_recorder_direct ${CRYPT_LIB}) target_link_libraries(micarray_raw_recorder_direct ${GFLAGS_LIB}) add_executable(mic_demo_fir_direct mic_demo_fir_direct.cpp) - set_property(TARGET mic_demo_fir_direct PROPERTY CXX_STANDARD 11) + set_property(TARGET mic_demo_fir_direct PROPERTY CXX_STANDARD 17) target_link_libraries(mic_demo_fir_direct matrix_creator_hal) target_link_libraries(mic_demo_fir_direct ${CMAKE_THREAD_LIBS_INIT}) - target_link_libraries(mic_demo_fir_direct ${WIRINGPI_LIB} ${WIRINGPI_DEV_LIB} ${CRYPT_LIB}) + target_link_libraries(mic_demo_fir_direct ${CRYPT_LIB}) target_link_libraries(mic_demo_fir_direct ${GFLAGS_LIB}) add_executable(servo_demo servo_demo.cpp) - set_property(TARGET servo_demo PROPERTY CXX_STANDARD 11) + set_property(TARGET servo_demo PROPERTY CXX_STANDARD 17) target_link_libraries(servo_demo matrix_creator_hal) target_link_libraries(servo_demo ${CMAKE_THREAD_LIBS_INIT}) add_executable(gpio_demo gpio_demo.cpp) - set_property(TARGET gpio_demo PROPERTY CXX_STANDARD 11) + set_property(TARGET gpio_demo PROPERTY CXX_STANDARD 17) target_link_libraries(gpio_demo matrix_creator_hal) target_link_libraries(gpio_demo ${CMAKE_THREAD_LIBS_INIT}) add_executable(pwm_demo pwm_demo.cpp) - set_property(TARGET pwm_demo PROPERTY CXX_STANDARD 11) + set_property(TARGET pwm_demo PROPERTY CXX_STANDARD 17) target_link_libraries(pwm_demo matrix_creator_hal) target_link_libraries(pwm_demo ${CMAKE_THREAD_LIBS_INIT}) add_executable(mic_energy_direct mic_energy_direct.cpp) - set_property(TARGET mic_energy_direct PROPERTY CXX_STANDARD 11) + set_property(TARGET mic_energy_direct PROPERTY CXX_STANDARD 17) target_link_libraries(mic_energy_direct matrix_creator_hal) target_link_libraries(mic_energy_direct ${CMAKE_THREAD_LIBS_INIT}) - target_link_libraries(mic_energy_direct ${WIRINGPI_LIB} ${WIRINGPI_DEV_LIB} ${CRYPT_LIB}) + target_link_libraries(mic_energy_direct ${CRYPT_LIB}) target_link_libraries(mic_energy_direct ${GFLAGS_LIB}) add_executable(audio_output audio_output.cpp) - set_property(TARGET audio_output PROPERTY CXX_STANDARD 11) + set_property(TARGET audio_output PROPERTY CXX_STANDARD 17) target_link_libraries(audio_output matrix_creator_hal) target_link_libraries(audio_output ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries(audio_output ${GFLAGS_LIB}) add_executable(micarray_pipes_direct micarray_pipes_direct.cpp) - set_property(TARGET micarray_pipes_direct PROPERTY CXX_STANDARD 11) + set_property(TARGET micarray_pipes_direct PROPERTY CXX_STANDARD 17) target_link_libraries(micarray_pipes_direct matrix_creator_hal) target_link_libraries(micarray_pipes_direct ${CMAKE_THREAD_LIBS_INIT}) - target_link_libraries(micarray_pipes_direct ${WIRINGPI_LIB} ${WIRINGPI_DEV_LIB} ${CRYPT_LIB}) + target_link_libraries(micarray_pipes_direct ${CRYPT_LIB}) add_executable(firmware_info firmware_info.cpp) - set_property(TARGET firmware_info PROPERTY CXX_STANDARD 11) + set_property(TARGET firmware_info PROPERTY CXX_STANDARD 17) target_link_libraries(firmware_info matrix_creator_hal) target_link_libraries(firmware_info ${CMAKE_THREAD_LIBS_INIT}) add_executable(ipaddress_demo ipaddress_demo.cpp) - set_property(TARGET ipaddress_demo PROPERTY CXX_STANDARD 11) + set_property(TARGET ipaddress_demo PROPERTY CXX_STANDARD 17) target_link_libraries(ipaddress_demo matrix_creator_hal) target_link_libraries(ipaddress_demo ${CMAKE_THREAD_LIBS_INIT}) add_executable(sensors_status sensors_status.cpp) - set_property(TARGET ipaddress_demo PROPERTY CXX_STANDARD 11) + set_property(TARGET ipaddress_demo PROPERTY CXX_STANDARD 17) target_link_libraries(sensors_status matrix_creator_hal) target_link_libraries(sensors_status ${CMAKE_THREAD_LIBS_INIT}) add_executable(direction_of_arrival_demo_direct direction_of_arrival_demo_direct.cpp) - set_property(TARGET direction_of_arrival_demo_direct PROPERTY CXX_STANDARD 11) + set_property(TARGET direction_of_arrival_demo_direct PROPERTY CXX_STANDARD 17) target_link_libraries(direction_of_arrival_demo_direct matrix_creator_hal) target_link_libraries(direction_of_arrival_demo_direct ${CMAKE_THREAD_LIBS_INIT}) - target_link_libraries(direction_of_arrival_demo_direct ${WIRINGPI_LIB} ${WIRINGPI_DEV_LIB} ${CRYPT_LIB}) + target_link_libraries(direction_of_arrival_demo_direct ${CRYPT_LIB}) target_link_libraries(direction_of_arrival_demo_direct ${FFTW_LIBRARIES}) target_link_libraries(direction_of_arrival_demo_direct ${GFLAGS_LIB}) add_executable(uart_demo uart_demo.cpp) - set_property(TARGET uart_demo PROPERTY CXX_STANDARD 11) + set_property(TARGET uart_demo PROPERTY CXX_STANDARD 17) target_link_libraries(uart_demo matrix_creator_hal) target_link_libraries(uart_demo ${CMAKE_THREAD_LIBS_INIT}) - target_link_libraries(uart_demo ${WIRINGPI_LIB} ${WIRINGPI_DEV_LIB} ${CRYPT_LIB}) + target_link_libraries(uart_demo ${CRYPT_LIB}) diff --git a/demos/direction_of_arrival_demo_direct.cpp b/demos/direction_of_arrival_demo_direct.cpp index 8a4c6da..4fbc9c4 100644 --- a/demos/direction_of_arrival_demo_direct.cpp +++ b/demos/direction_of_arrival_demo_direct.cpp @@ -6,7 +6,6 @@ #include #include #include -#include #include #include diff --git a/demos/mic_demo_direct.cpp b/demos/mic_demo_direct.cpp index 9d2840b..cecbf1a 100644 --- a/demos/mic_demo_direct.cpp +++ b/demos/mic_demo_direct.cpp @@ -3,7 +3,6 @@ * All rights reserved. */ #include -#include #include #include diff --git a/demos/mic_demo_fir_direct.cpp b/demos/mic_demo_fir_direct.cpp index e3c1276..703a3cd 100644 --- a/demos/mic_demo_fir_direct.cpp +++ b/demos/mic_demo_fir_direct.cpp @@ -4,7 +4,6 @@ */ #include -#include #include #include diff --git a/demos/mic_energy_direct.cpp b/demos/mic_energy_direct.cpp index 417fc28..29a4e30 100644 --- a/demos/mic_energy_direct.cpp +++ b/demos/mic_energy_direct.cpp @@ -3,7 +3,6 @@ * All rights reserved. */ #include -#include #include #include diff --git a/demos/micarray_pipes_direct.cpp b/demos/micarray_pipes_direct.cpp index 95cab21..ea4a2f0 100644 --- a/demos/micarray_pipes_direct.cpp +++ b/demos/micarray_pipes_direct.cpp @@ -6,7 +6,6 @@ #include #include #include -#include #include #include diff --git a/demos/micarray_raw_recorder_direct.cpp b/demos/micarray_raw_recorder_direct.cpp index bc3eeb7..d395885 100644 --- a/demos/micarray_raw_recorder_direct.cpp +++ b/demos/micarray_raw_recorder_direct.cpp @@ -6,7 +6,6 @@ */ #include -#include #include #include diff --git a/demos/micarray_recorder_direct.cpp b/demos/micarray_recorder_direct.cpp index 38451de..ee2f097 100644 --- a/demos/micarray_recorder_direct.cpp +++ b/demos/micarray_recorder_direct.cpp @@ -4,7 +4,6 @@ */ #include -#include #include #include diff --git a/demos/uart_demo.cpp b/demos/uart_demo.cpp index dd17c11..189560a 100644 --- a/demos/uart_demo.cpp +++ b/demos/uart_demo.cpp @@ -3,7 +3,6 @@ * All rights reserved. */ -#include #include #include #include