### CMake Project Setup and Build Configuration Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/accelerometer_notif/CMakeLists.txt This snippet initializes the CMake project, sets the project name and languages, and defines boolean flags to control which device variants and peripheral examples are built. It also prints configuration variables for debugging. ```cmake cmake_minimum_required(VERSION 3.16) project(${DEVICE_NAME} LANGUAGES C CXX ASM) #Full SDK builds set(BUILD_FOR_531 TRUE) set(BUILD_FOR_585 TRUE) set(BUILD_FOR_586 TRUE) #Peripheral example builds set(BUILD_FOR_531_PERIPHERAL_EXAMPLE FALSE) set(BUILD_FOR_585_PERIPHERAL_EXAMPLE FALSE) set(BUILD_FOR_586_PERIPHERAL_EXAMPLE FALSE) message("DEVICE_NAME = ${DEVICE_NAME}") message("DIALOG_SDK_PATH = ${DIALOG_SDK_PATH}") message("DIALOG_EXAMPLE_PATH = ${DIALOG_EXAMPLE_PATH}") message("GCC_TOOLCHAIN_PATH = ${GCC_TOOLCHAIN_PATH}") set(CMAKE_VERBOSE_MAKEFILE OFF) include_directories(src/user_app src/user_drivers) include (${DIALOG_EXAMPLE_PATH}/build_utils/gcc/example_build.cmake) ``` -------------------------------- ### Clone BLE SDK6 Examples Repository Source: https://github.com/renesas/ble-sdk6-examples/blob/main/Readme.md This command clones the BLE_SDK6_examples repository from GitHub into the projects directory. Ensure you have Git installed and are in the desired parent directory before execution. No specific input or output files are generated beyond cloning the repository. ```bash cd projects git clone https://github.com/dialog-semiconductor/BLE_SDK6_examples.git ``` -------------------------------- ### CMake Project Setup for Renesas BLE SDK6 Examples Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/RTC_Example/CMakeLists.txt This snippet sets up the CMake project, defines the project name and languages, and configures build options for different Renesas device targets (e.g., 531, 585, 586). It also allows enabling/disabling peripheral example builds. ```cmake cmake_minimum_required(VERSION 3.16) project(${DEVICE_NAME} LANGUAGES C CXX ASM) #Full SDK builds set(BUILD_FOR_531 TRUE) set(BUILD_FOR_585 TRUE) set(BUILD_FOR_586 TRUE) #Peripheral example builds set(BUILD_FOR_531_PERIPHERAL_EXAMPLE FALSE) set(BUILD_FOR_585_PERIPHERAL_EXAMPLE FALSE) set(BUILD_FOR_586_PERIPHERAL_EXAMPLE FALSE) message("DEVICE_NAME = ${DEVICE_NAME}") message("DIALOG_SDK_PATH = ${DIALOG_SDK_PATH}") message("DIALOG_EXAMPLE_PATH = ${DIALOG_EXAMPLE_PATH}") message("GCC_TOOLCHAIN_PATH = ${GCC_TOOLCHAIN_PATH}") set(CMAKE_VERBOSE_MAKEFILE OFF) include (${DIALOG_EXAMPLE_PATH}/build_utils/gcc/example_build.cmake) ``` -------------------------------- ### CMake Project Setup and Build Configuration Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/ble_pressure_sensor_bmp388/CMakeLists.txt Initializes the CMake project, sets the project name and languages, and defines build flags for different device variants and peripheral examples. It also prints debugging information about paths and toolchains. This configuration is essential for cross-compiling the BLE SDK examples. ```cmake cmake_minimum_required(VERSION 3.16) project(${DEVICE_NAME} LANGUAGES C CXX ASM) #Full SDK builds set(BUILD_FOR_531 TRUE) set(BUILD_FOR_585 TRUE) set(BUILD_FOR_586 TRUE) #Peripheral example builds set(BUILD_FOR_531_PERIPHERAL_EXAMPLE FALSE) set(BUILD_FOR_585_PERIPHERAL_EXAMPLE FALSE) set(BUILD_FOR_586_PERIPHERAL_EXAMPLE FALSE) message("DEVICE_NAME = ${DEVICE_NAME}") message("DIALOG_SDK_PATH = ${DIALOG_SDK_PATH}") message("DIALOG_EXAMPLE_PATH = ${DIALOG_EXAMPLE_PATH}") message("GCC_TOOLCHAIN_PATH = ${GCC_TOOLCHAIN_PATH}") set(CMAKE_VERBOSE_MAKEFILE OFF) include (${DIALOG_EXAMPLE_PATH}/build_utils/gcc/example_build.cmake) include_directories(src/user_app src/user_drivers) ``` -------------------------------- ### CMake Project Setup and Build Configuration Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/Accelerometer(mCube)+ble/CMakeLists.txt Configures the CMake project for Renesas BLE SDK examples. It sets the minimum required CMake version, project name, languages, and defines build flags for different device variants and peripheral examples. It also prints out important SDK paths and toolchain information. ```cmake cmake_minimum_required(VERSION 3.16) project(${DEVICE_NAME} LANGUAGES C CXX ASM) #Full SDK builds set(BUILD_FOR_531 TRUE) set(BUILD_FOR_585 TRUE) set(BUILD_FOR_586 TRUE) #Peripheral example builds set(BUILD_FOR_531_PERIPHERAL_EXAMPLE FALSE) set(BUILD_FOR_585_PERIPHERAL_EXAMPLE FALSE) set(BUILD_FOR_586_PERIPHERAL_EXAMPLE FALSE) message("DEVICE_NAME = ${DEVICE_NAME}") message("DIALOG_SDK_PATH = ${DIALOG_SDK_PATH}") message("DIALOG_EXAMPLE_PATH = ${DIALOG_EXAMPLE_PATH}") message("GCC_TOOLCHAIN_PATH = ${GCC_TOOLCHAIN_PATH}") set(CMAKE_VERBOSE_MAKEFILE OFF) include_directories( src/user_app src/user_drivers/platform/console src/user_drivers/platform/bus src/user_drivers/sensor/accel/mc36xx src/user_drivers/sensor/accel ) include (${DIALOG_EXAMPLE_PATH}/build_utils/gcc/example_build.cmake) ``` -------------------------------- ### Running Keil Example with Specific Parameters Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/Advertising(methods_wakeup_sleep)/Readme.md This snippet details the steps to run a BLE SDK example using Keil uVision. It involves opening a specific project file, selecting the target device, configuring a serial terminal with specific communication parameters, compiling the project, and launching the example. ```plaintext - baud rate: 115200 - data: 8 bits - stop: 1 bit - parity: None - flow control: none ``` -------------------------------- ### Configure BLE Example Options in C Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/switching_roles/Readme.md This snippet demonstrates how to configure various options for a BLE example using preprocessor directives in C. It allows customization of LED behavior, timing parameters for role transitions, and LED pulse configurations. These settings are typically defined in a header file like `user_routine_config.h`. ```c #define CFG_ENALBE_LED #define ROUTINE_CYCLE_TIME_MS 1000 #define ROUTINE_PAUSE_TIME_MS 5000 #define LED_NONCONN_PULSES 3 #define LED_NONCONN_TIME_MS 100 #define LED_CONN_PULSES 5 #define LED_CONN_TIME_MS 150 #define LED_SCAN_PULSES 2 #define LED_SCAN_TIME_MS 120 #define LED_RECEIVED_TIME_MS 200 ``` -------------------------------- ### CMake Project Configuration for Renesas BLE SDK6 Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/ble_indication_hs3001/CMakeLists.txt This snippet configures the CMake project for the Renesas BLE SDK6 examples. It sets the minimum required CMake version, project name, and languages. It also defines build flags for different SDK versions and peripheral examples, and includes a utility script for example builds. Essential environment variables are printed to the console for debugging. ```cmake cmake_minimum_required(VERSION 3.16) project(${DEVICE_NAME} LANGUAGES C CXX ASM) #Full SDK builds set(BUILD_FOR_531 TRUE) set(BUILD_FOR_585 FALSE) set(BUILD_FOR_586 FALSE) #Peripheral example builds set(BUILD_FOR_531_PERIPHERAL_EXAMPLE FALSE) set(BUILD_FOR_585_PERIPHERAL_EXAMPLE FALSE) set(BUILD_FOR_586_PERIPHERAL_EXAMPLE FALSE) message("DEVICE_NAME = ${DEVICE_NAME}") message("DIALOG_SDK_PATH = ${DIALOG_SDK_PATH}") message("DIALOG_EXAMPLE_PATH = ${DIALOG_EXAMPLE_PATH}") message("GCC_TOOLCHAIN_PATH = ${GCC_TOOLCHAIN_PATH}") set(CMAKE_VERBOSE_MAKEFILE OFF) include (${DIALOG_EXAMPLE_PATH}/build_utils/gcc/example_build.cmake) ``` -------------------------------- ### Compile and Run DA1453x BLE Example Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/RTC_Example/Readme.md Instructions for compiling, downloading, and running the BLE example on a DA1453x device using Keil MDK. This involves opening the project, building it, and then using a BLE scanner app to observe real-time clock data in the advertising string. ```text Open the project via Keil µVision 5 Compile download and run the project Open a `BLE scanner` App and search for **REAL_TIME_CLOCK** When scanning you should be able to see the Date and the Time on the advertising string in the following format **yyyy mm dd hh min sec** Connect to the device After the discovery is finished then you should be able to see the exposed services and characteristics. ``` -------------------------------- ### Application Database Initialization Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/central_Security_Demo/src/mapfile.txt Functions responsible for the initialization of the application's database and starting the database initialization process. These are essential for setting up the necessary data structures for the BLE application. ```c app_db_init_start app_db_init ``` -------------------------------- ### CMake Build Configuration for Renesas BLE SDK Examples Source: https://github.com/renesas/ble-sdk6-examples/blob/main/interfaces/simple_button/CMakeLists.txt Configures the CMake build for the Renesas BLE SDK examples. It defines build targets for different device families and peripheral examples, sets project properties, and includes external build utility scripts. ```cmake cmake_minimum_required(VERSION 3.16) project(${DEVICE_NAME} LANGUAGES C CXX ASM) #Full SDK builds set(BUILD_FOR_531 FALSE) set(BUILD_FOR_585 FALSE) set(BUILD_FOR_586 FALSE) #Peripheral example builds set(BUILD_FOR_531_PERIPHERAL_EXAMPLE TRUE) set(BUILD_FOR_585_PERIPHERAL_EXAMPLE TRUE) set(BUILD_FOR_586_PERIPHERAL_EXAMPLE TRUE) message("DEVICE_NAME = ${DEVICE_NAME}") message("DIALOG_SDK_PATH = ${DIALOG_SDK_PATH}") message("DIALOG_EXAMPLE_PATH = ${DIALOG_EXAMPLE_PATH}") message("GCC_TOOLCHAIN_PATH = ${GCC_TOOLCHAIN_PATH}") set(CMAKE_VERBOSE_MAKEFILE OFF) include (${DIALOG_EXAMPLE_PATH}/build_utils/gcc/example_build.cmake) ``` -------------------------------- ### Include Segger RTT and Example Build Utilities Source: https://github.com/renesas/ble-sdk6-examples/blob/main/interfaces/segger_rtt/CMakeLists.txt This CMake code snippet dynamically finds C source files for Segger RTT and adds them to the build. It also includes the necessary directory for RTT headers and incorporates a common example build script from the SDK's build utilities. ```cmake FILE(GLOB_RECURSE rtt segger_rtt/RTT/*.c) LIST(APPEND userSourceFiles ${rtt} ) include_directories(segger_rtt/RTT) include (${DIALOG_EXAMPLE_PATH}/build_utils/gcc/example_build.cmake) ``` -------------------------------- ### Start Non-Connectable Advertising Peripheral (C) Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/simple_beacon/Readme.md Initiates non-connectable advertising for a Bluetooth Low Energy peripheral. This function is used to start the advertising process with user-defined parameters. It requires prior configuration of advertising parameters and data. ```c #include "app_api.h" // ... other code ... void app_easy_gap_non_connectable_advertise_start() { // Implementation to start non-connectable advertising // This function would typically call underlying SDK functions to configure and start the advertising process. // Example: rwble_adv_start(..., GAP_NON_CONNECTABLE_ADV_MODE, ...); } ``` -------------------------------- ### Set Recursive Minute Alarm Command Example Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/RTC_Example/Readme.md Shows the command format for configuring a recursive alarm that triggers every minute. The example specifies the second at which the alarm should activate. ```text Setting a recursive alarm every minute on xx:xx:01:00, the command is 0x00 00 FF FF 01 00 00 01 ``` -------------------------------- ### Configuring Optional Software Parameters in _user_barebone.h Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/Advertising(methods_wakeup_sleep)/Readme.md This section outlines optional parameters that can be configured within the `_user_barebone.h` file for timer-based advertising examples. These parameters control advertising intervals, durations, and sleep periods, allowing for fine-tuning of the BLE device's behavior. ```c // Set UNDIRECT_ADV_INTERVAL to the desired value in milliseconds to configure the undirected advertising interval. // Set NONCONN_ADV_INTERVAL to the desired value in milliseconds to configure the non-connectible advertising interval. // Set UNDIRECT_ADV_DURATION to the desired value multiplied by 10 milliseconds to determine the duration of the undirected advertising in the timer based example. // Set NONCONN_ADV_DURATION to the desired value multiplied by 10 milliseconds to determine the duration of the non-connectible advertising in the timer based example. // Set SLEEP_DURATION to the desired value multiplied by 10 milliseconds to determine the sleep duration in the timer based example. ``` -------------------------------- ### Set One-Shot Alarm Command Example Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/RTC_Example/Readme.md Demonstrates how to set a one-shot alarm using a custom characteristic. The example shows the byte sequence required to set an alarm for a specific date and time. ```text Setting a one shot alarm on 17/06/2021 00:19:57:00, the command is 0x06 11 00 13 39 00 00 00 ``` -------------------------------- ### CMake Include Directories and Build Utilities Source: https://github.com/renesas/ble-sdk6-examples/blob/main/interfaces/MCube-Accel-MC36xx/CMakeLists.txt Specifies the include paths for source files and user-defined drivers, and includes the example build CMake script from the dialog SDK. This ensures all necessary modules and build logic are accessible. ```cmake include_directories( src/user_app src/user_drivers/platform/console src/user_drivers/platform/bus src/user_drivers/sensor/accel/mc36xx src/user_drivers/sensor/accel ) include (${DIALOG_EXAMPLE_PATH}/build_utils/gcc/example_build.cmake) ``` -------------------------------- ### CMake Project Configuration and Build Flags Source: https://github.com/renesas/ble-sdk6-examples/blob/main/interfaces/MCube-Accel-MC36xx/CMakeLists.txt Configures the CMake project, sets the minimum required version, defines the project name, and specifies build flags for different device targets and peripheral examples. It also prints environment variables for debugging. ```cmake cmake_minimum_required(VERSION 3.16) project(${DEVICE_NAME} LANGUAGES C CXX ASM) #Full SDK builds set(BUILD_FOR_531 TRUE) set(BUILD_FOR_585 TRUE) set(BUILD_FOR_586 TRUE) #Peripheral example builds set(BUILD_FOR_531_PERIPHERAL_EXAMPLE FALSE) set(BUILD_FOR_585_PERIPHERAL_EXAMPLE FALSE) set(BUILD_FOR_586_PERIPHERAL_EXAMPLE FALSE) message("DEVICE_NAME = ${DEVICE_NAME}") message("DIALOG_SDK_PATH = ${DIALOG_SDK_PATH}") message("DIALOG_EXAMPLE_PATH = ${DIALOG_EXAMPLE_PATH}") message("GCC_TOOLCHAIN_PATH = ${GCC_TOOLCHAIN_PATH}") set(CMAKE_VERBOSE_MAKEFILE OFF) ``` -------------------------------- ### CMake Include Directories and Build Utilities Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/Quuppa_DialogTag/CMakeLists.txt Specifies the directories to include for project modules and application files, and includes the example build script from the SDK. This ensures that the build system can find the necessary source files and leverage pre-defined build logic. ```cmake include_directories( src/modules_lib/port src/modules_lib/app/wkup_keys src/user_drivers/bmi270 ) include (${DIALOG_EXAMPLE_PATH}/build_utils/gcc/example_build.cmake) ``` -------------------------------- ### CMake Include Directories and Build Utilities Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/ble_weight_scale_nau7802/CMakeLists.txt This snippet includes external CMake build utility scripts from the Dialog Semiconductor SDK path, specifically for GCC examples. It also defines the include directories for user application and driver source files. ```cmake include (${DIALOG_EXAMPLE_PATH}/build_utils/gcc/example_build.cmake) include_directories(src/user_app src/user_drivers) ``` -------------------------------- ### Enable UART Mechanism via CFG_PRINTF Macro Source: https://github.com/renesas/ble-sdk6-examples/blob/main/features/DA1453x_Timer1_SW_Example/Readme.md Defines the CFG_PRINTF macro in da1458x_config_basic.h to enable the UART mechanism for debugging and printing messages. This requires a terminal emulator setup. ```c #define CFG_PRINTF ``` -------------------------------- ### Configure BLE SDK Build Settings (CMake) Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/BLE2IR/CMakeLists.txt This CMake script configures the build settings for the Renesas BLE SDK6 examples. It allows developers to select specific devices and peripheral examples to be compiled by setting boolean variables. It also prints diagnostic messages about the build environment and includes necessary build utility scripts. ```cmake cmake_minimum_required(VERSION 3.16) project(${DEVICE_NAME} LANGUAGES C CXX ASM) #Full SDK builds set(BUILD_FOR_531 FALSE) set(BUILD_FOR_585 TRUE) set(BUILD_FOR_586 TRUE) #Peripheral example builds set(BUILD_FOR_531_PERIPHERAL_EXAMPLE FALSE) set(BUILD_FOR_585_PERIPHERAL_EXAMPLE FALSE) set(BUILD_FOR_586_PERIPHERAL_EXAMPLE FALSE) message("DEVICE_NAME = ${DEVICE_NAME}") message("DIALOG_SDK_PATH = ${DIALOG_SDK_PATH}") message("DIALOG_EXAMPLE_PATH = ${DIALOG_EXAMPLE_PATH}") message("GCC_TOOLCHAIN_PATH = ${GCC_TOOLCHAIN_PATH}") set(CMAKE_VERBOSE_MAKEFILE OFF) include (${DIALOG_EXAMPLE_PATH}/build_utils/gcc/example_build.cmake) include_directories(src/keyboard_module src/keyboard_module/port) ``` -------------------------------- ### Enable Internal Temperature Sensor (C) Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/ble_temperature_ntf/Readme.md This snippet demonstrates how to enable the internal temperature sensor within the DA1458x configuration. It involves uncommenting a specific preprocessor definition in the basic configuration header file. This allows the system to read temperature data directly from the SoC's internal sensor, simplifying hardware setup. ```c // Uncomment the following line to use the internal temperature sensor // #define CFG_USE_INTERNAL_TEMP_SENSOR ``` -------------------------------- ### CMake Project Configuration and Build Flags Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/Quuppa_DialogTag/CMakeLists.txt Sets up the CMake project, defines build targets for different devices (e.g., DA16200 MOD) and peripheral examples, and configures build verbosity. It allows conditional compilation based on selected build options. ```cmake cmake_minimum_required(VERSION 3.16) project(${DEVICE_NAME} LANGUAGES C CXX ASM) #Full SDK builds set(BUILD_FOR_531 TRUE) set(BUILD_FOR_585 FALSE) set(BUILD_FOR_586 FALSE) #Peripheral example builds set(BUILD_FOR_531_PERIPHERAL_EXAMPLE FALSE) set(BUILD_FOR_585_PERIPHERAL_EXAMPLE FALSE) set(BUILD_FOR_586_PERIPHERAL_EXAMPLE FALSE) message("DEVICE_NAME = ${DEVICE_NAME}") message("DIALOG_SDK_PATH = ${DIALOG_SDK_PATH}") message("DIALOG_EXAMPLE_PATH = ${DIALOG_EXAMPLE_PATH}") message("GCC_TOOLCHAIN_PATH = ${GCC_TOOLCHAIN_PATH}") set(CMAKE_VERBOSE_MAKEFILE OFF) ``` -------------------------------- ### Initialize WLAN Coexistence and Add Priority Rules (C) Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/coexistance_demo/Readme.md Initializes the WLAN coexistence functionality by calling 'wlan_coex_init()' and adds priority rules using 'wlan_coex_prio_criteria_add()'. This example sets a priority for BLE advertising packets over 2.4GHz signals. ```c #if (WLAN_COEX_ENABLED) wlan_coex_init(); // Adds priority case for a specific connection wlan_coex_prio_criteria_add(WLAN_COEX_BLE_PRIO_ADV, LLD_ADV_HDL, 0); #endif ``` -------------------------------- ### Set Recursive Daily Alarm Command Example Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/RTC_Example/Readme.md Illustrates the command format for setting a recursive daily alarm. This allows the alarm to trigger every day at a specified time. ```text Setting a recursive alarm every day on 00:08:00:00, the command is 0x00 00 00 08 00 00 00 01 ``` -------------------------------- ### Get Non-Connectable Advertising Message (C) Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/simple_beacon/Readme.md Retrieves the current non-connectable advertising message with filled parameters. This function is used to access the advertising data structure before starting the advertising process, allowing for potential modifications or verification. It is part of the GAP API for BLE communication. ```c #include "app_api.h" // ... other code ... void app_easy_gap_non_connectable_advertise_get_active() { // Implementation to get the active non-connectable advertising message // This function would return a structure or pointer to the advertising data buffer. // Example: struct gapm_adv_data_complete_ &adv_data = rwble_get_adv_data(); } ``` -------------------------------- ### Initialize and Cancel Connection Timeout Timer Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/BLE2IR/Readme.md API functions to manage a timer-based connection timeout. user_con_timeout_init starts a timer to terminate a connection after a specified delay, overriding existing timers. user_con_timeout_cancel stops a running timer. ```c user_con_timeout_init(uint32_t delay, uint8_t connection_id); user_con_timeout_cancel(); ``` -------------------------------- ### Application GAP Operations Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/central_Security_Demo/src/mapfile.txt Functions for managing Generic Access Profile (GAP) operations in the BLE application, including starting and stopping advertising, disconnecting, confirming connections, and configuring devices. These control the fundamental connection and advertising aspects of the BLE device. ```c app_easy_gap_advertise_stop app_init app_easy_gap_disconnect app_easy_gap_confirm app_easy_gap_start_connection_to_set app_easy_gap_start_connection_to app_easy_gap_dev_configure ``` -------------------------------- ### Set Recursive Hourly Alarm Command Example Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/RTC_Example/Readme.md Provides the command structure for setting a recursive hourly alarm. This alarm will trigger every hour at a specified minute and second. ```text Setting a recursive alarm every hour on xx:08:00:00, the command is 0x00 00 FF 08 00 00 00 01 ``` -------------------------------- ### Define WLAN Coexistence Configuration Struct (C) Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/coexistance_demo/Readme.md Defines the global configuration structure for WLAN coexistence. This structure holds all the GPIO pin and IRQ definitions required for the coexistence module to function. ```c #if (WLAN_COEX_ENABLED) // Configuration struct for WLAN coexistence const wlan_coex_cfg_t wlan_coex_cfg = { .ext_24g_eip_port = WLAN_COEX_24G_EIP_PORT, .ext_24g_eip_pin = WLAN_COEX_24G_EIP_PIN, .ble_eip_port = WLAN_COEX_BLE_EIP_PORT, .ble_eip_pin = WLAN_COEX_BLE_EIP_PIN, .ble_prio_port = WLAN_COEX_BLE_PRIO_PORT, .ble_prio_pin = WLAN_COEX_BLE_PRIO_PIN, #if defined (CFG_WLAN_COEX_DEBUG) .debug_a_port = WLAN_COEX_DEBUG_A_PORT, .debug_a_pin = WLAN_COEX_DEBUG_A_PIN, .debug_b_port = WLAN_COEX_DEBUG_B_PORT, .debug_b_pin = WLAN_COEX_DEBUG_B_PIN, #endif .irq = WLAN_COEX_IRQ, }; #endif ``` -------------------------------- ### Include WLAN Coexistence and LLD Headers for Application (C) Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/coexistance_demo/Readme.md Includes 'wlan_coex.h' and 'lld.h' in the user application file. This allows the application to access the WLAN coexistence APIs and low-level driver functionalities. ```c #if (WLAN_COEX_ENABLED) #include "wlan_coex.h" #include "lld.h" #endif ``` -------------------------------- ### Set One-Shot Alarm for Next Minute Change Command Example Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/RTC_Example/Readme.md Details the command to set a one-shot alarm that triggers upon the next minute change. This is useful for time-sensitive operations. ```text Setting a one shot alarm on the next minute change, the command is 0x00 00 FF FF 00 00 00 00 ``` -------------------------------- ### Configure Sleep Mode in C Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/switching_roles/Readme.md This configuration example sets the application's default sleep mode to external sleep. This is crucial for power management and preventing watchdog timer errors when the DA14531 is idle. The setting `ARCH_EXT_SLEEP_ON` is defined within `user_config.h`. ```c #define app_default_sleep_mode ARCH_EXT_SLEEP_ON ``` -------------------------------- ### Remote Mode: Trigger Continuous TX via BLE Source: https://github.com/renesas/ble-sdk6-examples/blob/main/features/standalone_prod_test/Readme.md In Remote Mode, devices can be instructed to start continuous transmission on a specific channel by sending a command via the Control Point characteristic. This functionality is accessible through BLE, allowing control via smartphone applications. Notifications can be enabled on the Command Response characteristic for feedback. ```plaintext 0xFE0F00 ``` -------------------------------- ### Configure Advertising Interval (C) Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/ibeacon_Optim/Readme.md Sets the advertising interval for the iBeacon in milliseconds. This is a fundamental configuration parameter for advertising frequency. ```C #define ADV_INTERVAL_MS ``` -------------------------------- ### BLE SDK6: Global Symbol Definitions (Various Types) Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/central_Security_Demo/src/mapfile.txt This snippet lists various global symbols found in the Renesas BLE SDK6 examples, including absolute values, weak references, and data types. It covers build attributes, compiler-specific symbols, and undefined references. ```Assembly BuildAttributes$$THM_ISAv3M$S$PE$A:L22$X:L11$S22$IEEE1$IW$USESV6$~STKCKD$USESV7$~SHL$OSPACE$EBA8$MICROLIB$REQ8$PRES8$EABIv2 0x00000000 Number 0 anon$$obj.o ABSOLUTE __ARM_use_no_argv 0x00000000 Number 0 arch_main.o ABSOLUTE __cpp_initialize__aeabi_ - Undefined Weak Reference __cxa_finalize - Undefined Weak Reference __decompress - Undefined Weak Reference _clock_init - Undefined Weak Reference _microlib_exit - Undefined Weak Reference reset_indication - Undefined Weak Reference __Vectors_Size 0x000000a0 Number 0 startup_da14585_586.o ABSOLUTE heap_mem_area_not_ret$$Length 0x0000080c Number 0 anon$$obj.o ABSOLUTE Image$$ER_IROM3$$Length 0x000065b8 Number 0 anon$$obj.o ABSOLUTE ``` -------------------------------- ### Application Entry Point and Event Processing Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/central_Security_Demo/src/mapfile.txt Functions that define the application's entry point and handle standard event processing. These are fundamental for the application's lifecycle and its interaction with the BLE events. ```c app_entry_point_handler app_std_process_event ``` -------------------------------- ### Include WLAN Coexistence Header (C) Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/coexistance_demo/Readme.md Includes the 'wlan_coex.h' header file in the project's include section. This is necessary to use the WLAN coexistence features and APIs, and is conditionally compiled if WLAN coexistence is enabled. ```c #if (WLAN_COEX_ENABLED) #include "wlan_coex.h" #endif ``` -------------------------------- ### Configure Callback for user_app_on_init in C Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/hibernation_and_stateaware_hibernation/Readme.md This C code snippet shows how to configure a callback function pointer in a configuration structure. It replaces a default initialization function with `user_app_on_init`, ensuring custom logic is executed during application startup. ```c .app_on_init = user_app_on_init, ``` -------------------------------- ### Master Board UART Output Example (Text) Source: https://github.com/renesas/ble-sdk6-examples/blob/main/interfaces/I2C-Master-Slave/Readme.md This is the expected output on the UART terminal for the I2C Master board when the example is running successfully. It shows the data sent by the master and the data received from the slave. ```text --------------- I2C Master Demo --------------- This is what the master sent to the slave 60 86 FC 07 51 01 FC 07 59 01 FC 07 71 01 FC 07 This is what the master received from the slave 0F 0A 8C 3A 6E 6D D6 CB B3 16 3B 7F 2B 0C 47 36 ``` -------------------------------- ### Timer0 Default PWM Configurations Source: https://github.com/renesas/ble-sdk6-examples/blob/main/features/DA1453x_Timer1_SW_Example/Readme.md Defines default PWM configurations for Timer0, including TIMER_ON, PWM_HIGH, and PWM_LOW. These values can be adjusted based on specific application requirements for frequency generation. ```c #define TIMER_ON 1000 #define PWM_HIGH 500 #define PWM_LOW 500 ``` -------------------------------- ### Configure UART and CRC for DA14531 Booting (C) Source: https://github.com/renesas/ble-sdk6-examples/blob/main/interfaces/external-processor-stm32/Readme.md This code configures the DA14531 booting process using either one-wire or two-wire UART. It also includes CRC calculation for verifying code integrity before booting. The configuration is managed within the `boot_config.h` file, allowing adjustments to boot attempts and UART timeout. ```c #define TWO_WIRE // #define ONE_WIRE // ... CRC calculation function ... uint32_t crc_calculate(void); // ... boot function call ... boot_function(crc_calculate(), TWO_WIRE); // In boot_config.h: #define BOOT_ATTEMPTS 3 #define TIMEOUT_TIME 1000 ``` -------------------------------- ### Slave Board UART Output Example (Text) Source: https://github.com/renesas/ble-sdk6-examples/blob/main/interfaces/I2C-Master-Slave/Readme.md This is the expected output on the UART terminal for the I2C Slave board when the example is running successfully. It displays the data received by the slave from the master and the data sent back to the master. ```text --------------- I2C Slave Demo --------------- This is what the slave received from the master 60 86 FC 07 51 01 FC 07 59 01 FC 07 71 01 FC 07 This is what the slave sent to the master 0F 0A 8C 3A 6E 6D D6 CB B3 16 3B 7F 2B 0C 47 36 ``` -------------------------------- ### Handle SMP_ERROR_ENC_KEY_MISSING in C Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/central_Security_Demo/readme.md This C code snippet demonstrates how to add error handling for SMP_ERROR_ENC_KEY_MISSING within the gapc_cmp_evt_handler function. This is crucial for preventing ASSERT_ERROR when connecting to a previously paired peripheral with a missing encryption key. ```c static int gapc_cmp_evt_handler(ke_msg_id_t const msgid, struct gapc_cmp_evt const *param, ke_task_id_t const dest_id, ke_task_id_t const src_id) { switch(param->operation) { // reset completed case GAPC_UPDATE_PARAMS: { if ((param->status != CO_ERROR_NO_ERROR)) { // it's application specific what to do when the Param Upd request is rejected CALLBACK_ARGS_1(user_app_callbacks.app_on_update_params_rejected, param->status) } else { CALLBACK_ARGS_0(user_app_callbacks.app_on_update_params_complete) } } break; default: { if(param->status != GAP_ERR_NO_ERROR) { if(param->status==SMP_ERROR_ENC_KEY_MISSING){ CALLBACK_ARGS_0(user_extra_app_callbacks.app_on_encrypt_key_missing) } else{ ASSERT_ERROR(0); // unexpected error } } if (app_process_catch_rest_cb != NULL) { app_process_catch_rest_cb(msgid, param, dest_id, src_id); } } break; } return (KE_MSG_CONSUMED); } ``` -------------------------------- ### Enable Pulse Measurement Mode in Demo Configuration Source: https://github.com/renesas/ble-sdk6-examples/blob/main/features/DA1453x_Timer1_SW_Example/Readme.md This C code snippet shows how to enable the pulse measurement mode by defining the ENABLE_PULSE_MEASURING macro to (1) in the demo_config.h file. This is a prerequisite for running the pulse measurement use-case. No specific inputs or outputs are associated with this configuration step itself, but it dictates the operational mode of the subsequent code. ```c #define ENABLE_PULSE_MEASURING (1) ``` -------------------------------- ### Configure I2C GPIOs for Temperature Sensor (C) Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/ble_temperature_ntf/Readme.md This code snippet shows how to configure specific GPIO pins for I2C communication with a temperature sensor (MCP9808) when the JTAG interface is needed for debugging. It defines the ports and pins for SCL and SDA, ensuring proper peripheral setup. This configuration is crucial when the default mikroBUS interface pins conflict with JTAG signals. ```c #define MCP9808_SCL_PORT GPIO_PORT_0 #define MCP9808_SCL_PIN GPIO_PIN_1 #define MCP9808_SDA_PORT GPIO_PORT_0 #define MCP9808_SDA_PIN GPIO_PIN_3 ``` -------------------------------- ### Configure WLAN Coexistence GPIOs (C) Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/coexistance_demo/Readme.md Calls the 'wlan_coex_gpio_cfg()' function at the end of 'set_pad_functions()' to initialize the GPIOs used by the WLAN coexistence module and configure the 2.4GHz external device event in progress signal as a GPIO interrupt. ```c #if (WLAN_COEX_ENABLED) wlan_coex_gpio_cfg(); #endif ``` -------------------------------- ### DCI_RX Characteristic Commands Source: https://github.com/renesas/ble-sdk6-examples/blob/main/features/dlg_crash_info/README.md This section details the commands that can be written to the DCI_RX characteristic to retrieve specific diagnostic data from the DA14531. ```APIDOC ## DCI_RX Characteristic Commands ### Description Send commands to the DCI_RX characteristic to request specific diagnostic data from the DA14531. The service will then notify the results via the DCI_TX characteristic. ### Method `WRITE` to `DCI_RX` characteristic ### Commands | Command | Value | Description | |--------------------|--------|--------------------------------------------------| | GET_ALL_RESET_DATA | `0x01` | Retrieves all reset data available in dci_info_t | | GET_NUM_RESETS | `0x02` | Retrieves number of resets stored | ``` -------------------------------- ### DCI Information Structure (C) Source: https://github.com/renesas/ble-sdk6-examples/blob/main/features/dlg_crash_info/README.md Defines the main structure for DCI information, containing header, length, and a pointer to the actual data. Used for sanity checks and buffer allocation when retrieving data. ```c typedef __PACKED_STRUCT { uint8_t header; uint16_t length; dci_data_t *data; }dci_info_t; ``` -------------------------------- ### Configure Simple Counting Mode with ENABLE_TMR_COUNTING Source: https://github.com/renesas/ble-sdk6-examples/blob/main/features/DA1453x_Timer1_SW_Example/Readme.md Configures the timer for Simple Counting Mode by setting the ENABLE_TMR_COUNTING macro to 1. This mode blinks an LED and prints messages based on timer overflows. ```c #define ENABLE_TMR_COUNTING (1) ``` -------------------------------- ### Prepare COEX for Sleep (C) Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/coexistance_demo/Readme.md This code snippet prepares the WLAN Coexistence (COEX) module for sleep mode by calling the appropriate function if WLAN COEX is enabled. It is typically invoked within a sleep validation routine. ```c #if (WLAN_COEX_ENABLED) wlan_coex_going_to_sleep(); #endif ``` -------------------------------- ### Configure User Data for Advertising in C Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/simple_beacon/Readme.md Defines and stores custom data within the advertising or scan response packets for BLE devices. This macro specifies the data to be appended, and the code demonstrates how it's stored in retention memory and copied for transmission. ```c #define USER_DATA ("DA14585/586 & DA1453x Simple Beacon Software Example") uint8_t user_store_data[USER_DATA_LEN] __attribute__((section("retention_mem_area_uninit") , zero_init)); //@RETENTION MEMORY memcpy(user_store_data, USER_DATA ,USER_DATA_LEN ); ``` -------------------------------- ### Configure Frequency Counting Mode Source: https://github.com/renesas/ble-sdk6-examples/blob/main/features/DA1453x_Timer1_SW_Example/Readme.md Enables Frequency Counting Mode by setting ENABLE_FREQ_COUNTING to 1. It also configures PWM_TIMER0_ENABLE to generate a frequency or EXTERNAL_FREQUENCY_HZ to specify an external input frequency. ```c #define ENABLE_FREQ_COUNTING (1) #define PWM_TIMER0_ENABLE (1) #define EXTERNAL_FREQUENCY_HZ (0) ``` -------------------------------- ### BLE SDK6: Microcontroller Initialization Functions (Thumb Code) Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/central_Security_Demo/src/mapfile.txt This snippet lists various microcontroller initialization and utility functions from the DA14585 symbols, compiled as Thumb Code. These functions are essential for setting up system clocks, peripherals, RF, BLE stack, and platform features. ```Assembly set_system_clocks 0x07f02151 Thumb Code 0 da14585_symbols.txt ABSOLUTE set_peripheral_clocks 0x07f0216d Thumb Code 0 da14585_symbols.txt ABSOLUTE rf_workaround_init 0x07f021ad Thumb Code 0 da14585_symbols.txt ABSOLUTE platform_initialization 0x07f02203 Thumb Code 0 da14585_symbols.txt ABSOLUTE ble_init 0x07f022b5 Thumb Code 0 da14585_symbols.txt ABSOLUTE rf_reinit 0x07f026b9 Thumb Code 0 da14585_symbols.txt ABSOLUTE ``` -------------------------------- ### DA1453x RTC Example: Add Local Time Info Read Callback (C) Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/RTC_Example/Readme.md This snippet shows how to add a new callback holder for 'loc_time_info_read_req' to the app_ctss_cb struct in app_ctss.h. This enables the application to handle read requests for the Local Time Information characteristic. ```c /// CTSS APP callbacks struct app_ctss_cb { /// Callback upon 'cur_time_read_req' void (*on_cur_time_read_req)(struct cts_curr_time *ct); /// Callback upon 'cur_time_write_req' uint8_t (*on_cur_time_write_req)(const struct cts_curr_time *ct); /// Callback upon 'cur_time_notified' void (*on_cur_time_notified)(uint8_t status); /// New callback upon 'loc_time_info_read_req' void (*on_loc_time_info_read_req)(struct cts_loc_time_info *lt); /// Callback upon 'loc_time_info_write_req' void (*on_loc_time_info_write_req)(const struct cts_loc_time_info *lt); /// Callback upon 'ref_time_info_read_req' void (*on_ref_time_info_read_req)(struct cts_ref_time_info *rt); }; ``` -------------------------------- ### Implement user_app_on_init Function in C Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/hibernation_and_stateaware_hibernation/Readme.md This C code snippet demonstrates how to implement the `user_app_on_init` function. This function is used to configure SPI flash for power down before calling the default initialization. It's typically used in embedded systems for custom initialization sequences. ```c void user_app_on_init(void) { spi_flash_power_down(); default_app_on_init(); } ``` -------------------------------- ### GET_ALL_RESET_DATA Response Source: https://github.com/renesas/ble-sdk6-examples/blob/main/features/dlg_crash_info/README.md Details the response format received on the DCI_TX characteristic after sending the GET_ALL_RESET_DATA command. ```APIDOC ## GET_ALL_RESET_DATA Response ### Description This is the data format received on the DCI_TX characteristic when the `GET_ALL_RESET_DATA` command (value `0x01`) is executed. ### Response Structure | FIELD | Type | Description | |-----------------|-------------------|--------------------------------------------------| | current command | `uint16_t` | `0x01` (GET_ALL_RESET_DATA) | | length | `uint16_t` | Depends on the number of stored resets | | dci_data | `dci_data_t` | Fault data for resets stored on the device | ``` -------------------------------- ### String and IO Utility Functions (ARM Assembly) Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/central_Security_Demo/src/mapfile.txt This snippet includes various string manipulation and input/output utility functions. These functions are essential for general-purpose programming, such as converting integers to strings, printing characters, and formatted string output. They are implemented in assembly for efficiency. ```assembly .text 0x07fc06c0 Section 0 arch_console.o(.text) arch_itoa 0x07fc06c1 Thumb Code 134 arch_console.o(.text) _puts 0x07fc0747 Thumb Code 52 arch_console.o(.text) arch_vsnprintf 0x07fc077b Thumb Code 264 arch_console.o(.text) uart_callback 0x07fc0883 Thumb Code 78 arch_console.o(.text) delete_msg 0x07fc09e9 Thumb Code 14 arch_console.o(.text) arch_strlen 0x07fc09f7 Thumb Code 16 arch_console.o(.text) _putc 0x07fc0a07 Thumb Code 32 arch_console.o(.text) ``` -------------------------------- ### DCI Last Fault Handler Enumeration (C) Source: https://github.com/renesas/ble-sdk6-examples/blob/main/features/dlg_crash_info/README.md Enumerates the fault handlers available on Cortex-M0+ processors, specifically HardFault and NMI. LF_PLATFORM_RESET is noted as not currently implemented and typically escalated to an NMI. ```c typedef enum { LF_HARDFAULT, LF_NMI, LF_PLATFORM_RESET, }dci_last_fault_hdlr_t; ``` -------------------------------- ### Convert Hex to Array for DA14531 Custom Image Source: https://github.com/renesas/ble-sdk6-examples/blob/main/interfaces/external-processor-renesas/Readme.md This tool converts a hex file into a comma-separated format suitable for inclusion in a C array, specifically for programming custom images onto the DA14531 module. It is available on GitHub. ```shell hex2array ``` -------------------------------- ### Standalone Test Case Definition Array (C) Source: https://github.com/renesas/ble-sdk6-examples/blob/main/features/standalone_prod_test/Readme.md The 'dialog_prod.c' file contains the 'standalone_tests[]' array, which defines the sequence of predefined tests. Each test entry includes '.command_on' and '.command_off' members for test execution control. ```c const test_command_t standalone_tests[] = { // Example entry: // { .command_on = TEST_COMMAND_START_TX, .command_off = TEST_COMMAND_STOP_TX }, }; ``` -------------------------------- ### DCI_TX Characteristic Data Format Source: https://github.com/renesas/ble-sdk6-examples/blob/main/features/dlg_crash_info/README.md Describes the structure of the data transmitted by the DCI_TX characteristic, which includes the command, data length, and the actual data payload. ```APIDOC ## DCI_TX Characteristic Data Format ### Description This characteristic is used by the DCI service to send diagnostic data back to the client. The data is structured to include the command that was processed, the total length of the data payload, and the data itself. ### Data Structure | FIELD | Type | Description | |-----------------|-------------------|-------------------------------------------------------------------| | current command | `uint16_t` | The command that is associated with the data | | length | `uint16_t` | The length of the total data to follow | | data | `uint8_t *` | A variable-length array depending on the number of resets and command | ``` -------------------------------- ### Enable WLAN Coexistence Mode (C) Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/coexistance_demo/Readme.md These preprocessor definitions are used to enable and configure the WLAN coexistence (COEX) feature within a project. It allows for enabling the COEX mode, enabling debug signals for monitoring, and controlling the polarity of the BLE event in progress signal. ```c #define CFG_COEX #define CFG_WLAN_COEX_DEBUG #undef CFG_WLAN_COEX_BLE_EVENT_INV ``` -------------------------------- ### Configure Advertising and Scanning Behavior in C Source: https://github.com/renesas/ble-sdk6-examples/blob/main/features/social_distancing/Readme.md Manages the advertising and scanning cycles of the device. `user_app_adv_start()` initiates advertising, which transitions to scanning via `user_switch_adv_scan_timer_cb()`. Scanning is configured using `user_scan_conf` and duplicate filtering can be enabled/disabled via `user_scan_config.filter_duplic`. ```c /* Function to start advertising */ void user_app_adv_start(void); /* Callback function after advertising timeout */ void user_switch_adv_scan_timer_cb(void); /* Structure for scan configuration */ struct scan_conf user_scan_conf; /* Structure for duplicate filtering configuration */ struct filter_duplic_config { uint8_t filter_duplic; }; struct filter_duplic_config user_scan_config; /* Constants for duplicate filtering */ #define SCAN_FILT_DUPLIC_EN 1 #define SCAN_FILT_DUPLIC_DIS 0 /* Start scanning */ void user_scan_start(void); /* Handle received advertising report */ void user_app_on_adv_report_ind(void); /* Called when scanning is completed */ void user_app_on_scanning_completed(void); /* Initiate connection attempt */ void initiate_connection_attempt(void); ``` -------------------------------- ### BLE SDK6: Memory Area Definitions (Data and Section) Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/central_Security_Demo/src/mapfile.txt This snippet details various memory areas defined within the Renesas BLE SDK6 examples, including retained memory areas for security, timers, and bonding databases, as well as heap areas for general data, environment, and messages. ```Assembly gapc_encrypt_cfm 0x07fd3114 Data 4 app_easy_security.o(retention_mem_area0) gapc_security_req 0x07fd3118 Data 4 app_easy_security.o(retention_mem_area0) retention_mem_area0 0x07fd311c Section 80 app_easy_timer.o(retention_mem_area0) timer_callbacks 0x07fd311c Data 40 app_easy_timer.o(retention_mem_area0) modified_timer_callbacks 0x07fd3144 Data 40 app_easy_timer.o(retention_mem_area0) retention_mem_area0 0x07fd316c Section 644 app_bond_db.o(retention_mem_area0) bdb 0x07fd316c Data 644 app_bond_db.o(retention_mem_area0) retention_mem_area0 0x07fd33f0 Section 905 user_central_scanner.o(retention_mem_area0) retention_mem_area0 0x07fd377a Section 40 pll_vcocal_lut.o(retention_mem_area0) heap_db_area 0x07fd37a4 Section 1036 jump_table.o(heap_db_area) heap_env_area 0x07fd3bb0 Section 2476 jump_table.o(heap_env_area) heap_msg_area 0x07fd455c Section 3756 jump_table.o(heap_msg_area) ``` -------------------------------- ### DA1453x RTC Example: Invoke Local Time Info Read Callback (C) Source: https://github.com/renesas/ble-sdk6-examples/blob/main/connectivity/RTC_Example/Readme.md This code demonstrates invoking the 'on_loc_time_info_read_req' callback within the ctss_read_req_ind_handler in app_ctss_task.c. This occurs when the CTSS_IDX_LOCAL_TIME_INFO_VAL characteristic is read, allowing custom handling of local time information. ```c ... case CTSS_IDX_LOCAL_TIME_INFO_VAL: // Set information user_app_ctss_cb.on_loc_time_info_read_req(&local_time); data[0] = local_time.time_zone; data[1] = local_time.dst_offset; len = 2; break; ... ```