diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..4c41736 --- /dev/null +++ b/.clang-format @@ -0,0 +1,9 @@ +# Defines the Chromium style for automatic reformatting. +# http://clang.llvm.org/docs/ClangFormatStyleOptions.html +Language: Cpp +BasedOnStyle: Google +ColumnLimit: 300 +AlignConsecutiveMacros: true +AlignConsecutiveDeclarations: true +AlignConsecutiveAssignments: true +AlignOperands: true \ No newline at end of file diff --git a/.gitignore b/.gitignore index 4a75bb0..b46d544 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,6 @@ JLinkLog.txt JLinkSettings.ini RTE_Components.h EventRecorderStub.scvd +app/.vscode +.vscode/uv4.log.lock +.vscode/keil-assistant.log diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..e1794c8 --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,234 @@ +{ + "configurations": [ + { + "name": "nrf52833_xxaa", + "includePath": [ + "sdk\\config", + "sdk\\components", + "sdk\\components\\ble\\ble_advertising", + "sdk\\components\\ble\\ble_dtm", + "sdk\\components\\ble\\ble_link_ctx_manager", + "sdk\\components\\ble\\ble_racp", + "sdk\\components\\ble\\ble_services\\ble_ancs_c", + "sdk\\components\\ble\\ble_services\\ble_ans_c", + "sdk\\components\\ble\\ble_services\\ble_bas", + "sdk\\components\\ble\\ble_services\\ble_bas_c", + "sdk\\components\\ble\\ble_services\\ble_cscs", + "sdk\\components\\ble\\ble_services\\ble_cts_c", + "sdk\\components\\ble\\ble_services\\ble_dfu", + "sdk\\components\\ble\\ble_services\\ble_dis", + "sdk\\components\\ble\\ble_services\\ble_gls", + "sdk\\components\\ble\\ble_services\\ble_hids", + "sdk\\components\\ble\\ble_services\\ble_hrs", + "sdk\\components\\ble\\ble_services\\ble_hrs_c", + "sdk\\components\\ble\\ble_services\\ble_hts", + "sdk\\components\\ble\\ble_services\\ble_ias", + "sdk\\components\\ble\\ble_services\\ble_ias_c", + "sdk\\components\\ble\\ble_services\\ble_lbs", + "sdk\\components\\ble\\ble_services\\ble_lbs_c", + "sdk\\components\\ble\\ble_services\\ble_lls", + "sdk\\components\\ble\\ble_services\\ble_nus", + "sdk\\components\\ble\\ble_services\\ble_nus_c", + "sdk\\components\\ble\\ble_services\\ble_rscs", + "sdk\\components\\ble\\ble_services\\ble_rscs_c", + "sdk\\components\\ble\\ble_services\\ble_tps", + "sdk\\components\\ble\\common", + "sdk\\components\\ble\\nrf_ble_gatt", + "sdk\\components\\ble\\nrf_ble_qwr", + "sdk\\components\\ble\\peer_manager", + "sdk\\components\\boards", + "sdk\\components\\libraries\\atomic", + "sdk\\components\\libraries\\atomic_fifo", + "sdk\\components\\libraries\\atomic_flags", + "sdk\\components\\libraries\\balloc", + "sdk\\components\\libraries\\bootloader\\ble_dfu", + "sdk\\components\\libraries\\bsp", + "sdk\\components\\libraries\\button", + "sdk\\components\\libraries\\cli", + "sdk\\components\\libraries\\crc16", + "sdk\\components\\libraries\\crc32", + "sdk\\components\\libraries\\crypto", + "sdk\\components\\libraries\\csense", + "sdk\\components\\libraries\\csense_drv", + "sdk\\components\\libraries\\delay", + "sdk\\components\\libraries\\ecc", + "sdk\\components\\libraries\\experimental_section_vars", + "sdk\\components\\libraries\\experimental_task_manager", + "sdk\\components\\libraries\\fds", + "sdk\\components\\libraries\\fifo", + "sdk\\components\\libraries\\fstorage", + "sdk\\components\\libraries\\gfx", + "sdk\\components\\libraries\\gpiote", + "sdk\\components\\libraries\\hardfault", + "sdk\\components\\libraries\\hci", + "sdk\\components\\libraries\\led_softblink", + "sdk\\components\\libraries\\log", + "sdk\\components\\libraries\\log\\src", + "sdk\\components\\libraries\\low_power_pwm", + "sdk\\components\\libraries\\mem_manager", + "sdk\\components\\libraries\\memobj", + "sdk\\components\\libraries\\mpu", + "sdk\\components\\libraries\\mutex", + "sdk\\components\\libraries\\pwm", + "sdk\\components\\libraries\\pwr_mgmt", + "sdk\\components\\libraries\\queue", + "sdk\\components\\libraries\\ringbuf", + "sdk\\components\\libraries\\scheduler", + "sdk\\components\\libraries\\sdcard", + "sdk\\components\\libraries\\slip", + "sdk\\components\\libraries\\sortlist", + "sdk\\components\\libraries\\spi_mngr", + "sdk\\components\\libraries\\stack_guard", + "sdk\\components\\libraries\\strerror", + "sdk\\components\\libraries\\svc", + "sdk\\components\\libraries\\timer", + "sdk\\components\\libraries\\twi_mngr", + "sdk\\components\\libraries\\twi_sensor", + "sdk\\components\\libraries\\uart", + "sdk\\components\\libraries\\usbd", + "sdk\\components\\libraries\\usbd\\class\\audio", + "sdk\\components\\libraries\\usbd\\class\\cdc", + "sdk\\components\\libraries\\usbd\\class\\cdc\\acm", + "sdk\\components\\libraries\\usbd\\class\\hid", + "sdk\\components\\libraries\\usbd\\class\\hid\\generic", + "sdk\\components\\libraries\\usbd\\class\\hid\\kbd", + "sdk\\components\\libraries\\usbd\\class\\hid\\mouse", + "sdk\\components\\libraries\\usbd\\class\\msc", + "sdk\\components\\libraries\\util", + "sdk\\components\\nfc\\ndef\\conn_hand_parser", + "sdk\\components\\nfc\\ndef\\conn_hand_parser\\ac_rec_parser", + "sdk\\components\\nfc\\ndef\\conn_hand_parser\\ble_oob_advdata_parser", + "sdk\\components\\nfc\\ndef\\conn_hand_parser\\le_oob_rec_parser", + "sdk\\components\\nfc\\ndef\\connection_handover\\ac_rec", + "sdk\\components\\nfc\\ndef\\connection_handover\\ble_oob_advdata", + "sdk\\components\\nfc\\ndef\\connection_handover\\ble_pair_lib", + "sdk\\components\\nfc\\ndef\\connection_handover\\ble_pair_msg", + "sdk\\components\\nfc\\ndef\\connection_handover\\common", + "sdk\\components\\nfc\\ndef\\connection_handover\\ep_oob_rec", + "sdk\\components\\nfc\\ndef\\connection_handover\\hs_rec", + "sdk\\components\\nfc\\ndef\\connection_handover\\le_oob_rec", + "sdk\\components\\nfc\\ndef\\generic\\message", + "sdk\\components\\nfc\\ndef\\generic\\record", + "sdk\\components\\nfc\\ndef\\launchapp", + "sdk\\components\\nfc\\ndef\\parser\\message", + "sdk\\components\\nfc\\ndef\\parser\\record", + "sdk\\components\\nfc\\ndef\\text", + "sdk\\components\\nfc\\ndef\\uri", + "sdk\\components\\nfc\\platform", + "sdk\\components\\nfc\\t2t_lib", + "sdk\\components\\nfc\\t2t_parser", + "sdk\\components\\nfc\\t4t_lib", + "sdk\\components\\nfc\\t4t_parser\\apdu", + "sdk\\components\\nfc\\t4t_parser\\cc_file", + "sdk\\components\\nfc\\t4t_parser\\hl_detection_procedure", + "sdk\\components\\nfc\\t4t_parser\\tlv", + "sdk\\components\\softdevice\\common", + "sdk\\components\\softdevice\\s140\\headers", + "sdk\\components\\softdevice\\s140\\headers\\nrf52", + "sdk\\external\\fprintf", + "sdk\\external\\segger_rtt", + "sdk\\external\\utf_converter", + "sdk\\integration\\nrfx", + "sdk\\integration\\nrfx\\legacy", + "sdk\\modules\\nrfx", + "sdk\\modules\\nrfx\\drivers\\include", + "sdk\\modules\\nrfx\\hal", + "app\\config\\", + "app\\config", + "app", + "sdk\\modules\\nrfx\\soc", + "sdk\\modules\\nrfx\\drivers\\src", + "sdk\\modules\\nrfx\\drivers\\src\\prs", + "sdk\\modules\\nrfx\\mdk\\", + "sdk\\components\\toolchain\\cmsis\\include\\" + ], + "defines": [ + "APP_TIMER_V2", + "APP_TIMER_V2_RTC1_ENABLED", + "BOARD_PCA10100", + "CONFIG_GPIO_AS_PINRESET", + "FLOAT_ABI_HARD", + "NRF52833_XXAA", + "NRF_SD_BLE_API_VERSION=7", + "S140", + "SOFTDEVICE_PRESENT", + "__HEAP_SIZE=2048", + "__STACK_SIZE=2048", + "__CC_ARM", + "__arm__", + "__align(x)=", + "__ALIGNOF__(x)=", + "__alignof__(x)=", + "__asm(x)=", + "__forceinline=", + "__restrict=", + "__global_reg(n)=", + "__inline=", + "__int64=long long", + "__INTADDR__(expr)=0", + "__irq=", + "__packed=", + "__pure=", + "__smc(n)=", + "__svc(n)=", + "__svc_indirect(n)=", + "__svc_indirect_r7(n)=", + "__value_in_regs=", + "__weak=", + "__writeonly=", + "__declspec(x)=", + "__attribute__(x)=", + "__nonnull__(x)=", + "__register=", + "__breakpoint(x)=", + "__cdp(x,y,z)=", + "__clrex()=", + "__clz(x)=0U", + "__current_pc()=0U", + "__current_sp()=0U", + "__disable_fiq()=", + "__disable_irq()=", + "__dmb(x)=", + "__dsb(x)=", + "__enable_fiq()=", + "__enable_irq()=", + "__fabs(x)=0.0", + "__fabsf(x)=0.0f", + "__force_loads()=", + "__force_stores()=", + "__isb(x)=", + "__ldrex(x)=0U", + "__ldrexd(x)=0U", + "__ldrt(x)=0U", + "__memory_changed()=", + "__nop()=", + "__pld(...)=", + "__pli(...)=", + "__qadd(x,y)=0", + "__qdbl(x)=0", + "__qsub(x,y)=0", + "__rbit(x)=0U", + "__rev(x)=0U", + "__return_address()=0U", + "__ror(x,y)=0U", + "__schedule_barrier()=", + "__semihost(x,y)=0", + "__sev()=", + "__sqrt(x)=0.0", + "__sqrtf(x)=0.0f", + "__ssat(x,y)=0", + "__strex(x,y)=0U", + "__strexd(x,y)=0", + "__strt(x,y)=", + "__swp(x,y)=0U", + "__usat(x,y)=0U", + "__wfe()=", + "__wfi()=", + "__yield()=", + "__vfp_status(x,y)=0" + ], + "intelliSenseMode": "${default}" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..9f16f33 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,30 @@ +{ + "files.associations": { + "*.hpp": "cpp", + "ble_hci.h": "c", + "ble_advdata.h": "c", + "ble_advertising.h": "c", + "ble_conn_params.h": "c", + "nrf_sdh.h": "c", + "nrf_sdh_soc.h": "c", + "nrf_sdh_ble.h": "c", + "nrf_ble_gatt.h": "c", + "nrf_ble_qwr.h": "c", + "app_timer.h": "c", + "nordic_common.h": "c", + "nrf.h": "c", + "nrf52833.h": "c", + "nrf52833_bitfields.h": "c", + "system_nrf52833.h": "c", + "app_util_platform.h": "c", + "string.h": "c", + "ble_nus.h": "c", + "app_uart.h": "c", + "bsp_btn_ble.h": "c", + "nrf_pwr_mgmt.h": "c", + "core_cm4.h": "c", + "nrf52_to_nrf52833.h": "c", + "compare": "c", + "type_traits": "c" + } +} \ No newline at end of file diff --git a/README.md b/README.md index 4e6c77a..edf0914 100644 --- a/README.md +++ b/README.md @@ -1 +1,8 @@ # conduction1_dynamic_electrocardiograph + + +## 使用说明 +``` +https://iflytop1.feishu.cn/wiki/Fp0fwciUEibtm4kaUeXcraOCneg + +``` \ No newline at end of file diff --git a/app/app.uvoptx b/app/app.uvoptx index 9f77843..ad8ad06 100644 --- a/app/app.uvoptx +++ b/app/app.uvoptx @@ -73,11 +73,11 @@ 0 - 0 + 1 0 0 - 0 + 5 0 1 @@ -119,6 +119,26 @@ 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + d + + + 0 JL2CM3 -U685384569 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC4000 -FN2 -FF0nrf52xxx.flm -FS00 -FL0200000 -FP0($$Device:nRF52833_xxAA$Flash\nrf52xxx.flm) -FF1nrf52xxx_uicr.flm -FS110001000 -FL11000 -FP1($$Device:nRF52833_xxAA$Flash\nrf52xxx_uicr.flm) @@ -135,12 +155,12 @@ 0 0 - 0 + 1 0 0 0 0 - 0 + 1 0 0 0 @@ -237,7 +257,7 @@ 0 1 - 0 + 5 0 1 @@ -343,7 +363,7 @@ Application - 0 + 1 0 0 0 @@ -375,7 +395,7 @@ Board Definition - 0 + 1 0 0 0 @@ -395,7 +415,7 @@ Board Support - 0 + 1 0 0 0 @@ -427,7 +447,7 @@ UTF8/UTF16 converter - 0 + 1 0 0 0 @@ -447,7 +467,7 @@ nRF_BLE - 0 + 1 0 0 0 diff --git a/app/app.uvprojx b/app/app.uvprojx index 18310ec..d35d7d6 100644 --- a/app/app.uvprojx +++ b/app/app.uvprojx @@ -3649,6 +3649,7 @@ flash_s140_nrf52_7.2.0_softdevice 0x4 ARM-ADS + 5060960::V5.06 update 7 (build 960)::.\ARMCC 0 diff --git a/app/config/sdk_config.h b/app/config/sdk_config.h index 1034849..89f20aa 100644 --- a/app/config/sdk_config.h +++ b/app/config/sdk_config.h @@ -7711,7 +7711,7 @@ // <4=> Debug #ifndef NRF_LOG_DEFAULT_LEVEL -#define NRF_LOG_DEFAULT_LEVEL 3 +#define NRF_LOG_DEFAULT_LEVEL 4 #endif // NRF_LOG_DEFERRED - Enable deffered logger. diff --git a/app/main.c b/app/main.c index e5c657e..65c5813 100644 --- a/app/main.c +++ b/app/main.c @@ -48,31 +48,31 @@ * This application uses the @ref srvlib_conn_params module. */ - #include #include -#include "nordic_common.h" -#include "nrf.h" -#include "ble_hci.h" + +#include "app_timer.h" +#include "app_uart.h" +#include "app_util_platform.h" #include "ble_advdata.h" #include "ble_advertising.h" #include "ble_conn_params.h" -#include "nrf_sdh.h" -#include "nrf_sdh_soc.h" -#include "nrf_sdh_ble.h" -#include "nrf_ble_gatt.h" -#include "nrf_ble_qwr.h" -#include "app_timer.h" +#include "ble_hci.h" #include "ble_nus.h" -#include "app_uart.h" -#include "app_util_platform.h" #include "bsp_btn_ble.h" +#include "nordic_common.h" +#include "nrf.h" +#include "nrf_ble_gatt.h" +#include "nrf_ble_qwr.h" #include "nrf_pwr_mgmt.h" +#include "nrf_sdh.h" +#include "nrf_sdh_ble.h" +#include "nrf_sdh_soc.h" -#if defined (UART_PRESENT) +#if defined(UART_PRESENT) #include "nrf_uart.h" #endif -#if defined (UARTE_PRESENT) +#if defined(UARTE_PRESENT) #include "nrf_uarte.h" #endif @@ -80,43 +80,39 @@ #include "nrf_log_ctrl.h" #include "nrf_log_default_backends.h" -#define APP_BLE_CONN_CFG_TAG 1 /**< A tag identifying the SoftDevice BLE configuration. */ - -#define DEVICE_NAME "Nordic_UART" /**< Name of device. Will be included in the advertising data. */ -#define NUS_SERVICE_UUID_TYPE BLE_UUID_TYPE_VENDOR_BEGIN /**< UUID type for the Nordic UART Service (vendor specific). */ - -#define APP_BLE_OBSERVER_PRIO 3 /**< Application's BLE observer priority. You shouldn't need to modify this value. */ +#define APP_BLE_CONN_CFG_TAG 1 /**< A tag identifying the SoftDevice BLE configuration. */ -#define APP_ADV_INTERVAL 64 /**< The advertising interval (in units of 0.625 ms. This value corresponds to 40 ms). */ +#define DEVICE_NAME "Nordic_UART" /**< Name of device. Will be included in the advertising data. */ +#define NUS_SERVICE_UUID_TYPE BLE_UUID_TYPE_VENDOR_BEGIN /**< UUID type for the Nordic UART Service (vendor specific). */ -#define APP_ADV_DURATION 18000 /**< The advertising duration (180 seconds) in units of 10 milliseconds. */ +#define APP_BLE_OBSERVER_PRIO 3 /**< Application's BLE observer priority. You shouldn't need to modify this value. */ -#define MIN_CONN_INTERVAL MSEC_TO_UNITS(20, UNIT_1_25_MS) /**< Minimum acceptable connection interval (20 ms), Connection interval uses 1.25 ms units. */ -#define MAX_CONN_INTERVAL MSEC_TO_UNITS(75, UNIT_1_25_MS) /**< Maximum acceptable connection interval (75 ms), Connection interval uses 1.25 ms units. */ -#define SLAVE_LATENCY 0 /**< Slave latency. */ -#define CONN_SUP_TIMEOUT MSEC_TO_UNITS(4000, UNIT_10_MS) /**< Connection supervisory timeout (4 seconds), Supervision Timeout uses 10 ms units. */ -#define FIRST_CONN_PARAMS_UPDATE_DELAY APP_TIMER_TICKS(5000) /**< Time from initiating event (connect or start of notification) to first time sd_ble_gap_conn_param_update is called (5 seconds). */ -#define NEXT_CONN_PARAMS_UPDATE_DELAY APP_TIMER_TICKS(30000) /**< Time between each call to sd_ble_gap_conn_param_update after the first call (30 seconds). */ -#define MAX_CONN_PARAMS_UPDATE_COUNT 3 /**< Number of attempts before giving up the connection parameter negotiation. */ +#define APP_ADV_INTERVAL 64 /**< The advertising interval (in units of 0.625 ms. This value corresponds to 40 ms). */ -#define DEAD_BEEF 0xDEADBEEF /**< Value used as error code on stack dump, can be used to identify stack location on stack unwind. */ +#define APP_ADV_DURATION 18000 /**< The advertising duration (180 seconds) in units of 10 milliseconds. */ -#define UART_TX_BUF_SIZE 256 /**< UART TX buffer size. */ -#define UART_RX_BUF_SIZE 256 /**< UART RX buffer size. */ +#define MIN_CONN_INTERVAL MSEC_TO_UNITS(20, UNIT_1_25_MS) /**< Minimum acceptable connection interval (20 ms), Connection interval uses 1.25 ms units. */ +#define MAX_CONN_INTERVAL MSEC_TO_UNITS(75, UNIT_1_25_MS) /**< Maximum acceptable connection interval (75 ms), Connection interval uses 1.25 ms units. */ +#define SLAVE_LATENCY 0 /**< Slave latency. */ +#define CONN_SUP_TIMEOUT MSEC_TO_UNITS(4000, UNIT_10_MS) /**< Connection supervisory timeout (4 seconds), Supervision Timeout uses 10 ms units. */ +#define FIRST_CONN_PARAMS_UPDATE_DELAY APP_TIMER_TICKS(5000) /**< Time from initiating event (connect or start of notification) to first time sd_ble_gap_conn_param_update is called (5 seconds). */ +#define NEXT_CONN_PARAMS_UPDATE_DELAY APP_TIMER_TICKS(30000) /**< Time between each call to sd_ble_gap_conn_param_update after the first call (30 seconds). */ +#define MAX_CONN_PARAMS_UPDATE_COUNT 3 /**< Number of attempts before giving up the connection parameter negotiation. */ +#define DEAD_BEEF 0xDEADBEEF /**< Value used as error code on stack dump, can be used to identify stack location on stack unwind. */ -BLE_NUS_DEF(m_nus, NRF_SDH_BLE_TOTAL_LINK_COUNT); /**< BLE NUS service instance. */ -NRF_BLE_GATT_DEF(m_gatt); /**< GATT module instance. */ -NRF_BLE_QWR_DEF(m_qwr); /**< Context for the Queued Write module.*/ -BLE_ADVERTISING_DEF(m_advertising); /**< Advertising module instance. */ +#define UART_TX_BUF_SIZE 256 /**< UART TX buffer size. */ +#define UART_RX_BUF_SIZE 256 /**< UART RX buffer size. */ -static uint16_t m_conn_handle = BLE_CONN_HANDLE_INVALID; /**< Handle of the current connection. */ -static uint16_t m_ble_nus_max_data_len = BLE_GATT_ATT_MTU_DEFAULT - 3; /**< Maximum length of data (in bytes) that can be transmitted to the peer by the Nordic UART service module. */ -static ble_uuid_t m_adv_uuids[] = /**< Universally unique service identifier. */ -{ - {BLE_UUID_NUS_SERVICE, NUS_SERVICE_UUID_TYPE} -}; +BLE_NUS_DEF(m_nus, NRF_SDH_BLE_TOTAL_LINK_COUNT); /**< BLE NUS service instance. */ +NRF_BLE_GATT_DEF(m_gatt); /**< GATT module instance. */ +NRF_BLE_QWR_DEF(m_qwr); /**< Context for the Queued Write module.*/ +BLE_ADVERTISING_DEF(m_advertising); /**< Advertising module instance. */ +static uint16_t m_conn_handle = BLE_CONN_HANDLE_INVALID; /**< Handle of the current connection. */ +static uint16_t m_ble_nus_max_data_len = BLE_GATT_ATT_MTU_DEFAULT - 3; /**< Maximum length of data (in bytes) that can be transmitted to the peer by the Nordic UART service module. */ +static ble_uuid_t m_adv_uuids[] = /**< Universally unique service identifier. */ + {{BLE_UUID_NUS_SERVICE, NUS_SERVICE_UUID_TYPE}}; /**@brief Function for assert macro callback. * @@ -129,17 +125,13 @@ static ble_uuid_t m_adv_uuids[] = * @param[in] line_num Line number of the failing ASSERT call. * @param[in] p_file_name File name of the failing ASSERT call. */ -void assert_nrf_callback(uint16_t line_num, const uint8_t * p_file_name) -{ - app_error_handler(DEAD_BEEF, line_num, p_file_name); -} +void assert_nrf_callback(uint16_t line_num, const uint8_t *p_file_name) { app_error_handler(DEAD_BEEF, line_num, p_file_name); } /**@brief Function for initializing the timer module. */ -static void timers_init(void) -{ - ret_code_t err_code = app_timer_init(); - APP_ERROR_CHECK(err_code); +static void timers_init(void) { + ret_code_t err_code = app_timer_init(); + APP_ERROR_CHECK(err_code); } /**@brief Function for the GAP initialization. @@ -147,31 +139,27 @@ static void timers_init(void) * @details This function will set up all the necessary GAP (Generic Access Profile) parameters of * the device. It also sets the permissions and appearance. */ -static void gap_params_init(void) -{ - uint32_t err_code; - ble_gap_conn_params_t gap_conn_params; - ble_gap_conn_sec_mode_t sec_mode; +static void gap_params_init(void) { + uint32_t err_code; + ble_gap_conn_params_t gap_conn_params; + ble_gap_conn_sec_mode_t sec_mode; - BLE_GAP_CONN_SEC_MODE_SET_OPEN(&sec_mode); + BLE_GAP_CONN_SEC_MODE_SET_OPEN(&sec_mode); - err_code = sd_ble_gap_device_name_set(&sec_mode, - (const uint8_t *) DEVICE_NAME, - strlen(DEVICE_NAME)); - APP_ERROR_CHECK(err_code); + err_code = sd_ble_gap_device_name_set(&sec_mode, (const uint8_t *)DEVICE_NAME, strlen(DEVICE_NAME)); + APP_ERROR_CHECK(err_code); - memset(&gap_conn_params, 0, sizeof(gap_conn_params)); + memset(&gap_conn_params, 0, sizeof(gap_conn_params)); - gap_conn_params.min_conn_interval = MIN_CONN_INTERVAL; - gap_conn_params.max_conn_interval = MAX_CONN_INTERVAL; - gap_conn_params.slave_latency = SLAVE_LATENCY; - gap_conn_params.conn_sup_timeout = CONN_SUP_TIMEOUT; + gap_conn_params.min_conn_interval = MIN_CONN_INTERVAL; + gap_conn_params.max_conn_interval = MAX_CONN_INTERVAL; + gap_conn_params.slave_latency = SLAVE_LATENCY; + gap_conn_params.conn_sup_timeout = CONN_SUP_TIMEOUT; - err_code = sd_ble_gap_ppcp_set(&gap_conn_params); - APP_ERROR_CHECK(err_code); + err_code = sd_ble_gap_ppcp_set(&gap_conn_params); + APP_ERROR_CHECK(err_code); } - /**@brief Function for handling Queued Write Module errors. * * @details A pointer to this function will be passed to each service which may need to inform the @@ -179,11 +167,7 @@ static void gap_params_init(void) * * @param[in] nrf_error Error code containing information about what went wrong. */ -static void nrf_qwr_error_handler(uint32_t nrf_error) -{ - APP_ERROR_HANDLER(nrf_error); -} - +static void nrf_qwr_error_handler(uint32_t nrf_error) { APP_ERROR_HANDLER(nrf_error); } /**@brief Function for handling the data from the Nordic UART Service. * @@ -193,62 +177,52 @@ static void nrf_qwr_error_handler(uint32_t nrf_error) * @param[in] p_evt Nordic UART Service event. */ /**@snippet [Handling the data received over BLE] */ -static void nus_data_handler(ble_nus_evt_t * p_evt) -{ - - if (p_evt->type == BLE_NUS_EVT_RX_DATA) - { - uint32_t err_code; - - NRF_LOG_DEBUG("Received data from BLE NUS. Writing data on UART."); - NRF_LOG_HEXDUMP_DEBUG(p_evt->params.rx_data.p_data, p_evt->params.rx_data.length); - - for (uint32_t i = 0; i < p_evt->params.rx_data.length; i++) - { - do - { - err_code = app_uart_put(p_evt->params.rx_data.p_data[i]); - if ((err_code != NRF_SUCCESS) && (err_code != NRF_ERROR_BUSY)) - { - NRF_LOG_ERROR("Failed receiving NUS message. Error 0x%x. ", err_code); - APP_ERROR_CHECK(err_code); - } - } while (err_code == NRF_ERROR_BUSY); - } - if (p_evt->params.rx_data.p_data[p_evt->params.rx_data.length - 1] == '\r') - { - while (app_uart_put('\n') == NRF_ERROR_BUSY); +static void nus_data_handler(ble_nus_evt_t *p_evt) { + if (p_evt->type == BLE_NUS_EVT_RX_DATA) { + uint32_t err_code; + + NRF_LOG_DEBUG("Received data from BLE NUS. Writing data on UART."); + NRF_LOG_HEXDUMP_DEBUG(p_evt->params.rx_data.p_data, p_evt->params.rx_data.length); + + for (uint32_t i = 0; i < p_evt->params.rx_data.length; i++) { + do { + err_code = app_uart_put(p_evt->params.rx_data.p_data[i]); + if ((err_code != NRF_SUCCESS) && (err_code != NRF_ERROR_BUSY)) { + NRF_LOG_ERROR("Failed receiving NUS message. Error 0x%x. ", err_code); + APP_ERROR_CHECK(err_code); } + } while (err_code == NRF_ERROR_BUSY); } - + if (p_evt->params.rx_data.p_data[p_evt->params.rx_data.length - 1] == '\r') { + while (app_uart_put('\n') == NRF_ERROR_BUSY) + ; + } + } } /**@snippet [Handling the data received over BLE] */ - /**@brief Function for initializing services that will be used by the application. */ -static void services_init(void) -{ - uint32_t err_code; - ble_nus_init_t nus_init; - nrf_ble_qwr_init_t qwr_init = {0}; +static void services_init(void) { + uint32_t err_code; + ble_nus_init_t nus_init; + nrf_ble_qwr_init_t qwr_init = {0}; - // Initialize Queued Write Module. - qwr_init.error_handler = nrf_qwr_error_handler; + // Initialize Queued Write Module. + qwr_init.error_handler = nrf_qwr_error_handler; - err_code = nrf_ble_qwr_init(&m_qwr, &qwr_init); - APP_ERROR_CHECK(err_code); + err_code = nrf_ble_qwr_init(&m_qwr, &qwr_init); + APP_ERROR_CHECK(err_code); - // Initialize NUS. - memset(&nus_init, 0, sizeof(nus_init)); + // Initialize NUS. + memset(&nus_init, 0, sizeof(nus_init)); - nus_init.data_handler = nus_data_handler; + nus_init.data_handler = nus_data_handler; - err_code = ble_nus_init(&m_nus, &nus_init); - APP_ERROR_CHECK(err_code); + err_code = ble_nus_init(&m_nus, &nus_init); + APP_ERROR_CHECK(err_code); } - /**@brief Function for handling an event from the Connection Parameters Module. * * @details This function will be called for all events in the Connection Parameters Module @@ -260,257 +234,221 @@ static void services_init(void) * * @param[in] p_evt Event received from the Connection Parameters Module. */ -static void on_conn_params_evt(ble_conn_params_evt_t * p_evt) -{ - uint32_t err_code; +static void on_conn_params_evt(ble_conn_params_evt_t *p_evt) { + uint32_t err_code; - if (p_evt->evt_type == BLE_CONN_PARAMS_EVT_FAILED) - { - err_code = sd_ble_gap_disconnect(m_conn_handle, BLE_HCI_CONN_INTERVAL_UNACCEPTABLE); - APP_ERROR_CHECK(err_code); - } + if (p_evt->evt_type == BLE_CONN_PARAMS_EVT_FAILED) { + err_code = sd_ble_gap_disconnect(m_conn_handle, BLE_HCI_CONN_INTERVAL_UNACCEPTABLE); + APP_ERROR_CHECK(err_code); + } } - /**@brief Function for handling errors from the Connection Parameters module. * * @param[in] nrf_error Error code containing information about what went wrong. */ -static void conn_params_error_handler(uint32_t nrf_error) -{ - APP_ERROR_HANDLER(nrf_error); -} - +static void conn_params_error_handler(uint32_t nrf_error) { APP_ERROR_HANDLER(nrf_error); } /**@brief Function for initializing the Connection Parameters module. */ -static void conn_params_init(void) -{ - uint32_t err_code; - ble_conn_params_init_t cp_init; - - memset(&cp_init, 0, sizeof(cp_init)); - - cp_init.p_conn_params = NULL; - cp_init.first_conn_params_update_delay = FIRST_CONN_PARAMS_UPDATE_DELAY; - cp_init.next_conn_params_update_delay = NEXT_CONN_PARAMS_UPDATE_DELAY; - cp_init.max_conn_params_update_count = MAX_CONN_PARAMS_UPDATE_COUNT; - cp_init.start_on_notify_cccd_handle = BLE_GATT_HANDLE_INVALID; - cp_init.disconnect_on_fail = false; - cp_init.evt_handler = on_conn_params_evt; - cp_init.error_handler = conn_params_error_handler; - - err_code = ble_conn_params_init(&cp_init); - APP_ERROR_CHECK(err_code); +static void conn_params_init(void) { + uint32_t err_code; + ble_conn_params_init_t cp_init; + + memset(&cp_init, 0, sizeof(cp_init)); + + cp_init.p_conn_params = NULL; + cp_init.first_conn_params_update_delay = FIRST_CONN_PARAMS_UPDATE_DELAY; + cp_init.next_conn_params_update_delay = NEXT_CONN_PARAMS_UPDATE_DELAY; + cp_init.max_conn_params_update_count = MAX_CONN_PARAMS_UPDATE_COUNT; + cp_init.start_on_notify_cccd_handle = BLE_GATT_HANDLE_INVALID; + cp_init.disconnect_on_fail = false; + cp_init.evt_handler = on_conn_params_evt; + cp_init.error_handler = conn_params_error_handler; + + err_code = ble_conn_params_init(&cp_init); + APP_ERROR_CHECK(err_code); } - /**@brief Function for putting the chip into sleep mode. * * @note This function will not return. */ -static void sleep_mode_enter(void) -{ - uint32_t err_code = bsp_indication_set(BSP_INDICATE_IDLE); - APP_ERROR_CHECK(err_code); +static void sleep_mode_enter(void) { + uint32_t err_code = bsp_indication_set(BSP_INDICATE_IDLE); + APP_ERROR_CHECK(err_code); - // Prepare wakeup buttons. - err_code = bsp_btn_ble_sleep_mode_prepare(); - APP_ERROR_CHECK(err_code); + // Prepare wakeup buttons. + err_code = bsp_btn_ble_sleep_mode_prepare(); + APP_ERROR_CHECK(err_code); - // Go to system-off mode (this function will not return; wakeup will cause a reset). - err_code = sd_power_system_off(); - APP_ERROR_CHECK(err_code); + // Go to system-off mode (this function will not return; wakeup will cause a reset). + err_code = sd_power_system_off(); + APP_ERROR_CHECK(err_code); } - /**@brief Function for handling advertising events. * * @details This function will be called for advertising events which are passed to the application. * * @param[in] ble_adv_evt Advertising event. */ -static void on_adv_evt(ble_adv_evt_t ble_adv_evt) -{ - uint32_t err_code; - - switch (ble_adv_evt) - { - case BLE_ADV_EVT_FAST: - err_code = bsp_indication_set(BSP_INDICATE_ADVERTISING); - APP_ERROR_CHECK(err_code); - break; - case BLE_ADV_EVT_IDLE: - sleep_mode_enter(); - break; - default: - break; - } +static void on_adv_evt(ble_adv_evt_t ble_adv_evt) { + uint32_t err_code; + + switch (ble_adv_evt) { + case BLE_ADV_EVT_FAST: + err_code = bsp_indication_set(BSP_INDICATE_ADVERTISING); + APP_ERROR_CHECK(err_code); + break; + case BLE_ADV_EVT_IDLE: + sleep_mode_enter(); + break; + default: + break; + } } - /**@brief Function for handling BLE events. * * @param[in] p_ble_evt Bluetooth stack event. * @param[in] p_context Unused. */ -static void ble_evt_handler(ble_evt_t const * p_ble_evt, void * p_context) -{ - uint32_t err_code; - - switch (p_ble_evt->header.evt_id) - { - case BLE_GAP_EVT_CONNECTED: - NRF_LOG_INFO("Connected"); - err_code = bsp_indication_set(BSP_INDICATE_CONNECTED); - APP_ERROR_CHECK(err_code); - m_conn_handle = p_ble_evt->evt.gap_evt.conn_handle; - err_code = nrf_ble_qwr_conn_handle_assign(&m_qwr, m_conn_handle); - APP_ERROR_CHECK(err_code); - break; - - case BLE_GAP_EVT_DISCONNECTED: - NRF_LOG_INFO("Disconnected"); - // LED indication will be changed when advertising starts. - m_conn_handle = BLE_CONN_HANDLE_INVALID; - break; - - case BLE_GAP_EVT_PHY_UPDATE_REQUEST: - { - NRF_LOG_DEBUG("PHY update request."); - ble_gap_phys_t const phys = - { - .rx_phys = BLE_GAP_PHY_AUTO, - .tx_phys = BLE_GAP_PHY_AUTO, - }; - err_code = sd_ble_gap_phy_update(p_ble_evt->evt.gap_evt.conn_handle, &phys); - APP_ERROR_CHECK(err_code); - } break; - - case BLE_GAP_EVT_SEC_PARAMS_REQUEST: - // Pairing not supported - err_code = sd_ble_gap_sec_params_reply(m_conn_handle, BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP, NULL, NULL); - APP_ERROR_CHECK(err_code); - break; - - case BLE_GATTS_EVT_SYS_ATTR_MISSING: - // No system attributes have been stored. - err_code = sd_ble_gatts_sys_attr_set(m_conn_handle, NULL, 0, 0); - APP_ERROR_CHECK(err_code); - break; - - case BLE_GATTC_EVT_TIMEOUT: - // Disconnect on GATT Client timeout event. - err_code = sd_ble_gap_disconnect(p_ble_evt->evt.gattc_evt.conn_handle, - BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION); - APP_ERROR_CHECK(err_code); - break; - - case BLE_GATTS_EVT_TIMEOUT: - // Disconnect on GATT Server timeout event. - err_code = sd_ble_gap_disconnect(p_ble_evt->evt.gatts_evt.conn_handle, - BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION); - APP_ERROR_CHECK(err_code); - break; - - default: - // No implementation needed. - break; - } +static void ble_evt_handler(ble_evt_t const *p_ble_evt, void *p_context) { + uint32_t err_code; + + switch (p_ble_evt->header.evt_id) { + case BLE_GAP_EVT_CONNECTED: + NRF_LOG_INFO("Connected"); + err_code = bsp_indication_set(BSP_INDICATE_CONNECTED); + APP_ERROR_CHECK(err_code); + m_conn_handle = p_ble_evt->evt.gap_evt.conn_handle; + err_code = nrf_ble_qwr_conn_handle_assign(&m_qwr, m_conn_handle); + APP_ERROR_CHECK(err_code); + break; + + case BLE_GAP_EVT_DISCONNECTED: + NRF_LOG_INFO("Disconnected"); + // LED indication will be changed when advertising starts. + m_conn_handle = BLE_CONN_HANDLE_INVALID; + break; + + case BLE_GAP_EVT_PHY_UPDATE_REQUEST: { + NRF_LOG_DEBUG("PHY update request."); + ble_gap_phys_t const phys = { + .rx_phys = BLE_GAP_PHY_AUTO, + .tx_phys = BLE_GAP_PHY_AUTO, + }; + err_code = sd_ble_gap_phy_update(p_ble_evt->evt.gap_evt.conn_handle, &phys); + APP_ERROR_CHECK(err_code); + } break; + + case BLE_GAP_EVT_SEC_PARAMS_REQUEST: + // Pairing not supported + err_code = sd_ble_gap_sec_params_reply(m_conn_handle, BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP, NULL, NULL); + APP_ERROR_CHECK(err_code); + break; + + case BLE_GATTS_EVT_SYS_ATTR_MISSING: + // No system attributes have been stored. + err_code = sd_ble_gatts_sys_attr_set(m_conn_handle, NULL, 0, 0); + APP_ERROR_CHECK(err_code); + break; + + case BLE_GATTC_EVT_TIMEOUT: + // Disconnect on GATT Client timeout event. + err_code = sd_ble_gap_disconnect(p_ble_evt->evt.gattc_evt.conn_handle, BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION); + APP_ERROR_CHECK(err_code); + break; + + case BLE_GATTS_EVT_TIMEOUT: + // Disconnect on GATT Server timeout event. + err_code = sd_ble_gap_disconnect(p_ble_evt->evt.gatts_evt.conn_handle, BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION); + APP_ERROR_CHECK(err_code); + break; + + default: + // No implementation needed. + break; + } } - /**@brief Function for the SoftDevice initialization. * * @details This function initializes the SoftDevice and the BLE event interrupt. */ -static void ble_stack_init(void) -{ - ret_code_t err_code; +static void ble_stack_init(void) { + ret_code_t err_code; - err_code = nrf_sdh_enable_request(); - APP_ERROR_CHECK(err_code); + err_code = nrf_sdh_enable_request(); + APP_ERROR_CHECK(err_code); - // Configure the BLE stack using the default settings. - // Fetch the start address of the application RAM. - uint32_t ram_start = 0; - err_code = nrf_sdh_ble_default_cfg_set(APP_BLE_CONN_CFG_TAG, &ram_start); - APP_ERROR_CHECK(err_code); + // Configure the BLE stack using the default settings. + // Fetch the start address of the application RAM. + uint32_t ram_start = 0; + err_code = nrf_sdh_ble_default_cfg_set(APP_BLE_CONN_CFG_TAG, &ram_start); + APP_ERROR_CHECK(err_code); - // Enable BLE stack. - err_code = nrf_sdh_ble_enable(&ram_start); - APP_ERROR_CHECK(err_code); + // Enable BLE stack. + err_code = nrf_sdh_ble_enable(&ram_start); + APP_ERROR_CHECK(err_code); - // Register a handler for BLE events. - NRF_SDH_BLE_OBSERVER(m_ble_observer, APP_BLE_OBSERVER_PRIO, ble_evt_handler, NULL); + // Register a handler for BLE events. + NRF_SDH_BLE_OBSERVER(m_ble_observer, APP_BLE_OBSERVER_PRIO, ble_evt_handler, NULL); } - /**@brief Function for handling events from the GATT library. */ -void gatt_evt_handler(nrf_ble_gatt_t * p_gatt, nrf_ble_gatt_evt_t const * p_evt) -{ - if ((m_conn_handle == p_evt->conn_handle) && (p_evt->evt_id == NRF_BLE_GATT_EVT_ATT_MTU_UPDATED)) - { - m_ble_nus_max_data_len = p_evt->params.att_mtu_effective - OPCODE_LENGTH - HANDLE_LENGTH; - NRF_LOG_INFO("Data len is set to 0x%X(%d)", m_ble_nus_max_data_len, m_ble_nus_max_data_len); - } - NRF_LOG_DEBUG("ATT MTU exchange completed. central 0x%x peripheral 0x%x", - p_gatt->att_mtu_desired_central, - p_gatt->att_mtu_desired_periph); +void gatt_evt_handler(nrf_ble_gatt_t *p_gatt, nrf_ble_gatt_evt_t const *p_evt) { + if ((m_conn_handle == p_evt->conn_handle) && (p_evt->evt_id == NRF_BLE_GATT_EVT_ATT_MTU_UPDATED)) { + m_ble_nus_max_data_len = p_evt->params.att_mtu_effective - OPCODE_LENGTH - HANDLE_LENGTH; + NRF_LOG_INFO("Data len is set to 0x%X(%d)", m_ble_nus_max_data_len, m_ble_nus_max_data_len); + } + NRF_LOG_DEBUG("ATT MTU exchange completed. central 0x%x peripheral 0x%x", p_gatt->att_mtu_desired_central, p_gatt->att_mtu_desired_periph); } - /**@brief Function for initializing the GATT library. */ -void gatt_init(void) -{ - ret_code_t err_code; +void gatt_init(void) { + ret_code_t err_code; - err_code = nrf_ble_gatt_init(&m_gatt, gatt_evt_handler); - APP_ERROR_CHECK(err_code); + err_code = nrf_ble_gatt_init(&m_gatt, gatt_evt_handler); + APP_ERROR_CHECK(err_code); - err_code = nrf_ble_gatt_att_mtu_periph_set(&m_gatt, NRF_SDH_BLE_GATT_MAX_MTU_SIZE); - APP_ERROR_CHECK(err_code); + err_code = nrf_ble_gatt_att_mtu_periph_set(&m_gatt, NRF_SDH_BLE_GATT_MAX_MTU_SIZE); + APP_ERROR_CHECK(err_code); } - /**@brief Function for handling events from the BSP module. * * @param[in] event Event generated by button press. */ -void bsp_event_handler(bsp_event_t event) -{ - uint32_t err_code; - switch (event) - { - case BSP_EVENT_SLEEP: - sleep_mode_enter(); - break; - - case BSP_EVENT_DISCONNECT: - err_code = sd_ble_gap_disconnect(m_conn_handle, BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION); - if (err_code != NRF_ERROR_INVALID_STATE) - { - APP_ERROR_CHECK(err_code); - } - break; - - case BSP_EVENT_WHITELIST_OFF: - if (m_conn_handle == BLE_CONN_HANDLE_INVALID) - { - err_code = ble_advertising_restart_without_whitelist(&m_advertising); - if (err_code != NRF_ERROR_INVALID_STATE) - { - APP_ERROR_CHECK(err_code); - } - } - break; +void bsp_event_handler(bsp_event_t event) { + uint32_t err_code; + switch (event) { + case BSP_EVENT_SLEEP: + sleep_mode_enter(); + break; + + case BSP_EVENT_DISCONNECT: + err_code = sd_ble_gap_disconnect(m_conn_handle, BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION); + if (err_code != NRF_ERROR_INVALID_STATE) { + APP_ERROR_CHECK(err_code); + } + break; + + case BSP_EVENT_WHITELIST_OFF: + if (m_conn_handle == BLE_CONN_HANDLE_INVALID) { + err_code = ble_advertising_restart_without_whitelist(&m_advertising); + if (err_code != NRF_ERROR_INVALID_STATE) { + APP_ERROR_CHECK(err_code); + } + } + break; - default: - break; - } + default: + break; + } } - /**@brief Function for handling app_uart events. * * @details This function will receive a single character from the app_uart module and append it to @@ -518,212 +456,177 @@ void bsp_event_handler(bsp_event_t event) * 'new line' '\n' (hex 0x0A) or if the string has reached the maximum data length. */ /**@snippet [Handling the data received over UART] */ -void uart_event_handle(app_uart_evt_t * p_event) -{ - static uint8_t data_array[BLE_NUS_MAX_DATA_LEN]; - static uint8_t index = 0; - uint32_t err_code; - - switch (p_event->evt_type) - { - case APP_UART_DATA_READY: - UNUSED_VARIABLE(app_uart_get(&data_array[index])); - index++; - - if ((data_array[index - 1] == '\n') || - (data_array[index - 1] == '\r') || - (index >= m_ble_nus_max_data_len)) - { - if (index > 1) - { - NRF_LOG_DEBUG("Ready to send data over BLE NUS"); - NRF_LOG_HEXDUMP_DEBUG(data_array, index); - - do - { - uint16_t length = (uint16_t)index; - err_code = ble_nus_data_send(&m_nus, data_array, &length, m_conn_handle); - if ((err_code != NRF_ERROR_INVALID_STATE) && - (err_code != NRF_ERROR_RESOURCES) && - (err_code != NRF_ERROR_NOT_FOUND)) - { - APP_ERROR_CHECK(err_code); - } - } while (err_code == NRF_ERROR_RESOURCES); - } - - index = 0; +void uart_event_handle(app_uart_evt_t *p_event) { + static uint8_t data_array[BLE_NUS_MAX_DATA_LEN]; + static uint8_t index = 0; + uint32_t err_code; + + switch (p_event->evt_type) { + case APP_UART_DATA_READY: + UNUSED_VARIABLE(app_uart_get(&data_array[index])); + index++; + + if ((data_array[index - 1] == '\n') || (data_array[index - 1] == '\r') || (index >= m_ble_nus_max_data_len)) { + if (index > 1) { + NRF_LOG_DEBUG("Ready to send data over BLE NUS"); + NRF_LOG_HEXDUMP_DEBUG(data_array, index); + + do { + uint16_t length = (uint16_t)index; + err_code = ble_nus_data_send(&m_nus, data_array, &length, m_conn_handle); + if ((err_code != NRF_ERROR_INVALID_STATE) && (err_code != NRF_ERROR_RESOURCES) && (err_code != NRF_ERROR_NOT_FOUND)) { + APP_ERROR_CHECK(err_code); } - break; + } while (err_code == NRF_ERROR_RESOURCES); + } - case APP_UART_COMMUNICATION_ERROR: - APP_ERROR_HANDLER(p_event->data.error_communication); - break; + index = 0; + } + break; - case APP_UART_FIFO_ERROR: - APP_ERROR_HANDLER(p_event->data.error_code); - break; + case APP_UART_COMMUNICATION_ERROR: + APP_ERROR_HANDLER(p_event->data.error_communication); + break; - default: - break; - } + case APP_UART_FIFO_ERROR: + APP_ERROR_HANDLER(p_event->data.error_code); + break; + + default: + break; + } } /**@snippet [Handling the data received over UART] */ - /**@brief Function for initializing the UART module. */ /**@snippet [UART Initialization] */ -static void uart_init(void) -{ - uint32_t err_code; - app_uart_comm_params_t const comm_params = - { - .rx_pin_no = RX_PIN_NUMBER, - .tx_pin_no = TX_PIN_NUMBER, - .rts_pin_no = RTS_PIN_NUMBER, - .cts_pin_no = CTS_PIN_NUMBER, - .flow_control = APP_UART_FLOW_CONTROL_DISABLED, - .use_parity = false, -#if defined (UART_PRESENT) - .baud_rate = NRF_UART_BAUDRATE_115200 +static void uart_init(void) { + uint32_t err_code; + app_uart_comm_params_t const comm_params = { + .rx_pin_no = RX_PIN_NUMBER, + .tx_pin_no = TX_PIN_NUMBER, + .rts_pin_no = RTS_PIN_NUMBER, + .cts_pin_no = CTS_PIN_NUMBER, + .flow_control = APP_UART_FLOW_CONTROL_DISABLED, + .use_parity = false, +#if defined(UART_PRESENT) + .baud_rate = NRF_UART_BAUDRATE_115200 #else - .baud_rate = NRF_UARTE_BAUDRATE_115200 + .baud_rate = NRF_UARTE_BAUDRATE_115200 #endif - }; - - APP_UART_FIFO_INIT(&comm_params, - UART_RX_BUF_SIZE, - UART_TX_BUF_SIZE, - uart_event_handle, - APP_IRQ_PRIORITY_LOWEST, - err_code); - APP_ERROR_CHECK(err_code); + }; + + APP_UART_FIFO_INIT(&comm_params, UART_RX_BUF_SIZE, UART_TX_BUF_SIZE, uart_event_handle, APP_IRQ_PRIORITY_LOWEST, err_code); + APP_ERROR_CHECK(err_code); } /**@snippet [UART Initialization] */ - /**@brief Function for initializing the Advertising functionality. */ -static void advertising_init(void) -{ - uint32_t err_code; - ble_advertising_init_t init; +static void advertising_init(void) { + uint32_t err_code; + ble_advertising_init_t init; - memset(&init, 0, sizeof(init)); + memset(&init, 0, sizeof(init)); - init.advdata.name_type = BLE_ADVDATA_FULL_NAME; - init.advdata.include_appearance = false; - init.advdata.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE; + init.advdata.name_type = BLE_ADVDATA_FULL_NAME; + init.advdata.include_appearance = false; + init.advdata.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE; - init.srdata.uuids_complete.uuid_cnt = sizeof(m_adv_uuids) / sizeof(m_adv_uuids[0]); - init.srdata.uuids_complete.p_uuids = m_adv_uuids; + init.srdata.uuids_complete.uuid_cnt = sizeof(m_adv_uuids) / sizeof(m_adv_uuids[0]); + init.srdata.uuids_complete.p_uuids = m_adv_uuids; - init.config.ble_adv_fast_enabled = true; - init.config.ble_adv_fast_interval = APP_ADV_INTERVAL; - init.config.ble_adv_fast_timeout = APP_ADV_DURATION; - init.evt_handler = on_adv_evt; + init.config.ble_adv_fast_enabled = true; + init.config.ble_adv_fast_interval = APP_ADV_INTERVAL; + init.config.ble_adv_fast_timeout = APP_ADV_DURATION; + init.evt_handler = on_adv_evt; - err_code = ble_advertising_init(&m_advertising, &init); - APP_ERROR_CHECK(err_code); + err_code = ble_advertising_init(&m_advertising, &init); + APP_ERROR_CHECK(err_code); - ble_advertising_conn_cfg_tag_set(&m_advertising, APP_BLE_CONN_CFG_TAG); + ble_advertising_conn_cfg_tag_set(&m_advertising, APP_BLE_CONN_CFG_TAG); } - /**@brief Function for initializing buttons and leds. * * @param[out] p_erase_bonds Will be true if the clear bonding button was pressed to wake the application up. */ -static void buttons_leds_init(bool * p_erase_bonds) -{ - bsp_event_t startup_event; +static void buttons_leds_init(bool *p_erase_bonds) { + bsp_event_t startup_event; - uint32_t err_code = bsp_init(BSP_INIT_LEDS | BSP_INIT_BUTTONS, bsp_event_handler); - APP_ERROR_CHECK(err_code); + uint32_t err_code = bsp_init(BSP_INIT_LEDS | BSP_INIT_BUTTONS, bsp_event_handler); + APP_ERROR_CHECK(err_code); - err_code = bsp_btn_ble_init(NULL, &startup_event); - APP_ERROR_CHECK(err_code); + err_code = bsp_btn_ble_init(NULL, &startup_event); + APP_ERROR_CHECK(err_code); - *p_erase_bonds = (startup_event == BSP_EVENT_CLEAR_BONDING_DATA); + *p_erase_bonds = (startup_event == BSP_EVENT_CLEAR_BONDING_DATA); } - /**@brief Function for initializing the nrf log module. */ -static void log_init(void) -{ - ret_code_t err_code = NRF_LOG_INIT(NULL); - APP_ERROR_CHECK(err_code); +static void log_init(void) { + ret_code_t err_code = NRF_LOG_INIT(NULL); + APP_ERROR_CHECK(err_code); - NRF_LOG_DEFAULT_BACKENDS_INIT(); + NRF_LOG_DEFAULT_BACKENDS_INIT(); } - /**@brief Function for initializing power management. */ -static void power_management_init(void) -{ - ret_code_t err_code; - err_code = nrf_pwr_mgmt_init(); - APP_ERROR_CHECK(err_code); +static void power_management_init(void) { + ret_code_t err_code; + err_code = nrf_pwr_mgmt_init(); + APP_ERROR_CHECK(err_code); } - /**@brief Function for handling the idle state (main loop). * * @details If there is no pending log operation, then sleep until next the next event occurs. */ -static void idle_state_handle(void) -{ - if (NRF_LOG_PROCESS() == false) - { - nrf_pwr_mgmt_run(); - } +static void idle_state_handle(void) { + if (NRF_LOG_PROCESS() == false) { + nrf_pwr_mgmt_run(); + } } - /**@brief Function for starting advertising. */ -static void advertising_start(void) -{ - uint32_t err_code = ble_advertising_start(&m_advertising, BLE_ADV_MODE_FAST); - APP_ERROR_CHECK(err_code); +static void advertising_start(void) { + uint32_t err_code = ble_advertising_start(&m_advertising, BLE_ADV_MODE_FAST); + APP_ERROR_CHECK(err_code); } - /**@brief Application main function. */ -int main(void) -{ - bool erase_bonds; - - // Initialize. - uart_init(); - log_init(); - timers_init(); - buttons_leds_init(&erase_bonds); - power_management_init(); - ble_stack_init(); - gap_params_init(); - gatt_init(); - services_init(); - advertising_init(); - conn_params_init(); - - // Start execution. - printf("\r\nUART started.\r\n"); - NRF_LOG_INFO("Debug logging for UART over RTT started."); - advertising_start(); - - // Enter main loop. - for (;;) - { - idle_state_handle(); - } +int main(void) { + bool erase_bonds; + // Initialize. + uart_init(); + log_init(); + + timers_init(); + buttons_leds_init(&erase_bonds); + power_management_init(); + ble_stack_init(); + gap_params_init(); + gatt_init(); + services_init(); + advertising_init(); + conn_params_init(); + + // Start execution. + printf("\r\nUART started.\r\n"); + NRF_LOG_INFO("Debug logging for UART over RTT started."); + advertising_start(); + + // Enter main loop. + for (;;) { + idle_state_handle(); + } } - /** * @} */