This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Errors Merging "ble_app_uart" and "twi_sensor"

I found similar questions, but none that were marked as "answered".

I have a working version of "nRF5_SDK_160.0.0_98a08e2/examples/ble_peripheral/ble_app_uart". I also have a modified "nRF5_SDK_160.0.0_98a08e2/examples/peripheral/twi_sensor" that works to communicate with my TWI device. I am using Segger IDE.

I am attempting to merge the two projects into one by starting from the BLE and added the TWI components. TL;DR Why can't I merge these two projects to get a functional program?

In partial merge 1, nothing compiles with error "undefined reference to `nrf_log_backend_uart_init"

To fix this, I added more values to emProject and called it partial merge 2. Without yet attempting to communicate with the TWI board, everything compiles fine. But when I run the program, I hit "app_error_handler_gcc.c/app_error_handler(ret_code_t error_code, uint32_t line_num, const uint8_t * p_file_name) with error code 0x08.

To fix this, I added the final missing parts to the .emProject, which causes the error "'NRF_SUCCESS' undeclared (first use in this function); did you mean 'NRFX_SUCCESS'?"

Partial merge 1 means

  • main.c/main.h now initializes the TWI communication as well as handle the nRF52840 UART initialization process.
  • The bluetooth control has been moved to its own file
  • The TWI initialization driver has been added to the "ble_app_uart" from the working "twi_sensor" example
  • the .emProject File has been updated (see "ble_twi-partialMerge1.emProject.txt" since .emProject files won't load)
    • The Nordic drivers are moved into their own file so that the project is kept clean (nRF_files and Segger_files)
    • The missing includes from "twi_sensor" have NOT been added to "ble_app_uart"
  • The sdk_config.h file has been updated with everything from both files (see "sdk_config-ble_only.h" and "sdk_config-twi_added.h")

Partial merge 2 means (same as partial 1 except...)

  • .emProject (see "ble_twi-partialMerge2.emProject" since .emProject files won't load)
    • Some of the missing includes from "twi_sensor" HAVE been added to "ble_app_uart"
    • to "<folder Name="nRF_Drivers">"
      • File <file file_name="nRF_sdk/integration/nrfx/legacy/nrf_drv_twi.c" /> is added
      • File <file file_name="nRF_sdk/modules/nrfx/drivers/src/nrfx_twi.c" /> is added
      • File <file file_name="nRF_sdk/modules/nrfx/drivers/src/nrfx_twim.c" /> is added
    • to "<folder Name="nRF_Log">" the value "<file file_name="nRF_sdk/components/libraries/log/src/nrf_log_backend_uart.c" />" is added

Complete merge means (same as partial 2, except...)

  • .emProject (see "ble_twi-completeMerge.emProject" since .emProject files won't load)
    • All the missing includes from "twi_sensor" HAVE been added to "ble_app_uart"
    • to "configuration/c_preprocessor_definitions" the value "BSP_DEFINES_ONLY;" is added
    • to "configuration/c_user_include_directories" the value "nRF_sdk/components/drivers_nrf/nrf_soc_nosd;" is added

Example Code

/**
 * Copyright (c) 2014 - 2019, 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.
 *
 */
/** @file
 *
 * @defgroup ble_sdk_uart_over_ble_main main.c
 * @{
 * @ingroup  ble_sdk_app_nus_eval
 * @brief    UART over BLE application main file.
 *
 * This file contains the source code for a sample application that uses the Nordic UART service.
 * This application uses the @ref srvlib_conn_params module.
 */

#include "main.h"

// @brief Function for initializing the timer module.
static void init_timers(void) {
  ret_code_t err_code = app_timer_init();
  APP_ERROR_CHECK(err_code);

  // Create timers.

  // TODO YOUR_JOB: Create any timers to be used by the application.
  //                Below is an example of how to create a timer.
  //                For every new timer needed, increase the value of the macro APP_TIMER_MAX_TIMERS by
  //                one.
  //      ret_code_t err_code;
  //      err_code = app_timer_create(&m_app_timer_id, APP_TIMER_MODE_REPEATED, timer_timeout_handler);
  //      APP_ERROR_CHECK(err_code);
}

// @brief Function for handling the YYY Service events.
// TODO YOUR_JOB implement a service handler function depending on the event the service you are using can generate
//
// @details This function will be called for all YY Service events which are passed to
//          the application.
//
// @param[in]   p_yy_service   YY Service structure.
// @param[in]   p_evt          Event received from the YY Service.
//
//
//static void on_yys_evt(ble_yy_service_t     * p_yy_service,
//                       ble_yy_service_evt_t * p_evt)
//{
//    switch (p_evt->evt_type)
//    {
//        case BLE_YY_NAME_EVT_WRITE:
//            APPL_LOG("[APPL]: charact written with value %s. ", p_evt->params.char_xx.value.p_str);
//            break;
//
//        default:
//            // No implementation needed.
//            break;
//    }
//}

// @brief Function for starting timers.
static void application_timers_start(void) {
  // TODO YOUR_JOB: Start your timers. below is an example of how to start a timer.
  //      ret_code_t err_code;
  //      err_code = app_timer_start(m_app_timer_id, TIMER_INTERVAL, NULL);
  //      APP_ERROR_CHECK(err_code);
}

// @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 init_buttons_leds(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);

  err_code = bsp_btn_ble_init(NULL, &startup_event);
  APP_ERROR_CHECK(err_code);

  *p_erase_bonds = (startup_event == BSP_EVENT_CLEAR_BONDING_DATA);
}

// @brief Function for initializing the nrf log module.
static void init_log(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 init_power_management(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();
  }
  else {
    printf("NRF_LOG_PROCESS is TRUE");
  }
}

// @brief Application main function.
int main(void) {
  // Initialize.
  initialize();

  // 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();
  }
}

// @brief Initialization
void initialize() {
  // Microcontroller initialization
  init_uCtrl();

  // Initialize the TWI/I2C Serial Communication
  init_twi();

  // BLE Stack initialization
  init_isp1807();
}

// @brief Sets the default value for the microcontroller
void init_uCtrl() {
  // TODO This is never set so not sure how or why it is used.
  bool erase_bonds;

  // Logger initialization
  init_log();
  
  // Timer initialization
  init_timers();

  // Button and LED initialization (not sure if does anything)
  init_buttons_leds(&erase_bonds);

  // Initialize the power management
  init_power_management();
}
main.h

/**
 * Copyright (c) 2014 - 2019, 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.
 *
 */

// Initialize the TWI communication.

#include "twi_driver.h"

i2c_sensors current_sensor = twi_BMI160;

// Indicates if operation on TWI has ended.
volatile bool twi_xfer_done = false;

// TWI instance.
static const nrf_drv_twi_t m_twi = NRF_DRV_TWI_INSTANCE(TWI_INSTANCE_ID);

// TWI initialization.
void init_twi(void) {
  ret_code_t err_code;

  const nrf_drv_twi_config_t twi_gi_pill_config = {
      .scl = ARDUINO_SCL_PIN,
      .sda = ARDUINO_SDA_PIN,
      .frequency = NRF_DRV_TWI_FREQ_100K,
      .interrupt_priority = APP_IRQ_PRIORITY_HIGH,
      .clear_bus_init = false};

  err_code = nrf_drv_twi_init(&m_twi, &twi_gi_pill_config, twi_handler, NULL);
  APP_ERROR_CHECK(err_code);

  nrf_drv_twi_enable(&m_twi);

  NRF_LOG_INFO("Initialization Complete: TWI Communication");
}

// TWI events handler. Called when I2C data is received.
//
// @details Dont put any long stuff in here. no print statements!!!
void twi_handler(nrf_drv_twi_evt_t const *p_event, void *p_context) {
  switch (p_event->type) {
  case NRF_DRV_TWI_EVT_DONE:
    if (p_event->xfer_desc.type == NRF_DRV_TWI_XFER_RX) {
      if (current_sensor == twi_BMI160) {              //{BMI160, LPS22HB, AD5241, MCP4017, MCP4725, LP55231};
        //data_handler_bmi160(gyroAccelData); //, GA_Done);
      } else if (current_sensor == twi_LPS22HB) {
        //data_handler_lps22hb(m_sample,pSample,tSample,lps_RX_Type,&checked,&ready);
        //LPSFLAG = 1;
        /*
          LPSFLAG=1;
          if(lps_RX_Type==TEMP){
            printTemp(((int16_t)((int16_t)tSample[1] << 8 | tSample[0])) / 100.f);
          }
          else if(lps_RX_Type == PRESSURE){
            printPressure(((int32_t)((int32_t)pSample[2] << 16 | (int32_t)pSample[1] << 8 | pSample[0])) / 4096.f);
          }
          else{}
        */

      } else if (current_sensor == twi_AD5241) {

      } else if (current_sensor == twi_MCP4017) {

      } else if (current_sensor == twi_MCP4725) {

      } else if (current_sensor == twi_LP55231) {

      } else {
        //yo you shouldnt be here...
      }
    }
    twi_xfer_done = true;
    break;
  default:
    break;
  }
}
twi_driver.h

/**
 * Copyright (c) 2014 - 2019, 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 "ISP1807.h"

// Initialize the ISP1807 IC.
void init_isp1807() {
  init_uart();
  init_ble_stack();
  init_gap_params();
  init_gatt();
  init_services();
  init_advertising();
  init_conn_params();

  NRF_LOG_INFO("Initialization Complete: ISP1807");
  NRF_LOG_FLUSH();
}

// @brief Function for assert macro callback.
//
// @details This function will be called in case of an assert in the SoftDevice.
//
// @warning This handler is an example only and does not fit a final product. You need to analyse
//          how your product is supposed to react in case of Assert.
// @warning On assert from the SoftDevice, the system can only recover on reset.
//
// @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(isp1807_dead_beef, line_num, p_file_name);
}

// @brief Function for the GAP initialization.
//
// @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 init_gap_params(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 *)isp1807_device_name,
      strlen(isp1807_device_name));
  APP_ERROR_CHECK(err_code);

  //  TODO YOUR_JOB: Use an appearance value matching the application's use case.
  //       err_code = sd_ble_gap_appearance_set(BLE_APPEARANCE_);
  //       APP_ERROR_CHECK(err_code);

  memset(&gap_conn_params, 0, sizeof(gap_conn_params));

  gap_conn_params.min_conn_interval = isp1807_min_conn_interval;
  gap_conn_params.max_conn_interval = isp1807_max_conn_interval;
  gap_conn_params.slave_latency = isp1807_slave_latency;
  gap_conn_params.conn_sup_timeout = isp1807_conn_sup_timeout;

  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
//          application about an error.
//
// @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);
}

// @brief Function for handling the data from the Nordic UART Service.
//
// @details This function will process the data received from the Nordic UART BLE Service and send
//          it to the UART module.
//
// @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)
        ;
    }
  }
}

// @brief Function for initializing services that will be used by the application.
static void init_services(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;

  err_code = nrf_ble_qwr_init(&m_qwr, &qwr_init);
  APP_ERROR_CHECK(err_code);

  // Initialize NUS.
  memset(&nus_init, 0, sizeof(nus_init));

  nus_init.data_handler = nus_data_handler;

  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
//          which are passed to the application.
//
// @note All this function does is to disconnect. This could have been done by simply setting
//       the disconnect_on_fail config parameter, but instead we use the event handler
//       mechanism to demonstrate its use.
//
// @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;

  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);
}

// @brief Function for initializing the Connection Parameters module.
static void init_conn_params(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 = isp1807_first_conn_params_update_delay;
  cp_init.next_conn_params_update_delay = isp1807_next_conn_params_update_delay;
  cp_init.max_conn_params_update_count = isp1807_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);

  // 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);
}

// @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;
  }
}

// @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_GAP_EVT_SCAN_REQ_REPORT:
    //    printf("\n\n\rBLE_GAP_EVT_SCAN_REQ_REPORT");
    //    ble_gap_evt_scan_req_report_t *p_scan_req_report_t = (ble_gap_evt_scan_req_report_t *)&p_ble_evt->evt.gap_evt.params.scan_req_report;
    //    printf("\n\rPeer Address = 0x%02x:%02x:%02x:%02x:%02x:%02x",
    //        p_scan_req_report_t->peer_addr.addr[5],
    //        p_scan_req_report_t->peer_addr.addr[4],
    //        p_scan_req_report_t->peer_addr.addr[3],
    //        p_scan_req_report_t->peer_addr.addr[2],
    //        p_scan_req_report_t->peer_addr.addr[1],
    //        p_scan_req_report_t->peer_addr.addr[0]);
    //    printf("\n\rRSSI value = %d dBm", p_scan_req_report_t->rssi);
    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 init_ble_stack(void) {
  ret_code_t 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(isp1807_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);

  // Register a handler for BLE events.
  NRF_SDH_BLE_OBSERVER(m_ble_observer, isp1807_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);
}

// @brief Function for initializing the GATT library.
void init_gatt(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_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;

  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
//          a string. The string will be be sent over BLE when the last character received was a
//          '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) {
        //uint8_t ed = sample_energyDetection();
        //printf("Energy Detection = %d", ed);
        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;
    }
    break;

  case APP_UART_COMMUNICATION_ERROR:
    APP_ERROR_HANDLER(p_event->data.error_communication);
    break;

  case APP_UART_FIFO_ERROR:
    APP_ERROR_HANDLER(p_event->data.error_code);
    break;

  default:
    break;
  }
}
// end uart_event_handle()

// @brief  Function for initializing the UART module.
//
// @snippet [UART Initialization] */
static void init_uart(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
#endif
  };

  APP_UART_FIFO_INIT(&comm_params,
      isp1807_uart_rx_buf_size,
      isp1807_uart_tx_buf_size,
      uart_event_handle,
      APP_IRQ_PRIORITY_LOWEST,
      err_code);
  APP_ERROR_CHECK(err_code);
}

