Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
141 changes: 82 additions & 59 deletions platformio/libraries/SensorDriver/SensorDriver.cpp

Large diffs are not rendered by default.

80 changes: 43 additions & 37 deletions platformio/libraries/SensorDriver/SensorDriver.h
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ class SensorDriver {
/*!
\fn void prepare()
\brief Prepare sensor.
\param[in] test set test mode.
\return void.
*/
virtual void prepare(bool is_test = false);
Expand All @@ -130,9 +131,10 @@ class SensorDriver {
\brief Get value from sensor.
\param[out] *values pointer to array for getting multiple sensor's value.
\param[in] length number of values readed from sensor.
\param[in] test set test mode.
\return void.
*/
virtual void get(int32_t *values, uint8_t length);
virtual void get(int32_t *values, uint8_t length, bool is_test=false);

#if (USE_JSON)
/*!
Expand All @@ -142,9 +144,10 @@ class SensorDriver {
\param[in] length number of values readed from sensor.
\param[out] *json_buffer pointer to buffer for getting JSON string.
\param[in] json_buffer_length maximum length of JSON string.s
\param[in] test set test mode.
\return void.
*/
virtual void getJson(int32_t *values, uint8_t length, char *json_buffer, size_t json_buffer_length = JSON_BUFFER_LENGTH);
virtual void getJson(int32_t *values, uint8_t length, char *json_buffer, size_t json_buffer_length = JSON_BUFFER_LENGTH, bool is_test=false);
#endif

/*!
Expand Down Expand Up @@ -232,11 +235,12 @@ class SensorDriver {
void resetSetted();

/*!
\fn void resetPrepared()
\fn void resetPrepared(bool is_test = false)
\brief Reset preapred internal state of sensor.
\param[in] test set test mode.
\return void.
*/
virtual void resetPrepared();
virtual void resetPrepared(bool is_test = false);

/*!
\fn uint8_t getErrorCount()
Expand Down Expand Up @@ -316,6 +320,8 @@ class SensorDriver {
bool _is_test;
bool *_is_setted;
bool *_is_prepared;
bool _is_previous_prepared;
bool _is_current_prepared;

/*!
\fn void printInfo(const char* driver, const char* type, const uint8_t address = 0, const uint8_t node = 0)
Expand All @@ -339,13 +345,13 @@ class SensorDriverAdt7420 : public SensorDriver {
};
void setup();
void prepare(bool is_test = false);
void get(int32_t *values, uint8_t length);
void get(int32_t *values, uint8_t length, bool is_test=false);

#if (USE_JSON)
void getJson(int32_t *values, uint8_t length, char *json_buffer, size_t json_buffer_length = JSON_BUFFER_LENGTH);
void getJson(int32_t *values, uint8_t length, char *json_buffer, size_t json_buffer_length = JSON_BUFFER_LENGTH, bool is_test=false);
#endif

void resetPrepared();
void resetPrepared(bool is_test = false);

protected:

Expand Down Expand Up @@ -375,13 +381,13 @@ class SensorDriverHih6100 : public SensorDriver {
};
void setup();
void prepare(bool is_test = false);
void get(int32_t *values, uint8_t length);
void get(int32_t *values, uint8_t length, bool is_test=false);

#if (USE_JSON)
void getJson(int32_t *values, uint8_t length, char *json_buffer, size_t json_buffer_length = JSON_BUFFER_LENGTH);
void getJson(int32_t *values, uint8_t length, char *json_buffer, size_t json_buffer_length = JSON_BUFFER_LENGTH, bool is_test=false);
#endif

void resetPrepared();
void resetPrepared(bool is_test = false);

protected:

Expand Down Expand Up @@ -413,13 +419,13 @@ class SensorDriverHyt2X1 : public SensorDriver {
};
void setup();
void prepare(bool is_test = false);
void get(int32_t *values, uint8_t length);
void get(int32_t *values, uint8_t length, bool is_test=false);

#if (USE_JSON)
void getJson(int32_t *values, uint8_t length, char *json_buffer, size_t json_buffer_length = JSON_BUFFER_LENGTH);
void getJson(int32_t *values, uint8_t length, char *json_buffer, size_t json_buffer_length = JSON_BUFFER_LENGTH, bool is_test=false);
#endif

void resetPrepared();
void resetPrepared(bool is_test = false);

protected:

Expand Down Expand Up @@ -455,14 +461,14 @@ class SensorDriverDw1 : public SensorDriver {
};
void setup();
void prepare(bool is_test = false);
void get(int32_t *values, uint8_t length);
void get(int32_t *values, uint8_t length, bool is_test=false);
void getSDfromUV(int32_t u, int32_t v, double *speed, double *direction);

#if (USE_JSON)
void getJson(int32_t *values, uint8_t length, char *json_buffer, size_t json_buffer_length = JSON_BUFFER_LENGTH);
void getJson(int32_t *values, uint8_t length, char *json_buffer, size_t json_buffer_length = JSON_BUFFER_LENGTH, bool is_test=false);
#endif

void resetPrepared();
void resetPrepared(bool is_test = false);

protected:

Expand Down Expand Up @@ -498,13 +504,13 @@ class SensorDriverRain : public SensorDriver {
};
void setup();
void prepare(bool is_test = false);
void get(int32_t *values, uint8_t length);
void get(int32_t *values, uint8_t length, bool is_test=false);

#if (USE_JSON)
void getJson(int32_t *values, uint8_t length, char *json_buffer, size_t json_buffer_length = JSON_BUFFER_LENGTH);
void getJson(int32_t *values, uint8_t length, char *json_buffer, size_t json_buffer_length = JSON_BUFFER_LENGTH, bool is_test=false);
#endif

void resetPrepared();
void resetPrepared(bool is_test = false);

protected:

Expand Down Expand Up @@ -537,13 +543,13 @@ class SensorDriverTh : public SensorDriver {
};
void setup();
void prepare(bool is_test = false);
void get(int32_t *values, uint8_t length);
void get(int32_t *values, uint8_t length, bool is_test=false);

#if (USE_JSON)
void getJson(int32_t *values, uint8_t length, char *json_buffer, size_t json_buffer_length = JSON_BUFFER_LENGTH);
void getJson(int32_t *values, uint8_t length, char *json_buffer, size_t json_buffer_length = JSON_BUFFER_LENGTH, bool is_test=false);
#endif

void resetPrepared();
void resetPrepared(bool is_test = false);

protected:

Expand Down Expand Up @@ -578,13 +584,13 @@ class SensorDriverDigitecoPower : public SensorDriver {
};
void setup();
void prepare(bool is_test = false);
void get(int32_t *values, uint8_t length);
void get(int32_t *values, uint8_t length, bool is_test=false);

#if (USE_JSON)
void getJson(int32_t *values, uint8_t length, char *json_buffer, size_t json_buffer_length = JSON_BUFFER_LENGTH);
void getJson(int32_t *values, uint8_t length, char *json_buffer, size_t json_buffer_length = JSON_BUFFER_LENGTH, bool is_test=false);
#endif

void resetPrepared();
void resetPrepared(bool is_test = false);

protected:

Expand Down Expand Up @@ -631,13 +637,13 @@ class SensorDriverWind : public SensorDriver {
};
void setup();
void prepare(bool is_test = false);
void get(int32_t *values, uint8_t length);
void get(int32_t *values, uint8_t length, bool is_test=false);

#if (USE_JSON)
void getJson(int32_t *values, uint8_t length, char *json_buffer, size_t json_buffer_length = JSON_BUFFER_LENGTH);
void getJson(int32_t *values, uint8_t length, char *json_buffer, size_t json_buffer_length = JSON_BUFFER_LENGTH, bool is_test=false);
#endif

void resetPrepared();
void resetPrepared(bool is_test = false);

protected:

Expand Down Expand Up @@ -667,13 +673,13 @@ class SensorDriverSolarRadiation : public SensorDriver {
};
void setup();
void prepare(bool is_test = false);
void get(int32_t *values, uint8_t length);
void get(int32_t *values, uint8_t length, bool is_test=false);

#if (USE_JSON)
void getJson(int32_t *values, uint8_t length, char *json_buffer, size_t json_buffer_length = JSON_BUFFER_LENGTH);
void getJson(int32_t *values, uint8_t length, char *json_buffer, size_t json_buffer_length = JSON_BUFFER_LENGTH, bool is_test=false);
#endif

void resetPrepared();
void resetPrepared(bool is_test = false);

protected:

Expand Down Expand Up @@ -703,13 +709,13 @@ class SensorDriverOpc : public SensorDriver {
};
void setup();
void prepare(bool is_test = false);
void get(int32_t *values, uint8_t length);
void get(int32_t *values, uint8_t length, bool is_test=false);

#if (USE_JSON)
void getJson(int32_t *values, uint8_t length, char *json_buffer, size_t json_buffer_length = JSON_BUFFER_LENGTH);
void getJson(int32_t *values, uint8_t length, char *json_buffer, size_t json_buffer_length = JSON_BUFFER_LENGTH, bool is_test=false);
#endif

void resetPrepared();
void resetPrepared(bool is_test = false);

protected:

Expand Down Expand Up @@ -749,13 +755,13 @@ class SensorDriverLeaf : public SensorDriver {
};
void setup();
void prepare(bool is_test = false);
void get(int32_t *values, uint8_t length);
void get(int32_t *values, uint8_t length, bool is_test=false);

#if (USE_JSON)
void getJson(int32_t *values, uint8_t length, char *json_buffer, size_t json_buffer_length = JSON_BUFFER_LENGTH);
void getJson(int32_t *values, uint8_t length, char *json_buffer, size_t json_buffer_length = JSON_BUFFER_LENGTH, bool is_test=false);
#endif

void resetPrepared();
void resetPrepared(bool is_test = false);

protected:

Expand Down
10 changes: 10 additions & 0 deletions platformio/stima_v3/i2c-rain/src/i2c-rain-config.h
Original file line number Diff line number Diff line change
Expand Up @@ -169,3 +169,13 @@ WDTO_1S, WDTO_2S, WDTO_4S, WDTO_8S
#define TIMER1_TCNT1_VALUE (0xFFFFUL - (TIMER1_INTERRUPT_TIME_MS*1000UL/(1024 / (F_CPU/1000000)))+1)

#endif

/*********************************************************************
* TASKS
*********************************************************************/

/*!
\def TRANSACTION_TIMEOUT_MS
\brief Timeout for command transaction.
*/
#define TRANSACTION_TIMEOUT_MS (12000)
12 changes: 12 additions & 0 deletions platformio/stima_v3/i2c-rain/src/i2c-rain.h
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,18 @@ volatile uint8_t ready_tasks_count;
*/
uint32_t awakened_event_occurred_time_ms;

/*!
\var inside_transaction
\brief Status of command transaction.
*/
volatile bool inside_transaction;

/*!
\var transaction_time
\brief Timer counter variable for compute command transaction timeout.
*/
volatile uint16_t transaction_time;

/*!
\var is_start
\brief Execute start command.
Expand Down
28 changes: 24 additions & 4 deletions platformio/stima_v3/i2c-rain/src/i2c-rain.ino
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
/**@file i2c-rain.ino */

/*********************************************************************
Copyright (C) 2022 Marco Baldinetti <m.baldinetti@digiteco.it>
authors:
Expand Down Expand Up @@ -242,6 +240,9 @@ void init_tasks() {
// reset tipping bucket debounce value
rain_tips_event_occurred_time_ms = -configuration.tipping_bucket_time_ms;
interrupts();

transaction_time = 0;
inside_transaction = false;
}

void init_pins() {
Expand Down Expand Up @@ -297,6 +298,16 @@ ISR(TIMER1_OVF_vect) {
//! Pre-load timer counter register
TCNT1 = TIMER1_TCNT1_VALUE;
i2c_time+=TIMER1_INTERRUPT_TIME_MS/1000;

if (inside_transaction) {
//! increment transaction_time by TIMER1_INTERRUPT_TIME_MS
transaction_time += TIMER1_INTERRUPT_TIME_MS;

if (transaction_time >= TRANSACTION_TIMEOUT_MS) {
transaction_time = 0;
inside_transaction = false;
}
}
}
#endif

Expand Down Expand Up @@ -386,6 +397,8 @@ void i2c_request_interrupt_handler() {
// write readable_data_length bytes of data stored in readable_data_read_ptr (base) + readable_data_address (offset) on i2c bus
Wire.write((uint8_t *)readable_data_read_ptr+readable_data_address, readable_data_length);
Wire.write(crc8((uint8_t *)readable_data_read_ptr+readable_data_address, readable_data_length));

inside_transaction = false;
}

void i2c_receive_interrupt_handler(int rx_data_length) {
Expand Down Expand Up @@ -555,6 +568,7 @@ void command_task() {
LOGN(F("Execute [ %s ]"), "ONESHOT START");
is_start = true;
is_stop = false;
commands();
} else {
LOGE(F("Skip command [ %s ] in continous mode"), "ONESHOT START");
}
Expand All @@ -565,6 +579,8 @@ void command_task() {
LOGN(F("Execute [ %s ]"), "ONESHOT STOP");
is_start = false;
is_stop = true;
commands();
inside_transaction = true;
} else {
LOGE(F("Skip command [ %s ] in continous mode"), "ONESHOT STOP");
}
Expand All @@ -575,6 +591,8 @@ void command_task() {
LOGN(F("Execute [ %s ]"), "ONESHOT START-STOP");
is_start = true;
is_stop = true;
commands();
inside_transaction = true;
} else {
LOGE(F("Skip command [ %s ] in continous mode"), "ONESHOT START-STOP");
}
Expand All @@ -585,6 +603,7 @@ void command_task() {
is_start = false;
is_stop = true;
is_test = true;
commands();
break;

case I2C_RAIN_COMMAND_SAVE:
Expand All @@ -596,8 +615,6 @@ void command_task() {
default:
LOGE(F("Command UNKNOWN"));
}

commands();

noInterrupts();
is_event_command_task = false;
Expand All @@ -608,6 +625,9 @@ void command_task() {


void commands() {

if (inside_transaction) return;

noInterrupts();

if (configuration.is_oneshot){
Expand Down
7 changes: 7 additions & 0 deletions platformio/stima_v3/i2c-th/src/i2c-th-config.h
Original file line number Diff line number Diff line change
Expand Up @@ -227,4 +227,11 @@ setting it to 3980 ms we gain 20 ms every sample, 300 ms every observation, 4500
*/
#define SENSORS_RETRY_DELAY_MS (100)

/*!
\def TRANSACTION_TIMEOUT_MS
\brief Timeout for command transaction.
*/
#define TRANSACTION_TIMEOUT_MS (12000)


#endif
Loading