static void _ble_register_services(void) { /* GAP_SVC */ ble_gap_init(); pr_info(LOG_MODULE_BLE, "Registering %s", "GAP"); /* DIS_SVC */ ble_dis_init(); pr_info(LOG_MODULE_BLE, "Registering %s", "DIS"); /* BAS_SVC */ ble_bas_init(); pr_info(LOG_MODULE_BLE, "Registering %s", "BAS"); #ifdef CONFIG_BLE_HRS_LIB /* HRM_SVC */ ble_hrs_init(); pr_info(LOG_MODULE_BLE, "Registering %s", "HRM"); #endif #ifdef CONFIG_BLE_LNS_LIB /* LNS_SVC */ ble_lns_init(); pr_info(LOG_MODULE_BLE, "Registering %s", "LNS"); #endif #ifdef CONFIG_BLE_RSCS_LIB /* RSC_SVC */ ble_rscs_init(); pr_info(LOG_MODULE_BLE, "Registering %s", "RSC"); #endif #if defined(CONFIG_PACKAGE_ISPP) /* ISPP_SVC */ ble_ispp_init(); pr_info(LOG_MODULE_BLE, "Registering %s", "ISPP"); #endif #if defined(CONFIG_UAS) ble_uas_init(); pr_info(LOG_MODULE_BLE, "Registering %s", "UAS"); #endif on_ble_app_started(); }
/**@brief Initialize services that will be used by the application. * * @details Initialize the Location and Navigation, Battery and Device Information services. */ static void services_init(void) { uint32_t err_code; ble_lns_init_t lns_init; ble_bas_init_t bas_init; ble_dis_init_t dis_init; memset(&lns_init, 0, sizeof(lns_init)); lns_init.evt_handler = on_lns_evt; lns_init.lncp_evt_handler = on_ln_ctrlpt_evt; lns_init.error_handler = lns_error_handler; lns_init.is_position_quality_present = true; lns_init.is_control_point_present = true; lns_init.is_navigation_present = true; lns_init.available_features = BLE_LNS_FEATURE_INSTANT_SPEED_SUPPORTED | BLE_LNS_FEATURE_TOTAL_DISTANCE_SUPPORTED | BLE_LNS_FEATURE_LOCATION_SUPPORTED | BLE_LNS_FEATURE_ELEVATION_SUPPORTED | BLE_LNS_FEATURE_HEADING_SUPPORTED | BLE_LNS_FEATURE_ROLLING_TIME_SUPPORTED | BLE_LNS_FEATURE_UTC_TIME_SUPPORTED | BLE_LNS_FEATURE_REMAINING_DISTANCE_SUPPORTED | BLE_LNS_FEATURE_REMAINING_VERT_DISTANCE_SUPPORTED | BLE_LNS_FEATURE_EST_TIME_OF_ARRIVAL_SUPPORTED | BLE_LNS_FEATURE_NUM_SATS_IN_SOLUTION_SUPPORTED | BLE_LNS_FEATURE_NUM_SATS_IN_VIEW_SUPPORTED | BLE_LNS_FEATURE_TIME_TO_FIRST_FIX_SUPPORTED | BLE_LNS_FEATURE_EST_HORZ_POS_ERROR_SUPPORTED | BLE_LNS_FEATURE_EST_VERT_POS_ERROR_SUPPORTED | BLE_LNS_FEATURE_HORZ_DILUTION_OF_PRECISION_SUPPORTED | BLE_LNS_FEATURE_VERT_DILUTION_OF_PRECISION_SUPPORTED | BLE_LNS_FEATURE_LOC_AND_SPEED_CONTENT_MASKING_SUPPORTED | BLE_LNS_FEATURE_FIX_RATE_SETTING_SUPPORTED | BLE_LNS_FEATURE_ELEVATION_SETTING_SUPPORTED | BLE_LNS_FEATURE_POSITION_STATUS_SUPPORTED; m_sim_location_speed = initial_lns_location_speed; m_sim_position_quality = initial_lns_pos_quality; m_sim_navigation = initial_lns_navigation; lns_init.p_location_speed = &m_sim_location_speed; lns_init.p_position_quality = &m_sim_position_quality; lns_init.p_navigation = &m_sim_navigation; lns_init.loc_nav_feature_security_req_read_perm = SEC_OPEN; lns_init.loc_speed_security_req_cccd_write_perm = SEC_OPEN; lns_init.position_quality_security_req_read_perm = SEC_OPEN; lns_init.navigation_security_req_cccd_write_perm = SEC_OPEN; lns_init.ctrl_point_security_req_write_perm = SEC_OPEN; lns_init.ctrl_point_security_req_cccd_write_perm = SEC_OPEN; err_code = ble_lns_init(&m_lns, &lns_init); APP_ERROR_CHECK(err_code); ble_lns_route_t route1 = {.route_name = "Route one"}; err_code = ble_lns_add_route(&m_lns, &route1); ble_lns_route_t route2 = {.route_name = "Route two"}; err_code = ble_lns_add_route(&m_lns, &route2); // Initialize Battery Service memset(&bas_init, 0, sizeof(bas_init)); // Here the sec level for the Battery Service can be changed/increased. BLE_GAP_CONN_SEC_MODE_SET_OPEN(&bas_init.battery_level_char_attr_md.cccd_write_perm); BLE_GAP_CONN_SEC_MODE_SET_OPEN(&bas_init.battery_level_char_attr_md.read_perm); BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(&bas_init.battery_level_char_attr_md.write_perm); BLE_GAP_CONN_SEC_MODE_SET_OPEN(&bas_init.battery_level_report_read_perm); bas_init.evt_handler = NULL; bas_init.support_notification = true; bas_init.p_report_ref = NULL; bas_init.initial_batt_level = 100; err_code = ble_bas_init(&m_bas, &bas_init); APP_ERROR_CHECK(err_code); // Initialize Device Information Service memset(&dis_init, 0, sizeof(dis_init)); ble_srv_ascii_to_utf8(&dis_init.manufact_name_str, MANUFACTURER_NAME); BLE_GAP_CONN_SEC_MODE_SET_OPEN(&dis_init.dis_attr_md.read_perm); BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(&dis_init.dis_attr_md.write_perm); err_code = ble_dis_init(&dis_init); APP_ERROR_CHECK(err_code); } /**@brief Initialize the simulators. */ static void sim_init(void) { // battery simulation m_battery_sim_cfg.min = MIN_BATTERY_LEVEL; m_battery_sim_cfg.max = MAX_BATTERY_LEVEL; m_battery_sim_cfg.incr = BATTERY_LEVEL_INCREMENT; m_battery_sim_cfg.start_at_max = true; sensorsim_init(&m_battery_sim_state, &m_battery_sim_cfg); } /**@brief Start application timers. */ static void application_timers_start(void) { uint32_t err_code; // Start application timers err_code = app_timer_start(m_battery_timer_id, BATTERY_LEVEL_MEAS_INTERVAL, NULL); APP_ERROR_CHECK(err_code); err_code = app_timer_start(m_loc_and_nav_timer_id, LOC_AND_NAV_DATA_INTERVAL, NULL); APP_ERROR_CHECK(err_code); }