// @brief Function for initializing the Advertising functionality.
static void init_advertising(void) {
  uint32_t err_code;
  ble_advertising_init_t 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.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 = isp1807_app_adv_interval;
  init.config.ble_adv_fast_timeout = isp1807_app_adv_duration;
  init.evt_handler = on_adv_evt;

  err_code = ble_advertising_init(&m_advertising, &init);
  APP_ERROR_CHECK(err_code);

  ble_advertising_conn_cfg_tag_set(&m_advertising, isp1807_app_ble_conn_cfg_tag);
}

// @brief Function for starting advertising.
void advertising_start(void) {
  uint32_t err_code = ble_advertising_start(&m_advertising, BLE_ADV_MODE_FAST);
  APP_ERROR_CHECK(err_code);
}
ISP1807.h

sdk_config-TWI_added.hsdk_config-BLE_only.h

<!DOCTYPE CrossStudio_Project_File>
<solution Name="ble_app_uart_pca10056_s140" target="8" version="2">
  <project Name="ble_app_uart_pca10056_s140">
    <configuration
      Name="Common"
      arm_architecture="v7EM"
      arm_core_type="Cortex-M4"
      arm_endian="Little"
      arm_fp_abi="Hard"
      arm_fpu_type="FPv4-SP-D16"
      arm_linker_heap_size="8192"
      arm_linker_process_stack_size="0"
      arm_linker_stack_size="8192"
      arm_linker_treat_warnings_as_errors="No"
      arm_simulator_memory_simulation_parameter="RWX 00000000,00100000,FFFFFFFF;RWX 20000000,00010000,CDCDCDCD"
      arm_target_device_name="nRF52840_xxAA"
      arm_target_interface_type="SWD"
      c_preprocessor_definitions="APP_TIMER_V2;APP_TIMER_V2_RTC1_ENABLED;BOARD_PCA10056;BSP_DEFINES_ONLY;CONFIG_GPIO_AS_PINRESET;FLOAT_ABI_HARD;INITIALIZE_USER_SECTIONS;NO_VTOR_CONFIG;NRF52840_XXAA;NRF_SD_BLE_API_VERSION=7;S140;SOFTDEVICE_PRESENT;"
      c_user_include_directories="nRF_sdk/components;nRF_sdk/components/ble/ble_advertising;nRF_sdk/components/ble/ble_dtm;nRF_sdk/components/ble/ble_link_ctx_manager;nRF_sdk/components/ble/ble_racp;nRF_sdk/components/ble/ble_services/ble_ancs_c;nRF_sdk/components/ble/ble_services/ble_ans_c;nRF_sdk/components/ble/ble_services/ble_bas;nRF_sdk/components/ble/ble_services/ble_bas_c;nRF_sdk/components/ble/ble_services/ble_cscs;nRF_sdk/components/ble/ble_services/ble_cts_c;nRF_sdk/components/ble/ble_services/ble_dfu;nRF_sdk/components/ble/ble_services/ble_dis;nRF_sdk/components/ble/ble_services/ble_gls;nRF_sdk/components/ble/ble_services/ble_hids;nRF_sdk/components/ble/ble_services/ble_hrs;nRF_sdk/components/ble/ble_services/ble_hrs_c;nRF_sdk/components/ble/ble_services/ble_hts;nRF_sdk/components/ble/ble_services/ble_ias;nRF_sdk/components/ble/ble_services/ble_ias_c;nRF_sdk/components/ble/ble_services/ble_lbs;nRF_sdk/components/ble/ble_services/ble_lbs_c;nRF_sdk/components/ble/ble_services/ble_lls;nRF_sdk/components/ble/ble_services/ble_nus;nRF_sdk/components/ble/ble_services/ble_nus_c;nRF_sdk/components/ble/ble_services/ble_rscs;nRF_sdk/components/ble/ble_services/ble_rscs_c;nRF_sdk/components/ble/ble_services/ble_tps;nRF_sdk/components/ble/common;nRF_sdk/components/ble/nrf_ble_gatt;nRF_sdk/components/ble/nrf_ble_qwr;nRF_sdk/components/ble/peer_manager;nRF_sdk/components/boards;nRF_sdk/components/drivers_nrf/nrf_soc_nosd;nRF_sdk/components/libraries/atomic;nRF_sdk/components/libraries/atomic_fifo;nRF_sdk/components/libraries/atomic_flags;nRF_sdk/components/libraries/balloc;nRF_sdk/components/libraries/bootloader/ble_dfu;nRF_sdk/components/libraries/bsp;nRF_sdk/components/libraries/button;nRF_sdk/components/libraries/cli;nRF_sdk/components/libraries/crc16;nRF_sdk/components/libraries/crc32;nRF_sdk/components/libraries/crypto;nRF_sdk/components/libraries/csense;nRF_sdk/components/libraries/csense_drv;nRF_sdk/components/libraries/delay;nRF_sdk/components/libraries/ecc;nRF_sdk/components/libraries/experimental_section_vars;nRF_sdk/components/libraries/experimental_task_manager;nRF_sdk/components/libraries/fds;nRF_sdk/components/libraries/fifo;nRF_sdk/components/libraries/fstorage;nRF_sdk/components/libraries/gfx;nRF_sdk/components/libraries/gpiote;nRF_sdk/components/libraries/hardfault;nRF_sdk/components/libraries/hci;nRF_sdk/components/libraries/led_softblink;nRF_sdk/components/libraries/log;nRF_sdk/components/libraries/log/src;nRF_sdk/components/libraries/low_power_pwm;nRF_sdk/components/libraries/mem_manager;nRF_sdk/components/libraries/memobj;nRF_sdk/components/libraries/mpu;nRF_sdk/components/libraries/mutex;nRF_sdk/components/libraries/pwm;nRF_sdk/components/libraries/pwr_mgmt;nRF_sdk/components/libraries/queue;nRF_sdk/components/libraries/ringbuf;nRF_sdk/components/libraries/scheduler;nRF_sdk/components/libraries/sdcard;nRF_sdk/components/libraries/slip;nRF_sdk/components/libraries/sortlist;nRF_sdk/components/libraries/spi_mngr;nRF_sdk/components/libraries/stack_guard;nRF_sdk/components/libraries/strerror;nRF_sdk/components/libraries/svc;nRF_sdk/components/libraries/timer;nRF_sdk/components/libraries/twi_mngr;nRF_sdk/components/libraries/twi_sensor;nRF_sdk/components/libraries/uart;nRF_sdk/components/libraries/usbd;nRF_sdk/components/libraries/usbd/class/audio;nRF_sdk/components/libraries/usbd/class/cdc;nRF_sdk/components/libraries/usbd/class/cdc/acm;nRF_sdk/components/libraries/usbd/class/hid;nRF_sdk/components/libraries/usbd/class/hid/generic;nRF_sdk/components/libraries/usbd/class/hid/kbd;nRF_sdk/components/libraries/usbd/class/hid/mouse;nRF_sdk/components/libraries/usbd/class/msc;nRF_sdk/components/libraries/util;nRF_sdk/components/nfc/ndef/conn_hand_parser;nRF_sdk/components/nfc/ndef/conn_hand_parser/ac_rec_parser;nRF_sdk/components/nfc/ndef/conn_hand_parser/ble_oob_advdata_parser;nRF_sdk/components/nfc/ndef/conn_hand_parser/le_oob_rec_parser;nRF_sdk/components/nfc/ndef/connection_handover/ac_rec;nRF_sdk/components/nfc/ndef/connection_handover/ble_oob_advdata;nRF_sdk/components/nfc/ndef/connection_handover/ble_pair_lib;nRF_sdk/components/nfc/ndef/connection_handover/ble_pair_msg;nRF_sdk/components/nfc/ndef/connection_handover/common;nRF_sdk/components/nfc/ndef/connection_handover/ep_oob_rec;nRF_sdk/components/nfc/ndef/connection_handover/hs_rec;nRF_sdk/components/nfc/ndef/connection_handover/le_oob_rec;nRF_sdk/components/nfc/ndef/generic/message;nRF_sdk/components/nfc/ndef/generic/record;nRF_sdk/components/nfc/ndef/launchapp;nRF_sdk/components/nfc/ndef/parser/message;nRF_sdk/components/nfc/ndef/parser/record;nRF_sdk/components/nfc/ndef/text;nRF_sdk/components/nfc/ndef/uri;nRF_sdk/components/nfc/platform;nRF_sdk/components/nfc/t2t_lib;nRF_sdk/components/nfc/t2t_parser;nRF_sdk/components/nfc/t4t_lib;nRF_sdk/components/nfc/t4t_parser/apdu;nRF_sdk/components/nfc/t4t_parser/cc_file;nRF_sdk/components/nfc/t4t_parser/hl_detection_procedure;nRF_sdk/components/nfc/t4t_parser/tlv;nRF_sdk/components/softdevice/common;nRF_sdk/components/softdevice/s140/headers;nRF_sdk/components/softdevice/s140/headers/nrf52;nRF_sdk/components/toolchain/cmsis/include;nRF_sdk/external/fprintf;nRF_sdk/external/segger_rtt;nRF_sdk/external/utf_converter;nRF_sdk/integration/nrfx;nRF_sdk/integration/nrfx/legacy;nRF_sdk/modules/nrfx;nRF_sdk/modules/nrfx/drivers/include;nRF_sdk/modules/nrfx/hal;nRF_sdk/modules/nrfx/mdk;nRF_sdk/sdk_config;"
      debug_additional_load_file="nRF_sdk/components/softdevice/s140/hex/s140_nrf52_7.0.1_softdevice.hex"
      debug_register_definition_file="nRF_sdk/modules/nrfx/mdk/nrf52840.svd"
      debug_start_from_entry_point_symbol="No"
      debug_target_connection="J-Link"
      gcc_debugging_level="Level 3"
      gcc_entry_point="Reset_Handler"
      linker_output_format="hex"
      linker_printf_fmt_level="long"
      linker_printf_width_precision_supported="Yes"
      linker_scanf_fmt_level="long"
      linker_section_placement_file="flash_placement.xml"
      linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x100000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x40000;FLASH_START=0x27000;FLASH_SIZE=0xd9000;RAM_START=0x20002ae8;RAM_SIZE=0x3d518"
      linker_section_placements_segments="FLASH RX 0x0 0x100000;RAM RWX 0x20000000 0x40000"
      macros="CMSIS_CONFIG_TOOL=nRF_sdk/external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar"
      project_directory=""
      project_type="Executable" />
    <folder Name="Application">
      <file file_name="src/main.c" />
      <file file_name="src/main.h" />
      <file file_name="nRF_sdk/sdk_config/sdk_config.h" />
      <folder Name="BLE_Driver">
        <file file_name="src/BLE_Driver/ISP1807.h" />
        <file file_name="src/BLE_Driver/ISP1807.c" />
      </folder>
      <folder Name="TWI_Driver">
        <file file_name="src/TWI_Driver/twi_driver.h" />
        <file file_name="src/TWI_Driver/twi_driver.c" />
      </folder>
    </folder>
    <folder Name="nRF_Files">
      <folder Name="BLE">
        <folder Name="nRF_BLE">
          <file file_name="nRF_sdk/components/ble/common/ble_advdata.c" />
          <file file_name="nRF_sdk/components/ble/ble_advertising/ble_advertising.c" />
          <file file_name="nRF_sdk/components/ble/common/ble_conn_params.c" />
          <file file_name="nRF_sdk/components/ble/common/ble_conn_state.c" />
          <file file_name="nRF_sdk/components/ble/ble_link_ctx_manager/ble_link_ctx_manager.c" />
          <file file_name="nRF_sdk/components/ble/common/ble_srv_common.c" />
          <file file_name="nRF_sdk/components/ble/nrf_ble_gatt/nrf_ble_gatt.c" />
          <file file_name="nRF_sdk/components/ble/nrf_ble_qwr/nrf_ble_qwr.c" />
        </folder>
        <folder Name="nRF_BLE_Services">
          <file file_name="nRF_sdk/components/ble/ble_services/ble_nus/ble_nus.c" />
        </folder>
        <folder Name="nRF_SoftDevice">
          <file file_name="nRF_sdk/components/softdevice/common/nrf_sdh.c" />
          <file file_name="nRF_sdk/components/softdevice/common/nrf_sdh_ble.c" />
          <file file_name="nRF_sdk/components/softdevice/common/nrf_sdh_soc.c" />
        </folder>
      </folder>
      <folder Name="nRF_Drivers">
        <file file_name="nRF_sdk/integration/nrfx/legacy/nrf_drv_clock.c" />
        <file file_name="nRF_sdk/integration/nrfx/legacy/nrf_drv_twi.c" />
        <file file_name="nRF_sdk/integration/nrfx/legacy/nrf_drv_uart.c" />
        <file file_name="nRF_sdk/modules/nrfx/drivers/src/nrfx_clock.c" />
        <file file_name="nRF_sdk/modules/nrfx/drivers/src/nrfx_gpiote.c" />
        <file file_name="nRF_sdk/modules/nrfx/drivers/src/prs/nrfx_prs.c" />
        <file file_name="nRF_sdk/modules/nrfx/drivers/src/nrfx_twi.c" />
        <file file_name="nRF_sdk/modules/nrfx/drivers/src/nrfx_twim.c" />
        <file file_name="nRF_sdk/modules/nrfx/drivers/src/nrfx_uart.c" />
        <file file_name="nRF_sdk/modules/nrfx/drivers/src/nrfx_uarte.c" />
        <file file_name="nRF_sdk/modules/nrfx/soc/nrfx_atomic.c" />
      </folder>
      <folder Name="nRF_Libraries">
        <file file_name="nRF_sdk/components/libraries/button/app_button.c" />
        <file file_name="nRF_sdk/components/libraries/util/app_error.c" />
        <file file_name="nRF_sdk/components/libraries/util/app_error_handler_gcc.c" />
        <file file_name="nRF_sdk/components/libraries/util/app_error_weak.c" />
        <file file_name="nRF_sdk/components/libraries/fifo/app_fifo.c" />
        <file file_name="nRF_sdk/components/libraries/scheduler/app_scheduler.c" />
        <file file_name="nRF_sdk/components/libraries/timer/app_timer2.c" />
        <file file_name="nRF_sdk/components/libraries/uart/app_uart_fifo.c" />
        <file file_name="nRF_sdk/components/libraries/util/app_util_platform.c" />
        <file file_name="nRF_sdk/components/libraries/timer/drv_rtc.c" />
        <file file_name="nRF_sdk/components/libraries/hardfault/hardfault_implementation.c" />
        <file file_name="nRF_sdk/components/libraries/util/nrf_assert.c" />
        <file file_name="nRF_sdk/components/libraries/atomic_fifo/nrf_atfifo.c" />
        <file file_name="nRF_sdk/components/libraries/atomic_flags/nrf_atflags.c" />
        <file file_name="nRF_sdk/components/libraries/atomic/nrf_atomic.c" />
        <file file_name="nRF_sdk/components/libraries/balloc/nrf_balloc.c" />
        <file file_name="nRF_sdk/external/fprintf/nrf_fprintf.c" />
        <file file_name="nRF_sdk/external/fprintf/nrf_fprintf_format.c" />
        <file file_name="nRF_sdk/components/libraries/memobj/nrf_memobj.c" />
        <file file_name="nRF_sdk/components/libraries/pwr_mgmt/nrf_pwr_mgmt.c" />
        <file file_name="nRF_sdk/components/libraries/ringbuf/nrf_ringbuf.c" />
        <file file_name="nRF_sdk/components/libraries/experimental_section_vars/nrf_section_iter.c" />
        <file file_name="nRF_sdk/components/libraries/sortlist/nrf_sortlist.c" />
        <file file_name="nRF_sdk/components/libraries/strerror/nrf_strerror.c" />
        <file file_name="nRF_sdk/components/libraries/uart/retarget.c" />
      </folder>
      <folder Name="nRF_Log">
        <file file_name="nRF_sdk/components/libraries/log/src/nrf_log_backend_rtt.c" />
        <file file_name="nRF_sdk/components/libraries/log/src/nrf_log_backend_serial.c" />
        <file file_name="nRF_sdk/components/libraries/log/src/nrf_log_backend_uart.c" />
        <file file_name="nRF_sdk/components/libraries/log/src/nrf_log_default_backends.c" />
        <file file_name="nRF_sdk/components/libraries/log/src/nrf_log_frontend.c" />
        <file file_name="nRF_sdk/components/libraries/log/src/nrf_log_str_formatter.c" />
      </folder>
      <folder Name="nRF_Segger_RTT">
        <file file_name="nRF_sdk/external/segger_rtt/SEGGER_RTT.c" />
        <file file_name="nRF_sdk/external/segger_rtt/SEGGER_RTT_Syscalls_SES.c" />
        <file file_name="nRF_sdk/external/segger_rtt/SEGGER_RTT_printf.c" />
      </folder>
      <folder Name="UTF8/UTF16 converter">
        <file file_name="nRF_sdk/external/utf_converter/utf.c" />
      </folder>
    </folder>
    <folder Name="Segger_Files">
      <folder Name="Board Definition">
        <file file_name="nRF_sdk/components/boards/boards.c" />
      </folder>
      <folder Name="Board Support">
        <file file_name="nRF_sdk/components/libraries/bsp/bsp.c" />
        <file file_name="nRF_sdk/components/libraries/bsp/bsp_btn_ble.c" />
      </folder>
      <folder Name="None">
        <file file_name="nRF_sdk/modules/nrfx/mdk/ses_startup_nrf52840.s" />
        <file file_name="nRF_sdk/modules/nrfx/mdk/ses_startup_nrf_common.s" />
        <file file_name="nRF_sdk/modules/nrfx/mdk/system_nrf52840.c" />
      </folder>
      <folder Name="Segger Startup Files">
        <file file_name="$(StudioDir)/source/thumb_crt0.s" />
      </folder>
    </folder>
    <configuration Name="Debug" linker_printf_fp_enabled="Float" />
  </project>
  <configuration
    Name="Release"
    c_preprocessor_definitions="NDEBUG"
    gcc_optimization_level="Optimize For Size" />
  <configuration
    Name="Debug"
    c_preprocessor_definitions="DEBUG; DEBUG_NRF"
    gcc_optimization_level="None" />
