Skip to content

Commit 438e621

Browse files
author
bboulet
committed
Release v3.1.0
1 parent 0e62b76 commit 438e621

File tree

7 files changed

+248
-4
lines changed

7 files changed

+248
-4
lines changed

CHANGELOG.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,22 @@ All notable changes to this project will be documented in this file.
44

55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

7+
## [v3.1.0] 2021-08-06
8+
9+
### Added
10+
11+
* `lr1110_modem_set_crystal_error()` and `lr1110_modem_set_crystal_error()` functions
12+
* `lr1110_modem_helper_get_event_data()` helper function
13+
* `lr1110_modem_event_t` structure definition
14+
715
## [v3.0.1] 2021-05-11
816

17+
### Fixed
18+
19+
* Documentation for `lr1110_modem_get_duty_cycle_status()` - definition of the parameter based on its sign
20+
21+
## [v3.0.0] 2021-05-07
22+
923
### Added
1024

1125
* `LR1110_LORAWAN_REGION_AS923_GRP1/2/3`, `LR1110_LORAWAN_REGION_AU915`, `LR1110_LORAWAN_REGION_CN470`, `LR1110_LORAWAN_REGION_IN865`, `LR1110_LORAWAN_REGION_KR920` and `LR1110_LORAWAN_REGION_RU864` in `lr1110_modem_regions_t`

src/lr1110_modem_driver_version.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,12 @@
4040
/*!
4141
* @brief Current minor version number of the driver
4242
*/
43-
#define LR1110_MODEM_DRIVER_VERSION_MINOR 0
43+
#define LR1110_MODEM_DRIVER_VERSION_MINOR 1
4444

4545
/*!
4646
* @brief Current patch version number of the driver
4747
*/
48-
#define LR1110_MODEM_DRIVER_VERSION_PATCH 1
48+
#define LR1110_MODEM_DRIVER_VERSION_PATCH 0
4949

