STIMA  3
Classes | Enumerations | Functions | Variables
i2c-leaf.h File Reference
#include "i2c-leaf-config.h"
#include <debug.h>
#include <i2c_config.h>
#include <avr/sleep.h>
#include <avr/power.h>
#include <avr/wdt.h>
#include <i2c_utility.h>
#include <rmap_utility.h>
#include <eeprom_utility.h>
#include <Wire.h>
#include <TimeLib.h>
#include <typedef.h>
#include <registers-leaf.h>
#include <debug_config.h>
#include <SdFat.h>
#include <StreamUtils.h>
#include <ArduinoLog.h>
Include dependency graph for i2c-leaf.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  configuration_t
 EEPROM saved configuration. More...
 
struct  leaf_wetness_t
 Leaf wetness data. More...
 
struct  readable_data_t
 Readable data through i2c bus. More...
 
struct  writable_data_t
 Writable data through i2c bus. More...
 

Enumerations

enum  state_t {
  INIT , TASKS_EXECUTION , END , INIT ,
  TASKS_EXECUTION , END , INIT , TASKS_EXECUTION ,
  END , INIT , TASKS_EXECUTION , END ,
  INIT , TASKS_EXECUTION , END , INIT ,
  TASKS_EXECUTION , END , INIT , TASKS_EXECUTION ,
  END , INIT , TASKS_EXECUTION , END ,
  INIT , TASKS_EXECUTION , END , REBOOT ,
  INIT , TASKS_EXECUTION , END , INIT ,
  TASKS_EXECUTION , END
}
 Main loop finite state machine. More...
 
enum  leaf_reading_state_t { LEAF_READING_INIT , LEAF_READING_READ , LEAF_READING_END , LEAF_READING_WAIT_STATE }
 

Functions

void init_logging ()
 Init logging system. More...
 
void init_power_down (uint32_t *time_ms, uint32_t debouncing_ms)
 Enter power down mode. More...
 
void init_wdt (uint8_t wdt_timer)
 Init watchdog. More...
 
void init_system (void)
 Init system. More...
 
void init_buffers (void)
 Init buffers. More...
 
void init_tasks (void)
 Init tasks variable and state. More...
 
void init_pins (void)
 Init hardware pins. More...
 
void init_wire (void)
 Init wire (i2c) library and performs checks on the bus. More...
 
void init_spi (void)
 Init SPI library. More...
 
void init_rtc (void)
 Init RTC module. More...
 
void init_sensors (void)
 Create and setup sensors. More...
 
void print_configuration (void)
 Print current configuration. More...
 
void load_configuration (void)
 Load configuration from EEPROM. More...
 
void save_configuration (bool)
 Save configuration to EEPROM. More...
 
void commands (void)
 Performs specific operations based on the received command. More...
 
void reset_samples_buffer (void)
 Reset samples buffers to default value. More...
 
void reset_report_buffer (void)
 
void reset_buffer (void)
 Reset sample and observations buffers to default value. More...
 
void exchange_buffers (void)
 Exchange reader and writer pointer to buffer. More...
 
template<typename sample_g , typename observation_g , typename value_v >
void addSample (sample_g *sample, observation_g *observation, value_v value)
 
template<typename observation_g , typename value_v >
value_v readCurrentObservation (observation_g *buffer)
 
template<typename observation_g , typename value_v >
void writeCurrentObservation (observation_g *buffer, value_v value)
 
template<typename observation_g , typename length_v >
void resetObservation (observation_g *buffer, length_v length)
 
template<typename observation_g , typename length_v >
void resetBackPmObservation (observation_g *buffer, length_v length)
 
template<typename observation_g , typename length_v >
void incrementObservation (observation_g *buffer, length_v length)
 
template<typename observation_g , typename length_v , typename value_v >
void addObservation (observation_g *buffer, length_v length, value_v value)
 
template<typename observation_g , typename length_v , typename value_v >
value_v readBackObservation (observation_g *buffer, length_v length)
 
void samples_processing (bool is_force_processing)
 Main routine for processing the samples to calculate an observation. More...
 
void leaf_reading_task (void)
 Sensors reading Task. Read data from sensors. More...
 
void command_task (void)
 Command Task. Execute the command received on i2c bus by reading i2c received data buffer. More...
 
void i2c_request_interrupt_handler (void)
 I2C request interrupt handler. More...
 
void i2c_receive_interrupt_handler (void)
 I2C receive interrupt handler. More...
 

Variables

configuration_t configuration
 Configuration data.
 
volatile readable_data_t readable_data_1
 First readable i2c register.
 
