L14-Click 1.0
STM32WLE5CC LoRaWAN Sensor Platform
Loading...
Searching...
No Matches
mysensors.c File Reference
#include "main.h"
#include "mysensors.h"
#include "mysensors_base.h"
#include "i2c.h"
#include "utils/utils.h"
#include "utils/mydefs.h"
#include "stm32_timer.h"
#include "stm32_seq.h"
#include "adc_if.h"
#include "CayenneLpp.h"
#include <stdio.h>
#include <string.h>
#include <inttypes.h>
Include dependency graph for mysensors.c:

Go to the source code of this file.

Data Structures

struct  sens_GrpTiming_t
 the definition for group of sensor sens_ReadingGrp_t the number of readings and timeout for reading data from sensors More...
struct  sens_processing_t
 sensor definition - interface More...

Enumerations

enum  sens_ReadingGrp_t {
  SENS_GRP_0 = 0 , SENS_GRP_1 , SENS_GRP_2 , SENS_GRP_3 ,
  SENS_GRP_ALL
}
 sensor groups for reading - the sensors in one group are read together This is necessary to processing of the similar sensors together as tempHum, ambient, barometer etc. depends on their consumption every sensor's group has it own count of measuring, timeout between measure At the end of measure, maybe any sensors need to service, therefor is called method NeedService, which returns 1 - sensor is servicing 0 - not, or service has been finished More...

Functions

static int getCount_GroupTiming ()
static int getCount_Sensors ()
static void sensBuffer_Reset ()
static void sensBuffer_Add (const char *format,...)
static char * sensBuffer_Get ()
static void sensBuffer_Send ()
void i2c_OnOff (uint8_t onOff)
 possible to I2C turn on/off - cumulative
static int sensors_OnOff (sens_ReadingGrp_t grp, int onOff)
 On/Off sensors according to group.
static void sensors_Read (sens_ReadingGrp_t grp)
 reading sensor one by one in specified group
static uint8_t sensors_NextGroup ()
 Move to next used group in _sensors[].
static uint8_t sensors_Service ()
static void tasksensors_Work ()
 task sensor sequencer
static void tasksensors_OnTimeout ()
void sensors_Start ()
 
  • non squncer processing start of reading - prepare of internal state machine

sens_ProcessDef_t sensors_Work ()
 
  • no sequncer processing reading data from sensor according to group specification

void sensors_Init (I2C_HandleTypeDef *hi2c)
 Initialization of all sensors, must be called before for store of hi2c handler.
void sensors_Retiming ()
 stop and start of sensor timer for next measure
void sensorsSeq_Init (uint32_t sensortAppBit, uint32_t mylorawanAppBit)
 task sequencer initialization for sensors reading
void sensors_CopyToBck ()
 The copying data from current sensors buffer to backUp - _bck_XXXXX.
uint8_t * sensors_CayennelFromBckData (uint8_t *sizeOut, SysTime_t *prevMeasureTime)
 collecting sensor data into CayenneLppGetBuffer buffer for sending them via LoRaWan, the methods works with _bck_XXXXX sensor data, not with real.
The measure time is added only if time distance is bigger than 1min:
void sensors_WriteFromBckToDataBlock (mems_DataBlock_t *data)
 filling the data block from sensor data - store to memory the methods works with _bck_XXXXX senzor, not with real at the begin is writte the timeout of sensor measuring in minutes * 100
uint8_t sensors_ReadToBckFromDataBlock (const mems_DataBlock_t *data)
 reading from memory block and filling specified sensor from memory - ready for sensors_CayennelData the methods works with _bck_XXXXX senzor, not with real
SysTime_t sensors_GetTimeFromBlock (const mems_DataBlock_t *data)
 getting the SysTime_t from block data of memory

Variables

static const sens_GrpTiming_t _groupTiming []
 definition of sensors group