5050
#ifdef __cplusplus
5151
extern "C" {

src/lr1110_modem_gnss.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,9 @@ lr1110_modem_response_code_t lr1110_modem_gnss_set_assistance_position(
416416
/*!
417417
* @brief Function to read the assistance position.
418418
*
419+
* The assistance position read may be different from the one set beforehand
420+
* with lr1110_modem_gnss_set_assistance_position due to a scaling computation.
421+
*
419422
* @param [in] context Chip implementation context
420423
* @param [out] assistance_position latitude 12 bits and longitude 12 bits @ref
421424
* lr1110_modem_gnss_solver_assistance_position_t

src/lr1110_modem_helper.c

Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
*/
3636

3737
#include "lr1110_modem_helper.h"
38-
#include "lr1110_modem_lorawan.h"
3938

4039
/*
4140
* -----------------------------------------------------------------------------
@@ -229,6 +228,75 @@ lr1110_modem_helper_status_t lr1110_modem_helper_gnss_get_event_type( const uint
229228
return status;
230229
}
231230

231+
lr1110_modem_helper_status_t lr1110_modem_helper_get_event_data( const void* context,
232+
lr1110_modem_event_t* modem_event )
233+
{
234+
lr1110_modem_helper_status_t status = LR1110_MODEM_HELPER_STATUS_ERROR;
235+
lr1110_modem_response_code_t modem_response_code = LR1110_MODEM_RESPONSE_CODE_OK;
236+
lr1110_modem_event_fields_t event_fields;
237+
238+
modem_response_code = lr1110_modem_get_event( context, &event_fields );
239+
240+
if( modem_response_code == LR1110_MODEM_RESPONSE_CODE_OK )
241+
{
242+
status = LR1110_MODEM_HELPER_STATUS_OK;
243+
modem_event->event_type = event_fields.event_type;
244+
modem_event->missed_events = event_fields.missed_events_count;
245+
246+
switch( modem_event->event_type )
247+
{
248+
case LR1110_MODEM_LORAWAN_EVENT_RESET:
249+
modem_event->event_data.reset.count = ( ( uint16_t ) event_fields.buffer[0] << 8 ) + event_fields.buffer[1];
250+
break;
251+
case LR1110_MODEM_LORAWAN_EVENT_TX_DONE:
252+
modem_event->event_data.txdone.status = ( lr1110_modem_tx_done_event_t ) event_fields.buffer[0];
253+
break;
254+
case LR1110_MODEM_LORAWAN_EVENT_DOWN_DATA:
255+
modem_event->event_data.downdata.rssi = ( ( int8_t ) event_fields.buffer[0] ) - 64;
256+
modem_event->event_data.downdata.snr = ( ( ( int8_t ) event_fields.buffer[1] ) >> 2 );
257+
modem_event->event_data.downdata.flag = ( lr1110_modem_down_data_flag_t ) event_fields.buffer[2];
258+
modem_event->event_data.downdata.fport = event_fields.buffer[3];
259+
modem_event->event_data.downdata.length =
260+
event_fields.buffer_len - 4; // remove rssi/snr/flag and fport from buffer
261+
for( uint8_t i = 0; i < modem_event->event_data.downdata.length; i++ )
262+
{
263+
modem_event->event_data.downdata.data[i] = event_fields.buffer[i + 4];
264+
}
265+
break;
266+
case LR1110_MODEM_LORAWAN_EVENT_UPLOAD_DONE:
267+
modem_event->event_data.upload.status = ( lr1110_modem_upload_event_t ) event_fields.buffer[0];
268+
break;
269+
case LR1110_MODEM_LORAWAN_EVENT_SET_CONF:
270+
modem_event->event_data.setconf.tag = ( lr1110_modem_event_setconf_tag_t ) event_fields.buffer[0];
271+
break;
272+
case LR1110_MODEM_LORAWAN_EVENT_MUTE:
273+
modem_event->event_data.mute.status = ( lr1110_modem_mute_t ) event_fields.buffer[0];
274+
break;
275+
case LR1110_MODEM_LORAWAN_EVENT_WIFI_SCAN_DONE:
276+
modem_event->event_data.wifi.len = event_fields.buffer_len;
277+
for( uint16_t i = 0; i < event_fields.buffer_len; i++ )
278+
{
279+
modem_event->event_data.wifi.buffer[i] = event_fields.buffer[i];
280+
}
281+
break;
282+
case LR1110_MODEM_LORAWAN_EVENT_GNSS_SCAN_DONE:
283+
modem_event->event_data.gnss.len = event_fields.buffer_len;
284+
for( uint16_t i = 0; i < event_fields.buffer_len; i++ )
285+
{
286+
modem_event->event_data.gnss.nav_message[i] = event_fields.buffer[i];
287+
}
288+
break;
289+
case LR1110_MODEM_LORAWAN_EVENT_TIME_UPDATED_ALC_SYNC:
290+
modem_event->event_data.time.status = ( lr1110_modem_alc_sync_state_t ) event_fields.buffer[0];
291+
break;
292+
default:
293+
break;
294+
}
295+
}
296+
297+
return status;
298+
}
299+
232300
/*
233301
* -----------------------------------------------------------------------------
234302
* --- PRIVATE FUNCTIONS DEFINITION --------------------------------------------

src/lr1110_modem_helper.h

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ extern "C" {
4444
#include <stdbool.h>
4545
#include <stdint.h>
4646
#include "lr1110_modem_common.h"
47+
#include "lr1110_modem_lorawan.h"
4748
#include "lr1110_modem_gnss.h"
4849

4950
/*
@@ -86,6 +87,21 @@ extern "C" {
8687
*/
8788
#define LR1110_MODEM_HELPER_NB_DAY_PER_WEEK 7
8889

90+
/**
91+
* @brief Maximum payload size in byte of a downlink
92+
*/
93+
#define LR1110_MODEM_HELPER_MAX_DOWNLINK_LENGTH 242
94+
95+
/*!
96+
* @brief Maximum payload size in byte of a nav message
97+
*/
98+
#define LR1110_MODEM_HELPER_GNSS_MAX_NAV_LENGTH 255
99+
100+
/*!
101+
* @brief Maximum payload size in byte of a Wi-Fi result
102+
*/
103+
#define LR1110_MODEM_HELPER_WIFI_MAX_BUFFER_LENGTH 948 // 12 results * LR1110_WIFI_EXTENDED_FULL_RESULT_SIZE
104+
89105
/*
90106
* -----------------------------------------------------------------------------
91107
* --- PUBLIC TYPES ------------------------------------------------------------
@@ -100,6 +116,61 @@ typedef enum
100116
LR1110_MODEM_HELPER_STATUS_ERROR = 3,
101117
} lr1110_modem_helper_status_t;
102118

119+
/**
120+
* @brief Structure holding event-related data
121+
*/
122+
typedef struct
123+
{
124+
uint8_t event_type;
125+
uint8_t missed_events; //!< Number of event_type events missed before the current one
126+
union
127+
{
128+
struct
129+
{
130+
uint16_t count;
131+
} reset;
132+
struct
133+
{
134+
lr1110_modem_tx_done_event_t status;
135+
} txdone;
136+
struct
137+
{
138+
int8_t rssi; //!< Signed value in dBm + 64
139+
int8_t snr; //!< Signed value in dB given in 0.25dB step
140+
lr1110_modem_down_data_flag_t flag;
141+
uint8_t fport;
142+
uint8_t data[LR1110_MODEM_HELPER_MAX_DOWNLINK_LENGTH];
143+
uint8_t length;
144+
} downdata;
145+
struct
146+
{
147+
lr1110_modem_upload_event_t status;
148+
} upload;
149+
struct
150+
{
151+
lr1110_modem_event_setconf_tag_t tag;
152+
} setconf;
153+
struct
154+
{
155+
lr1110_modem_mute_t status;
156+
} mute;
157+
struct
158+
{
159+
uint16_t len;
160+
uint8_t buffer[LR1110_MODEM_HELPER_WIFI_MAX_BUFFER_LENGTH];
161+
} wifi;
162+
struct
163+
{
164+
uint16_t len;
165+
uint8_t nav_message[LR1110_MODEM_HELPER_GNSS_MAX_NAV_LENGTH];
166+
} gnss;
167+
struct
168+
{
169+
lr1110_modem_alc_sync_state_t status;
170+
} time;
171+
} event_data;
172+
} lr1110_modem_event_t;
173+
103174
/*
104175
* -----------------------------------------------------------------------------
105176
* --- PUBLIC FUNCTIONS PROTOTYPES ---------------------------------------------
@@ -171,6 +242,17 @@ lr1110_modem_helper_status_t lr1110_modem_helper_gnss_get_event_type( const uint
171242
const uint16_t result_buffer_size,
172243
lr1110_modem_gnss_scan_done_event_t* event_type );
173244

245+
/**
246+
* @brief Extract the event data contained in the event field buffer
247+
*
248+
* @param [in] context Chip implementation context
249+
* @param [out] modem_event Struct containing the event data \see lr1110_modem_event_t
250+
*
251+
* @returns Operation status
252+
*/
253+
lr1110_modem_helper_status_t lr1110_modem_helper_get_event_data( const void* context,
254+
lr1110_modem_event_t* modem_event );
255+
174256
#ifdef __cplusplus
175257
}
176258
#endif

src/lr1110_modem_lorawan.c

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,8 @@
133133
#define LR1110_MODEM_GET_NB_TRANS_CMD_LENGTH ( 2 )
134134
#define LR1110_MODEM_SET_STREAM_REDUNDANCY_RATE_CMD_LENGTH ( 2 + 1 )
135135
#define LR1110_MODEM_GET_STREAM_REDUNDANCY_RATE_CMD_LENGTH ( 2 )
136+
#define LR1110_MODEM_SET_CRYSTAL_ERROR_CMD_LENGTH ( 2 + 4 )
137+
#define LR1110_MODEM_GET_CRYSTAL_ERROR_CMD_LENGTH ( 2 )
136138

137139
#define LR1110_MODEM_INFO_FIELDS_RBUFFER_MAX_LENGTH ( 20 )
138140
#define LR1110_MODEM_CHIP_EUI_RBUFFER_LENGTH ( 8 )
@@ -229,6 +231,8 @@ enum
229231
LR1110_MODEM_GET_NB_TRANS_CMD = 0x50,
230232
LR1110_MODEM_SET_STREAM_REDUNDANCY_RATE_CMD = 0x51,
231233
LR1110_MODEM_GET_STREAM_REDUNDANCY_RATE_CMD = 0x52,
234+
LR1110_MODEM_SET_CRYSTAL_ERROR_CMD = 0x53,
235+
LR1110_MODEM_GET_CRYSTAL_ERROR_CMD = 0x54,
232236
};
233237