</solution>
<!DOCTYPE CrossStudio_Project_File>
<solution Name="ble_app_uart_pca10056_s140" target="8" version="2">
  <project Name="ble_app_uart_pca10056_s140">
    <configuration
      Name="Common"
      arm_architecture="v7EM"
      arm_core_type="Cortex-M4"
      arm_endian="Little"
      arm_fp_abi="Hard"
      arm_fpu_type="FPv4-SP-D16"
      arm_linker_heap_size="8192"
      arm_linker_process_stack_size="0"
      arm_linker_stack_size="8192"
      arm_linker_treat_warnings_as_errors="No"
      arm_simulator_memory_simulation_parameter="RWX 00000000,00100000,FFFFFFFF;RWX 20000000,00010000,CDCDCDCD"
      arm_target_device_name="nRF52840_xxAA"
      arm_target_interface_type="SWD"
      c_preprocessor_definitions="APP_TIMER_V2;APP_TIMER_V2_RTC1_ENABLED;BOARD_PCA10056;CONFIG_GPIO_AS_PINRESET;FLOAT_ABI_HARD;INITIALIZE_USER_SECTIONS;NO_VTOR_CONFIG;NRF52840_XXAA;NRF_SD_BLE_API_VERSION=7;S140;SOFTDEVICE_PRESENT;"
      c_user_include_directories="nRF_sdk/components;nRF_sdk/components/ble/ble_advertising;nRF_sdk/components/ble/ble_dtm;nRF_sdk/components/ble/ble_link_ctx_manager;nRF_sdk/components/ble/ble_racp;nRF_sdk/components/ble/ble_services/ble_ancs_c;nRF_sdk/components/ble/ble_services/ble_ans_c;nRF_sdk/components/ble/ble_services/ble_bas;nRF_sdk/components/ble/ble_services/ble_bas_c;nRF_sdk/components/ble/ble_services/ble_cscs;nRF_sdk/components/ble/ble_services/ble_cts_c;nRF_sdk/components/ble/ble_services/ble_dfu;nRF_sdk/components/ble/ble_services/ble_dis;nRF_sdk/components/ble/ble_services/ble_gls;nRF_sdk/components/ble/ble_services/ble_hids;nRF_sdk/components/ble/ble_services/ble_hrs;nRF_sdk/components/ble/ble_services/ble_hrs_c;nRF_sdk/components/ble/ble_services/ble_hts;nRF_sdk/components/ble/ble_services/ble_ias;nRF_sdk/components/ble/ble_services/ble_ias_c;nRF_sdk/components/ble/ble_services/ble_lbs;nRF_sdk/components/ble/ble_services/ble_lbs_c;nRF_sdk/components/ble/ble_services/ble_lls;nRF_sdk/components/ble/ble_services/ble_nus;nRF_sdk/components/ble/ble_services/ble_nus_c;nRF_sdk/components/ble/ble_services/ble_rscs;nRF_sdk/components/ble/ble_services/ble_rscs_c;nRF_sdk/components/ble/ble_services/ble_tps;nRF_sdk/components/ble/common;nRF_sdk/components/ble/nrf_ble_gatt;nRF_sdk/components/ble/nrf_ble_qwr;nRF_sdk/components/ble/peer_manager;nRF_sdk/components/boards;nRF_sdk/components/libraries/atomic;nRF_sdk/components/libraries/atomic_fifo;nRF_sdk/components/libraries/atomic_flags;nRF_sdk/components/libraries/balloc;nRF_sdk/components/libraries/bootloader/ble_dfu;nRF_sdk/components/libraries/bsp;nRF_sdk/components/libraries/button;nRF_sdk/components/libraries/cli;nRF_sdk/components/libraries/crc16;nRF_sdk/components/libraries/crc32;nRF_sdk/components/libraries/crypto;nRF_sdk/components/libraries/csense;nRF_sdk/components/libraries/csense_drv;nRF_sdk/components/libraries/delay;nRF_sdk/components/libraries/ecc;nRF_sdk/components/libraries/experimental_section_vars;nRF_sdk/components/libraries/experimental_task_manager;nRF_sdk/components/libraries/fds;nRF_sdk/components/libraries/fifo;nRF_sdk/components/libraries/fstorage;nRF_sdk/components/libraries/gfx;nRF_sdk/components/libraries/gpiote;nRF_sdk/components/libraries/hardfault;nRF_sdk/components/libraries/hci;nRF_sdk/components/libraries/led_softblink;nRF_sdk/components/libraries/log;nRF_sdk/components/libraries/log/src;nRF_sdk/components/libraries/low_power_pwm;nRF_sdk/components/libraries/mem_manager;nRF_sdk/components/libraries/memobj;nRF_sdk/components/libraries/mpu;nRF_sdk/components/libraries/mutex;nRF_sdk/components/libraries/pwm;nRF_sdk/components/libraries/pwr_mgmt;nRF_sdk/components/libraries/queue;nRF_sdk/components/libraries/ringbuf;nRF_sdk/components/libraries/scheduler;nRF_sdk/components/libraries/sdcard;nRF_sdk/components/libraries/slip;nRF_sdk/components/libraries/sortlist;nRF_sdk/components/libraries/spi_mngr;nRF_sdk/components/libraries/stack_guard;nRF_sdk/components/libraries/strerror;nRF_sdk/components/libraries/svc;nRF_sdk/components/libraries/timer;nRF_sdk/components/libraries/twi_mngr;nRF_sdk/components/libraries/twi_sensor;nRF_sdk/components/libraries/uart;nRF_sdk/components/libraries/usbd;nRF_sdk/components/libraries/usbd/class/audio;nRF_sdk/components/libraries/usbd/class/cdc;nRF_sdk/components/libraries/usbd/class/cdc/acm;nRF_sdk/components/libraries/usbd/class/hid;nRF_sdk/components/libraries/usbd/class/hid/generic;nRF_sdk/components/libraries/usbd/class/hid/kbd;nRF_sdk/components/libraries/usbd/class/hid/mouse;nRF_sdk/components/libraries/usbd/class/msc;nRF_sdk/components/libraries/util;nRF_sdk/components/nfc/ndef/conn_hand_parser;nRF_sdk/components/nfc/ndef/conn_hand_parser/ac_rec_parser;nRF_sdk/components/nfc/ndef/conn_hand_parser/ble_oob_advdata_parser;nRF_sdk/components/nfc/ndef/conn_hand_parser/le_oob_rec_parser;nRF_sdk/components/nfc/ndef/connection_handover/ac_rec;nRF_sdk/components/nfc/ndef/connection_handover/ble_oob_advdata;nRF_sdk/components/nfc/ndef/connection_handover/ble_pair_lib;nRF_sdk/components/nfc/ndef/connection_handover/ble_pair_msg;nRF_sdk/components/nfc/ndef/connection_handover/common;nRF_sdk/components/nfc/ndef/connection_handover/ep_oob_rec;nRF_sdk/components/nfc/ndef/connection_handover/hs_rec;nRF_sdk/components/nfc/ndef/connection_handover/le_oob_rec;nRF_sdk/components/nfc/ndef/generic/message;nRF_sdk/components/nfc/ndef/generic/record;nRF_sdk/components/nfc/ndef/launchapp;nRF_sdk/components/nfc/ndef/parser/message;nRF_sdk/components/nfc/ndef/parser/record;nRF_sdk/components/nfc/ndef/text;nRF_sdk/components/nfc/ndef/uri;nRF_sdk/components/nfc/platform;nRF_sdk/components/nfc/t2t_lib;nRF_sdk/components/nfc/t2t_parser;nRF_sdk/components/nfc/t4t_lib;nRF_sdk/components/nfc/t4t_parser/apdu;nRF_sdk/components/nfc/t4t_parser/cc_file;nRF_sdk/components/nfc/t4t_parser/hl_detection_procedure;nRF_sdk/components/nfc/t4t_parser/tlv;nRF_sdk/components/softdevice/common;nRF_sdk/components/softdevice/s140/headers;nRF_sdk/components/softdevice/s140/headers/nrf52;nRF_sdk/components/toolchain/cmsis/include;nRF_sdk/external/fprintf;nRF_sdk/external/segger_rtt;nRF_sdk/external/utf_converter;nRF_sdk/integration/nrfx;nRF_sdk/integration/nrfx/legacy;nRF_sdk/modules/nrfx;nRF_sdk/modules/nrfx/drivers/include;nRF_sdk/modules/nrfx/hal;nRF_sdk/modules/nrfx/mdk;nRF_sdk/sdk_config;"
      debug_additional_load_file="nRF_sdk/components/softdevice/s140/hex/s140_nrf52_7.0.1_softdevice.hex"
      debug_register_definition_file="nRF_sdk/modules/nrfx/mdk/nrf52840.svd"
      debug_start_from_entry_point_symbol="No"
      debug_target_connection="J-Link"
      gcc_debugging_level="Level 3"
      gcc_entry_point="Reset_Handler"
      linker_output_format="hex"
      linker_printf_fmt_level="long"
      linker_printf_width_precision_supported="Yes"
      linker_scanf_fmt_level="long"
      linker_section_placement_file="flash_placement.xml"
      linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x100000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x40000;FLASH_START=0x27000;FLASH_SIZE=0xd9000;RAM_START=0x20002ae8;RAM_SIZE=0x3d518"
      linker_section_placements_segments="FLASH RX 0x0 0x100000;RAM RWX 0x20000000 0x40000"
      macros="CMSIS_CONFIG_TOOL=nRF_sdk/external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar"
      project_directory=""
      project_type="Executable" />
    <folder Name="Application">
      <file file_name="src/main.c" />
      <file file_name="src/main.h" />
      <file file_name="nRF_sdk/sdk_config/sdk_config.h" />
      <folder Name="BLE_Driver">
        <file file_name="src/BLE_Driver/ISP1807.h" />
        <file file_name="src/BLE_Driver/ISP1807.c" />
      </folder>
      <folder Name="TWI_Driver">
        <file file_name="src/TWI_Driver/twi_driver.h" />
        <file file_name="src/TWI_Driver/twi_driver.c" />
      </folder>
    </folder>
    <folder Name="nRF_Files">
      <folder Name="BLE">
        <folder Name="nRF_BLE">
          <file file_name="nRF_sdk/components/ble/common/ble_advdata.c" />
          <file file_name="nRF_sdk/components/ble/ble_advertising/ble_advertising.c" />
          <file file_name="nRF_sdk/components/ble/common/ble_conn_params.c" />
          <file file_name="nRF_sdk/components/ble/common/ble_conn_state.c" />
          <file file_name="nRF_sdk/components/ble/ble_link_ctx_manager/ble_link_ctx_manager.c" />
          <file file_name="nRF_sdk/components/ble/common/ble_srv_common.c" />
          <file file_name="nRF_sdk/components/ble/nrf_ble_gatt/nrf_ble_gatt.c" />
          <file file_name="nRF_sdk/components/ble/nrf_ble_qwr/nrf_ble_qwr.c" />
        </folder>
        <folder Name="nRF_BLE_Services">
          <file file_name="nRF_sdk/components/ble/ble_services/ble_nus/ble_nus.c" />
        </folder>
        <folder Name="nRF_SoftDevice">
          <file file_name="nRF_sdk/components/softdevice/common/nrf_sdh.c" />
          <file file_name="nRF_sdk/components/softdevice/common/nrf_sdh_ble.c" />
          <file file_name="nRF_sdk/components/softdevice/common/nrf_sdh_soc.c" />
        </folder>
      </folder>
      <folder Name="nRF_Drivers">
        <file file_name="nRF_sdk/integration/nrfx/legacy/nrf_drv_clock.c" />
        <file file_name="nRF_sdk/integration/nrfx/legacy/nrf_drv_uart.c" />
        <file file_name="nRF_sdk/modules/nrfx/drivers/src/nrfx_clock.c" />
        <file file_name="nRF_sdk/modules/nrfx/drivers/src/nrfx_gpiote.c" />
        <file file_name="nRF_sdk/modules/nrfx/drivers/src/prs/nrfx_prs.c" />
        <file file_name="nRF_sdk/modules/nrfx/drivers/src/nrfx_uart.c" />
        <file file_name="nRF_sdk/modules/nrfx/drivers/src/nrfx_uarte.c" />
        <file file_name="nRF_sdk/modules/nrfx/soc/nrfx_atomic.c" />
      </folder>
      <folder Name="nRF_Libraries">
        <file file_name="nRF_sdk/components/libraries/button/app_button.c" />
        <file file_name="nRF_sdk/components/libraries/util/app_error.c" />
        <file file_name="nRF_sdk/components/libraries/util/app_error_handler_gcc.c" />
        <file file_name="nRF_sdk/components/libraries/util/app_error_weak.c" />
        <file file_name="nRF_sdk/components/libraries/fifo/app_fifo.c" />
        <file file_name="nRF_sdk/components/libraries/scheduler/app_scheduler.c" />
        <file file_name="nRF_sdk/components/libraries/timer/app_timer2.c" />
        <file file_name="nRF_sdk/components/libraries/uart/app_uart_fifo.c" />
        <file file_name="nRF_sdk/components/libraries/util/app_util_platform.c" />
        <file file_name="nRF_sdk/components/libraries/timer/drv_rtc.c" />
        <file file_name="nRF_sdk/components/libraries/hardfault/hardfault_implementation.c" />
        <file file_name="nRF_sdk/components/libraries/util/nrf_assert.c" />
        <file file_name="nRF_sdk/components/libraries/atomic_fifo/nrf_atfifo.c" />
        <file file_name="nRF_sdk/components/libraries/atomic_flags/nrf_atflags.c" />
        <file file_name="nRF_sdk/components/libraries/atomic/nrf_atomic.c" />
        <file file_name="nRF_sdk/components/libraries/balloc/nrf_balloc.c" />
        <file file_name="nRF_sdk/external/fprintf/nrf_fprintf.c" />
        <file file_name="nRF_sdk/external/fprintf/nrf_fprintf_format.c" />
        <file file_name="nRF_sdk/components/libraries/memobj/nrf_memobj.c" />
        <file file_name="nRF_sdk/components/libraries/pwr_mgmt/nrf_pwr_mgmt.c" />
        <file file_name="nRF_sdk/components/libraries/ringbuf/nrf_ringbuf.c" />
        <file file_name="nRF_sdk/components/libraries/experimental_section_vars/nrf_section_iter.c" />
        <file file_name="nRF_sdk/components/libraries/sortlist/nrf_sortlist.c" />
        <file file_name="nRF_sdk/components/libraries/strerror/nrf_strerror.c" />
        <file file_name="nRF_sdk/components/libraries/uart/retarget.c" />
      </folder>
      <folder Name="nRF_Log">
        <file file_name="nRF_sdk/components/libraries/log/src/nrf_log_backend_rtt.c" />
        <file file_name="nRF_sdk/components/libraries/log/src/nrf_log_backend_serial.c" />
        <file file_name="nRF_sdk/components/libraries/log/src/nrf_log_default_backends.c" />
        <file file_name="nRF_sdk/components/libraries/log/src/nrf_log_frontend.c" />
        <file file_name="nRF_sdk/components/libraries/log/src/nrf_log_str_formatter.c" />
      </folder>
      <folder Name="nRF_Segger_RTT">
        <file file_name="nRF_sdk/external/segger_rtt/SEGGER_RTT.c" />
        <file file_name="nRF_sdk/external/segger_rtt/SEGGER_RTT_Syscalls_SES.c" />
        <file file_name="nRF_sdk/external/segger_rtt/SEGGER_RTT_printf.c" />
      </folder>
      <folder Name="UTF8/UTF16 converter">
        <file file_name="nRF_sdk/external/utf_converter/utf.c" />
      </folder>
    </folder>
    <folder Name="Segger_Files">
      <folder Name="Board Definition">
        <file file_name="nRF_sdk/components/boards/boards.c" />
      </folder>
      <folder Name="Board Support">
        <file file_name="nRF_sdk/components/libraries/bsp/bsp.c" />
        <file file_name="nRF_sdk/components/libraries/bsp/bsp_btn_ble.c" />
      </folder>
      <folder Name="None">
        <file file_name="nRF_sdk/modules/nrfx/mdk/ses_startup_nrf52840.s" />
        <file file_name="nRF_sdk/modules/nrfx/mdk/ses_startup_nrf_common.s" />
        <file file_name="nRF_sdk/modules/nrfx/mdk/system_nrf52840.c" />
      </folder>
      <folder Name="Segger Startup Files">
        <file file_name="$(StudioDir)/source/thumb_crt0.s" />
      </folder>
    </folder>
    <configuration Name="Debug" linker_printf_fp_enabled="Float" />
  </project>
  <configuration
    Name="Release"
    c_preprocessor_definitions="NDEBUG"
    gcc_optimization_level="Optimize For Size" />
  <configuration
    Name="Debug"
    c_preprocessor_definitions="DEBUG; DEBUG_NRF"
    gcc_optimization_level="None" />
