Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Flipper-Zero/STM32CubeWB.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Middlewares/ST/STM32_WPAN/ble/mesh/MeshModel/Inc/sensors.h')
-rw-r--r--Middlewares/ST/STM32_WPAN/ble/mesh/MeshModel/Inc/sensors.h403
1 files changed, 236 insertions, 167 deletions
diff --git a/Middlewares/ST/STM32_WPAN/ble/mesh/MeshModel/Inc/sensors.h b/Middlewares/ST/STM32_WPAN/ble/mesh/MeshModel/Inc/sensors.h
index 09b1c6926..793091707 100644
--- a/Middlewares/ST/STM32_WPAN/ble/mesh/MeshModel/Inc/sensors.h
+++ b/Middlewares/ST/STM32_WPAN/ble/mesh/MeshModel/Inc/sensors.h
@@ -25,208 +25,277 @@
#include "types.h"
#include "ble_mesh.h"
-/* Exported macro ------------------------------------------------------------*/
+/* Exported types ------------------------------------------------------------*/
-/******************************************************************************/
-/********** Following Section defines the Opcodes for the Messages ************/
-/******************************************************************************/
-/* Sensors Property ID */
-#define TEMPERATURE_PID 0x0071
-#define PRESSURE_PID 0x2A6D
-#define HUMIDITY_PID 0x2A6F
-#define TIME_OF_FLIGHT_PID 0X2A7F
-#define MAGNETO_METER_PID 0x2AA1
-#define ACCELERO_METER_PID 0x2BA1
-#define GYROSCOPE_PID 0x2BA2
-#define VOLTAGE_PID 0x0005
-#define CURRENT_PID 0x0004
-#define POWER_FACTOR_PID 0x0072
-#define ACTIVE_POWER_PID 0x0073
-#define REACTIVE_POWER_PID 0x0074
-#define APPARENT_POWER_PID 0x0075
-#define ACTIVE_ENERGY_PID 0x0083
-#define REACTIVE_ENERGY_PID 0x0084
-#define APPARENT_ENERGY_PID 0x0085
-
-
-/* 7.1 Messages summary Page 300 */
-/* Sensor Server Model Opcode */
-#define SENSOR_DESCRIPTOR_GET 0x8230U
-#define SENSOR_DESCRIPTOR_STATUS 0X51U
-#define SENSOR_GET 0X8231U
-#define SENSOR_STATUS 0X52U
-#define SENSOR_COLUMN_GET 0X8232U
-#define SENSOR_COLUMN_STATUS 0X53U
-#define SENSOR_SERIES_GET 0X8233U
-#define SENSOR_SERIES_STATUS 0X54U
-
-/* Sensor Setup Server Model Opcode */
-#define SENSOR_CADENCE_GET 0X8234U
-#define SENSOR_CADENCE_SET 0X55U
-#define SENSOR_CADENCE_SET_UNACK 0X56U
-#define SENSOR_CADENCE_STATUS 0X57U
-#define SENSOR_SETTING_GET 0X8235U
-#define SENSOR_SETTING_STATUS_PID 0X58U
-#define SENSOR_SETTING_GET_SETTING_ID 0X8236U
-#define SENSOR_SETTING_SET 0X59U
-#define SENSOR_SETTING_SET_UNACK 0X5AU
-#define SENSOR_SETTING_STATUS_SETTING_ID 0X5BU
-
-/******************************************************************************/
-/********** Following Section defines the SIG MODEL IDs ************/
-/******************************************************************************/
-
-#define SENSOR_SERVER_MODEL_ID 0x1100U /* sensor server */
-#define SENSOR_SETUP_SERVER_MODEL_ID 0x1101U /* sensor setup server*/
-#define SENSOR_CLIENT_MODEL_ID 0x1102U /* Sensor Client */
-
-/******************************************************************************/
-/********** SIG MODEL IDs ends ************/
-/******************************************************************************/
-/***********Publsh Period For the Sensor **************************************/
-#define SENSOR_PUBLISH_PERIOD 10000
-#define SENSOR_SERIES_VALUE 4
-/*
- structure for the Property id for the sensors Present inside the firmware.
-*/
-#pragma pack(4)
+/**
+* This structure contains sensor cadence callback parameters
+*/
typedef struct
{
- MOBLEUINT16 Property_ID;
-} MODEL_Property_IDTableParam_t;
+ MOBLEUINT16 property_ID;
+ MOBLEUINT8 fastCadenceDevisor;
+ MOBLEUINT8 statusTriggerType;
+ MOBLEUINT32 triggerDeltaDown;
+ MOBLEUINT32 triggerDeltaUp;
+ MOBLEUINT8 statusMinInterval;
+ MOBLEUINT32 fastCadenceLow;
+ MOBLEUINT32 fastCadenceHigh;
+}sensor_CadenceCbParam_t;
-#pragma pack(4)
-/* Sensor Cadence Parameters */
-typedef struct
-{
- MOBLEUINT16 Property_ID;
- MOBLEUINT8 FastCadenceDevisor;
- MOBLEUINT8 StatusTriggerType;
- MOBLEUINT8 triggerDeltaDown;
- MOBLEUINT8 triggerDeltaUp;
- MOBLEUINT8 StatusMinInterval;
- MOBLEUINT16 FastCadenceLow;
- MOBLEUINT16 FastCadenceHigh;
-}Sensor_CadenceParam_t;
-
-/* Sensor Setting Parameters */
-#pragma pack(1)
+/**
+* This structure contains sensor settings callback parameters
+*/
typedef struct
{
- MOBLEUINT16 Property_ID;
- MOBLEUINT16 Sensor_Setting_ID;
- MOBLEUINT8 Sensor_Setting_Access;
- MOBLEUINT16 Sensor_Setting_Value;
-}Sensor_SettingParam_t;
-
-/* Sensor Coloumn Parameters */
-#pragma pack(1)
+ MOBLEUINT16 propertyId;
+ MOBLEUINT16 settingPropertyId;
+}sensor_SettingsCbParams_t;
+
+/**
+* This structure contains sensor setting callback parameters
+*/
typedef struct
{
- MOBLEUINT16 Property_ID;
- MOBLEUINT16 RawValueX;
- MOBLEUINT16 RawValueWidth;
- MOBLEUINT16 RawValueY;
-}Sensor_ColumnParam_t;
+ MOBLEUINT16 property_ID;
+ MOBLEUINT16 settingPropertyId;
+ MOBLEUINT32 settingRaw;
+ MOBLEUINT8 settingAccess;
+}sensor_SettingCbParams_t;
-/* Sensor Series Parameters*/
+/**
+* This structure contains sensor descriptor callback parameters
+*/
typedef struct
{
- MOBLEUINT16 Property_ID;
- MOBLEUINT16 RawValueX1;
- MOBLEUINT16 RawValueX2;
-
-}Sensor_SeriesParam_t ;
+ MOBLEUINT16 propertyId;
+ MOBLEUINT16 positiveTolerance;
+ MOBLEUINT16 negativeTolerance;
+ MOBLEUINT8 samplingFunction;
+ MOBLEUINT8 measurementPeriod;
+ MOBLEUINT8 updateInterval;
+}sensor_DescriptorCbParams_t;
+/**
+* This structure contains sensor column callback parameters
+*/
+typedef struct
+{
+ MOBLEUINT16 propertyId;
+ MOBLEUINT32 rawValueX;
+ MOBLEUINT8 data[8];
+ MOBLEUINT8 dataLength;
+}sensor_ColumnCbParams_t;
+/**
+* This structure contains sensor series callback parameters
+*/
+typedef struct
+{
+ MOBLEUINT16 propertyId;
+ MOBLEUINT32 rawValueX1;
+ MOBLEUINT32 rawValueX2;
+ MOBLEUINT8 data[379];
+ MOBLEUINT16 dataLength;
+}sensor_SeriesCbParams_t;
+/**
+* This structure contains sensor value callback parameters
+*/
typedef struct
{
- /* Pointer to the function Appli_Sensor_Cadence_Set used for callback
- from the middle layer to Application layer
- */
- MOBLE_RESULT (*Sensor_Cadence_Set_cb)(Sensor_CadenceParam_t*, MOBLEUINT16 ,MOBLEUINT32);
-
- /* Pointer to the function Appli_Sensor_Data_Status used for callback
- from the middle layer to Application layer
- */
- MOBLE_RESULT (*Sensor_Data_cb)(MOBLEUINT8*, MOBLEUINT32*, MOBLEUINT16 , MOBLEUINT32);
-
- /* Pointer to the function Appli_Sensor_Descriptor_Status used for callback
- from the middle layer to Application layer
- */
- MOBLE_RESULT (*Sensor_Descriptor_cb)(MOBLEUINT8*, MOBLEUINT32* , MOBLEUINT16 , MOBLEUINT32);
-
+ MOBLEUINT16 propertyId;
+ MOBLEUINT8 data[128];
+}sensor_ValueCbParams_t;
-
- /* Pointer to the function Appli_Sensor_Setting_Set used for callback
- from the middle layer to Application layer
- */
- // MOBLE_RESULT (*Sensor_Setting_Set_cb)(Sensor_SettingParam_t*, MOBLEUINT8,MOBLEUINT16);
- MOBLE_RESULT (*Sensor_Setting_Set_cb)(Sensor_SettingParam_t*,MOBLEUINT8,MOBLEUINT16);
-
-
-
- MOBLE_RESULT (*Sensor_Column_cb)(MOBLEUINT8*,MOBLEUINT32*,MOBLEUINT16,MOBLEUINT32);
-
- MOBLE_RESULT (*Sensor_Series_cb)(MOBLEUINT8*,MOBLEUINT32*,MOBLEUINT16,MOBLEUINT32);
-
-
-} Appli_Sensor_cb_t;
+/**
+* Enum for status trigger type
+*/
+typedef enum
+{
+ STATUS_TRIGGER_TYPE_VALUE = 0,
+ STATUS_TRIGGER_TYPE_PC
+} status_trigger_type_e;
+/**
+* Enum for status trigger delta
+*/
+typedef enum
+{
+ STATUS_TRIGGER_DELTA_DOWN = 0,
+ STATUS_TRIGGER_DELTA_UP
+} status_trigger_delta_e;
-/* function pointer for application to get the value from application to middle
- layer file
+/**
+* structure of sensor server function pointers callback
*/
-
typedef struct
{
-// MOBLE_RESULT (*GetSettingStatus_cb)(MOBLEUINT8*);
+ void (*Sensor_CadenceGet_cb)(sensor_CadenceCbParam_t* pCadenceParam,
+ MOBLEUINT32 length,
+ MOBLE_ADDRESS peerAddr,
+ MOBLE_ADDRESS dstPeer,
+ MOBLEUINT8 elementIndex);
+ void (*Sensor_CadenceSet_cb)(sensor_CadenceCbParam_t* pCadenceParam,
+ MOBLEUINT32 length,
+ MOBLE_ADDRESS peerAddr,
+ MOBLE_ADDRESS dstPeer,
+ MOBLEUINT8 elementIndex);
+ void (*Sensor_CadenceSetUnack_cb)(sensor_CadenceCbParam_t* pCadenceParam,
+ MOBLEUINT32 length,
+ MOBLE_ADDRESS peerAddr,
+ MOBLE_ADDRESS dstPeer,
+ MOBLEUINT8 elementIndex);
+ void (*Sensor_SettingsGet_cb)(sensor_SettingsCbParams_t* pSettingsParam,
+ MOBLEUINT32 length,
+ MOBLE_ADDRESS peerAddr,
+ MOBLE_ADDRESS dstPeer,
+ MOBLEUINT8 elementIndex);
+ void (*Sensor_SettingGet_cb)(sensor_SettingCbParams_t* pSettingParam,
+ MOBLEUINT32 length,
+ MOBLE_ADDRESS peerAddr,
+ MOBLE_ADDRESS dstPeer,
+ MOBLEUINT8 elementIndex);
+ void (*Sensor_SettingSet_cb)(sensor_SettingCbParams_t* pSettingParam,
+ MOBLEUINT32 length,
+ MOBLE_ADDRESS peerAddr,
+ MOBLE_ADDRESS dstPeer,
+ MOBLEUINT8 elementIndex);
+ void (*Sensor_SettingSetUnack_cb)(sensor_SettingCbParams_t* pSettingParam,
+ MOBLEUINT32 length,
+ MOBLE_ADDRESS peerAddr,
+ MOBLE_ADDRESS dstPeer,
+ MOBLEUINT8 elementIndex);
+ void (*Sensor_DescriptorGet_cb)(MOBLEUINT8 propID,
+ MOBLEUINT32 length,
+ MOBLE_ADDRESS peerAddr,
+ MOBLE_ADDRESS dstPeer,
+ MOBLEUINT8 elementIndex);
+ void (*Sensor_Get_cb)(MOBLEUINT16 propID,
+ MOBLEUINT32 length,
+ MOBLE_ADDRESS peerAddr,
+ MOBLE_ADDRESS dstPeer,
+ MOBLEUINT8 elementIndex);
+ void (*Sensor_ColumnGet_cb)(sensor_ColumnCbParams_t* pColumnParam,
+ MOBLEUINT32 length,
+ MOBLE_ADDRESS peerAddr,
+ MOBLE_ADDRESS dstPeer,
+ MOBLEUINT8 elementIndex);
+ void (*Sensor_SeriesGet_cb)(sensor_SeriesCbParams_t* pSeriesParam,
+ MOBLEUINT32 length,
+ MOBLE_ADDRESS peerAddr,
+ MOBLE_ADDRESS dstPeer,
+ MOBLEUINT8 elementIndex);
+ MOBLE_RESULT (*Sensor_ReadDescriptor_cb)(MOBLEUINT8 sensorOffset,
+ sensor_DescriptorCbParams_t* pDescriptorParams);
+ MOBLE_RESULT (*Sensor_ReadValue_cb)(MOBLEUINT8 sensorOffset,
+ sensor_ValueCbParams_t* pValueParams);
+ MOBLE_RESULT (*Sensor_ReadColumn_cb)(MOBLEUINT8 sensorOffset,
+ MOBLEUINT8 columnOffset,
+ sensor_ColumnCbParams_t* pColumnParams);
+ MOBLE_RESULT (*Sensor_ReadSeries_cb)(MOBLEUINT8 sensorOffset,
+ sensor_SeriesCbParams_t* pSeriesParams);
+ MOBLEUINT8 (*Sensor_IsFastCadence_cb)(MOBLEUINT8 sensorOffset,
+ void* pFastCadenceLow,
+ void* pFastCadenceHigh);
+ MOBLEUINT8 (*Sensor_IsStatusTrigger_cb)(MOBLEUINT8 sensorOffset,
+ status_trigger_type_e triggerType,
+ void* pDeltaDown,
+ void* pDeltaUp);
+ void (*Sensor_Descriptor_Status_cb)(const MOBLEUINT8 *pDescriptor,
+ MOBLEUINT32 length,
+ MOBLE_ADDRESS dstPeer,
+ MOBLEUINT8 elementIndex);
+ void (*Sensor_Cadence_Status_cb)(const MOBLEUINT8 *pCadence,
+ MOBLEUINT32 length,
+ MOBLE_ADDRESS dstPeer,
+ MOBLEUINT8 elementIndex);
+ void (*Sensor_Settings_Status_cb)(const MOBLEUINT8 *pSettings,
+ MOBLEUINT32 length,
+ MOBLE_ADDRESS dstPeer,
+ MOBLEUINT8 elementIndex);
+ void (*Sensor_Setting_Status_cb)(const MOBLEUINT8 *pSetting,
+ MOBLEUINT32 length,
+ MOBLE_ADDRESS dstPeer,
+ MOBLEUINT8 elementIndex);
+ void (*Sensor_Status_cb)(const MOBLEUINT8 *pStatus,
+ MOBLEUINT32 length,
+ MOBLE_ADDRESS dstPeer,
+ MOBLEUINT8 elementIndex);
+ void (*Sensor_Column_Status_cb)(const MOBLEUINT8 *pColumn,
+ MOBLEUINT32 length,
+ MOBLE_ADDRESS dstPeer,
+ MOBLEUINT8 elementIndex);
+ void (*Sensor_Series_Status_cb)(const MOBLEUINT8 *pSeries,
+ MOBLEUINT32 length,
+ MOBLE_ADDRESS dstPeer,
+ MOBLEUINT8 elementIndex);
+} sensor_server_cb_t;
- MOBLE_RESULT (*GetSetting_IDStatus_cb)(MOBLEUINT8* , MOBLEUINT16);
- // MOBLE_RESULT (*GetSetting_IDStatus_cb)(MOBLEUINT8* ,);
-}Appli_Sensor_GetStatus_cb_t;
-#pragma pack(4)
+extern const sensor_server_cb_t SensorAppli_cb;
-extern const Appli_Sensor_GetStatus_cb_t Appli_Sensor_GetStatus_cb;
-extern const Appli_Sensor_cb_t SensorAppli_cb;
-
-/* Exported Functions Prototypes ---------------------------------------------*/
+/* Exported macro ------------------------------------------------------------*/
+#define SENSOR_POSITIVE_TOLERANCE_UNSPECIFIED 0x000
+#define SENSOR_NEGATIVE_TOLERANCE_UNSPECIFIED 0x000
+#define SENSOR_SAMPLING_FUNC_UNSPECIFIED 0x00
+#define SENSOR_SAMPLING_FUNC_INSTANTANEOUS 0x01
+#define SENSOR_SAMPLING_FUNC_ARITHMETIC_MEAN 0x02
+#define SENSOR_SAMPLING_FUNC_RMS 0x03
+#define SENSOR_SAMPLING_FUNC_MAX 0x04
+#define SENSOR_SAMPLING_FUNC_MIN 0x05
+#define SENSOR_SAMPLING_FUNC_ACCUMULATED 0x06
+#define SENSOR_SAMPLING_FUNC_COUNT 0x07
+#define SENSOR_SAMPLING_FUNC_RFU(x) x>=0x08 ?\
+ MOBLE_TRUE:MOBLE_FALSE
+#define SENSOR_MEASUREMENT_PERIOD_NA 0x00
+#define SENSOR_UPDATE_INTERVAL_NA 0x00
+#define SENSOR_SETTING_PROPERTY_ID_PROHIBITED 0x0000
+#define SENSOR_SETTING_ACCESS_READ 0x01
+#define SENSOR_SETTING_ACCESS_READ_WRITE 0x03
+#define SENSOR_SETTING_ACCESS_PROHIBITED(x) ((x == 0x02)||(x>=0x04)) ?\
+ MOBLE_TRUE:MOBLE_FALSE
+#define SENSOR_STATUS_TRIG_FORMAT_PROP_ID 0b0
+#define SENSOR_STATUS_TRIG_FORMAT_UNITLESS 0b1
+#define SENSOR_FAST_CADENCE_PERIOD_DIV(n) pow(2,n)
+#define SENSOR_FAST_CADENCE_PERIOD_DIV_PROHIBITED(x) \
+ x>=16 ? MOBLE_TRUE:MOBLE_FALSE
+#define SENSOR_STATUS_MIN_INTERVAL_PROHIBITED(x) \
+ x>=27 ? MOBLE_TRUE:MOBLE_FALSE
+#define SENSOR_CADENCE_NOT_SUPPORTED 0
+#define SENSOR_CADENCE_SUPPORTED 1
+#define SENSOR_PROPERTY_ID_LENGTH 2
+
+#define SENSOR_CLIENT_MODEL_ID 0x1102U
-void BLEMesh_SensorModelAppliCb (Appli_Sensor_cb_t* map );
+/* Exported functions ------------------------------------------------------- */
MOBLE_RESULT SensorModelServer_GetOpcodeTableCb(const MODEL_OpcodeTableParam_t **data,
MOBLEUINT16 *length);
-MOBLE_RESULT SensorModelServer_ProcessMessageCb(MOBLE_ADDRESS peer_addr,
- MOBLE_ADDRESS dst_peer,
+MOBLE_RESULT SensorModelServer_ProcessMessageCb(MODEL_MessageHeader_t *pmsgParams,
MOBLEUINT16 opcode,
- MOBLEUINT8 const *pData,
+ MOBLEUINT8 const *data,
MOBLEUINT32 length,
- MOBLEBOOL response
- );
-MOBLE_RESULT SensorModelServer_GetStatusRequestCb(MOBLE_ADDRESS peer_addr,
- MOBLE_ADDRESS dst_peer,
+ MOBLEBOOL response);
+MOBLE_RESULT SensorModelServer_GetStatusRequestCb(MODEL_MessageHeader_t *pmsgParams,
MOBLEUINT16 opcode,
MOBLEUINT8 *pResponsedata,
MOBLEUINT32 *plength,
MOBLEUINT8 const *pData,
MOBLEUINT32 length,
MOBLEBOOL response);
-
-MOBLE_RESULT Sensor_Cadence_Set(const MOBLEUINT8* pCadence_param, MOBLEUINT32 length);
-MOBLE_RESULT Sensor_Data_Status(MOBLEUINT8* pSensorData_param, MOBLEUINT32* plength ,
- MOBLEUINT8 const *pData, MOBLEUINT32 length);
-MOBLE_RESULT Sensor_Descriptor_Status(MOBLEUINT8* pSensorDiscriptor_param, MOBLEUINT32* plength,MOBLEUINT8 const *pData, MOBLEUINT32 length);
-MOBLE_RESULT Sensor_Setting_Set(const MOBLEUINT8* pSetting_param, MOBLEUINT32 length);
-MOBLE_RESULT Sensor_Setting_Status_PID(MOBLEUINT8* pSetting_param, MOBLEUINT32 *plength,
- const MOBLEUINT8 *pData,MOBLEUINT32 length);
-MOBLE_RESULT Sensor_Setting_Status_SettingID(MOBLEUINT8* pSetting_param, MOBLEUINT32 *plength,
- const MOBLEUINT8 *pData,MOBLEUINT32 length);
-
-MOBLE_RESULT Check_Property_ID(const MODEL_Property_IDTableParam_t prop_ID_Table[]
- , MOBLEUINT16 prop_ID);
-MOBLE_RESULT Appli_Sensor_Column_Status(MOBLEUINT8* sensor_Column , MOBLEUINT32* pLength,MOBLEUINT16 prop_ID , MOBLEUINT32 length);
-
+MOBLE_RESULT Sensor_Send(MOBLEUINT8 sensorOffset,
+ MOBLEUINT8 elementIdx,
+ MOBLEUINT16 propertyId);
+MOBLE_RESULT Sensor_UpdateCadence(MOBLEUINT8 sensorOffset,
+ MOBLEUINT8 elementIdx,
+ MOBLEUINT16 propertyId);
+MOBLE_RESULT Sensor_UpdatePublishState(MOBLEUINT8 sensorOffset, MOBLEUINT8 state);
+MOBLEUINT32 Sensor_SleepDurationMs_Get(void);
+void Sensor_Process(void);
+MOBLE_RESULT SensorServer_Init(void* sensorBuff,
+ const sensor_server_cb_t* sensor_cb,
+ MOBLEUINT16 sizeBuff,
+ const void* sensorServerInitParams);
+MOBLE_RESULT Sensor_ModelPublishSet(model_publicationparams_t* pPublishParams);
#endif /* __SENSORS_H */
-/******************* (C) COPYRIGHT 2019 STMicroelectronics *****END OF FILE****/
+/******************* (C) COPYRIGHT 2020 STMicroelectronics *****END OF FILE****/