Skip to content

Commit e9f631a

Browse files
committed
fix mocpp_tick_ms() on esp-idf integer overflow
1 parent 8657db0 commit e9f631a

File tree

2 files changed

+23
-5
lines changed

2 files changed

+23
-5
lines changed

src/MicroOcpp/Platform.cpp

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,27 @@ unsigned long mocpp_tick_ms_custom() {
3939
return 0;
4040
}
4141
}
42-
#endif
42+
#else
43+
44+
#if MO_PLATFORM == MO_PLATFORM_ESPIDF
45+
#include "freertos/FreeRTOS.h"
46+
#include "freertos/task.h"
47+
48+
namespace MicroOcpp {
49+
50+
decltype(xTaskGetTickCount()) mocpp_ticks_count = 0;
51+
unsigned long mocpp_millis_count = 0;
4352

44-
#if MO_PLATFORM == MO_PLATFORM_UNIX
53+
}
54+
55+
unsigned long mocpp_tick_ms_espidf() {
56+
auto ticks_now = xTaskGetTickCount();
57+
MicroOcpp::mocpp_millis_count += ((ticks_now - MicroOcpp::mocpp_ticks_count) * 1000UL) / configTICK_RATE_HZ;
58+
MicroOcpp::mocpp_ticks_count = ticks_now;
59+
return MicroOcpp::mocpp_millis_count;
60+
}
61+
62+
#elif MO_PLATFORM == MO_PLATFORM_UNIX
4563
#include <chrono>
4664

4765
namespace MicroOcpp {
@@ -61,6 +79,7 @@ unsigned long mocpp_tick_ms_unix() {
6179
return (unsigned long) ms.count();
6280
}
6381
#endif
82+
#endif
6483

6584
#if MO_PLATFORM != MO_PLATFORM_ARDUINO
6685
void dtostrf(float value, int min_width, int num_digits_after_decimal, char *target){

src/MicroOcpp/Platform.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,8 @@ unsigned long mocpp_tick_ms_custom();
8686
#include <Arduino.h>
8787
#define mocpp_tick_ms millis
8888
#elif MO_PLATFORM == MO_PLATFORM_ESPIDF
89-
#include "freertos/FreeRTOS.h"
90-
#include "freertos/task.h"
91-
#define mocpp_tick_ms(X) ((xTaskGetTickCount() * 1000UL) / configTICK_RATE_HZ)
89+
unsigned long mocpp_tick_ms_espidf();
90+
#define mocpp_tick_ms mocpp_tick_ms_espidf
9291
#elif MO_PLATFORM == MO_PLATFORM_UNIX
9392
unsigned long mocpp_tick_ms_unix();
9493
#define mocpp_tick_ms mocpp_tick_ms_unix

0 commit comments

Comments
 (0)