Skip to content

Commit ee26db0

Browse files
committed
v3.0.0
- Added new HAL function lgw_board_setconf() to configure board/concentrator specific parameters: network type (LoRa public or private), concentrator clock source. Note: those parameters are not any more set from the library.cfg file configuration (CFG_NET, CFG_BRD), and should be passed at initialization by the application. - Added new HAL function lgw_txgain_setconf() to configure concentrator TX gain table. It can now be dynamically set by the application at initialization time. - Changed HAL function lgw_rxrf_setconf(), it will now also configure the radio type (CFG_RADIO has been removed from library.cfg), the RSSI offset to be used for this radio and if TX is enabled or not on this radio. - Added support of IoT Starter Kit platform, which is now the default board. - Added util_tx_continuous utility for gateway TX power calibration and spectral emission measurements/qualification. - Removed CFG_BAND configuration from library.cfg. Band configuration is done by application and passed dynamically at initialization time. - Updated makefiles to allow cross compilation from environment variable (ARCH, CROSS_COMPILE). ** WARNING: ** ** Known issue: a problem with carrier leakage calibration has been seen on 433MHz boards. **
1 parent 45be5ff commit ee26db0

34 files changed

+3169
-2519
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
*.o
2+
*.swp
3+
*.bak

Makefile

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,23 @@
11
### Environment constants
22

3-
CROSS_COMPILE :=
3+
ARCH ?=
4+
CROSS_COMPILE ?=
45
export
56

67
### general build targets
78

89
all:
910
$(MAKE) all -e -C libloragw
10-
$(MAKE) all -e -C util_band_survey
1111
$(MAKE) all -e -C util_pkt_logger
1212
$(MAKE) all -e -C util_spi_stress
1313
$(MAKE) all -e -C util_tx_test
14+
$(MAKE) all -e -C util_tx_continuous
1415

1516
clean:
1617
$(MAKE) clean -e -C libloragw
17-
$(MAKE) clean -e -C util_band_survey
1818
$(MAKE) clean -e -C util_pkt_logger
1919
$(MAKE) clean -e -C util_spi_stress
2020
$(MAKE) clean -e -C util_tx_test
21+
$(MAKE) clean -e -C util_tx_continuous
2122

22-
### EOF
23+
### EOF

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2.0.0
1+
3.0.0

libloragw/Makefile

Lines changed: 11 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ include library.cfg
55

66
### constant symbols
77

8-
CROSS_COMPILE :=
8+
ARCH ?=
9+
CROSS_COMPILE ?=
910
CC := $(CROSS_COMPILE)gcc
1011
AR := $(CROSS_COMPILE)ar
1112

@@ -14,7 +15,7 @@ CFLAGS := -O2 -Wall -Wextra -std=c99 -Iinc -I.
1415
### library.cfg configuration file processing
1516

1617
ifeq ($(CFG_SPI),native)
17-
CFG_SPI_MSG := Linux native SPI driver (/dev/spidev32766.0)
18+
CFG_SPI_MSG := Linux native SPI driver
1819
CFG_SPI_OPT := CFG_SPI_NATIVE
1920
else ifeq ($(CFG_SPI),ftdi)
2021
CFG_SPI_MSG := FTDI SPI-over-USB bridge using libmpsse/libftdi/libusb
@@ -23,115 +24,15 @@ else
2324
$(error No SPI physical layer selected, check ../target.cfg file.)
2425
endif
2526

