1*042d53a7SEvalZero /* 2*042d53a7SEvalZero * Licensed to the Apache Software Foundation (ASF) under one 3*042d53a7SEvalZero * or more contributor license agreements. See the NOTICE file 4*042d53a7SEvalZero * distributed with this work for additional information 5*042d53a7SEvalZero * regarding copyright ownership. The ASF licenses this file 6*042d53a7SEvalZero * to you under the Apache License, Version 2.0 (the 7*042d53a7SEvalZero * "License"); you may not use this file except in compliance 8*042d53a7SEvalZero * with the License. You may obtain a copy of the License at 9*042d53a7SEvalZero * 10*042d53a7SEvalZero * http://www.apache.org/licenses/LICENSE-2.0 11*042d53a7SEvalZero * 12*042d53a7SEvalZero * Unless required by applicable law or agreed to in writing, 13*042d53a7SEvalZero * software distributed under the License is distributed on an 14*042d53a7SEvalZero * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15*042d53a7SEvalZero * KIND, either express or implied. See the License for the 16*042d53a7SEvalZero * specific language governing permissions and limitations 17*042d53a7SEvalZero * under the License. 18*042d53a7SEvalZero */ 19*042d53a7SEvalZero 20*042d53a7SEvalZero #ifndef H_BLECSC_SENSOR_ 21*042d53a7SEvalZero #define H_BLECSC_SENSOR_ 22*042d53a7SEvalZero 23*042d53a7SEvalZero #include "modlog/modlog.h" 24*042d53a7SEvalZero #include "nimble/ble.h" 25*042d53a7SEvalZero 26*042d53a7SEvalZero #ifdef __cplusplus 27*042d53a7SEvalZero extern "C" { 28*042d53a7SEvalZero #endif 29*042d53a7SEvalZero 30*042d53a7SEvalZero /* Cycling Speed and Cadence configuration */ 31*042d53a7SEvalZero #define GATT_CSC_UUID 0x1816 32*042d53a7SEvalZero #define GATT_CSC_MEASUREMENT_UUID 0x2A5B 33*042d53a7SEvalZero #define GATT_CSC_FEATURE_UUID 0x2A5C 34*042d53a7SEvalZero #define GATT_SENSOR_LOCATION_UUID 0x2A5D 35*042d53a7SEvalZero #define GATT_SC_CONTROL_POINT_UUID 0x2A55 36*042d53a7SEvalZero /* Device Information configuration */ 37*042d53a7SEvalZero #define GATT_DEVICE_INFO_UUID 0x180A 38*042d53a7SEvalZero #define GATT_MANUFACTURER_NAME_UUID 0x2A29 39*042d53a7SEvalZero #define GATT_MODEL_NUMBER_UUID 0x2A24 40*042d53a7SEvalZero 41*042d53a7SEvalZero /*CSC Measurement flags*/ 42*042d53a7SEvalZero #define CSC_MEASUREMENT_WHEEL_REV_PRESENT 0x01 43*042d53a7SEvalZero #define CSC_MEASUREMENT_CRANK_REV_PRESENT 0x02 44*042d53a7SEvalZero 45*042d53a7SEvalZero /* CSC feature flags */ 46*042d53a7SEvalZero #define CSC_FEATURE_WHEEL_REV_DATA 0x01 47*042d53a7SEvalZero #define CSC_FEATURE_CRANK_REV_DATA 0x02 48*042d53a7SEvalZero #define CSC_FEATURE_MULTIPLE_SENSOR_LOC 0x04 49*042d53a7SEvalZero 50*042d53a7SEvalZero /* Sensor location enum */ 51*042d53a7SEvalZero #define SENSOR_LOCATION_OTHER 0 52*042d53a7SEvalZero #define SENSOR_LOCATION_TOP_OF_SHOE 1 53*042d53a7SEvalZero #define SENSOR_LOCATION_IN_SHOE 2 54*042d53a7SEvalZero #define SENSOR_LOCATION_HIP 3 55*042d53a7SEvalZero #define SENSOR_LOCATION_FRONT_WHEEL 4 56*042d53a7SEvalZero #define SENSOR_LOCATION_LEFT_CRANK 5 57*042d53a7SEvalZero #define SENSOR_LOCATION_RIGHT_CRANK 6 58*042d53a7SEvalZero #define SENSOR_LOCATION_LEFT_PEDAL 7 59*042d53a7SEvalZero #define SENSOR_LOCATION_RIGHT_PEDAL 8 60*042d53a7SEvalZero #define SENSOR_LOCATION_FROT_HUB 9 61*042d53a7SEvalZero #define SENSOR_LOCATION_REAR_DROPOUT 10 62*042d53a7SEvalZero #define SENSOR_LOCATION_CHAINSTAY 11 63*042d53a7SEvalZero #define SENSOR_LOCATION_REAR_WHEEL 12 64*042d53a7SEvalZero #define SENSOR_LOCATION_REAR_HUB 13 65*042d53a7SEvalZero #define SENSOR_LOCATION_CHEST 14 66*042d53a7SEvalZero #define SENSOR_LOCATION_SPIDER 15 67*042d53a7SEvalZero #define SENSOR_LOCATION_CHAIN_RING 16 68*042d53a7SEvalZero 69*042d53a7SEvalZero /* SC Control Point op codes */ 70*042d53a7SEvalZero #define SC_CP_OP_SET_CUMULATIVE_VALUE 1 71*042d53a7SEvalZero #define SC_CP_OP_START_SENSOR_CALIBRATION 2 72*042d53a7SEvalZero #define SC_CP_OP_UPDATE_SENSOR_LOCATION 3 73*042d53a7SEvalZero #define SC_CP_OP_REQ_SUPPORTED_SENSOR_LOCATIONS 4 74*042d53a7SEvalZero #define SC_CP_OP_RESPONSE 16 75*042d53a7SEvalZero 76*042d53a7SEvalZero /*SC Control Point response values */ 77*042d53a7SEvalZero #define SC_CP_RESPONSE_SUCCESS 1 78*042d53a7SEvalZero #define SC_CP_RESPONSE_OP_NOT_SUPPORTED 2 79*042d53a7SEvalZero #define SC_CP_RESPONSE_INVALID_PARAM 3 80*042d53a7SEvalZero #define SC_CP_RESPONSE_OP_FAILED 4 81*042d53a7SEvalZero 82*042d53a7SEvalZero /* CSC simulation configuration */ 83*042d53a7SEvalZero #define CSC_FEATURES (CSC_FEATURE_WHEEL_REV_DATA | \ 84*042d53a7SEvalZero CSC_FEATURE_CRANK_REV_DATA |\ 85*042d53a7SEvalZero CSC_FEATURE_MULTIPLE_SENSOR_LOC) 86*042d53a7SEvalZero 87*042d53a7SEvalZero struct ble_csc_measurement_state { 88*042d53a7SEvalZero uint32_t cumulative_wheel_rev; 89*042d53a7SEvalZero uint16_t last_wheel_evt_time; 90*042d53a7SEvalZero uint16_t cumulative_crank_rev; 91*042d53a7SEvalZero uint16_t last_crank_evt_time; 92*042d53a7SEvalZero }; 93*042d53a7SEvalZero 94*042d53a7SEvalZero extern uint16_t csc_measurement_handle; 95*042d53a7SEvalZero extern uint16_t csc_control_point_handle; 96*042d53a7SEvalZero 97*042d53a7SEvalZero int gatt_svr_init(struct ble_csc_measurement_state * csc_measurement_state); 98*042d53a7SEvalZero int gatt_svr_chr_notify_csc_measurement(uint16_t conn_handle); 99*042d53a7SEvalZero void gatt_svr_set_cp_indicate(uint8_t indication_status); 100*042d53a7SEvalZero 101*042d53a7SEvalZero #ifdef __cplusplus 102*042d53a7SEvalZero } 103*042d53a7SEvalZero #endif 104*042d53a7SEvalZero 105*042d53a7SEvalZero #endif 106