Browse Source

format code

3lead_uart_test_ok_version
zhaohe 1 year ago
parent
commit
2add8ab4b2
  1. 9
      .clang-format
  2. 3
      .gitignore
  3. 234
      .vscode/c_cpp_properties.json
  4. 30
      .vscode/settings.json
  5. 7
      README.md
  6. 40
      app/app.uvoptx
  7. 1
      app/app.uvprojx
  8. 2
      app/config/sdk_config.h
  9. 241
      app/main.c

9
.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

3
.gitignore

@ -4,3 +4,6 @@ JLinkLog.txt
JLinkSettings.ini
RTE_Components.h
EventRecorderStub.scvd
app/.vscode
.vscode/uv4.log.lock
.vscode/keil-assistant.log

234
.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
}

30
.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"
}
}

7
README.md

@ -1 +1,8 @@
# conduction1_dynamic_electrocardiograph
## 使用说明
```
https://iflytop1.feishu.cn/wiki/Fp0fwciUEibtm4kaUeXcraOCneg
```

40
app/app.uvoptx

@ -73,11 +73,11 @@
<LExpSel>0</LExpSel>
</OPTXL>
<OPTFL>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<IsCurrentTarget>0</IsCurrentTarget>
</OPTFL>
<CpuCode>0</CpuCode>
<CpuCode>5</CpuCode>
<DebugOpt>
<uSim>0</uSim>
<uTrg>1</uTrg>
@ -119,6 +119,26 @@
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMRTXEVENTFLAGS</Key>
<Name>-L70 -Z18 -C0 -M0 -T1</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGTARM</Key>
<Name>(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)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMDBGFLAGS</Key>
<Name></Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGUARM</Key>
<Name>d</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>JL2CM3</Key>
<Name>-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)</Name>
</SetRegEntry>
@ -135,12 +155,12 @@
<DebugFlag>
<trace>0</trace>
<periodic>0</periodic>
<aLwin>0</aLwin>
<aLwin>1</aLwin>
<aCover>0</aCover>
<aSer1>0</aSer1>
<aSer2>0</aSer2>
<aPa>0</aPa>
<viewmode>0</viewmode>
<viewmode>1</viewmode>
<vrSel>0</vrSel>
<aSym>0</aSym>
<aTbox>0</aTbox>
@ -237,7 +257,7 @@
<tvExpOptDlg>0</tvExpOptDlg>
<IsCurrentTarget>1</IsCurrentTarget>
</OPTFL>
<CpuCode>0</CpuCode>
<CpuCode>5</CpuCode>
<DebugOpt>
<uSim>0</uSim>
<uTrg>1</uTrg>
@ -343,7 +363,7 @@
<Group>
<GroupName>Application</GroupName>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
@ -375,7 +395,7 @@
<Group>
<GroupName>Board Definition</GroupName>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
@ -395,7 +415,7 @@
<Group>
<GroupName>Board Support</GroupName>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
@ -427,7 +447,7 @@
<Group>
<GroupName>UTF8/UTF16 converter</GroupName>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
@ -447,7 +467,7 @@
<Group>
<GroupName>nRF_BLE</GroupName>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>

1
app/app.uvprojx

@ -3649,6 +3649,7 @@
<TargetName>flash_s140_nrf52_7.2.0_softdevice</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARMCC</pCCUsed>
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>

2
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
// <q> NRF_LOG_DEFERRED - Enable deffered logger.

241
app/main.c