234238
/*
@@ -1711,6 +1715,40 @@ lr1110_modem_response_code_t lr1110_modem_get_stream_redundancy_rate( const void
17111715
stream_redundancy_rate, sizeof( uint8_t ) );
17121716
}
17131717

1718+
lr1110_modem_response_code_t lr1110_modem_set_crystal_error( const void* context, const uint32_t crystal_error )
1719+
{
1720+
uint8_t cbuffer[LR1110_MODEM_SET_CRYSTAL_ERROR_CMD_LENGTH];
1721+
1722+
cbuffer[0] = LR1110_MODEM_GROUP_ID_MODEM;
1723+
cbuffer[1] = LR1110_MODEM_SET_CRYSTAL_ERROR_CMD;
1724+
1725+
cbuffer[2] = ( uint8_t )( crystal_error >> 24 );
1726+
cbuffer[3] = ( uint8_t )( crystal_error >> 16 );
1727+
cbuffer[4] = ( uint8_t )( crystal_error >> 8 );
1728+
cbuffer[5] = ( uint8_t ) crystal_error;
1729+
1730+
return ( lr1110_modem_response_code_t ) lr1110_modem_hal_write( context, cbuffer,
1731+
LR1110_MODEM_SET_CRYSTAL_ERROR_CMD_LENGTH, 0, 0 );
1732+
}
1733+
1734+
lr1110_modem_response_code_t lr1110_modem_get_crystal_error( const void* context, uint32_t* crystal_error )
1735+
{
1736+
uint8_t cbuffer[LR1110_MODEM_GET_CRYSTAL_ERROR_CMD_LENGTH];
1737+
uint8_t rbuffer[sizeof( uint32_t )] = { 0x00 };
1738+
lr1110_modem_response_code_t rc;
1739+
1740+
cbuffer[0] = LR1110_MODEM_GROUP_ID_MODEM;
1741+
cbuffer[1] = LR1110_MODEM_GET_CRYSTAL_ERROR_CMD;
1742+
1743+
rc = ( lr1110_modem_response_code_t ) lr1110_modem_hal_read(
1744+
context, cbuffer, LR1110_MODEM_GET_CRYSTAL_ERROR_CMD_LENGTH, rbuffer, sizeof( uint32_t ) );
1745+
1746+
*crystal_error = ( ( uint32_t ) rbuffer[0] << 24 ) + ( ( uint32_t ) rbuffer[1] << 16 ) +
1747+
( ( uint32_t ) rbuffer[2] << 8 ) + ( ( uint32_t ) rbuffer[3] );
1748+
1749+
return rc;
1750+
}
1751+
17141752
/*
17151753
* -----------------------------------------------------------------------------
17161754
* --- PRIVATE FUNCTIONS DEFINITION --------------------------------------------

src/lr1110_modem_lorawan.h

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,6 @@ typedef enum
205205
LR1110_MODEM_DM_INFO_TYPE_UPLOAD = 0x0E,
206206
LR1110_MODEM_DM_INFO_TYPE_RESET_COUNT = 0x0F,
207207
LR1110_MODEM_DM_INFO_TYPE_DEV_EUI = 0x10,
208-
LR1110_MODEM_DM_INFO_TYPE_OWNER_COUNTER = 0x11,
209208
LR1110_MODEM_DM_INFO_TYPE_SESSION_ID = 0x12,
210209
LR1110_MODEM_DM_INFO_TYPE_CHIP_EUI = 0x13,
211210
LR1110_MODEM_DM_INFO_TYPE_STREAM = 0x14,
@@ -333,6 +332,15 @@ typedef enum
333332
LR1110_MODEM_DOWN_DATA_EVENT_RXC = 0x03, //!< received in Class C DN slot
334333
} lr1110_modem_down_data_flag_t;
335334

335+
/*!
336+
* @brief Upload status values
337+
*/
338+
typedef enum
339+
{
340+
LR1110_MODEM_UPLOAD_ERROR = 0x00,
341+
LR1110_MODEM_UPLOAD_SUCCESS = 0x01,
342+
} lr1110_modem_upload_event_t;
343+
336344
/*!
337345
* @brief Modem charge type
338346
*/
@@ -396,6 +404,16 @@ typedef enum
396404
LR1110_MODEM_SUSPEND = 0x01,
397405
} lr1110_modem_suspend_t;
398406