static const sens_processing_t _sensors []
struct { 
   I2C_HandleTypeDef *   Hi2c 
   sens_ProcessDef_t   ProcessDef 
   int8_t   GroupInxTiming: 4 
   sleeper_t   ProcessDelay 
   uint8_t   GroupReadCount 
   UTIL_TIMER_Object_t   SensorTimerReading 
   uint8_t   SensorSeqID: 4 
   uint8_t   MylorawanSeqID: 4 
   SysTime_t   MeasureTime 
_
 anonymous global struct for current sensor data flow
static char _sensBuffer [1024] = {}
static int _i2cOnOff = 1

Enumeration Type Documentation

◆ sens_ReadingGrp_t

sensor groups for reading - the sensors in one group are read together This is necessary to processing of the similar sensors together as tempHum, ambient, barometer etc. depends on their consumption every sensor's group has it own count of measuring, timeout between measure At the end of measure, maybe any sensors need to service, therefor is called method NeedService, which returns 1 - sensor is servicing 0 - not, or service has been finished

Enumerator
SENS_GRP_0 
SENS_GRP_1 
SENS_GRP_2 
SENS_GRP_3 
SENS_GRP_ALL 

Definition at line 42 of file mysensors.c.

Function Documentation

◆ getCount_GroupTiming()

int getCount_GroupTiming ( )
static

Definition at line 142 of file mysensors.c.

References _groupTiming.

Referenced by sensors_NextGroup().

Here is the caller graph for this function:

◆ getCount_Sensors()

int getCount_Sensors ( )
static

Definition at line 146 of file mysensors.c.

References _sensors.

Referenced by sensors_Init(), sensors_NextGroup(), sensors_OnOff(), sensors_Read(), and sensors_Service().

Here is the caller graph for this function:

◆ i2c_OnOff()

void i2c_OnOff ( uint8_t onOff)

possible to I2C turn on/off - cumulative

Definition at line 190 of file mysensors.c.

References _i2cOnOff, MX_I2C2_DeInit(), MX_I2C2_Init(), Power3v3_Off(), and Power3v3_On().

Referenced by main(), nfc_FactoryReset(), nfc_ReadMeasureNFC(), nfc_ReadSystemParams(), nfc_WriteMeasureData(), nfc_WriteMeasureNFC(), nfc_WriteSystemParams(), and sensors_Work().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sensBuffer_Add()

void sensBuffer_Add ( const char * format,
... )
static

Definition at line 159 of file mysensors.c.

References _sensBuffer.

Referenced by sensors_CayennelFromBckData(), and sensors_Read().

Here is the caller graph for this function:

◆ sensBuffer_Get()

char * sensBuffer_Get ( )
static

Definition at line 169 of file mysensors.c.

References _sensBuffer.

Referenced by sensors_Read().

Here is the caller graph for this function:

◆ sensBuffer_Reset()

void sensBuffer_Reset ( )
static

Definition at line 154 of file mysensors.c.

References _sensBuffer.

Referenced by sensors_CayennelFromBckData(), and sensors_Read().

Here is the caller graph for this function:

◆ sensBuffer_Send()

void sensBuffer_Send ( )
static

Definition at line 174 of file mysensors.c.

References _sensBuffer, and writeLogNL().

Referenced by sensors_CayennelFromBckData(), and sensors_Read().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sensors_CayennelFromBckData()

uint8_t * sensors_CayennelFromBckData ( uint8_t * sizeOut,
SysTime_t * prevMeasureTime )

collecting sensor data into CayenneLppGetBuffer buffer for sending them via LoRaWan, the methods works with _bck_XXXXX sensor data, not with real.
The measure time is added only if time distance is bigger than 1min:

