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
ble_srv_common.h
00001 /* 00002 * Copyright (c) Nordic Semiconductor ASA 00003 * All rights reserved. 00004 * 00005 * Redistribution and use in source and binary forms, with or without modification, 00006 * are permitted provided that the following conditions are met: 00007 * 00008 * 1. Redistributions of source code must retain the above copyright notice, this 00009 * list of conditions and the following disclaimer. 00010 * 00011 * 2. Redistributions in binary form must reproduce the above copyright notice, this 00012 * list of conditions and the following disclaimer in the documentation and/or 00013 * other materials provided with the distribution. 00014 * 00015 * 3. Neither the name of Nordic Semiconductor ASA nor the names of other 00016 * contributors to this software may be used to endorse or promote products 00017 * derived from this software without specific prior written permission. 00018 * 00019 * 00020 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 00021 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 00022 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00023 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 00024 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00025 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00026 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 00027 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00028 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00029 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00030 * 00031 */ 00032 00033 /** @file 00034 * 00035 * @defgroup ble_sdk_srv_common Common service definitions 00036 * @{ 00037 * @ingroup ble_sdk_srv 00038 * @brief Constants, type definitions and functions that are common to all services. 00039 */ 00040 00041 #ifndef BLE_SRV_COMMON_H__ 00042 #define BLE_SRV_COMMON_H__ 00043 00044 #include <stdint.h> 00045 #include <stdbool.h> 00046 #include "ble_types.h" 00047 #include "app_util.h" 00048 #include "ble_gap.h" 00049 #include "ble_gatt.h" 00050 00051 /** @defgroup UUID_SERVICES Service UUID definitions 00052 * @{ */ 00053 #define BLE_UUID_ALERT_NOTIFICATION_SERVICE 0x1811 /**< Alert Notification service UUID. */ 00054 #define BLE_UUID_BATTERY_SERVICE 0x180F /**< Battery service UUID. */ 00055 #define BLE_UUID_BLOOD_PRESSURE_SERVICE 0x1810 /**< Blood Pressure service UUID. */ 00056 #define BLE_UUID_CURRENT_TIME_SERVICE 0x1805 /**< Current Time service UUID. */ 00057 #define BLE_UUID_CYCLING_SPEED_AND_CADENCE 0x1816 /**< Cycling Speed and Cadence service UUID. */ 00058 #define BLE_UUID_DEVICE_INFORMATION_SERVICE 0x180A /**< Device Information service UUID. */ 00059 #define BLE_UUID_GLUCOSE_SERVICE 0x1808 /**< Glucose service UUID. */ 00060 #define BLE_UUID_HEALTH_THERMOMETER_SERVICE 0x1809 /**< Health Thermometer service UUID. */ 00061 #define BLE_UUID_HEART_RATE_SERVICE 0x180D /**< Heart Rate service UUID. */ 00062 #define BLE_UUID_HUMAN_INTERFACE_DEVICE_SERVICE 0x1812 /**< Human Interface Device service UUID. */ 00063 #define BLE_UUID_IMMEDIATE_ALERT_SERVICE 0x1802 /**< Immediate Alert service UUID. */ 00064 #define BLE_UUID_LINK_LOSS_SERVICE 0x1803 /**< Link Loss service UUID. */ 00065 #define BLE_UUID_NEXT_DST_CHANGE_SERVICE 0x1807 /**< Next Dst Change service UUID. */ 00066 #define BLE_UUID_PHONE_ALERT_STATUS_SERVICE 0x180E /**< Phone Alert Status service UUID. */ 00067 #define BLE_UUID_REFERENCE_TIME_UPDATE_SERVICE 0x1806 /**< Reference Time Update service UUID. */ 00068 #define BLE_UUID_RUNNING_SPEED_AND_CADENCE 0x1814 /**< Running Speed and Cadence service UUID. */ 00069 #define BLE_UUID_SCAN_PARAMETERS_SERVICE 0x1813 /**< Scan Parameters service UUID. */ 00070 #define BLE_UUID_TX_POWER_SERVICE 0x1804 /**< TX Power service UUID. */ 00071 /** @} */ 00072 00073 /** @defgroup UUID_CHARACTERISTICS Characteristic UUID definitions 00074 * @{ */ 00075 #define BLE_UUID_BATTERY_LEVEL_STATE_CHAR 0x2A1B /**< Battery Level State characteristic UUID. */ 00076 #define BLE_UUID_BATTERY_POWER_STATE_CHAR 0x2A1A /**< Battery Power State characteristic UUID. */ 00077 #define BLE_UUID_REMOVABLE_CHAR 0x2A3A /**< Removable characteristic UUID. */ 00078 #define BLE_UUID_SERVICE_REQUIRED_CHAR 0x2A3B /**< Service Required characteristic UUID. */ 00079 #define BLE_UUID_ALERT_CATEGORY_ID_CHAR 0x2A43 /**< Alert Category Id characteristic UUID. */ 00080 #define BLE_UUID_ALERT_CATEGORY_ID_BIT_MASK_CHAR 0x2A42 /**< Alert Category Id Bit Mask characteristic UUID. */ 00081 #define BLE_UUID_ALERT_LEVEL_CHAR 0x2A06 /**< Alert Level characteristic UUID. */ 00082 #define BLE_UUID_ALERT_NOTIFICATION_CONTROL_POINT_CHAR 0x2A44 /**< Alert Notification Control Point characteristic UUID. */ 00083 #define BLE_UUID_ALERT_STATUS_CHAR 0x2A3F /**< Alert Status characteristic UUID. */ 00084 #define BLE_UUID_BATTERY_LEVEL_CHAR 0x2A19 /**< Battery Level characteristic UUID. */ 00085 #define BLE_UUID_BLOOD_PRESSURE_FEATURE_CHAR 0x2A49 /**< Blood Pressure Feature characteristic UUID. */ 00086 #define BLE_UUID_BLOOD_PRESSURE_MEASUREMENT_CHAR 0x2A35 /**< Blood Pressure Measurement characteristic UUID. */ 00087 #define BLE_UUID_BODY_SENSOR_LOCATION_CHAR 0x2A38 /**< Body Sensor Location characteristic UUID. */ 00088 #define BLE_UUID_BOOT_KEYBOARD_INPUT_REPORT_CHAR 0x2A22 /**< Boot Keyboard Input Report characteristic UUID. */ 00089 #define BLE_UUID_BOOT_KEYBOARD_OUTPUT_REPORT_CHAR 0x2A32 /**< Boot Keyboard Output Report characteristic UUID. */ 00090 #define BLE_UUID_BOOT_MOUSE_INPUT_REPORT_CHAR 0x2A33 /**< Boot Mouse Input Report characteristic UUID. */ 00091 #define BLE_UUID_CURRENT_TIME_CHAR 0x2A2B /**< Current Time characteristic UUID. */ 00092 #define BLE_UUID_DATE_TIME_CHAR 0x2A08 /**< Date Time characteristic UUID. */ 00093 #define BLE_UUID_DAY_DATE_TIME_CHAR 0x2A0A /**< Day Date Time characteristic UUID. */ 00094 #define BLE_UUID_DAY_OF_WEEK_CHAR 0x2A09 /**< Day Of Week characteristic UUID. */ 00095 #define BLE_UUID_DST_OFFSET_CHAR 0x2A0D /**< Dst Offset characteristic UUID. */ 00096 #define BLE_UUID_EXACT_TIME_256_CHAR 0x2A0C /**< Exact Time 256 characteristic UUID. */ 00097 #define BLE_UUID_FIRMWARE_REVISION_STRING_CHAR 0x2A26 /**< Firmware Revision String characteristic UUID. */ 00098 #define BLE_UUID_GLUCOSE_FEATURE_CHAR 0x2A51 /**< Glucose Feature characteristic UUID. */ 00099 #define BLE_UUID_GLUCOSE_MEASUREMENT_CHAR 0x2A18 /**< Glucose Measurement characteristic UUID. */ 00100 #define BLE_UUID_GLUCOSE_MEASUREMENT_CONTEXT_CHAR 0x2A34 /**< Glucose Measurement Context characteristic UUID. */ 00101 #define BLE_UUID_HARDWARE_REVISION_STRING_CHAR 0x2A27 /**< Hardware Revision String characteristic UUID. */ 00102 #define BLE_UUID_HEART_RATE_CONTROL_POINT_CHAR 0x2A39 /**< Heart Rate Control Point characteristic UUID. */ 00103 #define BLE_UUID_HEART_RATE_MEASUREMENT_CHAR 0x2A37 /**< Heart Rate Measurement characteristic UUID. */ 00104 #define BLE_UUID_HID_CONTROL_POINT_CHAR 0x2A4C /**< Hid Control Point characteristic UUID. */ 00105 #define BLE_UUID_HID_INFORMATION_CHAR 0x2A4A /**< Hid Information characteristic UUID. */ 00106 #define BLE_UUID_IEEE_REGULATORY_CERTIFICATION_DATA_LIST_CHAR 0x2A2A /**< IEEE Regulatory Certification Data List characteristic UUID. */ 00107 #define BLE_UUID_INTERMEDIATE_CUFF_PRESSURE_CHAR 0x2A36 /**< Intermediate Cuff Pressure characteristic UUID. */ 00108 #define BLE_UUID_INTERMEDIATE_TEMPERATURE_CHAR 0x2A1E /**< Intermediate Temperature characteristic UUID. */ 00109 #define BLE_UUID_LOCAL_TIME_INFORMATION_CHAR 0x2A0F /**< Local Time Information characteristic UUID. */ 00110 #define BLE_UUID_MANUFACTURER_NAME_STRING_CHAR 0x2A29 /**< Manufacturer Name String characteristic UUID. */ 00111 #define BLE_UUID_MEASUREMENT_INTERVAL_CHAR 0x2A21 /**< Measurement Interval characteristic UUID. */ 00112 #define BLE_UUID_MODEL_NUMBER_STRING_CHAR 0x2A24 /**< Model Number String characteristic UUID. */ 00113 #define BLE_UUID_UNREAD_ALERT_CHAR 0x2A45 /**< Unread Alert characteristic UUID. */ 00114 #define BLE_UUID_NEW_ALERT_CHAR 0x2A46 /**< New Alert characteristic UUID. */ 00115 #define BLE_UUID_PNP_ID_CHAR 0x2A50 /**< PNP Id characteristic UUID. */ 00116 #define BLE_UUID_PROTOCOL_MODE_CHAR 0x2A4E /**< Protocol Mode characteristic UUID. */ 00117 #define BLE_UUID_RECORD_ACCESS_CONTROL_POINT_CHAR 0x2A52 /**< Record Access Control Point characteristic UUID. */ 00118 #define BLE_UUID_REFERENCE_TIME_INFORMATION_CHAR 0x2A14 /**< Reference Time Information characteristic UUID. */ 00119 #define BLE_UUID_REPORT_CHAR 0x2A4D /**< Report characteristic UUID. */ 00120 #define BLE_UUID_REPORT_MAP_CHAR 0x2A4B /**< Report Map characteristic UUID. */ 00121 #define BLE_UUID_RINGER_CONTROL_POINT_CHAR 0x2A40 /**< Ringer Control Point characteristic UUID. */ 00122 #define BLE_UUID_RINGER_SETTING_CHAR 0x2A41 /**< Ringer Setting characteristic UUID. */ 00123 #define BLE_UUID_SCAN_INTERVAL_WINDOW_CHAR 0x2A4F /**< Scan Interval Window characteristic UUID. */ 00124 #define BLE_UUID_SCAN_REFRESH_CHAR 0x2A31 /**< Scan Refresh characteristic UUID. */ 00125 #define BLE_UUID_SERIAL_NUMBER_STRING_CHAR 0x2A25 /**< Serial Number String characteristic UUID. */ 00126 #define BLE_UUID_SOFTWARE_REVISION_STRING_CHAR 0x2A28 /**< Software Revision String characteristic UUID. */ 00127 #define BLE_UUID_SUPPORTED_NEW_ALERT_CATEGORY_CHAR 0x2A47 /**< Supported New Alert Category characteristic UUID. */ 00128 #define BLE_UUID_SUPPORTED_UNREAD_ALERT_CATEGORY_CHAR 0x2A48 /**< Supported Unread Alert Category characteristic UUID. */ 00129 #define BLE_UUID_SYSTEM_ID_CHAR 0x2A23 /**< System Id characteristic UUID. */ 00130 #define BLE_UUID_TEMPERATURE_MEASUREMENT_CHAR 0x2A1C /**< Temperature Measurement characteristic UUID. */ 00131 #define BLE_UUID_TEMPERATURE_TYPE_CHAR 0x2A1D /**< Temperature Type characteristic UUID. */ 00132 #define BLE_UUID_TIME_ACCURACY_CHAR 0x2A12 /**< Time Accuracy characteristic UUID. */ 00133 #define BLE_UUID_TIME_SOURCE_CHAR 0x2A13 /**< Time Source characteristic UUID. */ 00134 #define BLE_UUID_TIME_UPDATE_CONTROL_POINT_CHAR 0x2A16 /**< Time Update Control Point characteristic UUID. */ 00135 #define BLE_UUID_TIME_UPDATE_STATE_CHAR 0x2A17 /**< Time Update State characteristic UUID. */ 00136 #define BLE_UUID_TIME_WITH_DST_CHAR 0x2A11 /**< Time With Dst characteristic UUID. */ 00137 #define BLE_UUID_TIME_ZONE_CHAR 0x2A0E /**< Time Zone characteristic UUID. */ 00138 #define BLE_UUID_TX_POWER_LEVEL_CHAR 0x2A07 /**< TX Power Level characteristic UUID. */ 00139 #define BLE_UUID_CSC_FEATURE_CHAR 0x2A5C /**< Cycling Speed and Cadence Feature characteristic UUID. */ 00140 #define BLE_UUID_CSC_MEASUREMENT_CHAR 0x2A5B /**< Cycling Speed and Cadence Measurement characteristic UUID. */ 00141 #define BLE_UUID_RSC_FEATURE_CHAR 0x2A54 /**< Running Speed and Cadence Feature characteristic UUID. */ 00142 #define BLE_UUID_SC_CTRLPT_CHAR 0x2A55 /**< Speed and Cadence Control Point UUID. */ 00143 #define BLE_UUID_RSC_MEASUREMENT_CHAR 0x2A53 /**< Running Speed and Cadence Measurement characteristic UUID. */ 00144 #define BLE_UUID_SENSOR_LOCATION_CHAR 0x2A5D /**< Sensor Location characteristic UUID. */ 00145 #define BLE_UUID_EXTERNAL_REPORT_REF_DESCR 0x2907 /**< External Report Reference descriptor UUID. */ 00146 #define BLE_UUID_REPORT_REF_DESCR 0x2908 /**< Report Reference descriptor UUID. */ 00147 /** @} */ 00148 00149 /** @defgroup ALERT_LEVEL_VALUES Definitions for the Alert Level characteristic values 00150 * @{ */ 00151 #define BLE_CHAR_ALERT_LEVEL_NO_ALERT 0x00 /**< No Alert. */ 00152 #define BLE_CHAR_ALERT_LEVEL_MILD_ALERT 0x01 /**< Mild Alert. */ 00153 #define BLE_CHAR_ALERT_LEVEL_HIGH_ALERT 0x02 /**< High Alert. */ 00154 /** @} */ 00155 00156 #define BLE_SRV_ENCODED_REPORT_REF_LEN 2 /**< The length of an encoded Report Reference Descriptor. */ 00157 #define BLE_CCCD_VALUE_LEN 2 /**< The length of a CCCD value. */ 00158 00159 /**@brief Type definition for error handler function which will be called in case of an error in 00160 * a service or a service library module. */ 00161 typedef void (*ble_srv_error_handler_t) (uint32_t nrf_error); 00162 00163 /**@brief Value of a Report Reference descriptor. 00164 * 00165 * @details This is mapping information which maps the parent characteristic to the Report ID(s) and 00166 * Report Type(s) defined within a Report Map characteristic. 00167 */ 00168 typedef struct 00169 { 00170 uint8_t report_id; /**< Non-zero value if these is more than one instance of the same Report Type */ 00171 uint8_t report_type; /**< Type of Report characteristic @if (SD_S110) (see @ref BLE_HIDS_REPORT_TYPE) @endif */ 00172 } ble_srv_report_ref_t; 00173 00174 /**@brief UTF-8 string data type. 00175 * 00176 * @note The type can only hold a pointer to the string data (i.e. not the actual data). 00177 */ 00178 typedef struct 00179 { 00180 uint16_t length; /**< String length. */ 00181 uint8_t * p_str; /**< String data. */ 00182 } ble_srv_utf8_str_t; 00183 00184 /**@brief Security settings structure. 00185 * @details This structure contains the security options needed during initialization of the 00186 * service. 00187 */ 00188 typedef struct 00189 { 00190 ble_gap_conn_sec_mode_t read_perm; /**< Read permissions. */ 00191 ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ 00192 } ble_srv_security_mode_t; 00193 00194 /**@brief Security settings structure. 00195 * @details This structure contains the security options needed during initialization of the 00196 * service. It can be used when the charecteristics contains cccd. 00197 */ 00198 typedef struct 00199 { 00200 ble_gap_conn_sec_mode_t cccd_write_perm; 00201 ble_gap_conn_sec_mode_t read_perm; /**< Read permissions. */ 00202 ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ 00203 } ble_srv_cccd_security_mode_t; 00204 00205 /**@brief Function for decoding a CCCD value, and then testing if notification is 00206 * enabled. 00207 * 00208 * @param[in] p_encoded_data Buffer where the encoded CCCD is stored. 00209 * 00210 * @return TRUE if notification is enabled, FALSE otherwise. 00211 */ 00212 static __INLINE bool ble_srv_is_notification_enabled(uint8_t * p_encoded_data) 00213 { 00214 uint16_t cccd_value = uint16_decode(p_encoded_data); 00215 return ((cccd_value & BLE_GATT_HVX_NOTIFICATION) != 0); 00216 } 00217 00218 /**@brief Function for decoding a CCCD value, and then testing if indication is 00219 * enabled. 00220 * 00221 * @param[in] p_encoded_data Buffer where the encoded CCCD is stored. 00222 * 00223 * @return TRUE if indication is enabled, FALSE otherwise. 00224 */ 00225 static __INLINE bool ble_srv_is_indication_enabled(uint8_t * p_encoded_data) 00226 { 00227 uint16_t cccd_value = uint16_decode(p_encoded_data); 00228 return ((cccd_value & BLE_GATT_HVX_INDICATION) != 0); 00229 } 00230 00231 /**@brief Function for encoding a Report Reference Descriptor. 00232 * 00233 * @param[in] p_encoded_buffer The buffer of the encoded data. 00234 * @param[in] p_report_ref Report Reference value to be encoded. 00235 * 00236 * @return Length of the encoded data. 00237 */ 00238 uint8_t ble_srv_report_ref_encode(uint8_t * p_encoded_buffer, 00239 const ble_srv_report_ref_t * p_report_ref); 00240 00241 /**@brief Function for making UTF-8 structure refer to an ASCII string. 00242 * 00243 * @param[out] p_utf8 UTF-8 structure to be set. 00244 * @param[in] p_ascii ASCII string to be referred to. 00245 */ 00246 void ble_srv_ascii_to_utf8(ble_srv_utf8_str_t * p_utf8, char * p_ascii); 00247 00248 #endif // BLE_SRV_COMMON_H__ 00249 00250 /** @} */
Generated on Tue Jul 12 2022 21:00:16 by
