Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of nRF51822 by
nordic/nrf-sdk/ble/ble_services/ble_cscs.h@37:c29c330d942c, 2014-07-07 (annotated)
- Committer:
- Rohit Grover
- Date:
- Mon Jul 07 13:43:31 2014 +0100
- Revision:
- 37:c29c330d942c
changes required to upgrade to V7 of the soft-device
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Rohit Grover |
37:c29c330d942c | 1 | /* Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. |
| Rohit Grover |
37:c29c330d942c | 2 | * |
| Rohit Grover |
37:c29c330d942c | 3 | * The information contained herein is property of Nordic Semiconductor ASA. |
| Rohit Grover |
37:c29c330d942c | 4 | * Terms and conditions of usage are described in detail in NORDIC |
| Rohit Grover |
37:c29c330d942c | 5 | * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. |
| Rohit Grover |
37:c29c330d942c | 6 | * |
| Rohit Grover |
37:c29c330d942c | 7 | * Licensees are granted free, non-transferable use of the information. NO |
| Rohit Grover |
37:c29c330d942c | 8 | * WARRANTY of ANY KIND is provided. This heading must NOT be removed from |
| Rohit Grover |
37:c29c330d942c | 9 | * the file. |
| Rohit Grover |
37:c29c330d942c | 10 | * |
| Rohit Grover |
37:c29c330d942c | 11 | */ |
| Rohit Grover |
37:c29c330d942c | 12 | |
| Rohit Grover |
37:c29c330d942c | 13 | /** @file |
| Rohit Grover |
37:c29c330d942c | 14 | * |
| Rohit Grover |
37:c29c330d942c | 15 | * @defgroup ble_sdk_srv_csc Cycling Speed and Cadence Service |
| Rohit Grover |
37:c29c330d942c | 16 | * @{ |
| Rohit Grover |
37:c29c330d942c | 17 | * @ingroup ble_sdk_srv |
| Rohit Grover |
37:c29c330d942c | 18 | * @brief Cycling Speed and Cadence Service module. |
| Rohit Grover |
37:c29c330d942c | 19 | * |
| Rohit Grover |
37:c29c330d942c | 20 | * @details This module implements the Cycling Speed and Cadence Service. If enabled, notification |
| Rohit Grover |
37:c29c330d942c | 21 | * of the Cycling Speead and Candence Measurement is performed when the application |
| Rohit Grover |
37:c29c330d942c | 22 | * calls ble_cscs_measurement_send(). |
| Rohit Grover |
37:c29c330d942c | 23 | * |
| Rohit Grover |
37:c29c330d942c | 24 | * To use this service, you need to provide the the supported features (@ref BLE_CSCS_FEATURES). |
| Rohit Grover |
37:c29c330d942c | 25 | * If you choose to support Wheel revolution data (feature bit @ref BLE_CSCS_FEATURE_WHEEL_REV_BIT), |
| Rohit Grover |
37:c29c330d942c | 26 | * you then need to support the 'setting of cumulative value' operation by the supporting the |
| Rohit Grover |
37:c29c330d942c | 27 | * Speed and Cadence Control Point (@ref ble_sdk_srv_sc_ctrlpt) by setting the @ref BLE_SRV_SC_CTRLPT_CUM_VAL_OP_SUPPORTED |
| Rohit Grover |
37:c29c330d942c | 28 | * bit of the ctrplt_supported_functions in the @ref ble_cscs_init_t structure. |
| Rohit Grover |
37:c29c330d942c | 29 | * If you want to support the 'start autocalibration' control point feature, you need, after the @ref BLE_SC_CTRLPT_EVT_START_CALIBRATION |
| Rohit Grover |
37:c29c330d942c | 30 | * has been received and the auto calibration is finished, to call the @ref ble_sc_ctrlpt_rsp_send to indicate that the operation is finished |
| Rohit Grover |
37:c29c330d942c | 31 | * and thus be able to receive new control point operations. |
| Rohit Grover |
37:c29c330d942c | 32 | * If you want to support the 'sensor location' related operation, you need to provide a list of supported location in the |
| Rohit Grover |
37:c29c330d942c | 33 | * @ref ble_cscs_init_t structure. |
| Rohit Grover |
37:c29c330d942c | 34 | * |
| Rohit Grover |
37:c29c330d942c | 35 | * |
| Rohit Grover |
37:c29c330d942c | 36 | * @note The application or the service using this module must propagate BLE stack events to the |
| Rohit Grover |
37:c29c330d942c | 37 | * Cycling Speead and Candence Service module by calling ble_cscs_on_ble_evt() from the |
| Rohit Grover |
37:c29c330d942c | 38 | * from the @ref ble_stack_handler function. This service will forward the event to the @ref ble_sdk_srv_sc_ctrlpt module. |
| Rohit Grover |
37:c29c330d942c | 39 | * |
| Rohit Grover |
37:c29c330d942c | 40 | * @note Attention! |
| Rohit Grover |
37:c29c330d942c | 41 | * To maintain compliance with Nordic Semiconductor ASA Bluetooth profile |
| Rohit Grover |
37:c29c330d942c | 42 | * qualification listings, this section of source code must not be modified. |
| Rohit Grover |
37:c29c330d942c | 43 | */ |
| Rohit Grover |
37:c29c330d942c | 44 | |
| Rohit Grover |
37:c29c330d942c | 45 | #ifndef BLE_CSCS_H__ |
| Rohit Grover |
37:c29c330d942c | 46 | #define BLE_CSCS_H__ |
| Rohit Grover |
37:c29c330d942c | 47 | |
| Rohit Grover |
37:c29c330d942c | 48 | #include <stdint.h> |
| Rohit Grover |
37:c29c330d942c | 49 | #include <stdbool.h> |
| Rohit Grover |
37:c29c330d942c | 50 | #include "ble.h" |
| Rohit Grover |
37:c29c330d942c | 51 | #include "ble_srv_common.h" |
| Rohit Grover |
37:c29c330d942c | 52 | #include "ble_sc_ctrlpt.h" |
| Rohit Grover |
37:c29c330d942c | 53 | #include "ble_sensor_location.h" |
| Rohit Grover |
37:c29c330d942c | 54 | |
| Rohit Grover |
37:c29c330d942c | 55 | /** @defgroup BLE_CSCS_FEATURES Cycling Speed and Cadence Service feature bits |
| Rohit Grover |
37:c29c330d942c | 56 | * @{ */ |
| Rohit Grover |
37:c29c330d942c | 57 | #define BLE_CSCS_FEATURE_WHEEL_REV_BIT (0x01 << 0) /**< Wheel Revolution Data Supported bit. */ |
| Rohit Grover |
37:c29c330d942c | 58 | #define BLE_CSCS_FEATURE_CRANK_REV_BIT (0x01 << 1) /**< Crank Revolution Data Supported bit. */ |
| Rohit Grover |
37:c29c330d942c | 59 | #define BLE_CSCS_FEATURE_MULTIPLE_SENSORS_BIT (0x01 << 2) /**< Multiple Sensor Locations Supported bit. */ |
| Rohit Grover |
37:c29c330d942c | 60 | /** @} */ |
| Rohit Grover |
37:c29c330d942c | 61 | |
| Rohit Grover |
37:c29c330d942c | 62 | /**@brief Cycling Speed and Cadence Service event type. */ |
| Rohit Grover |
37:c29c330d942c | 63 | typedef enum |
| Rohit Grover |
37:c29c330d942c | 64 | { |
| Rohit Grover |
37:c29c330d942c | 65 | BLE_CSCS_EVT_NOTIFICATION_ENABLED, /**< Cycling Speed and Cadence value notification enabled event. */ |
| Rohit Grover |
37:c29c330d942c | 66 | BLE_CSCS_EVT_NOTIFICATION_DISABLED /**< Cycling Speed and Cadence value notification disabled event. */ |
| Rohit Grover |
37:c29c330d942c | 67 | } ble_cscs_evt_type_t; |
| Rohit Grover |
37:c29c330d942c | 68 | |
| Rohit Grover |
37:c29c330d942c | 69 | /**@brief Cycling Speed and Cadence Service event. */ |
| Rohit Grover |
37:c29c330d942c | 70 | typedef struct |
| Rohit Grover |
37:c29c330d942c | 71 | { |
| Rohit Grover |
37:c29c330d942c | 72 | ble_cscs_evt_type_t evt_type; /**< Type of event. */ |
| Rohit Grover |
37:c29c330d942c | 73 | } ble_cscs_evt_t; |
| Rohit Grover |
37:c29c330d942c | 74 | |
| Rohit Grover |
37:c29c330d942c | 75 | // Forward declaration of the ble_csc_t type. |
| Rohit Grover |
37:c29c330d942c | 76 | typedef struct ble_cscs_s ble_cscs_t; |
| Rohit Grover |
37:c29c330d942c | 77 | |
| Rohit Grover |
37:c29c330d942c | 78 | /**@brief Cycling Speed and Cadence Service event handler type. */ |
| Rohit Grover |
37:c29c330d942c | 79 | typedef void (*ble_cscs_evt_handler_t) (ble_cscs_t * p_cscs, ble_cscs_evt_t * p_evt); |
| Rohit Grover |
37:c29c330d942c | 80 | |
| Rohit Grover |
37:c29c330d942c | 81 | /**@brief Cycling Speed and Cadence Service init structure. This contains all options and data |
| Rohit Grover |
37:c29c330d942c | 82 | * needed for initialization of the service. */ |
| Rohit Grover |
37:c29c330d942c | 83 | typedef struct |
| Rohit Grover |
37:c29c330d942c | 84 | { |
| Rohit Grover |
37:c29c330d942c | 85 | ble_cscs_evt_handler_t evt_handler; /**< Event handler to be called for handling events in the Cycling Speed and Cadence Service. */ |
| Rohit Grover |
37:c29c330d942c | 86 | ble_srv_cccd_security_mode_t csc_meas_attr_md; /**< Initial security level for cycling speed and cadence measurement attribute */ |
| Rohit Grover |
37:c29c330d942c | 87 | ble_srv_cccd_security_mode_t csc_ctrlpt_attr_md; /**< Initial security level for cycling speed and cadence control point attribute */ |
| Rohit Grover |
37:c29c330d942c | 88 | ble_srv_security_mode_t csc_feature_attr_md; /**< Initial security level for feature attribute */ |
| Rohit Grover |
37:c29c330d942c | 89 | uint16_t feature; /**< Initial value for features of sensor @ref BLE_CSCS_FEATURES. */ |
| Rohit Grover |
37:c29c330d942c | 90 | uint8_t ctrplt_supported_functions; /**< Supported control point functionnalities see @ref BLE_SRV_SC_CTRLPT_SUPP_FUNC. */ |
| Rohit Grover |
37:c29c330d942c | 91 | ble_sc_ctrlpt_evt_handler_t ctrlpt_evt_handler; /**< Event handler */ |
| Rohit Grover |
37:c29c330d942c | 92 | ble_sensor_location_t *list_supported_locations; /**< List of supported sensor locations.*/ |
| Rohit Grover |
37:c29c330d942c | 93 | uint8_t size_list_supported_locations; /**< Number of supported sensor locations in the list.*/ |
| Rohit Grover |
37:c29c330d942c | 94 | ble_srv_error_handler_t error_handler; /**< Function to be called in case of an error. */ |
| Rohit Grover |
37:c29c330d942c | 95 | ble_sensor_location_t *sensor_location; /**< Initial Sensor Location, if NULL, sensor_location characteristic is not added*/ |
| Rohit Grover |
37:c29c330d942c | 96 | ble_srv_cccd_security_mode_t csc_sensor_loc_attr_md; /**< Initial security level for sensor location attribute */ |
| Rohit Grover |
37:c29c330d942c | 97 | } ble_cscs_init_t; |
| Rohit Grover |
37:c29c330d942c | 98 | |
| Rohit Grover |
37:c29c330d942c | 99 | /**@brief Cycling Speed and Cadence Service structure. This contains various status information for |
| Rohit Grover |
37:c29c330d942c | 100 | * the service. */ |
| Rohit Grover |
37:c29c330d942c | 101 | typedef struct ble_cscs_s |
| Rohit Grover |
37:c29c330d942c | 102 | { |
| Rohit Grover |
37:c29c330d942c | 103 | ble_cscs_evt_handler_t evt_handler; /**< Event handler to be called for handling events in the Cycling Speed and Cadence Service. */ |
| Rohit Grover |
37:c29c330d942c | 104 | uint16_t service_handle; /**< Handle of Cycling Speed and Cadence Service (as provided by the BLE stack). */ |
| Rohit Grover |
37:c29c330d942c | 105 | ble_gatts_char_handles_t meas_handles; /**< Handles related to the Cycling Speed and Cadence Measurement characteristic. */ |
| Rohit Grover |
37:c29c330d942c | 106 | ble_gatts_char_handles_t feature_handles; /**< Handles related to the Cycling Speed and Cadence feature characteristic. */ |
| Rohit Grover |
37:c29c330d942c | 107 | ble_gatts_char_handles_t sensor_loc_handles; /**< Handles related to the Cycling Speed and Cadence Sensor Location characteristic. */ |
| Rohit Grover |
37:c29c330d942c | 108 | uint16_t conn_handle; /**< Handle of the current connection (as provided by the BLE stack, is BLE_CONN_HANDLE_INVALID if not in a connection). */ |
| Rohit Grover |
37:c29c330d942c | 109 | uint16_t feature; /**< Bit mask of features available on sensor. */ |
| Rohit Grover |
37:c29c330d942c | 110 | ble_sc_ctrlpt_t ctrl_pt; /**< data for speed and cadence control point */ |
| Rohit Grover |
37:c29c330d942c | 111 | } ble_cscs_t; |
| Rohit Grover |
37:c29c330d942c | 112 | |
| Rohit Grover |
37:c29c330d942c | 113 | /**@brief Cycling Speed and Cadence Service measurement structure. This contains a Cycling Speed and |
| Rohit Grover |
37:c29c330d942c | 114 | * Cadence Service measurement. */ |
| Rohit Grover |
37:c29c330d942c | 115 | typedef struct ble_cscs_meas_s |
| Rohit Grover |
37:c29c330d942c | 116 | { |
| Rohit Grover |
37:c29c330d942c | 117 | bool is_wheel_rev_data_present; /**< True if Wheel Revolution Data is present in the measurement. */ |
| Rohit Grover |
37:c29c330d942c | 118 | bool is_crank_rev_data_present; /**< True if Crank Revolution Data is present in the measurement. */ |
| Rohit Grover |
37:c29c330d942c | 119 | uint32_t cumulative_wheel_revs; /**< Cumulative Wheel Revolutions. */ |
| Rohit Grover |
37:c29c330d942c | 120 | uint16_t last_wheel_event_time; /**< Last Wheel Event Time. */ |
| Rohit Grover |
37:c29c330d942c | 121 | uint16_t cumulative_crank_revs; /**< Cumulative Crank Revolutions. */ |
| Rohit Grover |
37:c29c330d942c | 122 | uint16_t last_crank_event_time; /**< Last Crank Event Time. */ |
| Rohit Grover |
37:c29c330d942c | 123 | } ble_cscs_meas_t; |
| Rohit Grover |
37:c29c330d942c | 124 | |
| Rohit Grover |
37:c29c330d942c | 125 | /**@brief Function for initializing the Cycling Speed and Cadence Service. |
| Rohit Grover |
37:c29c330d942c | 126 | * |
| Rohit Grover |
37:c29c330d942c | 127 | * @param[out] p_cscs Cycling Speed and Cadence Service structure. This structure will have to |
| Rohit Grover |
37:c29c330d942c | 128 | * be supplied by the application. It will be initialized by this function, |
| Rohit Grover |
37:c29c330d942c | 129 | * and will later be used to identify this particular service instance. |
| Rohit Grover |
37:c29c330d942c | 130 | * @param[in] p_cscs_init Information needed to initialize the service. |
| Rohit Grover |
37:c29c330d942c | 131 | * |
| Rohit Grover |
37:c29c330d942c | 132 | * @return NRF_SUCCESS on successful initialization of service, otherwise an error code. |
| Rohit Grover |
37:c29c330d942c | 133 | */ |
| Rohit Grover |
37:c29c330d942c | 134 | uint32_t ble_cscs_init(ble_cscs_t * p_cscs, const ble_cscs_init_t * p_cscs_init); |
| Rohit Grover |
37:c29c330d942c | 135 | |
| Rohit Grover |
37:c29c330d942c | 136 | /**@brief Function for handling the Application's BLE Stack events. |
| Rohit Grover |
37:c29c330d942c | 137 | * |
| Rohit Grover |
37:c29c330d942c | 138 | * @details Handles all events from the BLE stack of interest to the Cycling Speed and Cadence |
| Rohit Grover |
37:c29c330d942c | 139 | * Service. |
| Rohit Grover |
37:c29c330d942c | 140 | * |
| Rohit Grover |
37:c29c330d942c | 141 | * @param[in] p_cscs Cycling Speed and Cadence Service structure. |
| Rohit Grover |
37:c29c330d942c | 142 | * @param[in] p_ble_evt Event received from the BLE stack. |
| Rohit Grover |
37:c29c330d942c | 143 | */ |
| Rohit Grover |
37:c29c330d942c | 144 | void ble_cscs_on_ble_evt(ble_cscs_t * p_cscs, ble_evt_t * p_ble_evt); |
| Rohit Grover |
37:c29c330d942c | 145 | |
| Rohit Grover |
37:c29c330d942c | 146 | /**@brief Function for sending cycling speed and cadence measurement if notification has been enabled. |
| Rohit Grover |
37:c29c330d942c | 147 | * |
| Rohit Grover |
37:c29c330d942c | 148 | * @details The application calls this function after having performed a Cycling Speed and Cadence |
| Rohit Grover |
37:c29c330d942c | 149 | * Service measurement. If notification has been enabled, the measurement data is encoded |
| Rohit Grover |
37:c29c330d942c | 150 | * and sent to the client. |
| Rohit Grover |
37:c29c330d942c | 151 | * |
| Rohit Grover |
37:c29c330d942c | 152 | * @param[in] p_cscs Cycling Speed and Cadence Service structure. |
| Rohit Grover |
37:c29c330d942c | 153 | * @param[in] p_measurement Pointer to new cycling speed and cadence measurement. |
| Rohit Grover |
37:c29c330d942c | 154 | * |
| Rohit Grover |
37:c29c330d942c | 155 | * @return NRF_SUCCESS on success, otherwise an error code. |
| Rohit Grover |
37:c29c330d942c | 156 | */ |
| Rohit Grover |
37:c29c330d942c | 157 | uint32_t ble_cscs_measurement_send(ble_cscs_t * p_cscs, ble_cscs_meas_t * p_measurement); |
| Rohit Grover |
37:c29c330d942c | 158 | |
| Rohit Grover |
37:c29c330d942c | 159 | #endif // BLE_CSCS_H__ |
| Rohit Grover |
37:c29c330d942c | 160 | |
| Rohit Grover |
37:c29c330d942c | 161 | /** @} */ |