407+
/**
408+
* @brief Modem set conf type
409+
*/
410+
typedef enum
411+
{
412+
LR1110_MODEM_EVENT_SETCONF_ADR_MODE_UPDATED = LR1110_MODEM_DM_INFO_TYPE_ADR_MODE,
413+
LR1110_MODEM_EVENT_SETCONF_JOIN_EUI_UPDATED = LR1110_MODEM_DM_INFO_TYPE_JOIN_EUI,
414+
LR1110_MODEM_EVENT_SETCONF_DM_INTERVAL_UPDATED = LR1110_MODEM_DM_INFO_TYPE_INTERVAL,
415+
} lr1110_modem_event_setconf_tag_t;
416+
399417
/*!
400418
* @brief Ramping time for PA
401419
*
@@ -1610,6 +1628,27 @@ lr1110_modem_response_code_t lr1110_modem_set_stream_redundancy_rate( const void
16101628
lr1110_modem_response_code_t lr1110_modem_get_stream_redundancy_rate( const void* context,
16111629
uint8_t* stream_redundancy_rate );
16121630

1631+
/*!
1632+
* @brief Set the Crystal error of the MCU to fine adjust the rx window for lorawan ( ex: set 30 for a crystal error =
1633+
* 0.3% ).
1634+
*
1635+
* @param [in] context Chip implementation context
1636+
* @param [out] crystal_error Crystal error
1637+
*
1638+
* @returns Operation status
1639+
*/
1640+
lr1110_modem_response_code_t lr1110_modem_set_crystal_error( const void* context, const uint32_t crystal_error );
1641+
1642+
/*!
1643+
* @brief Get the Crystal error.
1644+
*
1645+
* @param [in] context Chip implementation context
1646+
* @param [out] crystal_error Crystal error
1647+
*
1648+
* @returns Operation status
1649+
*/
1650+
lr1110_modem_response_code_t lr1110_modem_get_crystal_error( const void* context, uint32_t* crystal_error );
1651+
16131652
#ifdef __cplusplus
16141653
}
16151654
#endif

0 commit comments

Comments
 (0)