Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/CMakeLists.txt b/CMakeLists.txt
- index f3ef31e..bc2b532 100644
- --- a/CMakeLists.txt
- +++ b/CMakeLists.txt
- @@ -23,6 +23,8 @@
- ########################################################################
- cmake_minimum_required(VERSION 2.6)
- project(rtlsdr C)
- +set(CMAKE_BUILD_TYPE "Debug")
- +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -ggdb")
- #select the release build type by default to get optimization flags
- if(NOT CMAKE_BUILD_TYPE)
- @@ -50,6 +52,11 @@ endif()
- ########################################################################
- find_package(PkgConfig)
- find_package(LibUSB)
- +if(APPLE)
- + INCLUDE_DIRECTORIES ( /Developer/Headers/FlatCarbon )
- + find_library(IOKIT_LIBRARY IOKit)
- + find_library(COREFOUND_LIBRARY CoreFoundation)
- +endif (APPLE)
- set(THREADS_USE_PTHREADS_WIN32 true)
- find_package(Threads)
- diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
- index 6b23395..ff5266e 100644
- --- a/src/CMakeLists.txt
- +++ b/src/CMakeLists.txt
- @@ -72,7 +72,8 @@ add_executable(rtl_test rtl_test.c)
- add_executable(rtl_fm rtl_fm.c)
- add_executable(rtl_eeprom rtl_eeprom.c)
- add_executable(rtl_adsb rtl_adsb.c)
- -set(INSTALL_TARGETS rtlsdr_shared rtlsdr_static rtl_sdr rtl_tcp rtl_test rtl_fm rtl_eeprom rtl_adsb)
- +add_executable(rtl_acars rtl_acars.c)
- +set(INSTALL_TARGETS rtlsdr_shared rtlsdr_static rtl_sdr rtl_tcp rtl_test rtl_fm rtl_eeprom rtl_adsb rtl_acars)
- target_link_libraries(rtl_sdr rtlsdr_shared
- ${LIBUSB_LIBRARIES}
- @@ -98,9 +99,14 @@ target_link_libraries(rtl_adsb rtlsdr_shared
- ${LIBUSB_LIBRARIES}
- ${CMAKE_THREAD_LIBS_INIT}
- )
- +target_link_libraries(rtl_acars rtlsdr_shared
- + ${LIBUSB_LIBRARIES}
- + ${CMAKE_THREAD_LIBS_INIT}
- +)
- if(UNIX)
- target_link_libraries(rtl_fm m)
- target_link_libraries(rtl_adsb m)
- +target_link_libraries(rtl_acars m)
- if(APPLE)
- target_link_libraries(rtl_test m)
- else()
- @@ -115,12 +121,14 @@ target_link_libraries(rtl_test libgetopt_static)
- target_link_libraries(rtl_fm libgetopt_static)
- target_link_libraries(rtl_eeprom libgetopt_static)
- target_link_libraries(rtl_adsb libgetopt_static)
- +target_link_libraries(rtl_acars libgetopt_static)
- set_property(TARGET rtl_sdr APPEND PROPERTY COMPILE_DEFINITIONS "rtlsdr_STATIC" )
- set_property(TARGET rtl_tcp APPEND PROPERTY COMPILE_DEFINITIONS "rtlsdr_STATIC" )
- set_property(TARGET rtl_test APPEND PROPERTY COMPILE_DEFINITIONS "rtlsdr_STATIC" )
- set_property(TARGET rtl_fm APPEND PROPERTY COMPILE_DEFINITIONS "rtlsdr_STATIC" )
- set_property(TARGET rtl_eeprom APPEND PROPERTY COMPILE_DEFINITIONS "rtlsdr_STATIC" )
- set_property(TARGET rtl_adsb APPEND PROPERTY COMPILE_DEFINITIONS "rtlsdr_STATIC" )
- +set_property(TARGET rtl_acars APPEND PROPERTY COMPILE_DEFINITIONS "rtlsdr_STATIC" )
- endif()
- ########################################################################
- # Install built library files & utilities
- diff --git a/src/rtl_adsb.c b/src/rtl_adsb.c
- index 44b62e2..706fd12 100644
- --- a/src/rtl_adsb.c
- +++ b/src/rtl_adsb.c
- @@ -58,7 +58,8 @@
- #define BADSAMPLE 255
- static pthread_t demod_thread;
- -static pthread_mutex_t data_ready; /* locked when no data available */
- +static pthread_mutex_t data_ready; /* guard for buff_ready condition */
- +static pthread_cond_t buff_ready; /* signaled when data available */
- static volatile int do_exit = 0;
- static rtlsdr_dev_t *dev = NULL;
- @@ -162,7 +163,7 @@ void squares_precompute(void)
- }
- }
- -int magnitute(uint8_t *buf, int len)
- +int magnitude(uint8_t *buf, int len)
- /* takes i/q, changes buf in place (16 bit), returns new len (16 bit) */
- {
- int i;
- @@ -335,19 +336,30 @@ static void rtlsdr_callback(unsigned char *buf, uint32_t len, void *ctx)
- {
- if (do_exit) {
- return;}
- - memcpy(buffer, buf, len);
- - pthread_mutex_trylock(&data_ready);
- - pthread_mutex_unlock(&data_ready);
- + int err = pthread_mutex_lock(&data_ready);
- + if (err) {
- + fprintf(stderr, "lock error %d\n", err);
- + } else {
- + memcpy(buffer, buf, len);
- + pthread_cond_signal(&buff_ready);
- + pthread_mutex_unlock(&data_ready);
- + }
- }
- static void *demod_thread_fn(void *arg)
- {
- - int len;
- + int len, err;
- while (!do_exit) {
- - pthread_mutex_lock(&data_ready);
- - len = magnitute(buffer, DEFAULT_BUF_LENGTH);
- - manchester((uint16_t*)buffer, len);
- - messages((uint16_t*)buffer, len);
- + err = pthread_mutex_lock(&data_ready);
- + if (err) {
- + fprintf(stderr, "lock error %d\n", err);
- + } else {
- + pthread_cond_wait(&buff_ready, &data_ready);
- + len = magnitude(buffer, DEFAULT_BUF_LENGTH);
- + manchester((uint16_t*)buffer, len);
- + messages((uint16_t*)buffer, len);
- + pthread_mutex_unlock(&data_ready);
- + }
- }
- rtlsdr_cancel_async(dev);
- return 0;
- @@ -366,6 +378,7 @@ int main(int argc, char **argv)
- int ppm_error = 0;
- char vendor[256], product[256], serial[256];
- pthread_mutex_init(&data_ready, NULL);
- + pthread_cond_init(&buff_ready, NULL);
- squares_precompute();
- while ((opt = getopt(argc, argv, "d:g:p:e:Q:VS")) != -1)
- @@ -504,6 +517,7 @@ int main(int argc, char **argv)
- else {
- fprintf(stderr, "\nLibrary error %d, exiting...\n", r);}
- rtlsdr_cancel_async(dev);
- + pthread_cond_destroy(&buff_ready);
- pthread_mutex_destroy(&data_ready);
- if (file != stdout) {
Advertisement
Add Comment
Please, Sign In to add comment