26-
ifeq ($(CFG_CHIP),sx1301)
27-
CFG_CHIP_MSG := Semtech SX1301 production chip
28-
CFG_CHIP_OPT := CFG_CHIP_1301
29-
else ifeq ($(CFG_CHIP),fpga1301)
30-
CFG_CHIP_MSG := FPGA containing the SX1301 IP
31-
CFG_CHIP_OPT := CFG_CHIP_FPGA
32-
else
33-
$(error No concentrator chip selected, check library.cfg file.)
34-
endif
35-
36-
ifeq ($(CFG_RADIO),sx1257)
37-
CFG_RADIO_MSG := Dual SX1257 transceivers, covering 860-1000 MHz
38-
CFG_RADIO_OPT := CFG_RADIO_1257
39-
else ifeq ($(CFG_RADIO),sx1255)
40-
CFG_RADIO_MSG := Dual SX1255 transceivers, covering 400-510 MHz
41-
CFG_RADIO_OPT := CFG_RADIO_1255
42-
else
43-
$(error No radio chip selected, check library.cfg file.)
44-
endif
45-
46-
ifeq ($(CFG_BAND),full)
47-
CFG_BAND_MSG := Full range supported by the radio(s)
48-
CFG_BAND_OPT := CFG_BAND_FULL
49-
else ifeq ($(CFG_BAND),eu868)
50-
ifeq ($(CFG_RADIO),sx1257)
51-
CFG_BAND_MSG := ETSI 868 (866) MHz band
52-
CFG_BAND_OPT := CFG_BAND_868
53-
else
54-
$(error The selected radio(s) cannot work in the selected band.)
55-
endif
56-
else ifeq ($(CFG_BAND),us915)
57-
ifeq ($(CFG_RADIO),sx1257)
58-
CFG_BAND_MSG := FCC 915 MHz band
59-
CFG_BAND_OPT := CFG_BAND_915
60-
else
61-
$(error The selected radio(s) cannot work in the selected band.)
62-
endif
63-
else ifeq ($(CFG_BAND),cn470)
64-
ifeq ($(CFG_RADIO),sx1255)
65-
CFG_BAND_MSG := China 470 MHz band
66-
CFG_BAND_OPT := CFG_BAND_470
67-
else
68-
$(error The selected radio(s) cannot work in the selected band.)
69-
endif
70-
else ifeq ($(CFG_BAND),eu433)
71-
ifeq ($(CFG_RADIO),sx1255)
72-
CFG_BAND_MSG := ETSI 433 MHz band
73-
CFG_BAND_OPT := CFG_BAND_433
74-
else
75-
$(error The selected radio(s) cannot work in the selected band.)
76-
endif
77-
else ifeq ($(CFG_BAND),cn780)
78-
ifeq ($(CFG_RADIO),sx1257)
79-
CFG_BAND_MSG := China 780 MHz band
80-
CFG_BAND_OPT := CFG_BAND_780
81-
else
82-
$(error The selected radio(s) cannot work in the selected band.)
83-
endif
84-
else
85-
$(warning [Warning] No frequency band selected, full radio capability assumed.)
86-
CFG_BAND_MSG := Full range supported by the radio(s)
87-
CFG_BAND_OPT := CFG_BAND_FULL
88-
endif
89-
90-
ifeq ($(CFG_BRD),dev_nano_868)
91-
CFG_BRD_MSG := FPGA-based nano-concentrator, with 868 MHz SAW filter
92-
CFG_BRD_OPT := CFG_BRD_NANO868
93-
else ifeq ($(CFG_BRD),ref_1301_868)
94-
CFG_BRD_MSG := SX1301 reference board with SX1257 radios, 868 MHz filters
95-
CFG_BRD_OPT := CFG_BRD_1301REF868
96-
else ifeq ($(CFG_BRD),ref_1301_433)
97-
CFG_BRD_MSG := SX1301 reference board with SX1255 radios, 433 MHz filters
98-
CFG_BRD_OPT := CFG_BRD_1301REF433
99-
else ifeq ($(CFG_BRD),kerlink_868)
100-
CFG_BRD_MSG := Kerlink LoRa 868MHz gateway
101-
CFG_BRD_OPT := CFG_BRD_KERLINK868
102-
else ifeq ($(CFG_BRD),kerlink_868_27dbm)
103-
CFG_BRD_MSG := Kerlink LoRa 868MHz gateway with 27dBm capability
104-
CFG_BRD_OPT := CFG_BRD_KERLINK868_27DBM
105-
else ifeq ($(CFG_BRD),kerlink_433)
106-
CFG_BRD_MSG := Kerlink LoRa 433MHz gateway
107-
CFG_BRD_OPT := CFG_BRD_KERLINK433
108-
else ifeq ($(CFG_BRD),cisco_433)
109-
CFG_BRD_MSG := Cisco LoRa 433MHz gateway
110-
CFG_BRD_OPT := CFG_BRD_CISCO433
111-
else ifeq ($(CFG_BRD),cisco_470)
112-
CFG_BRD_MSG := Cisco LoRa 470MHz gateway
113-
CFG_BRD_OPT := CFG_BRD_CISCO470
114-
else ifeq ($(CFG_BRD),cisco_780)
115-
CFG_BRD_MSG := Cisco LoRa 780MHz gateway
116-
CFG_BRD_OPT := CFG_BRD_CISCO780
27+
ifeq ($(CFG_BRD),iot_sk_1301_868)
28+
CFG_BRD_MSG := SX1301 IoT Starter Kit board with SX1257 radios, 868 MHz filters
29+
CFG_BRD_OPT := CFG_BRD_1301IOTSK868
11730
else
11831
$(info [Info] No specific board selected.)
11932
CFG_BRD_MSG := None
12033
CFG_BRD_OPT := CFG_BRD_NONE
12134
endif
12235

