initial commit
This commit is contained in:
Vendored
+113
@@ -0,0 +1,113 @@
|
||||
/*************************************************************************************************/
|
||||
/*!
|
||||
* \file
|
||||
*
|
||||
* \brief Running Speed and Cadence Profile API.
|
||||
*
|
||||
* Copyright (c) 2016-2018 Arm Ltd.
|
||||
*
|
||||
* Copyright (c) 2019 Packetcraft, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
/*************************************************************************************************/
|
||||
|
||||
#ifndef RSCP_API_H
|
||||
#define RSCP_API_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*! \addtogroup RUNNING_SPEED_AND_CADENCE_PROFILE
|
||||
* \{ */
|
||||
|
||||
/**************************************************************************************************
|
||||
Macros
|
||||
**************************************************************************************************/
|
||||
|
||||
/** \name Running Speed and Cadence Measurement Parameter Types
|
||||
*
|
||||
*/
|
||||
/**@{*/
|
||||
#define RSCP_SM_PARAM_SPEED 0 /*!< \brief Instantaneous Speed */
|
||||
#define RSCP_SM_PARAM_CADENCE 1 /*!< \brief Instantaneous Cadence */
|
||||
#define RSCP_SM_PARAM_STRIDE_LENGTH 2 /*!< \brief Instantaneous Stride Length */
|
||||
#define RSCP_SM_PARAM_TOTAL_DISTANCE 3 /*!< \brief Total Distance */
|
||||
#define RSCP_SM_PARAM_STATUS 4 /*!< \brief Walking or Running Status (0: walking, 1: running) */
|
||||
/**@}*/
|
||||
|
||||
/** \name Running Speed and Cadence Running Status Values
|
||||
*
|
||||
*/
|
||||
/**@{*/
|
||||
#define RSCP_SM_STATUS_WALKING 0 /*!< \brief Walking */
|
||||
#define RSCP_SM_STATUS_RUNNING 1 /*!< \brief Running */
|
||||
/**@}*/
|
||||
|
||||
/**************************************************************************************************
|
||||
Function Declarations
|
||||
**************************************************************************************************/
|
||||
|
||||
/*************************************************************************************************/
|
||||
/*!
|
||||
* \brief Set a running speed measurement parameter.
|
||||
*
|
||||
* \param type Parameter identifier
|
||||
* \param value Measurement value.
|
||||
*
|
||||
* \return none
|
||||
*/
|
||||
/*************************************************************************************************/
|
||||
void RscpsSetParameter(uint8_t type, uint32_t value);
|
||||
|
||||
/*************************************************************************************************/
|
||||
/*!
|
||||
* \brief Set the sensor location attribute.
|
||||
*
|
||||
* \param location Sensor Location.
|
||||
*
|
||||
* \return none
|
||||
*/
|
||||
/*************************************************************************************************/
|
||||
void RscpsSetSensorLocation(uint8_t location);
|
||||
|
||||
/*************************************************************************************************/
|
||||
/*!
|
||||
* \brief Set the features attribute.
|
||||
*
|
||||
* \param features Features bitmask.
|
||||
*
|
||||
* \return none
|
||||
*/
|
||||
/*************************************************************************************************/
|
||||
void RscpsSetFeatures(uint16_t features);
|
||||
|
||||
/*************************************************************************************************/
|
||||
/*!
|
||||
* \brief Notifies the collector of a Running Speed and Cadence Measurement.
|
||||
*
|
||||
* \param connId Connection ID
|
||||
*
|
||||
* \return none
|
||||
*/
|
||||
/*************************************************************************************************/
|
||||
void RscpsSendSpeedMeasurement(dmConnId_t connId);
|
||||
|
||||
/*! \} */ /* RUNNING_SPEED_AND_CADENCE_PROFILE */
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif /* RSCP_API_H */
|
||||
ambiq-hal-sys/ambiq-sparkfun-sdk/third_party/exactle/ble-profiles/sources/profiles/rscp/rscps_main.c
Vendored
+198
@@ -0,0 +1,198 @@
|
||||
/*************************************************************************************************/
|
||||
/*!
|
||||
* \file
|
||||
*
|
||||
* \brief Running Speed and Cadence Profile Sensor Implementation.
|
||||
*
|
||||
* Copyright (c) 2016-2018 Arm Ltd.
|
||||
*
|
||||
* Copyright (c) 2019 Packetcraft, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
/*************************************************************************************************/
|
||||
|
||||
#include <string.h>
|
||||
#include "wsf_types.h"
|
||||
#include "wsf_assert.h"
|
||||
#include "wsf_trace.h"
|
||||
#include "util/bstream.h"
|
||||
#include "dm_api.h"
|
||||
#include "svc_rscs.h"
|
||||
#include "svc_ch.h"
|
||||
#include "rscp_api.h"
|
||||
|
||||
/*************************************************************************************************
|
||||
* Constant Definitions
|
||||
*************************************************************************************************/
|
||||
|
||||
/*! \brief The maximum length of a power measurement */
|
||||
#define RSCPS_PM_MAX_LEN 10
|
||||
|
||||
/*! \brief Running Speed Measurement Flag Indicies */
|
||||
enum
|
||||
{
|
||||
RSCPS_ISLP_FLAG_INDEX, /*! \brief Instantaneous Stride Length Present Present */
|
||||
RSCPS_TDP_FLAG_INDEX, /*! \brief Total Distance Present */
|
||||
RSCPS_WRS_FLAG_INDEX, /*! \brief Walking or Running Status bits */
|
||||
RSCPS_NUM_FLAGS
|
||||
};
|
||||
|
||||
/**************************************************************************************************
|
||||
Data Types
|
||||
**************************************************************************************************/
|
||||
|
||||
/*! \brief Running Speed Measurement Data */
|
||||
typedef struct
|
||||
{
|
||||
uint8_t flags; /*! \brief Speed Measurement Flags */
|
||||
uint16_t speed; /*! \brief Instantaneous Speed */
|
||||
uint8_t cadence; /*! \brief Instantaneous Cadence */
|
||||
uint16_t stride; /*! \brief Instantaneous Stride Length */
|
||||
uint32_t distance; /*! \brief Total Distance */
|
||||
} rscpSmData_t;
|
||||
|
||||
/**************************************************************************************************
|
||||
Local Variables
|
||||
**************************************************************************************************/
|
||||
|
||||
/*! \brief Measurement data */
|
||||
rscpSmData_t rscpSmData;
|
||||
|
||||
/*************************************************************************************************/
|
||||
/*!
|
||||
* \brief Set the sensor location attribute.
|
||||
*
|
||||
* \param location Sensor Location.
|
||||
*
|
||||
* \return none
|
||||
*/
|
||||
/*************************************************************************************************/
|
||||
void RscpsSetSensorLocation(uint8_t location)
|
||||
{
|
||||
AttsSetAttr(RSCS_SL_HDL, sizeof(uint8_t), &location);
|
||||
}
|
||||
|
||||
/*************************************************************************************************/
|
||||
/*!
|
||||
* \brief Set the features attribute.
|
||||
*
|
||||
* \param features Features bitmask.
|
||||
*
|
||||
* \return none
|
||||
*/
|
||||
/*************************************************************************************************/
|
||||
void RscpsSetFeatures(uint16_t features)
|
||||
{
|
||||
uint8_t tempData[2] = {UINT16_TO_BYTES(features)};
|
||||
AttsSetAttr(RSCS_RSF_HDL, sizeof(tempData), tempData);
|
||||
}
|
||||
|
||||
/*************************************************************************************************/
|
||||
/*!
|
||||
* \brief Set a running speed measurement parameter.
|
||||
*
|
||||
* \param type Parameter identifier
|
||||
* \param value Measurement value.
|
||||
*
|
||||
* \return none
|
||||
*/
|
||||
/*************************************************************************************************/
|
||||
void RscpsSetParameter(uint8_t type, uint32_t value)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case RSCP_SM_PARAM_SPEED:
|
||||
rscpSmData.speed = (uint16_t) value;
|
||||
break;
|
||||
|
||||
case RSCP_SM_PARAM_CADENCE:
|
||||
rscpSmData.cadence = (uint8_t) value;
|
||||
break;
|
||||
|
||||
case RSCP_SM_PARAM_STRIDE_LENGTH:
|
||||
rscpSmData.flags |= (1 << RSCPS_ISLP_FLAG_INDEX);
|
||||
rscpSmData.stride = (uint16_t) value;
|
||||
break;
|
||||
|
||||
case RSCP_SM_PARAM_TOTAL_DISTANCE:
|
||||
rscpSmData.flags |= (1 << RSCPS_TDP_FLAG_INDEX);
|
||||
rscpSmData.distance = value;
|
||||
break;
|
||||
|
||||
case RSCP_SM_PARAM_STATUS:
|
||||
if (value)
|
||||
{
|
||||
rscpSmData.flags |= (1 << RSCPS_WRS_FLAG_INDEX);
|
||||
}
|
||||
else
|
||||
{
|
||||
rscpSmData.flags &= ~(1 << RSCPS_WRS_FLAG_INDEX);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*************************************************************************************************/
|
||||
/*!
|
||||
* \brief Notifies the collector of a Cycle Speed Measurement.
|
||||
*
|
||||
* \param connId Connection ID
|
||||
*
|
||||
* \return none
|
||||
*/
|
||||
/*************************************************************************************************/
|
||||
void RscpsSendSpeedMeasurement(dmConnId_t connId)
|
||||
{
|
||||
int8_t i;
|
||||
uint16_t len;
|
||||
uint8_t msg[RSCPS_PM_MAX_LEN];
|
||||
uint8_t *p = msg;
|
||||
|
||||
/* Add manditory parameters */
|
||||
UINT8_TO_BSTREAM(p, rscpSmData.flags);
|
||||
UINT16_TO_BSTREAM(p, rscpSmData.speed);
|
||||
UINT8_TO_BSTREAM(p, rscpSmData.cadence);
|
||||
|
||||
/* Add optional parameters */
|
||||
for (i = 0; i < RSCPS_NUM_FLAGS; i++)
|
||||
{
|
||||
if (rscpSmData.flags & (1 << i))
|
||||
{
|
||||
switch (i)
|
||||
{
|
||||
case RSCPS_ISLP_FLAG_INDEX:
|
||||
UINT16_TO_BSTREAM(p, rscpSmData.stride);
|
||||
break;
|
||||
case RSCPS_TDP_FLAG_INDEX:
|
||||
UINT32_TO_BSTREAM(p, rscpSmData.distance);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Calculate message length */
|
||||
len = (uint16_t) (p - msg);
|
||||
|
||||
/* Transmit notification */
|
||||
AttsHandleValueNtf(connId, RSCS_RSM_HDL, len, msg);
|
||||
|
||||
/* Clear the measurement data */
|
||||
memset(&rscpSmData, 0, sizeof(rscpSmData));
|
||||
}
|
||||
Reference in New Issue
Block a user