volatile readable_data_t readable_data_2
 Second readable i2c register.
 
volatile readable_data_treadable_data_read_ptr
 Pointer for read data in i2c readable register.
 
volatile readable_data_treadable_data_write_ptr
 Pointer for write data in i2c readable register.
 
volatile readable_data_treadable_data_temp_ptr
 Temporary pointer for exchange read and write pointer for i2c readable register.
 
writable_data_t writable_data
 Writable i2c register.
 
writable_data_twritable_data_ptr
 Pointer for read and write data in i2c writable register.
 
volatile uint8_t readable_data_address
 Address of readable i2c register.
 
volatile uint8_t readable_data_length
 Number of bytes to read at readable_data_address.
 
volatile uint8_t i2c_rx_data [I2C_MAX_DATA_LENGTH]
 Buffer for i2c received data.
 
volatile uint8_t lastcommand
 last command received. More...
 
volatile uint8_t i2c_error
 Number of i2c error.
 
volatile uint8_t i2c_time
 Time in seconds from last I2C reset.
 
volatile uint8_t ready_tasks_count
 Number of tasks ready to execute.
 
uint32_t awakened_event_occurred_time_ms
 System time (in millisecond) when the system has awakened from power down.
 
bool is_start
 Execute start command.
 
bool is_stop
 Execute stop command.
 
bool is_test_read
 Received command is in continuous mode.
 
bool is_leaf_init
 
bool is_leaf_wet
 
uint8_t samples_count
 Number of samples to be acquired for make one observation.
 
bool do_buffers_reset
 Force a buffers reset.
 
volatile uint16_t timer_counter_ms
 Timer counter variable for execute timed task with time multiple of base Timer1 time.
 
state_t state
 Current main loop state.
 
leaf_reading_state_t leaf_reading_state
 
volatile bool inside_transaction
 Status of command transaction.
 
volatile uint16_t transaction_time
 Timer counter variable for compute command transaction timeout.
 
volatile bool is_event_leaf_reading
 Enable or disable the Sensors reading task.
 
volatile bool is_event_command_task
 Enable or disable the Command task.
 

Enumeration Type Documentation

◆ leaf_reading_state_t

Enumerator
LEAF_READING_INIT 

init task variables

LEAF_READING_END 

performs end operations and deactivate task

LEAF_READING_WAIT_STATE 

non-blocking waiting time

◆ state_t

enum state_t

Main loop finite state machine.

Enumerator
INIT 

init tasks and sensors

TASKS_EXECUTION 

execute active tasks

END 

go to ENTER_POWER_DOWN or TASKS_EXECUTION

INIT 

init tasks and sensors

TASKS_EXECUTION 

execute active tasks

END 

go to ENTER_POWER_DOWN or TASKS_EXECUTION

INIT 

init tasks and sensors

TASKS_EXECUTION 

execute active tasks

END 

go to ENTER_POWER_DOWN or TASKS_EXECUTION

INIT 

init tasks and sensors

TASKS_EXECUTION 

execute active tasks

END 

go to ENTER_POWER_DOWN or TASKS_EXECUTION

INIT 

init tasks and sensors

TASKS_EXECUTION 

execute active tasks

END 

go to ENTER_POWER_DOWN or TASKS_EXECUTION

REBOOT 

reboot the machine

Function Documentation

◆ command_task()

void command_task ( void  )

Command Task. Execute the command received on i2c bus by reading i2c received data buffer.

Execute the command received on i2c bus by reading i2c received data buffer.

Returns
void.

◆ commands()

void commands ( void  )

Performs specific operations based on the received command.

Returns
void.

CONTINUOUS TEST

CONTINUOUS START

CONTINUOUS STOP

CONTINUOUS START-STOP

ONESHOT START

ONESHOT STOP

ONESHOT START-STOP

CONTINUOUS START

CONTINUOUS STOP

CONTINUOUS START-STOP

ONESHOT START

ONESHOT STOP

ONESHOT START-STOP

CONTINUOUS TEST

CONTINUOUS START

CONTINUOUS STOP

CONTINUOUS START-STOP

ONESHOT START

ONESHOT STOP

ONESHOT START-STOP

CONTINUOUS TEST

CONTINUOUS START

CONTINUOUS STOP

CONTINUOUS START-STOP

ONESHOT START

ONESHOT STOP

ONESHOT START-STOP

CONTINUOUS TEST

CONTINUOUS START

CONTINUOUS STOP

CONTINUOUS START-STOP

ONESHOT START

ONESHOT STOP

ONESHOT START-STOP

CONTINUOUS START