  • UNIX - absolute time, if distance between times is bigger than 65353 minutes(45.5days), CayenneLppAddTimeMeasureABS
  • relative, minutes 16 - max 65535 is distance is bigger than 255 minutes (4.25h), CayenneLppAddTimeMeasureMIN16
  • relative, minute 8 - max 255, if distance between measured data is less than 255 minutes, CayenneLppAddTimeMeasureMIN16
Parameters
sizeOut- the size(bytes) in buffer, the size is max 254, uint8_t is enough
prevMeasureTimethe previous measure time, 0 or NULL - is not specified, no time is added
Returns
address of buffer or null, if no data

Definition at line 488 of file mysensors.c.

References _, _batPercLevel, _bck_bar_bmp585Data, _bck_tmphm_sht45Data, _memsMainBlock, CayenneLppAddBarometricPressure(), CayenneLppAddBatteryPerc(), CayenneLppAddConcentration(), CayenneLppAddLuminosity(), CayenneLppAddParticulateMatter_1_0(), CayenneLppAddParticulateMatter_2_5(), CayenneLppAddRelativeHumidity(), CayenneLppAddTemperature(), CayenneLppAddTimeMeasureABS(), CayenneLppAddTimeMeasureMIN16(), CayenneLppAddTimeMeasureMIN8(), CayenneLppGetBuffer(), CayenneLppGetSize(), CayenneLppReset(), mems_WriteMainBlock(), PRIf_02, PRIf_02D, sensBuffer_Add(), sensBuffer_Reset(), sensBuffer_Send(), and SYSTEMPARAMS_BATTIMESEND.

Referenced by myloraWan_PrepareSendingBuffer().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sensors_CopyToBck()

void sensors_CopyToBck ( )

The copying data from current sensors buffer to backUp - _bck_XXXXX.

Definition at line 463 of file mysensors.c.

References _bar_bmp585Data, _bck_bar_bmp585Data, _bck_tmphm_sht45Data, and _tmphm_sht45Data.

Referenced by myloraWan_MeasureFinish().

Here is the caller graph for this function:

◆ sensors_GetTimeFromBlock()

SysTime_t sensors_GetTimeFromBlock ( const mems_DataBlock_t * data)

getting the SysTime_t from block data of memory

Return values
thetime of measure - UNIX time

Definition at line 683 of file mysensors.c.

References mems_DataBlock_t::Data.

Referenced by myLoraWan_LastDataSend(), and myloraWan_MeasureFinish().

Here is the caller graph for this function:

◆ sensors_Init()

void sensors_Init ( I2C_HandleTypeDef * hi2c)

Initialization of all sensors, must be called before for store of hi2c handler.

Parameters
hi2c

Definition at line 413 of file mysensors.c.

References _, _sensors, getCount_Sensors(), SENS_GRP_ALL, sensors_OnOff(), systemParams_IsSensorAvaiable(), and writeLog().

Referenced by main(), and sensors_Work().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sensors_NextGroup()

uint8_t sensors_NextGroup ( )
static

Move to next used group in _sensors[].

Definition at line 271 of file mysensors.c.

References _, _groupTiming, _sensors, getCount_GroupTiming(), and getCount_Sensors().

Referenced by sensors_Start(), and sensors_Work().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sensors_OnOff()

int sensors_OnOff ( sens_ReadingGrp_t grp,
int onOff )
static

On/Off sensors according to group.

Parameters
grp- specified group, if SENS_GRP_LAST - all sensors
Returns
number of sensors started from group

Definition at line 216 of file mysensors.c.

References _, _sensors, getCount_Sensors(), SENS_GRP_ALL, systemParams_IsSensorAvaiable(), and writeLog().

Referenced by sensors_Init(), and sensors_Work().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sensors_Read()

void sensors_Read ( sens_ReadingGrp_t grp)
static

reading sensor one by one in specified group

Parameters
grpspecified group, if SENS_GRP_LAST - all sensors

Definition at line 245 of file mysensors.c.

References _, _sensors, _tryInit, getCount_Sensors(), SENS_GRP_ALL, sensBuffer_Add(), sensBuffer_Get(), sensBuffer_Reset(), sensBuffer_Send(), and systemParams_IsSensorAvaiable().

Referenced by sensors_Work().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sensors_ReadToBckFromDataBlock()

uint8_t sensors_ReadToBckFromDataBlock ( const mems_DataBlock_t * data)

reading from memory block and filling specified sensor from memory - ready for sensors_CayennelData the methods works with _bck_XXXXX senzor, not with real

Return values
sizeof total read from data block, 0 - if is other than expected data

Definition at line 646 of file mysensors.c.

References _, _bck_bar_bmp585Data, _bck_tmphm_sht45Data, mems_DataBlock_t::Data, MEMS_DATATYPE_SENSOR, and mems_DataBlock_t::Type.

Referenced by myloraWan_PrepareSendingBuffer().

Here is the caller graph for this function:

◆ sensors_Retiming()

void sensors_Retiming ( )

stop and start of sensor timer for next measure

Definition at line 438 of file mysensors.c.

References _, _systemParams, and tasksensors_OnTimeout().

Referenced by main(), and tasksensors_Work().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sensors_Service()

uint8_t sensors_Service ( )
static

Definition at line 284 of file mysensors.c.

References _, _sensors, getCount_Sensors(), and systemParams_IsSensorAvaiable().

Referenced by sensors_Work().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sensors_Start()

void sensors_Start ( )

