SX1272Lib updated in order to be RTOS aware

Fork of SX1272Lib by Semtech

Since Semtech original SX1272 library used InterruptIn and Timout mbed-os classes, whose ISRs are not allowed to lock RTOS mutexes, any SPI-related operation was doomed to fail. Indeed, SPI transactions functions are always nested inside a spi-level mutex lock/unlock pair in order to provide for thread access safety. A typical case occurs for example when radio is set to sleep state after a RX timeout.

This fork solves such problems by mean of a EventQueue/Thread pair, where any InterruptIn and Timeout ISRs actually enqueue callback calls.

Take a look at usage example at https://github.com/maiorfi/mbedos_lablet_lora_1

Committer:
Lorenzo Maiorfi
Date:
Sat Mar 03 18:07:30 2018 +0100
Revision:
11:866b939cf709
Parent:
8:1002d3025eaa
Fix debug

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Lorenzo Maiorfi 8:1002d3025eaa 1 /* Copyright (c) 2012 mbed.org, MIT License
Lorenzo Maiorfi 8:1002d3025eaa 2 *
Lorenzo Maiorfi 8:1002d3025eaa 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
Lorenzo Maiorfi 8:1002d3025eaa 4 * and associated documentation files (the "Software"), to deal in the Software without restriction,
Lorenzo Maiorfi 8:1002d3025eaa 5 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
Lorenzo Maiorfi 8:1002d3025eaa 6 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
Lorenzo Maiorfi 8:1002d3025eaa 7 * furnished to do so, subject to the following conditions:
Lorenzo Maiorfi 8:1002d3025eaa 8 *
Lorenzo Maiorfi 8:1002d3025eaa 9 * The above copyright notice and this permission notice shall be included in all copies or
Lorenzo Maiorfi 8:1002d3025eaa 10 * substantial portions of the Software.
Lorenzo Maiorfi 8:1002d3025eaa 11 *
Lorenzo Maiorfi 8:1002d3025eaa 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
Lorenzo Maiorfi 8:1002d3025eaa 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
Lorenzo Maiorfi 8:1002d3025eaa 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
Lorenzo Maiorfi 8:1002d3025eaa 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
Lorenzo Maiorfi 8:1002d3025eaa 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Lorenzo Maiorfi 8:1002d3025eaa 17 */
Lorenzo Maiorfi 8:1002d3025eaa 18
Lorenzo Maiorfi 8:1002d3025eaa 19 #ifndef DEBUG_H
Lorenzo Maiorfi 8:1002d3025eaa 20 #define DEBUG_H
Lorenzo Maiorfi 8:1002d3025eaa 21
Lorenzo Maiorfi 8:1002d3025eaa 22 /** @file debug.h */
Lorenzo Maiorfi 8:1002d3025eaa 23
Lorenzo Maiorfi 11:866b939cf709 24 #ifdef SX127x_DEBUG_ENABLED
Lorenzo Maiorfi 8:1002d3025eaa 25
Lorenzo Maiorfi 8:1002d3025eaa 26 #include <stdarg.h>
Lorenzo Maiorfi 8:1002d3025eaa 27 #include <stdio.h>
Lorenzo Maiorfi 8:1002d3025eaa 28
Lorenzo Maiorfi 8:1002d3025eaa 29 /** Output a debug message
Lorenzo Maiorfi 8:1002d3025eaa 30 *
Lorenzo Maiorfi 8:1002d3025eaa 31 * @param format printf-style format string, followed by variables
Lorenzo Maiorfi 8:1002d3025eaa 32 */
Lorenzo Maiorfi 8:1002d3025eaa 33 static inline void sx1272_debug(const char *format, ...) {
Lorenzo Maiorfi 8:1002d3025eaa 34 va_list args;
Lorenzo Maiorfi 8:1002d3025eaa 35 va_start(args, format);
Lorenzo Maiorfi 8:1002d3025eaa 36 vfprintf(stderr, format, args);
Lorenzo Maiorfi 8:1002d3025eaa 37 va_end(args);
Lorenzo Maiorfi 8:1002d3025eaa 38 }
Lorenzo Maiorfi 8:1002d3025eaa 39
Lorenzo Maiorfi 8:1002d3025eaa 40 /** Conditionally output a debug message
Lorenzo Maiorfi 8:1002d3025eaa 41 *
Lorenzo Maiorfi 8:1002d3025eaa 42 * @param condition output only if condition is true
Lorenzo Maiorfi 8:1002d3025eaa 43 * @param format printf-style format string, followed by variables
Lorenzo Maiorfi 8:1002d3025eaa 44 */
Lorenzo Maiorfi 8:1002d3025eaa 45 static inline void sx1272_debug_if(bool condition, const char *format, ...) {
Lorenzo Maiorfi 8:1002d3025eaa 46 if(condition) {
Lorenzo Maiorfi 8:1002d3025eaa 47 va_list args;
Lorenzo Maiorfi 8:1002d3025eaa 48 va_start(args, format);
Lorenzo Maiorfi 8:1002d3025eaa 49 vfprintf(stderr, format, args);
Lorenzo Maiorfi 8:1002d3025eaa 50 va_end(args);
Lorenzo Maiorfi 8:1002d3025eaa 51 }
Lorenzo Maiorfi 8:1002d3025eaa 52 }
Lorenzo Maiorfi 8:1002d3025eaa 53
Lorenzo Maiorfi 8:1002d3025eaa 54 #else
Lorenzo Maiorfi 8:1002d3025eaa 55
Lorenzo Maiorfi 8:1002d3025eaa 56 static inline void sx1272_debug(const char *format, ...) {}
Lorenzo Maiorfi 8:1002d3025eaa 57 static inline void sx1272_debug_if(bool condition, const char *format, ...) {}
Lorenzo Maiorfi 8:1002d3025eaa 58
Lorenzo Maiorfi 8:1002d3025eaa 59 #endif
Lorenzo Maiorfi 8:1002d3025eaa 60
Lorenzo Maiorfi 8:1002d3025eaa 61 #endif