LMiC LoRa Semtech + Nucleo

Dependents:   LoRaWAN-lmic-app

Fork of LMiC by Pascal Nysten

Committer:
mluis
Date:
Thu Jan 22 12:50:49 2015 +0000
Revision:
0:62d1edcc13d1
Child:
1:d3b7bde3995c
Porting of IBM LoRa MAC in C (LMiC) to the mbed platform.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mluis 0:62d1edcc13d1 1 /*******************************************************************************
mluis 0:62d1edcc13d1 2 * Copyright (c) 2014 IBM Corporation.
mluis 0:62d1edcc13d1 3 * All rights reserved. This program and the accompanying materials
mluis 0:62d1edcc13d1 4 * are made available under the terms of the Eclipse Public License v1.0
mluis 0:62d1edcc13d1 5 * which accompanies this distribution, and is available at
mluis 0:62d1edcc13d1 6 * http://www.eclipse.org/legal/epl-v10.html
mluis 0:62d1edcc13d1 7 *
mluis 0:62d1edcc13d1 8 * Contributors:
mluis 0:62d1edcc13d1 9 * IBM Zurich Research Lab - initial API, implementation and documentation
mluis 0:62d1edcc13d1 10 *******************************************************************************/
mluis 0:62d1edcc13d1 11
mluis 0:62d1edcc13d1 12 #ifndef _hal_hpp_
mluis 0:62d1edcc13d1 13 #define _hal_hpp_
mluis 0:62d1edcc13d1 14
mluis 0:62d1edcc13d1 15 /*
mluis 0:62d1edcc13d1 16 * initialize hardware (IO, SPI, TIMER, IRQ).
mluis 0:62d1edcc13d1 17 */
mluis 0:62d1edcc13d1 18 void hal_init (void);
mluis 0:62d1edcc13d1 19
mluis 0:62d1edcc13d1 20 /*
mluis 0:62d1edcc13d1 21 * drive radio NSS pin (0=low, 1=high).
mluis 0:62d1edcc13d1 22 */
mluis 0:62d1edcc13d1 23 void hal_pin_nss (u1_t val);
mluis 0:62d1edcc13d1 24
mluis 0:62d1edcc13d1 25 /*
mluis 0:62d1edcc13d1 26 * drive radio RX/TX pins (0=rx, 1=tx).
mluis 0:62d1edcc13d1 27 */
mluis 0:62d1edcc13d1 28 void hal_pin_rxtx (u1_t val);
mluis 0:62d1edcc13d1 29
mluis 0:62d1edcc13d1 30 /*
mluis 0:62d1edcc13d1 31 * control radio RST pin (0=low, 1=high, 2=floating)
mluis 0:62d1edcc13d1 32 */
mluis 0:62d1edcc13d1 33 void hal_pin_rst (u1_t val);
mluis 0:62d1edcc13d1 34
mluis 0:62d1edcc13d1 35 /*
mluis 0:62d1edcc13d1 36 * perform 8-bit SPI transaction with radio.
mluis 0:62d1edcc13d1 37 * - write given byte 'outval'
mluis 0:62d1edcc13d1 38 * - read byte and return value
mluis 0:62d1edcc13d1 39 */
mluis 0:62d1edcc13d1 40 u1_t hal_spi (u1_t outval);
mluis 0:62d1edcc13d1 41
mluis 0:62d1edcc13d1 42 /*
mluis 0:62d1edcc13d1 43 * disable all CPU interrupts.
mluis 0:62d1edcc13d1 44 * - might be invoked nested
mluis 0:62d1edcc13d1 45 * - will be followed by matching call to hal_enableIRQs()
mluis 0:62d1edcc13d1 46 */
mluis 0:62d1edcc13d1 47 void hal_disableIRQs (void);
mluis 0:62d1edcc13d1 48
mluis 0:62d1edcc13d1 49 /*
mluis 0:62d1edcc13d1 50 * enable CPU interrupts.
mluis 0:62d1edcc13d1 51 */
mluis 0:62d1edcc13d1 52 void hal_enableIRQs (void);
mluis 0:62d1edcc13d1 53
mluis 0:62d1edcc13d1 54 /*
mluis 0:62d1edcc13d1 55 * put system and CPU in low-power mode, sleep until interrupt.
mluis 0:62d1edcc13d1 56 */
mluis 0:62d1edcc13d1 57 void hal_sleep (void);
mluis 0:62d1edcc13d1 58
mluis 0:62d1edcc13d1 59 /*
mluis 0:62d1edcc13d1 60 * return 32-bit system time in ticks.
mluis 0:62d1edcc13d1 61 */
mluis 0:62d1edcc13d1 62 u4_t hal_ticks (void);
mluis 0:62d1edcc13d1 63
mluis 0:62d1edcc13d1 64 /*
mluis 0:62d1edcc13d1 65 * busy-wait until specified timestamp (in ticks) is reached.
mluis 0:62d1edcc13d1 66 */
mluis 0:62d1edcc13d1 67 void hal_waitUntil (u4_t time);
mluis 0:62d1edcc13d1 68
mluis 0:62d1edcc13d1 69 /*
mluis 0:62d1edcc13d1 70 * check and rewind timer for target time.
mluis 0:62d1edcc13d1 71 * - return 1 if target time is close
mluis 0:62d1edcc13d1 72 * - otherwise rewind timer for target time or full period and return 0
mluis 0:62d1edcc13d1 73 */
mluis 0:62d1edcc13d1 74 u1_t hal_checkTimer (u4_t targettime);
mluis 0:62d1edcc13d1 75
mluis 0:62d1edcc13d1 76 /*
mluis 0:62d1edcc13d1 77 * perform fatal failure action.
mluis 0:62d1edcc13d1 78 * - called by assertions
mluis 0:62d1edcc13d1 79 * - action could be HALT or reboot
mluis 0:62d1edcc13d1 80 */
mluis 0:62d1edcc13d1 81 void hal_failed (void);
mluis 0:62d1edcc13d1 82
mluis 0:62d1edcc13d1 83 //////////////////////////////////////////////////////////////////////
mluis 0:62d1edcc13d1 84 #ifdef CFG_DEBUG
mluis 0:62d1edcc13d1 85 void debug_init (void);
mluis 0:62d1edcc13d1 86 void debug_led (u1_t val);
mluis 0:62d1edcc13d1 87 void debug_char (u1_t c);
mluis 0:62d1edcc13d1 88 void debug_hex (u1_t b);
mluis 0:62d1edcc13d1 89 void debug_buf (const u1_t* buf, u2_t len);
mluis 0:62d1edcc13d1 90 void debug_uint (u4_t v);
mluis 0:62d1edcc13d1 91 void debug_str (const u1_t* str);
mluis 0:62d1edcc13d1 92 void debug_event (int ev);
mluis 0:62d1edcc13d1 93 void debug_val (const u1_t* label, u4_t val);
mluis 0:62d1edcc13d1 94 #define DEBUG_INIT() debug_init()
mluis 0:62d1edcc13d1 95 #define DEBUG_LED(v) debug_led(v)
mluis 0:62d1edcc13d1 96 #define DEBUG_CHAR(c) debug_char(c)
mluis 0:62d1edcc13d1 97 #define DEBUG_HEX(b) debug_hex(b)
mluis 0:62d1edcc13d1 98 #define DEBUG_BUF(b,l) debug_buf(b,l)
mluis 0:62d1edcc13d1 99 #define DEBUG_UINT(v) debug_uint(v)
mluis 0:62d1edcc13d1 100 #define DEBUG_STR(s) debug_str(s)
mluis 0:62d1edcc13d1 101 #define DEBUG_EVENT(e) debug_event(e)
mluis 0:62d1edcc13d1 102 #define DEBUG_VAL(l,v) debug_val(l, v)
mluis 0:62d1edcc13d1 103 #else // CFG_DEBUG
mluis 0:62d1edcc13d1 104 #define DEBUG_INIT()
mluis 0:62d1edcc13d1 105 #define DEBUG_LED(v)
mluis 0:62d1edcc13d1 106 #define DEBUG_CHAR(c)
mluis 0:62d1edcc13d1 107 #define DEBUG_HEX(b)
mluis 0:62d1edcc13d1 108 #define DEBUG_BUF(b,l)
mluis 0:62d1edcc13d1 109 #define DEBUG_UINT(v)
mluis 0:62d1edcc13d1 110 #define DEBUG_STR(s)
mluis 0:62d1edcc13d1 111 #define DEBUG_EVENT(e)
mluis 0:62d1edcc13d1 112 #define DEBUG_VAL(l,v)
mluis 0:62d1edcc13d1 113 #endif // CFG_DEBUG
mluis 0:62d1edcc13d1 114
mluis 0:62d1edcc13d1 115 #endif // _hal_hpp_