From 9d1e3b8ef340bab523be6f7de0dfaf894e677e26 Mon Sep 17 00:00:00 2001 From: yl1185 <1182784652@qq.com> Date: Thu, 23 Jun 2022 14:08:49 +0800 Subject: [PATCH 01/13] Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/ hs300x 1.Kconfig is ok. 2.gcc is ok. --- .../app_match_rt-thread/Kconfig | 2 ++ .../app_match_rt-thread/hs300x/Kconfig | 23 +++++++++++++++++++ .../app_match_rt-thread/hs300x/SConscript | 7 ++++++ .../hs300x/hs300x_source/SConscript | 14 +++++++++++ 4 files changed, 46 insertions(+) create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/hs300x/Kconfig create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/hs300x/SConscript create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/hs300x/hs300x_source/SConscript diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/Kconfig b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/Kconfig index 14ddb6557..4bae294f6 100644 --- a/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/Kconfig +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/Kconfig @@ -2,4 +2,6 @@ menu "More Drivers" source "$RT_Thread_DIR/app_match_rt-thread/rw007/Kconfig" source "$RT_Thread_DIR/app_match_rt-thread/ov2640/Kconfig" +source "$RT_Thread_DIR/app_match_rt-thread/hs300x/Kconfig" +source "$RT_Thread_DIR/app_match_rt-thread/sx1278/Kconfig" endmenu diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/hs300x/Kconfig b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/hs300x/Kconfig new file mode 100644 index 000000000..1edfc9f8b --- /dev/null +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/hs300x/Kconfig @@ -0,0 +1,23 @@ + +menuconfig DRV_USING_HS300X + bool "hs300x driver" + default n + help + note: + hs300x can read Temperature and Humidity + +if DRV_USING_HS300X + config SENSOR_DEVICE_HS300X + string "HS300x sensor name" + default "HS300x" + config HS300X_DEV_ADDRESS + hex "hs300x device i2c address" + default 0x22 + config HS300X_TEMP_RANGE_MAX + int "max temperature" + default 80 + config HS300X_TEMP_RANGE_MIN + int "min temperature" + default -10 +endif + diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/hs300x/SConscript b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/hs300x/SConscript new file mode 100644 index 000000000..1e9cdf022 --- /dev/null +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/hs300x/SConscript @@ -0,0 +1,7 @@ +Import('RTT_ROOT') +from building import * + +cwd = GetCurrentDir() +objs = SConscript(os.path.join(cwd, 'hs300x_source', 'SConscript')) + +Return('objs') diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/hs300x/hs300x_source/SConscript b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/hs300x/hs300x_source/SConscript new file mode 100644 index 000000000..42837cf00 --- /dev/null +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/hs300x/hs300x_source/SConscript @@ -0,0 +1,14 @@ +import os +from building import * +Import('RTT_ROOT') +Import('rtconfig') +cwd = GetCurrentDir() +DEPENDS = ["DRV_USING_HS300X"] + +SOURCES = [] +if GetDepend(['DRV_USING_HS300X']): + SOURCES += ['drv_hs300x.c'] +path = [cwd] +objs = DefineGroup('hs300x', src = SOURCES, depend = DEPENDS,CPPPATH = path) + +Return("objs") \ No newline at end of file From d5e16cd9acc8efb3b331c4349d90b54fa75385fe Mon Sep 17 00:00:00 2001 From: yl1185 <1182784652@qq.com> Date: Thu, 23 Jun 2022 14:10:18 +0800 Subject: [PATCH 02/13] Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/hs300x driver 1.hs300x driver test is ok. --- .../hs300x/hs300x_source/drv_hs300x.c | 223 ++++++++++++++++++ .../hs300x/hs300x_source/drv_hs300x.h | 29 +++ 2 files changed, 252 insertions(+) create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/hs300x/hs300x_source/drv_hs300x.c create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/hs300x/hs300x_source/drv_hs300x.h diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/hs300x/hs300x_source/drv_hs300x.c b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/hs300x/hs300x_source/drv_hs300x.c new file mode 100644 index 000000000..06b22fb3d --- /dev/null +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/hs300x/hs300x_source/drv_hs300x.c @@ -0,0 +1,223 @@ +#include "board.h" +#include +#include +#include +#include +#ifdef RT_USING_POSIX +#include +#include +#endif +#ifdef DRV_USING_HS300X +static rt_bool_t init_flag = RT_FALSE; +struct temp_humi_device +{ + struct rt_device parent; +}; +struct temp_humi_device hs300x_device; +static struct rt_i2c_bus_device *i2c_bus = RT_NULL; + + +static rt_err_t rt_hs300x_open(rt_device_t dev,rt_uint16_t oflag) +{ + RT_ASSERT(dev !=RT_NULL); + return RT_EOK; +} + +static rt_err_t rt_hs300x_close(rt_device_t dev) +{ + RT_ASSERT(dev !=RT_NULL); + return RT_EOK; +} + +static rt_err_t hs300x_i2c_write(struct rt_i2c_bus_device *bus,rt_uint8_t len,rt_uint8_t *buf) +{ + struct rt_i2c_msg msgs; + + msgs.addr = HS300X_DEV_ADDRESS; + msgs.flags = RT_I2C_WR; + msgs.buf = buf; + msgs.len = len; + + if(rt_i2c_transfer(bus,&msgs,1)==1) + { + + return RT_EOK; + } + else + { + + return -RT_ERROR; + } + +} +static rt_err_t hs300x_i2c_read(struct rt_i2c_bus_device *bus,rt_uint8_t len,rt_uint8_t *buf) +{ + + struct rt_i2c_msg msg[2]; + msg[0].addr = HS300X_DEV_ADDRESS; + msg[0].flags = RT_I2C_WR; + msg[0].buf = RT_NULL; + msg[0].len = 0; + + msg[1].addr = HS300X_DEV_ADDRESS; + msg[1].flags = RT_I2C_RD; + msg[1].buf = buf; + msg[1].len = len; + + if(rt_i2c_transfer(bus,&msg,2)==2) + { + return RT_EOK; + + } + else{ + return -RT_ERROR; + } +} + +static rt_size_t rt_hs300x_read(rt_device_t dev,rt_off_t pos,void *buffer,rt_size_t size) +{ + RT_ASSERT(dev!=RT_NULL); + return RT_EOK; + +} + +static rt_size_t rt_hs300x_write(rt_device_t dev, rt_off_t pos, const void *buffer, rt_size_t size) +{ + RT_ASSERT(dev !=RT_NULL); + return RT_EOK; +} + +static rt_err_t rt_hs300x_init (rt_device_t dev) +{ + RT_ASSERT(dev!=RT_NULL); + return RT_EOK; +} + +static void read_temp_humi(float *cur_temp,float *cur_humi) +{ + rt_uint8_t temperature[4]; + + hs300x_i2c_read(i2c_bus,4,temperature); + *cur_temp = ((temperature[2]<<8|temperature[3])>>2)*165.0 /((1<<14)-1)-40; + *cur_humi = ((temperature[0]<<8|temperature[1])& 0x3fff)*100.0 /((1<<14)-1); +} + +static void hs300x_i2c_sample(void) +{ + float hs300x_temp = 0.0; + float hs300x_humi = 0.0; + i2c_bus = (struct rt_i2c_bus_device *)rt_device_find(I2C_NAME); + if(i2c_bus ==RT_NULL) + { + rt_kprintf("device find err\n"); + return -RT_ERROR; + } + for(int i=0;i<100;i++) + { + read_temp_humi(&hs300x_temp,&hs300x_humi); + rt_kprintf("humidity: %d.%d %%\n",(int)hs300x_humi,(int)(hs300x_humi*10)%10); + if(hs300x_temp>0) + { + rt_kprintf("temperature:%d.%d C\n",(int)hs300x_temp,(int)(hs300x_temp*10)%10); + } + else + { + rt_kprintf("temperature:%d.%d C\n",(int)hs300x_temp,(int)(-hs300x_temp*10)%10); + } + rt_thread_mdelay(5000); + } +} + +static int hs300x_fops_open(struct dfs_fd *fd) +{ + rt_err_t ret; + rt_device_t dev; + dev = (rt_device_t)fd->data; + RT_ASSERT(dev !=RT_NULL); + ret = rt_device_open(dev,RT_DEVICE_FLAG_RDONLY); + if(ret == RT_EOK) + { + return RT_EOK; + } + return RT_ERROR; +} +static int hs300x_fops_close(struct dfs_fd *fd) +{ + rt_device_t dev; + dev = (rt_device_t)fd->data; + rt_device_set_rx_indicate(dev,RT_NULL); + rt_device_close(dev); + return RT_EOK; +} +static int hs300x_fops_read(struct dfs_fd *fd,void *buf,size_t count) +{ + rt_device_t dev; + dev = (rt_device_t)fd->data; + RT_ASSERT(dev!=RT_NULL); + rt_err_t ret; + if(count !=4 ) + { + rt_kprintf("can only read 4bytes!\n"); + } + i2c_bus = (struct rt_i2c_bus_device *)rt_device_find(I2C_NAME); + ret = hs300x_i2c_read(i2c_bus,count,buf); + if (ret ==RT_EOK) + { + return RT_EOK; + } + return RT_ERROR; +} +static int hs300x_fops_write(struct dfs_fd *fd,const void *buf,size_t count) +{ + rt_device_t dev; + dev = (rt_device_t)fd->data; + RT_ASSERT(dev !=RT_NULL); + rt_err_t ret; + i2c_bus = (struct rt_i2c_bus_device *)rt_device_find(I2C_NAME); + ret = hs300x_i2c_write(i2c_bus,0,RT_NULL); + if(ret ==RT_EOK) + { + return RT_EOK; + } + return RT_ERROR; +} + +const static struct dfs_file_ops hs300x_fops = +{ + hs300x_fops_open, + hs300x_fops_close, + RT_NULL, + hs300x_fops_read, + hs300x_fops_write, + RT_NULL, + RT_NULL, + RT_NULL, + RT_NULL, +}; + + + +int sensor_hs300x_init() +{ + rt_err_t ret = RT_EOK; + hs300x_device.parent.open = rt_hs300x_open; + hs300x_device.parent.close = rt_hs300x_close; + hs300x_device.parent.read = rt_hs300x_read; + hs300x_device.parent.write = rt_hs300x_write; + hs300x_device.parent.init = rt_hs300x_init; + ret = rt_device_register(&hs300x_device.parent,"hs300x",RT_DEVICE_FLAG_RDONLY); + #ifdef RT_USING_POSIX + hs300x_device.parent.fops = &hs300x_fops; + #endif + if(ret !=RT_EOK) + { + rt_kprintf("hs300x register failed!\n\r"); + return -RT_ERROR; + } + rt_kprintf("hs300x register success!\n\r"); + return RT_EOK; +} +INIT_APP_EXPORT(sensor_hs300x_init); +MSH_CMD_EXPORT(hs300x_i2c_sample, a read temp sample); + +#endif \ No newline at end of file diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/hs300x/hs300x_source/drv_hs300x.h b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/hs300x/hs300x_source/drv_hs300x.h new file mode 100644 index 000000000..1dbf333f1 --- /dev/null +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/hs300x/hs300x_source/drv_hs300x.h @@ -0,0 +1,29 @@ +#ifndef __HS300X_H__ +#define __HS300X_H__ + +#include +#include + +#include + +#ifdef __cplusplus +extern "C"{ +#endif +#ifndef HS300X_I2C_FREQUENCY +#define HS300X_I2C_FREQUENCY 40000 +#endif + +#define I2C_NAME "i2c1" +#define buflen 4 +#define HS300X_TEMP_RANGE_MAX (80) +#define HS300X_TEMP_RANGE_MIN (-10) + + + + + + +#ifdef __cplusplus +} +#endif +#endif \ No newline at end of file From 1d023c95041843ea3e6cb42c7e36c234015a2557 Mon Sep 17 00:00:00 2001 From: yl1185 <1182784652@qq.com> Date: Thu, 23 Jun 2022 14:11:47 +0800 Subject: [PATCH 03/13] Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/aiit-arm32-board/applications 1.delete useless uart_test.c --- .../aiit-arm32-board/applications/uart_test.c | 43 ------------------- 1 file changed, 43 deletions(-) delete mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/aiit-arm32-board/applications/uart_test.c diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/aiit-arm32-board/applications/uart_test.c b/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/aiit-arm32-board/applications/uart_test.c deleted file mode 100644 index aeb9e8859..000000000 --- a/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/aiit-arm32-board/applications/uart_test.c +++ /dev/null @@ -1,43 +0,0 @@ -/* - * @Author: yongliang - * @Date: 2022-03-31 16:00:00 - * @Description: uart_test code - * @FilePath: \xiuos\Ubiquitous\RT_Thread\aiit_board\stm32f407_mini_board\applications\uart_test.c - */ - -/* - * Copyright (c) 2006-2018, RT-Thread Development Team - * - * SPDX-License-Identifier: Apache-2.0 - * - * Change Logs: - * Date Author Notes - */ - -#include -#include -#include -#include - -int main (void) -{ - /*1.设置系统中断优先组*/ - - /*2.串口初始化*/ - while(1) - { - if(USART_RX_STA&0X8000) - { - len =USART_RX_STA&0X3fff; - printf("发送的消息为:\r\n"); - for(t=0;t Date: Thu, 23 Jun 2022 14:14:30 +0800 Subject: [PATCH 04/13] aiit-arm32-board/test/ test jpg 1.humi.jpg and temp.jpg --- .../aiit_board/aiit-arm32-board/test/humi.jpg | Bin 0 -> 53982 bytes .../aiit_board/aiit-arm32-board/test/temp.jpg | Bin 0 -> 195211 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/aiit-arm32-board/test/humi.jpg create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/aiit-arm32-board/test/temp.jpg diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/aiit-arm32-board/test/humi.jpg b/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/aiit-arm32-board/test/humi.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9f58a182a80ee2049a496ebb29aeb085354d5a46 GIT binary patch literal 53982 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 HzsLU{@j1Py literal 0 HcmV?d00001 diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/aiit-arm32-board/test/temp.jpg b/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/aiit-arm32-board/test/temp.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eb49a0e26b9cdcae87ae14e8ffc6675c7fe6b83f GIT binary patch literal 195211 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

Uoet0Q)Kw&z&~^bQ?oa!B>(4>Gn_tVo5}xj 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 z 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 Date: Thu, 23 Jun 2022 14:35:15 +0800 Subject: [PATCH 05/13] app_match_rt-thread/sx1278/ sx1278 1.Kconfig is ok. 2.gcc is ok. --- .../app_match_rt-thread/sx1278/Kconfig | 38 +++++++++++++++++++ .../app_match_rt-thread/sx1278/SConscript | 7 ++++ .../sx1278/sx1278_source/SConscript | 19 ++++++++++ 3 files changed, 64 insertions(+) create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/Kconfig create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/SConscript create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/SConscript diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/Kconfig b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/Kconfig new file mode 100644 index 000000000..adbeee018 --- /dev/null +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/Kconfig @@ -0,0 +1,38 @@ + +menuconfig DRV_USING_SX1278 + bool "sx1278 driver" + default n + help + note: + lora connection + +if DRV_USING_SX1278 + config SX1278_SPI_DEVICE_NAME + string "SX1278 Lora Device Spi Name" + default "spi20" + config SX1278_DEVICE_NAME + string "SX1278 Lora Device Name" + default "spi2_lora" + config SX1278_DEVICE_RST_PIN + int + default 1 + config SX1278_DEVICE_DIO0_PIN + int + default 1 + config SX1278_DEVICE_DIO1_PIN + int + default 1 + config SX1278_DEVICE_DIO2_PIN + int + default 1 + config SX1278_DEVICE_DIO3_PIN + int + default 1 + config SX1278_DEVICE_DIO4_PIN + int + default 1 + config SX1278_DEVICE_DIO5_PIN + int + default 1 +endif + diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/SConscript b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/SConscript new file mode 100644 index 000000000..439998036 --- /dev/null +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/SConscript @@ -0,0 +1,7 @@ +Import('RTT_ROOT') +from building import * + +cwd = GetCurrentDir() +objs = SConscript(os.path.join(cwd, 'sx1278_source', 'SConscript')) + +Return('objs') diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/SConscript b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/SConscript new file mode 100644 index 000000000..614ddae45 --- /dev/null +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/SConscript @@ -0,0 +1,19 @@ +import os +from building import * +Import('RTT_ROOT') +Import('rtconfig') +cwd = GetCurrentDir() +DEPENDS = ["DRV_USING_SX1278"] + +SOURCES = [] +if GetDepend(['DRV_USING_SX1278']): + SOURCES += ['drv_sx1278.c'] + SOURCES += Glob('src/radio/sx1276*.c') + SOURCES += Glob('src/radio/radio.c') + SOURCES += Glob('port/*.c') + +path = [cwd + '/inc'] +path += ['src/radio'] +objs = DefineGroup('sx1278', src = SOURCES, depend = DEPENDS,CPPPATH = path) + +Return("objs") \ No newline at end of file From 2f4e67ae87dcbc63dfbbdd06ae94ac9fed5365b6 Mon Sep 17 00:00:00 2001 From: yl1185 <1182784652@qq.com> Date: Thu, 23 Jun 2022 14:37:37 +0800 Subject: [PATCH 06/13] app_match_rt-thread/sx1278/sx1278 1.transplant sx1278 source code 2.adapt for rtthread --- .../sx1278_source/inc/spi_lora_sx12xx.h | 96 ++ .../sx1278/sx1278_source/inc/type.h | 33 + .../sx1278_source/port/spi_sx1278_init.c | 17 + .../sx1278/sx1278_source/src/Makefile | 10 + .../sx1278/sx1278_source/src/radio/platform.h | 88 + .../sx1278/sx1278_source/src/radio/radio.c | 64 + .../sx1278/sx1278_source/src/radio/radio.h | 66 + .../sx1278_source/src/radio/sx1276-Fsk.c | 606 +++++++ .../sx1278_source/src/radio/sx1276-Fsk.h | 1460 +++++++++++++++++ .../sx1278_source/src/radio/sx1276-FskMisc.c | 521 ++++++ .../sx1278_source/src/radio/sx1276-FskMisc.h | 241 +++ .../sx1278_source/src/radio/sx1276-Hal.h | 162 ++ .../sx1278_source/src/radio/sx1276-LoRa.c | 797 +++++++++ .../sx1278_source/src/radio/sx1276-LoRa.h | 922 +++++++++++ .../sx1278_source/src/radio/sx1276-LoRaMisc.c | 411 +++++ .../sx1278_source/src/radio/sx1276-LoRaMisc.h | 315 ++++ .../sx1278/sx1278_source/src/radio/sx1276.c | 304 ++++ .../sx1278/sx1278_source/src/radio/sx1276.h | 157 ++ 18 files changed, 6270 insertions(+) create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/inc/spi_lora_sx12xx.h create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/inc/type.h create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/port/spi_sx1278_init.c create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/Makefile create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/platform.h create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/radio.c create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/radio.h create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-Fsk.c create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-Fsk.h create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-FskMisc.c create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-FskMisc.h create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-Hal.h create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-LoRa.c create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-LoRa.h create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-LoRaMisc.c create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-LoRaMisc.h create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276.c create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276.h diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/inc/spi_lora_sx12xx.h b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/inc/spi_lora_sx12xx.h new file mode 100644 index 000000000..25e647f7e --- /dev/null +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/inc/spi_lora_sx12xx.h @@ -0,0 +1,96 @@ +/* + * Original Copyright (c) 2006-2018, RT-Thread Development Team + * Modified Copyright (c) 2020 AIIT XUOS Lab + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Change Logs: + * Date Author Notes + * 2019-02-25 XiaojieFan the first version + */ + +/* + * Modified by: AIIT XUOS Lab + * Modified date: 2020-09-01 + * Description: + */ +/************************************************* +File name: spi_lora_sx12xx.h +Description: support aiit board configure and register function +History: +1. Date: 2021-04-25 +Author: AIIT XUOS Lab +Modification: +1. replace original macro and basic date type with AIIT XUOS Lab's own defination +*************************************************/ + + +#ifndef __SPI_LORA_SX12XX_H_ +#define __SPI_LORA_SX12XX_H_ + +#include +#include +#include "type.h" + +/*! + * \brief Gets the SX1272 DIO0 hardware pin status + * + * \retval status Current hardware pin status [1, 0] + */ +rt_uint8_t SX1276ReadDio0(void); + +/*! + * \brief Gets the SX1272 DIO1 hardware pin status + * + * \retval status Current hardware pin status [1, 0] + */ +rt_uint8_t SX1276ReadDio1(void); + +/*! + * \brief Gets the SX1272 DIO2 hardware pin status + * + * \retval status Current hardware pin status [1, 0] + */ +rt_uint8_t SX1276ReadDio2(void); + +/*! + * \brief Gets the SX1272 DIO3 hardware pin status + * + * \retval status Current hardware pin status [1, 0] + */ +rt_uint8_t SX1276ReadDio3(void); + +/*! + * \brief Gets the SX1272 DIO4 hardware pin status + * + * \retval status Current hardware pin status [1, 0] + */ +rt_uint8_t SX1276ReadDio4(void); + +/*! + * \brief Gets the SX1272 DIO5 hardware pin status + * + * \retval status Current hardware pin status [1, 0] + */ +rt_uint8_t SX1276ReadDio5(void); + +void SX1276Write(rt_uint8_t addr, rt_uint8_t data); +void SX1276Read(rt_uint8_t addr, rt_uint8_t *data); +void SX1276WriteBuffer(rt_uint8_t addr, rt_uint8_t *buffer, rt_uint8_t size); +void SX1276ReadBuffer(rt_uint8_t addr, rt_uint8_t *buffer, rt_uint8_t size); +void SX1276WriteFifo(rt_uint8_t *buffer, rt_uint8_t size); +void SX1276ReadFifo(rt_uint8_t *buffer, rt_uint8_t size); +void SX1276SetReset(rt_uint8_t state); +rt_uint8_t SX1276_Spi_Check(void); +void SX1276WriteRxTx(rt_uint8_t txEnable); +#endif \ No newline at end of file diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/inc/type.h b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/inc/type.h new file mode 100644 index 000000000..eb63cdf41 --- /dev/null +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/inc/type.h @@ -0,0 +1,33 @@ +/* +File Name : type.h +Author : Yichip +Version : V1.0 +Date : 2018/05/25 +Description : Data type definition. +*/ + +#ifndef __TYPE_H__ +#define __TYPE_H__ + +#if defined (__CC_ARM) || defined ( __ICCARM__ ) +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +typedef unsigned long long uint64_t; +typedef unsigned char byte; +typedef unsigned short word; + +typedef signed char int8_t; +typedef signed short int16_t; +typedef signed int int32_t; +typedef signed long long int64_t; +#else +#include "stdio.h" +typedef unsigned char byte; +typedef unsigned short word; +#endif + + + +#endif /*__TYPE_H__*/ + diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/port/spi_sx1278_init.c b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/port/spi_sx1278_init.c new file mode 100644 index 000000000..fe9e7d65f --- /dev/null +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/port/spi_sx1278_init.c @@ -0,0 +1,17 @@ +#include + +#include "drv_spi.h" +#include +#include +#include +#include +#include +#include +#include + +static int sx12xx_spi_device_init(void) +{ + __HAL_RCC_GPIOC_CLK_ENABLE(); + rt_hw_spi_device_attach("spi2","spi20",GPIOC,GPIO_PIN_6); +} +INIT_APP_EXPORT(sx12xx_spi_device_init); \ No newline at end of file diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/Makefile b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/Makefile new file mode 100644 index 000000000..ee5f169e2 --- /dev/null +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/Makefile @@ -0,0 +1,10 @@ + +SRC_FILES += radio/radio.c \ + radio/sx1276-Fsk.c \ + radio/sx1276-FskMisc.c \ + radio/sx1276-LoRa.c \ + radio/sx1276-LoRaMisc.c \ + radio/sx1276.c + + +include $(KERNEL_ROOT)/compiler.mk diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/platform.h b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/platform.h new file mode 100644 index 000000000..aa6a36171 --- /dev/null +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/platform.h @@ -0,0 +1,88 @@ +/* + * THE FOLLOWING FIRMWARE IS PROVIDED: (1) "AS IS" WITH NO WARRANTY; AND + * (2)TO ENABLE ACCESS TO CODING INFORMATION TO GUIDE AND FACILITATE CUSTOMER. + * CONSEQUENTLY, SEMTECH SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR + * CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT + * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION + * CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + * Copyright (C) SEMTECH S.A. + */ +/*! + * \file platform.h + * \brief + * + * \version 1.0 + * \date Nov 21 2012 + * \author Miguel Luis + */ +#ifndef __PLATFORM_H__ +#define __PLATFORM_H__ + +#ifndef __GNUC__ +#define inline +#endif + +/*! + * Platform definition + */ +#define Bleeper 3 +#define SX1243ska 2 +#define SX12xxEiger 1 +#define SX12000DVK 0 + +/*! + * Platform choice. Please uncoment the PLATFORM define and choose your platform + * or add/change the PLATFORM definition on the compiler Defines option + */ +#define PLATFORM SX12xxEiger + +#if( PLATFORM == SX12xxEiger ) +/*! + * Radio choice. Please uncomment the wanted radio and comment the others + * or add/change wanted radio definition on the compiler Defines option + */ +//#define USE_SX1232_RADIO +//#define USE_SX1272_RADIO +#define USE_SX1276_RADIO +//#define USE_SX1243_RADIO + +/*! + * Module choice. There are three existing module with the SX1276. + * Please set the connected module to the value 1 and set the others to 0 + */ +#ifdef USE_SX1276_RADIO +#define MODULE_SX1276RF1IAS 0 +#define MODULE_SX1276RF1JAS 0 +#define MODULE_SX1276RF1KAS 1 +#endif + + //#include "sx12xxEiger/sx12xxEiger.h" + #include "spi_lora_sx12xx.h" + #define USE_UART 0 + +#elif( PLATFORM == SX12000DVK ) +/*! + * Radio choice. Please uncomment the wanted radio and comment the others + * or add/change wanted radio definition on the compiler Defines option + */ +//#define USE_SX1232_RADIO +#define USE_SX1272_RADIO +//#define USE_SX1276_RADIO +//#define USE_SX1243_RADIO + + #include "sx1200dvk/sx1200dvk.h" + +#elif( PLATFORM == SX1243ska ) + +#elif( PLATFORM == Bleeper ) + #define USE_SX1272_RADIO + + #include "bleeper/bleeper.h" + #define USE_UART 0 + +#else + #error "Missing define: Platform (ie. SX12xxEiger)" +#endif + +#endif // __PLATFORM_H__ diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/radio.c b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/radio.c new file mode 100644 index 000000000..fb413d915 --- /dev/null +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/radio.c @@ -0,0 +1,64 @@ +/* + * THE FOLLOWING FIRMWARE IS PROVIDED: (1) "AS IS" WITH NO WARRANTY; AND + * (2)TO ENABLE ACCESS TO CODING INFORMATION TO GUIDE AND FACILITATE CUSTOMER. + * CONSEQUENTLY, SEMTECH SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR + * CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT + * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION + * CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + * Copyright (C) SEMTECH S.A. + */ +/*! + * \file radio.c + * \brief Generic radio driver ( radio abstraction ) + * + * \version 2.0.0 + * \date Nov 21 2012 + * \author Miguel Luis + * + * Last modified by Gregory Cristian on Apr 25 2013 + */ +#include "platform.h" + +#include "radio.h" + +#if defined( USE_SX1232_RADIO ) + #include "sx1232.h" +#elif defined( USE_SX1272_RADIO ) + #include "sx1272.h" +#elif defined( USE_SX1276_RADIO ) + #include "sx1276.h" +#else + #error "Missing define: USE_XXXXXX_RADIO (ie. USE_SX1272_RADIO)" +#endif + +tRadioDriver RadioDriver; + +tRadioDriver* RadioDriverInit( void ) +{ +#if defined( USE_SX1232_RADIO ) + RadioDriver.Init = SX1232Init; + RadioDriver.Reset = SX1232Reset; + RadioDriver.StartRx = SX1232StartRx; + RadioDriver.GetRxPacket = SX1232GetRxPacket; + RadioDriver.SetTxPacket = SX1232SetTxPacket; + RadioDriver.Process = SX1232Process; +#elif defined( USE_SX1272_RADIO ) + RadioDriver.Init = SX1272Init; + RadioDriver.Reset = SX1272Reset; + RadioDriver.StartRx = SX1272StartRx; + RadioDriver.GetRxPacket = SX1272GetRxPacket; + RadioDriver.SetTxPacket = SX1272SetTxPacket; + RadioDriver.Process = SX1272Process; +#elif defined( USE_SX1276_RADIO ) + RadioDriver.Init = SX1276Init; + RadioDriver.Reset = SX1276Reset; + RadioDriver.StartRx = SX1276StartRx; + RadioDriver.GetRxPacket = SX1276GetRxPacket; + RadioDriver.SetTxPacket = SX1276SetTxPacket; + RadioDriver.Process = SX1276Process; +#else + #error "Missing define: USE_XXXXXX_RADIO (ie. USE_SX1272_RADIO)" +#endif + return &RadioDriver; +} diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/radio.h b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/radio.h new file mode 100644 index 000000000..65b1a0912 --- /dev/null +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/radio.h @@ -0,0 +1,66 @@ +/* + * THE FOLLOWING FIRMWARE IS PROVIDED: (1) "AS IS" WITH NO WARRANTY; AND + * (2)TO ENABLE ACCESS TO CODING INFORMATION TO GUIDE AND FACILITATE CUSTOMER. + * CONSEQUENTLY, SEMTECH SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR + * CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT + * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION + * CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + * Copyright (C) SEMTECH S.A. + */ +/*! + * \file radio.h + * \brief Generic radio driver ( radio abstraction ) + * + * \version 2.0.B2 + * \date Nov 21 2012 + * \author Miguel Luis + * + * Last modified by Gregory Cristian on Apr 25 2013 + */ +#ifndef __RADIO_H__ +#define __RADIO_H__ + +/*! + * SX1272 and SX1276 General parameters definition + */ +#define LORA 1 // [0: OFF, 1: ON] + +/*! + * RF process function return codes + */ +typedef enum +{ + RF_IDLE, + RF_BUSY, + RF_RX_DONE, + RF_RX_TIMEOUT, + RF_TX_DONE, + RF_TX_TIMEOUT, + RF_LEN_ERROR, + RF_CHANNEL_EMPTY, + RF_CHANNEL_ACTIVITY_DETECTED, +}tRFProcessReturnCodes; + +/*! + * Radio driver structure defining the different function pointers + */ +typedef struct sRadioDriver +{ + void ( *Init )( void ); + void ( *Reset )( void ); + void ( *StartRx )( void ); + void ( *GetRxPacket )( void *buffer, uint16_t *size ); + void ( *SetTxPacket )( const void *buffer, uint16_t size ); + uint32_t ( *Process )( void ); +}tRadioDriver; + +/*! + * \brief Initializes the RadioDriver structure with specific radio + * functions. + * + * \retval radioDriver Pointer to the radio driver variable + */ +tRadioDriver* RadioDriverInit( void ); + +#endif // __RADIO_H__ diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-Fsk.c b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-Fsk.c new file mode 100644 index 000000000..29906c0fe --- /dev/null +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-Fsk.c @@ -0,0 +1,606 @@ +/* + * THE FOLLOWING FIRMWARE IS PROVIDED: (1) "AS IS" WITH NO WARRANTY; AND + * (2)TO ENABLE ACCESS TO CODING INFORMATION TO GUIDE AND FACILITATE CUSTOMER. + * CONSEQUENTLY, SEMTECH SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR + * CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT + * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION + * CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + * Copyright (C) SEMTECH S.A. + */ +/*! + * \file sx1276.c + * \brief SX1276 RF chip driver + * + * \version 2.0.0 + * \date May 6 2013 + * \author Gregory Cristian + * + * Last modified by Miguel Luis on Jun 19 2013 + */ +#include +#include + +#include "platform.h" + +#if defined( USE_SX1276_RADIO ) + +#include "radio.h" + +#include "sx1276-Hal.h" +#include "sx1276.h" + +#include "sx1276-FskMisc.h" +#include "sx1276-Fsk.h" + +// Default settings +tFskSettings FskSettings = +{ + 870000000, // RFFrequency + 9600, // Bitrate + 50000, // Fdev + 20, // Power + 100000, // RxBw + 150000, // RxBwAfc + true, // CrcOn + true, // AfcOn + 255 // PayloadLength (set payload size to the maximum for variable mode, else set the exact payload length) +}; + +/*! + * SX1276 FSK registers variable + */ +tSX1276* SX1276; + +/*! + * Local RF buffer for communication support + */ +static uint8_t RFBuffer[RF_BUFFER_SIZE]; + +/*! + * Chunk size of data write in buffer + */ +static uint8_t DataChunkSize = 32; + + +/*! + * RF state machine variable + */ +static uint8_t RFState = RF_STATE_IDLE; + +/*! + * Rx management support variables + */ + +/*! + * PacketTimeout holds the RF packet timeout + * SyncSize = [0..8] + * VariableSize = [0;1] + * AddressSize = [0;1] + * PayloadSize = [0..RF_BUFFER_SIZE] + * CrcSize = [0;2] + * PacketTimeout = ( ( 8 * ( VariableSize + AddressSize + PayloadSize + CrcSize ) / BR ) * 1000.0 ) + 1 + * Computed timeout is in miliseconds + */ +static uint32_t PacketTimeout; + +/*! + * Preamble2SyncTimeout + * Preamble2SyncTimeout = ( ( 8 * ( PremableSize + SyncSize ) / RFBitrate ) * 1000.0 ) + 1 + * Computed timeout is in miliseconds + */ +static uint32_t Preamble2SyncTimeout; + +static bool PreambleDetected = false; +static bool SyncWordDetected = false; +static bool PacketDetected = false; +static uint16_t RxPacketSize = 0; +static uint8_t RxBytesRead = 0; +static uint8_t TxBytesSent = 0; +static double RxPacketRssiValue; +static uint32_t RxPacketAfcValue; +static uint8_t RxGain = 1; +static uint32_t RxTimeoutTimer = 0; +static uint32_t Preamble2SyncTimer = 0; + +/*! + * Tx management support variables + */ +static uint16_t TxPacketSize = 0; +static uint32_t TxTimeoutTimer = 0; + +void SX1276FskInit( void ) +{ + RFState = RF_STATE_IDLE; + + SX1276FskSetDefaults( ); + + SX1276ReadBuffer( REG_OPMODE, SX1276Regs + 1, 0x70 - 1 ); + + // Set the device in FSK mode and Sleep Mode + SX1276->RegOpMode = RF_OPMODE_MODULATIONTYPE_FSK | RF_OPMODE_SLEEP; + SX1276Write( REG_OPMODE, SX1276->RegOpMode ); + + SX1276->RegPaRamp = RF_PARAMP_MODULATIONSHAPING_01; + SX1276Write( REG_PARAMP, SX1276->RegPaRamp ); + + SX1276->RegLna = RF_LNA_GAIN_G1; + SX1276Write( REG_LNA, SX1276->RegLna ); + + if( FskSettings.AfcOn == true ) + { + SX1276->RegRxConfig = RF_RXCONFIG_RESTARTRXONCOLLISION_OFF | RF_RXCONFIG_AFCAUTO_ON | + RF_RXCONFIG_AGCAUTO_ON | RF_RXCONFIG_RXTRIGER_PREAMBLEDETECT; + } + else + { + SX1276->RegRxConfig = RF_RXCONFIG_RESTARTRXONCOLLISION_OFF | RF_RXCONFIG_AFCAUTO_OFF | + RF_RXCONFIG_AGCAUTO_ON | RF_RXCONFIG_RXTRIGER_PREAMBLEDETECT; + } + + SX1276->RegPreambleLsb = 8; + + SX1276->RegPreambleDetect = RF_PREAMBLEDETECT_DETECTOR_ON | RF_PREAMBLEDETECT_DETECTORSIZE_2 | + RF_PREAMBLEDETECT_DETECTORTOL_10; + + SX1276->RegRssiThresh = 0xFF; + + SX1276->RegSyncConfig = RF_SYNCCONFIG_AUTORESTARTRXMODE_WAITPLL_ON | RF_SYNCCONFIG_PREAMBLEPOLARITY_AA | + RF_SYNCCONFIG_SYNC_ON | + RF_SYNCCONFIG_SYNCSIZE_4; + + SX1276->RegSyncValue1 = 0x69; + SX1276->RegSyncValue2 = 0x81; + SX1276->RegSyncValue3 = 0x7E; + SX1276->RegSyncValue4 = 0x96; + + SX1276->RegPacketConfig1 = RF_PACKETCONFIG1_PACKETFORMAT_VARIABLE | RF_PACKETCONFIG1_DCFREE_OFF | + ( FskSettings.CrcOn << 4 ) | RF_PACKETCONFIG1_CRCAUTOCLEAR_ON | + RF_PACKETCONFIG1_ADDRSFILTERING_OFF | RF_PACKETCONFIG1_CRCWHITENINGTYPE_CCITT; + SX1276FskGetPacketCrcOn( ); // Update CrcOn on FskSettings + + SX1276->RegPayloadLength = FskSettings.PayloadLength; + + // we can now update the registers with our configuration + SX1276WriteBuffer( REG_OPMODE, SX1276Regs + 1, 0x70 - 1 ); + + // then we need to set the RF settings + SX1276FskSetRFFrequency( FskSettings.RFFrequency ); + SX1276FskSetBitrate( FskSettings.Bitrate ); + SX1276FskSetFdev( FskSettings.Fdev ); + + SX1276FskSetDccBw( &SX1276->RegRxBw, 0, FskSettings.RxBw ); + SX1276FskSetDccBw( &SX1276->RegAfcBw, 0, FskSettings.RxBwAfc ); + SX1276FskSetRssiOffset( 0 ); + +#if( ( MODULE_SX1276RF1IAS == 1 ) || ( MODULE_SX1276RF1KAS == 1 ) ) + if( FskSettings.RFFrequency > 860000000 ) + { + SX1276FskSetPAOutput( RF_PACONFIG_PASELECT_RFO ); + SX1276FskSetPa20dBm( false ); + FskSettings.Power = 14; + SX1276FskSetRFPower( FskSettings.Power ); + } + else + { + SX1276FskSetPAOutput( RF_PACONFIG_PASELECT_PABOOST ); + SX1276FskSetPa20dBm( true ); + FskSettings.Power = 20; + SX1276FskSetRFPower( FskSettings.Power ); + } +#elif( MODULE_SX1276RF1JAS == 1 ) + if( FskSettings.RFFrequency > 860000000 ) + { + SX1276FskSetPAOutput( RF_PACONFIG_PASELECT_PABOOST ); + SX1276FskSetPa20dBm( true ); + FskSettings.Power = 20; + SX1276FskSetRFPower( FskSettings.Power ); + } + else + { + SX1276FskSetPAOutput( RF_PACONFIG_PASELECT_RFO ); + SX1276FskSetPa20dBm( false ); + FskSettings.Power = 14; + SX1276FskSetRFPower( FskSettings.Power ); + } +#endif + + SX1276FskSetOpMode( RF_OPMODE_STANDBY ); + + // Calibrate the HF + SX1276FskRxCalibrate( ); +} + +void SX1276FskSetDefaults( void ) +{ + // REMARK: See SX1276 datasheet for modified default values. + + SX1276Read( REG_VERSION, &SX1276->RegVersion ); +} + +void SX1276FskSetOpMode( uint8_t opMode ) +{ + static uint8_t opModePrev = RF_OPMODE_STANDBY; + static bool antennaSwitchTxOnPrev = true; + bool antennaSwitchTxOn = false; + + opModePrev = SX1276->RegOpMode & ~RF_OPMODE_MASK; + + if( opMode != opModePrev ) + { + if( opMode == RF_OPMODE_TRANSMITTER ) + { + antennaSwitchTxOn = true; + } + else + { + antennaSwitchTxOn = false; + } + if( antennaSwitchTxOn != antennaSwitchTxOnPrev ) + { + antennaSwitchTxOnPrev = antennaSwitchTxOn; + RXTX( antennaSwitchTxOn ); // Antenna switch control + } + SX1276->RegOpMode = ( SX1276->RegOpMode & RF_OPMODE_MASK ) | opMode; + + SX1276Write( REG_OPMODE, SX1276->RegOpMode ); + } +} + +uint8_t SX1276FskGetOpMode( void ) +{ + SX1276Read( REG_OPMODE, &SX1276->RegOpMode ); + + return SX1276->RegOpMode & ~RF_OPMODE_MASK; +} + +int32_t SX1276FskReadFei( void ) +{ + SX1276ReadBuffer( REG_FEIMSB, &SX1276->RegFeiMsb, 2 ); // Reads the FEI value + + return ( int32_t )( double )( ( ( uint16_t )SX1276->RegFeiMsb << 8 ) | ( uint16_t )SX1276->RegFeiLsb ) * ( double )FREQ_STEP; +} + +int32_t SX1276FskReadAfc( void ) +{ + SX1276ReadBuffer( REG_AFCMSB, &SX1276->RegAfcMsb, 2 ); // Reads the AFC value + return ( int32_t )( double )( ( ( uint16_t )SX1276->RegAfcMsb << 8 ) | ( uint16_t )SX1276->RegAfcLsb ) * ( double )FREQ_STEP; +} + +uint8_t SX1276FskReadRxGain( void ) +{ + SX1276Read( REG_LNA, &SX1276->RegLna ); + return( SX1276->RegLna >> 5 ) & 0x07; +} + +double SX1276FskReadRssi( void ) +{ + SX1276Read( REG_RSSIVALUE, &SX1276->RegRssiValue ); // Reads the RSSI value + + return -( double )( ( double )SX1276->RegRssiValue / 2.0 ); +} + +uint8_t SX1276FskGetPacketRxGain( void ) +{ + return RxGain; +} + +double SX1276FskGetPacketRssi( void ) +{ + return RxPacketRssiValue; +} + +uint32_t SX1276FskGetPacketAfc( void ) +{ + return RxPacketAfcValue; +} + +void SX1276FskStartRx( void ) +{ + SX1276FskSetRFState( RF_STATE_RX_INIT ); +} + +void SX1276FskGetRxPacket( void *buffer, uint16_t *size ) +{ + *size = RxPacketSize; + RxPacketSize = 0; + memcpy( ( void * )buffer, ( void * )RFBuffer, ( size_t )*size ); +} + +void SX1276FskSetTxPacket( const void *buffer, uint16_t size ) +{ + TxPacketSize = size; + memcpy( ( void * )RFBuffer, buffer, ( size_t )TxPacketSize ); + + RFState = RF_STATE_TX_INIT; +} + +// Remark: SX1276 must be fully initialized before calling this function +uint16_t SX1276FskGetPacketPayloadSize( void ) +{ + uint16_t syncSize; + uint16_t variableSize; + uint16_t addressSize; + uint16_t payloadSize; + uint16_t crcSize; + + syncSize = ( SX1276->RegSyncConfig & 0x07 ) + 1; + variableSize = ( ( SX1276->RegPacketConfig1 & 0x80 ) == 0x80 ) ? 1 : 0; + addressSize = ( ( SX1276->RegPacketConfig1 & 0x06 ) != 0x00 ) ? 1 : 0; + payloadSize = SX1276->RegPayloadLength; + crcSize = ( ( SX1276->RegPacketConfig1 & 0x10 ) == 0x10 ) ? 2 : 0; + + return syncSize + variableSize + addressSize + payloadSize + crcSize; +} + +// Remark: SX1276 must be fully initialized before calling this function +uint16_t SX1276FskGetPacketHeaderSize( void ) +{ + uint16_t preambleSize; + uint16_t syncSize; + + preambleSize = ( ( uint16_t )SX1276->RegPreambleMsb << 8 ) | ( uint16_t )SX1276->RegPreambleLsb; + syncSize = ( SX1276->RegSyncConfig & 0x07 ) + 1; + + return preambleSize + syncSize; +} + +uint8_t SX1276FskGetRFState( void ) +{ + return RFState; +} + +void SX1276FskSetRFState( uint8_t state ) +{ + RFState = state; +} + +uint32_t SX1276FskProcess( void ) +{ + uint32_t result = RF_BUSY; + + switch( RFState ) + { + case RF_STATE_IDLE: + break; + // Rx management + case RF_STATE_RX_INIT: + // DIO mapping setup + if( ( SX1276->RegPacketConfig1 & RF_PACKETCONFIG1_CRC_ON ) == RF_PACKETCONFIG1_CRC_ON ) + { + // CrcOk, FifoLevel, SyncAddr, FifoEmpty + SX1276->RegDioMapping1 = RF_DIOMAPPING1_DIO0_01 | RF_DIOMAPPING1_DIO1_00 | RF_DIOMAPPING1_DIO2_11 | RF_DIOMAPPING1_DIO3_00; + } + else + { + // PayloadReady, FifoLevel, SyncAddr, FifoEmpty + SX1276->RegDioMapping1 = RF_DIOMAPPING1_DIO0_00 | RF_DIOMAPPING1_DIO1_00 | RF_DIOMAPPING1_DIO2_11 | RF_DIOMAPPING1_DIO3_00; + } + // Preamble, Data + SX1276->RegDioMapping2 = RF_DIOMAPPING2_DIO4_11 | RF_DIOMAPPING2_DIO5_10 | RF_DIOMAPPING2_MAP_PREAMBLEDETECT; + SX1276WriteBuffer( REG_DIOMAPPING1, &SX1276->RegDioMapping1, 2 ); + + SX1276FskSetOpMode( RF_OPMODE_RECEIVER ); + + memset( RFBuffer, 0, ( size_t )RF_BUFFER_SIZE ); + + PacketTimeout = ( uint16_t )( round( ( 8.0 * ( ( double )SX1276FskGetPacketPayloadSize( ) ) / ( double )FskSettings.Bitrate ) * 1000.0 ) + 1.0 ); + PacketTimeout = PacketTimeout + ( PacketTimeout >> 1 ); // Set the Packet timeout as 1.5 times the full payload transmission time + + Preamble2SyncTimeout = PacketTimeout; + + Preamble2SyncTimer = RxTimeoutTimer = GET_TICK_COUNT( ); + + SX1276->RegFifoThresh = RF_FIFOTHRESH_TXSTARTCONDITION_FIFONOTEMPTY | 0x20; // 32 bytes of data + SX1276Write( REG_FIFOTHRESH, SX1276->RegFifoThresh ); + + PreambleDetected = false; + SyncWordDetected = false; + PacketDetected = false; + RxBytesRead = 0; + RxPacketSize = 0; + RFState = RF_STATE_RX_SYNC; + break; + case RF_STATE_RX_SYNC: + if( ( DIO4 == 1 ) && ( PreambleDetected == false ) )// Preamble + { + PreambleDetected = true; + Preamble2SyncTimer = GET_TICK_COUNT( ); + } + if( ( DIO2 == 1 ) && ( PreambleDetected == true ) && ( SyncWordDetected == false ) ) // SyncAddr + { + SyncWordDetected = true; + + RxPacketRssiValue = SX1276FskReadRssi( ); + + RxPacketAfcValue = SX1276FskReadAfc( ); + RxGain = SX1276FskReadRxGain( ); + + Preamble2SyncTimer = RxTimeoutTimer = GET_TICK_COUNT( ); + + RFState = RF_STATE_RX_RUNNING; + } + + // Preamble 2 SyncAddr timeout + if( ( SyncWordDetected == false ) && ( PreambleDetected == true ) && ( ( GET_TICK_COUNT( ) - Preamble2SyncTimer ) > Preamble2SyncTimeout ) ) + { + RFState = RF_STATE_RX_INIT; + SX1276Write( REG_RXCONFIG, SX1276->RegRxConfig | RF_RXCONFIG_RESTARTRXWITHPLLLOCK ); + } + if( ( SyncWordDetected == false ) && + ( PreambleDetected == false ) && + ( PacketDetected == false ) && + ( ( GET_TICK_COUNT( ) - RxTimeoutTimer ) > PacketTimeout ) ) + { + RFState = RF_STATE_RX_TIMEOUT; + } + break; + case RF_STATE_RX_RUNNING: + if( RxPacketSize > RF_BUFFER_SIZE_MAX ) + { + RFState = RF_STATE_RX_LEN_ERROR; + break; + } +#if 1 + if( DIO1 == 1 ) // FifoLevel + { + if( ( RxPacketSize == 0 ) && ( RxBytesRead == 0 ) ) // Read received packet size + { + if( ( SX1276->RegPacketConfig1 & RF_PACKETCONFIG1_PACKETFORMAT_VARIABLE ) == RF_PACKETCONFIG1_PACKETFORMAT_VARIABLE ) + { + SX1276ReadFifo( ( uint8_t* )&RxPacketSize, 1 ); + } + else + { + RxPacketSize = SX1276->RegPayloadLength; + } + } + + if( ( RxPacketSize - RxBytesRead ) > ( SX1276->RegFifoThresh & 0x3F ) ) + { + SX1276ReadFifo( ( RFBuffer + RxBytesRead ), ( SX1276->RegFifoThresh & 0x3F ) ); + RxBytesRead += ( SX1276->RegFifoThresh & 0x3F ); + } + else + { + SX1276ReadFifo( ( RFBuffer + RxBytesRead ), RxPacketSize - RxBytesRead ); + RxBytesRead += ( RxPacketSize - RxBytesRead ); + } + } +#endif + if( DIO0 == 1 ) // PayloadReady/CrcOk + { + RxTimeoutTimer = GET_TICK_COUNT( ); + if( ( RxPacketSize == 0 ) && ( RxBytesRead == 0 ) ) // Read received packet size + { + if( ( SX1276->RegPacketConfig1 & RF_PACKETCONFIG1_PACKETFORMAT_VARIABLE ) == RF_PACKETCONFIG1_PACKETFORMAT_VARIABLE ) + { + SX1276ReadFifo( ( uint8_t* )&RxPacketSize, 1 ); + } + else + { + RxPacketSize = SX1276->RegPayloadLength; + } + SX1276ReadFifo( RFBuffer + RxBytesRead, RxPacketSize - RxBytesRead ); + RxBytesRead += ( RxPacketSize - RxBytesRead ); + PacketDetected = true; + RFState = RF_STATE_RX_DONE; + } + else + { + SX1276ReadFifo( RFBuffer + RxBytesRead, RxPacketSize - RxBytesRead ); + RxBytesRead += ( RxPacketSize - RxBytesRead ); + PacketDetected = true; + RFState = RF_STATE_RX_DONE; + } + } + + // Packet timeout + if( ( PacketDetected == false ) && ( ( GET_TICK_COUNT( ) - RxTimeoutTimer ) > PacketTimeout ) ) + { + RFState = RF_STATE_RX_TIMEOUT; + } + break; + case RF_STATE_RX_DONE: + RxBytesRead = 0; + RFState = RF_STATE_RX_INIT; + result = RF_RX_DONE; + break; + case RF_STATE_RX_TIMEOUT: + RxBytesRead = 0; + RxPacketSize = 0; + SX1276Write( REG_RXCONFIG, SX1276->RegRxConfig | RF_RXCONFIG_RESTARTRXWITHPLLLOCK ); + RFState = RF_STATE_RX_INIT; + result = RF_RX_TIMEOUT; + break; + case RF_STATE_RX_LEN_ERROR: + RxBytesRead = 0; + RxPacketSize = 0; + SX1276Write( REG_RXCONFIG, SX1276->RegRxConfig | RF_RXCONFIG_RESTARTRXWITHPLLLOCK ); + RFState = RF_STATE_RX_INIT; + result = RF_LEN_ERROR; + break; + // Tx management + case RF_STATE_TX_INIT: + // Packet DIO mapping setup + // PacketSent, FifoLevel, FifoFull, TxReady + SX1276->RegDioMapping1 = RF_DIOMAPPING1_DIO0_00 | RF_DIOMAPPING1_DIO1_00 | RF_DIOMAPPING1_DIO2_00 | RF_DIOMAPPING1_DIO3_01; + // LowBat, Data + SX1276->RegDioMapping2 = RF_DIOMAPPING2_DIO4_00 | RF_DIOMAPPING2_DIO5_10; + SX1276WriteBuffer( REG_DIOMAPPING1, &SX1276->RegDioMapping1, 2 ); + + SX1276->RegFifoThresh = RF_FIFOTHRESH_TXSTARTCONDITION_FIFONOTEMPTY | 0x18; // 24 bytes of data + SX1276Write( REG_FIFOTHRESH, SX1276->RegFifoThresh ); + + SX1276FskSetOpMode( RF_OPMODE_TRANSMITTER ); + RFState = RF_STATE_TX_READY_WAIT; + TxBytesSent = 0; + break; + case RF_STATE_TX_READY_WAIT: + if( DIO3 == 1 ) // TxReady + { + if( ( SX1276->RegPacketConfig1 & RF_PACKETCONFIG1_PACKETFORMAT_VARIABLE ) == RF_PACKETCONFIG1_PACKETFORMAT_VARIABLE ) + { + SX1276WriteFifo( ( uint8_t* )&TxPacketSize, 1 ); + } + + if( ( TxPacketSize > 0 ) && ( TxPacketSize <= 64 ) ) + { + DataChunkSize = TxPacketSize; + } + else + { + DataChunkSize = 32; + } + + SX1276WriteFifo( RFBuffer, DataChunkSize ); + TxBytesSent += DataChunkSize; + TxTimeoutTimer = GET_TICK_COUNT( ); + RFState = RF_STATE_TX_RUNNING; + } + break; + + case RF_STATE_TX_RUNNING: + if( DIO1 == 0 ) // FifoLevel below thresold + { + if( ( TxPacketSize - TxBytesSent ) > DataChunkSize ) + { + SX1276WriteFifo( ( RFBuffer + TxBytesSent ), DataChunkSize ); + TxBytesSent += DataChunkSize; + } + else + { + // we write the last chunk of data + SX1276WriteFifo( RFBuffer + TxBytesSent, TxPacketSize - TxBytesSent ); + TxBytesSent += TxPacketSize - TxBytesSent; + } + } + + if( DIO0 == 1 ) // PacketSent + { + TxTimeoutTimer = GET_TICK_COUNT( ); + RFState = RF_STATE_TX_DONE; + SX1276FskSetOpMode( RF_OPMODE_STANDBY ); + } + + // Packet timeout + if( ( GET_TICK_COUNT( ) - TxTimeoutTimer ) > TICK_RATE_MS( 1000 ) ) + { + RFState = RF_STATE_TX_TIMEOUT; + } + break; + case RF_STATE_TX_DONE: + RFState = RF_STATE_IDLE; + result = RF_TX_DONE; + break; + case RF_STATE_TX_TIMEOUT: + RFState = RF_STATE_IDLE; + result = RF_TX_TIMEOUT; + break; + default: + break; + } + return result; +} + +#endif // USE_SX1276_RADIO diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-Fsk.h b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-Fsk.h new file mode 100644 index 000000000..a8a13c419 --- /dev/null +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-Fsk.h @@ -0,0 +1,1460 @@ +/* + * THE FOLLOWING FIRMWARE IS PROVIDED: (1) "AS IS" WITH NO WARRANTY; AND + * (2)TO ENABLE ACCESS TO CODING INFORMATION TO GUIDE AND FACILITATE CUSTOMER. + * CONSEQUENTLY, SEMTECH SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR + * CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT + * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION + * CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + * Copyright (C) SEMTECH S.A. + */ +/*! + * \file sx1276-Fsk.h + * \brief SX1276 RF chip driver mode FSK + * + * \version 2.0.B2 + * \date May 6 2013 + * \author Gregory Cristian + * + * Last modified by Miguel Luis on Jun 19 2013 + */ +#ifndef __SX1276_FSK_H__ +#define __SX1276_FSK_H__ + +/*! + * SX1276 FSK General parameters definition + */ + +typedef struct sFskSettings +{ + uint32_t RFFrequency; + uint32_t Bitrate; + uint32_t Fdev; + int8_t Power; + uint32_t RxBw; + uint32_t RxBwAfc; + bool CrcOn; + bool AfcOn; + uint8_t PayloadLength; +}tFskSettings; + +/*! + * RF packet definition + */ +#define RF_BUFFER_SIZE_MAX 256 +#define RF_BUFFER_SIZE 256 + +/*! + * RF state machine + */ +// FSK +typedef enum +{ + RF_STATE_IDLE, + RF_STATE_RX_INIT, + RF_STATE_RX_SYNC, + RF_STATE_RX_RUNNING, + RF_STATE_RX_DONE, + RF_STATE_RX_TIMEOUT, + RF_STATE_RX_LEN_ERROR, + RF_STATE_TX_INIT, + RF_STATE_TX_READY_WAIT, + RF_STATE_TX_RUNNING, + RF_STATE_TX_DONE, + RF_STATE_TX_TIMEOUT, +}tRFStates; + +/*! + * SX1276 definitions + */ +#define XTAL_FREQ 32000000 +#define FREQ_STEP 61.03515625 + +/*! + * SX1276 Internal registers Address + */ +#define REG_FIFO 0x00 +// Common settings +#define REG_OPMODE 0x01 +#define REG_BITRATEMSB 0x02 +#define REG_BITRATELSB 0x03 +#define REG_FDEVMSB 0x04 +#define REG_FDEVLSB 0x05 +#define REG_FRFMSB 0x06 +#define REG_FRFMID 0x07 +#define REG_FRFLSB 0x08 +// Tx settings +#define REG_PACONFIG 0x09 +#define REG_PARAMP 0x0A +#define REG_OCP 0x0B +// Rx settings +#define REG_LNA 0x0C +#define REG_RXCONFIG 0x0D +#define REG_RSSICONFIG 0x0E +#define REG_RSSICOLLISION 0x0F +#define REG_RSSITHRESH 0x10 +#define REG_RSSIVALUE 0x11 +#define REG_RXBW 0x12 +#define REG_AFCBW 0x13 +#define REG_OOKPEAK 0x14 +#define REG_OOKFIX 0x15 +#define REG_OOKAVG 0x16 +#define REG_RES17 0x17 +#define REG_RES18 0x18 +#define REG_RES19 0x19 +#define REG_AFCFEI 0x1A +#define REG_AFCMSB 0x1B +#define REG_AFCLSB 0x1C +#define REG_FEIMSB 0x1D +#define REG_FEILSB 0x1E +#define REG_PREAMBLEDETECT 0x1F +#define REG_RXTIMEOUT1 0x20 +#define REG_RXTIMEOUT2 0x21 +#define REG_RXTIMEOUT3 0x22 +#define REG_RXDELAY 0x23 +// Oscillator settings +#define REG_OSC 0x24 +// Packet handler settings +#define REG_PREAMBLEMSB 0x25 +#define REG_PREAMBLELSB 0x26 +#define REG_SYNCCONFIG 0x27 +#define REG_SYNCVALUE1 0x28 +#define REG_SYNCVALUE2 0x29 +#define REG_SYNCVALUE3 0x2A +#define REG_SYNCVALUE4 0x2B +#define REG_SYNCVALUE5 0x2C +#define REG_SYNCVALUE6 0x2D +#define REG_SYNCVALUE7 0x2E +#define REG_SYNCVALUE8 0x2F +#define REG_PACKETCONFIG1 0x30 +#define REG_PACKETCONFIG2 0x31 +#define REG_PAYLOADLENGTH 0x32 +#define REG_NODEADRS 0x33 +#define REG_BROADCASTADRS 0x34 +#define REG_FIFOTHRESH 0x35 +// SM settings +#define REG_SEQCONFIG1 0x36 +#define REG_SEQCONFIG2 0x37 +#define REG_TIMERRESOL 0x38 +#define REG_TIMER1COEF 0x39 +#define REG_TIMER2COEF 0x3A +// Service settings +#define REG_IMAGECAL 0x3B +#define REG_TEMP 0x3C +#define REG_LOWBAT 0x3D +// Status +#define REG_IRQFLAGS1 0x3E +#define REG_IRQFLAGS2 0x3F +// I/O settings +#define REG_DIOMAPPING1 0x40 +#define REG_DIOMAPPING2 0x41 +// Version +#define REG_VERSION 0x42 +// Additional settings +#define REG_PLLHOP 0x44 +#define REG_TCXO 0x4B +#define REG_PADAC 0x4D +#define REG_FORMERTEMP 0x5B +#define REG_BITRATEFRAC 0x5D +#define REG_AGCREF 0x61 +#define REG_AGCTHRESH1 0x62 +#define REG_AGCTHRESH2 0x63 +#define REG_AGCTHRESH3 0x64 + + +/*! + * SX1276 FSK bit control definition + */ + +/*! + * RegFifo + */ + +/*! + * RegOpMode + */ +#define RF_OPMODE_LONGRANGEMODE_MASK 0x7F +#define RF_OPMODE_LONGRANGEMODE_OFF 0x00 // Default +#define RF_OPMODE_LONGRANGEMODE_ON 0x80 + +#define RF_OPMODE_MODULATIONTYPE_MASK 0x9F +#define RF_OPMODE_MODULATIONTYPE_FSK 0x00 // Default +#define RF_OPMODE_MODULATIONTYPE_OOK 0x20 + +#define RF_OPMODE_FREQMODE_ACCESS_MASK 0xF7 +#define RF_OPMODE_FREQMODE_ACCESS_LF 0x08 // Default +#define RF_OPMODE_FREQMODE_ACCESS_HF 0x00 + +#define RF_OPMODE_MASK 0xF8 +#define RF_OPMODE_SLEEP 0x00 +#define RF_OPMODE_STANDBY 0x01 // Default +#define RF_OPMODE_SYNTHESIZER_TX 0x02 +#define RF_OPMODE_TRANSMITTER 0x03 +#define RF_OPMODE_SYNTHESIZER_RX 0x04 +#define RF_OPMODE_RECEIVER 0x05 + +/*! + * RegBitRate (bits/sec) + */ +#define RF_BITRATEMSB_1200_BPS 0x68 +#define RF_BITRATELSB_1200_BPS 0x2B +#define RF_BITRATEMSB_2400_BPS 0x34 +#define RF_BITRATELSB_2400_BPS 0x15 +#define RF_BITRATEMSB_4800_BPS 0x1A // Default +#define RF_BITRATELSB_4800_BPS 0x0B // Default +#define RF_BITRATEMSB_9600_BPS 0x0D +#define RF_BITRATELSB_9600_BPS 0x05 +#define RF_BITRATEMSB_15000_BPS 0x08 +#define RF_BITRATELSB_15000_BPS 0x55 +#define RF_BITRATEMSB_19200_BPS 0x06 +#define RF_BITRATELSB_19200_BPS 0x83 +#define RF_BITRATEMSB_38400_BPS 0x03 +#define RF_BITRATELSB_38400_BPS 0x41 +#define RF_BITRATEMSB_76800_BPS 0x01 +#define RF_BITRATELSB_76800_BPS 0xA1 +#define RF_BITRATEMSB_153600_BPS 0x00 +#define RF_BITRATELSB_153600_BPS 0xD0 +#define RF_BITRATEMSB_57600_BPS 0x02 +#define RF_BITRATELSB_57600_BPS 0x2C +#define RF_BITRATEMSB_115200_BPS 0x01 +#define RF_BITRATELSB_115200_BPS 0x16 +#define RF_BITRATEMSB_12500_BPS 0x0A +#define RF_BITRATELSB_12500_BPS 0x00 +#define RF_BITRATEMSB_25000_BPS 0x05 +#define RF_BITRATELSB_25000_BPS 0x00 +#define RF_BITRATEMSB_50000_BPS 0x02 +#define RF_BITRATELSB_50000_BPS 0x80 +#define RF_BITRATEMSB_100000_BPS 0x01 +#define RF_BITRATELSB_100000_BPS 0x40 +#define RF_BITRATEMSB_150000_BPS 0x00 +#define RF_BITRATELSB_150000_BPS 0xD5 +#define RF_BITRATEMSB_200000_BPS 0x00 +#define RF_BITRATELSB_200000_BPS 0xA0 +#define RF_BITRATEMSB_250000_BPS 0x00 +#define RF_BITRATELSB_250000_BPS 0x80 +#define RF_BITRATEMSB_32768_BPS 0x03 +#define RF_BITRATELSB_32768_BPS 0xD1 + +/*! + * RegFdev (Hz) + */ + +#define RF_FDEVMSB_BANDREG_MASK 0x3F +#define RF_FDEVMSB_BANDREG_AUTO 0x00 // Default +#define RF_FDEVMSB_BANDREG_DIV_BY_1 0x40 +#define RF_FDEVMSB_BANDREG_DIV_BY_2 0x80 +#define RF_FDEVMSB_BANDREG_DIV_BY_6 0xC0 + +#define RF_FDEVMSB_FDEV_MASK 0xC0 + +#define RF_FDEVMSB_2000_HZ 0x00 +#define RF_FDEVLSB_2000_HZ 0x21 +#define RF_FDEVMSB_5000_HZ 0x00 // Default +#define RF_FDEVLSB_5000_HZ 0x52 // Default +#define RF_FDEVMSB_10000_HZ 0x00 +#define RF_FDEVLSB_10000_HZ 0xA4 +#define RF_FDEVMSB_15000_HZ 0x00 +#define RF_FDEVLSB_15000_HZ 0xF6 +#define RF_FDEVMSB_20000_HZ 0x01 +#define RF_FDEVLSB_20000_HZ 0x48 +#define RF_FDEVMSB_25000_HZ 0x01 +#define RF_FDEVLSB_25000_HZ 0x9A +#define RF_FDEVMSB_30000_HZ 0x01 +#define RF_FDEVLSB_30000_HZ 0xEC +#define RF_FDEVMSB_35000_HZ 0x02 +#define RF_FDEVLSB_35000_HZ 0x3D +#define RF_FDEVMSB_40000_HZ 0x02 +#define RF_FDEVLSB_40000_HZ 0x8F +#define RF_FDEVMSB_45000_HZ 0x02 +#define RF_FDEVLSB_45000_HZ 0xE1 +#define RF_FDEVMSB_50000_HZ 0x03 +#define RF_FDEVLSB_50000_HZ 0x33 +#define RF_FDEVMSB_55000_HZ 0x03 +#define RF_FDEVLSB_55000_HZ 0x85 +#define RF_FDEVMSB_60000_HZ 0x03 +#define RF_FDEVLSB_60000_HZ 0xD7 +#define RF_FDEVMSB_65000_HZ 0x04 +#define RF_FDEVLSB_65000_HZ 0x29 +#define RF_FDEVMSB_70000_HZ 0x04 +#define RF_FDEVLSB_70000_HZ 0x7B +#define RF_FDEVMSB_75000_HZ 0x04 +#define RF_FDEVLSB_75000_HZ 0xCD +#define RF_FDEVMSB_80000_HZ 0x05 +#define RF_FDEVLSB_80000_HZ 0x1F +#define RF_FDEVMSB_85000_HZ 0x05 +#define RF_FDEVLSB_85000_HZ 0x71 +#define RF_FDEVMSB_90000_HZ 0x05 +#define RF_FDEVLSB_90000_HZ 0xC3 +#define RF_FDEVMSB_95000_HZ 0x06 +#define RF_FDEVLSB_95000_HZ 0x14 +#define RF_FDEVMSB_100000_HZ 0x06 +#define RF_FDEVLSB_100000_HZ 0x66 +#define RF_FDEVMSB_110000_HZ 0x07 +#define RF_FDEVLSB_110000_HZ 0x0A +#define RF_FDEVMSB_120000_HZ 0x07 +#define RF_FDEVLSB_120000_HZ 0xAE +#define RF_FDEVMSB_130000_HZ 0x08 +#define RF_FDEVLSB_130000_HZ 0x52 +#define RF_FDEVMSB_140000_HZ 0x08 +#define RF_FDEVLSB_140000_HZ 0xF6 +#define RF_FDEVMSB_150000_HZ 0x09 +#define RF_FDEVLSB_150000_HZ 0x9A +#define RF_FDEVMSB_160000_HZ 0x0A +#define RF_FDEVLSB_160000_HZ 0x3D +#define RF_FDEVMSB_170000_HZ 0x0A +#define RF_FDEVLSB_170000_HZ 0xE1 +#define RF_FDEVMSB_180000_HZ 0x0B +#define RF_FDEVLSB_180000_HZ 0x85 +#define RF_FDEVMSB_190000_HZ 0x0C +#define RF_FDEVLSB_190000_HZ 0x29 +#define RF_FDEVMSB_200000_HZ 0x0C +#define RF_FDEVLSB_200000_HZ 0xCD + +/*! + * RegFrf (MHz) + */ +#define RF_FRFMSB_863_MHZ 0xD7 +#define RF_FRFMID_863_MHZ 0xC0 +#define RF_FRFLSB_863_MHZ 0x00 +#define RF_FRFMSB_864_MHZ 0xD8 +#define RF_FRFMID_864_MHZ 0x00 +#define RF_FRFLSB_864_MHZ 0x00 +#define RF_FRFMSB_865_MHZ 0xD8 +#define RF_FRFMID_865_MHZ 0x40 +#define RF_FRFLSB_865_MHZ 0x00 +#define RF_FRFMSB_866_MHZ 0xD8 +#define RF_FRFMID_866_MHZ 0x80 +#define RF_FRFLSB_866_MHZ 0x00 +#define RF_FRFMSB_867_MHZ 0xD8 +#define RF_FRFMID_867_MHZ 0xC0 +#define RF_FRFLSB_867_MHZ 0x00 +#define RF_FRFMSB_868_MHZ 0xD9 +#define RF_FRFMID_868_MHZ 0x00 +#define RF_FRFLSB_868_MHZ 0x00 +#define RF_FRFMSB_869_MHZ 0xD9 +#define RF_FRFMID_869_MHZ 0x40 +#define RF_FRFLSB_869_MHZ 0x00 +#define RF_FRFMSB_870_MHZ 0xD9 +#define RF_FRFMID_870_MHZ 0x80 +#define RF_FRFLSB_870_MHZ 0x00 + +#define RF_FRFMSB_902_MHZ 0xE1 +#define RF_FRFMID_902_MHZ 0x80 +#define RF_FRFLSB_902_MHZ 0x00 +#define RF_FRFMSB_903_MHZ 0xE1 +#define RF_FRFMID_903_MHZ 0xC0 +#define RF_FRFLSB_903_MHZ 0x00 +#define RF_FRFMSB_904_MHZ 0xE2 +#define RF_FRFMID_904_MHZ 0x00 +#define RF_FRFLSB_904_MHZ 0x00 +#define RF_FRFMSB_905_MHZ 0xE2 +#define RF_FRFMID_905_MHZ 0x40 +#define RF_FRFLSB_905_MHZ 0x00 +#define RF_FRFMSB_906_MHZ 0xE2 +#define RF_FRFMID_906_MHZ 0x80 +#define RF_FRFLSB_906_MHZ 0x00 +#define RF_FRFMSB_907_MHZ 0xE2 +#define RF_FRFMID_907_MHZ 0xC0 +#define RF_FRFLSB_907_MHZ 0x00 +#define RF_FRFMSB_908_MHZ 0xE3 +#define RF_FRFMID_908_MHZ 0x00 +#define RF_FRFLSB_908_MHZ 0x00 +#define RF_FRFMSB_909_MHZ 0xE3 +#define RF_FRFMID_909_MHZ 0x40 +#define RF_FRFLSB_909_MHZ 0x00 +#define RF_FRFMSB_910_MHZ 0xE3 +#define RF_FRFMID_910_MHZ 0x80 +#define RF_FRFLSB_910_MHZ 0x00 +#define RF_FRFMSB_911_MHZ 0xE3 +#define RF_FRFMID_911_MHZ 0xC0 +#define RF_FRFLSB_911_MHZ 0x00 +#define RF_FRFMSB_912_MHZ 0xE4 +#define RF_FRFMID_912_MHZ 0x00 +#define RF_FRFLSB_912_MHZ 0x00 +#define RF_FRFMSB_913_MHZ 0xE4 +#define RF_FRFMID_913_MHZ 0x40 +#define RF_FRFLSB_913_MHZ 0x00 +#define RF_FRFMSB_914_MHZ 0xE4 +#define RF_FRFMID_914_MHZ 0x80 +#define RF_FRFLSB_914_MHZ 0x00 +#define RF_FRFMSB_915_MHZ 0xE4 // Default +#define RF_FRFMID_915_MHZ 0xC0 // Default +#define RF_FRFLSB_915_MHZ 0x00 // Default +#define RF_FRFMSB_916_MHZ 0xE5 +#define RF_FRFMID_916_MHZ 0x00 +#define RF_FRFLSB_916_MHZ 0x00 +#define RF_FRFMSB_917_MHZ 0xE5 +#define RF_FRFMID_917_MHZ 0x40 +#define RF_FRFLSB_917_MHZ 0x00 +#define RF_FRFMSB_918_MHZ 0xE5 +#define RF_FRFMID_918_MHZ 0x80 +#define RF_FRFLSB_918_MHZ 0x00 +#define RF_FRFMSB_919_MHZ 0xE5 +#define RF_FRFMID_919_MHZ 0xC0 +#define RF_FRFLSB_919_MHZ 0x00 +#define RF_FRFMSB_920_MHZ 0xE6 +#define RF_FRFMID_920_MHZ 0x00 +#define RF_FRFLSB_920_MHZ 0x00 +#define RF_FRFMSB_921_MHZ 0xE6 +#define RF_FRFMID_921_MHZ 0x40 +#define RF_FRFLSB_921_MHZ 0x00 +#define RF_FRFMSB_922_MHZ 0xE6 +#define RF_FRFMID_922_MHZ 0x80 +#define RF_FRFLSB_922_MHZ 0x00 +#define RF_FRFMSB_923_MHZ 0xE6 +#define RF_FRFMID_923_MHZ 0xC0 +#define RF_FRFLSB_923_MHZ 0x00 +#define RF_FRFMSB_924_MHZ 0xE7 +#define RF_FRFMID_924_MHZ 0x00 +#define RF_FRFLSB_924_MHZ 0x00 +#define RF_FRFMSB_925_MHZ 0xE7 +#define RF_FRFMID_925_MHZ 0x40 +#define RF_FRFLSB_925_MHZ 0x00 +#define RF_FRFMSB_926_MHZ 0xE7 +#define RF_FRFMID_926_MHZ 0x80 +#define RF_FRFLSB_926_MHZ 0x00 +#define RF_FRFMSB_927_MHZ 0xE7 +#define RF_FRFMID_927_MHZ 0xC0 +#define RF_FRFLSB_927_MHZ 0x00 +#define RF_FRFMSB_928_MHZ 0xE8 +#define RF_FRFMID_928_MHZ 0x00 +#define RF_FRFLSB_928_MHZ 0x00 + +/*! + * RegPaConfig + */ +#define RF_PACONFIG_PASELECT_MASK 0x7F +#define RF_PACONFIG_PASELECT_PABOOST 0x80 +#define RF_PACONFIG_PASELECT_RFO 0x00 // Default + +#define RF_PACONFIG_MAX_POWER_MASK 0x8F + +#define RF_PACONFIG_OUTPUTPOWER_MASK 0xF0 + +/*! + * RegPaRamp + */ +#define RF_PARAMP_MODULATIONSHAPING_MASK 0x9F +#define RF_PARAMP_MODULATIONSHAPING_00 0x00 // Default +#define RF_PARAMP_MODULATIONSHAPING_01 0x20 +#define RF_PARAMP_MODULATIONSHAPING_10 0x40 +#define RF_PARAMP_MODULATIONSHAPING_11 0x60 + +#define RF_PARAMP_TXBANDFORCE_MASK 0xEF +#define RF_PARAMP_TXBANDFORCE_BAND_SEL 0x10 +#define RF_PARAMP_TXBANDFORCE_AUTO 0x00 // Default + +#define RF_PARAMP_MASK 0xF0 +#define RF_PARAMP_3400_US 0x00 +#define RF_PARAMP_2000_US 0x01 +#define RF_PARAMP_1000_US 0x02 +#define RF_PARAMP_0500_US 0x03 +#define RF_PARAMP_0250_US 0x04 +#define RF_PARAMP_0125_US 0x05 +#define RF_PARAMP_0100_US 0x06 +#define RF_PARAMP_0062_US 0x07 +#define RF_PARAMP_0050_US 0x08 +#define RF_PARAMP_0040_US 0x09 // Default +#define RF_PARAMP_0031_US 0x0A +#define RF_PARAMP_0025_US 0x0B +#define RF_PARAMP_0020_US 0x0C +#define RF_PARAMP_0015_US 0x0D +#define RF_PARAMP_0012_US 0x0E +#define RF_PARAMP_0010_US 0x0F + +/*! + * RegOcp + */ +#define RF_OCP_MASK 0xDF +#define RF_OCP_ON 0x20 // Default +#define RF_OCP_OFF 0x00 + +#define RF_OCP_TRIM_MASK 0xE0 +#define RF_OCP_TRIM_045_MA 0x00 +#define RF_OCP_TRIM_050_MA 0x01 +#define RF_OCP_TRIM_055_MA 0x02 +#define RF_OCP_TRIM_060_MA 0x03 +#define RF_OCP_TRIM_065_MA 0x04 +#define RF_OCP_TRIM_070_MA 0x05 +#define RF_OCP_TRIM_075_MA 0x06 +#define RF_OCP_TRIM_080_MA 0x07 +#define RF_OCP_TRIM_085_MA 0x08 +#define RF_OCP_TRIM_090_MA 0x09 +#define RF_OCP_TRIM_095_MA 0x0A +#define RF_OCP_TRIM_100_MA 0x0B // Default +#define RF_OCP_TRIM_105_MA 0x0C +#define RF_OCP_TRIM_110_MA 0x0D +#define RF_OCP_TRIM_115_MA 0x0E +#define RF_OCP_TRIM_120_MA 0x0F +#define RF_OCP_TRIM_130_MA 0x10 +#define RF_OCP_TRIM_140_MA 0x11 +#define RF_OCP_TRIM_150_MA 0x12 +#define RF_OCP_TRIM_160_MA 0x13 +#define RF_OCP_TRIM_170_MA 0x14 +#define RF_OCP_TRIM_180_MA 0x15 +#define RF_OCP_TRIM_190_MA 0x16 +#define RF_OCP_TRIM_200_MA 0x17 +#define RF_OCP_TRIM_210_MA 0x18 +#define RF_OCP_TRIM_220_MA 0x19 +#define RF_OCP_TRIM_230_MA 0x1A +#define RF_OCP_TRIM_240_MA 0x1B + +/*! + * RegLna + */ +#define RF_LNA_GAIN_MASK 0x1F +#define RF_LNA_GAIN_G1 0x20 // Default +#define RF_LNA_GAIN_G2 0x40 +#define RF_LNA_GAIN_G3 0x60 +#define RF_LNA_GAIN_G4 0x80 +#define RF_LNA_GAIN_G5 0xA0 +#define RF_LNA_GAIN_G6 0xC0 + +#define RF_LNA_BOOST_LF_MASK 0xE7 +#define RF_LNA_BOOST_LF_DEFAULT 0x00 // Default +#define RF_LNA_BOOST_LF_GAIN 0x08 +#define RF_LNA_BOOST_LF_IP3 0x10 +#define RF_LNA_BOOST_LF_BOOST 0x18 + +#define RF_LNA_RXBANDFORCE_MASK 0xFB +#define RF_LNA_RXBANDFORCE_BAND_SEL 0x04 +#define RF_LNA_RXBANDFORCE_AUTO 0x00 // Default + +#define RF_LNA_BOOST_HF_MASK 0xFC +#define RF_LNA_BOOST_HF_OFF 0x00 // Default +#define RF_LNA_BOOST_HF_ON 0x03 + +/*! + * RegRxConfig + */ +#define RF_RXCONFIG_RESTARTRXONCOLLISION_MASK 0x7F +#define RF_RXCONFIG_RESTARTRXONCOLLISION_ON 0x80 +#define RF_RXCONFIG_RESTARTRXONCOLLISION_OFF 0x00 // Default + +#define RF_RXCONFIG_RESTARTRXWITHOUTPLLLOCK 0x40 // Write only + +#define RF_RXCONFIG_RESTARTRXWITHPLLLOCK 0x20 // Write only + +#define RF_RXCONFIG_AFCAUTO_MASK 0xEF +#define RF_RXCONFIG_AFCAUTO_ON 0x10 +#define RF_RXCONFIG_AFCAUTO_OFF 0x00 // Default + +#define RF_RXCONFIG_AGCAUTO_MASK 0xF7 +#define RF_RXCONFIG_AGCAUTO_ON 0x08 // Default +#define RF_RXCONFIG_AGCAUTO_OFF 0x00 + +#define RF_RXCONFIG_RXTRIGER_MASK 0xF8 +#define RF_RXCONFIG_RXTRIGER_OFF 0x00 +#define RF_RXCONFIG_RXTRIGER_RSSI 0x01 +#define RF_RXCONFIG_RXTRIGER_PREAMBLEDETECT 0x06 // Default +#define RF_RXCONFIG_RXTRIGER_RSSI_PREAMBLEDETECT 0x07 + +/*! + * RegRssiConfig + */ +#define RF_RSSICONFIG_OFFSET_MASK 0x07 +#define RF_RSSICONFIG_OFFSET_P_00_DB 0x00 // Default +#define RF_RSSICONFIG_OFFSET_P_01_DB 0x08 +#define RF_RSSICONFIG_OFFSET_P_02_DB 0x10 +#define RF_RSSICONFIG_OFFSET_P_03_DB 0x18 +#define RF_RSSICONFIG_OFFSET_P_04_DB 0x20 +#define RF_RSSICONFIG_OFFSET_P_05_DB 0x28 +#define RF_RSSICONFIG_OFFSET_P_06_DB 0x30 +#define RF_RSSICONFIG_OFFSET_P_07_DB 0x38 +#define RF_RSSICONFIG_OFFSET_P_08_DB 0x40 +#define RF_RSSICONFIG_OFFSET_P_09_DB 0x48 +#define RF_RSSICONFIG_OFFSET_P_10_DB 0x50 +#define RF_RSSICONFIG_OFFSET_P_11_DB 0x58 +#define RF_RSSICONFIG_OFFSET_P_12_DB 0x60 +#define RF_RSSICONFIG_OFFSET_P_13_DB 0x68 +#define RF_RSSICONFIG_OFFSET_P_14_DB 0x70 +#define RF_RSSICONFIG_OFFSET_P_15_DB 0x78 +#define RF_RSSICONFIG_OFFSET_M_16_DB 0x80 +#define RF_RSSICONFIG_OFFSET_M_15_DB 0x88 +#define RF_RSSICONFIG_OFFSET_M_14_DB 0x90 +#define RF_RSSICONFIG_OFFSET_M_13_DB 0x98 +#define RF_RSSICONFIG_OFFSET_M_12_DB 0xA0 +#define RF_RSSICONFIG_OFFSET_M_11_DB 0xA8 +#define RF_RSSICONFIG_OFFSET_M_10_DB 0xB0 +#define RF_RSSICONFIG_OFFSET_M_09_DB 0xB8 +#define RF_RSSICONFIG_OFFSET_M_08_DB 0xC0 +#define RF_RSSICONFIG_OFFSET_M_07_DB 0xC8 +#define RF_RSSICONFIG_OFFSET_M_06_DB 0xD0 +#define RF_RSSICONFIG_OFFSET_M_05_DB 0xD8 +#define RF_RSSICONFIG_OFFSET_M_04_DB 0xE0 +#define RF_RSSICONFIG_OFFSET_M_03_DB 0xE8 +#define RF_RSSICONFIG_OFFSET_M_02_DB 0xF0 +#define RF_RSSICONFIG_OFFSET_M_01_DB 0xF8 + +#define RF_RSSICONFIG_SMOOTHING_MASK 0xF8 +#define RF_RSSICONFIG_SMOOTHING_2 0x00 +#define RF_RSSICONFIG_SMOOTHING_4 0x01 +#define RF_RSSICONFIG_SMOOTHING_8 0x02 // Default +#define RF_RSSICONFIG_SMOOTHING_16 0x03 +#define RF_RSSICONFIG_SMOOTHING_32 0x04 +#define RF_RSSICONFIG_SMOOTHING_64 0x05 +#define RF_RSSICONFIG_SMOOTHING_128 0x06 +#define RF_RSSICONFIG_SMOOTHING_256 0x07 + +/*! + * RegRssiCollision + */ +#define RF_RSSICOLISION_THRESHOLD 0x0A // Default + +/*! + * RegRssiThresh + */ +#define RF_RSSITHRESH_THRESHOLD 0xFF // Default + +/*! + * RegRssiValue (Read Only) + */ + +/*! + * RegRxBw + */ +#define RF_RXBW_MANT_MASK 0xE7 +#define RF_RXBW_MANT_16 0x00 +#define RF_RXBW_MANT_20 0x08 +#define RF_RXBW_MANT_24 0x10 // Default + +#define RF_RXBW_EXP_MASK 0xF8 +#define RF_RXBW_EXP_0 0x00 +#define RF_RXBW_EXP_1 0x01 +#define RF_RXBW_EXP_2 0x02 +#define RF_RXBW_EXP_3 0x03 +#define RF_RXBW_EXP_4 0x04 +#define RF_RXBW_EXP_5 0x05 // Default +#define RF_RXBW_EXP_6 0x06 +#define RF_RXBW_EXP_7 0x07 + +/*! + * RegAfcBw + */ +#define RF_AFCBW_MANTAFC_MASK 0xE7 +#define RF_AFCBW_MANTAFC_16 0x00 +#define RF_AFCBW_MANTAFC_20 0x08 // Default +#define RF_AFCBW_MANTAFC_24 0x10 + +#define RF_AFCBW_EXPAFC_MASK 0xF8 +#define RF_AFCBW_EXPAFC_0 0x00 +#define RF_AFCBW_EXPAFC_1 0x01 +#define RF_AFCBW_EXPAFC_2 0x02 +#define RF_AFCBW_EXPAFC_3 0x03 // Default +#define RF_AFCBW_EXPAFC_4 0x04 +#define RF_AFCBW_EXPAFC_5 0x05 +#define RF_AFCBW_EXPAFC_6 0x06 +#define RF_AFCBW_EXPAFC_7 0x07 + +/*! + * RegOokPeak + */ +#define RF_OOKPEAK_BITSYNC_MASK 0xDF // Default +#define RF_OOKPEAK_BITSYNC_ON 0x20 // Default +#define RF_OOKPEAK_BITSYNC_OFF 0x00 + +#define RF_OOKPEAK_OOKTHRESHTYPE_MASK 0xE7 +#define RF_OOKPEAK_OOKTHRESHTYPE_FIXED 0x00 +#define RF_OOKPEAK_OOKTHRESHTYPE_PEAK 0x08 // Default +#define RF_OOKPEAK_OOKTHRESHTYPE_AVERAGE 0x10 + +#define RF_OOKPEAK_OOKPEAKTHRESHSTEP_MASK 0xF8 +#define RF_OOKPEAK_OOKPEAKTHRESHSTEP_0_5_DB 0x00 // Default +#define RF_OOKPEAK_OOKPEAKTHRESHSTEP_1_0_DB 0x01 +#define RF_OOKPEAK_OOKPEAKTHRESHSTEP_1_5_DB 0x02 +#define RF_OOKPEAK_OOKPEAKTHRESHSTEP_2_0_DB 0x03 +#define RF_OOKPEAK_OOKPEAKTHRESHSTEP_3_0_DB 0x04 +#define RF_OOKPEAK_OOKPEAKTHRESHSTEP_4_0_DB 0x05 +#define RF_OOKPEAK_OOKPEAKTHRESHSTEP_5_0_DB 0x06 +#define RF_OOKPEAK_OOKPEAKTHRESHSTEP_6_0_DB 0x07 + +/*! + * RegOokFix + */ +#define RF_OOKFIX_OOKFIXEDTHRESHOLD 0x0C // Default + +/*! + * RegOokAvg + */ +#define RF_OOKAVG_OOKPEAKTHRESHDEC_MASK 0x1F +#define RF_OOKAVG_OOKPEAKTHRESHDEC_000 0x00 // Default +#define RF_OOKAVG_OOKPEAKTHRESHDEC_001 0x20 +#define RF_OOKAVG_OOKPEAKTHRESHDEC_010 0x40 +#define RF_OOKAVG_OOKPEAKTHRESHDEC_011 0x60 +#define RF_OOKAVG_OOKPEAKTHRESHDEC_100 0x80 +#define RF_OOKAVG_OOKPEAKTHRESHDEC_101 0xA0 +#define RF_OOKAVG_OOKPEAKTHRESHDEC_110 0xC0 +#define RF_OOKAVG_OOKPEAKTHRESHDEC_111 0xE0 + +#define RF_OOKAVG_AVERAGEOFFSET_MASK 0xF3 +#define RF_OOKAVG_AVERAGEOFFSET_0_DB 0x00 // Default +#define RF_OOKAVG_AVERAGEOFFSET_2_DB 0x04 +#define RF_OOKAVG_AVERAGEOFFSET_4_DB 0x08 +#define RF_OOKAVG_AVERAGEOFFSET_6_DB 0x0C + +#define RF_OOKAVG_OOKAVERAGETHRESHFILT_MASK 0xFC +#define RF_OOKAVG_OOKAVERAGETHRESHFILT_00 0x00 +#define RF_OOKAVG_OOKAVERAGETHRESHFILT_01 0x01 +#define RF_OOKAVG_OOKAVERAGETHRESHFILT_10 0x02 // Default +#define RF_OOKAVG_OOKAVERAGETHRESHFILT_11 0x03 + +/*! + * RegAfcFei + */ +#define RF_AFCFEI_AGCSTART 0x10 + +#define RF_AFCFEI_AFCCLEAR 0x02 + +#define RF_AFCFEI_AFCAUTOCLEAR_MASK 0xFE +#define RF_AFCFEI_AFCAUTOCLEAR_ON 0x01 +#define RF_AFCFEI_AFCAUTOCLEAR_OFF 0x00 // Default + +/*! + * RegAfcMsb (Read Only) + */ + +/*! + * RegAfcLsb (Read Only) + */ + +/*! + * RegFeiMsb (Read Only) + */ + +/*! + * RegFeiLsb (Read Only) + */ + +/*! + * RegPreambleDetect + */ +#define RF_PREAMBLEDETECT_DETECTOR_MASK 0x7F +#define RF_PREAMBLEDETECT_DETECTOR_ON 0x80 // Default +#define RF_PREAMBLEDETECT_DETECTOR_OFF 0x00 + +#define RF_PREAMBLEDETECT_DETECTORSIZE_MASK 0x9F +#define RF_PREAMBLEDETECT_DETECTORSIZE_1 0x00 +#define RF_PREAMBLEDETECT_DETECTORSIZE_2 0x20 // Default +#define RF_PREAMBLEDETECT_DETECTORSIZE_3 0x40 +#define RF_PREAMBLEDETECT_DETECTORSIZE_4 0x60 + +#define RF_PREAMBLEDETECT_DETECTORTOL_MASK 0xE0 +#define RF_PREAMBLEDETECT_DETECTORTOL_0 0x00 +#define RF_PREAMBLEDETECT_DETECTORTOL_1 0x01 +#define RF_PREAMBLEDETECT_DETECTORTOL_2 0x02 +#define RF_PREAMBLEDETECT_DETECTORTOL_3 0x03 +#define RF_PREAMBLEDETECT_DETECTORTOL_4 0x04 +#define RF_PREAMBLEDETECT_DETECTORTOL_5 0x05 +#define RF_PREAMBLEDETECT_DETECTORTOL_6 0x06 +#define RF_PREAMBLEDETECT_DETECTORTOL_7 0x07 +#define RF_PREAMBLEDETECT_DETECTORTOL_8 0x08 +#define RF_PREAMBLEDETECT_DETECTORTOL_9 0x09 +#define RF_PREAMBLEDETECT_DETECTORTOL_10 0x0A // Default +#define RF_PREAMBLEDETECT_DETECTORTOL_11 0x0B +#define RF_PREAMBLEDETECT_DETECTORTOL_12 0x0C +#define RF_PREAMBLEDETECT_DETECTORTOL_13 0x0D +#define RF_PREAMBLEDETECT_DETECTORTOL_14 0x0E +#define RF_PREAMBLEDETECT_DETECTORTOL_15 0x0F +#define RF_PREAMBLEDETECT_DETECTORTOL_16 0x10 +#define RF_PREAMBLEDETECT_DETECTORTOL_17 0x11 +#define RF_PREAMBLEDETECT_DETECTORTOL_18 0x12 +#define RF_PREAMBLEDETECT_DETECTORTOL_19 0x13 +#define RF_PREAMBLEDETECT_DETECTORTOL_20 0x14 +#define RF_PREAMBLEDETECT_DETECTORTOL_21 0x15 +#define RF_PREAMBLEDETECT_DETECTORTOL_22 0x16 +#define RF_PREAMBLEDETECT_DETECTORTOL_23 0x17 +#define RF_PREAMBLEDETECT_DETECTORTOL_24 0x18 +#define RF_PREAMBLEDETECT_DETECTORTOL_25 0x19 +#define RF_PREAMBLEDETECT_DETECTORTOL_26 0x1A +#define RF_PREAMBLEDETECT_DETECTORTOL_27 0x1B +#define RF_PREAMBLEDETECT_DETECTORTOL_28 0x1C +#define RF_PREAMBLEDETECT_DETECTORTOL_29 0x1D +#define RF_PREAMBLEDETECT_DETECTORTOL_30 0x1E +#define RF_PREAMBLEDETECT_DETECTORTOL_31 0x1F + +/*! + * RegRxTimeout1 + */ +#define RF_RXTIMEOUT1_TIMEOUTRXRSSI 0x00 // Default + +/*! + * RegRxTimeout2 + */ +#define RF_RXTIMEOUT2_TIMEOUTRXPREAMBLE 0x00 // Default + +/*! + * RegRxTimeout3 + */ +#define RF_RXTIMEOUT3_TIMEOUTSIGNALSYNC 0x00 // Default + +/*! + * RegRxDelay + */ +#define RF_RXDELAY_INTERPACKETRXDELAY 0x00 // Default + +/*! + * RegOsc + */ +#define RF_OSC_RCCALSTART 0x08 + +#define RF_OSC_CLKOUT_MASK 0xF8 +#define RF_OSC_CLKOUT_32_MHZ 0x00 +#define RF_OSC_CLKOUT_16_MHZ 0x01 +#define RF_OSC_CLKOUT_8_MHZ 0x02 +#define RF_OSC_CLKOUT_4_MHZ 0x03 +#define RF_OSC_CLKOUT_2_MHZ 0x04 +#define RF_OSC_CLKOUT_1_MHZ 0x05 // Default +#define RF_OSC_CLKOUT_RC 0x06 +#define RF_OSC_CLKOUT_OFF 0x07 + +/*! + * RegPreambleMsb/RegPreambleLsb + */ +#define RF_PREAMBLEMSB_SIZE 0x00 // Default +#define RF_PREAMBLELSB_SIZE 0x03 // Default + +/*! + * RegSyncConfig + */ +#define RF_SYNCCONFIG_AUTORESTARTRXMODE_MASK 0x3F +#define RF_SYNCCONFIG_AUTORESTARTRXMODE_WAITPLL_ON 0x80 // Default +#define RF_SYNCCONFIG_AUTORESTARTRXMODE_WAITPLL_OFF 0x40 +#define RF_SYNCCONFIG_AUTORESTARTRXMODE_OFF 0x00 + + +#define RF_SYNCCONFIG_PREAMBLEPOLARITY_MASK 0xDF +#define RF_SYNCCONFIG_PREAMBLEPOLARITY_55 0x20 +#define RF_SYNCCONFIG_PREAMBLEPOLARITY_AA 0x00 // Default + +#define RF_SYNCCONFIG_SYNC_MASK 0xEF +#define RF_SYNCCONFIG_SYNC_ON 0x10 // Default +#define RF_SYNCCONFIG_SYNC_OFF 0x00 + + +#define RF_SYNCCONFIG_SYNCSIZE_MASK 0xF8 +#define RF_SYNCCONFIG_SYNCSIZE_1 0x00 +#define RF_SYNCCONFIG_SYNCSIZE_2 0x01 +#define RF_SYNCCONFIG_SYNCSIZE_3 0x02 +#define RF_SYNCCONFIG_SYNCSIZE_4 0x03 // Default +#define RF_SYNCCONFIG_SYNCSIZE_5 0x04 +#define RF_SYNCCONFIG_SYNCSIZE_6 0x05 +#define RF_SYNCCONFIG_SYNCSIZE_7 0x06 +#define RF_SYNCCONFIG_SYNCSIZE_8 0x07 + +/*! + * RegSyncValue1-8 + */ +#define RF_SYNCVALUE1_SYNCVALUE 0x01 // Default +#define RF_SYNCVALUE2_SYNCVALUE 0x01 // Default +#define RF_SYNCVALUE3_SYNCVALUE 0x01 // Default +#define RF_SYNCVALUE4_SYNCVALUE 0x01 // Default +#define RF_SYNCVALUE5_SYNCVALUE 0x01 // Default +#define RF_SYNCVALUE6_SYNCVALUE 0x01 // Default +#define RF_SYNCVALUE7_SYNCVALUE 0x01 // Default +#define RF_SYNCVALUE8_SYNCVALUE 0x01 // Default + +/*! + * RegPacketConfig1 + */ +#define RF_PACKETCONFIG1_PACKETFORMAT_MASK 0x7F +#define RF_PACKETCONFIG1_PACKETFORMAT_FIXED 0x00 +#define RF_PACKETCONFIG1_PACKETFORMAT_VARIABLE 0x80 // Default + +#define RF_PACKETCONFIG1_DCFREE_MASK 0x9F +#define RF_PACKETCONFIG1_DCFREE_OFF 0x00 // Default +#define RF_PACKETCONFIG1_DCFREE_MANCHESTER 0x20 +#define RF_PACKETCONFIG1_DCFREE_WHITENING 0x40 + +#define RF_PACKETCONFIG1_CRC_MASK 0xEF +#define RF_PACKETCONFIG1_CRC_ON 0x10 // Default +#define RF_PACKETCONFIG1_CRC_OFF 0x00 + +#define RF_PACKETCONFIG1_CRCAUTOCLEAR_MASK 0xF7 +#define RF_PACKETCONFIG1_CRCAUTOCLEAR_ON 0x00 // Default +#define RF_PACKETCONFIG1_CRCAUTOCLEAR_OFF 0x08 + +#define RF_PACKETCONFIG1_ADDRSFILTERING_MASK 0xF9 +#define RF_PACKETCONFIG1_ADDRSFILTERING_OFF 0x00 // Default +#define RF_PACKETCONFIG1_ADDRSFILTERING_NODE 0x02 +#define RF_PACKETCONFIG1_ADDRSFILTERING_NODEBROADCAST 0x04 + +#define RF_PACKETCONFIG1_CRCWHITENINGTYPE_MASK 0xFE +#define RF_PACKETCONFIG1_CRCWHITENINGTYPE_CCITT 0x00 // Default +#define RF_PACKETCONFIG1_CRCWHITENINGTYPE_IBM 0x01 + +/*! + * RegPacketConfig2 + */ + +#define RF_PACKETCONFIG2_WMBUS_CRC_ENABLE_MASK 0x7F +#define RF_PACKETCONFIG2_WMBUS_CRC_ENABLE 0x80 +#define RF_PACKETCONFIG2_WMBUS_CRC_DISABLE 0x00 // Default + +#define RF_PACKETCONFIG2_DATAMODE_MASK 0xBF +#define RF_PACKETCONFIG2_DATAMODE_CONTINUOUS 0x00 +#define RF_PACKETCONFIG2_DATAMODE_PACKET 0x40 // Default + +#define RF_PACKETCONFIG2_IOHOME_MASK 0xDF +#define RF_PACKETCONFIG2_IOHOME_ON 0x20 +#define RF_PACKETCONFIG2_IOHOME_OFF 0x00 // Default + +#define RF_PACKETCONFIG2_BEACON_MASK 0xF7 +#define RF_PACKETCONFIG2_BEACON_ON 0x08 +#define RF_PACKETCONFIG2_BEACON_OFF 0x00 // Default + +#define RF_PACKETCONFIG2_PAYLOADLENGTH_MSB_MASK 0xF8 + +/*! + * RegPayloadLength + */ +#define RF_PAYLOADLENGTH_LENGTH 0x40 // Default + +/*! + * RegNodeAdrs + */ +#define RF_NODEADDRESS_ADDRESS 0x00 + +/*! + * RegBroadcastAdrs + */ +#define RF_BROADCASTADDRESS_ADDRESS 0x00 + +/*! + * RegFifoThresh + */ +#define RF_FIFOTHRESH_TXSTARTCONDITION_MASK 0x7F +#define RF_FIFOTHRESH_TXSTARTCONDITION_FIFOTHRESH 0x00 // Default +#define RF_FIFOTHRESH_TXSTARTCONDITION_FIFONOTEMPTY 0x80 + +#define RF_FIFOTHRESH_FIFOTHRESHOLD_MASK 0xC0 +#define RF_FIFOTHRESH_FIFOTHRESHOLD_THRESHOLD 0x0F // Default + +/*! + * RegSeqConfig1 + */ +#define RF_SEQCONFIG1_SEQUENCER_START 0x80 + +#define RF_SEQCONFIG1_SEQUENCER_STOP 0x40 + +#define RF_SEQCONFIG1_IDLEMODE_MASK 0xDF +#define RF_SEQCONFIG1_IDLEMODE_SLEEP 0x20 +#define RF_SEQCONFIG1_IDLEMODE_STANDBY 0x00 // Default + +#define RF_SEQCONFIG1_FROMSTART_MASK 0xE7 +#define RF_SEQCONFIG1_FROMSTART_TOLPS 0x00 // Default +#define RF_SEQCONFIG1_FROMSTART_TORX 0x08 +#define RF_SEQCONFIG1_FROMSTART_TOTX 0x10 +#define RF_SEQCONFIG1_FROMSTART_TOTX_ONFIFOLEVEL 0x18 + +#define RF_SEQCONFIG1_LPS_MASK 0xFB +#define RF_SEQCONFIG1_LPS_SEQUENCER_OFF 0x00 // Default +#define RF_SEQCONFIG1_LPS_IDLE 0x04 + +#define RF_SEQCONFIG1_FROMIDLE_MASK 0xFD +#define RF_SEQCONFIG1_FROMIDLE_TOTX 0x00 // Default +#define RF_SEQCONFIG1_FROMIDLE_TORX 0x02 + +#define RF_SEQCONFIG1_FROMTX_MASK 0xFE +#define RF_SEQCONFIG1_FROMTX_TOLPS 0x00 // Default +#define RF_SEQCONFIG1_FROMTX_TORX 0x01 + +/*! + * RegSeqConfig2 + */ +#define RF_SEQCONFIG2_FROMRX_MASK 0x1F +#define RF_SEQCONFIG2_FROMRX_TOUNUSED_000 0x00 // Default +#define RF_SEQCONFIG2_FROMRX_TORXPKT_ONPLDRDY 0x20 +#define RF_SEQCONFIG2_FROMRX_TOLPS_ONPLDRDY 0x40 +#define RF_SEQCONFIG2_FROMRX_TORXPKT_ONCRCOK 0x60 +#define RF_SEQCONFIG2_FROMRX_TOSEQUENCEROFF_ONRSSI 0x80 +#define RF_SEQCONFIG2_FROMRX_TOSEQUENCEROFF_ONSYNC 0xA0 +#define RF_SEQCONFIG2_FROMRX_TOSEQUENCEROFF_ONPREAMBLE 0xC0 +#define RF_SEQCONFIG2_FROMRX_TOUNUSED_111 0xE0 + +#define RF_SEQCONFIG2_FROMRXTIMEOUT_MASK 0xE7 +#define RF_SEQCONFIG2_FROMRXTIMEOUT_TORXRESTART 0x00 // Default +#define RF_SEQCONFIG2_FROMRXTIMEOUT_TOTX 0x08 +#define RF_SEQCONFIG2_FROMRXTIMEOUT_TOLPS 0x10 +#define RF_SEQCONFIG2_FROMRXTIMEOUT_TOSEQUENCEROFF 0x18 + +#define RF_SEQCONFIG2_FROMRXPKT_MASK 0xF8 +#define RF_SEQCONFIG2_FROMRXPKT_TOSEQUENCEROFF 0x00 // Default +#define RF_SEQCONFIG2_FROMRXPKT_TOTX_ONFIFOEMPTY 0x01 +#define RF_SEQCONFIG2_FROMRXPKT_TOLPS 0x02 +#define RF_SEQCONFIG2_FROMRXPKT_TOSYNTHESIZERRX 0x03 +#define RF_SEQCONFIG2_FROMRXPKT_TORX 0x04 + +/*! + * RegTimerResol + */ +#define RF_TIMERRESOL_TIMER1RESOL_MASK 0xF3 +#define RF_TIMERRESOL_TIMER1RESOL_OFF 0x00 // Default +#define RF_TIMERRESOL_TIMER1RESOL_000064_US 0x04 +#define RF_TIMERRESOL_TIMER1RESOL_004100_US 0x08 +#define RF_TIMERRESOL_TIMER1RESOL_262000_US 0x0C + +#define RF_TIMERRESOL_TIMER2RESOL_MASK 0xFC +#define RF_TIMERRESOL_TIMER2RESOL_OFF 0x00 // Default +#define RF_TIMERRESOL_TIMER2RESOL_000064_US 0x01 +#define RF_TIMERRESOL_TIMER2RESOL_004100_US 0x02 +#define RF_TIMERRESOL_TIMER2RESOL_262000_US 0x03 + +/*! + * RegTimer1Coef + */ +#define RF_TIMER1COEF_TIMER1COEFFICIENT 0xF5 // Default + +/*! + * RegTimer2Coef + */ +#define RF_TIMER2COEF_TIMER2COEFFICIENT 0x20 // Default + +/*! + * RegImageCal + */ +#define RF_IMAGECAL_AUTOIMAGECAL_MASK 0x7F +#define RF_IMAGECAL_AUTOIMAGECAL_ON 0x80 +#define RF_IMAGECAL_AUTOIMAGECAL_OFF 0x00 // Default + +#define RF_IMAGECAL_IMAGECAL_MASK 0xBF +#define RF_IMAGECAL_IMAGECAL_START 0x40 + +#define RF_IMAGECAL_IMAGECAL_RUNNING 0x20 +#define RF_IMAGECAL_IMAGECAL_DONE 0x00 // Default + +#define RF_IMAGECAL_TEMPCHANGE_HIGHER 0x08 +#define RF_IMAGECAL_TEMPCHANGE_LOWER 0x00 + +#define RF_IMAGECAL_TEMPTHRESHOLD_MASK 0xF9 +#define RF_IMAGECAL_TEMPTHRESHOLD_05 0x00 +#define RF_IMAGECAL_TEMPTHRESHOLD_10 0x02 // Default +#define RF_IMAGECAL_TEMPTHRESHOLD_15 0x04 +#define RF_IMAGECAL_TEMPTHRESHOLD_20 0x06 + +#define RF_IMAGECAL_TEMPMONITOR_MASK 0xFE +#define RF_IMAGECAL_TEMPMONITOR_ON 0x00 // Default +#define RF_IMAGECAL_TEMPMONITOR_OFF 0x01 + +/*! + * RegTemp (Read Only) + */ + +/*! + * RegLowBat + */ +#define RF_LOWBAT_MASK 0xF7 +#define RF_LOWBAT_ON 0x08 +#define RF_LOWBAT_OFF 0x00 // Default + +#define RF_LOWBAT_TRIM_MASK 0xF8 +#define RF_LOWBAT_TRIM_1695 0x00 +#define RF_LOWBAT_TRIM_1764 0x01 +#define RF_LOWBAT_TRIM_1835 0x02 // Default +#define RF_LOWBAT_TRIM_1905 0x03 +#define RF_LOWBAT_TRIM_1976 0x04 +#define RF_LOWBAT_TRIM_2045 0x05 +#define RF_LOWBAT_TRIM_2116 0x06 +#define RF_LOWBAT_TRIM_2185 0x07 + +/*! + * RegIrqFlags1 + */ +#define RF_IRQFLAGS1_MODEREADY 0x80 + +#define RF_IRQFLAGS1_RXREADY 0x40 + +#define RF_IRQFLAGS1_TXREADY 0x20 + +#define RF_IRQFLAGS1_PLLLOCK 0x10 + +#define RF_IRQFLAGS1_RSSI 0x08 + +#define RF_IRQFLAGS1_TIMEOUT 0x04 + +#define RF_IRQFLAGS1_PREAMBLEDETECT 0x02 + +#define RF_IRQFLAGS1_SYNCADDRESSMATCH 0x01 + +/*! + * RegIrqFlags2 + */ +#define RF_IRQFLAGS2_FIFOFULL 0x80 + +#define RF_IRQFLAGS2_FIFOEMPTY 0x40 + +#define RF_IRQFLAGS2_FIFOLEVEL 0x20 + +#define RF_IRQFLAGS2_FIFOOVERRUN 0x10 + +#define RF_IRQFLAGS2_PACKETSENT 0x08 + +#define RF_IRQFLAGS2_PAYLOADREADY 0x04 + +#define RF_IRQFLAGS2_CRCOK 0x02 + +#define RF_IRQFLAGS2_LOWBAT 0x01 + +/*! + * RegDioMapping1 + */ +#define RF_DIOMAPPING1_DIO0_MASK 0x3F +#define RF_DIOMAPPING1_DIO0_00 0x00 // Default +#define RF_DIOMAPPING1_DIO0_01 0x40 +#define RF_DIOMAPPING1_DIO0_10 0x80 +#define RF_DIOMAPPING1_DIO0_11 0xC0 + +#define RF_DIOMAPPING1_DIO1_MASK 0xCF +#define RF_DIOMAPPING1_DIO1_00 0x00 // Default +#define RF_DIOMAPPING1_DIO1_01 0x10 +#define RF_DIOMAPPING1_DIO1_10 0x20 +#define RF_DIOMAPPING1_DIO1_11 0x30 + +#define RF_DIOMAPPING1_DIO2_MASK 0xF3 +#define RF_DIOMAPPING1_DIO2_00 0x00 // Default +#define RF_DIOMAPPING1_DIO2_01 0x04 +#define RF_DIOMAPPING1_DIO2_10 0x08 +#define RF_DIOMAPPING1_DIO2_11 0x0C + +#define RF_DIOMAPPING1_DIO3_MASK 0xFC +#define RF_DIOMAPPING1_DIO3_00 0x00 // Default +#define RF_DIOMAPPING1_DIO3_01 0x01 +#define RF_DIOMAPPING1_DIO3_10 0x02 +#define RF_DIOMAPPING1_DIO3_11 0x03 + +/*! + * RegDioMapping2 + */ +#define RF_DIOMAPPING2_DIO4_MASK 0x3F +#define RF_DIOMAPPING2_DIO4_00 0x00 // Default +#define RF_DIOMAPPING2_DIO4_01 0x40 +#define RF_DIOMAPPING2_DIO4_10 0x80 +#define RF_DIOMAPPING2_DIO4_11 0xC0 + +#define RF_DIOMAPPING2_DIO5_MASK 0xCF +#define RF_DIOMAPPING2_DIO5_00 0x00 // Default +#define RF_DIOMAPPING2_DIO5_01 0x10 +#define RF_DIOMAPPING2_DIO5_10 0x20 +#define RF_DIOMAPPING2_DIO5_11 0x30 + +#define RF_DIOMAPPING2_MAP_MASK 0xFE +#define RF_DIOMAPPING2_MAP_PREAMBLEDETECT 0x01 +#define RF_DIOMAPPING2_MAP_RSSI 0x00 // Default + +/*! + * RegVersion (Read Only) + */ + +/*! + * RegAgcRef + */ + +/*! + * RegAgcThresh1 + */ + +/*! + * RegAgcThresh2 + */ + +/*! + * RegAgcThresh3 + */ + +/*! + * RegPllHop + */ +#define RF_PLLHOP_FASTHOP_MASK 0x7F +#define RF_PLLHOP_FASTHOP_ON 0x80 +#define RF_PLLHOP_FASTHOP_OFF 0x00 // Default + +/*! + * RegTcxo + */ +#define RF_TCXO_TCXOINPUT_MASK 0xEF +#define RF_TCXO_TCXOINPUT_ON 0x10 +#define RF_TCXO_TCXOINPUT_OFF 0x00 // Default + +/*! + * RegPaDac + */ +#define RF_PADAC_20DBM_MASK 0xF8 +#define RF_PADAC_20DBM_ON 0x07 +#define RF_PADAC_20DBM_OFF 0x04 // Default + +/*! + * RegPll + */ +#define RF_PLL_BANDWIDTH_MASK 0x3F +#define RF_PLL_BANDWIDTH_75 0x00 +#define RF_PLL_BANDWIDTH_150 0x40 +#define RF_PLL_BANDWIDTH_225 0x80 +#define RF_PLL_BANDWIDTH_300 0xC0 // Default + +/*! + * RegPllLowPn + */ +#define RF_PLLLOWPN_BANDWIDTH_MASK 0x3F +#define RF_PLLLOWPN_BANDWIDTH_75 0x00 +#define RF_PLLLOWPN_BANDWIDTH_150 0x40 +#define RF_PLLLOWPN_BANDWIDTH_225 0x80 +#define RF_PLLLOWPN_BANDWIDTH_300 0xC0 // Default + +/*! + * RegFormerTemp + */ + +/*! + * RegBitrateFrac + */ +#define RF_BITRATEFRAC_MASK 0xF0 + +typedef struct sSX1276 +{ + uint8_t RegFifo; // 0x00 + // Common settings + uint8_t RegOpMode; // 0x01 + uint8_t RegBitrateMsb; // 0x02 + uint8_t RegBitrateLsb; // 0x03 + uint8_t RegFdevMsb; // 0x04 + uint8_t RegFdevLsb; // 0x05 + uint8_t RegFrfMsb; // 0x06 + uint8_t RegFrfMid; // 0x07 + uint8_t RegFrfLsb; // 0x08 + // Tx settings + uint8_t RegPaConfig; // 0x09 + uint8_t RegPaRamp; // 0x0A + uint8_t RegOcp; // 0x0B + // Rx settings + uint8_t RegLna; // 0x0C + uint8_t RegRxConfig; // 0x0D + uint8_t RegRssiConfig; // 0x0E + uint8_t RegRssiCollision; // 0x0F + uint8_t RegRssiThresh; // 0x10 + uint8_t RegRssiValue; // 0x11 + uint8_t RegRxBw; // 0x12 + uint8_t RegAfcBw; // 0x13 + uint8_t RegOokPeak; // 0x14 + uint8_t RegOokFix; // 0x15 + uint8_t RegOokAvg; // 0x16 + uint8_t RegRes17; // 0x17 + uint8_t RegRes18; // 0x18 + uint8_t RegRes19; // 0x19 + uint8_t RegAfcFei; // 0x1A + uint8_t RegAfcMsb; // 0x1B + uint8_t RegAfcLsb; // 0x1C + uint8_t RegFeiMsb; // 0x1D + uint8_t RegFeiLsb; // 0x1E + uint8_t RegPreambleDetect; // 0x1F + uint8_t RegRxTimeout1; // 0x20 + uint8_t RegRxTimeout2; // 0x21 + uint8_t RegRxTimeout3; // 0x22 + uint8_t RegRxDelay; // 0x23 + // Oscillator settings + uint8_t RegOsc; // 0x24 + // Packet handler settings + uint8_t RegPreambleMsb; // 0x25 + uint8_t RegPreambleLsb; // 0x26 + uint8_t RegSyncConfig; // 0x27 + uint8_t RegSyncValue1; // 0x28 + uint8_t RegSyncValue2; // 0x29 + uint8_t RegSyncValue3; // 0x2A + uint8_t RegSyncValue4; // 0x2B + uint8_t RegSyncValue5; // 0x2C + uint8_t RegSyncValue6; // 0x2D + uint8_t RegSyncValue7; // 0x2E + uint8_t RegSyncValue8; // 0x2F + uint8_t RegPacketConfig1; // 0x30 + uint8_t RegPacketConfig2; // 0x31 + uint8_t RegPayloadLength; // 0x32 + uint8_t RegNodeAdrs; // 0x33 + uint8_t RegBroadcastAdrs; // 0x34 + uint8_t RegFifoThresh; // 0x35 + // Sequencer settings + uint8_t RegSeqConfig1; // 0x36 + uint8_t RegSeqConfig2; // 0x37 + uint8_t RegTimerResol; // 0x38 + uint8_t RegTimer1Coef; // 0x39 + uint8_t RegTimer2Coef; // 0x3A + // Service settings + uint8_t RegImageCal; // 0x3B + uint8_t RegTemp; // 0x3C + uint8_t RegLowBat; // 0x3D + // Status + uint8_t RegIrqFlags1; // 0x3E + uint8_t RegIrqFlags2; // 0x3F + // I/O settings + uint8_t RegDioMapping1; // 0x40 + uint8_t RegDioMapping2; // 0x41 + // Version + uint8_t RegVersion; // 0x42 + // Additional settings + uint8_t RegAgcRef; // 0x43 + uint8_t RegAgcThresh1; // 0x44 + uint8_t RegAgcThresh2; // 0x45 + uint8_t RegAgcThresh3; // 0x46 + // Test + uint8_t RegTestReserved47[0x4B - 0x47]; // 0x47-0x4A + // Additional settings + uint8_t RegPllHop; // 0x4B + uint8_t RegTestReserved4C; // 0x4C + uint8_t RegPaDac; // 0x4D + // Test + uint8_t RegTestReserved4E[0x58-0x4E]; // 0x4E-0x57 + // Additional settings + uint8_t RegTcxo; // 0x58 + // Test + uint8_t RegTestReserved59; // 0x59 + // Test + uint8_t RegTestReserved5B; // 0x5B + // Additional settings + uint8_t RegPll; // 0x5C + // Test + uint8_t RegTestReserved5D; // 0x5D + // Additional settings + uint8_t RegPllLowPn; // 0x5E + // Test + uint8_t RegTestReserved5F[0x6C - 0x5F]; // 0x5F-0x6B + // Additional settings + uint8_t RegFormerTemp; // 0x6C + // Test + uint8_t RegTestReserved6D[0x70 - 0x6D]; // 0x6D-0x6F + // Additional settings + uint8_t RegBitrateFrac; // 0x70 +}tSX1276; + +extern tSX1276* SX1276; + +/*! + * \brief Initializes the SX1276 + */ +void SX1276FskInit( void ); + +/*! + * \brief Sets the SX1276 to datasheet default values + */ +void SX1276FskSetDefaults( void ); + +/*! + * \brief Resets the SX1276 + */ +void SX1276FskReset( void ); + +/*! + * \brief Enables/Disables the LoRa modem + * + * \param [IN]: enable [true, false] + */ +void SX1276FskSetLoRaOn( bool enable ); + +/*! + * \brief Sets the SX1276 operating mode + * + * \param [IN] opMode New operating mode + */ +void SX1276FskSetOpMode( uint8_t opMode ); + +/*! + * \brief Gets the SX1276 operating mode + * + * \retval opMode Current operating mode + */ +uint8_t SX1276FskGetOpMode( void ); + +/*! + * \brief Trigs and reads the FEI + * + * \retval feiValue Frequency error value. + */ +int32_t SX1276FskReadFei( void ); + +/*! + * \brief Reads the current AFC value + * + * \retval afcValue Frequency offset value. + */ +int32_t SX1276FskReadAfc( void ); + +/*! + * \brief Reads the current Rx gain setting + * + * \retval rxGain Current gain setting + */ +uint8_t SX1276FskReadRxGain( void ); + +/*! + * \brief Trigs and reads the current RSSI value + * + * \retval rssiValue Current RSSI value in [dBm] + */ +double SX1276FskReadRssi( void ); + +/*! + * \brief Gets the Rx gain value measured while receiving the packet + * + * \retval rxGainValue Current Rx gain value + */ +uint8_t SX1276FskGetPacketRxGain( void ); + +/*! + * \brief Gets the RSSI value measured while receiving the packet + * + * \retval rssiValue Current RSSI value in [dBm] + */ +double SX1276FskGetPacketRssi( void ); + +/*! + * \brief Gets the AFC value measured while receiving the packet + * + * \retval afcValue Current AFC value in [Hz] + */ +uint32_t SX1276FskGetPacketAfc( void ); + +/*! + * \brief Sets the radio in Rx mode. Waiting for a packet + */ +void SX1276FskStartRx( void ); + +/*! + * \brief Gets a copy of the current received buffer + * + * \param [IN]: buffer Buffer pointer + * \param [IN]: size Buffer size + */ +void SX1276FskGetRxPacket( void *buffer, uint16_t *size ); + +/*! + * \brief Sets a copy of the buffer to be transmitted and starts the + * transmission + * + * \param [IN]: buffer Buffer pointer + * \param [IN]: size Buffer size + */ +void SX1276FskSetTxPacket( const void *buffer, uint16_t size ); + +/*! + * \brief Gets the current RFState + * + * \retval rfState Current RF state [RF_IDLE, RF_BUSY, + * RF_RX_DONE, RF_RX_TIMEOUT, + * RF_TX_DONE, RF_TX_TIMEOUT] + */ +uint8_t SX1276FskGetRFState( void ); + +/*! + * \brief Sets the new state of the RF state machine + * + * \param [IN]: state New RF state machine state + */ +void SX1276FskSetRFState( uint8_t state ); + +/*! + * \brief Process the FSK modem Rx and Tx state machines depending on the + * SX1276 operating mode. + * + * \retval rfState Current RF state [RF_IDLE, RF_BUSY, + * RF_RX_DONE, RF_RX_TIMEOUT, + * RF_TX_DONE, RF_TX_TIMEOUT] + */ +uint32_t SX1276FskProcess( void ); + +#endif //__SX1276_FSK_H__ \ No newline at end of file diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-FskMisc.c b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-FskMisc.c new file mode 100644 index 000000000..d98aa49c8 --- /dev/null +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-FskMisc.c @@ -0,0 +1,521 @@ +/* + * THE FOLLOWING FIRMWARE IS PROVIDED: (1) "AS IS" WITH NO WARRANTY; AND + * (2)TO ENABLE ACCESS TO CODING INFORMATION TO GUIDE AND FACILITATE CUSTOMER. + * CONSEQUENTLY, SEMTECH SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR + * CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT + * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION + * CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + * Copyright (C) SEMTECH S.A. + */ +/*! + * \file sx1276-FskMisc.c + * \brief SX1276 RF chip high level functions driver + * + * \remark Optional support functions. + * These functions are defined only to easy the change of the + * parameters. + * For a final firmware the radio parameters will be known so + * there is no need to support all possible parameters. + * Removing these functions will greatly reduce the final firmware + * size. + * + * \version 2.0.0 + * \date May 6 2013 + * \author Gregory Cristian + * + * Last modified by Miguel Luis on Jun 19 2013 + */ +#include + +#include "platform.h" + +#if defined( USE_SX1276_RADIO ) + +#include "sx1276-Hal.h" +#include "sx1276.h" + +#include "sx1276-Fsk.h" +#include "sx1276-FskMisc.h" + +extern tFskSettings FskSettings; + +void SX1276FskSetRFFrequency( uint32_t freq ) +{ + FskSettings.RFFrequency = freq; + + freq = ( uint32_t )( ( double )freq / ( double )FREQ_STEP ); + SX1276->RegFrfMsb = ( uint8_t )( ( freq >> 16 ) & 0xFF ); + SX1276->RegFrfMid = ( uint8_t )( ( freq >> 8 ) & 0xFF ); + SX1276->RegFrfLsb = ( uint8_t )( freq & 0xFF ); + SX1276WriteBuffer( REG_FRFMSB, &SX1276->RegFrfMsb, 3 ); +} + +uint32_t SX1276FskGetRFFrequency( void ) +{ + SX1276ReadBuffer( REG_FRFMSB, &SX1276->RegFrfMsb, 3 ); + FskSettings.RFFrequency = ( ( uint32_t )SX1276->RegFrfMsb << 16 ) | ( ( uint32_t )SX1276->RegFrfMid << 8 ) | ( ( uint32_t )SX1276->RegFrfLsb ); + FskSettings.RFFrequency = ( uint32_t )( ( double )FskSettings.RFFrequency * ( double )FREQ_STEP ); + + return FskSettings.RFFrequency; +} + +void SX1276FskRxCalibrate( void ) +{ + // the function RadioRxCalibrate is called just after the reset so all register are at their default values + uint8_t regPaConfigInitVal; + uint32_t initialFreq; + + // save register values; + SX1276Read( REG_PACONFIG, ®PaConfigInitVal ); + initialFreq = SX1276FskGetRFFrequency( ); + + // Cut the PA just in case + SX1276->RegPaConfig = 0x00; // RFO output, power = -1 dBm + SX1276Write( REG_PACONFIG, SX1276->RegPaConfig ); + + // Set Frequency in HF band + SX1276FskSetRFFrequency( 860000000 ); + + // Rx chain re-calibration workaround + SX1276Read( REG_IMAGECAL, &SX1276->RegImageCal ); + SX1276->RegImageCal = ( SX1276->RegImageCal & RF_IMAGECAL_IMAGECAL_MASK ) | RF_IMAGECAL_IMAGECAL_START; + SX1276Write( REG_IMAGECAL, SX1276->RegImageCal ); + + SX1276Read( REG_IMAGECAL, &SX1276->RegImageCal ); + // rx_cal_run goes low when calibration in finished + while( ( SX1276->RegImageCal & RF_IMAGECAL_IMAGECAL_RUNNING ) == RF_IMAGECAL_IMAGECAL_RUNNING ) + { + SX1276Read( REG_IMAGECAL, &SX1276->RegImageCal ); + } + + // reload saved values into the registers + SX1276->RegPaConfig = regPaConfigInitVal; + SX1276Write( REG_PACONFIG, SX1276->RegPaConfig ); + + SX1276FskSetRFFrequency( initialFreq ); + +} + +void SX1276FskSetBitrate( uint32_t bitrate ) +{ + FskSettings.Bitrate = bitrate; + + bitrate = ( uint16_t )( ( double )XTAL_FREQ / ( double )bitrate ); + SX1276->RegBitrateMsb = ( uint8_t )( bitrate >> 8 ); + SX1276->RegBitrateLsb = ( uint8_t )( bitrate & 0xFF ); + SX1276WriteBuffer( REG_BITRATEMSB, &SX1276->RegBitrateMsb, 2 ); +} + +uint32_t SX1276FskGetBitrate( void ) +{ + SX1276ReadBuffer( REG_BITRATEMSB, &SX1276->RegBitrateMsb, 2 ); + FskSettings.Bitrate = ( ( ( uint32_t )SX1276->RegBitrateMsb << 8 ) | ( ( uint32_t )SX1276->RegBitrateLsb ) ); + FskSettings.Bitrate = ( uint16_t )( ( double )XTAL_FREQ / ( double )FskSettings.Bitrate ); + + return FskSettings.Bitrate; +} + +void SX1276FskSetFdev( uint32_t fdev ) +{ + FskSettings.Fdev = fdev; + + SX1276Read( REG_FDEVMSB, &SX1276->RegFdevMsb ); + + fdev = ( uint16_t )( ( double )fdev / ( double )FREQ_STEP ); + SX1276->RegFdevMsb = ( ( SX1276->RegFdevMsb & RF_FDEVMSB_FDEV_MASK ) | ( ( ( uint8_t )( fdev >> 8 ) ) & ~RF_FDEVMSB_FDEV_MASK ) ); + SX1276->RegFdevLsb = ( uint8_t )( fdev & 0xFF ); + SX1276WriteBuffer( REG_FDEVMSB, &SX1276->RegFdevMsb, 2 ); +} + +uint32_t SX1276FskGetFdev( void ) +{ + SX1276ReadBuffer( REG_FDEVMSB, &SX1276->RegFdevMsb, 2 ); + FskSettings.Fdev = ( ( ( uint32_t )( ( SX1276->RegFdevMsb << 8 ) & ~RF_FDEVMSB_FDEV_MASK ) ) | ( ( uint32_t )SX1276->RegFdevLsb ) ); + FskSettings.Fdev = ( uint16_t )( ( double )FskSettings.Fdev * ( double )FREQ_STEP ); + + return FskSettings.Fdev; +} + +void SX1276FskSetRFPower( int8_t power ) +{ + SX1276Read( REG_PACONFIG, &SX1276->RegPaConfig ); + SX1276Read( REG_PADAC, &SX1276->RegPaDac ); + + if( ( SX1276->RegPaConfig & RF_PACONFIG_PASELECT_PABOOST ) == RF_PACONFIG_PASELECT_PABOOST ) + { + if( ( SX1276->RegPaDac & 0x87 ) == 0x87 ) + { + if( power < 5 ) + { + power = 5; + } + if( power > 20 ) + { + power = 20; + } + SX1276->RegPaConfig = ( SX1276->RegPaConfig & RF_PACONFIG_MAX_POWER_MASK ) | 0x70; + SX1276->RegPaConfig = ( SX1276->RegPaConfig & RF_PACONFIG_OUTPUTPOWER_MASK ) | ( uint8_t )( ( uint16_t )( power - 5 ) & 0x0F ); + } + else + { + if( power < 2 ) + { + power = 2; + } + if( power > 17 ) + { + power = 17; + } + SX1276->RegPaConfig = ( SX1276->RegPaConfig & RF_PACONFIG_MAX_POWER_MASK ) | 0x70; + SX1276->RegPaConfig = ( SX1276->RegPaConfig & RF_PACONFIG_OUTPUTPOWER_MASK ) | ( uint8_t )( ( uint16_t )( power - 2 ) & 0x0F ); + } + } + else + { + if( power < -1 ) + { + power = -1; + } + if( power > 14 ) + { + power = 14; + } + SX1276->RegPaConfig = ( SX1276->RegPaConfig & RF_PACONFIG_MAX_POWER_MASK ) | 0x70; + SX1276->RegPaConfig = ( SX1276->RegPaConfig & RF_PACONFIG_OUTPUTPOWER_MASK ) | ( uint8_t )( ( uint16_t )( power + 1 ) & 0x0F ); + } + SX1276Write( REG_PACONFIG, SX1276->RegPaConfig ); + FskSettings.Power = power; +} + +int8_t SX1276FskGetRFPower( void ) +{ + SX1276Read( REG_PACONFIG, &SX1276->RegPaConfig ); + SX1276Read( REG_PADAC, &SX1276->RegPaDac ); + + if( ( SX1276->RegPaConfig & RF_PACONFIG_PASELECT_PABOOST ) == RF_PACONFIG_PASELECT_PABOOST ) + { + if( ( SX1276->RegPaDac & 0x07 ) == 0x07 ) + { + FskSettings.Power = 5 + ( SX1276->RegPaConfig & ~RF_PACONFIG_OUTPUTPOWER_MASK ); + } + else + { + FskSettings.Power = 2 + ( SX1276->RegPaConfig & ~RF_PACONFIG_OUTPUTPOWER_MASK ); + } + } + else + { + FskSettings.Power = -1 + ( SX1276->RegPaConfig & ~RF_PACONFIG_OUTPUTPOWER_MASK ); + } + return FskSettings.Power; +} + +/*! + * \brief Computes the Rx bandwidth with the mantisse and exponent + * + * \param [IN] mantisse Mantisse of the bandwidth value + * \param [IN] exponent Exponent of the bandwidth value + * \retval bandwidth Computed bandwidth + */ +static uint32_t SX1276FskComputeRxBw( uint8_t mantisse, uint8_t exponent ) +{ + // rxBw + if( ( SX1276->RegOpMode & RF_OPMODE_MODULATIONTYPE_FSK ) == RF_OPMODE_MODULATIONTYPE_FSK ) + { + return ( uint32_t )( ( double )XTAL_FREQ / ( mantisse * ( double )pow( 2, exponent + 2 ) ) ); + } + else + { + return ( uint32_t )( ( double )XTAL_FREQ / ( mantisse * ( double )pow( 2, exponent + 3 ) ) ); + } +} + +/*! + * \brief Computes the mantisse and exponent from the bandwitdh value + * + * \param [IN] rxBwValue Bandwidth value + * \param [OUT] mantisse Mantisse of the bandwidth value + * \param [OUT] exponent Exponent of the bandwidth value + */ +static void SX1276FskComputeRxBwMantExp( uint32_t rxBwValue, uint8_t* mantisse, uint8_t* exponent ) +{ + uint8_t tmpExp = 0; + uint8_t tmpMant = 0; + + double tmpRxBw = 0; + double rxBwMin = 10e6; + + for( tmpExp = 0; tmpExp < 8; tmpExp++ ) + { + for( tmpMant = 16; tmpMant <= 24; tmpMant += 4 ) + { + if( ( SX1276->RegOpMode & RF_OPMODE_MODULATIONTYPE_FSK ) == RF_OPMODE_MODULATIONTYPE_FSK ) + { + tmpRxBw = ( double )XTAL_FREQ / ( tmpMant * ( double )pow( 2, tmpExp + 2 ) ); + } + else + { + tmpRxBw = ( double )XTAL_FREQ / ( tmpMant * ( double )pow( 2, tmpExp + 3 ) ); + } + if( fabs( tmpRxBw - rxBwValue ) < rxBwMin ) + { + rxBwMin = fabs( tmpRxBw - rxBwValue ); + *mantisse = tmpMant; + *exponent = tmpExp; + } + } + } +} + +void SX1276FskSetDccBw( uint8_t* reg, uint32_t dccValue, uint32_t rxBwValue ) +{ + uint8_t mantisse = 0; + uint8_t exponent = 0; + + if( reg == &SX1276->RegRxBw ) + { + *reg = ( uint8_t )dccValue & 0x60; + } + else + { + *reg = 0; + } + + SX1276FskComputeRxBwMantExp( rxBwValue, &mantisse, &exponent ); + + switch( mantisse ) + { + case 16: + *reg |= ( uint8_t )( 0x00 | ( exponent & 0x07 ) ); + break; + case 20: + *reg |= ( uint8_t )( 0x08 | ( exponent & 0x07 ) ); + break; + case 24: + *reg |= ( uint8_t )( 0x10 | ( exponent & 0x07 ) ); + break; + default: + // Something went terribely wrong + break; + } + + if( reg == &SX1276->RegRxBw ) + { + SX1276Write( REG_RXBW, *reg ); + FskSettings.RxBw = rxBwValue; + } + else + { + SX1276Write( REG_AFCBW, *reg ); + FskSettings.RxBwAfc = rxBwValue; + } +} + +uint32_t SX1276FskGetBw( uint8_t* reg ) +{ + uint32_t rxBwValue = 0; + uint8_t mantisse = 0; + switch( ( *reg & 0x18 ) >> 3 ) + { + case 0: + mantisse = 16; + break; + case 1: + mantisse = 20; + break; + case 2: + mantisse = 24; + break; + default: + break; + } + rxBwValue = SX1276FskComputeRxBw( mantisse, ( uint8_t )*reg & 0x07 ); + if( reg == &SX1276->RegRxBw ) + { + return FskSettings.RxBw = rxBwValue; + } + else + { + return FskSettings.RxBwAfc = rxBwValue; + } +} + +void SX1276FskSetPacketCrcOn( bool enable ) +{ + SX1276Read( REG_PACKETCONFIG1, &SX1276->RegPacketConfig1 ); + SX1276->RegPacketConfig1 = ( SX1276->RegPacketConfig1 & RF_PACKETCONFIG1_CRC_MASK ) | ( enable << 4 ); + SX1276Write( REG_PACKETCONFIG1, SX1276->RegPacketConfig1 ); + FskSettings.CrcOn = enable; +} + +bool SX1276FskGetPacketCrcOn( void ) +{ + SX1276Read( REG_PACKETCONFIG1, &SX1276->RegPacketConfig1 ); + FskSettings.CrcOn = ( SX1276->RegPacketConfig1 & RF_PACKETCONFIG1_CRC_ON ) >> 4; + return FskSettings.CrcOn; +} + +void SX1276FskSetAfcOn( bool enable ) +{ + SX1276Read( REG_RXCONFIG, &SX1276->RegRxConfig ); + SX1276->RegRxConfig = ( SX1276->RegRxConfig & RF_RXCONFIG_AFCAUTO_MASK ) | ( enable << 4 ); + SX1276Write( REG_RXCONFIG, SX1276->RegRxConfig ); + FskSettings.AfcOn = enable; +} + +bool SX1276FskGetAfcOn( void ) +{ + SX1276Read( REG_RXCONFIG, &SX1276->RegRxConfig ); + FskSettings.AfcOn = ( SX1276->RegRxConfig & RF_RXCONFIG_AFCAUTO_ON ) >> 4; + return FskSettings.AfcOn; +} + +void SX1276FskSetPayloadLength( uint8_t value ) +{ + SX1276->RegPayloadLength = value; + SX1276Write( REG_PAYLOADLENGTH, SX1276->RegPayloadLength ); + FskSettings.PayloadLength = value; +} + +uint8_t SX1276FskGetPayloadLength( void ) +{ + SX1276Read( REG_PAYLOADLENGTH, &SX1276->RegPayloadLength ); + FskSettings.PayloadLength = SX1276->RegPayloadLength; + return FskSettings.PayloadLength; +} + +void SX1276FskSetPa20dBm( bool enale ) +{ + SX1276Read( REG_PADAC, &SX1276->RegPaDac ); + SX1276Read( REG_PACONFIG, &SX1276->RegPaConfig ); + + if( ( SX1276->RegPaConfig & RF_PACONFIG_PASELECT_PABOOST ) == RF_PACONFIG_PASELECT_PABOOST ) + { + if( enale == true ) + { + SX1276->RegPaDac = 0x87; + } + } + else + { + SX1276->RegPaDac = 0x84; + } + SX1276Write( REG_PADAC, SX1276->RegPaDac ); +} + +bool SX1276FskGetPa20dBm( void ) +{ + SX1276Read( REG_PADAC, &SX1276->RegPaDac ); + + return ( ( SX1276->RegPaDac & 0x07 ) == 0x07 ) ? true : false; +} + +void SX1276FskSetPAOutput( uint8_t outputPin ) +{ + SX1276Read( REG_PACONFIG, &SX1276->RegPaConfig ); + SX1276->RegPaConfig = (SX1276->RegPaConfig & RF_PACONFIG_PASELECT_MASK ) | outputPin; + SX1276Write( REG_PACONFIG, SX1276->RegPaConfig ); +} + +uint8_t SX1276FskGetPAOutput( void ) +{ + SX1276Read( REG_PACONFIG, &SX1276->RegPaConfig ); + return SX1276->RegPaConfig & ~RF_PACONFIG_PASELECT_MASK; +} + + +void SX1276FskSetPaRamp( uint8_t value ) +{ + SX1276Read( REG_PARAMP, &SX1276->RegPaRamp ); + SX1276->RegPaRamp = ( SX1276->RegPaRamp & RF_PARAMP_MASK ) | ( value & ~RF_PARAMP_MASK ); + SX1276Write( REG_PARAMP, SX1276->RegPaRamp ); +} + +uint8_t SX1276FskGetPaRamp( void ) +{ + SX1276Read( REG_PARAMP, &SX1276->RegPaRamp ); + return SX1276->RegPaRamp & ~RF_PARAMP_MASK; +} + +void SX1276FskSetRssiOffset( int8_t offset ) +{ + SX1276Read( REG_RSSICONFIG, &SX1276->RegRssiConfig ); + if( offset < 0 ) + { + offset = ( ~offset & 0x1F ); + offset += 1; + offset = -offset; + } + SX1276->RegRssiConfig |= ( uint8_t )( ( offset & 0x1F ) << 3 ); + SX1276Write( REG_RSSICONFIG, SX1276->RegRssiConfig ); +} + +int8_t SX1276FskGetRssiOffset( void ) +{ + SX1276Read( REG_RSSICONFIG, &SX1276->RegRssiConfig ); + int8_t offset = SX1276->RegRssiConfig >> 3; + if( ( offset & 0x10 ) == 0x10 ) + { + offset = ( ~offset & 0x1F ); + offset += 1; + offset = -offset; + } + return offset; +} + +int8_t SX1276FskGetRawTemp( void ) +{ + int8_t temp = 0; + uint8_t previousOpMode; + uint32_t startTick; + + // Enable Temperature reading + SX1276Read( REG_IMAGECAL, &SX1276->RegImageCal ); + SX1276->RegImageCal = ( SX1276->RegImageCal & RF_IMAGECAL_TEMPMONITOR_MASK ) | RF_IMAGECAL_TEMPMONITOR_ON; + SX1276Write( REG_IMAGECAL, SX1276->RegImageCal ); + + // save current Op Mode + SX1276Read( REG_OPMODE, &SX1276->RegOpMode ); + previousOpMode = SX1276->RegOpMode; + + // put device in FSK RxSynth + SX1276->RegOpMode = RF_OPMODE_SYNTHESIZER_RX; + SX1276Write( REG_OPMODE, SX1276->RegOpMode ); + + // Wait 1ms + startTick = GET_TICK_COUNT( ); + while( ( GET_TICK_COUNT( ) - startTick ) < TICK_RATE_MS( 1 ) ); + + // Disable Temperature reading + SX1276Read( REG_IMAGECAL, &SX1276->RegImageCal ); + SX1276->RegImageCal = ( SX1276->RegImageCal & RF_IMAGECAL_TEMPMONITOR_MASK ) | RF_IMAGECAL_TEMPMONITOR_OFF; + SX1276Write( REG_IMAGECAL, SX1276->RegImageCal ); + + // Read temperature + SX1276Read( REG_TEMP, &SX1276->RegTemp ); + + temp = SX1276->RegTemp & 0x7F; + + if( ( SX1276->RegTemp & 0x80 ) == 0x80 ) + { + temp *= -1; + } + + // Reload previous Op Mode + SX1276Write( REG_OPMODE, previousOpMode ); + + return temp; +} + +int8_t SX1276FskCalibreateTemp( int8_t actualTemp ) +{ + return actualTemp - SX1276FskGetRawTemp( ); +} + +int8_t SX1276FskGetTemp( int8_t compensationFactor ) +{ + return SX1276FskGetRawTemp( ) + compensationFactor; +} + +#endif // USE_SX1276_RADIO diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-FskMisc.h b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-FskMisc.h new file mode 100644 index 000000000..7ada359a0 --- /dev/null +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-FskMisc.h @@ -0,0 +1,241 @@ +/* + * THE FOLLOWING FIRMWARE IS PROVIDED: (1) "AS IS" WITH NO WARRANTY; AND + * (2)TO ENABLE ACCESS TO CODING INFORMATION TO GUIDE AND FACILITATE CUSTOMER. + * CONSEQUENTLY, SEMTECH SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR + * CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT + * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION + * CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + * Copyright (C) SEMTECH S.A. + */ +/*! + * \file sx1276-FskMisc.h + * \brief SX1276 RF chip high level functions driver + * + * \remark Optional support functions. + * These functions are defined only to easy the change of the + * parameters. + * For a final firmware the radio parameters will be known so + * there is no need to support all possible parameters. + * Removing these functions will greatly reduce the final firmware + * size. + * + * \version 2.0.B2 + * \date May 6 2013 + * \author Gregory Cristian + * + * Last modified by Miguel Luis on Jun 19 2013 + */ +#ifndef __SX1276_FSK_MISC_H__ +#define __SX1276_FSK_MISC_H__ + +/*! + * \brief Writes the new RF frequency value + * + * \param [IN] freq New RF frequency value in [Hz] + */ +void SX1276FskSetRFFrequency( uint32_t freq ); + +/*! + * \brief Reads the current RF frequency value + * + * \retval freq Current RF frequency value in [Hz] + */ +uint32_t SX1276FskGetRFFrequency( void ); + +/*! + * \brief Calibrate RSSI and I/Q mismatch for HF + * + * \retval none + */ +void SX1276FskRxCalibrate( void ); + +/*! + * \brief Writes the new bitrate value + * + * \param [IN] bitrate New bitrate value in [bps] + */ +void SX1276FskSetBitrate( uint32_t bitrate ); + +/*! + * \brief Reads the current bitrate value + * + * \retval bitrate Current bitrate value in [bps] + */ +uint32_t SX1276FskGetBitrate( void ); + +/*! + * \brief Writes the new frequency deviation value + * + * \param [IN] fdev New frequency deviation value in [Hz] + */ +void SX1276FskSetFdev( uint32_t fdev ); + +/*! + * \brief Reads the current frequency deviation value + * + * \retval fdev Current frequency deviation value in [Hz] + */ +uint32_t SX1276FskGetFdev( void ); + +/*! + * \brief Writes the new RF output power value + * + * \param [IN] power New output power value in [dBm] + */ +void SX1276FskSetRFPower( int8_t power ); + +/*! + * \brief Reads the current RF output power value + * + * \retval power Current output power value in [dBm] + */ +int8_t SX1276FskGetRFPower( void ); + +/*! + * \brief Writes the DC offset canceller and Rx bandwidth values + * + * \remark For SX1276 there is no DCC setting. dccValue should be 0 + * ie: SX1276SetDccBw( &SX1276.RegRxBw, 0, 62500 ); + * + * \param [IN] reg Register pointer to either SX1231.RegRxBw or SX1231.RegAfcBw + * \param [IN] dccValue New DC offset canceller value in [Hz] ( SX1231 only ) + * \param [IN] rxBwValue New Rx bandwidth value in [Hz] + */ +void SX1276FskSetDccBw( uint8_t* reg, uint32_t dccValue, uint32_t rxBwValue ); + +/*! + * \brief Reads the current bandwidth setting + * + * \param [IN] reg Register pointer to either SX1231.RegRxBw or SX1231.RegAfcBw + * + * \retval bandwidth Bandwidth value + */ +uint32_t SX1276FskGetBw( uint8_t* reg ); + +/*! + * \brief Enables/Disables CRC + * + * \param [IN] enable CRC enable/disable + */ +void SX1276FskSetPacketCrcOn( bool enable ); + +/*! + * \brief Reads the current CRC Enable/Disbale value + * + * \retval enable Current CRC Enable/Disbale value + */ +bool SX1276FskGetPacketCrcOn( void ); + +/*! + * \brief Enables/Disables AFC + * + * \param [IN] enable AFC enable/disable + */ +void SX1276FskSetAfcOn( bool enable ); + +/*! + * \brief Reads the current AFC Enable/Disbale value + * + * \retval enable Current AFC Enable/Disbale value + */ +bool SX1276FskGetAfcOn( void ); + +/*! + * \brief Writes the new payload length value + * + * \param [IN] value New payload length value + */ +void SX1276FskSetPayloadLength( uint8_t value ); + +/*! + * \brief Reads the current payload length value + * + * \retval value Current payload length value + */ +uint8_t SX1276FskGetPayloadLength( void ); + +/*! + * \brief Enables/Disables the 20 dBm PA + * + * \param [IN] enable [true, false] + */ +void SX1276FskSetPa20dBm( bool enale ); + +/*! + * \brief Gets the current 20 dBm PA status + * + * \retval enable [true, false] + */ +bool SX1276FskGetPa20dBm( void ); + +/*! + * \brief Set the RF Output pin + * + * \param [IN] RF_PACONFIG_PASELECT_PABOOST or RF_PACONFIG_PASELECT_RFO + */ +void SX1276FskSetPAOutput( uint8_t outputPin ); + +/*! + * \brief Gets the used RF Ouptu pin + * + * \retval RF_PACONFIG_PASELECT_PABOOST or RF_PACONFIG_PASELECT_RFO + */ +uint8_t SX1276FskGetPAOutput( void ); + +/*! + * \brief Writes the new PA rise/fall time of ramp up/down value + * + * \param [IN] value New PaRamp value + */ +void SX1276FskSetPaRamp( uint8_t value ); + +/*! + * \brief Reads the current PA rise/fall time of ramp up/down value + * + * \retval value Current PaRamp value + */ +uint8_t SX1276FskGetPaRamp( void ); + +/*! + * \brief Applies an offset to the RSSI. Compensates board components + * + * \param [IN] offset Offset to be applied (+/-) + */ +void SX1276FskSetRssiOffset( int8_t offset ); + +/*! + * \brief Gets the current RSSI offset. + * + * \retval offset Current offset (+/-) + */ +int8_t SX1276FskGetRssiOffset( void ); + +/*! + * \brief Writes the new value for the preamble size + * + * \param [IN] size New value of pramble size + */ +void SX1276FskSetPreambleSize( uint16_t size ); + +/*! + * Reads the raw temperature + * \retval temperature New raw temperature reading in 2's complement format + */ +int8_t SX1276FskGetRawTemp( void ); + +/*! + * Computes the temperature compensation factor + * \param [IN] actualTemp Actual temperature measured by an external device + * \retval compensationFactor Computed compensation factor + */ +int8_t SX1276FskCalibreateTemp( int8_t actualTemp ); + +/*! + * Gets the actual compensated temperature + * \param [IN] compensationFactor Return value of the calibration function + * \retval New compensated temperature value + */ +int8_t SX1276FskGetTemp( int8_t compensationFactor ); + +#endif //__SX1276_FSK_MISC_H__ \ No newline at end of file diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-Hal.h b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-Hal.h new file mode 100644 index 000000000..43cdcc471 --- /dev/null +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-Hal.h @@ -0,0 +1,162 @@ +/* + * THE FOLLOWING FIRMWARE IS PROVIDED: (1) "AS IS" WITH NO WARRANTY; AND + * (2)TO ENABLE ACCESS TO CODING INFORMATION TO GUIDE AND FACILITATE CUSTOMER. + * CONSEQUENTLY, SEMTECH SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR + * CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT + * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION + * CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + * Copyright (C) SEMTECH S.A. + */ +/*! + * \file sx1276-Hal.h + * \brief SX1276 Hardware Abstraction Layer + * + * \version 2.0.B2 + * \date May 6 2013 + * \author Gregory Cristian + * + * Last modified by Miguel Luis on Jun 19 2013 + */ +#ifndef __SX1276_HAL_H__ +#define __SX1276_HAL_H__ + +//#include "ioe.h" +#include "platform.h" + +/*! + * DIO state read functions mapping + */ +#define DIO0 SX1276ReadDio0( ) +#define DIO1 SX1276ReadDio1( ) +#define DIO2 SX1276ReadDio2( ) +#define DIO3 SX1276ReadDio3( ) +#define DIO4 SX1276ReadDio4( ) +#define DIO5 SX1276ReadDio5( ) + +// RXTX pin control see errata note +#define RXTX( txEnable ) SX1276WriteRxTx( txEnable ); + +#define GET_TICK_COUNT( ) rt_tick_get()//( TickCounter ) +#define TICK_RATE_MS( ms ) ( ms ) + +typedef enum +{ + RADIO_RESET_OFF, + RADIO_RESET_ON, +}tRadioResetState; + +/*! + * \brief Initializes the radio interface I/Os + */ +void SX1276InitIo( void ); + +/*! + * \brief Set the radio reset pin state + * + * \param state New reset pin state + */ +void SX1276SetReset( rt_uint8_t state ); + +/*! + * \brief Writes the radio register at the specified address + * + * \param [IN]: addr Register address + * \param [IN]: data New register value + */ +void SX1276Write( rt_uint8_t addr, rt_uint8_t data ); + +/*! + * \brief Reads the radio register at the specified address + * + * \param [IN]: addr Register address + * \param [OUT]: data Register value + */ +void SX1276Read( rt_uint8_t addr, rt_uint8_t *data ); + +/*! + * \brief Writes multiple radio registers starting at address + * + * \param [IN] addr First Radio register address + * \param [IN] buffer Buffer containing the new register's values + * \param [IN] size Number of registers to be written + */ +void SX1276WriteBuffer( rt_uint8_t addr, rt_uint8_t *buffer, rt_uint8_t size ); + +/*! + * \brief Reads multiple radio registers starting at address + * + * \param [IN] addr First Radio register address + * \param [OUT] buffer Buffer where to copy the registers data + * \param [IN] size Number of registers to be read + */ +void SX1276ReadBuffer( rt_uint8_t addr, rt_uint8_t *buffer, rt_uint8_t size ); + +/*! + * \brief Writes the buffer contents to the radio FIFO + * + * \param [IN] buffer Buffer containing data to be put on the FIFO. + * \param [IN] size Number of bytes to be written to the FIFO + */ +void SX1276WriteFifo( rt_uint8_t *buffer, rt_uint8_t size ); + +/*! + * \brief Reads the contents of the radio FIFO + * + * \param [OUT] buffer Buffer where to copy the FIFO read data. + * \param [IN] size Number of bytes to be read from the FIFO + */ +void SX1276ReadFifo( rt_uint8_t *buffer, rt_uint8_t size ); + +/*! + * \brief Gets the SX1276 DIO0 hardware pin status + * + * \retval status Current hardware pin status [1, 0] + */ +inline rt_uint8_t SX1276ReadDio0( void ); + +/*! + * \brief Gets the SX1276 DIO1 hardware pin status + * + * \retval status Current hardware pin status [1, 0] + */ +inline rt_uint8_t SX1276ReadDio1( void ); + +/*! + * \brief Gets the SX1276 DIO2 hardware pin status + * + * \retval status Current hardware pin status [1, 0] + */ +inline rt_uint8_t SX1276ReadDio2( void ); + +/*! + * \brief Gets the SX1276 DIO3 hardware pin status + * + * \retval status Current hardware pin status [1, 0] + */ +inline rt_uint8_t SX1276ReadDio3( void ); + +/*! + * \brief Gets the SX1276 DIO4 hardware pin status + * + * \retval status Current hardware pin status [1, 0] + */ +inline rt_uint8_t SX1276ReadDio4( void ); + +/*! + * \brief Gets the SX1276 DIO5 hardware pin status + * + * \retval status Current hardware pin status [1, 0] + */ +inline rt_uint8_t SX1276ReadDio5( void ); + +/*! + * \brief Writes the external RxTx pin value + * + * \remark see errata note + * + * \param [IN] txEnable [1: Tx, 0: Rx] + */ +inline void SX1276WriteRxTx( rt_uint8_t txEnable ); + +#endif //__SX1276_HAL_H__ \ No newline at end of file diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-LoRa.c b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-LoRa.c new file mode 100644 index 000000000..9ef4985c9 --- /dev/null +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-LoRa.c @@ -0,0 +1,797 @@ +/* + * THE FOLLOWING FIRMWARE IS PROVIDED: (1) "AS IS" WITH NO WARRANTY; AND + * (2)TO ENABLE ACCESS TO CODING INFORMATION TO GUIDE AND FACILITATE CUSTOMER. + * CONSEQUENTLY, SEMTECH SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR + * CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT + * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION + * CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + * Original Copyright (C) SEMTECH S.A. + * Modified Copyright (C) 2020 AIIT XUOS Lab + */ +/*! + * \file sx1276-LoRa.c + * \brief SX1276 RF chip driver mode LoRa + * + * \version 2.0.0 + * \date Nov 21 2012 + * \author Miguel Luis + * + * Last modified by Miguel Luis on Jun 19 2013 + */ +/************************************************* +File name: sx1276-LoRa.c +Description: support aiit board configure and register function +History: +1. Date: 2021-04-25 +Author: AIIT XUOS Lab +Modification: +1. replace original macro and basic date type with AIIT XUOS Lab's own defination +*************************************************/ + +#include + +#include "platform.h" + +#if defined( USE_SX1276_RADIO ) +#include "radio.h" +#include "sx1276-Hal.h" +#include "sx1276.h" +#include "sx1276-LoRaMisc.h" +#include "sx1276-LoRa.h" + +#define LoRa_FREQENCY 433000000 + +#define RSSI_OFFSET_LF -155.0 +#define RSSI_OFFSET_HF -150.0 + +#define NOISE_ABSOLUTE_ZERO -174.0 +#define NOISE_FIGURE_LF 4.0 +#define NOISE_FIGURE_HF 6.0 +typedef unsigned int uint32; +volatile uint32 TickCounter = 0; + +uint32 Tx_Time_Start,Tx_Time_End; +uint32 Rx_Time_Start,Rx_Time_End; +//Signal bandwidth, used to calculate RSSI +const double SignalBwLog[] = +{ + 3.8927900303521316335038277369285, // 7.8 kHz + 4.0177301567005500940384239336392, // 10.4 kHz + 4.193820026016112828717566631653, // 15.6 kHz + 4.31875866931372901183597627752391, // 20.8 kHz + 4.4948500216800940239313055263775, // 31.2 kHz + 4.6197891057238405255051280399961, // 41.6 kHz + 4.795880017344075219145044421102, // 62.5 kHz + 5.0969100130080564143587833158265, // 125 kHz + 5.397940008672037609572522210551, // 250 kHz + 5.6989700043360188047862611052755 // 500 kHz +}; + +//These values need testing +const double RssiOffsetLF[] = +{ + -155.0, + -155.0, + -155.0, + -155.0, + -155.0, + -155.0, + -155.0, + -155.0, + -155.0, + -155.0, +}; + +//These values need testing +const double RssiOffsetHF[] = +{ + -150.0, + -150.0, + -150.0, + -150.0, + -150.0, + -150.0, + -150.0, + -150.0, + -150.0, + -150.0, +}; + +/*! + * Frequency hopping frequencies table + */ +const int32_t HoppingFrequencies[] = +{ + 916500000, + 923500000, + 906500000, + 917500000, + 917500000, + 909000000, + 903000000, + 916000000, + 912500000, + 926000000, + 925000000, + 909500000, + 913000000, + 918500000, + 918500000, + 902500000, + 911500000, + 926500000, + 902500000, + 922000000, + 924000000, + 903500000, + 913000000, + 922000000, + 926000000, + 910000000, + 920000000, + 922500000, + 911000000, + 922000000, + 909500000, + 926000000, + 922000000, + 918000000, + 925500000, + 908000000, + 917500000, + 926500000, + 908500000, + 916000000, + 905500000, + 916000000, + 903000000, + 905000000, + 915000000, + 913000000, + 907000000, + 910000000, + 926500000, + 925500000, + 911000000, +}; + +// Default settings +tLoRaSettings LoRaSettings = +{ + LoRa_FREQENCY , // RFFrequency + 20, // Power + 9, // SignalBw [0: 125 kHz, 1: 250 kHz, 2: 500 kHz, 3: Reserved] + 12, // SpreadingFactor [6: 64, 7: 128, 8: 256, 9: 512, 10: 1024, 11: 2048, 12: 4096 chips] + 2, // ErrorCoding [1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8] + true, // CrcOn [0: OFF, 1: ON] + false, // ImplicitHeaderOn [0: OFF, 1: ON] + 0, // RxSingleOn [0: Continuous, 1 Single] + 0, // FreqHopOn [0: OFF, 1: ON] + 4, // HopPeriod Hops every frequency hopping period symbols + 1000, // TxPacketTimeout + 1000, // RxPacketTimeout + 128, // PayloadLength (used for implicit header mode) +}; + +/*! + * SX1276 LoRa registers variable + */ +tSX1276LR* SX1276LR; + +/*! + * Local RF buffer for communication support + */ +static uint8_t RFBuffer[RF_BUFFER_SIZE]; +static uint8_t TFBuffer[RF_BUFFER_SIZE]; + +/*! + * RF state machine variable + */ +static uint8_t RFLRState = RFLR_STATE_IDLE; + +/*! + * Rx management support variables + */ +static uint16_t RxPacketSize = 0; +static int8_t RxPacketSnrEstimate; +static double RxPacketRssiValue; +static uint8_t RxGain = 1; +static uint32_t RxTimeoutTimer = 0; + +/*! + * PacketTimeout Stores the Rx window time value for packet reception + */ +static uint32_t PacketTimeout; + +/*! + * Tx management support variables + */ +static uint16_t TxPacketSize = 0; + + +void SX1276LoRaInit( void ) +{ + RFLRState = RFLR_STATE_IDLE; + + SX1276LoRaSetDefaults(); + + + SX1276ReadBuffer( REG_LR_OPMODE, SX1276Regs + 1, 0x70 - 1 ); + + + //SX1276LoRaSetOpMode( RFLR_OPMODE_SLEEP ); + + SX1276LR->RegLna = RFLR_LNA_GAIN_G1; + SX1276WriteBuffer( REG_LR_OPMODE, SX1276Regs + 1, 0x70 - 1 ); + + // set the RF settings + SX1276LoRaSetRFFrequency( LoRaSettings.RFFrequency ); + SX1276LoRaSetSpreadingFactor( LoRaSettings.SpreadingFactor ); + SX1276LoRaSetErrorCoding( LoRaSettings.ErrorCoding ); + SX1276LoRaSetPacketCrcOn( LoRaSettings.CrcOn ); + SX1276LoRaSetSignalBandwidth( LoRaSettings.SignalBw ); + SX1276LoRaSetImplicitHeaderOn( LoRaSettings.ImplicitHeaderOn ); + + SX1276LoRaSetSymbTimeout(0x3FF); + SX1276LoRaSetPayloadLength( LoRaSettings.PayloadLength ); + SX1276LoRaSetLowDatarateOptimize( true ); + + #if( ( MODULE_SX1276RF1IAS == 1 ) || ( MODULE_SX1276RF1KAS == 1 ) ) + if( LoRaSettings.RFFrequency > 860000000 ) + { + SX1276LoRaSetPAOutput( RFLR_PACONFIG_PASELECT_RFO ); + SX1276LoRaSetPa20dBm( false ); + LoRaSettings.Power = 14; + SX1276LoRaSetRFPower( LoRaSettings.Power ); + } + else + { + //SX1276Write( REG_LR_OCP, 0x3f ); + SX1276LoRaSetPAOutput( RFLR_PACONFIG_PASELECT_PABOOST ); + SX1276LoRaSetPa20dBm( true ); + LoRaSettings.Power = 20; + SX1276LoRaSetRFPower( LoRaSettings.Power ); + } + #elif( MODULE_SX1276RF1JAS == 1 ) + if( LoRaSettings.RFFrequency > 380000000 ) + { + SX1276LoRaSetPAOutput( RFLR_PACONFIG_PASELECT_PABOOST ); + SX1276LoRaSetPa20dBm( true ); + LoRaSettings.Power = 20; + SX1276LoRaSetRFPower( LoRaSettings.Power ); + } + else + { + SX1276LoRaSetPAOutput( RFLR_PACONFIG_PASELECT_RFO ); + SX1276LoRaSetPa20dBm( false ); + LoRaSettings.Power = 14; + SX1276LoRaSetRFPower( LoRaSettings.Power ); + } + #endif + SX1276LoRaSetOpMode( RFLR_OPMODE_STANDBY ); +} + + +void SX1276LoRaSetDefaults( void ) +{ + // REMARK: See SX1276 datasheet for modified default values. + + // Sets IF frequency selection manual + SX1276Read( REG_LR_VERSION, &SX1276LR->RegVersion ); +} + + + +void SX1276LoRaReset( void ) +{ + uint32_t startTick; + + SX1276SetReset( RADIO_RESET_ON ); + + // Wait 1ms + startTick = GET_TICK_COUNT( ); + while( ( GET_TICK_COUNT( ) - startTick ) < TICK_RATE_MS( 1 ) ); + + SX1276SetReset( RADIO_RESET_OFF ); + + // Wait 6ms + startTick = GET_TICK_COUNT( ); + while( ( GET_TICK_COUNT( ) - startTick ) < TICK_RATE_MS( 6 ) ); +} + +void SX1276LoRaSetOpMode( uint8_t opMode ) +{ + static uint8_t opModePrev = RFLR_OPMODE_STANDBY; + static bool antennaSwitchTxOnPrev = true; + bool antennaSwitchTxOn = false; + opModePrev = SX1276LR->RegOpMode & ~RFLR_OPMODE_MASK; + if( opMode != opModePrev ) + { + if( opMode == RFLR_OPMODE_TRANSMITTER ) + { + antennaSwitchTxOn = true; + } + else + { + antennaSwitchTxOn = false; + } + if( antennaSwitchTxOn != antennaSwitchTxOnPrev ) + { + antennaSwitchTxOnPrev = antennaSwitchTxOn; // Antenna switch control + RXTX( antennaSwitchTxOn ); + } + SX1276LR->RegOpMode = ( SX1276LR->RegOpMode & RFLR_OPMODE_MASK ) | opMode; + + SX1276Write( REG_LR_OPMODE, SX1276LR->RegOpMode ); + } +} + + +uint8_t SX1276LoRaGetOpMode( void ) +{ + SX1276Read( REG_LR_OPMODE, &SX1276LR->RegOpMode ); + + return SX1276LR->RegOpMode & ~RFLR_OPMODE_MASK; +} + + +uint8_t SX1276LoRaReadRxGain( void ) +{ + + SX1276Read( REG_LR_LNA, &SX1276LR->RegLna ); + return( SX1276LR->RegLna >> 5 ) & 0x07; +} + + +double SX1276LoRaReadRssi( void ) +{ + // Reads the RSSI value + SX1276Read( REG_LR_RSSIVALUE, &SX1276LR->RegRssiValue ); + + if( LoRaSettings.RFFrequency < 860000000 ) + { + return RssiOffsetLF[LoRaSettings.SignalBw] + ( double )SX1276LR->RegRssiValue; + } + else + { + return RssiOffsetHF[LoRaSettings.SignalBw] + ( double )SX1276LR->RegRssiValue; + } +} + + +uint8_t SX1276LoRaGetPacketRxGain( void ) +{ + return RxGain; +} + + +int8_t SX1276LoRaGetPacketSnr( void ) +{ + return RxPacketSnrEstimate; +} + + +double SX1276LoRaGetPacketRssi( void ) +{ + return RxPacketRssiValue; +} + + +void SX1276LoRaStartRx( void ) +{ + SX1276LoRaSetRFState( RFLR_STATE_RX_INIT ); +} + + +void SX1276LoRaGetRxPacket( void *buffer, uint16_t *size ) +{ + *size = RxPacketSize; + RxPacketSize = 0; + memcpy( (void*)buffer, (void*)RFBuffer, (size_t)*size ); +} + + +void SX1276LoRaSetTxPacket( const void *buffer, uint16_t size ) +{ + if( LoRaSettings.FreqHopOn == false ) + { + TxPacketSize = size; + } + else + { + TxPacketSize = 255; + } + memcpy( ( void * )TFBuffer, buffer, ( size_t )TxPacketSize ); + + RFLRState = RFLR_STATE_TX_INIT; +} + + +uint8_t SX1276LoRaGetRFState( void ) +{ + return RFLRState; +} + + +void SX1276LoRaSetRFState( uint8_t state ) +{ + RFLRState = state; +} + +/*! + * \brief Process the LoRa modem Rx and Tx state machines depending on the + * SX1276 operating mode. + * + * \retval rfState Current RF state [RF_IDLE, RF_BUSY, + * RF_RX_DONE, RF_RX_TIMEOUT, + * RF_TX_DONE, RF_TX_TIMEOUT] + */ +uint32_t SX1276LoRaProcess( void ) +{ + uint32_t result = RF_BUSY; + uint8_t regValue=0; + switch( RFLRState ) + { + case RFLR_STATE_IDLE: + break; + case RFLR_STATE_RX_INIT: + SX1276LoRaSetOpMode(RFLR_OPMODE_STANDBY); + + SX1276LR->RegIrqFlagsMask = RFLR_IRQFLAGS_RXTIMEOUT | + + RFLR_IRQFLAGS_PAYLOADCRCERROR | + RFLR_IRQFLAGS_VALIDHEADER | + RFLR_IRQFLAGS_TXDONE | + RFLR_IRQFLAGS_CADDONE | + RFLR_IRQFLAGS_FHSSCHANGEDCHANNEL | + RFLR_IRQFLAGS_CADDETECTED; + SX1276Write( REG_LR_IRQFLAGSMASK, SX1276LR->RegIrqFlagsMask ); + + if(LoRaSettings.FreqHopOn == true ) + { + SX1276LR->RegHopPeriod = LoRaSettings.HopPeriod; + + SX1276Read( REG_LR_HOPCHANNEL, &SX1276LR->RegHopChannel ); + SX1276LoRaSetRFFrequency( HoppingFrequencies[SX1276LR->RegHopChannel & RFLR_HOPCHANNEL_CHANNEL_MASK] ); + } + else + { + SX1276LR->RegHopPeriod = 255; + } + + SX1276Write( REG_LR_HOPPERIOD, SX1276LR->RegHopPeriod ); + + + // RxDone + SX1276LR->RegDioMapping1 = RFLR_DIOMAPPING1_DIO0_00 | RFLR_DIOMAPPING1_DIO1_00 | RFLR_DIOMAPPING1_DIO2_00 | RFLR_DIOMAPPING1_DIO3_00; + // CadDetected + SX1276LR->RegDioMapping2 = RFLR_DIOMAPPING2_DIO4_10 | RFLR_DIOMAPPING2_DIO5_00; + + SX1276WriteBuffer( REG_LR_DIOMAPPING1, &SX1276LR->RegDioMapping1, 2 ); + + if( LoRaSettings.RxSingleOn == true ) // Rx single mode + { + SX1276LoRaSetOpMode( RFLR_OPMODE_RECEIVER_SINGLE ); + } + else // Rx continuous mode + { + SX1276LR->RegFifoAddrPtr = SX1276LR->RegFifoRxBaseAddr; + + SX1276Write( REG_LR_FIFOADDRPTR, SX1276LR->RegFifoAddrPtr ); + SX1276LoRaSetOpMode( RFLR_OPMODE_RECEIVER ); + + } + memset( RFBuffer, 0, ( size_t )RF_BUFFER_SIZE ); + Rx_Time_Start=TickCounter; + PacketTimeout = LoRaSettings.RxPacketTimeout; + RxTimeoutTimer = GET_TICK_COUNT( ); + RFLRState = RFLR_STATE_RX_RUNNING; + break; + case RFLR_STATE_RX_RUNNING: + SX1276Read(0x12,®Value); + //if( DIO0 == 1 ) // RxDone + if(regValue & (1<<6)) + { + + RxTimeoutTimer = GET_TICK_COUNT( ); + if( LoRaSettings.FreqHopOn == true ) + { + SX1276Read( REG_LR_HOPCHANNEL, &SX1276LR->RegHopChannel ); + SX1276LoRaSetRFFrequency( HoppingFrequencies[SX1276LR->RegHopChannel & RFLR_HOPCHANNEL_CHANNEL_MASK] ); + } + // Clear Irq + SX1276Write( REG_LR_IRQFLAGS, RFLR_IRQFLAGS_RXDONE ); + RFLRState = RFLR_STATE_RX_DONE; + } + //if( DIO2 == 1 ) // FHSS Changed Channel + if(regValue & (1<<1)) + { + RxTimeoutTimer = GET_TICK_COUNT( ); + if( LoRaSettings.FreqHopOn == true ) + { + SX1276Read( REG_LR_HOPCHANNEL, &SX1276LR->RegHopChannel ); + SX1276LoRaSetRFFrequency( HoppingFrequencies[SX1276LR->RegHopChannel & RFLR_HOPCHANNEL_CHANNEL_MASK] ); + } + // Clear Irq + SX1276Write( REG_LR_IRQFLAGS, RFLR_IRQFLAGS_FHSSCHANGEDCHANNEL ); + //RxGain = SX1276LoRaReadRxGain( ); + } + if( LoRaSettings.RxSingleOn == true ) // Rx single mode + { + if( ( GET_TICK_COUNT( ) - RxTimeoutTimer ) > PacketTimeout ) + { + RFLRState = RFLR_STATE_RX_TIMEOUT; + } + } + break; + case RFLR_STATE_RX_DONE: + + + SX1276Read( REG_LR_IRQFLAGS, &SX1276LR->RegIrqFlags ); + if( ( SX1276LR->RegIrqFlags & RFLR_IRQFLAGS_PAYLOADCRCERROR ) == RFLR_IRQFLAGS_PAYLOADCRCERROR ) + { + // Clear Irq + SX1276Write( REG_LR_IRQFLAGS, RFLR_IRQFLAGS_PAYLOADCRCERROR ); + if( LoRaSettings.RxSingleOn == true ) // Rx single mode + { + RFLRState = RFLR_STATE_RX_INIT; + } + else + { + RFLRState = RFLR_STATE_RX_RUNNING; + } + break; + } + +/* { + uint8_t rxSnrEstimate; + + SX1276Read( REG_LR_PKTSNRVALUE, &rxSnrEstimate ); + if( rxSnrEstimate & 0x80 ) + { + + RxPacketSnrEstimate = ( ( ~rxSnrEstimate + 1 ) & 0xFF ) >> 2; + RxPacketSnrEstimate = -RxPacketSnrEstimate; + } + else + { + RxPacketSnrEstimate = ( rxSnrEstimate & 0xFF ) >> 2; + } + } + if( LoRaSettings.RFFrequency < 860000000 ) + { + if( RxPacketSnrEstimate < 0 ) + { + + RxPacketRssiValue = NOISE_ABSOLUTE_ZERO + 10.0 * SignalBwLog[LoRaSettings.SignalBw] + NOISE_FIGURE_LF + ( double )RxPacketSnrEstimate; + } + else + { + SX1276Read( REG_LR_PKTRSSIVALUE, &SX1276LR->RegPktRssiValue ); + RxPacketRssiValue = RssiOffsetLF[LoRaSettings.SignalBw] + ( double )SX1276LR->RegPktRssiValue; + } + } + else + { + if( RxPacketSnrEstimate < 0 ) + { + RxPacketRssiValue = NOISE_ABSOLUTE_ZERO + 10.0 * SignalBwLog[LoRaSettings.SignalBw] + NOISE_FIGURE_HF + ( double )RxPacketSnrEstimate; + } + else + { + SX1276Read( REG_LR_PKTRSSIVALUE, &SX1276LR->RegPktRssiValue ); + RxPacketRssiValue = RssiOffsetHF[LoRaSettings.SignalBw] + ( double )SX1276LR->RegPktRssiValue; + } + }*/ + if( LoRaSettings.RxSingleOn == true ) // Rx single mode + { + SX1276LR->RegFifoAddrPtr = SX1276LR->RegFifoRxBaseAddr; + SX1276Write( REG_LR_FIFOADDRPTR, SX1276LR->RegFifoAddrPtr ); + if( LoRaSettings.ImplicitHeaderOn == true ) + { + RxPacketSize = SX1276LR->RegPayloadLength; + SX1276ReadFifo( RFBuffer, SX1276LR->RegPayloadLength ); + } + else + { + + SX1276Read( REG_LR_NBRXBYTES, &SX1276LR->RegNbRxBytes ); + RxPacketSize = SX1276LR->RegNbRxBytes; + SX1276ReadFifo( RFBuffer, SX1276LR->RegNbRxBytes ); + } + } + else // Rx continuous mode + { + + SX1276Read( REG_LR_FIFORXCURRENTADDR, &SX1276LR->RegFifoRxCurrentAddr ); + if( LoRaSettings.ImplicitHeaderOn == true ) + { + RxPacketSize = SX1276LR->RegPayloadLength; + SX1276LR->RegFifoAddrPtr = SX1276LR->RegFifoRxCurrentAddr; + SX1276Write( REG_LR_FIFOADDRPTR, SX1276LR->RegFifoAddrPtr ); + SX1276ReadFifo( RFBuffer, SX1276LR->RegPayloadLength ); + } + else + { + SX1276Read( REG_LR_NBRXBYTES, &SX1276LR->RegNbRxBytes ); + RxPacketSize = SX1276LR->RegNbRxBytes; + SX1276LR->RegFifoAddrPtr = SX1276LR->RegFifoRxCurrentAddr; + SX1276Write( REG_LR_FIFOADDRPTR, SX1276LR->RegFifoAddrPtr ); + SX1276ReadFifo( RFBuffer, SX1276LR->RegNbRxBytes ); + } + } + if( LoRaSettings.RxSingleOn == true ) // Rx single mode + { + RFLRState = RFLR_STATE_RX_INIT; + } + else // Rx continuous mode + { + RFLRState = RFLR_STATE_RX_RUNNING; + } + Rx_Time_End=TickCounter; + result = RF_RX_DONE; + break; + case RFLR_STATE_RX_TIMEOUT: + RFLRState = RFLR_STATE_RX_INIT; + result = RF_RX_TIMEOUT; + break; + case RFLR_STATE_TX_INIT: + Tx_Time_Start=TickCounter; + SX1276LoRaSetOpMode( RFLR_OPMODE_STANDBY ); + if( LoRaSettings.FreqHopOn == true ) + { + SX1276LR->RegIrqFlagsMask = RFLR_IRQFLAGS_RXTIMEOUT | + RFLR_IRQFLAGS_RXDONE | + RFLR_IRQFLAGS_PAYLOADCRCERROR | + RFLR_IRQFLAGS_VALIDHEADER | + //RFLR_IRQFLAGS_TXDONE | + RFLR_IRQFLAGS_CADDONE | + //RFLR_IRQFLAGS_FHSSCHANGEDCHANNEL | + RFLR_IRQFLAGS_CADDETECTED; + SX1276LR->RegHopPeriod = LoRaSettings.HopPeriod; + SX1276Read( REG_LR_HOPCHANNEL, &SX1276LR->RegHopChannel ); + SX1276LoRaSetRFFrequency( HoppingFrequencies[SX1276LR->RegHopChannel & RFLR_HOPCHANNEL_CHANNEL_MASK] ); + } + else + { + + SX1276LR->RegIrqFlagsMask = RFLR_IRQFLAGS_RXTIMEOUT | + RFLR_IRQFLAGS_RXDONE | + RFLR_IRQFLAGS_PAYLOADCRCERROR | + RFLR_IRQFLAGS_VALIDHEADER | + //RFLR_IRQFLAGS_TXDONE | + RFLR_IRQFLAGS_CADDONE | + RFLR_IRQFLAGS_FHSSCHANGEDCHANNEL | + RFLR_IRQFLAGS_CADDETECTED; + SX1276LR->RegHopPeriod = 0; + } + SX1276Write( REG_LR_HOPPERIOD, SX1276LR->RegHopPeriod ); + SX1276Write( REG_LR_IRQFLAGSMASK, SX1276LR->RegIrqFlagsMask ); + // Initializes the payload size + SX1276LR->RegPayloadLength = TxPacketSize; + SX1276Write( REG_LR_PAYLOADLENGTH, SX1276LR->RegPayloadLength ); + + SX1276LR->RegFifoTxBaseAddr = 0x00; // Full buffer used for Tx + SX1276Write( REG_LR_FIFOTXBASEADDR, SX1276LR->RegFifoTxBaseAddr ); + + SX1276LR->RegFifoAddrPtr = SX1276LR->RegFifoTxBaseAddr; + SX1276Write( REG_LR_FIFOADDRPTR, SX1276LR->RegFifoAddrPtr ); + // Write payload buffer to LORA modem + SX1276WriteFifo( TFBuffer, SX1276LR->RegPayloadLength ); + // TxDone RxTimeout FhssChangeChannel ValidHeader + SX1276LR->RegDioMapping1 = RFLR_DIOMAPPING1_DIO0_01 | RFLR_DIOMAPPING1_DIO1_00 | RFLR_DIOMAPPING1_DIO2_00 | RFLR_DIOMAPPING1_DIO3_01; + // PllLock Mode Ready + SX1276LR->RegDioMapping2 = RFLR_DIOMAPPING2_DIO4_01 | RFLR_DIOMAPPING2_DIO5_00; + + SX1276WriteBuffer( REG_LR_DIOMAPPING1, &SX1276LR->RegDioMapping1, 2 ); + + SX1276LoRaSetOpMode( RFLR_OPMODE_TRANSMITTER ); + + RFLRState = RFLR_STATE_TX_RUNNING; + break; + case RFLR_STATE_TX_RUNNING: + if( DIO0 == 1 ) // TxDone + { + // Clear Irq + SX1276Write( REG_LR_IRQFLAGS, RFLR_IRQFLAGS_TXDONE ); + RFLRState = RFLR_STATE_TX_DONE; + } + if( DIO2 == 1 ) // FHSS Changed Channel + { + if( LoRaSettings.FreqHopOn == true ) + { + SX1276Read( REG_LR_HOPCHANNEL, &SX1276LR->RegHopChannel ); + SX1276LoRaSetRFFrequency( HoppingFrequencies[SX1276LR->RegHopChannel & RFLR_HOPCHANNEL_CHANNEL_MASK] ); + } + // Clear Irq + SX1276Write( REG_LR_IRQFLAGS, RFLR_IRQFLAGS_FHSSCHANGEDCHANNEL ); + } + break; + case RFLR_STATE_TX_DONE: + Tx_Time_End=TickCounter; + SX1276LoRaSetOpMode( RFLR_OPMODE_STANDBY ); + RFLRState = RFLR_STATE_IDLE; + result = RF_TX_DONE; + break; + case RFLR_STATE_CAD_INIT: + // optimize the power consumption by switching off the transmitter as soon as the packet has been sent + SX1276LoRaSetOpMode( RFLR_OPMODE_STANDBY ); + SX1276LR->RegIrqFlagsMask = RFLR_IRQFLAGS_RXTIMEOUT | + RFLR_IRQFLAGS_RXDONE | + RFLR_IRQFLAGS_PAYLOADCRCERROR | + RFLR_IRQFLAGS_VALIDHEADER | + RFLR_IRQFLAGS_TXDONE | + //RFLR_IRQFLAGS_CADDONE | + RFLR_IRQFLAGS_FHSSCHANGEDCHANNEL; + //RFLR_IRQFLAGS_CADDETECTED; + SX1276Write( REG_LR_IRQFLAGSMASK, SX1276LR->RegIrqFlagsMask ); + + // RxDone RxTimeout FhssChangeChannel CadDone + SX1276LR->RegDioMapping1 = RFLR_DIOMAPPING1_DIO0_00 | RFLR_DIOMAPPING1_DIO1_00 | RFLR_DIOMAPPING1_DIO2_00 | RFLR_DIOMAPPING1_DIO3_00; + // CAD Detected ModeReady + SX1276LR->RegDioMapping2 = RFLR_DIOMAPPING2_DIO4_00 | RFLR_DIOMAPPING2_DIO5_00; + SX1276WriteBuffer( REG_LR_DIOMAPPING1, &SX1276LR->RegDioMapping1, 2 ); + + + SX1276LoRaSetOpMode( RFLR_OPMODE_CAD ); + RFLRState = RFLR_STATE_CAD_RUNNING; + + break; + case RFLR_STATE_CAD_RUNNING: + SX1276Read(0x12,®Value); + int cad_done = regValue & (1<<2); + int cad_detected = regValue & (1<<0); + + if( cad_done ) //CAD Done interrupt + { + SX1276Write( REG_LR_IRQFLAGS, RFLR_IRQFLAGS_CADDONE ); + if( cad_detected ) // CAD Detected interrupt + { + SX1276Write( REG_LR_IRQFLAGS, RFLR_IRQFLAGS_CADDETECTED ); + //CAD detected, we have a LoRa preamble + RFLRState = RFLR_STATE_RX_INIT; + result = RF_CHANNEL_ACTIVITY_DETECTED; + } + else + { + // The device goes in Standby Mode automatically + RFLRState = RFLR_STATE_IDLE; + result = RF_CHANNEL_EMPTY; + } + } + break; + default: + break; + } + return result; +} + +uint32_t SX1276LoraChannelEmpty( void ) +{ + uint32_t result = 0; + RFLRState = RFLR_STATE_CAD_INIT; + SX1276LoRaProcess(); + while(RFLRState == RFLR_STATE_CAD_RUNNING) + { + //KPrintf("\nLora--SX1276LoRaProcess()"); + result = SX1276LoRaProcess(); + } + + if(result == RF_CHANNEL_EMPTY) + { + KPrintf("\nLora--信道可用(RF_CHANNEL_EMPTY)\n"); + return 0; + } + else if(result == RF_CHANNEL_ACTIVITY_DETECTED) + { + KPrintf("\nLora--信道正被占用(RF_CHANNEL_ACTIVITY_DETECTED)\n"); + return 1; + } + else + { + return 2; + } +} + +#endif // USE_SX1276_RADIO \ No newline at end of file diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-LoRa.h b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-LoRa.h new file mode 100644 index 000000000..eea3f332e --- /dev/null +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-LoRa.h @@ -0,0 +1,922 @@ +/* + * THE FOLLOWING FIRMWARE IS PROVIDED: (1) "AS IS" WITH NO WARRANTY; AND + * (2)TO ENABLE ACCESS TO CODING INFORMATION TO GUIDE AND FACILITATE CUSTOMER. + * CONSEQUENTLY, SEMTECH SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR + * CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT + * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION + * CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + * Copyright (C) SEMTECH S.A. + */ +/*! + * \file sx1276-LoRa.h + * \brief SX1276 RF chip driver mode LoRa + * + * \version 2.0.B2 + * \date May 6 2013 + * \author Gregory Cristian + * + * Last modified by Miguel Luis on Jun 19 2013 + */ +#ifndef __SX1276_LORA_H__ +#define __SX1276_LORA_H__ + +/*! + * SX1276 LoRa General parameters definition + */ +typedef struct sLoRaSettings +{ + uint32_t RFFrequency; + int8_t Power; + uint8_t SignalBw; // LORA [0: 7.8 kHz, 1: 10.4 kHz, 2: 15.6 kHz, 3: 20.8 kHz, 4: 31.2 kHz, + // 5: 41.6 kHz, 6: 62.5 kHz, 7: 125 kHz, 8: 250 kHz, 9: 500 kHz, other: Reserved] + uint8_t SpreadingFactor; // LORA [6: 64, 7: 128, 8: 256, 9: 512, 10: 1024, 11: 2048, 12: 4096 chips] + uint8_t ErrorCoding; // LORA [1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8] + bool CrcOn; // [0: OFF, 1: ON] + bool ImplicitHeaderOn; // [0: OFF, 1: ON] + bool RxSingleOn; // [0: Continuous, 1 Single] + bool FreqHopOn; // [0: OFF, 1: ON] + uint8_t HopPeriod; // Hops every frequency hopping period symbols + uint32_t TxPacketTimeout; + uint32_t RxPacketTimeout; + uint8_t PayloadLength; +}tLoRaSettings; + +/*! + * RF packet definition + */ +#define RF_BUFFER_SIZE_MAX 256 +#define RF_BUFFER_SIZE 256 + +/*! + * RF state machine + */ +//LoRa +typedef enum +{ + RFLR_STATE_IDLE, + RFLR_STATE_RX_INIT, + RFLR_STATE_RX_RUNNING, + RFLR_STATE_RX_DONE, + RFLR_STATE_RX_TIMEOUT, + RFLR_STATE_TX_INIT, + RFLR_STATE_TX_RUNNING, + RFLR_STATE_TX_DONE, + RFLR_STATE_TX_TIMEOUT, + RFLR_STATE_CAD_INIT, + RFLR_STATE_CAD_RUNNING, +}tRFLRStates; + +/*! + * SX1276 definitions + */ +#define XTAL_FREQ 32000000 +#define FREQ_STEP 61.03515625 + +/*! + * SX1276 Internal registers Address + */ +#define REG_LR_FIFO 0x00 +// Common settings +#define REG_LR_OPMODE 0x01 +#define REG_LR_BANDSETTING 0x04 +#define REG_LR_FRFMSB 0x06 +#define REG_LR_FRFMID 0x07 +#define REG_LR_FRFLSB 0x08 +// Tx settings +#define REG_LR_PACONFIG 0x09 +#define REG_LR_PARAMP 0x0A +#define REG_LR_OCP 0x0B +// Rx settings +#define REG_LR_LNA 0x0C +// LoRa registers +#define REG_LR_FIFOADDRPTR 0x0D +#define REG_LR_FIFOTXBASEADDR 0x0E +#define REG_LR_FIFORXBASEADDR 0x0F +#define REG_LR_FIFORXCURRENTADDR 0x10 +#define REG_LR_IRQFLAGSMASK 0x11 +#define REG_LR_IRQFLAGS 0x12 +#define REG_LR_NBRXBYTES 0x13 +#define REG_LR_RXHEADERCNTVALUEMSB 0x14 +#define REG_LR_RXHEADERCNTVALUELSB 0x15 +#define REG_LR_RXPACKETCNTVALUEMSB 0x16 +#define REG_LR_RXPACKETCNTVALUELSB 0x17 +#define REG_LR_MODEMSTAT 0x18 +#define REG_LR_PKTSNRVALUE 0x19 +#define REG_LR_PKTRSSIVALUE 0x1A +#define REG_LR_RSSIVALUE 0x1B +#define REG_LR_HOPCHANNEL 0x1C +#define REG_LR_MODEMCONFIG1 0x1D +#define REG_LR_MODEMCONFIG2 0x1E +#define REG_LR_SYMBTIMEOUTLSB 0x1F +#define REG_LR_PREAMBLEMSB 0x20 +#define REG_LR_PREAMBLELSB 0x21 +#define REG_LR_PAYLOADLENGTH 0x22 +#define REG_LR_PAYLOADMAXLENGTH 0x23 +#define REG_LR_HOPPERIOD 0x24 +#define REG_LR_FIFORXBYTEADDR 0x25 +#define REG_LR_MODEMCONFIG3 0x26 +#define REG_LR_FEIMSB 0x28 +#define REG_LR_FEIMIB 0x29 +#define REG_LR_FEILSB 0x2A +#define REG_LR_LORADETECTOPTIMIZE 0x31 +#define REG_LR_INVERTIQ 0x33 +#define REG_LR_DETECTIONTHRESHOLD 0x37 +// end of documented register in datasheet +// I/O settings +#define REG_LR_DIOMAPPING1 0x40 +#define REG_LR_DIOMAPPING2 0x41 +// Version +#define REG_LR_VERSION 0x42 +// Additional settings +#define REG_LR_PLLHOP 0x44 +#define REG_LR_TCXO 0x4B +#define REG_LR_PADAC 0x4D +#define REG_LR_FORMERTEMP 0x5B +#define REG_LR_BITRATEFRAC 0x5D +#define REG_LR_AGCREF 0x61 +#define REG_LR_AGCTHRESH1 0x62 +#define REG_LR_AGCTHRESH2 0x63 +#define REG_LR_AGCTHRESH3 0x64 + + +/*! + * SX1276 LoRa bit control definition + */ + +/*! + * RegFifo + */ + +/*! + * RegOpMode + */ +#define RFLR_OPMODE_LONGRANGEMODE_MASK 0x7F +#define RFLR_OPMODE_LONGRANGEMODE_OFF 0x00 // Default +#define RFLR_OPMODE_LONGRANGEMODE_ON 0x80 + +#define RFLR_OPMODE_ACCESSSHAREDREG_MASK 0xBF +#define RFLR_OPMODE_ACCESSSHAREDREG_ENABLE 0x40 +#define RFLR_OPMODE_ACCESSSHAREDREG_DISABLE 0x00 // Default + +#define RFLR_OPMODE_FREQMODE_ACCESS_MASK 0xF7 +#define RFLR_OPMODE_FREQMODE_ACCESS_LF 0x08 // Default +#define RFLR_OPMODE_FREQMODE_ACCESS_HF 0x00 + +#define RFLR_OPMODE_MASK 0xF8 +#define RFLR_OPMODE_SLEEP 0x00 +#define RFLR_OPMODE_STANDBY 0x01 // Default +#define RFLR_OPMODE_SYNTHESIZER_TX 0x02 +#define RFLR_OPMODE_TRANSMITTER 0x03 +#define RFLR_OPMODE_SYNTHESIZER_RX 0x04 +#define RFLR_OPMODE_RECEIVER 0x05 +// LoRa specific modes +#define RFLR_OPMODE_RECEIVER_SINGLE 0x06 +#define RFLR_OPMODE_CAD 0x07 + +/*! + * RegBandSetting + */ +#define RFLR_BANDSETTING_MASK 0x3F +#define RFLR_BANDSETTING_AUTO 0x00 // Default +#define RFLR_BANDSETTING_DIV_BY_1 0x40 +#define RFLR_BANDSETTING_DIV_BY_2 0x80 +#define RFLR_BANDSETTING_DIV_BY_6 0xC0 + +/*! + * RegFrf (MHz) + */ + +#define RFLR_FRFMSB_434_MHZ 0x6C // Default +#define RFLR_FRFMID_434_MHZ 0x80 // Default +#define RFLR_FRFLSB_434_MHZ 0x00 // Default + +#define RFLR_FRFMSB_863_MHZ 0xD7 +#define RFLR_FRFMID_863_MHZ 0xC0 +#define RFLR_FRFLSB_863_MHZ 0x00 +#define RFLR_FRFMSB_864_MHZ 0xD8 +#define RFLR_FRFMID_864_MHZ 0x00 +#define RFLR_FRFLSB_864_MHZ 0x00 +#define RFLR_FRFMSB_865_MHZ 0xD8 +#define RFLR_FRFMID_865_MHZ 0x40 +#define RFLR_FRFLSB_865_MHZ 0x00 +#define RFLR_FRFMSB_866_MHZ 0xD8 +#define RFLR_FRFMID_866_MHZ 0x80 +#define RFLR_FRFLSB_866_MHZ 0x00 +#define RFLR_FRFMSB_867_MHZ 0xD8 +#define RFLR_FRFMID_867_MHZ 0xC0 +#define RFLR_FRFLSB_867_MHZ 0x00 +#define RFLR_FRFMSB_868_MHZ 0xD9 +#define RFLR_FRFMID_868_MHZ 0x00 +#define RFLR_FRFLSB_868_MHZ 0x00 +#define RFLR_FRFMSB_869_MHZ 0xD9 +#define RFLR_FRFMID_869_MHZ 0x40 +#define RFLR_FRFLSB_869_MHZ 0x00 +#define RFLR_FRFMSB_870_MHZ 0xD9 +#define RFLR_FRFMID_870_MHZ 0x80 +#define RFLR_FRFLSB_870_MHZ 0x00 + +#define RFLR_FRFMSB_902_MHZ 0xE1 +#define RFLR_FRFMID_902_MHZ 0x80 +#define RFLR_FRFLSB_902_MHZ 0x00 +#define RFLR_FRFMSB_903_MHZ 0xE1 +#define RFLR_FRFMID_903_MHZ 0xC0 +#define RFLR_FRFLSB_903_MHZ 0x00 +#define RFLR_FRFMSB_904_MHZ 0xE2 +#define RFLR_FRFMID_904_MHZ 0x00 +#define RFLR_FRFLSB_904_MHZ 0x00 +#define RFLR_FRFMSB_905_MHZ 0xE2 +#define RFLR_FRFMID_905_MHZ 0x40 +#define RFLR_FRFLSB_905_MHZ 0x00 +#define RFLR_FRFMSB_906_MHZ 0xE2 +#define RFLR_FRFMID_906_MHZ 0x80 +#define RFLR_FRFLSB_906_MHZ 0x00 +#define RFLR_FRFMSB_907_MHZ 0xE2 +#define RFLR_FRFMID_907_MHZ 0xC0 +#define RFLR_FRFLSB_907_MHZ 0x00 +#define RFLR_FRFMSB_908_MHZ 0xE3 +#define RFLR_FRFMID_908_MHZ 0x00 +#define RFLR_FRFLSB_908_MHZ 0x00 +#define RFLR_FRFMSB_909_MHZ 0xE3 +#define RFLR_FRFMID_909_MHZ 0x40 +#define RFLR_FRFLSB_909_MHZ 0x00 +#define RFLR_FRFMSB_910_MHZ 0xE3 +#define RFLR_FRFMID_910_MHZ 0x80 +#define RFLR_FRFLSB_910_MHZ 0x00 +#define RFLR_FRFMSB_911_MHZ 0xE3 +#define RFLR_FRFMID_911_MHZ 0xC0 +#define RFLR_FRFLSB_911_MHZ 0x00 +#define RFLR_FRFMSB_912_MHZ 0xE4 +#define RFLR_FRFMID_912_MHZ 0x00 +#define RFLR_FRFLSB_912_MHZ 0x00 +#define RFLR_FRFMSB_913_MHZ 0xE4 +#define RFLR_FRFMID_913_MHZ 0x40 +#define RFLR_FRFLSB_913_MHZ 0x00 +#define RFLR_FRFMSB_914_MHZ 0xE4 +#define RFLR_FRFMID_914_MHZ 0x80 +#define RFLR_FRFLSB_914_MHZ 0x00 +#define RFLR_FRFMSB_915_MHZ 0xE4 // Default +#define RFLR_FRFMID_915_MHZ 0xC0 // Default +#define RFLR_FRFLSB_915_MHZ 0x00 // Default +#define RFLR_FRFMSB_916_MHZ 0xE5 +#define RFLR_FRFMID_916_MHZ 0x00 +#define RFLR_FRFLSB_916_MHZ 0x00 +#define RFLR_FRFMSB_917_MHZ 0xE5 +#define RFLR_FRFMID_917_MHZ 0x40 +#define RFLR_FRFLSB_917_MHZ 0x00 +#define RFLR_FRFMSB_918_MHZ 0xE5 +#define RFLR_FRFMID_918_MHZ 0x80 +#define RFLR_FRFLSB_918_MHZ 0x00 +#define RFLR_FRFMSB_919_MHZ 0xE5 +#define RFLR_FRFMID_919_MHZ 0xC0 +#define RFLR_FRFLSB_919_MHZ 0x00 +#define RFLR_FRFMSB_920_MHZ 0xE6 +#define RFLR_FRFMID_920_MHZ 0x00 +#define RFLR_FRFLSB_920_MHZ 0x00 +#define RFLR_FRFMSB_921_MHZ 0xE6 +#define RFLR_FRFMID_921_MHZ 0x40 +#define RFLR_FRFLSB_921_MHZ 0x00 +#define RFLR_FRFMSB_922_MHZ 0xE6 +#define RFLR_FRFMID_922_MHZ 0x80 +#define RFLR_FRFLSB_922_MHZ 0x00 +#define RFLR_FRFMSB_923_MHZ 0xE6 +#define RFLR_FRFMID_923_MHZ 0xC0 +#define RFLR_FRFLSB_923_MHZ 0x00 +#define RFLR_FRFMSB_924_MHZ 0xE7 +#define RFLR_FRFMID_924_MHZ 0x00 +#define RFLR_FRFLSB_924_MHZ 0x00 +#define RFLR_FRFMSB_925_MHZ 0xE7 +#define RFLR_FRFMID_925_MHZ 0x40 +#define RFLR_FRFLSB_925_MHZ 0x00 +#define RFLR_FRFMSB_926_MHZ 0xE7 +#define RFLR_FRFMID_926_MHZ 0x80 +#define RFLR_FRFLSB_926_MHZ 0x00 +#define RFLR_FRFMSB_927_MHZ 0xE7 +#define RFLR_FRFMID_927_MHZ 0xC0 +#define RFLR_FRFLSB_927_MHZ 0x00 +#define RFLR_FRFMSB_928_MHZ 0xE8 +#define RFLR_FRFMID_928_MHZ 0x00 +#define RFLR_FRFLSB_928_MHZ 0x00 + +/*! + * RegPaConfig + */ +#define RFLR_PACONFIG_PASELECT_MASK 0x7F +#define RFLR_PACONFIG_PASELECT_PABOOST 0x80 +#define RFLR_PACONFIG_PASELECT_RFO 0x00 // Default + +#define RFLR_PACONFIG_MAX_POWER_MASK 0x8F + +#define RFLR_PACONFIG_OUTPUTPOWER_MASK 0xF0 + +/*! + * RegPaRamp + */ +#define RFLR_PARAMP_TXBANDFORCE_MASK 0xEF +#define RFLR_PARAMP_TXBANDFORCE_BAND_SEL 0x10 +#define RFLR_PARAMP_TXBANDFORCE_AUTO 0x00 // Default + +#define RFLR_PARAMP_MASK 0xF0 +#define RFLR_PARAMP_3400_US 0x00 +#define RFLR_PARAMP_2000_US 0x01 +#define RFLR_PARAMP_1000_US 0x02 +#define RFLR_PARAMP_0500_US 0x03 +#define RFLR_PARAMP_0250_US 0x04 +#define RFLR_PARAMP_0125_US 0x05 +#define RFLR_PARAMP_0100_US 0x06 +#define RFLR_PARAMP_0062_US 0x07 +#define RFLR_PARAMP_0050_US 0x08 +#define RFLR_PARAMP_0040_US 0x09 // Default +#define RFLR_PARAMP_0031_US 0x0A +#define RFLR_PARAMP_0025_US 0x0B +#define RFLR_PARAMP_0020_US 0x0C +#define RFLR_PARAMP_0015_US 0x0D +#define RFLR_PARAMP_0012_US 0x0E +#define RFLR_PARAMP_0010_US 0x0F + +/*! + * RegOcp + */ +#define RFLR_OCP_MASK 0xDF +#define RFLR_OCP_ON 0x20 // Default +#define RFLR_OCP_OFF 0x00 + +#define RFLR_OCP_TRIM_MASK 0xE0 +#define RFLR_OCP_TRIM_045_MA 0x00 +#define RFLR_OCP_TRIM_050_MA 0x01 +#define RFLR_OCP_TRIM_055_MA 0x02 +#define RFLR_OCP_TRIM_060_MA 0x03 +#define RFLR_OCP_TRIM_065_MA 0x04 +#define RFLR_OCP_TRIM_070_MA 0x05 +#define RFLR_OCP_TRIM_075_MA 0x06 +#define RFLR_OCP_TRIM_080_MA 0x07 +#define RFLR_OCP_TRIM_085_MA 0x08 +#define RFLR_OCP_TRIM_090_MA 0x09 +#define RFLR_OCP_TRIM_095_MA 0x0A +#define RFLR_OCP_TRIM_100_MA 0x0B // Default +#define RFLR_OCP_TRIM_105_MA 0x0C +#define RFLR_OCP_TRIM_110_MA 0x0D +#define RFLR_OCP_TRIM_115_MA 0x0E +#define RFLR_OCP_TRIM_120_MA 0x0F +#define RFLR_OCP_TRIM_130_MA 0x10 +#define RFLR_OCP_TRIM_140_MA 0x11 +#define RFLR_OCP_TRIM_150_MA 0x12 +#define RFLR_OCP_TRIM_160_MA 0x13 +#define RFLR_OCP_TRIM_170_MA 0x14 +#define RFLR_OCP_TRIM_180_MA 0x15 +#define RFLR_OCP_TRIM_190_MA 0x16 +#define RFLR_OCP_TRIM_200_MA 0x17 +#define RFLR_OCP_TRIM_210_MA 0x18 +#define RFLR_OCP_TRIM_220_MA 0x19 +#define RFLR_OCP_TRIM_230_MA 0x1A +#define RFLR_OCP_TRIM_240_MA 0x1B + +/*! + * RegLna + */ +#define RFLR_LNA_GAIN_MASK 0x1F +#define RFLR_LNA_GAIN_G1 0x20 // Default +#define RFLR_LNA_GAIN_G2 0x40 +#define RFLR_LNA_GAIN_G3 0x60 +#define RFLR_LNA_GAIN_G4 0x80 +#define RFLR_LNA_GAIN_G5 0xA0 +#define RFLR_LNA_GAIN_G6 0xC0 + +#define RFLR_LNA_BOOST_LF_MASK 0xE7 +#define RFLR_LNA_BOOST_LF_DEFAULT 0x00 // Default +#define RFLR_LNA_BOOST_LF_GAIN 0x08 +#define RFLR_LNA_BOOST_LF_IP3 0x10 +#define RFLR_LNA_BOOST_LF_BOOST 0x18 + +#define RFLR_LNA_RXBANDFORCE_MASK 0xFB +#define RFLR_LNA_RXBANDFORCE_BAND_SEL 0x04 +#define RFLR_LNA_RXBANDFORCE_AUTO 0x00 // Default + +#define RFLR_LNA_BOOST_HF_MASK 0xFC +#define RFLR_LNA_BOOST_HF_OFF 0x00 // Default +#define RFLR_LNA_BOOST_HF_ON 0x03 + +/*! + * RegFifoAddrPtr + */ +#define RFLR_FIFOADDRPTR 0x00 // Default + +/*! + * RegFifoTxBaseAddr + */ +#define RFLR_FIFOTXBASEADDR 0x80 // Default + +/*! + * RegFifoTxBaseAddr + */ +#define RFLR_FIFORXBASEADDR 0x00 // Default + +/*! + * RegFifoRxCurrentAddr (Read Only) + */ + +/*! + * RegIrqFlagsMask + */ +#define RFLR_IRQFLAGS_RXTIMEOUT_MASK 0x80 +#define RFLR_IRQFLAGS_RXDONE_MASK 0x40 +#define RFLR_IRQFLAGS_PAYLOADCRCERROR_MASK 0x20 +#define RFLR_IRQFLAGS_VALIDHEADER_MASK 0x10 +#define RFLR_IRQFLAGS_TXDONE_MASK 0x08 +#define RFLR_IRQFLAGS_CADDONE_MASK 0x04 +#define RFLR_IRQFLAGS_FHSSCHANGEDCHANNEL_MASK 0x02 +#define RFLR_IRQFLAGS_CADDETECTED_MASK 0x01 + +/*! + * RegIrqFlags + */ +#define RFLR_IRQFLAGS_RXTIMEOUT 0x80 +#define RFLR_IRQFLAGS_RXDONE 0x40 +#define RFLR_IRQFLAGS_PAYLOADCRCERROR 0x20 +#define RFLR_IRQFLAGS_VALIDHEADER 0x10 +#define RFLR_IRQFLAGS_TXDONE 0x08 +#define RFLR_IRQFLAGS_CADDONE 0x04 +#define RFLR_IRQFLAGS_FHSSCHANGEDCHANNEL 0x02 +#define RFLR_IRQFLAGS_CADDETECTED 0x01 + + + +/*! + * RegFifoRxNbBytes (Read Only) // + */ + + + /*! + * RegRxHeaderCntValueMsb (Read Only) // + */ + + + /*! + * RegRxHeaderCntValueLsb (Read Only) // + */ + + +/*! + * RegRxPacketCntValueMsb (Read Only) // + */ + + + /*! + * RegRxPacketCntValueLsb (Read Only) // + */ + + + /*! + * RegModemStat (Read Only) // + */ +#define RFLR_MODEMSTAT_RX_CR_MASK 0x1F +#define RFLR_MODEMSTAT_MODEM_STATUS_MASK 0xE0 + +/*! + * RegPktSnrValue (Read Only) // + */ + + + /*! + * RegPktRssiValue (Read Only) // + */ + + +/*! + * RegRssiValue (Read Only) // + */ + +/*! + * RegHopChannel (Read Only) // + */ +#define RFLR_HOP_CHANNEL_PAYLOAD_CRC_ON_MASK 0xBF +#define RFLR_HOP_CHANNEL_PAYLOAD_CRC_ON 0x40 +#define RFLR_HOP_CHANNEL_PAYLOAD_CRC_OFF 0x00 + + /*! + * RegModemConfig1 + */ +#define RFLR_MODEMCONFIG1_BW_MASK 0x0F + +#define RFLR_MODEMCONFIG1_BW_7_81_KHZ 0x00 +#define RFLR_MODEMCONFIG1_BW_10_41_KHZ 0x10 +#define RFLR_MODEMCONFIG1_BW_15_62_KHZ 0x20 +#define RFLR_MODEMCONFIG1_BW_20_83_KHZ 0x30 +#define RFLR_MODEMCONFIG1_BW_31_25_KHZ 0x40 +#define RFLR_MODEMCONFIG1_BW_41_66_KHZ 0x50 +#define RFLR_MODEMCONFIG1_BW_62_50_KHZ 0x60 +#define RFLR_MODEMCONFIG1_BW_125_KHZ 0x70 // Default +#define RFLR_MODEMCONFIG1_BW_250_KHZ 0x80 +#define RFLR_MODEMCONFIG1_BW_500_KHZ 0x90 + +#define RFLR_MODEMCONFIG1_CODINGRATE_MASK 0xF1 +#define RFLR_MODEMCONFIG1_CODINGRATE_4_5 0x02 +#define RFLR_MODEMCONFIG1_CODINGRATE_4_6 0x04 // Default +#define RFLR_MODEMCONFIG1_CODINGRATE_4_7 0x06 +#define RFLR_MODEMCONFIG1_CODINGRATE_4_8 0x08 + +#define RFLR_MODEMCONFIG1_IMPLICITHEADER_MASK 0xFE +#define RFLR_MODEMCONFIG1_IMPLICITHEADER_ON 0x01 +#define RFLR_MODEMCONFIG1_IMPLICITHEADER_OFF 0x00 // Default + + /*! + * RegModemConfig2 + */ +#define RFLR_MODEMCONFIG2_SF_MASK 0x0F +#define RFLR_MODEMCONFIG2_SF_6 0x60 +#define RFLR_MODEMCONFIG2_SF_7 0x70 // Default +#define RFLR_MODEMCONFIG2_SF_8 0x80 +#define RFLR_MODEMCONFIG2_SF_9 0x90 +#define RFLR_MODEMCONFIG2_SF_10 0xA0 +#define RFLR_MODEMCONFIG2_SF_11 0xB0 +#define RFLR_MODEMCONFIG2_SF_12 0xC0 + +#define RFLR_MODEMCONFIG2_TXCONTINUOUSMODE_MASK 0xF7 +#define RFLR_MODEMCONFIG2_TXCONTINUOUSMODE_ON 0x08 +#define RFLR_MODEMCONFIG2_TXCONTINUOUSMODE_OFF 0x00 + +#define RFLR_MODEMCONFIG2_RXPAYLOADCRC_MASK 0xFB +#define RFLR_MODEMCONFIG2_RXPAYLOADCRC_ON 0x04 +#define RFLR_MODEMCONFIG2_RXPAYLOADCRC_OFF 0x00 // Default + +#define RFLR_MODEMCONFIG2_SYMBTIMEOUTMSB_MASK 0xFC +#define RFLR_MODEMCONFIG2_SYMBTIMEOUTMSB 0x00 // Default + + +/*! + * RegHopChannel (Read Only) + */ +#define RFLR_HOPCHANNEL_PLL_LOCK_TIMEOUT_MASK 0x7F +#define RFLR_HOPCHANNEL_PLL_LOCK_FAIL 0x80 +#define RFLR_HOPCHANNEL_PLL_LOCK_SUCCEED 0x00 // Default + +#define RFLR_HOPCHANNEL_PAYLOAD_CRC16_MASK 0xBF +#define RFLR_HOPCHANNEL_PAYLOAD_CRC16_ON 0x40 +#define RFLR_HOPCHANNEL_PAYLOAD_CRC16_OFF 0x00 // Default + +#define RFLR_HOPCHANNEL_CHANNEL_MASK 0x3F + + +/*! + * RegSymbTimeoutLsb + */ +#define RFLR_SYMBTIMEOUTLSB_SYMBTIMEOUT 0x64 // Default + +/*! + * RegPreambleLengthMsb + */ +#define RFLR_PREAMBLELENGTHMSB 0x00 // Default + +/*! + * RegPreambleLengthLsb + */ +#define RFLR_PREAMBLELENGTHLSB 0x08 // Default + +/*! + * RegPayloadLength + */ +#define RFLR_PAYLOADLENGTH 0x0E // Default + +/*! + * RegPayloadMaxLength + */ +#define RFLR_PAYLOADMAXLENGTH 0xFF // Default + +/*! + * RegHopPeriod + */ +#define RFLR_HOPPERIOD_FREQFOPPINGPERIOD 0x00 // Default + + +/*! + * RegDioMapping1 + */ +#define RFLR_DIOMAPPING1_DIO0_MASK 0x3F +#define RFLR_DIOMAPPING1_DIO0_00 0x00 // Default +#define RFLR_DIOMAPPING1_DIO0_01 0x40 +#define RFLR_DIOMAPPING1_DIO0_10 0x80 +#define RFLR_DIOMAPPING1_DIO0_11 0xC0 + +#define RFLR_DIOMAPPING1_DIO1_MASK 0xCF +#define RFLR_DIOMAPPING1_DIO1_00 0x00 // Default +#define RFLR_DIOMAPPING1_DIO1_01 0x10 +#define RFLR_DIOMAPPING1_DIO1_10 0x20 +#define RFLR_DIOMAPPING1_DIO1_11 0x30 + +#define RFLR_DIOMAPPING1_DIO2_MASK 0xF3 +#define RFLR_DIOMAPPING1_DIO2_00 0x00 // Default +#define RFLR_DIOMAPPING1_DIO2_01 0x04 +#define RFLR_DIOMAPPING1_DIO2_10 0x08 +#define RFLR_DIOMAPPING1_DIO2_11 0x0C + +#define RFLR_DIOMAPPING1_DIO3_MASK 0xFC +#define RFLR_DIOMAPPING1_DIO3_00 0x00 // Default +#define RFLR_DIOMAPPING1_DIO3_01 0x01 +#define RFLR_DIOMAPPING1_DIO3_10 0x02 +#define RFLR_DIOMAPPING1_DIO3_11 0x03 + +/*! + * RegDioMapping2 + */ +#define RFLR_DIOMAPPING2_DIO4_MASK 0x3F +#define RFLR_DIOMAPPING2_DIO4_00 0x00 // Default +#define RFLR_DIOMAPPING2_DIO4_01 0x40 +#define RFLR_DIOMAPPING2_DIO4_10 0x80 +#define RFLR_DIOMAPPING2_DIO4_11 0xC0 + +#define RFLR_DIOMAPPING2_DIO5_MASK 0xCF +#define RFLR_DIOMAPPING2_DIO5_00 0x00 // Default +#define RFLR_DIOMAPPING2_DIO5_01 0x10 +#define RFLR_DIOMAPPING2_DIO5_10 0x20 +#define RFLR_DIOMAPPING2_DIO5_11 0x30 + +#define RFLR_DIOMAPPING2_MAP_MASK 0xFE +#define RFLR_DIOMAPPING2_MAP_PREAMBLEDETECT 0x01 +#define RFLR_DIOMAPPING2_MAP_RSSI 0x00 // Default + +/*! + * RegVersion (Read Only) + */ + +/*! + * RegAgcRef + */ + +/*! + * RegAgcThresh1 + */ + +/*! + * RegAgcThresh2 + */ + +/*! + * RegAgcThresh3 + */ + +/*! + * RegFifoRxByteAddr (Read Only) + */ + +/*! + * RegPllHop + */ +#define RFLR_PLLHOP_FASTHOP_MASK 0x7F +#define RFLR_PLLHOP_FASTHOP_ON 0x80 +#define RFLR_PLLHOP_FASTHOP_OFF 0x00 // Default + +/*! + * RegTcxo + */ +#define RFLR_TCXO_TCXOINPUT_MASK 0xEF +#define RFLR_TCXO_TCXOINPUT_ON 0x10 +#define RFLR_TCXO_TCXOINPUT_OFF 0x00 // Default + +/*! + * RegPaDac + */ +#define RFLR_PADAC_20DBM_MASK 0xF8 +#define RFLR_PADAC_20DBM_ON 0x07 +#define RFLR_PADAC_20DBM_OFF 0x04 // Default + +/*! + * RegPll + */ +#define RFLR_PLL_BANDWIDTH_MASK 0x3F +#define RFLR_PLL_BANDWIDTH_75 0x00 +#define RFLR_PLL_BANDWIDTH_150 0x40 +#define RFLR_PLL_BANDWIDTH_225 0x80 +#define RFLR_PLL_BANDWIDTH_300 0xC0 // Default + +/*! + * RegPllLowPn + */ +#define RFLR_PLLLOWPN_BANDWIDTH_MASK 0x3F +#define RFLR_PLLLOWPN_BANDWIDTH_75 0x00 +#define RFLR_PLLLOWPN_BANDWIDTH_150 0x40 +#define RFLR_PLLLOWPN_BANDWIDTH_225 0x80 +#define RFLR_PLLLOWPN_BANDWIDTH_300 0xC0 // Default + +/*! + * RegModemConfig3 + */ +#define RFLR_MODEMCONFIG3_LOWDATARATEOPTIMIZE_MASK 0xF7 +#define RFLR_MODEMCONFIG3_LOWDATARATEOPTIMIZE_ON 0x08 +#define RFLR_MODEMCONFIG3_LOWDATARATEOPTIMIZE_OFF 0x00 // Default + +#define RFLR_MODEMCONFIG3_AGCAUTO_MASK 0xFB +#define RFLR_MODEMCONFIG3_AGCAUTO_ON 0x04 // Default +#define RFLR_MODEMCONFIG3_AGCAUTO_OFF 0x00 + +/*! + * RegFormerTemp + */ + +typedef struct sSX1276LR +{ + uint8_t RegFifo; // 0x00 + // Common settings + uint8_t RegOpMode; // 0x01 + uint8_t RegRes02; // 0x02 + uint8_t RegRes03; // 0x03 + uint8_t RegBandSetting; // 0x04 + uint8_t RegRes05; // 0x05 + uint8_t RegFrfMsb; // 0x06 + uint8_t RegFrfMid; // 0x07 + uint8_t RegFrfLsb; // 0x08 + // Tx settings + uint8_t RegPaConfig; // 0x09 + uint8_t RegPaRamp; // 0x0A + uint8_t RegOcp; // 0x0B + // Rx settings + uint8_t RegLna; // 0x0C + // LoRa registers + uint8_t RegFifoAddrPtr; // 0x0D + uint8_t RegFifoTxBaseAddr; // 0x0E + uint8_t RegFifoRxBaseAddr; // 0x0F + uint8_t RegFifoRxCurrentAddr; // 0x10 + uint8_t RegIrqFlagsMask; // 0x11 + uint8_t RegIrqFlags; // 0x12 + uint8_t RegNbRxBytes; // 0x13 + uint8_t RegRxHeaderCntValueMsb; // 0x14 + uint8_t RegRxHeaderCntValueLsb; // 0x15 + uint8_t RegRxPacketCntValueMsb; // 0x16 + uint8_t RegRxPacketCntValueLsb; // 0x17 + uint8_t RegModemStat; // 0x18 + uint8_t RegPktSnrValue; // 0x19 + uint8_t RegPktRssiValue; // 0x1A + uint8_t RegRssiValue; // 0x1B + uint8_t RegHopChannel; // 0x1C + uint8_t RegModemConfig1; // 0x1D + uint8_t RegModemConfig2; // 0x1E + uint8_t RegSymbTimeoutLsb; // 0x1F + uint8_t RegPreambleMsb; // 0x20 + uint8_t RegPreambleLsb; // 0x21 + uint8_t RegPayloadLength; // 0x22 + uint8_t RegMaxPayloadLength; // 0x23 + uint8_t RegHopPeriod; // 0x24 + uint8_t RegFifoRxByteAddr; // 0x25 + uint8_t RegModemConfig3; // 0x26 + uint8_t RegTestReserved27; // 0x27 + uint8_t RegFeiMsb; // 0x28 + uint8_t RegFeiMib; // 0x29 + uint8_t RegFeiLsb; // 0x2A + uint8_t RegTestReserved2B[0x30 - 0x2B]; // 0x2B-0x30 + uint8_t RegDetectOptimize; // 0x31 + uint8_t RegTestReserved32; // 0x32 + uint8_t RegInvertIQ; // 0x33 + uint8_t RegTestReserved34[0x36 - 0x34]; // 0x34-0x36 + uint8_t RegDetectionThreshold; // 0x37 + uint8_t RegTestReserved38[0x3F - 0x38]; // 0x38-0x3F + // I/O settings + uint8_t RegDioMapping1; // 0x40 + uint8_t RegDioMapping2; // 0x41 + // Version + uint8_t RegVersion; // 0x42 + // Test + uint8_t RegTestReserved43; // 0x43 + // Additional settings + uint8_t RegPllHop; // 0x44 + // Test + uint8_t RegTestReserved45[0x4A - 0x45]; // 0x45-0x4A + // Additional settings + uint8_t RegTcxo; // 0x4B + // Test + uint8_t RegTestReserved4C; // 0x4C + // Additional settings + uint8_t RegPaDac; // 0x4D + // Test + uint8_t RegTestReserved4E[0x5A - 0x4E]; // 0x4E-0x5A + // Additional settings + uint8_t RegFormerTemp; // 0x5B + // Test + uint8_t RegTestReserved5C; // 0x5C + // Additional settings + uint8_t RegBitrateFrac; // 0x5D + // Additional settings + uint8_t RegTestReserved5E[0x60 - 0x5E]; // 0x5E-0x60 + // Additional settings + uint8_t RegAgcRef; // 0x60 + uint8_t RegAgcThresh1; // 0x61 + uint8_t RegAgcThresh2; // 0x62 + uint8_t RegAgcThresh3; // 0x63 + // Test + uint8_t RegTestReserved64[0x70 - 0x64]; // 0x64-0x70 +}tSX1276LR; + +extern tSX1276LR* SX1276LR; + +/*! + * \brief Initializes the SX1276 + */ +void SX1276LoRaInit( void ); + +/*! + * \brief Sets the SX1276 to datasheet default values + */ +void SX1276LoRaSetDefaults( void ); + +/*! + * \brief Enables/Disables the LoRa modem + * + * \param [IN]: enable [true, false] + */ +void SX1276LoRaSetLoRaOn( bool enable ); + +/*! + * \brief Sets the SX1276 operating mode + * + * \param [IN] opMode New operating mode + */ +void SX1276LoRaSetOpMode( uint8_t opMode ); + +/*! + * \brief Gets the SX1276 operating mode + * + * \retval opMode Current operating mode + */ +uint8_t SX1276LoRaGetOpMode( void ); + +/*! + * \brief Reads the current Rx gain setting + * + * \retval rxGain Current gain setting + */ +uint8_t SX1276LoRaReadRxGain( void ); + +/*! + * \brief Trigs and reads the current RSSI value + * + * \retval rssiValue Current RSSI value in [dBm] + */ +double SX1276LoRaReadRssi( void ); + +/*! + * \brief Gets the Rx gain value measured while receiving the packet + * + * \retval rxGainValue Current Rx gain value + */ +uint8_t SX1276LoRaGetPacketRxGain( void ); + +/*! + * \brief Gets the SNR value measured while receiving the packet + * + * \retval snrValue Current SNR value in [dB] + */ +int8_t SX1276LoRaGetPacketSnr( void ); + +/*! + * \brief Gets the RSSI value measured while receiving the packet + * + * \retval rssiValue Current RSSI value in [dBm] + */ +double SX1276LoRaGetPacketRssi( void ); + +/*! + * \brief Sets the radio in Rx mode. Waiting for a packet + */ +void SX1276LoRaStartRx( void ); + +/*! + * \brief Gets a copy of the current received buffer + * + * \param [IN]: buffer Buffer pointer + * \param [IN]: size Buffer size + */ +void SX1276LoRaGetRxPacket( void *buffer, uint16_t *size ); + +/*! + * \brief Sets a copy of the buffer to be transmitted + * + * \param [IN]: buffer Buffer pointer + * \param [IN]: size Buffer size + */ +void SX1276LoRaSetTxPacket( const void *buffer, uint16_t size ); + +/*! + * \brief Gets the current RFState + * + * \retval rfState Current RF state [RF_IDLE, RF_BUSY, + * RF_RX_DONE, RF_RX_TIMEOUT, + * RF_TX_DONE, RF_TX_TIMEOUT] + */ +uint8_t SX1276LoRaGetRFState( void ); + +/*! + * \brief Sets the new state of the RF state machine + * + * \param [IN]: state New RF state machine state + */ +void SX1276LoRaSetRFState( uint8_t state ); + +/*! + * \brief Process the LoRa modem Rx and Tx state machines depending on the + * SX1276 operating mode. + * + * \retval rfState Current RF state [RF_IDLE, RF_BUSY, + * RF_RX_DONE, RF_RX_TIMEOUT, + * RF_TX_DONE, RF_TX_TIMEOUT] + */ +uint32_t SX1276LoRaProcess( void ); + +#endif //__SX1276_LORA_H__ \ No newline at end of file diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-LoRaMisc.c b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-LoRaMisc.c new file mode 100644 index 000000000..96b1e28d0 --- /dev/null +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-LoRaMisc.c @@ -0,0 +1,411 @@ +/* + * THE FOLLOWING FIRMWARE IS PROVIDED: (1) "AS IS" WITH NO WARRANTY; AND + * (2)TO ENABLE ACCESS TO CODING INFORMATION TO GUIDE AND FACILITATE CUSTOMER. + * CONSEQUENTLY, SEMTECH SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR + * CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT + * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION + * CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + * Copyright (C) SEMTECH S.A. + */ +/*! + * \file sx1276-LoRaMisc.c + * \brief SX1276 RF chip high level functions driver + * + * \remark Optional support functions. + * These functions are defined only to easy the change of the + * parameters. + * For a final firmware the radio parameters will be known so + * there is no need to support all possible parameters. + * Removing these functions will greatly reduce the final firmware + * size. + * + * \version 2.0.0 + * \date May 6 2013 + * \author Gregory Cristian + * + * Last modified by Miguel Luis on Jun 19 2013 + */ +#include "platform.h" + +#if defined( USE_SX1276_RADIO ) + +#include "sx1276-Hal.h" +#include "sx1276.h" + +#include "sx1276-LoRa.h" +#include "sx1276-LoRaMisc.h" + +/*! + * SX1276 definitions + */ +#define XTAL_FREQ 32000000 +#define FREQ_STEP 61.03515625 + +extern tLoRaSettings LoRaSettings; + +void SX1276LoRaSetRFFrequency( uint32_t freq ) +{ + LoRaSettings.RFFrequency = freq; + + freq = ( uint32_t )( ( double )freq / ( double )FREQ_STEP ); + SX1276LR->RegFrfMsb = ( uint8_t )( ( freq >> 16 ) & 0xFF ); + SX1276LR->RegFrfMid = ( uint8_t )( ( freq >> 8 ) & 0xFF ); + SX1276LR->RegFrfLsb = ( uint8_t )( freq & 0xFF ); + SX1276WriteBuffer( REG_LR_FRFMSB, &SX1276LR->RegFrfMsb, 3 ); +} + +uint32_t SX1276LoRaGetRFFrequency( void ) +{ + SX1276ReadBuffer( REG_LR_FRFMSB, &SX1276LR->RegFrfMsb, 3 ); + LoRaSettings.RFFrequency = ( ( uint32_t )SX1276LR->RegFrfMsb << 16 ) | ( ( uint32_t )SX1276LR->RegFrfMid << 8 ) | ( ( uint32_t )SX1276LR->RegFrfLsb ); + LoRaSettings.RFFrequency = ( uint32_t )( ( double )LoRaSettings.RFFrequency * ( double )FREQ_STEP ); + + return LoRaSettings.RFFrequency; +} + +void SX1276LoRaSetRFPower( int8_t power ) +{ + SX1276Read( REG_LR_PACONFIG, &SX1276LR->RegPaConfig ); + SX1276Read( REG_LR_PADAC, &SX1276LR->RegPaDac ); + + if( ( SX1276LR->RegPaConfig & RFLR_PACONFIG_PASELECT_PABOOST ) == RFLR_PACONFIG_PASELECT_PABOOST ) + { + if( ( SX1276LR->RegPaDac & 0x87 ) == 0x87 ) + { + if( power < 5 ) + { + power = 5; + } + if( power > 20 ) + { + power = 20; + } + SX1276LR->RegPaConfig = ( SX1276LR->RegPaConfig & RFLR_PACONFIG_MAX_POWER_MASK ) | 0x70; + SX1276LR->RegPaConfig = ( SX1276LR->RegPaConfig & RFLR_PACONFIG_OUTPUTPOWER_MASK ) | ( uint8_t )( ( uint16_t )( power - 5 ) & 0x0F ); + } + else + { + if( power < 2 ) + { + power = 2; + } + if( power > 17 ) + { + power = 17; + } + SX1276LR->RegPaConfig = ( SX1276LR->RegPaConfig & RFLR_PACONFIG_MAX_POWER_MASK ) | 0x70; + SX1276LR->RegPaConfig = ( SX1276LR->RegPaConfig & RFLR_PACONFIG_OUTPUTPOWER_MASK ) | ( uint8_t )( ( uint16_t )( power - 2 ) & 0x0F ); + } + } + else + { + if( power < -1 ) + { + power = -1; + } + if( power > 14 ) + { + power = 14; + } + SX1276LR->RegPaConfig = ( SX1276LR->RegPaConfig & RFLR_PACONFIG_MAX_POWER_MASK ) | 0x70; + SX1276LR->RegPaConfig = ( SX1276LR->RegPaConfig & RFLR_PACONFIG_OUTPUTPOWER_MASK ) | ( uint8_t )( ( uint16_t )( power + 1 ) & 0x0F ); + } + SX1276Write( REG_LR_PACONFIG, SX1276LR->RegPaConfig ); + LoRaSettings.Power = power; +} + +int8_t SX1276LoRaGetRFPower( void ) +{ + SX1276Read( REG_LR_PACONFIG, &SX1276LR->RegPaConfig ); + SX1276Read( REG_LR_PADAC, &SX1276LR->RegPaDac ); + + if( ( SX1276LR->RegPaConfig & RFLR_PACONFIG_PASELECT_PABOOST ) == RFLR_PACONFIG_PASELECT_PABOOST ) + { + if( ( SX1276LR->RegPaDac & 0x07 ) == 0x07 ) + { + LoRaSettings.Power = 5 + ( SX1276LR->RegPaConfig & ~RFLR_PACONFIG_OUTPUTPOWER_MASK ); + } + else + { + LoRaSettings.Power = 2 + ( SX1276LR->RegPaConfig & ~RFLR_PACONFIG_OUTPUTPOWER_MASK ); + } + } + else + { + LoRaSettings.Power = -1 + ( SX1276LR->RegPaConfig & ~RFLR_PACONFIG_OUTPUTPOWER_MASK ); + } + return LoRaSettings.Power; +} + +void SX1276LoRaSetSignalBandwidth( uint8_t bw ) +{ + SX1276Read( REG_LR_MODEMCONFIG1, &SX1276LR->RegModemConfig1 ); + SX1276LR->RegModemConfig1 = ( SX1276LR->RegModemConfig1 & RFLR_MODEMCONFIG1_BW_MASK ) | ( bw << 4 ); + SX1276Write( REG_LR_MODEMCONFIG1, SX1276LR->RegModemConfig1 ); + LoRaSettings.SignalBw = bw; +} + +uint8_t SX1276LoRaGetSignalBandwidth( void ) +{ + SX1276Read( REG_LR_MODEMCONFIG1, &SX1276LR->RegModemConfig1 ); + LoRaSettings.SignalBw = ( SX1276LR->RegModemConfig1 & ~RFLR_MODEMCONFIG1_BW_MASK ) >> 4; + return LoRaSettings.SignalBw; +} + +void SX1276LoRaSetSpreadingFactor( uint8_t factor ) +{ + + if( factor > 12 ) + { + factor = 12; + } + else if( factor < 6 ) + { + factor = 6; + } + + if( factor == 6 ) + { + SX1276LoRaSetNbTrigPeaks( 5 ); + } + else + { + SX1276LoRaSetNbTrigPeaks( 3 ); + } + + SX1276Read( REG_LR_MODEMCONFIG2, &SX1276LR->RegModemConfig2 ); + SX1276LR->RegModemConfig2 = ( SX1276LR->RegModemConfig2 & RFLR_MODEMCONFIG2_SF_MASK ) | ( factor << 4 ); + SX1276Write( REG_LR_MODEMCONFIG2, SX1276LR->RegModemConfig2 ); + LoRaSettings.SpreadingFactor = factor; +} + +uint8_t SX1276LoRaGetSpreadingFactor( void ) +{ + SX1276Read( REG_LR_MODEMCONFIG2, &SX1276LR->RegModemConfig2 ); + LoRaSettings.SpreadingFactor = ( SX1276LR->RegModemConfig2 & ~RFLR_MODEMCONFIG2_SF_MASK ) >> 4; + return LoRaSettings.SpreadingFactor; +} + +void SX1276LoRaSetErrorCoding( uint8_t value ) +{ + SX1276Read( REG_LR_MODEMCONFIG1, &SX1276LR->RegModemConfig1 ); + SX1276LR->RegModemConfig1 = ( SX1276LR->RegModemConfig1 & RFLR_MODEMCONFIG1_CODINGRATE_MASK ) | ( value << 1 ); + SX1276Write( REG_LR_MODEMCONFIG1, SX1276LR->RegModemConfig1 ); + LoRaSettings.ErrorCoding = value; +} + +uint8_t SX1276LoRaGetErrorCoding( void ) +{ + SX1276Read( REG_LR_MODEMCONFIG1, &SX1276LR->RegModemConfig1 ); + LoRaSettings.ErrorCoding = ( SX1276LR->RegModemConfig1 & ~RFLR_MODEMCONFIG1_CODINGRATE_MASK ) >> 1; + return LoRaSettings.ErrorCoding; +} + +void SX1276LoRaSetPacketCrcOn( bool enable ) +{ + SX1276Read( REG_LR_MODEMCONFIG2, &SX1276LR->RegModemConfig2 ); + SX1276LR->RegModemConfig2 = ( SX1276LR->RegModemConfig2 & RFLR_MODEMCONFIG2_RXPAYLOADCRC_MASK ) | ( enable << 2 ); + SX1276Write( REG_LR_MODEMCONFIG2, SX1276LR->RegModemConfig2 ); + LoRaSettings.CrcOn = enable; +} + +void SX1276LoRaSetPreambleLength( uint16_t value ) +{ + SX1276ReadBuffer( REG_LR_PREAMBLEMSB, &SX1276LR->RegPreambleMsb, 2 ); + + SX1276LR->RegPreambleMsb = ( value >> 8 ) & 0x00FF; + SX1276LR->RegPreambleLsb = value & 0xFF; + SX1276WriteBuffer( REG_LR_PREAMBLEMSB, &SX1276LR->RegPreambleMsb, 2 ); +} + +uint16_t SX1276LoRaGetPreambleLength( void ) +{ + SX1276ReadBuffer( REG_LR_PREAMBLEMSB, &SX1276LR->RegPreambleMsb, 2 ); + return ( ( SX1276LR->RegPreambleMsb & 0x00FF ) << 8 ) | SX1276LR->RegPreambleLsb; +} + +bool SX1276LoRaGetPacketCrcOn( void ) +{ + SX1276Read( REG_LR_MODEMCONFIG2, &SX1276LR->RegModemConfig2 ); + LoRaSettings.CrcOn = ( SX1276LR->RegModemConfig2 & RFLR_MODEMCONFIG2_RXPAYLOADCRC_ON ) >> 1; + return LoRaSettings.CrcOn; +} + +void SX1276LoRaSetImplicitHeaderOn( bool enable ) +{ + SX1276Read( REG_LR_MODEMCONFIG1, &SX1276LR->RegModemConfig1 ); + SX1276LR->RegModemConfig1 = ( SX1276LR->RegModemConfig1 & RFLR_MODEMCONFIG1_IMPLICITHEADER_MASK ) | ( enable ); + SX1276Write( REG_LR_MODEMCONFIG1, SX1276LR->RegModemConfig1 ); + LoRaSettings.ImplicitHeaderOn = enable; +} + +bool SX1276LoRaGetImplicitHeaderOn( void ) +{ + SX1276Read( REG_LR_MODEMCONFIG1, &SX1276LR->RegModemConfig1 ); + LoRaSettings.ImplicitHeaderOn = ( SX1276LR->RegModemConfig1 & RFLR_MODEMCONFIG1_IMPLICITHEADER_ON ); + return LoRaSettings.ImplicitHeaderOn; +} + +void SX1276LoRaSetRxSingleOn( bool enable ) +{ + LoRaSettings.RxSingleOn = enable; +} + +bool SX1276LoRaGetRxSingleOn( void ) +{ + return LoRaSettings.RxSingleOn; +} + +void SX1276LoRaSetFreqHopOn( bool enable ) +{ + LoRaSettings.FreqHopOn = enable; +} + +bool SX1276LoRaGetFreqHopOn( void ) +{ + return LoRaSettings.FreqHopOn; +} + +void SX1276LoRaSetHopPeriod( uint8_t value ) +{ + SX1276LR->RegHopPeriod = value; + SX1276Write( REG_LR_HOPPERIOD, SX1276LR->RegHopPeriod ); + LoRaSettings.HopPeriod = value; +} + +uint8_t SX1276LoRaGetHopPeriod( void ) +{ + SX1276Read( REG_LR_HOPPERIOD, &SX1276LR->RegHopPeriod ); + LoRaSettings.HopPeriod = SX1276LR->RegHopPeriod; + return LoRaSettings.HopPeriod; +} + +void SX1276LoRaSetTxPacketTimeout( uint32_t value ) +{ + LoRaSettings.TxPacketTimeout = value; +} + +uint32_t SX1276LoRaGetTxPacketTimeout( void ) +{ + return LoRaSettings.TxPacketTimeout; +} + +void SX1276LoRaSetRxPacketTimeout( uint32_t value ) +{ + LoRaSettings.RxPacketTimeout = value; +} + +uint32_t SX1276LoRaGetRxPacketTimeout( void ) +{ + return LoRaSettings.RxPacketTimeout; +} + +void SX1276LoRaSetPayloadLength( uint8_t value ) +{ + SX1276LR->RegPayloadLength = value; + SX1276Write( REG_LR_PAYLOADLENGTH, SX1276LR->RegPayloadLength ); + LoRaSettings.PayloadLength = value; +} + +uint8_t SX1276LoRaGetPayloadLength( void ) +{ + SX1276Read( REG_LR_PAYLOADLENGTH, &SX1276LR->RegPayloadLength ); + LoRaSettings.PayloadLength = SX1276LR->RegPayloadLength; + return LoRaSettings.PayloadLength; +} + +void SX1276LoRaSetPa20dBm( bool enale ) +{ + SX1276Read( REG_LR_PADAC, &SX1276LR->RegPaDac ); + SX1276Read( REG_LR_PACONFIG, &SX1276LR->RegPaConfig ); + + if( ( SX1276LR->RegPaConfig & RFLR_PACONFIG_PASELECT_PABOOST ) == RFLR_PACONFIG_PASELECT_PABOOST ) + { + if( enale == true ) + { + SX1276LR->RegPaDac = 0x87; + } + } + else + { + SX1276LR->RegPaDac = 0x84; + } + SX1276Write( REG_LR_PADAC, SX1276LR->RegPaDac ); +} + +bool SX1276LoRaGetPa20dBm( void ) +{ + SX1276Read( REG_LR_PADAC, &SX1276LR->RegPaDac ); + + return ( ( SX1276LR->RegPaDac & 0x07 ) == 0x07 ) ? true : false; +} + +void SX1276LoRaSetPAOutput( uint8_t outputPin ) +{ + SX1276Read( REG_LR_PACONFIG, &SX1276LR->RegPaConfig ); + SX1276LR->RegPaConfig = (SX1276LR->RegPaConfig & RFLR_PACONFIG_PASELECT_MASK ) | outputPin; + SX1276Write( REG_LR_PACONFIG, SX1276LR->RegPaConfig ); +} + +uint8_t SX1276LoRaGetPAOutput( void ) +{ + SX1276Read( REG_LR_PACONFIG, &SX1276LR->RegPaConfig ); + return SX1276LR->RegPaConfig & ~RFLR_PACONFIG_PASELECT_MASK; +} + +void SX1276LoRaSetPaRamp( uint8_t value ) +{ + SX1276Read( REG_LR_PARAMP, &SX1276LR->RegPaRamp ); + SX1276LR->RegPaRamp = ( SX1276LR->RegPaRamp & RFLR_PARAMP_MASK ) | ( value & ~RFLR_PARAMP_MASK ); + SX1276Write( REG_LR_PARAMP, SX1276LR->RegPaRamp ); +} + +uint8_t SX1276LoRaGetPaRamp( void ) +{ + SX1276Read( REG_LR_PARAMP, &SX1276LR->RegPaRamp ); + return SX1276LR->RegPaRamp & ~RFLR_PARAMP_MASK; +} + +void SX1276LoRaSetSymbTimeout( uint16_t value ) +{ + SX1276ReadBuffer( REG_LR_MODEMCONFIG2, &SX1276LR->RegModemConfig2, 2 ); + + SX1276LR->RegModemConfig2 = ( SX1276LR->RegModemConfig2 & RFLR_MODEMCONFIG2_SYMBTIMEOUTMSB_MASK ) | ( ( value >> 8 ) & ~RFLR_MODEMCONFIG2_SYMBTIMEOUTMSB_MASK ); + SX1276LR->RegSymbTimeoutLsb = value & 0xFF; + SX1276WriteBuffer( REG_LR_MODEMCONFIG2, &SX1276LR->RegModemConfig2, 2 ); +} + +uint16_t SX1276LoRaGetSymbTimeout( void ) +{ + SX1276ReadBuffer( REG_LR_MODEMCONFIG2, &SX1276LR->RegModemConfig2, 2 ); + return ( ( SX1276LR->RegModemConfig2 & ~RFLR_MODEMCONFIG2_SYMBTIMEOUTMSB_MASK ) << 8 ) | SX1276LR->RegSymbTimeoutLsb; +} + +void SX1276LoRaSetLowDatarateOptimize( bool enable ) +{ + SX1276Read( REG_LR_MODEMCONFIG3, &SX1276LR->RegModemConfig3 ); + SX1276LR->RegModemConfig3 = ( SX1276LR->RegModemConfig3 & RFLR_MODEMCONFIG3_LOWDATARATEOPTIMIZE_MASK ) | ( enable << 3 ); + SX1276Write( REG_LR_MODEMCONFIG3, SX1276LR->RegModemConfig3 ); +} + +bool SX1276LoRaGetLowDatarateOptimize( void ) +{ + SX1276Read( REG_LR_MODEMCONFIG3, &SX1276LR->RegModemConfig3 ); + return ( ( SX1276LR->RegModemConfig3 & RFLR_MODEMCONFIG3_LOWDATARATEOPTIMIZE_ON ) >> 3 ); +} + +void SX1276LoRaSetNbTrigPeaks( uint8_t value ) +{ + SX1276Read( 0x31, &SX1276LR->RegDetectOptimize ); + SX1276LR->RegDetectOptimize = ( SX1276LR->RegDetectOptimize & 0xF8 ) | value; + SX1276Write( 0x31, SX1276LR->RegDetectOptimize ); +} + +uint8_t SX1276LoRaGetNbTrigPeaks( void ) +{ + SX1276Read( 0x31, &SX1276LR->RegDetectOptimize ); + return ( SX1276LR->RegDetectOptimize & 0x07 ); +} + +#endif // USE_SX1276_RADIO diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-LoRaMisc.h b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-LoRaMisc.h new file mode 100644 index 000000000..3f5d7e5fa --- /dev/null +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276-LoRaMisc.h @@ -0,0 +1,315 @@ +/* + * THE FOLLOWING FIRMWARE IS PROVIDED: (1) "AS IS" WITH NO WARRANTY; AND + * (2)TO ENABLE ACCESS TO CODING INFORMATION TO GUIDE AND FACILITATE CUSTOMER. + * CONSEQUENTLY, SEMTECH SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR + * CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT + * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION + * CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + * Copyright (C) SEMTECH S.A. + */ +/*! + * \file sx1276-LoRaMisc.h + * \brief SX1276 RF chip high level functions driver + * + * \remark Optional support functions. + * These functions are defined only to easy the change of the + * parameters. + * For a final firmware the radio parameters will be known so + * there is no need to support all possible parameters. + * Removing these functions will greatly reduce the final firmware + * size. + * + * \version 2.0.B2 + * \date May 6 2013 + * \author Gregory Cristian + * + * Last modified by Miguel Luis on Jun 19 2013 + */ +#ifndef __SX1276_LORA_MISC_H__ +#define __SX1276_LORA_MISC_H__ + + +/*! + * \brief Writes the new RF frequency value + * + * \param [IN] freq New RF frequency value in [Hz] + */ +void SX1276LoRaSetRFFrequency( uint32_t freq ); + +/*! + * \brief Reads the current RF frequency value + * + * \retval freq Current RF frequency value in [Hz] + */ +uint32_t SX1276LoRaGetRFFrequency( void ); + +/*! + * \brief Writes the new RF output power value + * + * \param [IN] power New output power value in [dBm] + */ +void SX1276LoRaSetRFPower( int8_t power ); + +/*! + * \brief Reads the current RF output power value + * + * \retval power Current output power value in [dBm] + */ +int8_t SX1276LoRaGetRFPower( void ); + +/*! + * \brief Writes the new Signal Bandwidth value + * + * \remark This function sets the IF frequency according to the datasheet + * + * \param [IN] factor New Signal Bandwidth value [0: 125 kHz, 1: 250 kHz, 2: 500 kHz] + */ +void SX1276LoRaSetSignalBandwidth( uint8_t bw ); + +/*! + * \brief Reads the current Signal Bandwidth value + * + * \retval factor Current Signal Bandwidth value [0: 125 kHz, 1: 250 kHz, 2: 500 kHz] + */ +uint8_t SX1276LoRaGetSignalBandwidth( void ); + +/*! + * \brief Writes the new Spreading Factor value + * + * \param [IN] factor New Spreading Factor value [7, 8, 9, 10, 11, 12] + */ +void SX1276LoRaSetSpreadingFactor( uint8_t factor ); + +/*! + * \brief Reads the current Spreading Factor value + * + * \retval factor Current Spreading Factor value [7, 8, 9, 10, 11, 12] + */ +uint8_t SX1276LoRaGetSpreadingFactor( void ); + +/*! + * \brief Writes the new Error Coding value + * + * \param [IN] value New Error Coding value [1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8] + */ +void SX1276LoRaSetErrorCoding( uint8_t value ); + +/*! + * \brief Reads the current Error Coding value + * + * \retval value Current Error Coding value [1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8] + */ +uint8_t SX1276LoRaGetErrorCoding( void ); + +/*! + * \brief Enables/Disables the packet CRC generation + * + * \param [IN] enaable [true, false] + */ +void SX1276LoRaSetPacketCrcOn( bool enable ); + +/*! + * \brief Reads the current packet CRC generation status + * + * \retval enable [true, false] + */ +bool SX1276LoRaGetPacketCrcOn( void ); + +/*! + * \brief Enables/Disables the Implicit Header mode in LoRa + * + * \param [IN] enable [true, false] + */ +void SX1276LoRaSetImplicitHeaderOn( bool enable ); + +/*! + * \brief Check if implicit header mode in LoRa in enabled or disabled + * + * \retval enable [true, false] + */ +bool SX1276LoRaGetImplicitHeaderOn( void ); + +/*! + * \brief Enables/Disables Rx single instead of Rx continuous + * + * \param [IN] enable [true, false] + */ +void SX1276LoRaSetRxSingleOn( bool enable ); + +/*! + * \brief Check if LoRa is in Rx Single mode + * + * \retval enable [true, false] + */ +bool SX1276LoRaGetRxSingleOn( void ); + +/*! + * \brief Enables/Disables the frequency hopping + * + * \param [IN] enable [true, false] + */ + +void SX1276LoRaSetFreqHopOn( bool enable ); + +/*! + * \brief Get the frequency hopping status + * + * \param [IN] enable [true, false] + */ +bool SX1276LoRaGetFreqHopOn( void ); + +/*! + * \brief Set symbol period between frequency hops + * + * \param [IN] value + */ +void SX1276LoRaSetHopPeriod( uint8_t value ); + +/*! + * \brief Get symbol period between frequency hops + * + * \retval value symbol period between frequency hops + */ +uint8_t SX1276LoRaGetHopPeriod( void ); + +/*! + * \brief Set timeout Tx packet (based on MCU timer, timeout between Tx Mode entry Tx Done IRQ) + * + * \param [IN] value timeout (ms) + */ +void SX1276LoRaSetTxPacketTimeout( uint32_t value ); + +/*! + * \brief Get timeout between Tx packet (based on MCU timer, timeout between Tx Mode entry Tx Done IRQ) + * + * \retval value timeout (ms) + */ +uint32_t SX1276LoRaGetTxPacketTimeout( void ); + +/*! + * \brief Set timeout Rx packet (based on MCU timer, timeout between Rx Mode entry and Rx Done IRQ) + * + * \param [IN] value timeout (ms) + */ +void SX1276LoRaSetRxPacketTimeout( uint32_t value ); + +/*! + * \brief Get timeout Rx packet (based on MCU timer, timeout between Rx Mode entry and Rx Done IRQ) + * + * \retval value timeout (ms) + */ +uint32_t SX1276LoRaGetRxPacketTimeout( void ); + +/*! + * \brief Set payload length + * + * \param [IN] value payload length + */ +void SX1276LoRaSetPayloadLength( uint8_t value ); + +/*! + * \brief Get payload length + * + * \retval value payload length + */ +uint8_t SX1276LoRaGetPayloadLength( void ); + +/*! + * \brief Enables/Disables the 20 dBm PA + * + * \param [IN] enable [true, false] + */ +void SX1276LoRaSetPa20dBm( bool enale ); + +/*! + * \brief Gets the current 20 dBm PA status + * + * \retval enable [true, false] + */ +bool SX1276LoRaGetPa20dBm( void ); + +/*! + * \brief Set the RF Output pin + * + * \param [IN] RF_PACONFIG_PASELECT_PABOOST or RF_PACONFIG_PASELECT_RFO + */ +void SX1276LoRaSetPAOutput( uint8_t outputPin ); + +/*! + * \brief Gets the used RF Ouptut pin + * + * \retval RF_PACONFIG_PASELECT_PABOOST or RF_PACONFIG_PASELECT_RFO + */ +uint8_t SX1276LoRaGetPAOutput( void ); + +/*! + * \brief Writes the new PA rise/fall time of ramp up/down value + * + * \param [IN] value New PaRamp value + */ +void SX1276LoRaSetPaRamp( uint8_t value ); + +/*! + * \brief Reads the current PA rise/fall time of ramp up/down value + * + * \retval freq Current PaRamp value + */ +uint8_t SX1276LoRaGetPaRamp( void ); + +/*! + * \brief Set Symbol Timeout based on symbol length + * + * \param [IN] value number of symbol + */ +void SX1276LoRaSetSymbTimeout( uint16_t value ); + +/*! + * \brief Get Symbol Timeout based on symbol length + * + * \retval value number of symbol + */ +uint16_t SX1276LoRaGetSymbTimeout( void ); + +/*! + * \brief Configure the device to optimize low datarate transfers + * + * \param [IN] enable Enables/Disables the low datarate optimization + */ +void SX1276LoRaSetLowDatarateOptimize( bool enable ); + +/*! + * \brief Get the status of optimize low datarate transfers + * + * \retval LowDatarateOptimize enable or disable + */ +bool SX1276LoRaGetLowDatarateOptimize( void ); + +/*! + * \brief Get the preamble length + * + * \retval value preamble length + */ +uint16_t SX1276LoRaGetPreambleLength( void ); + +/*! + * \brief Set the preamble length + * + * \param [IN] value preamble length + */ +void SX1276LoRaSetPreambleLength( uint16_t value ); + +/*! + * \brief Set the number or rolling preamble symbol needed for detection + * + * \param [IN] value number of preamble symbol + */ +void SX1276LoRaSetNbTrigPeaks( uint8_t value ); + +/*! + * \brief Get the number or rolling preamble symbol needed for detection + * + * \retval value number of preamble symbol + */ +uint8_t SX1276LoRaGetNbTrigPeaks( void ); +#endif //__SX1276_LORA_MISC_H__ \ No newline at end of file diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276.c b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276.c new file mode 100644 index 000000000..903afe843 --- /dev/null +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276.c @@ -0,0 +1,304 @@ +/* + * THE FOLLOWING FIRMWARE IS PROVIDED: (1) "AS IS" WITH NO WARRANTY; AND + * (2)TO ENABLE ACCESS TO CODING INFORMATION TO GUIDE AND FACILITATE CUSTOMER. + * CONSEQUENTLY, SEMTECH SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR + * CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT + * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION + * CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + * Copyright (C) SEMTECH S.A. + */ +/*! + * \file sx1276.c + * \brief SX1276 RF chip driver + * + * \version 2.0.0 + * \date May 6 2013 + * \author Gregory Cristian + * + * Last modified by Miguel Luis on Jun 19 2013 + */ +#include "platform.h" +#include "radio.h" + +#if defined( USE_SX1276_RADIO ) + +#include "sx1276.h" + +#include "sx1276-Hal.h" +#include "sx1276-Fsk.h" +#include "sx1276-LoRa.h" + +/*! + * SX1276 registers variable + */ +uint8_t SX1276Regs[0x70]; + +static bool LoRaOn = true; +static bool LoRaOnState = false; + +void SX1276Init( void ) +{ + // Initialize FSK and LoRa registers structure + SX1276 = ( tSX1276* )SX1276Regs; + SX1276LR = ( tSX1276LR* )SX1276Regs; + + SX1276InitIo( ); + + SX1276Reset( ); + + // REMARK: After radio reset the default modem is FSK + +#if ( LORA == 0 ) + + LoRaOn = false; + SX1276SetLoRaOn( LoRaOn ); + // Initialize FSK modem + SX1276FskInit( ); + +#else + + LoRaOn = true; + SX1276SetLoRaOn( LoRaOn ); + // Initialize LoRa modem + SX1276LoRaInit( ); + +#endif + +} + +void SX1276Reset( void ) +{ + SX1276SetReset( RADIO_RESET_ON ); + + // Wait 1ms + uint32_t startTick = GET_TICK_COUNT( ); + while( ( GET_TICK_COUNT( ) - startTick ) < TICK_RATE_MS( 1 ) ); + + SX1276SetReset( RADIO_RESET_OFF ); + + // Wait 6ms + startTick = GET_TICK_COUNT( ); + while( ( GET_TICK_COUNT( ) - startTick ) < TICK_RATE_MS( 6 ) ); +} + +void SX1276SetLoRaOn( bool enable ) +{ + if( LoRaOnState == enable ) + { + return; + } + LoRaOnState = enable; + LoRaOn = enable; + + if( LoRaOn == true ) + { + SX1276LoRaSetOpMode( RFLR_OPMODE_SLEEP ); + + SX1276LR->RegOpMode = ( SX1276LR->RegOpMode & RFLR_OPMODE_LONGRANGEMODE_MASK ) | RFLR_OPMODE_LONGRANGEMODE_ON; + SX1276Write( REG_LR_OPMODE, SX1276LR->RegOpMode ); + + SX1276LoRaSetOpMode( RFLR_OPMODE_STANDBY ); + // RxDone RxTimeout FhssChangeChannel CadDone + SX1276LR->RegDioMapping1 = RFLR_DIOMAPPING1_DIO0_00 | RFLR_DIOMAPPING1_DIO1_00 | RFLR_DIOMAPPING1_DIO2_00 | RFLR_DIOMAPPING1_DIO3_00; + // CadDetected ModeReady + SX1276LR->RegDioMapping2 = RFLR_DIOMAPPING2_DIO4_00 | RFLR_DIOMAPPING2_DIO5_00; + SX1276WriteBuffer( REG_LR_DIOMAPPING1, &SX1276LR->RegDioMapping1, 2 ); + + SX1276ReadBuffer( REG_LR_OPMODE, SX1276Regs + 1, 0x70 - 1 ); + } + else + { + SX1276LoRaSetOpMode( RFLR_OPMODE_SLEEP ); + + SX1276LR->RegOpMode = ( SX1276LR->RegOpMode & RFLR_OPMODE_LONGRANGEMODE_MASK ) | RFLR_OPMODE_LONGRANGEMODE_OFF; + SX1276Write( REG_LR_OPMODE, SX1276LR->RegOpMode ); + + SX1276LoRaSetOpMode( RFLR_OPMODE_STANDBY ); + + SX1276ReadBuffer( REG_OPMODE, SX1276Regs + 1, 0x70 - 1 ); + } +} + +bool SX1276GetLoRaOn( void ) +{ + return LoRaOn; +} + +void SX1276SetOpMode( uint8_t opMode ) +{ + if( LoRaOn == false ) + { + SX1276FskSetOpMode( opMode ); + } + else + { + SX1276LoRaSetOpMode( opMode ); + } +} + +uint8_t SX1276GetOpMode( void ) +{ + if( LoRaOn == false ) + { + return SX1276FskGetOpMode( ); + } + else + { + return SX1276LoRaGetOpMode( ); + } +} + +double SX1276ReadRssi( void ) +{ + if( LoRaOn == false ) + { + return SX1276FskReadRssi( ); + } + else + { + return SX1276LoRaReadRssi( ); + } +} + +uint8_t SX1276ReadRxGain( void ) +{ + if( LoRaOn == false ) + { + return SX1276FskReadRxGain( ); + } + else + { + return SX1276LoRaReadRxGain( ); + } +} + +uint8_t SX1276GetPacketRxGain( void ) +{ + if( LoRaOn == false ) + { + return SX1276FskGetPacketRxGain( ); + } + else + { + return SX1276LoRaGetPacketRxGain( ); + } +} + +int8_t SX1276GetPacketSnr( void ) +{ + if( LoRaOn == false ) + { + while( 1 ) + { + // Useless in FSK mode + // Block program here + } + } + else + { + return SX1276LoRaGetPacketSnr( ); + } +} + +double SX1276GetPacketRssi( void ) +{ + if( LoRaOn == false ) + { + return SX1276FskGetPacketRssi( ); + } + else + { + return SX1276LoRaGetPacketRssi( ); + } +} + +uint32_t SX1276GetPacketAfc( void ) +{ + if( LoRaOn == false ) + { + return SX1276FskGetPacketAfc( ); + } + else + { + while( 1 ) + { + // Useless in LoRa mode + // Block program here + } + } +} + +void SX1276StartRx( void ) +{ + if( LoRaOn == false ) + { + SX1276FskSetRFState( RF_STATE_RX_INIT ); + } + else + { + SX1276LoRaSetRFState( RFLR_STATE_RX_INIT ); + } +} + +void SX1276GetRxPacket( void *buffer, uint16_t *size ) +{ + if( LoRaOn == false ) + { + SX1276FskGetRxPacket( buffer, size ); + } + else + { + SX1276LoRaGetRxPacket( buffer, size ); + } +} + +void SX1276SetTxPacket( const void *buffer, uint16_t size ) +{ + if( LoRaOn == false ) + { + SX1276FskSetTxPacket( buffer, size ); + } + else + { + SX1276LoRaSetTxPacket( buffer, size ); + } +} + +uint8_t SX1276GetRFState( void ) +{ + if( LoRaOn == false ) + { + return SX1276FskGetRFState( ); + } + else + { + return SX1276LoRaGetRFState( ); + } +} + +void SX1276SetRFState( uint8_t state ) +{ + if( LoRaOn == false ) + { + SX1276FskSetRFState( state ); + } + else + { + SX1276LoRaSetRFState( state ); + } +} + +uint32_t SX1276Process( void ) +{ + if( LoRaOn == false ) + { + return SX1276FskProcess( ); + } + else + { + return SX1276LoRaProcess( ); + } +} + +#endif // USE_SX1276_RADIO diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276.h b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276.h new file mode 100644 index 000000000..45cd0c8ca --- /dev/null +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/src/radio/sx1276.h @@ -0,0 +1,157 @@ +/* + * THE FOLLOWING FIRMWARE IS PROVIDED: (1) "AS IS" WITH NO WARRANTY; AND + * (2)TO ENABLE ACCESS TO CODING INFORMATION TO GUIDE AND FACILITATE CUSTOMER. + * CONSEQUENTLY, SEMTECH SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR + * CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT + * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION + * CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + * Copyright (C) SEMTECH S.A. + */ +/*! + * \file sx1276.h + * \brief SX1276 RF chip driver + * + * \version 2.0.B2 + * \date May 6 2013 + * \author Gregory Cristian + * + * Last modified by Miguel Luis on Jun 19 2013 + */ +#ifndef __SX1276_H__ +#define __SX1276_H__ + +/*! + * \brief SX1276 registers array + */ +extern uint8_t SX1276Regs[0x70]; + +/*! + * \brief Enables LoRa modem or FSK modem + * + * \param [IN] opMode New operating mode + */ +void SX1276SetLoRaOn( bool enable ); + +/*! + * \brief Gets the LoRa modem state + * + * \retval LoraOn Current LoRa modem mode + */ +bool SX1276GetLoRaOn( void ); + +/*! + * \brief Initializes the SX1276 + */ +void SX1276Init( void ); + +/*! + * \brief Resets the SX1276 + */ +void SX1276Reset( void ); + +/*! + * \brief Sets the SX1276 operating mode + * + * \param [IN] opMode New operating mode + */ +void SX1276SetOpMode( uint8_t opMode ); + +/*! + * \brief Gets the SX1276 operating mode + * + * \retval opMode Current operating mode + */ +uint8_t SX1276GetOpMode( void ); + +/*! + * \brief Reads the current Rx gain setting + * + * \retval rxGain Current gain setting + */ +uint8_t SX1276ReadRxGain( void ); + +/*! + * \brief Trigs and reads the current RSSI value + * + * \retval rssiValue Current RSSI value in [dBm] + */ +double SX1276ReadRssi( void ); + +/*! + * \brief Gets the Rx gain value measured while receiving the packet + * + * \retval rxGainValue Current Rx gain value + */ +uint8_t SX1276GetPacketRxGain( void ); + +/*! + * \brief Gets the SNR value measured while receiving the packet + * + * \retval snrValue Current SNR value in [dB] + */ +int8_t SX1276GetPacketSnr( void ); + +/*! + * \brief Gets the RSSI value measured while receiving the packet + * + * \retval rssiValue Current RSSI value in [dBm] + */ +double SX1276GetPacketRssi( void ); + +/*! + * \brief Gets the AFC value measured while receiving the packet + * + * \retval afcValue Current AFC value in [Hz] + */ +uint32_t SX1276GetPacketAfc( void ); + +/*! + * \brief Sets the radio in Rx mode. Waiting for a packet + */ +void SX1276StartRx( void ); + +/*! + * \brief Gets a copy of the current received buffer + * + * \param [IN]: buffer Buffer pointer + * \param [IN]: size Buffer size + */ +void SX1276GetRxPacket( void *buffer, uint16_t *size ); + +/*! + * \brief Sets a copy of the buffer to be transmitted and starts the + * transmission + * + * \param [IN]: buffer Buffer pointer + * \param [IN]: size Buffer size + */ +void SX1276SetTxPacket( const void *buffer, uint16_t size ); + +/*! + * \brief Gets the current RFState + * + * \retval rfState Current RF state [RF_IDLE, RF_BUSY, + * RF_RX_DONE, RF_RX_TIMEOUT, + * RF_TX_DONE, RF_TX_TIMEOUT] + */ +uint8_t SX1276GetRFState( void ); + +/*! + * \brief Sets the new state of the RF state machine + * + * \param [IN]: state New RF state machine state + */ +void SX1276SetRFState( uint8_t state ); + +/*! + * \brief Process the Rx and Tx state machines depending on the + * SX1276 operating mode. + * + * \retval rfState Current RF state [RF_IDLE, RF_BUSY, + * RF_RX_DONE, RF_RX_TIMEOUT, + * RF_TX_DONE, RF_TX_TIMEOUT] + */ +uint32_t SX1276Process( void ); + +#endif //__SX1276_H__ \ No newline at end of file From 635280ab4beea6a2fb8de872acf10c4dd43cd456 Mon Sep 17 00:00:00 2001 From: yl1185 <1182784652@qq.com> Date: Thu, 23 Jun 2022 14:39:59 +0800 Subject: [PATCH 07/13] app_match_rt-thread/sx1278/sx1278_source/ 1.sx1278 driver is ok. 2.connection is ok. --- .../sx1278/sx1278_source/drv_sx1278.c | 510 ++++++++++++++++++ .../sx1278/sx1278_source/drv_sx1278.h | 25 + 2 files changed, 535 insertions(+) create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/drv_sx1278.c create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/drv_sx1278.h diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/drv_sx1278.c b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/drv_sx1278.c new file mode 100644 index 000000000..5cc319779 --- /dev/null +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/drv_sx1278.c @@ -0,0 +1,510 @@ +#include "board.h" +#include +#include +#include "drv_sx1278.h" +#include +#include +#include "spi_lora_sx12xx.h" +#include "sx1276-Hal.h" +#include "sx1276-Lora.h" +#include "sx1276-LoraMisc.h" +#include + +#include +#ifdef RT_USING_POSIX +#include +#include +#endif +#ifdef DRV_USING_SX1278 + +#define SX12XX_DO0_PIN GET_PIN(C, 1) +#define SX12XX_DO1_PIN GET_PIN(C, 0) +#define SX12XX_RST_PIN GET_PIN(F,11) +static rt_bool_t init_flag = RT_FALSE; +static rt_bool_t enable_master = RT_FALSE; +tRadioDriver *Radio = RT_NULL; +struct lora_device +{ + struct rt_device parent; +}; +struct lora_device sx1278_device; +static struct rt_spi_device *spi_bus; + + +void SX1276InitIo(void) +{ + rt_pin_mode(SX12XX_DO0_PIN, PIN_MODE_INPUT); + rt_pin_mode(SX12XX_DO1_PIN, PIN_MODE_INPUT); +} + +void SX1276SetReset(rt_uint8_t state) +{ + if (state == RADIO_RESET_ON) + { + rt_pin_mode(SX12XX_RST_PIN, PIN_MODE_OUTPUT); + rt_pin_write(SX12XX_RST_PIN, PIN_LOW); + } + else + { + rt_pin_mode(SX12XX_RST_PIN, PIN_MODE_INPUT); + + } +} +inline rt_uint8_t SX1276ReadDio0(void) +{ + return rt_pin_read(SX12XX_DO0_PIN); +} + +inline rt_uint8_t SX1276ReadDio1(void) +{ + return rt_pin_read(SX12XX_DO1_PIN); +} + +inline rt_uint8_t SX1276ReadDio2(void) +{ + return rt_pin_read(SX1278_DEVICE_DIO2_PIN); +} + +inline rt_uint8_t SX1276ReadDio3(void) +{ + return rt_pin_read(SX1278_DEVICE_DIO3_PIN); +} +inline rt_uint8_t SX1276ReadDio4(void) +{ + return rt_pin_read(SX1278_DEVICE_DIO4_PIN); +} +inline rt_uint8_t SX1276ReadDio5(void) +{ + return rt_pin_read(SX1278_DEVICE_DIO5_PIN); +} +inline void SX1276WriteRxTx(rt_uint8_t txEnable) +{ + if (txEnable != 0) + { + + } + else + { + + } +} + + +void SX1276Write(rt_uint8_t addr, rt_uint8_t data) +{ + SX1276WriteBuffer(addr, &data, 1); +} + +void SX1276Read(rt_uint8_t addr, rt_uint8_t *data) +{ + SX1276ReadBuffer(addr, data, 1); +} + +void SX1276WriteBuffer(rt_uint8_t addr, rt_uint8_t *buffer, rt_uint8_t size) +{ + spi_bus = (struct rt_spi_device *)rt_device_find(SPI_NAME); + struct rt_spi_message msg1, msg2; + rt_uint8_t data = (addr | 0x80); + msg1.send_buf = &data; + msg1.recv_buf = RT_NULL; + msg1.length = 1; + msg1.cs_take = 1; + msg1.cs_release = 0; + msg1.next = &msg2; + + msg2.send_buf = buffer; + msg2.recv_buf = RT_NULL; + msg2.length = size; + msg2.cs_take = 0; + msg2.cs_release = 1; + msg2.next = RT_NULL; + rt_spi_transfer_message(spi_bus, &msg1); +} + +void SX1276ReadBuffer(rt_uint8_t addr, rt_uint8_t *buffer, rt_uint8_t size) +{ + spi_bus = (struct rt_spi_device *)rt_device_find(SPI_NAME); + struct rt_spi_message msg1, msg2; + rt_uint8_t data = (addr & 0x7F); + msg1.send_buf = &data; + msg1.recv_buf = RT_NULL; + msg1.length = 1; + msg1.cs_take = 1; + msg1.cs_release = 0; + msg1.next = &msg2; + + msg2.send_buf = RT_NULL; + msg2.recv_buf = buffer; + msg2.length = size; + msg2.cs_take = 0; + msg2.cs_release = 1; + msg2.next = RT_NULL; + rt_spi_transfer_message(spi_bus, &msg1); +} + +void SX1276WriteFifo(rt_uint8_t *buffer, rt_uint8_t size) +{ + SX1276WriteBuffer(0, buffer, size); +} + +void SX1276ReadFifo(rt_uint8_t *buffer, rt_uint8_t size) +{ + SX1276ReadBuffer(0, buffer, size); +} + +struct rt_spi_device *sx12xx_init(const char *dev_name, rt_uint8_t param) +{ + RT_ASSERT(dev_name); + spi_bus = (struct rt_spi_device *)rt_device_find(dev_name); + if (!spi_bus) + { + rt_kprintf("spi sample run failed! cant't find %s device!\n", dev_name); + return RT_NULL; + } + /* config spi */ + else + { + struct rt_spi_configuration cfg; + cfg.data_width = 8; + cfg.mode = RT_SPI_MODE_0 | RT_SPI_MSB; /* SPI Compatible: Mode 0. */ + cfg.max_hz = 10 * 1000000; /* max 10M */ + rt_spi_configure(spi_bus, &cfg); + } + Radio = RadioDriverInit(); + Radio->Init(); + return spi_bus; +} + +/* + * This function supports to read data from the lora + */ +static rt_size_t lora_sx1278_read(rt_device_t dev,rt_off_t pos,void *buffer,rt_size_t size) +{ + RT_ASSERT(dev!=RT_NULL); + int read_times = 100; + SX1276StartRx(); + rt_kprintf("read lora ready!\n"); + + while (read_times) + { + if(SX1276Process()!=RF_RX_DONE) + { + read_times --; + rt_thread_mdelay(500); + } + else + { + break; + } + } + if(read_times>0) + { + SX1276GetRxPacket(buffer,(uint16_t *)&size); + } + else + { + size = 0; + } + + + return size; + +} + +/* + * This function supports to write data to the lora + */ +static rt_size_t lora_sx1278_write(rt_device_t dev, rt_off_t pos, const void *buffer, rt_size_t size) +{ + RT_ASSERT(dev !=RT_NULL); + if(size > 256) + { + rt_kprintf("error:message is too long!\n"); + return RT_ERROR; + } + else + { + SX1276SetTxPacket(buffer,size); + while(SX1276Process() != RF_TX_DONE); + rt_kprintf("write success!\n"); + } + + + return RT_EOK; +} + +static int sx1278_test(int argc,char **argv) +{ + char name[RT_NAME_MAX]; + if(argc ==2) + { + rt_strncpy(name,argv[1],RT_NAME_MAX); + } + else + { + rt_strncpy(name,"spi20",RT_NAME_MAX); + } + if(spi_bus == RT_NULL) + { + spi_bus = sx12xx_init("spi20",RT_NULL); + if(spi_bus == RT_NULL) + { + rt_kprintf("sx12xx init failed\n"); + return -1; + } + } + rt_kprintf("sx12xx init succeed\n"); + if (0x91 != SX1276_Spi_Check()) + { + rt_kprintf("sx12xx spi check failed!\n!"); + } + else + { + rt_kprintf("sx12xx spi check ok!\n"); + } + return 0; +} +MSH_CMD_EXPORT(sx1278_test,SAMPLE); + +rt_uint8_t SX1276_Spi_Check() +{ + uint8_t test = 0; + tLoRaSettings settings; + spi_bus = (struct rt_spi_device *)rt_device_find(SPI_NAME); + SX1276Read(REG_LR_VERSION,&test); + rt_kprintf("version code of the chip is %x\n",test); + settings.RFFrequency = SX1276LoRaGetRFFrequency(); + rt_kprintf("SX1278 Lora parameters are :\nRFFrequency is %d\n",settings.RFFrequency); + settings.Power = SX1276LoRaGetRFPower(); + rt_kprintf("RFPower is %d\n",settings.Power); + settings.SignalBw = SX1276LoRaGetSignalBandwidth(); + rt_kprintf("SignalBw is %d\n",settings.SignalBw); + settings.SpreadingFactor = SX1276LoRaGetSpreadingFactor(); + rt_kprintf("SpreadingFactor is %d\n",settings.SpreadingFactor); + SX1276Write(REG_LR_HOPPERIOD, 0x91); //选一个用不到的寄存器来做验证 + SX1276Read(REG_LR_HOPPERIOD, &test); + if (test != 0x91) + { + return -1; + } + return test; +} + +static rt_uint16_t ComputerCrc (rt_uint8_t *data,rt_uint16_t length) +{ + int i; + rt_uint16_t crc ; + while (length --) + { + crc ^= *data++; + for(i =0;i<8;i++) + { + if(crc & 0x01) + crc = crc >>1^ 0xA001; + else + crc = crc >>1; + } + } + return crc; +} + +static rt_err_t CrcCheck(rt_uint8_t *data,rt_uint16_t length) +{ + rt_uint16_t crc_data; + rt_uint16_t input_data ; + input_data = (((rt_uint16_t)data[length - 1] << 8) & 0xFF00) | ((rt_uint16_t)data[length - 2] & 0x00FF); + crc_data = ComputerCrc(data,length-2); + + if(crc_data == input_data) + { + return RT_EOK; + } + else + { + return -RT_ERROR; + } +} + +static int sx1278_fops_open(struct dfs_fd *fd) +{ + rt_err_t ret; + rt_device_t dev; + dev = (rt_device_t)fd->data; + RT_ASSERT(dev !=RT_NULL); + ret = rt_device_open(dev,RT_DEVICE_FLAG_RDONLY); + if(ret ==RT_EOK) + { + return RT_EOK; + } + spi_bus = (struct rt_spi_device *)rt_device_find(SPI_NAME); + if(!spi_bus) + { + rt_kprintf("can not find spi bus\n"); + return -RT_ERROR; + } + + struct rt_spi_configuration cfg; + cfg.data_width = 8 ; + cfg.max_hz = 10* 1000000; + cfg.mode = RT_SPI_MODE_0 |RT_SPI_MSB; + rt_spi_configure(spi_bus,&cfg); + Radio = RadioDriverInit(); + + Radio->Init(); +} + +static int sx1278_fops_close(struct dfs_fd *fd) +{ + rt_device_t dev; + dev = (rt_device_t)fd->data; + rt_device_set_rx_indicate(dev,RT_NULL); + rt_device_close(dev); + return RT_EOK; +} + +static int sx1278_fops_read(struct dfs_fd *fd,void *buf,rt_size_t count) +{ + rt_device_t dev; + dev = (rt_device_t)fd->data; + RT_ASSERT(dev!=RT_NULL); + rt_err_t ret; + ret = lora_sx1278_read(dev,0,buf,count); + if(ret < 0 ) + { + return -RT_ERROR; + } +} + +static int sx1278_fops_write(struct dfs_fd *fd,void *buf,rt_size_t count) +{ + rt_device_t dev; + dev = (rt_device_t)fd->data; + RT_ASSERT(dev!=RT_NULL); + rt_err_t ret ; + + ret = lora_sx1278_write(dev,0,buf,count); + if(ret<0) + { + return -RT_ERROR; + } +} + +static rt_err_t lora_sx1278_open(rt_device_t dev,rt_uint16_t oflag) +{ + RT_ASSERT(dev !=RT_NULL); + return RT_EOK; +} + +static rt_err_t lora_sx1278_close(rt_device_t dev) +{ + RT_ASSERT(dev !=RT_NULL); + return RT_EOK; +} + +static rt_err_t lora_sx1278_init(rt_device_t dev) +{ + RT_ASSERT(dev!=RT_NULL); + spi_bus = (struct rt_spi_device *)rt_device_find(SPI_NAME); + if(!spi_bus) + { + rt_kprintf("can not find spi bus\n"); + return -RT_ERROR; + } + + struct rt_spi_configuration cfg; + cfg.data_width = 8 ; + cfg.max_hz = 10* 1000000; + cfg.mode = RT_SPI_MODE_0 |RT_SPI_MSB; + rt_spi_configure(spi_bus,&cfg); + Radio = RadioDriverInit(); + + Radio->Init(); + return RT_EOK; +} + +/* ------------------test--------------------*/ +static rt_err_t LoraSend(int argc,char**argv) +{ + rt_device_t dev; + struct BlockWriteParam write_param; + dev = rt_device_find("sx1278"); + int result; + int len; + char msg[LORA_BUFFER_SIZE] = {0}; + if(argc<2) + { + rt_kprintf("Usage: %s \n",argv[0]); + return -RT_ERROR; + } + rt_strncpy(msg,argv[1],LORA_BUFFER_SIZE); + len = strlen(msg); + write_param.buffer = msg; + write_param.size = rt_strlen(msg); + + result = lora_sx1278_write(dev,0,write_param.buffer,write_param.size); + rt_memset(&write_param,0,sizeof(struct BlockWriteParam)); + if(result < 0) + { + rt_kprintf("send error!\n"); + return -RT_ERROR; + } + return RT_EOK; +} +MSH_CMD_EXPORT(LoraSend,lora send sample); + +static rt_err_t LoraReceive(void) +{ + char sx1278_recv_msg[256]; + int ret; + rt_device_t dev; + dev = rt_device_find("sx1278"); + while(1) + { + ret = lora_sx1278_read(dev,0,sx1278_recv_msg,256); + if(ret<0) + { + rt_kprintf("receive error!\n"); + return -RT_ERROR; + } + rt_memset(sx1278_recv_msg,0,256); + return RT_EOK; + } +} +MSH_CMD_EXPORT(LoraReceive,lora receive sample); + +const static struct dfs_file_ops sx1278_fops = +{ + sx1278_fops_open, + sx1278_fops_close, + RT_NULL, + sx1278_fops_read, + sx1278_fops_write, + RT_NULL, + RT_NULL, + RT_NULL, + RT_NULL, +}; + + +int sx1278_init() +{ + rt_err_t ret = RT_EOK; + sx1278_device.parent.open = lora_sx1278_open; + sx1278_device.parent.close = lora_sx1278_close; + sx1278_device.parent.read = lora_sx1278_read; + sx1278_device.parent.write = lora_sx1278_write; + sx1278_device.parent.init = lora_sx1278_init; + ret = rt_device_register(&sx1278_device.parent,"sx1278",RT_DEVICE_FLAG_RDONLY); + #ifdef RT_USING_POSIX + sx1278_device.parent.fops = &sx1278_fops; + #endif + if(ret !=RT_EOK) + { + rt_kprintf("sx1278 register failed!\n\r"); + return -RT_ERROR; + } + rt_kprintf("sx1278 register success!\n\r"); + return RT_EOK; +} +INIT_APP_EXPORT(sx1278_init); +#endif \ No newline at end of file diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/drv_sx1278.h b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/drv_sx1278.h new file mode 100644 index 000000000..ef2d7ae81 --- /dev/null +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/app_match_rt-thread/sx1278/sx1278_source/drv_sx1278.h @@ -0,0 +1,25 @@ +#ifndef __DRV_SX1278_H__ +#define __DRV_SX1278_H__ + +#include +#include + +#include +#define SPI_NAME "spi20" +#define LORA_BUFFER_SIZE 256 +struct BlockReadParam +{ + rt_off_t pos; + void * buffer; + rt_size_t size; +}; +struct BlockWriteParam +{ + rt_off_t pos; + const void *buffer; + rt_size_t size; +}; +#endif + + + From 15a85897708b93ddc680f5d67085086590e0c971 Mon Sep 17 00:00:00 2001 From: yl1185 <1182784652@qq.com> Date: Thu, 23 Jun 2022 14:47:09 +0800 Subject: [PATCH 08/13] sensor/humidity/ hs300x 1.Kconfig is ok. 2.gcc is ok. --- APP_Framework/Framework/sensor/humidity/Kconfig | 6 ++++++ APP_Framework/Framework/sensor/humidity/SConscript | 14 ++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 APP_Framework/Framework/sensor/humidity/SConscript diff --git a/APP_Framework/Framework/sensor/humidity/Kconfig b/APP_Framework/Framework/sensor/humidity/Kconfig index b473ef120..a38a74125 100644 --- a/APP_Framework/Framework/sensor/humidity/Kconfig +++ b/APP_Framework/Framework/sensor/humidity/Kconfig @@ -35,6 +35,12 @@ config SENSOR_HS300X_HUMIDITY endif if ADD_RTTHREAD_FETURES + config SENSOR_DEVICE_HS300X_DEV + string "HS300x device name" + default "/dev/i2c1" + config SENSOR_DEVICE_HS300X_I2C_ADDR + hex "HS300x device i2c address" + default 0x44 endif endif diff --git a/APP_Framework/Framework/sensor/humidity/SConscript b/APP_Framework/Framework/sensor/humidity/SConscript new file mode 100644 index 000000000..f307e3f70 --- /dev/null +++ b/APP_Framework/Framework/sensor/humidity/SConscript @@ -0,0 +1,14 @@ +import os +Import('RTT_ROOT') +from building import * + +cwd = GetCurrentDir() +objs = [] +list = os.listdir(cwd) + +for d in list: + path = os.path.join(cwd, d) + if os.path.isfile(os.path.join(path, 'SConscript')): + objs = objs + SConscript(os.path.join(path, 'SConscript')) + +Return('objs') From 81fbf93dd25c24e0fc7b55dd46db269b7cc9bb6f Mon Sep 17 00:00:00 2001 From: yl1185 <1182784652@qq.com> Date: Thu, 23 Jun 2022 14:48:53 +0800 Subject: [PATCH 09/13] Framework/sensor/hs300x 1.Kconfig is ok. 2.gcc is ok. --- .../sensor/humidity/hs300x_humi/SConscript | 10 ++++++++++ APP_Framework/Framework/sensor/temperature/Kconfig | 6 ++++++ .../Framework/sensor/temperature/SConscript | 14 ++++++++++++++ .../sensor/temperature/hs300x_temp/SConscript | 10 ++++++++++ 4 files changed, 40 insertions(+) create mode 100644 APP_Framework/Framework/sensor/humidity/hs300x_humi/SConscript create mode 100644 APP_Framework/Framework/sensor/temperature/SConscript create mode 100644 APP_Framework/Framework/sensor/temperature/hs300x_temp/SConscript diff --git a/APP_Framework/Framework/sensor/humidity/hs300x_humi/SConscript b/APP_Framework/Framework/sensor/humidity/hs300x_humi/SConscript new file mode 100644 index 000000000..badca0d8b --- /dev/null +++ b/APP_Framework/Framework/sensor/humidity/hs300x_humi/SConscript @@ -0,0 +1,10 @@ +from building import * +import os + +cwd = GetCurrentDir() +src = [] +if GetDepend(['SENSOR_HS300X_HUMIDITY']): + src += ['hs300x_humi.c'] +group = DefineGroup('sensor humidity hs300x', src, depend = [], CPPPATH = [cwd]) + +Return('group') \ No newline at end of file diff --git a/APP_Framework/Framework/sensor/temperature/Kconfig b/APP_Framework/Framework/sensor/temperature/Kconfig index c7eb15890..aa170103b 100644 --- a/APP_Framework/Framework/sensor/temperature/Kconfig +++ b/APP_Framework/Framework/sensor/temperature/Kconfig @@ -34,6 +34,12 @@ config SENSOR_HS300X_TEMPERATURE endif if ADD_RTTHREAD_FETURES + config SENSOR_DEVICE_HS300X_DEV + string "HS300x device name" + default "/dev/i2c1" + config SENSOR_DEVICE_HS300X_I2C_ADDR + hex "HS300x device i2c address" + default 0x44 endif endif diff --git a/APP_Framework/Framework/sensor/temperature/SConscript b/APP_Framework/Framework/sensor/temperature/SConscript new file mode 100644 index 000000000..f307e3f70 --- /dev/null +++ b/APP_Framework/Framework/sensor/temperature/SConscript @@ -0,0 +1,14 @@ +import os +Import('RTT_ROOT') +from building import * + +cwd = GetCurrentDir() +objs = [] +list = os.listdir(cwd) + +for d in list: + path = os.path.join(cwd, d) + if os.path.isfile(os.path.join(path, 'SConscript')): + objs = objs + SConscript(os.path.join(path, 'SConscript')) + +Return('objs') diff --git a/APP_Framework/Framework/sensor/temperature/hs300x_temp/SConscript b/APP_Framework/Framework/sensor/temperature/hs300x_temp/SConscript new file mode 100644 index 000000000..15715d9d8 --- /dev/null +++ b/APP_Framework/Framework/sensor/temperature/hs300x_temp/SConscript @@ -0,0 +1,10 @@ +from building import * +import os + +cwd = GetCurrentDir() +src = [] +if GetDepend(['SENSOR_HS300X_TEMPERATURE']): + src += ['hs300x_temp.c'] +group = DefineGroup('sensor temperature hs300x', src, depend = [], CPPPATH = [cwd]) + +Return('group') \ No newline at end of file From 310282628faa37de0d483de1b7d245ec66d9d12d Mon Sep 17 00:00:00 2001 From: yl1185 <1182784652@qq.com> Date: Thu, 23 Jun 2022 14:57:18 +0800 Subject: [PATCH 10/13] transform_layer/rtthread/ 1.find a bug about 'PrivSemaphoreObtainWait' when incoming parameter 'NULL' in rtthread . 2.modify transform.c and transform.h --- APP_Framework/Framework/transform_layer/rtthread/transform.c | 5 ++++- APP_Framework/Framework/transform_layer/rtthread/transform.h | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/APP_Framework/Framework/transform_layer/rtthread/transform.c b/APP_Framework/Framework/transform_layer/rtthread/transform.c index 661babf8f..71421046c 100644 --- a/APP_Framework/Framework/transform_layer/rtthread/transform.c +++ b/APP_Framework/Framework/transform_layer/rtthread/transform.c @@ -67,7 +67,10 @@ int PrivSemaphoreAbandon(sem_t *sem) { return sem_post(sem); } - +int PrivSemaphoreObtainWaitForever(sem_t *sem) +{ + return sem_wait(sem); +} /**************************task*************************/ int PrivTaskCreate(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg) diff --git a/APP_Framework/Framework/transform_layer/rtthread/transform.h b/APP_Framework/Framework/transform_layer/rtthread/transform.h index 786302911..df37a48ee 100644 --- a/APP_Framework/Framework/transform_layer/rtthread/transform.h +++ b/APP_Framework/Framework/transform_layer/rtthread/transform.h @@ -173,6 +173,7 @@ int PrivSemaphoreDelete(sem_t *sem); int PrivSemaphoreObtainWait(sem_t *sem, const struct timespec *abstime); int PrivSemaphoreObtainNoWait(sem_t *sem); int PrivSemaphoreAbandon(sem_t *sem); +int PrivSemaphoreObtainWaitForever(sem_t *sem); int32_t PrivSemaphoreSetValue(int32_t sem, uint16_t val); /*********************task**************************/ From 244fcb9e5dea67b3cbc59965201480ce9ffef6d7 Mon Sep 17 00:00:00 2001 From: yl1185 <1182784652@qq.com> Date: Thu, 23 Jun 2022 15:01:19 +0800 Subject: [PATCH 11/13] connection/4g/ 1.Kconfig is ok. 2.gcc is ok. --- .../Framework/connection/4g/SConscript | 18 ++++++++++++ .../Framework/connection/4g/ec200t/Kconfig | 28 ++++++++++--------- .../Framework/connection/4g/ec200t/SConscript | 10 +++++++ 3 files changed, 43 insertions(+), 13 deletions(-) create mode 100644 APP_Framework/Framework/connection/4g/SConscript create mode 100644 APP_Framework/Framework/connection/4g/ec200t/SConscript diff --git a/APP_Framework/Framework/connection/4g/SConscript b/APP_Framework/Framework/connection/4g/SConscript new file mode 100644 index 000000000..9365cab84 --- /dev/null +++ b/APP_Framework/Framework/connection/4g/SConscript @@ -0,0 +1,18 @@ +import os +Import('RTT_ROOT') +from building import * +SOURCES = [] +SOURCES = ['adapter_4g.c'] + SOURCES +objs = [] +cwd = GetCurrentDir() +path = [cwd] +group = DefineGroup('4g', SOURCES, depend = [], CPPPATH = [cwd]) +objs = objs + group +list = os.listdir(cwd) + +for d in list: + path = os.path.join(cwd, d) + if os.path.isfile(os.path.join(path, 'SConscript')): + objs = objs + SConscript(os.path.join(path, 'SConscript')) + +Return('objs') \ No newline at end of file diff --git a/APP_Framework/Framework/connection/4g/ec200t/Kconfig b/APP_Framework/Framework/connection/4g/ec200t/Kconfig index c5ac4a37f..a4b43b7ef 100644 --- a/APP_Framework/Framework/connection/4g/ec200t/Kconfig +++ b/APP_Framework/Framework/connection/4g/ec200t/Kconfig @@ -3,19 +3,13 @@ config ADAPTER_4G_EC200T default "ec200t" if ADD_XIZI_FETURES - config ADAPTER_EC200T_USING_PWRKEY - bool "EC200T using PWRKEY pin number" - default n + config ADAPTER_EC200T_PWRKEY + int "EC200T PWRKEY pin number" + default "97" - if ADAPTER_EC200T_USING_PWRKEY - config ADAPTER_EC200T_PWRKEY - int "EC200T PWRKEY pin number" - default "97" - - config ADAPTER_EC200T_PIN_DRIVER - string "EC200T device pin driver path" - default "/dev/pin_dev" - endif + config ADAPTER_EC200T_PIN_DRIVER + string "EC200T device pin driver path" + default "/dev/pin_dev" config ADAPTER_EC200T_DRIVER_EXTUART bool "Using extra uart to support 4G" @@ -45,5 +39,13 @@ if ADD_NUTTX_FETURES endif if ADD_RTTHREAD_FETURES - + config ADAPTER_EC200T_DRIVER + string "EC200T device uart driver path" + default "/dev/uart2" + config ADAPTER_EC200T_PIN_DRIVER + string "EC200T device pin driver path" + default "/dev/pin" + config ADAPTER_EC200T_PWRKEY + int "EC200T PWRKEY pin number" + default "97" endif diff --git a/APP_Framework/Framework/connection/4g/ec200t/SConscript b/APP_Framework/Framework/connection/4g/ec200t/SConscript new file mode 100644 index 000000000..242e1f3fb --- /dev/null +++ b/APP_Framework/Framework/connection/4g/ec200t/SConscript @@ -0,0 +1,10 @@ +from building import * +import os + +cwd = GetCurrentDir() +src = [] +if GetDepend(['ADAPTER_EC200T']): + src += ['ec200t.c'] +group = DefineGroup('connection 4g ec200t', src, depend = [], CPPPATH = [cwd]) + +Return('group') \ No newline at end of file From 3bcbcd6499406fdffd0239b38d1132f3438251f5 Mon Sep 17 00:00:00 2001 From: yl1185 <1182784652@qq.com> Date: Thu, 23 Jun 2022 15:03:04 +0800 Subject: [PATCH 12/13] connection/lora/sx1278 1.Kconfig is ok. 2.gcc is ok. --- .../Framework/connection/lora/SConscript | 19 +++++++++++++++++++ .../Framework/connection/lora/sx1278/Kconfig | 3 +++ .../connection/lora/sx1278/SConscript | 10 ++++++++++ 3 files changed, 32 insertions(+) create mode 100644 APP_Framework/Framework/connection/lora/SConscript create mode 100644 APP_Framework/Framework/connection/lora/sx1278/SConscript diff --git a/APP_Framework/Framework/connection/lora/SConscript b/APP_Framework/Framework/connection/lora/SConscript new file mode 100644 index 000000000..a447a0a2f --- /dev/null +++ b/APP_Framework/Framework/connection/lora/SConscript @@ -0,0 +1,19 @@ +import os +Import('RTT_ROOT') +from building import * +SOURCES = [] +if GetDepend(['CONNECTION_ADAPTER_LORA']): + SOURCES = ['adapter_lora.c'] + SOURCES +objs = [] +cwd = GetCurrentDir() +path = [cwd] +group = DefineGroup('lora', SOURCES, depend = [], CPPPATH = [cwd]) +objs = objs + group +list = os.listdir(cwd) + +for d in list: + path = os.path.join(cwd, d) + if os.path.isfile(os.path.join(path, 'SConscript')): + objs = objs + SConscript(os.path.join(path, 'SConscript')) + +Return('objs') \ No newline at end of file diff --git a/APP_Framework/Framework/connection/lora/sx1278/Kconfig b/APP_Framework/Framework/connection/lora/sx1278/Kconfig index 4439c3f0f..9b9cc2b48 100644 --- a/APP_Framework/Framework/connection/lora/sx1278/Kconfig +++ b/APP_Framework/Framework/connection/lora/sx1278/Kconfig @@ -16,5 +16,8 @@ if ADD_NUTTX_FETURES endif if ADD_RTTHREAD_FETURES + config ADAPTER_SX1278_DRIVER + string "SX1278 device spi driver path" + default "/dev/sx1278" endif diff --git a/APP_Framework/Framework/connection/lora/sx1278/SConscript b/APP_Framework/Framework/connection/lora/sx1278/SConscript new file mode 100644 index 000000000..3b0d3fe13 --- /dev/null +++ b/APP_Framework/Framework/connection/lora/sx1278/SConscript @@ -0,0 +1,10 @@ +from building import * +import os + +cwd = GetCurrentDir() +src = [] +if GetDepend(['ADAPTER_SX1278']): + src += ['sx1278.c'] +group = DefineGroup('connection lora sx1278', src, depend = [], CPPPATH = [cwd]) + +Return('group') \ No newline at end of file From 6156314ba7a6f02d4b4b3b24e17afc358588079a Mon Sep 17 00:00:00 2001 From: yl1185 <1182784652@qq.com> Date: Thu, 23 Jun 2022 15:18:18 +0800 Subject: [PATCH 13/13] aiit-arm32-board/test/ test jpg 1.test jpg. --- .../aiit-arm32-board/test/client.jpg | Bin 0 -> 82616 bytes .../aiit-arm32-board/test/ethernet.jpg | Bin 0 -> 110831 bytes .../aiit-arm32-board/test/ethernet.png | Bin 0 -> 130508 bytes .../aiit-arm32-board/test/gateway.jpg | Bin 0 -> 31144 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/aiit-arm32-board/test/client.jpg create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/aiit-arm32-board/test/ethernet.jpg create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/aiit-arm32-board/test/ethernet.png create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/aiit-arm32-board/test/gateway.jpg diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/aiit-arm32-board/test/client.jpg b/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/aiit-arm32-board/test/client.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a3e8ad56bb5df0471631e9afbd5149a1783f2aa3 GIT binary patch literal 82616 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 M`2Ug**DuU}0qd8clK=n! literal 0 HcmV?d00001 diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/aiit-arm32-board/test/ethernet.jpg b/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/aiit-arm32-board/test/ethernet.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f8a59b9e323dcbfebdf986b1d4baf1a75f7433c4 GIT binary patch literal 110831 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ν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%0D#tAsUvMV#Q91 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 literal 0 HcmV?d00001 diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/aiit-arm32-board/test/gateway.jpg b/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/aiit-arm32-board/test/gateway.jpg new file mode 100644 index 0000000000000000000000000000000000000000..031fcbb3683bfb543212e40a40e28d46033fbcac GIT binary patch literal 31144 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 J}G=S@AdVbXQJ`xG>mWjF6|>Csmof*w3* z8HdWaY^P*MB?;;9ajKbLHn(_v@rq{jj*f8fa4-{b(e?1@`jWD7oc!ryBjvDuRLbv1 z-`^xnEL(S|vgN)@jW%Gs)Kkui(P3>SMG-s}Tf%&%UW7iKls~Xn!5SAjMTuvchAYci zuybx|G>)_PR z%p>N;eADCa-9X~}$Cj$1SU3}B#XIgCM?6@B)y^ful&adqDNUf7T+h747k zY3e7n%rIV&$r(nxJ_iW9SvCC4zCI@V@*MCnxy^5mW88hZ6PsPDW!{HM-DZO_mXy|P zO%Nj!=~dEJm9moI8LQOBPr&>?&w$#2Zn?7c)#LD#MMPUo#_;qA1&PzeY8sQmh%p!n zAED34`x|JL=cK7t75jYYpAp`|Dns#F#r#*+Lhj-^uVhNO1VEuVro@~WrJV~f16!h8 zh1i1vm&0eES&f@-*dB&W1E6ZpLS`oafidCcJKm7;aHbq2v^?Y5p$1QQg^#H7*V&mF zt;#;x%(Bz`@Y~<@s)BcDi$t_C(V$19^aWepXljjQf@3;%VAA$}Qa4(VahplMvg;X) z;e)=H;@T5rigFJc-NK0^*&6II%04p2x>UE!RFLNP)#Mq;uyHE~d#UbVHtNzm+1|UK z*%9Cq0QuWcoeXUMw^LZqpfJzQ|{|)7FBM9 zqOJ_1N`G4CyIxF52&88$dmxnX-d9EI6f@7NBMySKcX#Q?Bw%DKU|`H7P$$Z@$c={; z66CEOmETbJrpB_C8S>3c5G>ca3*Tui0RgCr*c~=F&193YY<6z`hK64hjxsqG`cPI_ z$TNAF2^xQ$?n`FWrQg8o=>orF^;`o3C|Pf!x#Xc>5YUq9mnRAgU z{O|5$)q*`g&^F?xulumOsE4lp*?8BJpQ-+<^&4|T%)^08>U@HeX)uFB?+LkzreLTx zPdilrUv0|i!oE7{;y~Y=fxo;hA;0X#o?2UTPt6L;*jX35{Rwyfh4$Z{#;(6H6858GT41C>^|-!I2XBbJe!vARVSScA6h(6!qcKuzz! zM(SJCgI4`(?!|?#U2@pTruad2SZQmp)XxaqHtJU_d1dOsG&+P z+U##Vme9b}!_wAq4yc-pZlZbjm4&HwQe(N)H63+Rx!G91Ib6un=#9Mc$eaayo(-jDHNl9Sca$Zz(l$R!3M4p){k!n_SwzRRN9O#sH)h?q=8t z(;Fx)uH;pcmk^D!2QARoMQ_e#D^3iGY|)Sa+Y-Ovu}l~j(90+%G~BK!D_ zLQ&~7H=P)0zdMP)OPpw`T4?Fe<=6-)>d2Dnn#2nAcYlONZt550TN@X(iOV{9c-b$e z;=KwU|GvC;Cv1>w1G;#qOY0%mg7cels~y4=!S6OWdPpSy%$VaDy;k+=n2{zt>JLQR z(c{`*=IMX@XP(c?)FKx>+L!e7EzNzc$jbG(`IHgrnNCkD31 zFQ!Y?)@LY(``lf(`R2=%{mwy%n(0jGc3M(sh;m`Yt|zwODwyU|0y+n8)Z}08=0<_b z2nS<)6NK{L4tM$Gzd8RoZ_bM|=XqwHXU?2q z@|Gm?&06=puKT(^3u!~=2&SFV|GlB83bj`<`$0{`d|4B6|K*_8fQ`5!1FhvOUDVKu z{_HqL9&^9>P;<&{nf5Q+M|jP~6@eQDU~ny}#$lV(RI}l0W3;JHJ#Mun9V|os4y8|v)f>5{rkNanO zQ*CLxwc%q%{>LX^Z^y+b#q&}d5X0Mad5D`1p-xj&b3&RdzahTr@aWSlnjJ6K(`q6s%!-IJkS6C_ z8qr`mZ$5($j&b&(XU?-N#@~Lk&_GH=&)GF=%7GUvO$OJU`hVdcx?s}O9S$Kn({Kxa z)@jzTP>%3^Lgm1hRsYoF)m!U=hZ$EJkBh$N^?tV{q9|8jJ|9SpXZ0ENcOAdu%Mf{; z1Xw6jxfBs*UC)q6%(npt2Y4@59X;v}pRFm9pL}+WjnBJPm7H^ebrKOn-cGoJ_u9j7 zAk@0W`5B6bX4JTa-7bt>M2ypZpEhsV8>#NO=O)X8&z-K^)fw8<2PFM*8idtlYWXi4 zNVcRC^rT>!I|^6dhyr}4k%FS!`Bv>gYH4#ojl~TJXMeJ168Jc<(YFpBZh+GOw0Oii2XkK^g6 zbTbE|v>Ev!EwisHyLe4;E-`}hzb>`B@{)UpJx*znwKt-~#NAs4C!5oRLi{Ap5y3@> zo~Pq|Gkv*v4flOu?~IbQ$We|~J#tII!_TBv2Tio{m2jk5;>RcJ+qTVLV-6A%bO*Xw z*^8|8nrz~B{_$=Hy4vL}@!NQOlf*&&IO^KhODmrkD7v!rDDdX|9G;};4bG0`pPjY+m3OmcVD^8lvee>TGlG@ zqq~&wh%%KYv>9eq2p8j~?@jibEugFMvroI#=8FEVd85DZI-o}jsIUBw$F^D;WZKVw+W-S$lA^f$;~qLiSf&ffy+rVgNaek{pvm( zy{{;H>WShG*6T*ek2akli^Dn_n&P-q@}^ADzAO2k4ETgRPK=QsvimqZo>PiMU&y2+ zgln5o=uL8klPeCQ&A-F5!{9!zclzaPysEa6gxhlk2N+F!pOHIWN5OIwmkn?s4MyL#uC22^?<3~zU1;&?UErTp!C=QqKp-dNC2k5@~L=(9{$nnW?hRa=9SaAukgvmaNn_M7FK zAX%!vT)IwBO%j=G6AtxNzF%+j>C>BM({2@7Ky7Z5yyPy)#gd_)>LIv9>}~RQ9g2=G zA4G&ym<4Mqpp|*~0hF8s**Mx#;Y(X-q=_lA!g7vHSXA?K)UVYFu z-PyQlbS3^TiR6F)Si#f~9IowO^WAWyUwiO^w1J4Tvo;%>O!BIODMOd8*Q3i*J;omI z3*%A5qWG2{(*#p6W<_>uX$S(iM>eG{Le@b#&N}q^d3N(4SakMZlKeni0MmYzR!yq_ zRA(3=5iZ;`nV~be9XG2rQjBP)jZZOw);D681fIOoe}h4g!=#b`+EGMJ{o=KGv#=Ho z5BV~g3V zO`BQMp`QLgz~cmNX@3ehJEl_|4??K;9y5*(jH{Zi^!MtdVI`h}r4abbMzK3nDv3wR z65Pmi8F7szEbz9;?Id1o&%`RfyNOs_{MB+1nQ3pGx{gXYY%o-tIHpo2lQn zQ*RrJ%(=jlKwe2EFT|0L^h8NB`u?T!7|x~P?#muFO zoUTrFHap7%o1L>puQWx^Y7h)0=L<$qdw3~iMxv{m}x(Cu><S(8p=l1)(QmxEcIZ*Ib5+tF=hFG#|I3PHeDpc|kYq{h2vRH2OCY#Lp1GA{? zGgb6l>UJlQ7nd?ug;!aR)3nZGtA@%uslP?YxJc`!JoET^oZ0d(TV@T*f=GzZs>fFY zk?>ixeLP1yPD1q=J`Ds2L1;36W7F>fnnadFW`JV3%*6MP{9Q6`Ua_^ej)t9uJ9BHv z;y+a<>F9Z$Fyu3D7hNq%gfgkF%zkjN!3&{UckDRb;1w-T$?8HEE5UF=aDzt0wA!cUj}9-d)_udQ3!4 zWqkRZxE6&cGJm4Xi>X6n2WNYFQHUozeO$`^DNDwFl{#@?VJ(uX9z0z68uIJq#RFu? z)*#Vq2k4@L)!cUuoy9d~Yj9~DL4kl1RAo~#Xo7iy*58Ka$6otE-75C>^FDypbR3jx zt_>?G)Sh7&R1JtK{L;9oJqa%S)x_-3>FVmV@ZTBIERA=P`A3SWoCf3h3_9- zB88!p=|PmP<^^5Ork0E+?z`4&wL}SAg6St0_x_7JMi(tXbzzKj)Qg|bxuNWH+nos) z-P3UVz9i8Zx4^8Su>Dt+wnN-*LTVI>v?J_|agFkf@gV1~+{aNKoSdI6Fl~V7`-eO2 z#TR-Hm|9}x=6}PDyFAw&&IdvahZ{IoCrt^mJ$)6TQm4%s?~abZ@%TxerO#9RtAbR^ zYFe&MjW>;@T6(%po|u_jB_pLW3W)GcnJ_b~yRncH*{RRQHsX^VfNt_?W>X%pZI!Ew5>xahY)w*XAKXWGb zqTAn%0T?(Y;`ct632}l%kv;CLfeSiiZRP?GwE9ZOGj%9RP=?w(im3S$ zET!{?Fl2mwK=oT(rTVVS4L+eOp=I&!Hjq4tKRN($V!1PBTiA-;)8$Qf!ftaR0@sa( z6;w9wkvB0FF1J+DEIB9oCdhHsCem?ElM-fGbb&;w<(woiGjN&ymrY=1#b?DqHlg!3 z8cMPyYK)$Q=HmjdxRx(WIbC+XVx{%q$y=5q?=0pJ(3e>z$@?Stw8jfdl`VfzkN-SzX*sNS<`7hii{2?E7O#Sg`see2_AHscl zpwQEv@>Rdcd@7GqogG`*PJ(n(=5wlYLRnXsdI_Bw=$O3(PQs*n;6#2!m)}=ttx#oI z8r)RTI5md>9{hz*ZVo#frA7!`O zn-j$bBo2PrS$7YY+O?0~i;;gYATh<8g3QYQ{@M*vEfnU5+5Cp}M9!|Nl?Hnk4v^y> ziuEc?^~ry?ZLUitbDUJaS8)e(k`ALJ@FN}Q<kP@_)10k0a>qcE~gbDL6-(1QnA|i6;g)lsLTw-5@#B!uxw!IsQBhg z$3c<6BjdidFR>32V+E9cyIsdsje~bHAZU57+QVkgIFbSZ55_RhuG9R3+*Z*hbalo( z1Y{oljzZ&(0T?ki+sXy^7iecA{R+E()C5>B#_B8n4Z3AK$L$jx2|g}FiLDE!Sz7$r zZ?|dVgoAY^QUbiv)OJih?$o?#*A?Et536nP+7seJVV|?9+wMJ`Mro?J3Dl&$(vUy@|5w{Ry#l zJW67;=@HVWe2t_MooVNG7(GnLMZEC0T1a-gd-1~=p#){LGv1!mHCi||yj~G8sKY;T zuwxs1>}PBB#|DU>3niF`wy8FPGkY-wqYu;)mMiTIPMOKy_83ZC=M%g_oAi6mqX1)o z5GQTz11a<7W7S1_S_WfE-Br1e)ot-o4gJ@p+JBAQueFuX*FfB{w-QixA|uSl*{Nea(W=scVP%N^R9mn=<H&v*nru8qT7J(b!~LJUMz@q0U1<01F^oJ>l*l@`mI?3X%+7Oy8IjeotF56J5#UD8V2_@ zYS%pUX{b}0;%NI5OR!@pPGB;vYO&D(x%0m|@}S5aMd2i{_MEiP(BOym8RrHi`lF2a zVlpm4R3f+7mN3nHfU8R#r2MLCuD-pRI+31e{nU$xBkRkDr}1x$xgEB(Abo`WC5xk- zt!lSfZo#yh$qbPCqKkhMrq<6H{D1T8&_J>WbK1eWd@!?Q2qW!wVZ9_nFw3v#=foS` zp9|+;{596KY@cTQjqi~!VZ_PXkvV)yO)nhhB?WrOsrV*U@_M=CgX&Q%M`TS){pZdR zdpl)YIok-e;p_3LY0m?6;d9R*Q`-kYc->R<mA98!V|B?Jhp&_#b3&8e+UHT|r(i!|T_y*dA6xoo_o)8K|s!$kJz+ac=HcYSszuNd+ zg)t9L0ZBd+uz38rymA<&M^(rFDl9?a@cXriBs)6;7nuBR-v@oZv?Occn_okcK-z5V zfx9}_4$|m8<*R{%`JNSa3K1y<;PL@)zkCPVZwD7*o5z17$ugc^c0BwL5Di!4`BlHc z{9hgmj$(jRcO^QyoXJkH=P)1LtHC={{d38|dY#FLUAwVyCf!2&IAT*m%Xlg;D%~;Q z{KknlY-O2APez>zGpmjRP{&-3!nI<}#1@nFJzPF^=1`J@HH_v#z9``kS9W+gV%1wb zJ?mg)N0^!=e0d^saHwqfeek_FSmj}x&!F6?c67CW8jWLKD3Ym6PEA^VfcveqAK(Q8 z=5aT^-7fzPy#crC+J2z zNsX_i*gF_Tnhb9g;2M0*e@R7g)Ud6+E<9C_QKe#f;-2{}jv(P=N&17WZIv5MMukQN zL~tocwM_Oj4J2xtr|=8qYaMaxx+mS}4Hq2n6?3@I?vqJTO;^xzZ7vmVcv0Uf!xOF( zR(&uws_~#U7Tp9s&g1+u1 z$X@8K+~B!3$UNUuii3?nP)!Z!HYixm2oGsdV`^ZJJ#upCE)@K`CbwW0moLyq>-@8; zkJn!x$2l0YdZY#74L>N35!*sbc?W(_xx0HVFf^HgW4fAjJ9;Wq>74b-0Q3?WsYgj0 z-`f1A!+dv+eYm}}^T#t1p)Lap)1Pb}_ z_Ee&DYt`${cm4_@57m!i4YH)k37rbIJq`-A?!s%4+CmiDZBBr4rB|RB?yXoX{88&? zTAGqPFYNlS+?SJg#aKSLllfb-<-X{v_039fr_rNoOOSz&QU;?MSFqW<>1FSLX{18B zVH}8m*{pCQD(TqkSX(*2#-t(3VVG~PjiB?hRMmzEWf`ZBajW${#Cpjo{QN{N4d1@p zS!Ind88U=gEpq^8w~H+pxTmz@{FyPxt9SZRm}lGzyoOqMaiAa7OJH))Z2G%xb|+_h z)gu>&{q*#@MYDh0_+*l-@ayUtTT!LvcUNhvq`&p;kJ&-rkhkdJrHJ*emOEn$)a6hn zIGCJ6H`?p^T_HOz%@-NKx3jny%C#u+QQr2iQ|LkX9N*!yi3Yut`f^Xqfa_|WW#d}7 zSl{Yu8EP4Nh^^SilPhPHo2f?KW*o?S6Wi6nS3OM>EC$as{EsjBvQ!@G$LVaC4 z20d9G@#wWa`=#i8^hM-9Fd(9HVxLE1O>oD((#=8A(;*1)J??ccY)RlWry@mj{*=z0 z3Ndng))%P633}HHN@1uTr#;l>oo1=MofslK&)POBrccCQv3<(3Y%1&TCl^#_xqzUV&t7Cqd8Va9yQeHIHrT(3d=qu{`?7}XfNq{z&FVawO2s{xU zH%FLiJi@?tsu;{6C3+lfxd(mDV=K)%p(6tb^oC*+_*N^eY|J?QYb|)Yr1fuCZ!bS! z1(JvJ^sXGCo?HHANvsofJq6c0QJOevcy_pMGIy?5h6kKCOZQ&vuKaHQ73-JJCLe@I z=>^HPUIl)NE;%O@3W_}y6TE{Y^1gw;{DNV%8q*TYKD-3GI)JRd#Jv@{aB*;4uf1+# ztLaug1mO(fp0(=m`)cayA^W3F;?*15kCTqir)JJmeI`mEob~Xa;GN@3ek8LNN2op+ zh?yQKl6(OjuCW7k7WG>cpU@(=rpq^m@!0P_`x|ffW84GCWV&9r9NLLinwIhQeRuoz z(7C??=JNw#JxcH4lIKv|^r3ExR7nCnP$I=Um@9X1N}M-^E8c(k%#TUY{5jIpVVmv= zyzea3sA~Ml)6vaWKWZDA@cSG+f`c5iShL4W%z`jc0MesgT8wEXX%(E$e-1IenPx4yz&Fa_qV zfHGl~{$^bgsBT4Sy`<9*2)Vp$XP=&*2c8~=gU<1kCRmLAhPdBF zhIeVT&Xg|jE2WuM1^A28-Ps88p|H~*UQRIDG753@ENUavsQ<624HZ!A2T6|@i zFABBy!X1zXZn#0ABy&uwWVD1XWGY@V3h>8bH&urV z8!X1Qf?^|1He<-@Z<#m9$F|)zUXf%H|H_0~nvq!&-maxN6Vza2kd@s|1acjb$``N7 z=-1nOhgekeO!c>-L`L=%ZgzJ(Wp(0yWSXWK)Z?)nahh6g`j*jRplhzr&A+{sGH9K9 z{>(?Ke%kNrz8S{zdIH-Zg`$7FFFBD4t@wc%JKkbo{<)SDo{&hCuc58g;{IysZN}MT0!$nt5e#v?C zdk;KoLeR>0j#`LdPrM&~IYrj+?&bNq3fnn+M=*fX31R9Nt>Xh9rlZT;(@>Z3uooZh zJDslTgY+A{u8UT^8S+Vy!okatXs?)6fl!}6eCyW_mMa2Mw!wGpSJGIJ%=5i*zh@qZ zEqZMp2E=A zd*sOd<=mu>4%^yMZ7tZF+DFET+EsUVer{Z|&sA&a5$S#YG_i}WR*&v>D^gb)dCy8lQ;IJCI!B~`U#)zW71n3%<>FmcCYDSa*~ z=uF(j6RoY3ih|0_h$sxapF-MBV4YgpDxNaD8Q55Qv{~z!Lt2Q3cA)OiSYg!uC-lhq z%poq4+b!4IP`6yV&p&nXLBT%)+Lf>%AE_DS+X^zLwRT9nTrynZv85%* zcNK4n-7!ixJsekV*|T$=d%_osoC!>eY!b>t zm_5R8S2yZa+O5};2sW|VP+X4pLJv1nnHSd>q1rx&tnUV06C)3WA-M`%HB(4o_)=B?mv#+b5{ehF2@ZiWmAtApELr* zp&hS(*@CN&YT>T}EH@5myWMC$=HnMG6)Phx0RF$cRACbrwjU=!`sb61t*7YHKC-dB zUrr$Pim)zN{L_ns2ghG^Wg$R7UW1|};Fe0AaaVKWv;abZ&*v}iGBi01rr~VhdzP%%S$r4iT zS|cGnqU2j{(MK{LReAvp%G4_AOf(fcDI#v%apQC-mpvF{bCX2f#uTKHDlq1b-!Rwc zsLX(ASYi)di#&+UCy?|hIPo z)1hSFB;B`uMf0u?IABHe$VX!ebFsYlIs|_0$Vi8<$}QirKfL)bTgV>zeDOFyw{XEW z#dPr(U-bB+z_y&J?CqlRL81wI)@w zaz!&WM=eb^LH#{e#6udJV$yq2aOm~RTKjJy3niYH6y-D^NwWcbd+rK)DI0jGzo*Xg zxo-gJN{u<1!eZF#9`5`z?@M|Q5p<#ng;!@89=4?>(Q)@1#ym_bQs8$+ysp^7<>XXH zf`17AGgDN1IpnYud|*Jk)~P3s6r=V;H~CRK#UPs9>0H0SFLJTronAh51DER%3qN~i zqA%YXY34Whjg+OB(G8fU-&8A#xig()MAh<~{GH#~_7!1%q(uJ|evor(_7I_+ftiyG z1Gra?-tcRY(&O@9>StLYYS?hh4OUO?5fx?RHR+alQ%?}1%y1mdNKEA2xa=a)_Xv#dW8CNw0 z1NUi}+FIf8*M89A>t6^E^VKtzlDYO0yX)uJ1n#o2u|Jm^$8HLeI&E}_>2TQ@3;g3x z--0-L%a+*=LAkz3%B+#Ur6=l05$KcJvef9EKg%6*6?gF%`C8sJ;L0fMUk=uizmgy~ zmnaYTsut2uZfR&}f9~|ngh5qz8_JVKBRR@aj6sew>Y|QK zJ}Q8t|LOc;Yqzk=p<6sEWvqJI6l&Tqy1kj#^rIo_OE%GoGpW0^RPI#UX}-S>G3vk! zf1{r|-2vw_^&}rD<|muf{hq?wn`}S&mn{m}rQL6~7X{&Et*Z4LK3O_1J| zM^B}%Urcg`aUt2Mkav5>E)PdHlrjy+=Taxu4FRtXOohxD9-G+ZrZU8Nb9z!B>f-bH z!i$U47JDG7u3<}cQ*X%v#j{v=ND^)yNb&AzFVDGbo+w8!C@pzp1(SmzyYHS{e*NMW z{p}g4q2WMm?E2T^N+TiT`_l5%50TlLmfsOdEPlyqL?nxkw4ry6VGh{<{2)e=vJ-xdJYw~!I;ZoTW|2f=1r{?m$)5NS^?S-^iTMFjLS45Vz)4ucH`Og zgp_-?LqJy>cz~Qfb-QCafp>s>thK>M4||$sJ(f9?WTv}i@GL;rU+c{U)U)>3*P0U< zZU9GNuN1>f1GC`uqU$JNZGiBAC3J$6Qsz7M*g#+Z|3jz+d;d^AaXqK1c2m62ttNR* zG<+swycwHcW-4E0On7Bd^!`igOJjgKXX-mJA7?~SZ-ww8Tw48!*M^&Xc*3*AZuli| zt=Zh}@muiFzjXNeL3l@ET$wRr_AE5$0LV-{p|P{NOB0T-)?n<57aKByOh}RH|FX&0 zWIp5yP9>50|7H7`!_T}&y_8XqSb^z4pIi^*N~F6~tp3@@9jF`_J#J1VUU6hk{aLU@ zw)WCPMAK&s|79bx5jW@1?^-1222>zv)2S;&y*EH%Wt1(f!4$`5yGSMu3d zz+dgY>PNQn-FvGO9bN43ILXEbCE5$*)~EfAKM`)8Tg#&}0mtXuweFlsVsh~cMEq<~ z3r}Qw0}qh(9Ug$?(oa32?w8rbJ}HaP%F}?UJp+jw^p}B^uD~yZ>|1t%bzqO_XbRMf z%Z|hBf?0uGSHWPt}Ru+fVHQ28oDWkl}?VjR)({SmPla<6fOMt|6!w1w` zKI&joy~haEU8_XvHriT}ejQbjE!&Tuv;y_)tBT&~m0JjfZPn>C>M#ETslMOJZh~%? zzF&W4nvFoGBWB76^)Y`@&DxLMCBs=dU{BrMhqQ~p_;24{?lE;MhdTXi#AytZeWJ!T z^T_L3x(nc+>Ojm<#hWtxi^-)7y^Fo@mw1k%zvG8+#HAazou(=!BvhxFaX7Tt=Aq*L`w_O7kt6bhJKWXHzoO(tEC8o2!8YpKZH~3_m z<#|k~`l}~3BjVu4eTRv1rdHnU8r*xf-xDg5`rvz2#?Bk|R}mKjWb`(^CI!p2<6fcp z^ScsatJC)&{HsE>x;G~FKcQ=w%0;U`Kv13CCdJB`yYH=2#*Tt&Lp~R^_5A+$v}ZOs zEv4lkX9Xvj(r;CCRCst5XGs^4P-DmBAQGW6h$UHf`HY2dJ=?a#mr6+an}V;Gb@#k#X-E6zi!Bve0|q zNnc<7o8{J-#jqOMS)CMfHABP78{Zzx52EN?j5nqewS$mTkwM zf!b-6IExWmvHswVY>(SljO_dFD?WSw^KvZJK(lFFia`MX%XV^^sdKDl4Q=kzuAWh< z^hO2VVd-uUZugPokm7U~@{kaH`JZG%I@%jR-ND#((qfW3MK9G*p&4Pl9ut(O_4)_+ zyJ?(WMxVZEhDf_ap`9UYR=@?70pr>?$VzAQLRd<+h&ND?vJLj@c$i`IPC7(RCs zXHQ(=6p=x3L)W=rBK9#aI(y%0o#e>-Z^gU%L;6XhU{0kLts6ier9Kt zukGXoK2ESGU;PSR4*JhT9H)cir{ZiP$>;?0X|tx$CIh{WW=oSXq*ftQZQM8APj30G zXX+BmHi|sv6;@i(E8>sV_$ed$2iS6Y+R*2isw11K_F^4B+$1iKsg!DYnp4xc2BzXb zXUU&alkVEL!Ta}4&#~z!MpwZ78PmJTK&12&p#h9#!52vbZ}QYTvoDP_+2;~h{t(k$ z%2q8CkKlr$;SFY|`|;53xl+!MHu2KMoT;={L0z8XY(KN}2ymO(96Dx#cqyZu@ie); zYBiK{Wbq)1HS=2re%JW^S&(E{#ve*_`=cdu$glEcJag)sQ@_hp;Q~^Xq07|F0o9J> zj~UjIOADxR6X_MJ*_Y^kB`ax%>O6}}Yo>-YR-1Bx2*htx1T$