123-
ifeq ($(CFG_NET),private)
124-
CFG_NET_MSG := Private network
125-
CFG_NET_OPT := CFG_NET_PRIVATE
126-
else ifeq ($(CFG_NET),lora_mac)
127-
CFG_NET_MSG := LoRa MAC network
128-
CFG_NET_OPT := CFG_NET_LORAMAC
129-
else
130-
$(warning [Warning] No network type selected, assume private network by default.)
131-
CFG_NET_MSG := Private network
132-
CFG_NET_OPT := CFG_NET_PRIVATE
133-
endif
134-
13536
### linking options
13637

13738
ifeq ($(CFG_SPI),native)
@@ -164,27 +65,16 @@ inc/config.h: ../VERSION library.cfg
16465
# SPI interface
16566
@echo "SPI interface : $(CFG_SPI_MSG)"
16667
@echo " #define $(CFG_SPI_OPT) 1" >> $@
167-
# Concentrator chip
168-
@echo "Concentrator chip : $(CFG_CHIP_MSG)"
169-
@echo " #define $(CFG_CHIP_OPT) 1" >> $@
170-
# Radio chip(s)
171-
@echo "Radio chip(s) : $(CFG_RADIO_MSG)"
172-
@echo " #define $(CFG_RADIO_OPT) 1" >> $@
173-
# Frequency band
174-
@echo "Frequency band : $(CFG_BAND_MSG)"
175-
@echo " #define $(CFG_BAND_OPT) 1" >> $@
17668
# Board misc. parameters
17769
@echo "Board misc. param : $(CFG_BRD_MSG)"
17870
@echo " #define $(CFG_BRD_OPT) 1" >> $@
179-
# Network type
180-
@echo "Network type : $(CFG_NET_MSG)"
181-
@echo " #define $(CFG_NET_OPT) 1" >> $@
18271
# Debug options
18372
@echo " #define DEBUG_AUX $(DEBUG_AUX)" >> $@
18473
@echo " #define DEBUG_SPI $(DEBUG_SPI)" >> $@
18574
@echo " #define DEBUG_REG $(DEBUG_REG)" >> $@
18675
@echo " #define DEBUG_HAL $(DEBUG_HAL)" >> $@
18776
@echo " #define DEBUG_GPS $(DEBUG_GPS)" >> $@
77+
@echo " #define DEBUG_GPIO $(DEBUG_GPIO)" >> $@
18878
# end of file
18979
@echo "#endif" >> $@
19080
@echo "*** Configuration seems ok ***"
@@ -197,6 +87,8 @@ obj/loragw_aux.o: src/loragw_aux.c inc/loragw_aux.h inc/config.h
19787
ifeq ($(CFG_SPI),native)
19888
obj/loragw_spi.o: src/loragw_spi.native.c inc/loragw_spi.h inc/config.h
19989
$(CC) -c $(CFLAGS) $< -o $@
90+
obj/loragw_gpio.o: src/loragw_gpio.native.c inc/loragw_gpio.h inc/config.h
91+
$(CC) -c $(CFLAGS) $< -o $@
20092
else ifeq ($(CFG_SPI),ftdi)
20193
obj/loragw_spi.o: src/loragw_spi.ftdi.c inc/loragw_spi.h inc/config.h
20294
$(CC) -c $(CFLAGS) $< -o $@
@@ -213,7 +105,7 @@ obj/loragw_gps.o: src/loragw_gps.c inc/loragw_gps.h inc/config.h
213105

214106
### static library
215107