</solution>
<!DOCTYPE CrossStudio_Project_File>
<solution Name="ble_app_uart_pca10056_s140" target="8" version="2">
  <project Name="ble_app_uart_pca10056_s140">
    <configuration
      Name="Common"
      arm_architecture="v7EM"
      arm_core_type="Cortex-M4"
      arm_endian="Little"
      arm_fp_abi="Hard"
      arm_fpu_type="FPv4-SP-D16"
      arm_linker_heap_size="8192"
      arm_linker_process_stack_size="0"
      arm_linker_stack_size="8192"
      arm_linker_treat_warnings_as_errors="No"
      arm_simulator_memory_simulation_parameter="RWX 00000000,00100000,FFFFFFFF;RWX 20000000,00010000,CDCDCDCD"
      arm_target_device_name="nRF52840_xxAA"
      arm_target_interface_type="SWD"
      c_preprocessor_definitions="APP_TIMER_V2;APP_TIMER_V2_RTC1_ENABLED;BOARD_PCA10056;BSP_DEFINES_ONLY;CONFIG_GPIO_AS_PINRESET;FLOAT_ABI_HARD;INITIALIZE_USER_SECTIONS;NO_VTOR_CONFIG;NRF52840_XXAA;NRF_SD_BLE_API_VERSION=7;S140;SOFTDEVICE_PRESENT;"
      c_user_include_directories="nRF_sdk/components;nRF_sdk/components/ble/ble_advertising;nRF_sdk/components/ble/ble_dtm;nRF_sdk/components/ble/ble_link_ctx_manager;nRF_sdk/components/ble/ble_racp;nRF_sdk/components/ble/ble_services/ble_ancs_c;nRF_sdk/components/ble/ble_services/ble_ans_c;nRF_sdk/components/ble/ble_services/ble_bas;nRF_sdk/components/ble/ble_services/ble_bas_c;nRF_sdk/components/ble/ble_services/ble_cscs;nRF_sdk/components/ble/ble_services/ble_cts_c;nRF_sdk/components/ble/ble_services/ble_dfu;nRF_sdk/components/ble/ble_services/ble_dis;nRF_sdk/components/ble/ble_services/ble_gls;nRF_sdk/components/ble/ble_services/ble_hids;nRF_sdk/components/ble/ble_services/ble_hrs;nRF_sdk/components/ble/ble_services/ble_hrs_c;nRF_sdk/components/ble/ble_services/ble_hts;nRF_sdk/components/ble/ble_services/ble_ias;nRF_sdk/components/ble/ble_services/ble_ias_c;nRF_sdk/components/ble/ble_services/ble_lbs;nRF_sdk/components/ble/ble_services/ble_lbs_c;nRF_sdk/components/ble/ble_services/ble_lls;nRF_sdk/components/ble/ble_services/ble_nus;nRF_sdk/components/ble/ble_services/ble_nus_c;nRF_sdk/components/ble/ble_services/ble_rscs;nRF_sdk/components/ble/ble_services/ble_rscs_c;nRF_sdk/components/ble/ble_services/ble_tps;nRF_sdk/components/ble/common;nRF_sdk/components/ble/nrf_ble_gatt;nRF_sdk/components/ble/nrf_ble_qwr;nRF_sdk/components/ble/peer_manager;nRF_sdk/components/boards;nRF_sdk/components/drivers_nrf/nrf_soc_nosd;nRF_sdk/components/libraries/atomic;nRF_sdk/components/libraries/atomic_fifo;nRF_sdk/components/libraries/atomic_flags;nRF_sdk/components/libraries/balloc;nRF_sdk/components/libraries/bootloader/ble_dfu;nRF_sdk/components/libraries/bsp;nRF_sdk/components/libraries/button;nRF_sdk/components/libraries/cli;nRF_sdk/components/libraries/crc16;nRF_sdk/components/libraries/crc32;nRF_sdk/components/libraries/crypto;nRF_sdk/components/libraries/csense;nRF_sdk/components/libraries/csense_drv;nRF_sdk/components/libraries/delay;nRF_sdk/components/libraries/ecc;nRF_sdk/components/libraries/experimental_section_vars;nRF_sdk/components/libraries/experimental_task_manager;nRF_sdk/components/libraries/fds;nRF_sdk/components/libraries/fifo;nRF_sdk/components/libraries/fstorage;nRF_sdk/components/libraries/gfx;nRF_sdk/components/libraries/gpiote;nRF_sdk/components/libraries/hardfault;nRF_sdk/components/libraries/hci;nRF_sdk/components/libraries/led_softblink;nRF_sdk/components/libraries/log;nRF_sdk/components/libraries/log/src;nRF_sdk/components/libraries/low_power_pwm;nRF_sdk/components/libraries/mem_manager;nRF_sdk/components/libraries/memobj;nRF_sdk/components/libraries/mpu;nRF_sdk/components/libraries/mutex;nRF_sdk/components/libraries/pwm;nRF_sdk/components/libraries/pwr_mgmt;nRF_sdk/components/libraries/queue;nRF_sdk/components/libraries/ringbuf;nRF_sdk/components/libraries/scheduler;nRF_sdk/components/libraries/sdcard;nRF_sdk/components/libraries/slip;nRF_sdk/components/libraries/sortlist;nRF_sdk/components/libraries/spi_mngr;nRF_sdk/components/libraries/stack_guard;nRF_sdk/components/libraries/strerror;nRF_sdk/components/libraries/svc;nRF_sdk/components/libraries/timer;nRF_sdk/components/libraries/twi_mngr;nRF_sdk/components/libraries/twi_sensor;nRF_sdk/components/libraries/uart;nRF_sdk/components/libraries/usbd;nRF_sdk/components/libraries/usbd/class/audio;nRF_sdk/components/libraries/usbd/class/cdc;nRF_sdk/components/libraries/usbd/class/cdc/acm;nRF_sdk/components/libraries/usbd/class/hid;nRF_sdk/components/libraries/usbd/class/hid/generic;nRF_sdk/components/libraries/usbd/class/hid/kbd;nRF_sdk/components/libraries/usbd/class/hid/mouse;nRF_sdk/components/libraries/usbd/class/msc;nRF_sdk/components/libraries/util;nRF_sdk/components/nfc/ndef/conn_hand_parser;nRF_sdk/components/nfc/ndef/conn_hand_parser/ac_rec_parser;nRF_sdk/components/nfc/ndef/conn_hand_parser/ble_oob_advdata_parser;nRF_sdk/components/nfc/ndef/conn_hand_parser/le_oob_rec_parser;nRF_sdk/components/nfc/ndef/connection_handover/ac_rec;nRF_sdk/components/nfc/ndef/connection_handover/ble_oob_advdata;nRF_sdk/components/nfc/ndef/connection_handover/ble_pair_lib;nRF_sdk/components/nfc/ndef/connection_handover/ble_pair_msg;nRF_sdk/components/nfc/ndef/connection_handover/common;nRF_sdk/components/nfc/ndef/connection_handover/ep_oob_rec;nRF_sdk/components/nfc/ndef/connection_handover/hs_rec;nRF_sdk/components/nfc/ndef/connection_handover/le_oob_rec;nRF_sdk/components/nfc/ndef/generic/message;nRF_sdk/components/nfc/ndef/generic/record;nRF_sdk/components/nfc/ndef/launchapp;nRF_sdk/components/nfc/ndef/parser/message;nRF_sdk/components/nfc/ndef/parser/record;nRF_sdk/components/nfc/ndef/text;nRF_sdk/components/nfc/ndef/uri;nRF_sdk/components/nfc/platform;nRF_sdk/components/nfc/t2t_lib;nRF_sdk/components/nfc/t2t_parser;nRF_sdk/components/nfc/t4t_lib;nRF_sdk/components/nfc/t4t_parser/apdu;nRF_sdk/components/nfc/t4t_parser/cc_file;nRF_sdk/components/nfc/t4t_parser/hl_detection_procedure;nRF_sdk/components/nfc/t4t_parser/tlv;nRF_sdk/components/softdevice/common;nRF_sdk/components/softdevice/s140/headers;nRF_sdk/components/softdevice/s140/headers/nrf52;nRF_sdk/components/toolchain/cmsis/include;nRF_sdk/external/fprintf;nRF_sdk/external/segger_rtt;nRF_sdk/external/utf_converter;nRF_sdk/integration/nrfx;nRF_sdk/integration/nrfx/legacy;nRF_sdk/modules/nrfx;nRF_sdk/modules/nrfx/drivers/include;nRF_sdk/modules/nrfx/hal;nRF_sdk/modules/nrfx/mdk;nRF_sdk/sdk_config;"
      debug_additional_load_file="nRF_sdk/components/softdevice/s140/hex/s140_nrf52_7.0.1_softdevice.hex"
      debug_register_definition_file="nRF_sdk/modules/nrfx/mdk/nrf52840.svd"
      debug_start_from_entry_point_symbol="No"
      debug_target_connection="J-Link"
      gcc_debugging_level="Level 3"
      gcc_entry_point="Reset_Handler"
      linker_output_format="hex"
      linker_printf_fmt_level="long"
      linker_printf_width_precision_supported="Yes"
      linker_scanf_fmt_level="long"
      linker_section_placement_file="flash_placement.xml"
      linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x100000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x40000;FLASH_START=0x27000;FLASH_SIZE=0xd9000;RAM_START=0x20002ae8;RAM_SIZE=0x3d518"
      linker_section_placements_segments="FLASH RX 0x0 0x100000;RAM RWX 0x20000000 0x40000"
      macros="CMSIS_CONFIG_TOOL=nRF_sdk/external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar"
      project_directory=""
      project_type="Executable" />
    <folder Name="Application">
      <file file_name="src/main.c" />
      <file file_name="src/main.h" />
      <file file_name="nRF_sdk/sdk_config/sdk_config.h" />
      <folder Name="BLE_Driver">
        <file file_name="src/BLE_Driver/ISP1807.h" />
        <file file_name="src/BLE_Driver/ISP1807.c" />
      </folder>
      <folder Name="TWI_Driver">
        <file file_name="src/TWI_Driver/twi_driver.h" />
        <file file_name="src/TWI_Driver/twi_driver.c" />
      </folder>
    </folder>
    <folder Name="nRF_Files">
      <folder Name="BLE">
        <folder Name="nRF_BLE">
          <file file_name="nRF_sdk/components/ble/common/ble_advdata.c" />
          <file file_name="nRF_sdk/components/ble/ble_advertising/ble_advertising.c" />
          <file file_name="nRF_sdk/components/ble/common/ble_conn_params.c" />
          <file file_name="nRF_sdk/components/ble/common/ble_conn_state.c" />
          <file file_name="nRF_sdk/components/ble/ble_link_ctx_manager/ble_link_ctx_manager.c" />
          <file file_name="nRF_sdk/components/ble/common/ble_srv_common.c" />
          <file file_name="nRF_sdk/components/ble/nrf_ble_gatt/nrf_ble_gatt.c" />
          <file file_name="nRF_sdk/components/ble/nrf_ble_qwr/nrf_ble_qwr.c" />
        </folder>
        <folder Name="nRF_BLE_Services">
          <file file_name="nRF_sdk/components/ble/ble_services/ble_nus/ble_nus.c" />
        </folder>
        <folder Name="nRF_SoftDevice">
          <file file_name="nRF_sdk/components/softdevice/common/nrf_sdh.c" />
          <file file_name="nRF_sdk/components/softdevice/common/nrf_sdh_ble.c" />
          <file file_name="nRF_sdk/components/softdevice/common/nrf_sdh_soc.c" />
        </folder>
      </folder>
      <folder Name="nRF_Drivers">
        <file file_name="nRF_sdk/integration/nrfx/legacy/nrf_drv_clock.c" />
        <file file_name="nRF_sdk/integration/nrfx/legacy/nrf_drv_uart.c" />
        <file file_name="nRF_sdk/modules/nrfx/drivers/src/nrfx_clock.c" />
        <file file_name="nRF_sdk/modules/nrfx/drivers/src/nrfx_gpiote.c" />
        <file file_name="nRF_sdk/modules/nrfx/drivers/src/prs/nrfx_prs.c" />
        <file file_name="nRF_sdk/modules/nrfx/drivers/src/nrfx_uart.c" />
        <file file_name="nRF_sdk/modules/nrfx/drivers/src/nrfx_uarte.c" />
        <file file_name="nRF_sdk/modules/nrfx/soc/nrfx_atomic.c" />
      </folder>
      <folder Name="nRF_Libraries">
        <file file_name="nRF_sdk/components/libraries/button/app_button.c" />
        <file file_name="nRF_sdk/components/libraries/util/app_error.c" />
        <file file_name="nRF_sdk/components/libraries/util/app_error_handler_gcc.c" />
        <file file_name="nRF_sdk/components/libraries/util/app_error_weak.c" />
        <file file_name="nRF_sdk/components/libraries/fifo/app_fifo.c" />
        <file file_name="nRF_sdk/components/libraries/scheduler/app_scheduler.c" />
        <file file_name="nRF_sdk/components/libraries/timer/app_timer2.c" />
        <file file_name="nRF_sdk/components/libraries/uart/app_uart_fifo.c" />
        <file file_name="nRF_sdk/components/libraries/util/app_util_platform.c" />
        <file file_name="nRF_sdk/components/libraries/timer/drv_rtc.c" />
        <file file_name="nRF_sdk/components/libraries/hardfault/hardfault_implementation.c" />
        <file file_name="nRF_sdk/components/libraries/util/nrf_assert.c" />
        <file file_name="nRF_sdk/components/libraries/atomic_fifo/nrf_atfifo.c" />
        <file file_name="nRF_sdk/components/libraries/atomic_flags/nrf_atflags.c" />
        <file file_name="nRF_sdk/components/libraries/atomic/nrf_atomic.c" />
        <file file_name="nRF_sdk/components/libraries/balloc/nrf_balloc.c" />
        <file file_name="nRF_sdk/external/fprintf/nrf_fprintf.c" />
        <file file_name="nRF_sdk/external/fprintf/nrf_fprintf_format.c" />
        <file file_name="nRF_sdk/components/libraries/memobj/nrf_memobj.c" />
        <file file_name="nRF_sdk/components/libraries/pwr_mgmt/nrf_pwr_mgmt.c" />
        <file file_name="nRF_sdk/components/libraries/ringbuf/nrf_ringbuf.c" />
        <file file_name="nRF_sdk/components/libraries/experimental_section_vars/nrf_section_iter.c" />
        <file file_name="nRF_sdk/components/libraries/sortlist/nrf_sortlist.c" />
        <file file_name="nRF_sdk/components/libraries/strerror/nrf_strerror.c" />
        <file file_name="nRF_sdk/components/libraries/uart/retarget.c" />
      </folder>
      <folder Name="nRF_Log">
        <file file_name="nRF_sdk/components/libraries/log/src/nrf_log_backend_rtt.c" />
        <file file_name="nRF_sdk/components/libraries/log/src/nrf_log_backend_serial.c" />
        <file file_name="nRF_sdk/components/libraries/log/src/nrf_log_default_backends.c" />
        <file file_name="nRF_sdk/components/libraries/log/src/nrf_log_frontend.c" />
        <file file_name="nRF_sdk/components/libraries/log/src/nrf_log_str_formatter.c" />
      </folder>
      <folder Name="nRF_Segger_RTT">
        <file file_name="nRF_sdk/external/segger_rtt/SEGGER_RTT.c" />
        <file file_name="nRF_sdk/external/segger_rtt/SEGGER_RTT_Syscalls_SES.c" />
        <file file_name="nRF_sdk/external/segger_rtt/SEGGER_RTT_printf.c" />
      </folder>
      <folder Name="UTF8/UTF16 converter">
        <file file_name="nRF_sdk/external/utf_converter/utf.c" />
      </folder>
    </folder>
    <folder Name="Segger_Files">
      <folder Name="Board Definition">
        <file file_name="nRF_sdk/components/boards/boards.c" />
      </folder>
      <folder Name="Board Support">
        <file file_name="nRF_sdk/components/libraries/bsp/bsp.c" />
        <file file_name="nRF_sdk/components/libraries/bsp/bsp_btn_ble.c" />
      </folder>
      <folder Name="None">
        <file file_name="nRF_sdk/modules/nrfx/mdk/ses_startup_nrf52840.s" />
        <file file_name="nRF_sdk/modules/nrfx/mdk/ses_startup_nrf_common.s" />
        <file file_name="nRF_sdk/modules/nrfx/mdk/system_nrf52840.c" />
      </folder>
      <folder Name="Segger Startup Files">
        <file file_name="$(StudioDir)/source/thumb_crt0.s" />
      </folder>
    </folder>
    <configuration Name="Debug" linker_printf_fp_enabled="Float" />
  </project>
  <configuration
    Name="Release"
    c_preprocessor_definitions="NDEBUG"
    gcc_optimization_level="Optimize For Size" />
  <configuration
    Name="Debug"
    c_preprocessor_definitions="DEBUG; DEBUG_NRF"
    gcc_optimization_level="None" />
</solution>

Parents
  • Hi,

    I'm not sure how you managed to get the error "'NRF_SUCCESS' undeclared", as this is declared in nrf_error.h, which is included by sdk_error.h through app_error.h. This header seems to be included in your main.h file. Was this error reported by main.c?

    If you could upload your full project, it would be much easier to help you fix the compile and run-time errors.

    Best regards,
    Jørgen

Reply
  • Hi,

    I'm not sure how you managed to get the error "'NRF_SUCCESS' undeclared", as this is declared in nrf_error.h, which is included by sdk_error.h through app_error.h. This header seems to be included in your main.h file. Was this error reported by main.c?

    If you could upload your full project, it would be much easier to help you fix the compile and run-time errors.

    Best regards,
    Jørgen

Children
No Data
Related