  • non squncer processing start of reading - prepare of internal state machine

Definition at line 333 of file mysensors.c.

References _, SENS_BEGIN, sensors_NextGroup(), and sleeper_SetSleepMS().

Referenced by tasksensors_OnTimeout().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sensors_Work()

sens_ProcessDef_t sensors_Work ( )

  • no sequncer processing reading data from sensor according to group specification

Returns
SENS_DONE - process of reading finished, otherwise current state of status machine

Definition at line 342 of file mysensors.c.

References _, _groupTiming, i2c_OnOff(), SENS_BEGIN, SENS_DATAREADY, SENS_DONE, SENS_END, SENS_INIT, SENS_READ, SENS_SERVICE, SENS_START, SENS_STOP, sensors_Init(), sensors_NextGroup(), sensors_OnOff(), sensors_Read(), sensors_Service(), sleeper_IsElapsed(), sleeper_Next(), sleeper_SetSleepMS(), and togle_LedOff().

Referenced by tasksensors_Work().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sensors_WriteFromBckToDataBlock()

void sensors_WriteFromBckToDataBlock ( mems_DataBlock_t * data)

filling the data block from sensor data - store to memory the methods works with _bck_XXXXX senzor, not with real at the begin is writte the timeout of sensor measuring in minutes * 100

Definition at line 604 of file mysensors.c.

References _, _bck_bar_bmp585Data, _bck_tmphm_sht45Data, mems_DataBlock_t::Data, Error_Handler(), MEMS_DATATYPE_SENSOR, SENSORS_DATASIZE, mems_DataBlock_t::Size, mems_DataBlock_t::Type, and writeLog().

Referenced by myloraWan_MeasureFinish().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sensorsSeq_Init()

void sensorsSeq_Init ( uint32_t sensortAppBit,
uint32_t mylorawanAppBit )

task sequencer initialization for sensors reading

the sensors sequencer initialization and set the process in sequencer

Definition at line 454 of file mysensors.c.

References _, tasksensors_OnTimeout(), and tasksensors_Work().

Referenced by main().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ tasksensors_OnTimeout()

void tasksensors_OnTimeout ( )
static

Definition at line 322 of file mysensors.c.

References _, _systemParams, CFG_SEQ_Prio_0, and sensors_Start().

Referenced by sensors_Retiming(), and sensorsSeq_Init().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ tasksensors_Work()

void tasksensors_Work ( )
static

task sensor sequencer

Definition at line 301 of file mysensors.c.

References _, CFG_SEQ_Prio_0, SENS_DATAREADY, SENS_DONE, sensors_Retiming(), and sensors_Work().

Referenced by sensorsSeq_Init().

Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ [struct]

struct { ... } _

anonymous global struct for current sensor data flow

◆ _groupTiming

const sens_GrpTiming_t _groupTiming[]
static
Initial value:
=
{
{ SENS_GRP_0, 5, 500 },
{ SENS_GRP_1, 3, 5100 },
{ SENS_GRP_2, 5, 1100 },
}
@ SENS_GRP_1
Definition mysensors.c:45
@ SENS_GRP_2
Definition mysensors.c:46
@ SENS_GRP_0
Definition mysensors.c:44

definition of sensors group

Definition at line 84 of file mysensors.c.

Referenced by getCount_GroupTiming(), sensors_NextGroup(), and sensors_Work().

◆ _i2cOnOff

int _i2cOnOff = 1
static

Definition at line 189 of file mysensors.c.

Referenced by i2c_OnOff().

◆ _sensBuffer

char _sensBuffer[1024] = {}
static

Definition at line 152 of file mysensors.c.

Referenced by sensBuffer_Add(), sensBuffer_Get(), sensBuffer_Reset(), and sensBuffer_Send().

◆ _sensors

const sens_processing_t _sensors[]
static
Initial value:
=
{
tmphm_sht45_LogData, SYSPARAM_TEMP_HUM, "tempHum sensor" },
bar_bmp585_LogData, SYSPARAM_BAR, "barometer BMP585 sensor" },
}
HAL_StatusTypeDef bar_bmp585_On(I2C_HandleTypeDef *hi2c)
Turn on sensor - wakeup the sensor and start to processing of pressure measure.
Definition bar_bmp585.c:104
HAL_StatusTypeDef bar_bmp585_Off(I2C_HandleTypeDef *hi2c)
Turn off sensor - stop measure and put sensor in very deep sleep mode.
Definition bar_bmp585.c:118
HAL_StatusTypeDef bar_bmp585_Read(I2C_HandleTypeDef *hi2c)
Read value from sensor, pressure and temperature. Sensor must be turned on before.
Definition bar_bmp585.c:172
void bar_bmp585_LogData(char *buf)
Log data to buffer.
Definition bar_bmp585.c:237
HAL_StatusTypeDef bar_bmp585_Init(I2C_HandleTypeDef *hi2c)
Initialize sensor, check if it really is this sensor. After check the sensor is turned off to save po...
Definition bar_bmp585.c:123
int8_t bar_bmp585_Is(I2C_HandleTypeDef *hi2c, int8_t tryInit)
Check if sensor is present.
Definition bar_bmp585.c:97
static const sens_GrpTiming_t _groupTiming[]
definition of sensors group
Definition mysensors.c:84
@ SYSPARAM_BAR
@ SYSPARAM_TEMP_HUM
HAL_StatusTypeDef tmphm_sht45_On(I2C_HandleTypeDef *hi2c)
Zapnutie sensora dummy.
Definition tmphm_sht45.c:57
HAL_StatusTypeDef tmphm_sht45_Init(I2C_HandleTypeDef *hi2c)
initialization, check if sensor is present or not. Checks main (0x44) and alternative address (0x45) ...
Definition tmphm_sht45.c:76
HAL_StatusTypeDef tmphm_sht45_Read(I2C_HandleTypeDef *hi2c)
read temperature and humidity from sensor, values are in _tempHumData
void tmphm_sht45_LogData(char *buf)
log data to buffer
HAL_StatusTypeDef tmphm_sht45_Off(I2C_HandleTypeDef *hi2c)
turn off sensor - dummy
Definition tmphm_sht45.c:70
int8_t tmphm_sht45_Is(I2C_HandleTypeDef *hi2c, int8_t tryInit)
check if tempHum sensor is present
Definition tmphm_sht45.c:40