@ -48,31 +48,31 @@
* This application uses the @ref srvlib_conn_params module.
*/
#include <stdint.h>
#include <string.h>
#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
@ -104,7 +104,6 @@
#define UART_TX_BUF_SIZE 256 /**< UART TX buffer size. */
#define UART_RX_BUF_SIZE 256 /**< UART RX buffer size. */
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.*/
@ -113,10 +112,7 @@ BLE_ADVERTISING_DEF(m_advertising);
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_UUID_NUS_SERVICE, NUS_SERVICE_UUID_TYPE}};
/**@brief Function for assert macro callback.
*
@ -129,15 +125,11 @@ 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)
{
static void timers_init(void) {
ret_code_t err_code = app_timer_init();
APP_ERROR_CHECK(err_code);
}
@ -147,17 +139,14 @@ 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)
{
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);
err_code = sd_ble_gap_device_name_set(&sec_mode,
(const uint8_t *) DEVICE_NAME,
strlen(DEVICE_NAME));
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));
@ -171,7 +160,6 @@ static void gap_params_init(void)
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,42 +177,33 @@ 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)
{
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
{
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))
{
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);
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)
{
static void services_init(void) {
uint32_t err_code;
ble_nus_init_t nus_init;
nrf_ble_qwr_init_t qwr_init = {0};
@ -248,7 +223,6 @@ static void services_init(void)
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,32 +234,24 @@ 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)
{
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)
{
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)
{
static void conn_params_init(void) {
uint32_t err_code;
ble_conn_params_init_t cp_init;
@ -304,13 +270,11 @@ static void conn_params_init(void)
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)
{
static void sleep_mode_enter(void) {
uint32_t err_code = bsp_indication_set(BSP_INDICATE_IDLE);
APP_ERROR_CHECK(err_code);
@ -323,19 +287,16 @@ static void sleep_mode_enter(void)
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)
{
static void on_adv_evt(ble_adv_evt_t ble_adv_evt) {
uint32_t err_code;
switch (ble_adv_evt)
{
switch (ble_adv_evt) {
case BLE_ADV_EVT_FAST:
err_code = bsp_indication_set(BSP_INDICATE_ADVERTISING);
APP_ERROR_CHECK(err_code);
@ -348,18 +309,15 @@ static void on_adv_evt(ble_adv_evt_t ble_adv_evt)
}
}
/**@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)
{
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)
{
switch (p_ble_evt->header.evt_id) {
case BLE_GAP_EVT_CONNECTED:
NRF_LOG_INFO("Connected");
err_code = bsp_indication_set(BSP_INDICATE_CONNECTED);
@ -375,11 +333,9 @@ static void ble_evt_handler(ble_evt_t const * p_ble_evt, void * p_context)
m_conn_handle = BLE_CONN_HANDLE_INVALID;
break;
case BLE_GAP_EVT_PHY_UPDATE_REQUEST:
{
case BLE_GAP_EVT_PHY_UPDATE_REQUEST: {
NRF_LOG_DEBUG("PHY update request.");
ble_gap_phys_t const phys =
{
ble_gap_phys_t const phys = {
.rx_phys = BLE_GAP_PHY_AUTO,
.tx_phys = BLE_GAP_PHY_AUTO,
};
@ -401,15 +357,13 @@ static void ble_evt_handler(ble_evt_t const * p_ble_evt, void * p_context)
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);
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);
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;
@ -419,13 +373,11 @@ static void ble_evt_handler(ble_evt_t const * p_ble_evt, void * p_context)
}
}
/**@brief Function for the SoftDevice initialization.
*
* @details This function initializes the SoftDevice and the BLE event interrupt.
*/
static void ble_stack_init(void)
{
static void ble_stack_init(void) {
ret_code_t err_code;
err_code = nrf_sdh_enable_request();
@ -445,24 +397,17 @@ static void ble_stack_init(void)
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))
{
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);
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)
{
void gatt_init(void) {
ret_code_t err_code;
err_code = nrf_ble_gatt_init(&m_gatt, gatt_evt_handler);
@ -472,34 +417,28 @@ void gatt_init(void)
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)
{
void bsp_event_handler(bsp_event_t event) {
uint32_t err_code;
switch (event)
{
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)
{
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)
{
if (m_conn_handle == BLE_CONN_HANDLE_INVALID) {
err_code = ble_advertising_restart_without_whitelist(&m_advertising);
if (err_code != NRF_ERROR_INVALID_STATE)
{
if (err_code != NRF_ERROR_INVALID_STATE) {
APP_ERROR_CHECK(err_code);
}
}
@ -510,7 +449,6 @@ void bsp_event_handler(bsp_event_t event)
}
}
/**@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,35 +456,25 @@ 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)
{
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)
{
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)
{
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
{
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))
{
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);
@ -570,43 +498,33 @@ void uart_event_handle(app_uart_evt_t * p_event)
}
/**@snippet [Handling the data received over UART] */
/**@brief Function for initializing the UART module.
*/
/**@snippet [UART Initialization] */
static void uart_init(void)
{
static void uart_init(void) {
uint32_t err_code;
app_uart_comm_params_t const comm_params =
{
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)
#if defined(UART_PRESENT)
.baud_rate = NRF_UART_BAUDRATE_115200
#else
.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_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)
{
static void advertising_init(void) {
uint32_t err_code;
ble_advertising_init_t init;
@ -630,13 +548,11 @@ static void advertising_init(void)
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)
{
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);
@ -648,59 +564,48 @@ static void buttons_leds_init(bool * p_erase_bonds)
*p_erase_bonds = (startup_event == BSP_EVENT_CLEAR_BONDING_DATA);
}
/**@brief Function for initializing the nrf log module.
*/
static void log_init(void)
{
static void log_init(void) {
ret_code_t err_code = NRF_LOG_INIT(NULL);
APP_ERROR_CHECK(err_code);
NRF_LOG_DEFAULT_BACKENDS_INIT();
}
/**@brief Function for initializing power management.
*/
static void power_management_init(void)
{
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)
{
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)
{
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)
{
int main(void) {
bool erase_bonds;
// Initialize.
uart_init();
log_init();
timers_init();
buttons_leds_init(&erase_bonds);
power_management_init();
@ -717,13 +622,11 @@ int main(void)
advertising_start();
// Enter main loop.
for (;;)
{
for (;;) {
idle_state_handle();
}
}
/**
* @}
*/
Loading…
Cancel
Save