mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-09-12 09:38:16 +08:00
Merge branch 'master' into step4
This commit is contained in:
@@ -47,12 +47,6 @@ void rtthread_startup(void)
|
||||
/* show version */
|
||||
rt_show_version();
|
||||
|
||||
/* init tick */
|
||||
rt_system_tick_init();
|
||||
|
||||
/* init kernel object */
|
||||
rt_system_object_init();
|
||||
|
||||
/* init timer system */
|
||||
rt_system_timer_init();
|
||||
|
||||
|
||||
@@ -120,8 +120,8 @@ int rt_hw_uart_init(void)
|
||||
uart->irqno = UART1_INTERRUPT; // IRQ_UART1;
|
||||
uart->gpio_rx_port = GPIO_PORT_A;
|
||||
uart->gpio_tx_port = GPIO_PORT_A;
|
||||
uart->gpio_rx_pin = GPIO_PIN_3;
|
||||
uart->gpio_tx_pin = GPIO_PIN_2;
|
||||
uart->gpio_rx_pin = GPIO_PIN_2;
|
||||
uart->gpio_tx_pin = GPIO_PIN_3;
|
||||
uart->gpio_rx_fun = IO_FUN_4;
|
||||
uart->gpio_tx_fun = IO_FUN_4;
|
||||
|
||||
|
||||
@@ -483,7 +483,7 @@ static rt_err_t configure(struct rt_spi_device *device,
|
||||
SPI_SetFirstTransmitBit(spi, SPI_TCTRL_FBS_LSB);
|
||||
}
|
||||
|
||||
switch (configuration->mode)
|
||||
switch (configuration->mode & RT_SPI_MODE_3)
|
||||
{
|
||||
case RT_SPI_MODE_0:
|
||||
SPI_SetSclkMode(spi, SPI_SCLK_Mode0);
|
||||
|
||||
@@ -30,8 +30,6 @@ int main(void)
|
||||
#endif
|
||||
|
||||
rt_hw_board_init();
|
||||
rt_system_tick_init();
|
||||
rt_system_object_init();
|
||||
rt_system_timer_init();
|
||||
|
||||
#ifdef RT_USING_HEAP
|
||||
|
||||
@@ -35,12 +35,6 @@ void rtthread_startup(void)
|
||||
/* show version */
|
||||
rt_show_version();
|
||||
|
||||
/* init tick */
|
||||
rt_system_tick_init();
|
||||
|
||||
/* init kernel object */
|
||||
rt_system_object_init();
|
||||
|
||||
/* init timer system */
|
||||
rt_system_timer_init();
|
||||
|
||||
|
||||
@@ -102,12 +102,6 @@ void rtthread_startup(void)
|
||||
/* show version */
|
||||
rt_show_version();
|
||||
|
||||
/* init tick */
|
||||
rt_system_tick_init();
|
||||
|
||||
/* init kernel object */
|
||||
rt_system_object_init();
|
||||
|
||||
/* init timer system */
|
||||
rt_system_timer_init();
|
||||
|
||||
|
||||
@@ -93,12 +93,6 @@ void rtthread_startup(void)
|
||||
/* show version */
|
||||
rt_show_version();
|
||||
|
||||
/* initialize tick */
|
||||
rt_system_tick_init();
|
||||
|
||||
/* initialize kernel object */
|
||||
rt_system_object_init();
|
||||
|
||||
/* initialize timer system */
|
||||
rt_system_timer_init();
|
||||
|
||||
|
||||
@@ -65,12 +65,6 @@ void rtthread_startup(void)
|
||||
/* show version */
|
||||
rt_show_version();
|
||||
|
||||
/* init tick */
|
||||
rt_system_tick_init();
|
||||
|
||||
/* init kernel object */
|
||||
rt_system_object_init();
|
||||
|
||||
/* init timer system */
|
||||
rt_system_timer_init();
|
||||
|
||||
|
||||
@@ -1095,14 +1095,9 @@ U32 RTOS_InitKernel(U32 Heap_size)
|
||||
/* show version */
|
||||
//rt_show_version();
|
||||
|
||||
/* initialize tick */
|
||||
//rt_system_tick_init();
|
||||
RTOS_HwTickInit();
|
||||
//rt_kprintf("set tick\n");
|
||||
|
||||
/* initialize kernel object */
|
||||
rt_system_object_init();
|
||||
|
||||
/* initialize timer system */
|
||||
rt_system_timer_init();
|
||||
|
||||
|
||||
@@ -8,9 +8,9 @@
|
||||
* 2019-06-28 misonyo the first version.
|
||||
*/
|
||||
|
||||
#ifndef DRV_SPI_H__
|
||||
#define DRV_SPI_H__
|
||||
#ifndef DRV_CAN_H__
|
||||
#define DRV_CAN_H__
|
||||
|
||||
int rt_hw_can_init(void);
|
||||
|
||||
#endif /* DRV_SPI_H__ */
|
||||
#endif /* DRV_CAN_H__ */
|
||||
|
||||
+28
-1
@@ -70,6 +70,8 @@ CONFIG_RT_VER_NUM=0x40003
|
||||
CONFIG_ARCH_CPU_64BIT=y
|
||||
# CONFIG_RT_USING_CPU_FFS is not set
|
||||
CONFIG_ARCH_RISCV=y
|
||||
CONFIG_ARCH_RISCV_FPU=y
|
||||
CONFIG_ARCH_RISCV_FPU_S=y
|
||||
CONFIG_ARCH_RISCV64=y
|
||||
# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set
|
||||
|
||||
@@ -150,8 +152,10 @@ CONFIG_RT_SERIAL_RB_BUFSZ=64
|
||||
# CONFIG_RT_USING_HWTIMER is not set
|
||||
# CONFIG_RT_USING_CPUTIME is not set
|
||||
# CONFIG_RT_USING_I2C is not set
|
||||
# CONFIG_RT_USING_PHY is not set
|
||||
CONFIG_RT_USING_PIN=y
|
||||
# CONFIG_RT_USING_ADC is not set
|
||||
# CONFIG_RT_USING_DAC is not set
|
||||
# CONFIG_RT_USING_PWM is not set
|
||||
# CONFIG_RT_USING_MTD_NOR is not set
|
||||
# CONFIG_RT_USING_MTD_NAND is not set
|
||||
@@ -192,6 +196,7 @@ CONFIG_RT_USING_LIBC=y
|
||||
CONFIG_RT_USING_POSIX=y
|
||||
# CONFIG_RT_USING_POSIX_MMAP is not set
|
||||
# CONFIG_RT_USING_POSIX_TERMIOS is not set
|
||||
# CONFIG_RT_USING_POSIX_GETLINE is not set
|
||||
# CONFIG_RT_USING_POSIX_AIO is not set
|
||||
# CONFIG_RT_USING_MODULE is not set
|
||||
|
||||
@@ -262,7 +267,9 @@ CONFIG_ULOG_BACKEND_USING_CONSOLE=y
|
||||
#
|
||||
# IoT - internet of things
|
||||
#
|
||||
# CONFIG_PKG_USING_LORAWAN_DRIVER is not set
|
||||
# CONFIG_PKG_USING_PAHOMQTT is not set
|
||||
# CONFIG_PKG_USING_UMQTT is not set
|
||||
# CONFIG_PKG_USING_WEBCLIENT is not set
|
||||
# CONFIG_PKG_USING_WEBNET is not set
|
||||
# CONFIG_PKG_USING_MONGOOSE is not set
|
||||
@@ -308,7 +315,7 @@ CONFIG_ULOG_BACKEND_USING_CONSOLE=y
|
||||
# CONFIG_PKG_USING_GAGENT_CLOUD is not set
|
||||
# CONFIG_PKG_USING_ALI_IOTKIT is not set
|
||||
# CONFIG_PKG_USING_AZURE is not set
|
||||
# CONFIG_PKG_USING_TENCENT_IOTHUB is not set
|
||||
# CONFIG_PKG_USING_TENCENT_IOT_EXPLORER is not set
|
||||
# CONFIG_PKG_USING_JIOT-C-SDK is not set
|
||||
# CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set
|
||||
# CONFIG_PKG_USING_JOYLINK is not set
|
||||
@@ -330,6 +337,9 @@ CONFIG_ULOG_BACKEND_USING_CONSOLE=y
|
||||
# CONFIG_PKG_USING_CAPNP is not set
|
||||
# CONFIG_PKG_USING_RT_CJSON_TOOLS is not set
|
||||
# CONFIG_PKG_USING_AGILE_TELNET is not set
|
||||
# CONFIG_PKG_USING_NMEALIB is not set
|
||||
# CONFIG_PKG_USING_AGILE_JSMN is not set
|
||||
# CONFIG_PKG_USING_PDULIB is not set
|
||||
|
||||
#
|
||||
# security packages
|
||||
@@ -338,6 +348,7 @@ CONFIG_ULOG_BACKEND_USING_CONSOLE=y
|
||||
# CONFIG_PKG_USING_libsodium is not set
|
||||
# CONFIG_PKG_USING_TINYCRYPT is not set
|
||||
# CONFIG_PKG_USING_TFM is not set
|
||||
# CONFIG_PKG_USING_YD_CRYPTO is not set
|
||||
|
||||
#
|
||||
# language packages
|
||||
@@ -372,7 +383,9 @@ CONFIG_ULOG_BACKEND_USING_CONSOLE=y
|
||||
# CONFIG_PKG_USING_CHINESE_FONT_LIBRARY is not set
|
||||
# CONFIG_PKG_USING_LUNAR_CALENDAR is not set
|
||||
# CONFIG_PKG_USING_BS8116A is not set
|
||||
# CONFIG_PKG_USING_GPS_RMC is not set
|
||||
# CONFIG_PKG_USING_URLENCODE is not set
|
||||
# CONFIG_PKG_USING_UMCN is not set
|
||||
|
||||
#
|
||||
# system packages
|
||||
@@ -396,6 +409,10 @@ CONFIG_ULOG_BACKEND_USING_CONSOLE=y
|
||||
# CONFIG_PKG_USING_SYSWATCH is not set
|
||||
# CONFIG_PKG_USING_SYS_LOAD_MONITOR is not set
|
||||
# CONFIG_PKG_USING_PLCCORE is not set
|
||||
# CONFIG_PKG_USING_RAMDISK is not set
|
||||
# CONFIG_PKG_USING_MININI is not set
|
||||
# CONFIG_PKG_USING_QBOOT is not set
|
||||
# CONFIG_PKG_USING_UCOSIII_WRAPPER is not set
|
||||
|
||||
#
|
||||
# peripheral libraries and drivers
|
||||
@@ -441,6 +458,7 @@ CONFIG_PKG_KENDRYTE_SDK_VERNUM=0x0055
|
||||
# CONFIG_PKG_USING_RPLIDAR is not set
|
||||
# CONFIG_PKG_USING_AS608 is not set
|
||||
# CONFIG_PKG_USING_RC522 is not set
|
||||
# CONFIG_PKG_USING_WS2812B is not set
|
||||
# CONFIG_PKG_USING_EMBARC_BSP is not set
|
||||
# CONFIG_PKG_USING_EXTERN_RTC_DRIVERS is not set
|
||||
# CONFIG_PKG_USING_MULTI_RTIMER is not set
|
||||
@@ -450,6 +468,12 @@ CONFIG_PKG_KENDRYTE_SDK_VERNUM=0x0055
|
||||
# CONFIG_PKG_USING_PMS_SERIES is not set
|
||||
# CONFIG_PKG_USING_NUCLEI_SDK is not set
|
||||
# CONFIG_PKG_USING_CAN_YMODEM is not set
|
||||
# CONFIG_PKG_USING_LORA_RADIO_DRIVER is not set
|
||||
# CONFIG_PKG_USING_QLED is not set
|
||||
# CONFIG_PKG_USING_PAJ7620 is not set
|
||||
# CONFIG_PKG_USING_AGILE_CONSOLE is not set
|
||||
# CONFIG_PKG_USING_LD3320 is not set
|
||||
# CONFIG_PKG_USING_WK2124 is not set
|
||||
|
||||
#
|
||||
# miscellaneous packages
|
||||
@@ -486,6 +510,9 @@ CONFIG_PKG_KENDRYTE_SDK_VERNUM=0x0055
|
||||
# CONFIG_PKG_USING_VT100 is not set
|
||||
# CONFIG_PKG_USING_ULAPACK is not set
|
||||
# CONFIG_PKG_USING_UKAL is not set
|
||||
# CONFIG_PKG_USING_CRCLIB is not set
|
||||
# CONFIG_PKG_USING_THREES is not set
|
||||
# CONFIG_PKG_USING_2048 is not set
|
||||
CONFIG_BOARD_K210_EVB=y
|
||||
CONFIG_BSP_USING_UART_HS=y
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@ source "$PKGS_DIR/Kconfig"
|
||||
config BOARD_K210_EVB
|
||||
bool
|
||||
select ARCH_RISCV64
|
||||
select ARCH_RISCV_FPU_S
|
||||
select PKG_USING_KENDRYTE_SDK
|
||||
select RT_USING_COMPONENTS_INIT
|
||||
select RT_USING_USER_MAIN
|
||||
|
||||
@@ -48,6 +48,8 @@
|
||||
#define RT_VER_NUM 0x40003
|
||||
#define ARCH_CPU_64BIT
|
||||
#define ARCH_RISCV
|
||||
#define ARCH_RISCV_FPU
|
||||
#define ARCH_RISCV_FPU_S
|
||||
#define ARCH_RISCV64
|
||||
|
||||
/* RT-Thread Components */
|
||||
|
||||
@@ -38,7 +38,7 @@ if PLATFORM == 'gcc':
|
||||
OBJDUMP = PREFIX + 'objdump'
|
||||
OBJCPY = PREFIX + 'objcopy'
|
||||
|
||||
DEVICE = ' -mcmodel=medany -march=rv64imafdc -mabi=lp64d'
|
||||
DEVICE = ' -mcmodel=medany -march=rv64imafc -mabi=lp64f -fsingle-precision-constant'
|
||||
CFLAGS = DEVICE + ' -fno-common -ffunction-sections -fdata-sections -fstrict-volatile-bitfields'
|
||||
AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp'
|
||||
LFLAGS = DEVICE + ' -nostartfiles -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,_start -T link.lds'
|
||||
|
||||
@@ -77,12 +77,6 @@ void rtthread_startup(void)
|
||||
/* show version */
|
||||
rt_show_version();
|
||||
|
||||
/* init tick */
|
||||
rt_system_tick_init();
|
||||
|
||||
/* init kernel object */
|
||||
rt_system_object_init();
|
||||
|
||||
/* init timer system */
|
||||
rt_system_timer_init();
|
||||
|
||||
|
||||
@@ -77,12 +77,6 @@ void rtthread_startup(void)
|
||||
/* show version */
|
||||
rt_show_version();
|
||||
|
||||
/* init tick */
|
||||
rt_system_tick_init();
|
||||
|
||||
/* init kernel object */
|
||||
rt_system_object_init();
|
||||
|
||||
/* init timer system */
|
||||
rt_system_timer_init();
|
||||
|
||||
|
||||
@@ -77,12 +77,6 @@ void rtthread_startup(void)
|
||||
/* show version */
|
||||
rt_show_version();
|
||||
|
||||
/* init tick */
|
||||
rt_system_tick_init();
|
||||
|
||||
/* init kernel object */
|
||||
rt_system_object_init();
|
||||
|
||||
/* init timer system */
|
||||
rt_system_timer_init();
|
||||
|
||||
|
||||
@@ -52,12 +52,6 @@ void rtthread_startup(void)
|
||||
/* init board */
|
||||
rt_hw_board_init();
|
||||
|
||||
/* init tick */
|
||||
rt_system_tick_init();
|
||||
|
||||
/* init kernel object */
|
||||
rt_system_object_init();
|
||||
|
||||
rt_show_version();
|
||||
|
||||
/* init timer system */
|
||||
|
||||
@@ -38,12 +38,6 @@ void rtthread_startup(void)
|
||||
/* init board */
|
||||
rt_hw_board_init();
|
||||
|
||||
/* init tick */
|
||||
rt_system_tick_init();
|
||||
|
||||
/* init kernel object */
|
||||
rt_system_object_init();
|
||||
|
||||
rt_show_version();
|
||||
|
||||
/* init timer system */
|
||||
|
||||
@@ -7,6 +7,9 @@
|
||||
* 2015-01-07 Grissiom init commit
|
||||
*/
|
||||
|
||||
#ifndef __VBUS_HW_H__
|
||||
#define __VBUS_HW_H__
|
||||
|
||||
#include <rtthread.h>
|
||||
#include <board.h>
|
||||
|
||||
@@ -32,3 +35,5 @@ rt_inline void rt_vbus_smp_mb(void)
|
||||
{
|
||||
__DSB();
|
||||
}
|
||||
|
||||
#endif /* __VBUS_HW_H__ */
|
||||
|
||||
@@ -7,6 +7,9 @@
|
||||
* 2015-01-07 Grissiom init commit
|
||||
*/
|
||||
|
||||
#ifndef __VBUS_HW_H__
|
||||
#define __VBUS_HW_H__
|
||||
|
||||
#include <rtthread.h>
|
||||
#include <board.h>
|
||||
|
||||
@@ -32,3 +35,5 @@ rt_inline void rt_vbus_smp_mb(void)
|
||||
{
|
||||
__DSB();
|
||||
}
|
||||
|
||||
#endif /* __VBUS_HW_H__ */
|
||||
|
||||
@@ -27,12 +27,6 @@ void rtthread_startup(void)
|
||||
/* show version */
|
||||
rt_show_version();
|
||||
|
||||
/* initialize tick */
|
||||
rt_system_tick_init();
|
||||
|
||||
/* initialize kernel object */
|
||||
rt_system_object_init();
|
||||
|
||||
/* initialize timer system */
|
||||
rt_system_timer_init();
|
||||
|
||||
|
||||
@@ -52,12 +52,6 @@ void rtthread_startup(void)
|
||||
/* show version */
|
||||
rt_show_version();
|
||||
|
||||
/* init tick */
|
||||
rt_system_tick_init();
|
||||
|
||||
/* init kernel object */
|
||||
rt_system_object_init();
|
||||
|
||||
/* init timer system */
|
||||
rt_system_timer_init();
|
||||
|
||||
|
||||
@@ -48,13 +48,7 @@ void rtthread_startup(void)
|
||||
|
||||
/* show version */
|
||||
rt_show_version();
|
||||
|
||||
/* init tick */
|
||||
rt_system_tick_init();
|
||||
|
||||
/* init kernel object */
|
||||
rt_system_object_init();
|
||||
|
||||
|
||||
/* init timer system */
|
||||
rt_system_timer_init();
|
||||
|
||||
|
||||
@@ -44,12 +44,6 @@ void rtthread_startup(void)
|
||||
/* show version */
|
||||
rt_show_version();
|
||||
|
||||
/* init tick */
|
||||
rt_system_tick_init();
|
||||
|
||||
/* init kernel object */
|
||||
rt_system_object_init();
|
||||
|
||||
/* init timer system */
|
||||
rt_system_timer_init();
|
||||
|
||||
|
||||
@@ -55,12 +55,6 @@ void rtthread_startup(void)
|
||||
|
||||
rt_show_version();
|
||||
|
||||
/* init tick */
|
||||
rt_system_tick_init();
|
||||
|
||||
/* init kernel object */
|
||||
rt_system_object_init();
|
||||
|
||||
/* init timer system */
|
||||
rt_system_timer_init();
|
||||
|
||||
|
||||
@@ -49,12 +49,6 @@ void rtthread_startup()
|
||||
/* show version */
|
||||
rt_show_version();
|
||||
|
||||
/* init tick */
|
||||
rt_system_tick_init();
|
||||
|
||||
/* init kernel object */
|
||||
rt_system_object_init();
|
||||
|
||||
/* init timer system */
|
||||
rt_system_timer_init();
|
||||
|
||||
|
||||
@@ -45,12 +45,6 @@ void rtthread_startup(void)
|
||||
/* show version */
|
||||
rt_show_version();
|
||||
|
||||
/* init tick */
|
||||
rt_system_tick_init();
|
||||
|
||||
/* init kernel object */
|
||||
rt_system_object_init();
|
||||
|
||||
/* init timer system */
|
||||
rt_system_timer_init();
|
||||
|
||||
|
||||
@@ -48,12 +48,6 @@ void rtthread_startup(void)
|
||||
/* show version */
|
||||
rt_show_version();
|
||||
|
||||
/* init tick */
|
||||
rt_system_tick_init();
|
||||
|
||||
/* init kernel object */
|
||||
rt_system_object_init();
|
||||
|
||||
/* init timer system */
|
||||
rt_system_timer_init();
|
||||
|
||||
|
||||
@@ -1,351 +0,0 @@
|
||||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# RT-Thread Project Configuration
|
||||
#
|
||||
|
||||
#
|
||||
# RT-Thread Kernel
|
||||
#
|
||||
CONFIG_RT_NAME_MAX=8
|
||||
# CONFIG_RT_USING_ARCH_DATA_TYPE is not set
|
||||
# CONFIG_RT_USING_SMP is not set
|
||||
CONFIG_RT_ALIGN_SIZE=4
|
||||
# CONFIG_RT_THREAD_PRIORITY_8 is not set
|
||||
CONFIG_RT_THREAD_PRIORITY_32=y
|
||||
# CONFIG_RT_THREAD_PRIORITY_256 is not set
|
||||
CONFIG_RT_THREAD_PRIORITY_MAX=32
|
||||
CONFIG_RT_TICK_PER_SECOND=100
|
||||
CONFIG_RT_USING_OVERFLOW_CHECK=y
|
||||
CONFIG_RT_USING_HOOK=y
|
||||
CONFIG_RT_USING_IDLE_HOOK=y
|
||||
CONFIG_RT_IDLE_HOOK_LIST_SIZE=4
|
||||
CONFIG_IDLE_THREAD_STACK_SIZE=256
|
||||
CONFIG_RT_USING_TIMER_SOFT=y
|
||||
CONFIG_RT_TIMER_THREAD_PRIO=4
|
||||
CONFIG_RT_TIMER_THREAD_STACK_SIZE=512
|
||||
CONFIG_RT_DEBUG=y
|
||||
# CONFIG_RT_DEBUG_COLOR is not set
|
||||
# CONFIG_RT_DEBUG_INIT_CONFIG is not set
|
||||
# CONFIG_RT_DEBUG_THREAD_CONFIG is not set
|
||||
# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set
|
||||
# CONFIG_RT_DEBUG_IPC_CONFIG is not set
|
||||
# CONFIG_RT_DEBUG_TIMER_CONFIG is not set
|
||||
# CONFIG_RT_DEBUG_IRQ_CONFIG is not set
|
||||
# CONFIG_RT_DEBUG_MEM_CONFIG is not set
|
||||
# CONFIG_RT_DEBUG_SLAB_CONFIG is not set
|
||||
# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set
|
||||
# CONFIG_RT_DEBUG_MODULE_CONFIG is not set
|
||||
|
||||
#
|
||||
# Inter-Thread communication
|
||||
#
|
||||
CONFIG_RT_USING_SEMAPHORE=y
|
||||
CONFIG_RT_USING_MUTEX=y
|
||||
CONFIG_RT_USING_EVENT=y
|
||||
CONFIG_RT_USING_MAILBOX=y
|
||||
CONFIG_RT_USING_MESSAGEQUEUE=y
|
||||
# CONFIG_RT_USING_SIGNALS is not set
|
||||
|
||||
#
|
||||
# Memory Management
|
||||
#
|
||||
CONFIG_RT_USING_MEMPOOL=y
|
||||
# CONFIG_RT_USING_MEMHEAP is not set
|
||||
# CONFIG_RT_USING_NOHEAP is not set
|
||||
CONFIG_RT_USING_SMALL_MEM=y
|
||||
# CONFIG_RT_USING_SLAB is not set
|
||||
# CONFIG_RT_USING_MEMTRACE is not set
|
||||
CONFIG_RT_USING_HEAP=y
|
||||
|
||||
#
|
||||
# Kernel Device Object
|
||||
#
|
||||
CONFIG_RT_USING_DEVICE=y
|
||||
# CONFIG_RT_USING_DEVICE_OPS is not set
|
||||
# CONFIG_RT_USING_INTERRUPT_INFO is not set
|
||||
CONFIG_RT_USING_CONSOLE=y
|
||||
CONFIG_RT_CONSOLEBUF_SIZE=128
|
||||
CONFIG_RT_CONSOLE_DEVICE_NAME="uart0"
|
||||
CONFIG_RT_VER_NUM=0x40002
|
||||
# CONFIG_RT_USING_CPU_FFS is not set
|
||||
# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set
|
||||
|
||||
#
|
||||
# RT-Thread Components
|
||||
#
|
||||
CONFIG_RT_USING_COMPONENTS_INIT=y
|
||||
# CONFIG_RT_USING_USER_MAIN is not set
|
||||
|
||||
#
|
||||
# C++ features
|
||||
#
|
||||
# CONFIG_RT_USING_CPLUSPLUS is not set
|
||||
|
||||
#
|
||||
# Command shell
|
||||
#
|
||||
CONFIG_RT_USING_FINSH=y
|
||||
CONFIG_FINSH_THREAD_NAME="tshell"
|
||||
CONFIG_FINSH_USING_HISTORY=y
|
||||
CONFIG_FINSH_HISTORY_LINES=5
|
||||
CONFIG_FINSH_USING_SYMTAB=y
|
||||
CONFIG_FINSH_USING_DESCRIPTION=y
|
||||
# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set
|
||||
CONFIG_FINSH_THREAD_PRIORITY=20
|
||||
CONFIG_FINSH_THREAD_STACK_SIZE=4096
|
||||
CONFIG_FINSH_CMD_SIZE=80
|
||||
# CONFIG_FINSH_USING_AUTH is not set
|
||||
CONFIG_FINSH_USING_MSH=y
|
||||
CONFIG_FINSH_USING_MSH_DEFAULT=y
|
||||
CONFIG_FINSH_USING_MSH_ONLY=y
|
||||
CONFIG_FINSH_ARG_MAX=10
|
||||
|
||||
#
|
||||
# Device virtual file system
|
||||
#
|
||||
# CONFIG_RT_USING_DFS is not set
|
||||
|
||||
#
|
||||
# Device Drivers
|
||||
#
|
||||
CONFIG_RT_USING_DEVICE_IPC=y
|
||||
CONFIG_RT_PIPE_BUFSZ=512
|
||||
# CONFIG_RT_USING_SYSTEM_WORKQUEUE is not set
|
||||
CONFIG_RT_USING_SERIAL=y
|
||||
CONFIG_RT_SERIAL_USING_DMA=y
|
||||
CONFIG_RT_SERIAL_RB_BUFSZ=64
|
||||
# CONFIG_RT_USING_CAN is not set
|
||||
# CONFIG_RT_USING_HWTIMER is not set
|
||||
# CONFIG_RT_USING_CPUTIME is not set
|
||||
# CONFIG_RT_USING_I2C is not set
|
||||
CONFIG_RT_USING_PIN=y
|
||||
# CONFIG_RT_USING_ADC is not set
|
||||
# CONFIG_RT_USING_PWM is not set
|
||||
# CONFIG_RT_USING_MTD_NOR is not set
|
||||
# CONFIG_RT_USING_MTD_NAND is not set
|
||||
# CONFIG_RT_USING_PM is not set
|
||||
# CONFIG_RT_USING_RTC is not set
|
||||
# CONFIG_RT_USING_SDIO is not set
|
||||
# CONFIG_RT_USING_SPI is not set
|
||||
# CONFIG_RT_USING_WDT is not set
|
||||
# CONFIG_RT_USING_AUDIO is not set
|
||||
# CONFIG_RT_USING_SENSOR is not set
|
||||
# CONFIG_RT_USING_TOUCH is not set
|
||||
|
||||
#
|
||||
# Using Hardware Crypto drivers
|
||||
#
|
||||
# CONFIG_RT_USING_HWCRYPTO is not set
|
||||
|
||||
#
|
||||
# Using WiFi
|
||||
#
|
||||
# CONFIG_RT_USING_WIFI is not set
|
||||
|
||||
#
|
||||
# Using USB
|
||||
#
|
||||
# CONFIG_RT_USING_USB_HOST is not set
|
||||
# CONFIG_RT_USING_USB_DEVICE is not set
|
||||
|
||||
#
|
||||
# POSIX layer and C standard library
|
||||
#
|
||||
CONFIG_RT_USING_LIBC=y
|
||||
# CONFIG_RT_USING_PTHREADS is not set
|
||||
|
||||
#
|
||||
# Network
|
||||
#
|
||||
|
||||
#
|
||||
# Socket abstraction layer
|
||||
#
|
||||
# CONFIG_RT_USING_SAL is not set
|
||||
|
||||
#
|
||||
# Network interface device
|
||||
#
|
||||
# CONFIG_RT_USING_NETDEV is not set
|
||||
|
||||
#
|
||||
# light weight TCP/IP stack
|
||||
#
|
||||
# CONFIG_RT_USING_LWIP is not set
|
||||
|
||||
#
|
||||
# AT commands
|
||||
#
|
||||
# CONFIG_RT_USING_AT is not set
|
||||
|
||||
#
|
||||
# VBUS(Virtual Software BUS)
|
||||
#
|
||||
# CONFIG_RT_USING_VBUS is not set
|
||||
|
||||
#
|
||||
# Utilities
|
||||
#
|
||||
# CONFIG_RT_USING_RYM is not set
|
||||
# CONFIG_RT_USING_ULOG is not set
|
||||
# CONFIG_RT_USING_UTEST is not set
|
||||
|
||||
#
|
||||
# RT-Thread online packages
|
||||
#
|
||||
|
||||
#
|
||||
# IoT - internet of things
|
||||
#
|
||||
# CONFIG_PKG_USING_PAHOMQTT is not set
|
||||
# CONFIG_PKG_USING_WEBCLIENT is not set
|
||||
# CONFIG_PKG_USING_WEBNET is not set
|
||||
# CONFIG_PKG_USING_MONGOOSE is not set
|
||||
# CONFIG_PKG_USING_WEBTERMINAL is not set
|
||||
# CONFIG_PKG_USING_CJSON is not set
|
||||
# CONFIG_PKG_USING_JSMN is not set
|
||||
# CONFIG_PKG_USING_LIBMODBUS is not set
|
||||
# CONFIG_PKG_USING_FREEMODBUS is not set
|
||||
# CONFIG_PKG_USING_LJSON is not set
|
||||
# CONFIG_PKG_USING_EZXML is not set
|
||||
# CONFIG_PKG_USING_NANOPB is not set
|
||||
|
||||
#
|
||||
# Wi-Fi
|
||||
#
|
||||
|
||||
#
|
||||
# Marvell WiFi
|
||||
#
|
||||
# CONFIG_PKG_USING_WLANMARVELL is not set
|
||||
|
||||
#
|
||||
# Wiced WiFi
|
||||
#
|
||||
# CONFIG_PKG_USING_WLAN_WICED is not set
|
||||
# CONFIG_PKG_USING_RW007 is not set
|
||||
# CONFIG_PKG_USING_COAP is not set
|
||||
# CONFIG_PKG_USING_NOPOLL is not set
|
||||
# CONFIG_PKG_USING_NETUTILS is not set
|
||||
# CONFIG_PKG_USING_AT_DEVICE is not set
|
||||
# CONFIG_PKG_USING_ATSRV_SOCKET is not set
|
||||
# CONFIG_PKG_USING_WIZNET is not set
|
||||
|
||||
#
|
||||
# IoT Cloud
|
||||
#
|
||||
# CONFIG_PKG_USING_ONENET is not set
|
||||
# CONFIG_PKG_USING_GAGENT_CLOUD is not set
|
||||
# CONFIG_PKG_USING_ALI_IOTKIT is not set
|
||||
# CONFIG_PKG_USING_AZURE is not set
|
||||
# CONFIG_PKG_USING_TENCENT_IOTHUB is not set
|
||||
# CONFIG_PKG_USING_NIMBLE is not set
|
||||
# CONFIG_PKG_USING_OTA_DOWNLOADER is not set
|
||||
# CONFIG_PKG_USING_IPMSG is not set
|
||||
# CONFIG_PKG_USING_LSSDP is not set
|
||||
# CONFIG_PKG_USING_AIRKISS_OPEN is not set
|
||||
# CONFIG_PKG_USING_LIBRWS is not set
|
||||
|
||||
#
|
||||
# security packages
|
||||
#
|
||||
# CONFIG_PKG_USING_MBEDTLS is not set
|
||||
# CONFIG_PKG_USING_libsodium is not set
|
||||
# CONFIG_PKG_USING_TINYCRYPT is not set
|
||||
|
||||
#
|
||||
# language packages
|
||||
#
|
||||
# CONFIG_PKG_USING_LUA is not set
|
||||
# CONFIG_PKG_USING_JERRYSCRIPT is not set
|
||||
# CONFIG_PKG_USING_MICROPYTHON is not set
|
||||
|
||||
#
|
||||
# multimedia packages
|
||||
#
|
||||
# CONFIG_PKG_USING_OPENMV is not set
|
||||
# CONFIG_PKG_USING_MUPDF is not set
|
||||
# CONFIG_PKG_USING_STEMWIN is not set
|
||||
|
||||
#
|
||||
# tools packages
|
||||
#
|
||||
# CONFIG_PKG_USING_CMBACKTRACE is not set
|
||||
# CONFIG_PKG_USING_EASYFLASH is not set
|
||||
# CONFIG_PKG_USING_EASYLOGGER is not set
|
||||
# CONFIG_PKG_USING_SYSTEMVIEW is not set
|
||||
# CONFIG_PKG_USING_RDB is not set
|
||||
# CONFIG_PKG_USING_QRCODE is not set
|
||||
# CONFIG_PKG_USING_ULOG_EASYFLASH is not set
|
||||
# CONFIG_PKG_USING_ADBD is not set
|
||||
|
||||
#
|
||||
# system packages
|
||||
#
|
||||
# CONFIG_PKG_USING_GUIENGINE is not set
|
||||
# CONFIG_PKG_USING_CAIRO is not set
|
||||
# CONFIG_PKG_USING_PIXMAN is not set
|
||||
# CONFIG_PKG_USING_LWEXT4 is not set
|
||||
# CONFIG_PKG_USING_PARTITION is not set
|
||||
# CONFIG_PKG_USING_FAL is not set
|
||||
# CONFIG_PKG_USING_SQLITE is not set
|
||||
# CONFIG_PKG_USING_RTI is not set
|
||||
# CONFIG_PKG_USING_LITTLEVGL2RTT is not set
|
||||
# CONFIG_PKG_USING_CMSIS is not set
|
||||
# CONFIG_PKG_USING_DFS_YAFFS is not set
|
||||
# CONFIG_PKG_USING_LITTLEFS is not set
|
||||
# CONFIG_PKG_USING_THREAD_POOL is not set
|
||||
|
||||
#
|
||||
# peripheral libraries and drivers
|
||||
#
|
||||
# CONFIG_PKG_USING_SENSORS_DRIVERS is not set
|
||||
# CONFIG_PKG_USING_REALTEK_AMEBA is not set
|
||||
# CONFIG_PKG_USING_SHT2X is not set
|
||||
# CONFIG_PKG_USING_STM32_SDIO is not set
|
||||
# CONFIG_PKG_USING_ICM20608 is not set
|
||||
# CONFIG_PKG_USING_U8G2 is not set
|
||||
# CONFIG_PKG_USING_BUTTON is not set
|
||||
# CONFIG_PKG_USING_PCF8574 is not set
|
||||
# CONFIG_PKG_USING_SX12XX is not set
|
||||
# CONFIG_PKG_USING_SIGNAL_LED is not set
|
||||
# CONFIG_PKG_USING_LEDBLINK is not set
|
||||
# CONFIG_PKG_USING_WM_LIBRARIES is not set
|
||||
# CONFIG_PKG_USING_KENDRYTE_SDK is not set
|
||||
# CONFIG_PKG_USING_INFRARED is not set
|
||||
# CONFIG_PKG_USING_ROSSERIAL is not set
|
||||
# CONFIG_PKG_USING_AT24CXX is not set
|
||||
# CONFIG_PKG_USING_MOTIONDRIVER2RTT is not set
|
||||
# CONFIG_PKG_USING_AD7746 is not set
|
||||
# CONFIG_PKG_USING_PCA9685 is not set
|
||||
# CONFIG_PKG_USING_I2C_TOOLS is not set
|
||||
# CONFIG_PKG_USING_NRF24L01 is not set
|
||||
# CONFIG_PKG_USING_TOUCH_DRIVERS is not set
|
||||
|
||||
#
|
||||
# miscellaneous packages
|
||||
#
|
||||
# CONFIG_PKG_USING_LIBCSV is not set
|
||||
# CONFIG_PKG_USING_OPTPARSE is not set
|
||||
# CONFIG_PKG_USING_FASTLZ is not set
|
||||
# CONFIG_PKG_USING_MINILZO is not set
|
||||
# CONFIG_PKG_USING_QUICKLZ is not set
|
||||
# CONFIG_PKG_USING_MULTIBUTTON is not set
|
||||
# CONFIG_PKG_USING_CANFESTIVAL is not set
|
||||
# CONFIG_PKG_USING_ZLIB is not set
|
||||
# CONFIG_PKG_USING_DSTR is not set
|
||||
# CONFIG_PKG_USING_TINYFRAME is not set
|
||||
# CONFIG_PKG_USING_KENDRYTE_DEMO is not set
|
||||
# CONFIG_PKG_USING_DIGITALCTRL is not set
|
||||
|
||||
#
|
||||
# samples: kernel and components samples
|
||||
#
|
||||
# CONFIG_PKG_USING_KERNEL_SAMPLES is not set
|
||||
# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set
|
||||
# CONFIG_PKG_USING_NETWORK_SAMPLES is not set
|
||||
# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set
|
||||
# CONFIG_PKG_USING_HELLO is not set
|
||||
# CONFIG_PKG_USING_VI is not set
|
||||
# CONFIG_PKG_USING_NNOM is not set
|
||||
# CONFIG_PKG_USING_LIBANN is not set
|
||||
@@ -1,26 +0,0 @@
|
||||
mainmenu "RT-Thread Project Configuration"
|
||||
|
||||
config BSP_DIR
|
||||
string
|
||||
option env="BSP_ROOT"
|
||||
default "."
|
||||
|
||||
config RTT_DIR
|
||||
string
|
||||
option env="RTT_ROOT"
|
||||
default "../.."
|
||||
|
||||
config PKGS_DIR
|
||||
string
|
||||
option env="PKGS_ROOT"
|
||||
default "packages"
|
||||
|
||||
source "$RTT_DIR/Kconfig"
|
||||
source "$PKGS_DIR/Kconfig"
|
||||
|
||||
config SOC_NRF52832
|
||||
bool
|
||||
select RT_USING_COMPONENTS_INIT
|
||||
# select RT_USING_USER_MAIN
|
||||
default y
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
# for module compiling
|
||||
import os
|
||||
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(d, 'SConscript'))
|
||||
|
||||
objs = objs + SConscript(os.path.join(cwd, 'nRF5_SDK_13.0.0_04a0bfd/components/SConscript'))
|
||||
|
||||
Return('objs')
|
||||
@@ -1,35 +0,0 @@
|
||||
import os
|
||||
import sys
|
||||
import rtconfig
|
||||
|
||||
if os.getenv('RTT_ROOT'):
|
||||
RTT_ROOT = os.getenv('RTT_ROOT')
|
||||
else:
|
||||
RTT_ROOT = os.path.normpath(os.getcwd() + '/../..')
|
||||
|
||||
sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')]
|
||||
from building import *
|
||||
|
||||
TARGET = 'rtthread_nrf52832.' + rtconfig.TARGET_EXT
|
||||
|
||||
DefaultEnvironment(tools=[])
|
||||
env = Environment(tools = ['mingw'],
|
||||
AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS,
|
||||
CC = rtconfig.CC, CCFLAGS = rtconfig.CFLAGS,
|
||||
AR = rtconfig.AR, ARFLAGS = '-rc',
|
||||
LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS)
|
||||
env.PrependENVPath('PATH', rtconfig.EXEC_PATH)
|
||||
|
||||
if rtconfig.PLATFORM == 'iar':
|
||||
env.Replace(CCCOM = ['$CC $CCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES'])
|
||||
env.Replace(ARFLAGS = [''])
|
||||
env.Replace(LINKCOM = ['$LINK $SOURCES $LINKFLAGS -o $TARGET --map project.map'])
|
||||
|
||||
Export('RTT_ROOT')
|
||||
Export('rtconfig')
|
||||
|
||||
# prepare building environment
|
||||
objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False)
|
||||
|
||||
# make a building
|
||||
DoBuilding(TARGET, objs)
|
||||
@@ -1,11 +0,0 @@
|
||||
Import('RTT_ROOT')
|
||||
Import('rtconfig')
|
||||
from building import *
|
||||
|
||||
cwd = os.path.join(str(Dir('#')), 'applications')
|
||||
src = Glob('*.c')
|
||||
CPPPATH = [cwd, str(Dir('#'))]
|
||||
|
||||
group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH)
|
||||
|
||||
Return('group')
|
||||
@@ -1,48 +0,0 @@
|
||||
/*
|
||||
* File : application.c
|
||||
* This file is part of RT-Thread RTOS
|
||||
* COPYRIGHT (C) 2015, RT-Thread Development Team
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.rt-thread.org/license/LICENSE
|
||||
*
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
* 2015-03-01 Yangfs the first version
|
||||
* 2015-03-27 Bernard code cleanup.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @addtogroup NRF52832
|
||||
*/
|
||||
/*@{*/
|
||||
|
||||
#include <rtthread.h>
|
||||
|
||||
#ifdef RT_USING_FINSH
|
||||
#include <finsh.h>
|
||||
#include <shell.h>
|
||||
#endif
|
||||
|
||||
void rt_init_thread_entry(void* parameter)
|
||||
{
|
||||
extern rt_err_t ble_init(void);
|
||||
|
||||
ble_init();
|
||||
}
|
||||
|
||||
int rt_application_init(void)
|
||||
{
|
||||
rt_thread_t tid;
|
||||
|
||||
tid = rt_thread_create("init", rt_init_thread_entry, RT_NULL, 1024,
|
||||
RT_THREAD_PRIORITY_MAX / 3, 20);
|
||||
if (tid != RT_NULL)
|
||||
rt_thread_startup(tid);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*@}*/
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,98 +0,0 @@
|
||||
/*
|
||||
* File : startup.c
|
||||
* This file is part of RT-Thread RTOS
|
||||
* COPYRIGHT (C) 2015, RT-Thread Develop Team
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://openlab.rt-thread.com/license/LICENSE
|
||||
*
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
* 2015-03-01 Yangfs the first version
|
||||
* 2015-03-27 Bernard code cleanup.
|
||||
*/
|
||||
|
||||
#include <rthw.h>
|
||||
#include <rtthread.h>
|
||||
|
||||
#include "board.h"
|
||||
|
||||
/**
|
||||
* @addtogroup NRF52832
|
||||
*/
|
||||
|
||||
/*@{*/
|
||||
|
||||
extern int rt_application_init(void);
|
||||
|
||||
#ifdef __CC_ARM
|
||||
extern int Image$$RW_IRAM1$$ZI$$Limit;
|
||||
#define NRF_SRAM_BEGIN (&Image$$RW_IRAM1$$ZI$$Limit)
|
||||
#elif __ICCARM__
|
||||
#pragma section="HEAP"
|
||||
#define NRF_SRAM_BEGIN (__segment_end("HEAP"))
|
||||
#else
|
||||
extern int __bss_end;
|
||||
#define NRF_SRAM_BEGIN (&__bss_end)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* This function will startup RT-Thread RTOS.
|
||||
*/
|
||||
void rtthread_startup(void)
|
||||
{
|
||||
/* init board */
|
||||
rt_hw_board_init();
|
||||
|
||||
/* show version */
|
||||
rt_show_version();
|
||||
|
||||
/* init tick */
|
||||
rt_system_tick_init();
|
||||
|
||||
/* init kernel object */
|
||||
rt_system_object_init();
|
||||
|
||||
/* init timer system */
|
||||
rt_system_timer_init();
|
||||
|
||||
#ifdef RT_USING_HEAP
|
||||
rt_system_heap_init((void*)NRF_SRAM_BEGIN, (void*)CHIP_SRAM_END);
|
||||
#endif
|
||||
|
||||
/* init scheduler system */
|
||||
rt_system_scheduler_init();
|
||||
|
||||
#ifdef RT_USING_COMPONENTS_INIT
|
||||
rt_components_init();
|
||||
#endif
|
||||
|
||||
/* init application */
|
||||
rt_application_init();
|
||||
|
||||
/* init timer thread */
|
||||
rt_system_timer_thread_init();
|
||||
|
||||
/* init idle thread */
|
||||
rt_thread_idle_init();
|
||||
|
||||
/* start scheduler */
|
||||
rt_system_scheduler_start();
|
||||
|
||||
/* never reach here */
|
||||
return ;
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
/* disable interrupt first */
|
||||
// rt_hw_interrupt_disable();
|
||||
|
||||
/* startup RT-Thread RTOS */
|
||||
rtthread_startup();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*@}*/
|
||||
@@ -1,14 +0,0 @@
|
||||
Import('RTT_ROOT')
|
||||
Import('rtconfig')
|
||||
from building import *
|
||||
|
||||
cwd = GetCurrentDir()
|
||||
src = Glob('*.c')
|
||||
CPPPATH = [cwd]
|
||||
|
||||
#remove other no use files
|
||||
#SrcRemove(src, '*.c')
|
||||
|
||||
group = DefineGroup('Board', src, depend = [''], CPPPATH = CPPPATH)
|
||||
|
||||
Return('group')
|
||||
@@ -1,268 +0,0 @@
|
||||
#include "board.h"
|
||||
#include "uart.h"
|
||||
#include "app_util_platform.h"
|
||||
#include "nrf_drv_common.h"
|
||||
#include "nrf_systick.h"
|
||||
#include "nrf_rtc.h"
|
||||
#include "nrf_drv_clock.h"
|
||||
#include "softdevice_handler.h"
|
||||
#include "nrf_drv_uart.h"
|
||||
#include "nrf_gpio.h"
|
||||
|
||||
#include <rtthread.h>
|
||||
#include <rthw.h>
|
||||
|
||||
#if 0
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : SysTick_Configuration
|
||||
* Description : Configures the SysTick for OS tick.
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
void SysTick_Configuration(void)
|
||||
{
|
||||
nrf_drv_common_irq_enable(SysTick_IRQn, APP_TIMER_CONFIG_IRQ_PRIORITY);
|
||||
nrf_systick_load_set(SystemCoreClock / RT_TICK_PER_SECOND);
|
||||
nrf_systick_val_clear();
|
||||
nrf_systick_csr_set(NRF_SYSTICK_CSR_CLKSOURCE_CPU | NRF_SYSTICK_CSR_TICKINT_ENABLE
|
||||
| NRF_SYSTICK_CSR_ENABLE);
|
||||
}
|
||||
|
||||
/**
|
||||
* This is the timer interrupt service routine.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
void SysTick_Handler(void)
|
||||
{
|
||||
if (rt_thread_self() != RT_NULL)
|
||||
{
|
||||
/* enter interrupt */
|
||||
rt_interrupt_enter();
|
||||
|
||||
rt_tick_increase();
|
||||
|
||||
/* leave interrupt */
|
||||
rt_interrupt_leave();
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#define TICK_RATE_HZ RT_TICK_PER_SECOND
|
||||
#define SYSTICK_CLOCK_HZ ( 32768UL )
|
||||
|
||||
#define NRF_RTC_REG NRF_RTC1
|
||||
/* IRQn used by the selected RTC */
|
||||
#define NRF_RTC_IRQn RTC1_IRQn
|
||||
/* Constants required to manipulate the NVIC. */
|
||||
#define NRF_RTC_PRESCALER ( (uint32_t) (ROUNDED_DIV(SYSTICK_CLOCK_HZ, TICK_RATE_HZ) - 1) )
|
||||
/* Maximum RTC ticks */
|
||||
#define NRF_RTC_MAXTICKS ((1U<<24)-1U)
|
||||
|
||||
static volatile uint32_t m_tick_overflow_count = 0;
|
||||
#define NRF_RTC_BITWIDTH 24
|
||||
#define OSTick_Handler RTC1_IRQHandler
|
||||
#define EXPECTED_IDLE_TIME_BEFORE_SLEEP 2
|
||||
|
||||
void SysTick_Configuration(void)
|
||||
{
|
||||
nrf_drv_clock_lfclk_request(NULL);
|
||||
|
||||
/* Configure SysTick to interrupt at the requested rate. */
|
||||
nrf_rtc_prescaler_set(NRF_RTC_REG, NRF_RTC_PRESCALER);
|
||||
nrf_rtc_int_enable (NRF_RTC_REG, RTC_INTENSET_TICK_Msk);
|
||||
nrf_rtc_task_trigger (NRF_RTC_REG, NRF_RTC_TASK_CLEAR);
|
||||
nrf_rtc_task_trigger (NRF_RTC_REG, NRF_RTC_TASK_START);
|
||||
nrf_rtc_event_enable(NRF_RTC_REG, RTC_EVTEN_OVRFLW_Msk);
|
||||
|
||||
NVIC_SetPriority(NRF_RTC_IRQn, 0xF);
|
||||
NVIC_EnableIRQ(NRF_RTC_IRQn);
|
||||
}
|
||||
|
||||
static rt_tick_t _tick_distance(void)
|
||||
{
|
||||
nrf_rtc_event_clear(NRF_RTC_REG, NRF_RTC_EVENT_COMPARE_0);
|
||||
|
||||
uint32_t systick_counter = nrf_rtc_counter_get(NRF_RTC_REG);
|
||||
nrf_rtc_event_clear(NRF_RTC_REG, NRF_RTC_EVENT_TICK);
|
||||
|
||||
/* check for overflow in TICK counter */
|
||||
if(nrf_rtc_event_pending(NRF_RTC_REG, NRF_RTC_EVENT_OVERFLOW))
|
||||
{
|
||||
nrf_rtc_event_clear(NRF_RTC_REG, NRF_RTC_EVENT_OVERFLOW);
|
||||
m_tick_overflow_count++;
|
||||
}
|
||||
|
||||
return ((m_tick_overflow_count << NRF_RTC_BITWIDTH) + systick_counter) - rt_tick_get();
|
||||
}
|
||||
|
||||
void OSTick_Handler( void )
|
||||
{
|
||||
uint32_t diff;
|
||||
|
||||
/* enter interrupt */
|
||||
rt_interrupt_enter();
|
||||
diff = _tick_distance();
|
||||
|
||||
while((diff--) > 0)
|
||||
{
|
||||
if (rt_thread_self() != RT_NULL)
|
||||
{
|
||||
rt_tick_increase();
|
||||
}
|
||||
}
|
||||
/* leave interrupt */
|
||||
rt_interrupt_leave();
|
||||
}
|
||||
|
||||
static void _wakeup_tick_adjust(void)
|
||||
{
|
||||
uint32_t diff;
|
||||
uint32_t level;
|
||||
|
||||
level = rt_hw_interrupt_disable();
|
||||
|
||||
diff = _tick_distance();
|
||||
|
||||
rt_tick_set(rt_tick_get() + diff);
|
||||
|
||||
if (rt_thread_self() != RT_NULL)
|
||||
{
|
||||
struct rt_thread *thread;
|
||||
|
||||
/* check time slice */
|
||||
thread = rt_thread_self();
|
||||
|
||||
if (thread->remaining_tick <= diff)
|
||||
{
|
||||
/* change to initialized tick */
|
||||
thread->remaining_tick = thread->init_tick;
|
||||
|
||||
/* yield */
|
||||
rt_thread_yield();
|
||||
}
|
||||
else
|
||||
{
|
||||
thread->remaining_tick -= diff;
|
||||
}
|
||||
|
||||
/* check timer */
|
||||
rt_timer_check();
|
||||
}
|
||||
|
||||
rt_hw_interrupt_enable(level);
|
||||
}
|
||||
|
||||
static void _sleep_ongo( uint32_t sleep_tick )
|
||||
{
|
||||
uint32_t enterTime;
|
||||
uint32_t entry_tick;
|
||||
|
||||
/* Make sure the SysTick reload value does not overflow the counter. */
|
||||
if ( sleep_tick > NRF_RTC_MAXTICKS - EXPECTED_IDLE_TIME_BEFORE_SLEEP )
|
||||
{
|
||||
sleep_tick = NRF_RTC_MAXTICKS - EXPECTED_IDLE_TIME_BEFORE_SLEEP;
|
||||
}
|
||||
|
||||
rt_enter_critical();
|
||||
|
||||
enterTime = nrf_rtc_counter_get(NRF_RTC_REG);
|
||||
|
||||
{
|
||||
uint32_t wakeupTime = (enterTime + sleep_tick) & NRF_RTC_MAXTICKS;
|
||||
|
||||
/* Stop tick events */
|
||||
nrf_rtc_int_disable(NRF_RTC_REG, NRF_RTC_INT_TICK_MASK);
|
||||
|
||||
/* Configure CTC interrupt */
|
||||
nrf_rtc_cc_set(NRF_RTC_REG, 0, wakeupTime);
|
||||
nrf_rtc_event_clear(NRF_RTC_REG, NRF_RTC_EVENT_COMPARE_0);
|
||||
nrf_rtc_int_enable(NRF_RTC_REG, NRF_RTC_INT_COMPARE0_MASK);
|
||||
|
||||
entry_tick = rt_tick_get();
|
||||
|
||||
__DSB();
|
||||
|
||||
if ( sleep_tick > 0 )
|
||||
{
|
||||
#ifdef SOFTDEVICE_PRESENT
|
||||
if (softdevice_handler_is_enabled())
|
||||
{
|
||||
uint32_t err_code = sd_app_evt_wait();
|
||||
APP_ERROR_CHECK(err_code);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
/* No SD - we would just block interrupts globally.
|
||||
* BASEPRI cannot be used for that because it would prevent WFE from wake up.
|
||||
*/
|
||||
do{
|
||||
__WFE();
|
||||
} while (0 == (NVIC->ISPR[0] | NVIC->ISPR[1]));
|
||||
}
|
||||
}
|
||||
|
||||
nrf_rtc_int_disable(NRF_RTC_REG, NRF_RTC_INT_COMPARE0_MASK);
|
||||
nrf_rtc_event_clear(NRF_RTC_REG, NRF_RTC_EVENT_COMPARE_0);
|
||||
|
||||
_wakeup_tick_adjust();
|
||||
|
||||
/* Correct the system ticks */
|
||||
{
|
||||
|
||||
nrf_rtc_event_clear(NRF_RTC_REG, NRF_RTC_EVENT_TICK);
|
||||
nrf_rtc_int_enable (NRF_RTC_REG, NRF_RTC_INT_TICK_MASK);
|
||||
/* It is important that we clear pending here so that our corrections are latest and in sync with tick_interrupt handler */
|
||||
NVIC_ClearPendingIRQ(NRF_RTC_IRQn);
|
||||
}
|
||||
|
||||
rt_kprintf("entry tick:%u, expected:%u, current tick:%u\n", entry_tick, sleep_tick, rt_tick_get());
|
||||
}
|
||||
|
||||
rt_exit_critical();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
void rt_hw_system_powersave(void)
|
||||
{
|
||||
uint32_t sleep_tick;
|
||||
|
||||
sleep_tick = rt_timer_next_timeout_tick() - rt_tick_get();
|
||||
|
||||
if ( sleep_tick >= EXPECTED_IDLE_TIME_BEFORE_SLEEP)
|
||||
{
|
||||
// rt_kprintf("sleep entry:%u\n", rt_tick_get());
|
||||
_sleep_ongo( sleep_tick );
|
||||
}
|
||||
}
|
||||
|
||||
void rt_hw_board_init(void)
|
||||
{
|
||||
// sd_power_dcdc_mode_set(NRF_POWER_DCDC_ENABLE);
|
||||
/* Activate deep sleep mode */
|
||||
SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
|
||||
|
||||
nrf_drv_clock_init();
|
||||
// nrf_drv_clock_hfclk_request(0);
|
||||
|
||||
SysTick_Configuration();
|
||||
|
||||
rt_thread_idle_sethook(rt_hw_system_powersave);
|
||||
|
||||
rt_hw_uart_init();
|
||||
|
||||
#ifdef RT_USING_CONSOLE
|
||||
rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
|
||||
#endif
|
||||
|
||||
#ifdef RT_USING_COMPONENTS_INIT
|
||||
rt_components_board_init();
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
#ifndef _BOARD_H_
|
||||
#define _BOARD_H_
|
||||
|
||||
#include <rtthread.h>
|
||||
|
||||
#include "nrf.h"
|
||||
|
||||
#define CHIP_SRAM_END (0x20000000 + 64*1024)
|
||||
|
||||
void rt_hw_board_init(void);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,289 +0,0 @@
|
||||
#include "board.h"
|
||||
#include "uart.h"
|
||||
|
||||
#include "nrf_drv_common.h"
|
||||
#include "nrf_drv_uart.h"
|
||||
#include "app_util_platform.h"
|
||||
#include "nrf_gpio.h"
|
||||
|
||||
#include <rtdevice.h>
|
||||
|
||||
static struct rt_serial_device _serial0_0;
|
||||
#if USE_UART0_1
|
||||
static struct rt_serial_device _serial0_1;
|
||||
#endif
|
||||
|
||||
typedef struct
|
||||
{
|
||||
struct rt_serial_device *serial;
|
||||
nrf_drv_uart_t uart;
|
||||
uint32_t rx_pin;
|
||||
uint32_t tx_pin;
|
||||
} UART_CFG_T;
|
||||
|
||||
UART_CFG_T uart0 = {
|
||||
.uart = NRF_DRV_UART_INSTANCE(0),
|
||||
#ifdef RT_USING_CONSOLE
|
||||
.rx_pin = 8,
|
||||
.tx_pin = 6
|
||||
#else
|
||||
.rx_pin = 19,
|
||||
.tx_pin = 20
|
||||
#endif
|
||||
};
|
||||
|
||||
#if USE_UART0_1
|
||||
UART_CFG_T uart1 = {
|
||||
.uart = NRF_DRV_UART_INSTANCE(0),
|
||||
.rx_pin = 3,
|
||||
.tx_pin = 4
|
||||
};
|
||||
#endif
|
||||
|
||||
UART_CFG_T *working_cfg = RT_NULL;
|
||||
|
||||
void UART0_IRQHandler(void)
|
||||
{
|
||||
if (nrf_uart_int_enable_check(NRF_UART0, NRF_UART_INT_MASK_ERROR)
|
||||
&& nrf_uart_event_check(NRF_UART0, NRF_UART_EVENT_ERROR))
|
||||
{
|
||||
nrf_uart_event_clear(NRF_UART0, NRF_UART_EVENT_ERROR);
|
||||
}
|
||||
|
||||
if (nrf_uart_int_enable_check(NRF_UART0, NRF_UART_INT_MASK_RXDRDY)
|
||||
&& nrf_uart_event_check(NRF_UART0, NRF_UART_EVENT_RXDRDY))
|
||||
{
|
||||
rt_hw_serial_isr(working_cfg->serial, RT_SERIAL_EVENT_RX_IND);
|
||||
}
|
||||
|
||||
if (nrf_uart_int_enable_check(NRF_UART0, NRF_UART_INT_MASK_TXDRDY)
|
||||
&& nrf_uart_event_check(NRF_UART0, NRF_UART_EVENT_TXDRDY))
|
||||
{
|
||||
rt_hw_serial_isr(working_cfg->serial, RT_SERIAL_EVENT_TX_DONE);
|
||||
}
|
||||
|
||||
if (nrf_uart_event_check(NRF_UART0, NRF_UART_EVENT_RXTO))
|
||||
{
|
||||
rt_hw_serial_isr(working_cfg->serial, RT_SERIAL_EVENT_RX_TIMEOUT);
|
||||
}
|
||||
}
|
||||
|
||||
static rt_err_t _uart_cfg(struct rt_serial_device *serial, struct serial_configure *cfg)
|
||||
{
|
||||
nrf_drv_uart_config_t config = NRF_DRV_UART_DEFAULT_CONFIG;
|
||||
UART_CFG_T *instance = &uart0;
|
||||
|
||||
RT_ASSERT(serial != RT_NULL);
|
||||
RT_ASSERT(cfg != RT_NULL);
|
||||
|
||||
if (serial->parent.user_data != RT_NULL)
|
||||
{
|
||||
instance = (UART_CFG_T*)serial->parent.user_data;
|
||||
}
|
||||
|
||||
nrf_uart_disable(instance->uart.reg.p_uart);
|
||||
|
||||
switch (cfg->baud_rate)
|
||||
{
|
||||
case 115200:
|
||||
config.baudrate = NRF_UART_BAUDRATE_115200;
|
||||
break;
|
||||
|
||||
case 9600:
|
||||
config.baudrate = NRF_UART_BAUDRATE_9600;
|
||||
break;
|
||||
|
||||
default:
|
||||
config.baudrate = NRF_UART_BAUDRATE_115200;
|
||||
break;
|
||||
}
|
||||
|
||||
if (cfg->parity == PARITY_NONE)
|
||||
{
|
||||
config.parity = NRF_UART_PARITY_EXCLUDED;
|
||||
}
|
||||
else
|
||||
{
|
||||
config.parity = NRF_UART_PARITY_INCLUDED;
|
||||
}
|
||||
|
||||
config.hwfc = NRF_UART_HWFC_DISABLED;
|
||||
config.interrupt_priority = APP_IRQ_PRIORITY_LOWEST;
|
||||
config.pselcts = 0;
|
||||
config.pselrts = 0;
|
||||
config.pselrxd = instance->rx_pin;
|
||||
config.pseltxd = instance->tx_pin;
|
||||
|
||||
nrf_gpio_pin_set(config.pseltxd);
|
||||
nrf_gpio_cfg_output(config.pseltxd);
|
||||
nrf_gpio_pin_clear(config.pseltxd);
|
||||
nrf_gpio_cfg_input(config.pselrxd, NRF_GPIO_PIN_NOPULL);
|
||||
nrf_uart_baudrate_set(instance->uart.reg.p_uart, config.baudrate);
|
||||
nrf_uart_configure(instance->uart.reg.p_uart, config.parity, config.hwfc);
|
||||
nrf_uart_txrx_pins_set(instance->uart.reg.p_uart, config.pseltxd, config.pselrxd);
|
||||
|
||||
if (config.hwfc == NRF_UART_HWFC_ENABLED)
|
||||
{
|
||||
nrf_uart_hwfc_pins_set(instance->uart.reg.p_uart, config.pselrts, config.pselcts);
|
||||
}
|
||||
|
||||
nrf_uart_event_clear(instance->uart.reg.p_uart, NRF_UART_EVENT_TXDRDY);
|
||||
nrf_uart_event_clear(instance->uart.reg.p_uart, NRF_UART_EVENT_RXDRDY);
|
||||
nrf_uart_event_clear(instance->uart.reg.p_uart, NRF_UART_EVENT_RXTO);
|
||||
nrf_uart_event_clear(instance->uart.reg.p_uart, NRF_UART_EVENT_ERROR);
|
||||
|
||||
nrf_uart_int_enable(instance->uart.reg.p_uart, NRF_UART_INT_MASK_RXDRDY | NRF_UART_INT_MASK_RXTO | NRF_UART_INT_MASK_ERROR);
|
||||
nrf_drv_common_irq_enable(nrf_drv_get_IRQn((void *)instance->uart.reg.p_uart), config.interrupt_priority);
|
||||
nrf_uart_enable(instance->uart.reg.p_uart);
|
||||
// nrf_uart_task_trigger(instance->uart.reg.p_uart, NRF_UART_TASK_STARTRX);
|
||||
working_cfg = instance;
|
||||
return RT_EOK;
|
||||
}
|
||||
|
||||
static rt_err_t _uart_ctrl(struct rt_serial_device *serial, int cmd, void *arg)
|
||||
{
|
||||
UART_CFG_T *instance = working_cfg;
|
||||
|
||||
RT_ASSERT(serial != RT_NULL);
|
||||
|
||||
if (serial->parent.user_data != RT_NULL)
|
||||
{
|
||||
instance = (UART_CFG_T*)serial->parent.user_data;
|
||||
}
|
||||
|
||||
switch (cmd)
|
||||
{
|
||||
/* disable interrupt */
|
||||
case RT_DEVICE_CTRL_CLR_INT:
|
||||
nrf_uart_task_trigger(instance->uart.reg.p_uart, NRF_UART_TASK_STOPRX);
|
||||
nrf_uart_int_disable(instance->uart.reg.p_uart, NRF_UART_INT_MASK_RXDRDY
|
||||
| NRF_UART_INT_MASK_RXTO
|
||||
| NRF_UART_INT_MASK_ERROR);
|
||||
nrf_drv_common_irq_disable(nrf_drv_get_IRQn((void *)instance->uart.reg.p_uart));
|
||||
break;
|
||||
|
||||
/* enable interrupt */
|
||||
case RT_DEVICE_CTRL_SET_INT:
|
||||
nrf_uart_event_clear(instance->uart.reg.p_uart, NRF_UART_EVENT_RXDRDY);
|
||||
nrf_uart_event_clear(instance->uart.reg.p_uart, NRF_UART_EVENT_RXTO);
|
||||
nrf_uart_event_clear(instance->uart.reg.p_uart, NRF_UART_EVENT_ERROR);
|
||||
/* Enable RX interrupt. */
|
||||
nrf_uart_int_enable(instance->uart.reg.p_uart, NRF_UART_INT_MASK_RXDRDY
|
||||
| NRF_UART_INT_MASK_RXTO
|
||||
| NRF_UART_INT_MASK_ERROR);
|
||||
nrf_drv_common_irq_enable(nrf_drv_get_IRQn((void *)instance->uart.reg.p_uart), APP_IRQ_PRIORITY_LOWEST);
|
||||
nrf_uart_task_trigger(instance->uart.reg.p_uart, NRF_UART_TASK_STARTRX);
|
||||
break;
|
||||
|
||||
case RT_DEVICE_CTRL_CUSTOM:
|
||||
if ((rt_uint32_t)(arg) == UART_CONFIG_BAUD_RATE_9600)
|
||||
{
|
||||
instance->serial->config.baud_rate = 9600;
|
||||
nrf_uart_baudrate_set(instance->uart.reg.p_uart, NRF_UART_BAUDRATE_9600);
|
||||
}
|
||||
else if ((rt_uint32_t)(arg) == UART_CONFIG_BAUD_RATE_115200)
|
||||
{
|
||||
instance->serial->config.baud_rate = 115200;
|
||||
nrf_uart_baudrate_set(instance->uart.reg.p_uart, NRF_UART_BAUDRATE_115200);
|
||||
}
|
||||
|
||||
// _uart_cfg(instance->serial, &(instance->serial->config));
|
||||
// nrf_uart_task_trigger(instance->uart.reg.p_uart, NRF_UART_TASK_STARTRX);
|
||||
break;
|
||||
|
||||
case RT_DEVICE_CTRL_PIN:
|
||||
if (working_cfg != instance)
|
||||
{
|
||||
_uart_cfg(instance->serial, &(instance->serial->config));
|
||||
}
|
||||
break;
|
||||
|
||||
case RT_DEVICE_POWERSAVE:
|
||||
nrf_uart_disable(instance->uart.reg.p_uart);
|
||||
nrf_uart_txrx_pins_disconnect(instance->uart.reg.p_uart);
|
||||
nrf_gpio_pin_clear(instance->rx_pin);
|
||||
nrf_gpio_cfg_output(instance->rx_pin);
|
||||
nrf_gpio_pin_clear(instance->tx_pin);
|
||||
nrf_gpio_cfg_output(instance->tx_pin);
|
||||
break;
|
||||
|
||||
case RT_DEVICE_WAKEUP:
|
||||
_uart_cfg(instance->serial, &(instance->serial->config));
|
||||
break;
|
||||
|
||||
default:
|
||||
return RT_ERROR;
|
||||
}
|
||||
|
||||
return RT_EOK;
|
||||
}
|
||||
|
||||
static int _uart_putc(struct rt_serial_device *serial, char c)
|
||||
{
|
||||
UART_CFG_T *instance = working_cfg;
|
||||
|
||||
RT_ASSERT(serial != RT_NULL);
|
||||
|
||||
if (serial->parent.user_data != RT_NULL)
|
||||
{
|
||||
instance = (UART_CFG_T*)serial->parent.user_data;
|
||||
}
|
||||
|
||||
nrf_uart_event_clear(instance->uart.reg.p_uart, NRF_UART_EVENT_TXDRDY);
|
||||
nrf_uart_task_trigger(instance->uart.reg.p_uart, NRF_UART_TASK_STARTTX);
|
||||
nrf_uart_txd_set(instance->uart.reg.p_uart, (uint8_t)c);
|
||||
while (!nrf_uart_event_check(instance->uart.reg.p_uart, NRF_UART_EVENT_TXDRDY))
|
||||
{
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int _uart_getc(struct rt_serial_device *serial)
|
||||
{
|
||||
int ch = -1;
|
||||
UART_CFG_T *instance = working_cfg;
|
||||
|
||||
RT_ASSERT(serial != RT_NULL);
|
||||
|
||||
if (serial->parent.user_data != RT_NULL)
|
||||
{
|
||||
instance = (UART_CFG_T*)serial->parent.user_data;
|
||||
}
|
||||
|
||||
if (nrf_uart_event_check(instance->uart.reg.p_uart, NRF_UART_EVENT_RXDRDY))
|
||||
{
|
||||
nrf_uart_event_clear(instance->uart.reg.p_uart, NRF_UART_EVENT_RXDRDY);
|
||||
ch = (int)(nrf_uart_rxd_get(instance->uart.reg.p_uart));
|
||||
}
|
||||
|
||||
return ch;
|
||||
}
|
||||
|
||||
static struct rt_uart_ops _uart_ops = {
|
||||
_uart_cfg,
|
||||
_uart_ctrl,
|
||||
_uart_putc,
|
||||
_uart_getc
|
||||
};
|
||||
|
||||
void rt_hw_uart_init(void)
|
||||
{
|
||||
struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT;
|
||||
|
||||
config.bufsz = RT_SERIAL_RB_BUFSZ;
|
||||
_serial0_0.config = config;
|
||||
_serial0_0.ops = &_uart_ops;
|
||||
uart0.serial = &_serial0_0;
|
||||
|
||||
rt_hw_serial_register(&_serial0_0, "uart0", RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, &uart0);
|
||||
|
||||
#if USE_UART0_1
|
||||
config.bufsz = UART0_RB_SIZE;
|
||||
_serial0_1.config = config;
|
||||
_serial0_1.ops = &_uart_ops;
|
||||
uart1.serial = &_serial0_1;
|
||||
rt_hw_serial_register(&_serial0_1, "uart1", RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, &uart1);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
#ifndef _UART_H_
|
||||
#define _UART_H_
|
||||
|
||||
#define RT_DEVICE_CTRL_CUSTOM 0x20
|
||||
#define RT_DEVICE_CTRL_PIN 0x21
|
||||
#define RT_DEVICE_POWERSAVE 0x22
|
||||
#define RT_DEVICE_WAKEUP 0x23
|
||||
|
||||
#define UART_CONFIG_BAUD_RATE_9600 1
|
||||
#define UART_CONFIG_BAUD_RATE_115200 2
|
||||
|
||||
#define UART0_RB_SIZE 1024
|
||||
|
||||
// #define USE_UART0_1 0
|
||||
|
||||
void rt_hw_uart_init(void);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
Import('RTT_ROOT')
|
||||
Import('rtconfig')
|
||||
from building import *
|
||||
|
||||
# get current directory
|
||||
cwd = GetCurrentDir()
|
||||
|
||||
BLE_COMMON = Glob('./components/ble/common/*.c')
|
||||
SrcRemove(BLE_COMMON, 'ble_conn_state.c')
|
||||
|
||||
BLE_GATT = Glob('./components/ble/nrf_ble_gatt/*.c')
|
||||
BLE_ADVERTISING = Glob('./components/ble/ble_advertising/*.c')
|
||||
|
||||
BLE_SERVICE = Glob('./components/ble/ble_services/ble_nus/*.c')
|
||||
|
||||
BLE_SRC = BLE_COMMON + BLE_GATT + BLE_SERVICE + BLE_ADVERTISING
|
||||
|
||||
SOFTDEVICE = Glob('./components/softdevice/common/softdevice_handler/*.c')
|
||||
SrcRemove(SOFTDEVICE, './components/softdevice/common/softdevice_handler/softdevice_handler_appsh.c')
|
||||
|
||||
BLE_STACK_SRC = BLE_SRC + SOFTDEVICE
|
||||
|
||||
path = [cwd + '/components']
|
||||
path += [cwd + '/components/softdevice/common/softdevice_handler']
|
||||
path += [cwd + '/components/softdevice/s132/headers']
|
||||
path += [cwd + '/components/softdevice/s132/headers/nrf52']
|
||||
path += [cwd + '/components/ble/common']
|
||||
path += [cwd + '/components/ble/nrf_ble_gatt']
|
||||
path += [cwd + '/components/ble/ble_advertising']
|
||||
path += [cwd + '/components/ble/ble_services/ble_nus']
|
||||
|
||||
CPPDEFINES = ['BLE_STACK_SUPPORT_REQD', 'NRF_SD_BLE_API_VERSION=4', 'S132', 'SOFTDEVICE_PRESENT']
|
||||
group = DefineGroup('BLE_STACK', BLE_STACK_SRC, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES)
|
||||
Return('group')
|
||||
@@ -1,52 +0,0 @@
|
||||
Import('RTT_ROOT')
|
||||
Import('rtconfig')
|
||||
from building import *
|
||||
|
||||
# get current directory
|
||||
cwd = GetCurrentDir()
|
||||
|
||||
DriversDir = cwd + '/drivers_nrf/'
|
||||
DeviceDrivers = [DriversDir + 'hal/nrf_saadc.c']
|
||||
DeviceDrivers += [DriversDir + 'common/nrf_drv_common.c']
|
||||
#DeviceDrivers += [DriversDir + 'uart/nrf_drv_uart.c']
|
||||
DeviceDrivers += [DriversDir + 'clock/nrf_drv_clock.c']
|
||||
DeviceDrivers += [DriversDir + 'gpiote/nrf_drv_gpiote.c']
|
||||
DeviceDrivers += [DriversDir + 'pwm/nrf_drv_pwm.c']
|
||||
DeviceDrivers += [DriversDir + 'saadc/nrf_drv_saadc.c']
|
||||
|
||||
Libraries_dir = cwd + '/libraries/'
|
||||
Libraries_src = Glob(Libraries_dir + 'log/src/*.c')
|
||||
Libraries_src += Glob(Libraries_dir + 'timer/app_timer_rtthread.c')
|
||||
Libraries_src += Glob(Libraries_dir + 'util/*.c')
|
||||
Libraries_src += Glob(Libraries_dir + 'fstorage/fstorage.c')
|
||||
Libraries_src += Glob(Libraries_dir + 'strerror/nrf_strerror.c')
|
||||
|
||||
src = DeviceDrivers + Libraries_src
|
||||
|
||||
path = [cwd]
|
||||
path += [cwd + '/device']
|
||||
path += [cwd + '/drivers_nrf/delay']
|
||||
path += [cwd + '/drivers_nrf/uart']
|
||||
path += [cwd + '/drivers_nrf/clock']
|
||||
path += [cwd + '/drivers_nrf/gpiote']
|
||||
path += [cwd + '/drivers_nrf/common']
|
||||
path += [cwd + '/drivers_nrf/hal']
|
||||
path += [cwd + '/drivers_nrf/pwm']
|
||||
path += [DriversDir + 'saadc']
|
||||
|
||||
path += [Libraries_dir + 'util']
|
||||
path += [Libraries_dir + 'timer']
|
||||
path += [Libraries_dir + 'fstorage']
|
||||
path += [Libraries_dir + 'experimental_section_vars']
|
||||
path += [Libraries_dir + 'log']
|
||||
path += [Libraries_dir + 'log/src']
|
||||
path += [Libraries_dir + 'strerror']
|
||||
|
||||
path += [cwd + '/toolchain/cmsis/include']
|
||||
|
||||
CPPDEFINES = ['RTTHREAD', 'SWI_DISABLE0', 'CONFIG_GPIO_AS_PINRESET', 'NRF52', 'NRF52832_XXAA']
|
||||
CPPDEFINES += ['NRF52_PAN_12', 'NRF52_PAN_15', 'NRF52_PAN_20', 'NRF52_PAN_31', 'NRF52_PAN_36']
|
||||
CPPDEFINES += ['NRF52_PAN_51', 'NRF52_PAN_54', 'NRF52_PAN_55', 'NRF52_PAN_58', 'NRF52_PAN_64', 'NRF52_PAN_74']
|
||||
|
||||
group = DefineGroup('NRF_DRIVERS', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES)
|
||||
Return('group')
|
||||
-86
@@ -1,86 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) 2015 - 2017, Nordic Semiconductor ASA
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||
* such product, must reproduce the above copyright notice, this list of
|
||||
* conditions and the following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* 4. This software, with or without modification, must only be used with a
|
||||
* Nordic Semiconductor ASA integrated circuit.
|
||||
*
|
||||
* 5. Any software provided in binary form under this license must not be reverse
|
||||
* engineered, decompiled, modified and/or disassembled.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
#include "sdk_common.h"
|
||||
#if NRF_MODULE_ENABLED(ANT_CHANNEL_CONFIG)
|
||||
#include "nrf_error.h"
|
||||
#include "ant_channel_config.h"
|
||||
#include "ant_interface.h"
|
||||
#include "ant_parameters.h"
|
||||
|
||||
uint32_t ant_channel_init(ant_channel_config_t const * p_config)
|
||||
{
|
||||
uint32_t err_code;
|
||||
// Set Channel Number.
|
||||
err_code = sd_ant_channel_assign(p_config->channel_number,
|
||||
p_config->channel_type,
|
||||
p_config->network_number,
|
||||
p_config->ext_assign);
|
||||
|
||||
VERIFY_SUCCESS(err_code);
|
||||
|
||||
// Set Channel ID.
|
||||
err_code = sd_ant_channel_id_set(p_config->channel_number,
|
||||
p_config->device_number,
|
||||
p_config->device_type,
|
||||
p_config->transmission_type);
|
||||
|
||||
VERIFY_SUCCESS(err_code);
|
||||
|
||||
// Set Channel RF frequency.
|
||||
err_code = sd_ant_channel_radio_freq_set(p_config->channel_number, p_config->rf_freq);
|
||||
VERIFY_SUCCESS(err_code);
|
||||
|
||||
// Set Channel period.
|
||||
if (!(p_config->ext_assign & EXT_PARAM_ALWAYS_SEARCH) && (p_config->channel_period != 0))
|
||||
{
|
||||
err_code = sd_ant_channel_period_set(p_config->channel_number, p_config->channel_period);
|
||||
}
|
||||
|
||||
|
||||
#if ANT_CONFIG_ENCRYPTED_CHANNELS > 0
|
||||
VERIFY_SUCCESS(err_code);
|
||||
|
||||
err_code = ant_channel_encrypt_config(p_config->channel_type , p_config->channel_number, p_config->p_crypto_settings);
|
||||
#endif
|
||||
|
||||
return err_code;
|
||||
}
|
||||
|
||||
#endif // NRF_MODULE_ENABLED(ANT_CHANNEL_CONFIG)
|
||||
-98
@@ -1,98 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) 2015 - 2017, Nordic Semiconductor ASA
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||
* such product, must reproduce the above copyright notice, this list of
|
||||
* conditions and the following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* 4. This software, with or without modification, must only be used with a
|
||||
* Nordic Semiconductor ASA integrated circuit.
|
||||
*
|
||||
* 5. Any software provided in binary form under this license must not be reverse
|
||||
* engineered, decompiled, modified and/or disassembled.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
#ifndef ANT_CHANNEL_CONFIG_H__
|
||||
#define ANT_CHANNEL_CONFIG_H__
|
||||
|
||||
/** @file
|
||||
*
|
||||
* @defgroup ant_channel_config ANT channel configuration
|
||||
* @{
|
||||
* @ingroup ant_sdk_utils
|
||||
* @brief ANT channel configuration module.
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include "sdk_config.h"
|
||||
|
||||
|
||||
#ifndef ANT_CONFIG_ENCRYPTED_CHANNELS
|
||||
#error Undefined ANT_CONFIG_ENCRYPTED_CHANNELS. It should be defined in sdk_config.h file.
|
||||
#elif ANT_CONFIG_ENCRYPTED_CHANNELS > 0
|
||||
#include "ant_encrypt_config.h"
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**@brief ANT channel configuration structure. */
|
||||
typedef struct
|
||||
{
|
||||
uint8_t channel_number; ///< Assigned channel number.
|
||||
uint8_t channel_type; ///< Channel type (see Assign Channel Parameters in ant_parameters.h: @ref ant_parameters).
|
||||
uint8_t ext_assign; ///< Extended assign (see Ext. Assign Channel Parameters in ant_parameters.h: @ref ant_parameters).
|
||||
uint8_t rf_freq; ///< Radio frequency offset from 2400 MHz (for example, 2466 MHz, rf_freq = 66).
|
||||
uint8_t transmission_type; ///< Transmission type.
|
||||
uint8_t device_type; ///< Device type.
|
||||
uint16_t device_number; ///< Device number.
|
||||
uint16_t channel_period; ///< The period in 32 kHz counts.
|
||||
uint8_t network_number; ///< Network number denoting the network key.
|
||||
|
||||
#if ANT_CONFIG_ENCRYPTED_CHANNELS > 0
|
||||
ant_encrypt_channel_settings_t * p_crypto_settings; ///< Pointer to cryptographic settings, NULL if this configuration have to be omitted.
|
||||
#endif
|
||||
|
||||
} ant_channel_config_t;
|
||||
|
||||
/**@brief Function for configuring the ANT channel.
|
||||
*
|
||||
* @param[in] p_config Pointer to the channel configuration structure.
|
||||
*
|
||||
* @retval NRF_SUCCESS If the channel was successfully configured. Otherwise, an error code is returned.
|
||||
*/
|
||||
uint32_t ant_channel_init(ant_channel_config_t const * p_config);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // ANT_CHANNEL_CONFIG_H__
|
||||
/** @} */
|
||||
-239
@@ -1,239 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) 2015 - 2017, Nordic Semiconductor ASA
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||
* such product, must reproduce the above copyright notice, this list of
|
||||
* conditions and the following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* 4. This software, with or without modification, must only be used with a
|
||||
* Nordic Semiconductor ASA integrated circuit.
|
||||
*
|
||||
* 5. Any software provided in binary form under this license must not be reverse
|
||||
* engineered, decompiled, modified and/or disassembled.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
#include "sdk_common.h"
|
||||
#if NRF_MODULE_ENABLED(ANT_ENCRYPT_CONFIG)
|
||||
#include <stdlib.h>
|
||||
#include "ant_encrypt_config.h"
|
||||
#include "ant_interface.h"
|
||||
#include "ant_parameters.h"
|
||||
|
||||
#ifdef ANT_ENCRYPT_NEGOTIATION_SLAVE_ENABLED
|
||||
#include "ant_encrypt_negotiation_slave.h"
|
||||
#endif
|
||||
|
||||
/*lint -e551 -save*/
|
||||
/** Flag for checking if stack was configured for encryption. */
|
||||
static bool m_stack_encryption_configured = false;
|
||||
/*lint -restore */
|
||||
|
||||
/** Pointer to handler of module's events. */
|
||||
static ant_encryp_user_handler_t m_ant_enc_evt_handler = NULL;
|
||||
|
||||
static ret_code_t ant_enc_advance_burs_config_apply(
|
||||
ant_encrypt_adv_burst_settings_t const * const p_adv_burst_set);
|
||||
|
||||
ret_code_t ant_stack_encryption_config(ant_encrypt_stack_settings_t const * const p_crypto_set)
|
||||
{
|
||||
ret_code_t err_code;
|
||||
|
||||
for ( uint32_t i = 0; i < p_crypto_set->key_number; i++)
|
||||
{
|
||||
err_code = sd_ant_crypto_key_set(i, p_crypto_set->pp_key[i]);
|
||||
VERIFY_SUCCESS(err_code);
|
||||
}
|
||||
|
||||
if (p_crypto_set->p_adv_burst_config != NULL)
|
||||
{
|
||||
err_code = ant_enc_advance_burs_config_apply(p_crypto_set->p_adv_burst_config);
|
||||
VERIFY_SUCCESS(err_code);
|
||||
}
|
||||
|
||||
// subcomands LUT for @ref sd_ant_crypto_info_set calls
|
||||
const uint8_t set_enc_info_param_lut[] =
|
||||
{
|
||||
ENCRYPTION_INFO_SET_CRYPTO_ID,
|
||||
ENCRYPTION_INFO_SET_CUSTOM_USER_DATA,
|
||||
ENCRYPTION_INFO_SET_RNG_SEED
|
||||
};
|
||||
|
||||
for ( uint32_t i = 0; i < sizeof(set_enc_info_param_lut); i++)
|
||||
{
|
||||
if ( p_crypto_set->info.pp_array[i] != NULL)
|
||||
{
|
||||
err_code = sd_ant_crypto_info_set(set_enc_info_param_lut[i],
|
||||
p_crypto_set->info.pp_array[i]);
|
||||
|
||||
VERIFY_SUCCESS(err_code);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef ANT_ENCRYPT_NEGOTIATION_SLAVE_ENABLED
|
||||
// all ANT channels have unsupported slave encryption tracking (even master's channel)
|
||||
ant_channel_encryp_negotiation_slave_init();
|
||||
#endif
|
||||
|
||||
m_ant_enc_evt_handler = NULL;
|
||||
|
||||
m_stack_encryption_configured = true;
|
||||
|
||||
return NRF_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Function for configuring advanced burst settings according to encryption requirements.
|
||||
*
|
||||
* @param p_adv_burst_set Pointer to ANT advanced burst settings.
|
||||
*
|
||||
* @retval Value returned by @ref sd_ant_adv_burst_config_set.
|
||||
*/
|
||||
static ret_code_t ant_enc_advance_burs_config_apply(
|
||||
ant_encrypt_adv_burst_settings_t const * const p_adv_burst_set)
|
||||
{
|
||||
uint8_t adv_burst_conf_str[ADV_BURST_CFG_MIN_SIZE] =
|
||||
{ ADV_BURST_MODE_ENABLE, 0, 0, 0, 0, 0, 0, 0 };
|
||||
|
||||
adv_burst_conf_str[ADV_BURST_CFG_PACKET_SIZE_INDEX] = p_adv_burst_set->packet_length;
|
||||
adv_burst_conf_str[ADV_BURST_CFG_REQUIRED_FEATURES] = p_adv_burst_set->required_feature;
|
||||
adv_burst_conf_str[ADV_BURST_CFG_OPTIONAL_FEATURES] = p_adv_burst_set->optional_feature;
|
||||
|
||||
return sd_ant_adv_burst_config_set(adv_burst_conf_str, sizeof(adv_burst_conf_str));
|
||||
}
|
||||
|
||||
|
||||
ret_code_t ant_channel_encrypt_config_perform(uint8_t channel_number,
|
||||
ant_encrypt_channel_settings_t * p_crypto_config)
|
||||
{
|
||||
return sd_ant_crypto_channel_enable(channel_number,
|
||||
p_crypto_config->mode,
|
||||
p_crypto_config->key_index,
|
||||
p_crypto_config->decimation_rate);
|
||||
}
|
||||
|
||||
|
||||
ret_code_t ant_channel_encrypt_config(uint8_t channel_type,
|
||||
uint8_t channel_number,
|
||||
ant_encrypt_channel_settings_t * p_crypto_config)
|
||||
{
|
||||
ret_code_t err_code;
|
||||
|
||||
if (p_crypto_config != NULL)
|
||||
{
|
||||
// encryption of the stack should be initialized previously
|
||||
if (m_stack_encryption_configured == false)
|
||||
{
|
||||
return NRF_ERROR_MODULE_NOT_INITIALZED;
|
||||
}
|
||||
|
||||
switch (channel_type)
|
||||
{
|
||||
case CHANNEL_TYPE_MASTER:
|
||||
err_code = ant_channel_encrypt_config_perform(channel_number, p_crypto_config);
|
||||
#ifdef ANT_ENCRYPT_NEGOTIATION_SLAVE_ENABLED
|
||||
ant_channel_encryp_tracking_state_set(channel_number,
|
||||
ANT_ENC_CHANNEL_STAT_TRACKING_UNSUPPORTED);
|
||||
#endif
|
||||
break;
|
||||
|
||||
#ifdef ANT_ENCRYPT_NEGOTIATION_SLAVE_ENABLED
|
||||
case CHANNEL_TYPE_SLAVE:
|
||||
ant_slave_channel_encrypt_config(channel_number, p_crypto_config);
|
||||
|
||||
if (p_crypto_config->mode == ENCRYPTION_DISABLED_MODE)
|
||||
{
|
||||
err_code = ant_channel_encrypt_config_perform(channel_number, p_crypto_config);
|
||||
ant_channel_encryp_tracking_state_set(channel_number,
|
||||
ANT_ENC_CHANNEL_STAT_TRACKING_UNSUPPORTED);
|
||||
}
|
||||
else
|
||||
{
|
||||
ant_channel_encryp_tracking_state_set(channel_number,
|
||||
ANT_ENC_CHANNEL_STAT_NOT_TRACKING);
|
||||
err_code = NRF_SUCCESS;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
default:
|
||||
err_code = NRF_ERROR_INVALID_PARAM;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef ANT_ENCRYPT_NEGOTIATION_SLAVE_ENABLED
|
||||
ant_channel_encryp_tracking_state_set(channel_number,
|
||||
ANT_ENC_CHANNEL_STAT_TRACKING_UNSUPPORTED);
|
||||
#endif
|
||||
err_code = NRF_SUCCESS;
|
||||
}
|
||||
|
||||
return err_code;
|
||||
}
|
||||
|
||||
/** @brief Function for calling the handler of module events.*/
|
||||
static void ant_encrypt_user_handler_try_to_run(uint8_t ant_channel, ant_encrypt_user_evt_t event)
|
||||
{
|
||||
if (m_ant_enc_evt_handler != NULL)
|
||||
{
|
||||
m_ant_enc_evt_handler(ant_channel, event);
|
||||
}
|
||||
}
|
||||
|
||||
void ant_encrypt_event_handler(ant_evt_t * p_ant_evt)
|
||||
{
|
||||
uint8_t const ant_channel = p_ant_evt->channel;
|
||||
|
||||
#ifdef ANT_ENCRYPT_NEGOTIATION_SLAVE_ENABLED
|
||||
ant_slave_encrypt_negotiation(p_ant_evt);
|
||||
#endif
|
||||
|
||||
switch (p_ant_evt->event)
|
||||
{
|
||||
case EVENT_RX_FAIL_GO_TO_SEARCH:
|
||||
ant_encrypt_user_handler_try_to_run(ant_channel, ANT_ENC_EVT_CHANNEL_LOST);
|
||||
break;
|
||||
|
||||
case EVENT_ENCRYPT_NEGOTIATION_SUCCESS:
|
||||
ant_encrypt_user_handler_try_to_run(ant_channel, ANT_ENC_EVT_NEGOTIATION_SUCCESS);
|
||||
break;
|
||||
|
||||
case EVENT_ENCRYPT_NEGOTIATION_FAIL:
|
||||
ant_encrypt_user_handler_try_to_run(ant_channel, ANT_ENC_EVT_NEGOTIATION_FAIL);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void ant_enc_event_handler_register(ant_encryp_user_handler_t user_handler_func)
|
||||
{
|
||||
m_ant_enc_evt_handler = user_handler_func;
|
||||
}
|
||||
|
||||
#endif // NRF_MODULE_ENABLED(ANT_ENCRYPT_CONFIG)
|
||||
-255
@@ -1,255 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) 2015 - 2017, Nordic Semiconductor ASA
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||
* such product, must reproduce the above copyright notice, this list of
|
||||
* conditions and the following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* 4. This software, with or without modification, must only be used with a
|
||||
* Nordic Semiconductor ASA integrated circuit.
|
||||
*
|
||||
* 5. Any software provided in binary form under this license must not be reverse
|
||||
* engineered, decompiled, modified and/or disassembled.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
#ifndef ANT_ENCRYPT_CONFIG__
|
||||
#define ANT_ENCRYPT_CONFIG__
|
||||
|
||||
/**@file
|
||||
*
|
||||
* @defgroup ant_encrypt_config ANT encryption configuration
|
||||
* @{
|
||||
* @ingroup ant_sdk_utils
|
||||
*
|
||||
* @brief Encryption configuration for the ANT stack and channels.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "sdk_errors.h"
|
||||
#include "ant_stack_handler_types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** @name Advanced burst configuration for encryption modules
|
||||
* @{
|
||||
*/
|
||||
#define ADV_BURST_CFG_MIN_SIZE 8 ///< Minimum size of the advance burst configuration data.
|
||||
#define ADV_BURST_CFG_PACKET_SIZE_INDEX 1 ///< Index of the packet size field in the configuration data.
|
||||
#define ADV_BURST_CFG_REQUIRED_FEATURES 2 ///< Index of the required features field in the configuration data.
|
||||
#define ADV_BURST_CFG_OPTIONAL_FEATURES 5 ///< Index of the optional features field in the configuration data.
|
||||
/**@} */
|
||||
|
||||
/** @brief ANT channel cryptographic configuration. */
|
||||
typedef struct
|
||||
{
|
||||
uint8_t mode; ///< Encryption mode. See the encrypted channel defines in ant_parameters.h.
|
||||
uint8_t key_index; ///< Index of encryption key.
|
||||
uint8_t decimation_rate; ///< Division of the master channel rate by the slave’s tracking channel rate.
|
||||
} ant_encrypt_channel_settings_t;
|
||||
|
||||
/** @brief ANT encryption information. */
|
||||
typedef union
|
||||
{
|
||||
uint8_t * pp_array[3]; // For array access support.
|
||||
struct
|
||||
{
|
||||
uint8_t * p_encryption_id; ///< Pointer to the encryption ID of the device (4 bytes).
|
||||
uint8_t * p_user_info; ///< Pointer to the user information string (19 bytes).
|
||||
uint8_t * p_random_num_seed; ///< Pointer to the random number seed (16 bytes).
|
||||
} items;
|
||||
} ant_encrypt_info_settings_t;
|
||||
|
||||
/** @brief Advanced burst settings used by the encrypted channel. */
|
||||
typedef struct
|
||||
{
|
||||
uint8_t packet_length; ///< RF payload size. See the advanced burst configuration defines in ant_parameters.h.
|
||||
uint8_t required_feature; ///< Required advanced burst modes. See the advanced burst configuration defines in ant_parameters.h.
|
||||
uint8_t optional_feature; ///< Optional advanced burst modes. See the advanced burst configuration defines in ant_parameters.h.
|
||||
} ant_encrypt_adv_burst_settings_t;
|
||||
|
||||
/**@brief ANT stack cryptographic configuration. */
|
||||
typedef struct
|
||||
{
|
||||
ant_encrypt_info_settings_t info; ///< Pointer to the encryption information structure.
|
||||
uint8_t * * pp_key; ///< Pointer to an array for pointers to encryption keys. Each key must have a length of 16 bytes.
|
||||
uint8_t key_number; ///< Number of encryption keys.
|
||||
ant_encrypt_adv_burst_settings_t * p_adv_burst_config; ///< Advanced burst configuration. If NULL, the advanced burst must be configured externally.
|
||||
} ant_encrypt_stack_settings_t;
|
||||
|
||||
/**
|
||||
* @brief ANT encryption negotiation events.
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
ANT_ENC_EVT_NEGOTIATION_SUCCESS, ///< Negotiation success.
|
||||
ANT_ENC_EVT_NEGOTIATION_FAIL, ///< Negotiation failure.
|
||||
ANT_ENC_EVT_CHANNEL_LOST ///< Lost a channel. It's relevant only for slave channels.
|
||||
} ant_encrypt_user_evt_t;
|
||||
|
||||
/**
|
||||
* @brief Event handler for ANT encryption user events.
|
||||
*/
|
||||
typedef void (* ant_encryp_user_handler_t)(uint8_t channel, ant_encrypt_user_evt_t event);
|
||||
|
||||
/**
|
||||
* @brief Macro for initializing an ANT encryption information structure.
|
||||
*
|
||||
* @param[in] P_ENC_ID Pointer to the encryption ID of the device (4 bytes).
|
||||
* @param[in] P_USER_INFO Pointer to the user information string (19 bytes).
|
||||
* @param[in] P_RAND_NUM_SEED Pointer to the random number seed (16 bytes).
|
||||
*/
|
||||
#define ANT_CRYPTO_INFO_SETTINGS_INIT(P_ENC_ID, P_USER_INFO, P_RAND_NUM_SEED) \
|
||||
{ \
|
||||
.items = \
|
||||
{ \
|
||||
.p_encryption_id = P_ENC_ID, \
|
||||
.p_user_info = P_USER_INFO, \
|
||||
.p_random_num_seed = P_RAND_NUM_SEED \
|
||||
} \
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Macro for declaring the basic cryptographic configuration for the ANT stack.
|
||||
*
|
||||
* This macro configures the following settings:
|
||||
* - Cryptographic key
|
||||
* - Encryption ID
|
||||
* - Advanced burst mode with the maximum RF payload size
|
||||
*
|
||||
* Use @ref ANT_ENCRYPT_STACK_SETTINGS_BASE to access the created configuration instance.
|
||||
*
|
||||
* @param[in] NAME Name for the created data instance.
|
||||
* @param[in] P_KEY Pointer to the cryptographic key (16 bytes).
|
||||
* @param[in] P_ENC_ID Pointer to the encryption ID (4 bytes).
|
||||
*/
|
||||
#define ANT_ENCRYPT_STACK_SETTINGS_BASE_DEF(NAME, P_KEY, P_ENC_ID) \
|
||||
ant_encrypt_adv_burst_settings_t NAME##_ant_enc_adv_burst_set = \
|
||||
{ \
|
||||
.packet_length = ADV_BURST_MODES_MAX_SIZE, \
|
||||
.required_feature = 0, \
|
||||
.optional_feature = 0 \
|
||||
}; \
|
||||
uint8_t * pp_##NAME##_key[1] = {P_KEY}; \
|
||||
ant_encrypt_stack_settings_t NAME ## _ant_crypto_settings = \
|
||||
{ \
|
||||
.info = ANT_CRYPTO_INFO_SETTINGS_INIT(P_ENC_ID, NULL, NULL), \
|
||||
.pp_key = pp_##NAME##_key, \
|
||||
.key_number = 1, \
|
||||
.p_adv_burst_config = &NAME##_ant_enc_adv_burst_set \
|
||||
}
|
||||
|
||||
|
||||
/** @brief Macro for accessing the configuration instance created
|
||||
* by @ref ANT_ENCRYPT_STACK_SETTINGS_BASE_DEF.
|
||||
*
|
||||
* @param[in] NAME Name of the settings instance.
|
||||
*/
|
||||
#define ANT_ENCRYPT_STACK_SETTINGS_BASE(NAME) (NAME##_ant_crypto_settings)
|
||||
|
||||
/**
|
||||
* @brief Function for applying an encryption configuration to a slave channel.
|
||||
*
|
||||
* This function enables encryption on a channel.
|
||||
*
|
||||
* This function should be used by the @ref ant_encrypt_negotiation_slave module and this module.
|
||||
*
|
||||
* @param[in] channel_number ANT channel number.
|
||||
* @param[in] p_crypto_config Pointer to the encryption configuration.
|
||||
*
|
||||
* @return Value returned by @ref sd_ant_crypto_channel_enable (for example, NRF_SUCCESS if
|
||||
* the configuration was successful).
|
||||
*/
|
||||
ret_code_t ant_channel_encrypt_config_perform(uint8_t channel_number,
|
||||
ant_encrypt_channel_settings_t * p_crypto_config);
|
||||
|
||||
/**
|
||||
* @brief Function for applying an encryption configuration to a master or slave channel.
|
||||
*
|
||||
* When called for a master channel, this function enables encryption
|
||||
* for that channel. When called for a slave channel, it saves
|
||||
* the encryption configuration for future use.
|
||||
*
|
||||
* This function should be used by the @ref ant_channel_config module.
|
||||
*
|
||||
* @param[in] channel_type ANT channel type: CHANNEL_TYPE_SLAVE or CHANNEL_TYPE_MASTER.
|
||||
* @param[in] channel_num ANT channel number.
|
||||
* @param[in] p_crypto_config Pointer to the encryption configuration.
|
||||
*
|
||||
* @retval NRF_SUCCESS If the function completed successfully.
|
||||
* @retval NRF_ERROR_INVALID_PARAM If the channel type is invalid.
|
||||
* @retval NRF_ERROR_MODULE_NOT_INITIALZED If the stack is not configured for encryption.
|
||||
* @retval Other Otherwise, the error value returned by the @ref
|
||||
* ant_channel_encrypt_config_perform function is returned.
|
||||
*/
|
||||
ret_code_t ant_channel_encrypt_config(uint8_t channel_type,
|
||||
uint8_t channel_num,
|
||||
ant_encrypt_channel_settings_t * p_crypto_config);
|
||||
|
||||
/**
|
||||
* @brief Function for configuring the cryptographic settings of the ANT stack.
|
||||
*
|
||||
* @param[in] p_crypto_info_set Pointer to the settings.
|
||||
*/
|
||||
ret_code_t ant_stack_encryption_config(ant_encrypt_stack_settings_t const * const p_crypto_info_set);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Function for handling ANT encryption events.
|
||||
*
|
||||
* This function should be used directly in the ANT event dispatching process.
|
||||
* It serves the ANT encryption events to the registered event handler.
|
||||
* If @ref ant_encrypt_negotiation_slave is used, this function is required.
|
||||
*
|
||||
* This function should be used by the @ref ant_encrypt_config module.
|
||||
*
|
||||
* @param[in] p_ant_evt Pointer to the ANT stack event message structure.
|
||||
*/
|
||||
void ant_encrypt_event_handler(ant_evt_t * p_ant_evt);
|
||||
|
||||
/**
|
||||
* @brief Function for registering an event handler for ANT encryption events.
|
||||
*
|
||||
* The event handler should support all of the events in @ref ant_encrypt_user_evt_t.
|
||||
*
|
||||
* @param[in] p_handler Pointer to a handler function.
|
||||
*/
|
||||
void ant_enc_event_handler_register(ant_encryp_user_handler_t p_handler);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // ANT_ENCRYPT_CONFIG__
|
||||
-189
@@ -1,189 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) 2015 - 2017, Nordic Semiconductor ASA
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||
* such product, must reproduce the above copyright notice, this list of
|
||||
* conditions and the following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* 4. This software, with or without modification, must only be used with a
|
||||
* Nordic Semiconductor ASA integrated circuit.
|
||||
*
|
||||
* 5. Any software provided in binary form under this license must not be reverse
|
||||
* engineered, decompiled, modified and/or disassembled.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
#include "sdk_common.h"
|
||||
#if NRF_MODULE_ENABLED(ANT_ENCRYPT_NEGOTIATION_SLAVE)
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "ant_encrypt_config.h"
|
||||
#include "ant_interface.h"
|
||||
#include "ant_parameters.h"
|
||||
#include "nrf_error.h"
|
||||
#include "app_error.h"
|
||||
|
||||
#include "ant_encrypt_negotiation_slave.h"
|
||||
|
||||
/** Number of supported channels. */
|
||||
#define NUMBER_OF_CHANNELS (ANT_CONFIG_TOTAL_CHANNELS_ALLOCATED)
|
||||
|
||||
/** Flag to block other channels from attempting to enable encryption while
|
||||
* another encryption is in the process.
|
||||
*/
|
||||
static volatile bool m_can_enable_crypto = true;
|
||||
|
||||
/** Array to keep track of which channels are currently tracking. */
|
||||
static ant_encrypt_tracking_state_t m_encrypt_channel_states[NUMBER_OF_CHANNELS];
|
||||
|
||||
/** Array for the slave channels' encryption settings. */
|
||||
static ant_encrypt_channel_settings_t m_slave_channel_conf[MAX_ANT_CHANNELS];
|
||||
|
||||
|
||||
|
||||
void ant_channel_encryp_tracking_state_set(uint8_t channel_number,
|
||||
ant_encrypt_tracking_state_t state)
|
||||
{
|
||||
m_encrypt_channel_states[channel_number] = state;
|
||||
}
|
||||
|
||||
|
||||
void ant_channel_encryp_negotiation_slave_init(void)
|
||||
{
|
||||
for (uint32_t channel = 0; channel < NUMBER_OF_CHANNELS; channel++)
|
||||
{
|
||||
ant_channel_encryp_tracking_state_set(channel, ANT_ENC_CHANNEL_STAT_TRACKING_UNSUPPORTED);
|
||||
}
|
||||
|
||||
m_can_enable_crypto = true;
|
||||
}
|
||||
|
||||
|
||||
ant_encrypt_tracking_state_t ant_channel_encryp_tracking_state_get(uint8_t channel_number)
|
||||
{
|
||||
return m_encrypt_channel_states[channel_number];
|
||||
}
|
||||
|
||||
|
||||
void ant_slave_channel_encrypt_config(uint8_t channel_number,
|
||||
ant_encrypt_channel_settings_t const * const p_crypto_config)
|
||||
{
|
||||
memcpy(&m_slave_channel_conf[channel_number], p_crypto_config,
|
||||
sizeof(ant_encrypt_channel_settings_t));
|
||||
}
|
||||
|
||||
|
||||
/**@brief Function for handling ANT RX channel events.
|
||||
*
|
||||
* @param[in] p_event_message_buffer The ANT event message buffer.
|
||||
*/
|
||||
static void ant_slave_encrypt_try_enable(uint8_t ant_channel,
|
||||
uint8_t ant_message_id)
|
||||
{
|
||||
uint32_t err_code;
|
||||
ant_encrypt_tracking_state_t track_stat;
|
||||
|
||||
|
||||
switch (ant_message_id)
|
||||
{
|
||||
// Broadcast data received.
|
||||
case MESG_BROADCAST_DATA_ID:
|
||||
|
||||
track_stat = ant_channel_encryp_tracking_state_get(ant_channel);
|
||||
// If the encryption has not yet been negotiated for this channel and another channel
|
||||
// is not currently trying to enable encryption, enable encryption
|
||||
if ((track_stat != ANT_ENC_CHANNEL_STAT_TRACKING_DECRYPTED)
|
||||
&& (track_stat != ANT_ENC_CHANNEL_STAT_NEGOTIATING)
|
||||
&& m_can_enable_crypto)
|
||||
{
|
||||
// Block other channels from trying to enable encryption until this channel
|
||||
// is finished
|
||||
m_can_enable_crypto = false;
|
||||
ant_channel_encryp_tracking_state_set(ant_channel,
|
||||
ANT_ENC_CHANNEL_STAT_NEGOTIATING);
|
||||
|
||||
// Enable encryption on ant_channel
|
||||
err_code =
|
||||
ant_channel_encrypt_config_perform(ant_channel,
|
||||
&m_slave_channel_conf[ant_channel]);
|
||||
APP_ERROR_CHECK(err_code);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ant_slave_encrypt_negotiation(ant_evt_t * p_ant_evt)
|
||||
{
|
||||
|
||||
uint8_t const ant_channel = p_ant_evt->channel;
|
||||
ANT_MESSAGE * p_ant_msg;
|
||||
|
||||
ant_encrypt_tracking_state_t track_state = ant_channel_encryp_tracking_state_get(ant_channel);
|
||||
|
||||
if (track_state == ANT_ENC_CHANNEL_STAT_TRACKING_UNSUPPORTED)
|
||||
return;
|
||||
|
||||
switch (p_ant_evt->event)
|
||||
{
|
||||
case EVENT_RX_FAIL_GO_TO_SEARCH:
|
||||
if (track_state == ANT_ENC_CHANNEL_STAT_NEGOTIATING)
|
||||
{
|
||||
m_can_enable_crypto = true;
|
||||
}
|
||||
|
||||
ant_channel_encryp_tracking_state_set(ant_channel, ANT_ENC_CHANNEL_STAT_NOT_TRACKING);
|
||||
break;
|
||||
|
||||
case EVENT_RX:
|
||||
/*lint -e545 -save*/
|
||||
p_ant_msg = (ANT_MESSAGE *) &(p_ant_evt->msg.evt_buffer);
|
||||
/*lint -restore*/
|
||||
ant_slave_encrypt_try_enable(ant_channel, p_ant_msg->ANT_MESSAGE_ucMesgID);
|
||||
break;
|
||||
|
||||
case EVENT_ENCRYPT_NEGOTIATION_SUCCESS:
|
||||
m_can_enable_crypto = true;
|
||||
ant_channel_encryp_tracking_state_set(ant_channel,
|
||||
ANT_ENC_CHANNEL_STAT_TRACKING_DECRYPTED);
|
||||
break;
|
||||
|
||||
case EVENT_ENCRYPT_NEGOTIATION_FAIL:
|
||||
m_can_enable_crypto = true;
|
||||
ant_channel_encryp_tracking_state_set(ant_channel,
|
||||
ANT_ENC_CHANNEL_STAT_TRACKING_ENCRYPTED);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#endif // NRF_MODULE_ENABLED(ANT_ENCRYPT_NEGOTIATION_SLAVE)
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user