Definition at line 94 of file mysensors.c.

Referenced by getCount_Sensors(), sensors_Init(), sensors_NextGroup(), sensors_OnOff(), sensors_Read(), and sensors_Service().

◆ GroupInxTiming

int8_t GroupInxTiming

index of current group process - max 7 groups, can be negative

Definition at line 129 of file mysensors.c.

◆ GroupReadCount

uint8_t GroupReadCount

counter or reading for group -> sens_GrpTiming_t.MaxReadCount

Definition at line 131 of file mysensors.c.

◆ Hi2c

I2C_HandleTypeDef* Hi2c

current I2C handler

Definition at line 127 of file mysensors.c.

◆ MeasureTime

SysTime_t MeasureTime

time when measure was done

Definition at line 138 of file mysensors.c.

◆ MylorawanSeqID

uint8_t MylorawanSeqID

bit sequencer for mylorawan - the measure is finished, data processing send

Definition at line 136 of file mysensors.c.

◆ ProcessDef

sens_ProcessDef_t ProcessDef

process reading sensor data, sensor Reading sequence must start via sensors_Start

Definition at line 128 of file mysensors.c.

◆ ProcessDelay

sleeper_t ProcessDelay

global process timing -> _groupTiming

Definition at line 130 of file mysensors.c.

◆ SensorSeqID

uint8_t SensorSeqID

bit sequencer for sensor reading CFG_SEQ_Task_Sensors - max 4 bit, CFG_SEQ_Task_Sensors

Definition at line 135 of file mysensors.c.

◆ SensorTimerReading

UTIL_TIMER_Object_t SensorTimerReading

semsor timer reading

Definition at line 134 of file mysensors.c.