diff options
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.h | 403 |
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****/ |