CONTINUOUS STOP

CONTINUOUS START-STOP

ONESHOT START

ONESHOT STOP

ONESHOT START-STOP

◆ exchange_buffers()

void exchange_buffers ( void  )

Exchange reader and writer pointer to buffer.

Returns
void.

◆ i2c_receive_interrupt_handler()

void i2c_receive_interrupt_handler ( void  )

I2C receive interrupt handler.

Returns
void.

◆ i2c_request_interrupt_handler()

void i2c_request_interrupt_handler ( void  )

I2C request interrupt handler.

Returns
void.

write readable_data_length bytes of data stored in readable_data_read_ptr (base) + readable_data_address (offset) on i2c bus

write crc8

write readable_data_length bytes of data stored in readable_data_read_ptr (base) + readable_data_address (offset) on i2c bus

write crc8

write readable_data_length bytes of data stored in readable_data_read_ptr (base) + readable_data_address (offset) on i2c bus

write readable_data_length bytes of data stored in readable_data_read_ptr (base) + readable_data_address (offset) on i2c bus

write crc8

write readable_data_length bytes of data stored in readable_data_read_ptr (base) + readable_data_address (offset) on i2c bus

write crc8

write readable_data_length bytes of data stored in readable_data_read_ptr (base) + readable_data_address (offset) on i2c bus

◆ init_buffers()

void init_buffers ( void  )

Init buffers.

Returns
void.

copy readable_data_2 in readable_data_1

copy readable_data_2 in readable_data_1

copy readable_data_write in readable_data_read

copy readable_data_write in readable_data_read

copy readable_data_write in readable_data_read

copy readable_data_2 in readable_data_1

copy readable_data_write in readable_data_read

◆ init_logging()

void init_logging ( void  )

Init logging system.

Returns
void.

◆ init_pins()

void init_pins ( void  )

Init hardware pins.

Returns
void.

◆ init_power_down()

void init_power_down ( uint32_t *  time_ms,
uint32_t  debouncing_ms 
)

Enter power down mode.

Parameters
time_mspointer to a variable to save the last instant you entered power down.
debouncing_msdelay to power down.
Returns
void.

◆ init_rtc()

void init_rtc ( void  )

Init RTC module.

Returns
void.

◆ init_sensors()

void init_sensors ( void  )

Create and setup sensors.

Returns
void.

◆ init_spi()

void init_spi ( void  )

Init SPI library.

Returns
void.

◆ init_system()

void init_system ( void  )

Init system.

Returns
void.

main loop state

main loop state

main loop state

main loop state

main loop state

main loop state

◆ init_tasks()

void init_tasks ( void  )

Init tasks variable and state.

Returns
void.

no tasks ready

no tasks ready

reset samples_count value

no tasks ready

no tasks ready

no tasks ready

no tasks ready

◆ init_wdt()

void init_wdt ( uint8_t  wdt_timer)

Init watchdog.

Parameters
wdt_timera time value for init watchdog (WDTO_xxxx).
Returns
void.

◆ init_wire()

void init_wire ( void  )

Init wire (i2c) library and performs checks on the bus.

Returns
void.

clear the I2C bus first before calling Wire.begin()

◆ leaf_reading_task()

void leaf_reading_task ( void  )

Sensors reading Task. Read data from sensors.

Returns
void.

◆ load_configuration()

void load_configuration ( void  )

Load configuration from EEPROM.

Returns
void.

read configuration from eeprom

read configuration from eeprom

read configuration from eeprom

read configuration from eeprom

read configuration from eeprom

◆ print_configuration()

void print_configuration ( void  )

Print current configuration.

Returns
void.

◆ reset_buffer()

void reset_buffer ( void  )

Reset sample and observations buffers to default value.

Returns
void.

◆ reset_samples_buffer()

void reset_samples_buffer ( void  )

Reset samples buffers to default value.

Returns
void.

◆ samples_processing()

void samples_processing ( bool  is_force_processing)

Main routine for processing the samples to calculate an observation.

Parameters
is_force_processingif is true, force the calculation of the observation provided there is a minimum number of samples.
Returns
void.

if true, a new bins and pm observation was calculated

assign new value for samples_count

reset samples's buffer values

◆ save_configuration()

void save_configuration ( bool  is_default)

Save configuration to EEPROM.

Parameters
is_defaultif true save default configuration; if false save current configuration.
Returns
void.

write configuration to eeprom

write configuration to eeprom

write configuration to eeprom

write configuration to eeprom

write configuration to eeprom

Variable Documentation

◆ lastcommand

lastcommand

last command received.

command to be executed.