216-
libloragw.a: obj/loragw_hal.o obj/loragw_gps.o obj/loragw_reg.o obj/loragw_spi.o obj/loragw_aux.o
108+
libloragw.a: obj/loragw_hal.o obj/loragw_gps.o obj/loragw_reg.o obj/loragw_spi.o obj/loragw_aux.o obj/loragw_gpio.o
217109
$(AR) rcs $@ $^
218110

219111
### test programs
@@ -233,4 +125,4 @@ test_loragw_gps: tst/test_loragw_gps.c libloragw.a
233125
test_loragw_cal: tst/test_loragw_cal.c libloragw.a src/cal_fw.var
234126
$(CC) $(CFLAGS) -L. $< -o $@ $(LIBS)
235127

236-
### EOF
128+
### EOF

libloragw/inc/loragw_gpio.h

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
/*
2+
/ _____) _ | |
3+
( (____ _____ ____ _| |_ _____ ____| |__
4+
\____ \| ___ | (_ _) ___ |/ ___) _ \
5+
_____) ) ____| | | || |_| ____( (___| | | |
6+
(______/|_____)_|_|_| \__)_____)\____)_| |_|
7+
(C)2013 Semtech-Cycleo
8+
9+
Description:
10+
Host specific functions to address the GPIO. mainly the Reset pin
11+
12+
License: Revised BSD License, see LICENSE.TXT file include in the project
13+
Maintainer: Miguel Luis
14+
*/
15+
16+
17+
#ifndef _LORAGW_GPIO_H
18+
#define _LORAGW_GPIO_H
19+
20+
/* -------------------------------------------------------------------------- */
21+
/* --- DEPENDANCIES --------------------------------------------------------- */
22+
23+
#include <stdint.h> /* C99 types*/
24+
25+
#include "config.h" /* library configuration options (dynamically generated) */
26+
27+
/* -------------------------------------------------------------------------- */
28+
/* --- PUBLIC CONSTANTS ----------------------------------------------------- */
29+
30+
#define LGW_GPIO_SUCCESS 0
31+
#define LGW_GPIO_ERROR -1
32+
33+
#define LGW_GPIO_IN 0
34+
#define LGW_GPIO_OUT 1
35+
36+
#define LGW_GPIO_LOW 0
37+
#define LGW_GPIO_HIGH 1
38+
39+
/* -------------------------------------------------------------------------- */
40+
/* --- PUBLIC FUNCTIONS PROTOTYPES ------------------------------------------ */
41+
42+
/**
43+
@brief Reserves the given GPIO pin
44+
@param pin pin ID to be reserved
45+
@return status of operation (LGW_GPIO_SUCCESS/LGW_GPIO_ERROR)
46+
*/
47+
int lgw_gpio_export(int pin);
48+
49+
/**
50+
@brief Releases the given GPIO pin reservation
51+
@param pin pin ID to be released
52+
@return status of operation (LGW_GPIO_SUCCESS/LGW_GPIO_ERROR)
53+
*/
54+
int lgw_gpio_unexport(int pin);
55+
56+
/**
57+
@brief Sets the GPIO pin to the given direction
58+
@param pin pin ID to be changed
59+
@param dir new direction for the pin(LGW_GPIO_IN/LGW_GPIO_OUT)
60+
@return status of operation (LGW_GPIO_SUCCESS/LGW_GPIO_ERROR)
61+
*/
62+
int lgw_gpio_direction(int pin, int dir);
63+
64+
/**
65+
@brief Reads the given GPIO pin
66+
@param pin pin ID to be read
67+
@return value of the given pin ID (LGW_GPIO_LOW/LGW_GPIO_HIGH/LGW_GPIO_ERROR)
68+
*/
69+
int lgw_gpio_read(int pin);
70+
71+
/**
72+
@brief Writes the given GPIO pin with value
73+
@param pin pin ID to be changed
74+
@param value new value for the pin(LGW_GPIO_LOW/LGW_GPIO_HIDH)
75+
@return status of operation (LGW_GPIO_SUCCESS/LGW_GPIO_ERROR)
76+
*/
77+
int lgw_gpio_write(int pin, int value);
78+
79+
#endif
80+
81+
/* --- EOF ------------------------------------------------------------------ */

0 commit comments

Comments
 (0)