diff --git a/Grbl_Esp32/src/UserOutput.cpp b/Grbl_Esp32/src/UserOutput.cpp
index cac48afd..8bab3deb 100644
--- a/Grbl_Esp32/src/UserOutput.cpp
+++ b/Grbl_Esp32/src/UserOutput.cpp
@@ -49,7 +49,8 @@ namespace UserOutput {
// ==================================================================
- AnalogOutput::AnalogOutput(uint8_t number, Pin& pin, float pwm_frequency) : _number(number), _pin(pin), _pwm_frequency(pwm_frequency) {
+ AnalogOutput::AnalogOutput(uint8_t number, Pin& pin, uint32_t pwm_frequency) :
+ _number(number), _pin(pin), _pwm_frequency(pwm_frequency) {
if (_pin.undefined()) {
return;
}
diff --git a/Grbl_Esp32/src/UserOutput.h b/Grbl_Esp32/src/UserOutput.h
index 42beb761..bedd466a 100644
--- a/Grbl_Esp32/src/UserOutput.h
+++ b/Grbl_Esp32/src/UserOutput.h
@@ -40,7 +40,7 @@ namespace UserOutput {
class AnalogOutput {
public:
- AnalogOutput(uint8_t number, Pin& pin, float pwm_frequency);
+ AnalogOutput(uint8_t number, Pin& pin, uint32_t pwm_frequency);
bool set_level(uint32_t numerator);
uint32_t denominator() { return 1UL << _resolution_bits; };
@@ -51,7 +51,7 @@ namespace UserOutput {
uint8_t _number = UNDEFINED_OUTPUT;
Pin& _pin;
uint8_t _pwm_channel = -1; // -1 means invalid or not setup
- float _pwm_frequency;
+ uint32_t _pwm_frequency;
uint8_t _resolution_bits;
uint32_t _current_value;
};
diff --git a/UnitTests.vcxproj b/UnitTests.vcxproj
index 98e7da4d..629c4422 100644
--- a/UnitTests.vcxproj
+++ b/UnitTests.vcxproj
@@ -166,6 +166,7 @@
+
@@ -304,6 +305,7 @@
+
diff --git a/UnitTests.vcxproj.filters b/UnitTests.vcxproj.filters
index 2c19bf16..476faeb8 100644
--- a/UnitTests.vcxproj.filters
+++ b/UnitTests.vcxproj.filters
@@ -1,279 +1,861 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ {FDE5A3A1-4E92-3B7B-BA93-74C1C89D4E58}
+
+
+ {2896077E-16A8-3EAE-B5C4-159DC4FA2436}
+
+
+ {EED825A4-B73C-33F5-96D4-769C2A167F8C}
+
+
+ {58B2381C-99DF-3035-A3F0-4AADBB709BE7}
+
+
+ {245249FF-C286-3813-BCCF-413895DB9135}
+
+
+ {76D241B7-03F7-3DD3-9834-4EFF878918F6}
+
+
+ {2D9E09B1-7C61-3463-9CF9-D57FA109EF03}
+
+
+ {57EA2BFF-20B3-353C-8D6A-52862855F6A7}
+
+
+ {E7013460-23D9-3E12-8F4C-4A4FE671769C}
+
+
+ {4FE640FC-EB59-3010-9873-80157C13991B}
+
+
+ {D77ADD93-FE73-3DE5-92BB-25ABE9077DD6}
+
+
+ {9396f607-9b99-4f0e-bfdb-f549462e0205}
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ src\Machine
+
+
+ src
+
+
+ src\Motors
+
+
+ src\Configuration
+
+
+ src\Configuration
+
+
+ src\Pins
+
+
+ src
+
+
+ X86TestSupport
+
+
+ src\Spindles
+
+
+ src\Configuration
+
+
+ src
+
+
+ X86TestSupport
+
+
+ src
+
+
+ src\Configuration
+
+
+ src
+
+
+ src\Pins
+
+
+ X86TestSupport
+
+
+ src
+
+
+ src
+
+
+ src
+
+
+ src\Motors
+
+
+ src\Machine
+
+
+ src
+
+
+ src\Motors
+
+
+ src\WebUI
+
+
+ src\Pins
+
+
+ src\Pins
+
+
+ src
+
+
+ X86TestSupport
+
+
+ src
+
+
+ src
+
+
+ src\Configuration
+
+
+ src\WebUI
+
+
+ src
+
+
+ X86TestSupport
+
+
+ src\Machine
+
+
+ src\Motors
+
+
+ src
+
+
+ src\WebUI
+
+
+ src\Pins
+
+
+ X86TestSupport
+
+
+ X86TestSupport
+
+
+ src\Configuration
+
+
+ src
+
+
+ src\WebUI
+
+
+ src
+
+
+ X86TestSupport
+
+
+ src
+
+
+ src\StackTrace
+
+
+ src\WebUI
+
+
+ X86TestSupport
+
+
+ src
+
+
+ src\WebUI
+
+
+ X86TestSupport
+
+
+ src\Spindles
+
+
+ src\Machine
+
+
+ X86TestSupport
+
+
+ src\Machine
+
+
+ X86TestSupport
+
+
+ src
+
+
+ src\Spindles
+
+
+ X86TestSupport
+
+
+ X86TestSupport
+
+
+ X86TestSupport
+
+
+ src\WebUI
+
+
+ src\Spindles
+
+
+ src\Motors
+
+
+ src
+
+
+ src
+
+
+ src\Motors
+
+
+ src\Configuration
+
+
+ X86TestSupport
+
+
+ src\WebUI
+
+
+ X86TestSupport
+
+
+ src\Spindles
+
+
+ src
+
+
+ src
+
+
+ src\Spindles
+
+
+ src
+
+
+ src\Spindles
+
+
+ src
+
+
+ X86TestSupport
+
+
+ src\Spindles
+
+
+ src\Machine
+
+
+ src\Motors
+
+
+ src\Motors
+
+
+ src\Machine
+
+
+ src\Pins
+
+
+ X86TestSupport
+
+
+ src\Machine
+
+
+ src\Machine
+
+
+ X86TestSupport
+
+
+ X86TestSupport
+
+
+ src
+
+
+ src
+
+
+ src\WebUI
+
+
+ X86TestSupport
+
+
+ src
+
+
+ src\WebUI
+
+
+ src\Pins
+
+
+ src\Pins
+
+
+ src
+
+
+ src
+
+
+ src\Pins
+
+
+ src\WebUI
+
+
+ src
+
+
+ src\Configuration
+
+
+ src\Spindles
+
+
+ X86TestSupport
+
+
+ src\Configuration
+
+
+ src
+
+
+ src\Pins
+
+
+ src\Spindles
+
+
+ src\Machine
+
+
+ src\Configuration
+
+
+ X86TestSupport
+
+
+ src\WebUI
+
+
+ src
+
+
+ src\WebUI
+
+
+ src\WebUI
+
+
+ src\Machine
+
+
+ src\Machine
+
+
+ X86TestSupport
+
+
+ X86TestSupport
+
+
+ src
+
+
+ src
+
+
+ src\StackTrace
+
+
+ src\Configuration
+
+
+ src\Motors
+
+
+ src\Configuration
+
+
+ src
+
+
+ src\Spindles
+
+
+ src
+
+
+ src\Spindles
+
+
+ src\Motors
+
+
+ src\Configuration
+
+
+ X86TestSupport
+
+
+ src\Configuration
+
+
+ src
+
+
+ src\Spindles
+
+
+ src\Machine
+
+
+ X86TestSupport
+
+
+ src\Machine
+
+
+ X86TestSupport
+
+
+ X86TestSupport
+
+
+ X86TestSupport
+
+
+ src\Configuration
+
+
+ src
+
+
+ src\Configuration
+
+
+ tests
+
+
+ tests
+
+
+ X86TestSupport
+
-
-
-
-
-
-
-
-
-
+
+ src\WebUI
+
+
+ src\Spindles
+
+
+ src\Configuration
+
+
+ src
+
+
+ src\WebUI
+
+
+ src\Spindles
+
+
+ src
+
+
+ src\Configuration
+
+
+ src
+
+
+ src\Spindles
+
+
+ src\Pins
+
+
+ src\Machine
+
+
+ src\WebUI
+
+
+ src
+
+
+ src
+
+
+ src\Pins
+
+
+ src
+
+
+ src
+
+
+ src
+
+
+ src
+
+
+ src\Motors
+
+
+ src
+
+
+ src\Motors
+
+
+ src\Configuration
+
+
+ src\Spindles
+
+
+ src\Pins
+
+
+ src\Machine
+
+
+ src
+
+
+ X86TestSupport
+
+
+ src
+
+
+ src
+
+
+ src\Pins
+
+
+ src\Pins
+
+
+ src
+
+
+ X86TestSupport
+
+
+ src\Machine
+
+
+ src\Pins
+
+
+ src\Configuration
+
+
+ src
+
+
+ src\Spindles
+
+
+ src
+
+
+ src\WebUI
+
+
+ src\Pins
+
+
+ src
+
+
+ src\StackTrace
+
+
+ src\WebUI
+
+
+ src
+
+
+ src\Spindles
+
+
+ src\Configuration
+
+
+ src\WebUI
+
+
+ src
+
+
+ src\Spindles
+
+
+ src\StackTrace
+
+
+ src\Motors
+
+
+ src\Motors
+
+
+ src
+
+
+ src
+
+
+ src\WebUI
+
+
+ src\Motors
+
+
+ src\Spindles
+
+
+ src\Motors
+
+
+ X86TestSupport
+
+
+ src\Spindles
+
+
+ src\Motors
+
+
+ src
+
+
+ X86TestSupport
+
+
+ src\Configuration
+
+
+ src
+
+
+ src
+
+
+ src\Spindles
+
+
+ src\Motors
+
+
+ src
+
+
+ src\WebUI
+
+
+ src\Machine
+
+
+ src
+
+
+ src
+
+
+ src\Pins
+
+
+ src\Machine
+
+
+ src\Configuration
+
+
+ src\WebUI
+
+
+ src\Spindles
+
+
+ src\WebUI
+
+
+ src\Pins
+
+
+ src\Machine
+
+
+ src\Spindles
+
+
+ src\Machine
+
+
+ src\WebUI
+
+
+ src\Pins
+
+
+ src\WebUI
+
+
+ src
+
+
+ X86TestSupport
+
+
+ src\Spindles
+
+
+ src
+
+
+ src\Configuration
+
+
+ X86TestSupport
+
+
+ src\Machine
+
+
+ src
+
+
+ src\WebUI
+
+
+ tests
+
+
+ tests
+
+
+ tests
+
+
+ tests
+
+
+ tests
+
+
+ tests
+
+
+ tests
+
+
+ tests
+
+
+ tests
+
+
+ tests
+
+
+ tests
+
+
+ X86TestSupport
+
+
+
+
+ src
+
+
+ src\Spindles
+
+
+ src\Configuration
+
+
+ src
+
+
+ src\Configuration
+
+
+ src\Configuration
+
+
+ src\Configuration
+
+
+ src\Motors
+
+
+ tests
+
\ No newline at end of file
diff --git a/X86TestSupport/Arduino.cpp b/X86TestSupport/Arduino.cpp
index 3ebfb712..7928b2dd 100644
--- a/X86TestSupport/Arduino.cpp
+++ b/X86TestSupport/Arduino.cpp
@@ -42,3 +42,7 @@ extern "C" void __digitalWrite(uint8_t pin, uint8_t val) {
void delay(int ms) {
std::this_thread::sleep_for(std::chrono::milliseconds(ms));
}
+
+int temperatureRead(void) {
+ return 22; // Nobody cares
+}
diff --git a/X86TestSupport/Capture.h b/X86TestSupport/Capture.h
new file mode 100644
index 00000000..699d904b
--- /dev/null
+++ b/X86TestSupport/Capture.h
@@ -0,0 +1,44 @@
+#pragma once
+
+#include
+#include
+#include
+
+// Capture here defines everything that we want to know. Specifically, we want to capture per ID:
+// 1. Timings. *When* did something happen?
+// 2. Data. This can be a simple '1' or '0', or a character stream. For simplicity, we store a vector of integers.
+//
+// An ID itself is a string. This can be a pin ID (gpio.1), an uart (uart.0), an ledc, or whatever.
+
+struct CaptureEvent {
+ uint32_t time;
+ std::string id;
+ std::vector data;
+};
+
+class Capture {
+ Capture() {}
+
+ std::vector events;
+ uint32_t currentTime;
+
+public:
+ static Capture& instance() {
+ static Capture instance;
+ return instance;
+ }
+
+ void reset() { events.clear(); }
+
+ void write(std::string id, uint32_t value) {
+ CaptureEvent evt;
+ evt.time = currentTime;
+ evt.id = id;
+ evt.data.reserve(1);
+ evt.data.push_back(value);
+ events.push_back(evt);
+ }
+
+ void wait(uint32_t delay) { currentTime += delay; }
+ void yield() { wait(1); }
+};
diff --git a/X86TestSupport/TODO.txt b/X86TestSupport/TODO.txt
index 23b35888..01d9874e 100644
--- a/X86TestSupport/TODO.txt
+++ b/X86TestSupport/TODO.txt
@@ -16,22 +16,9 @@ TODO: Two things need to be captured: (1) uart/pin/etc and (2) timings. All timi
"int __cdecl i2s_out_set_pulse_callback(void (__cdecl*)(void))" (?i2s_out_set_pulse_callback@@YAHP6AXXZ@Z)
"int __cdecl i2s_out_set_pulse_period(unsigned int)" (?i2s_out_set_pulse_period@@YAHI@Z)
"int __cdecl i2s_out_set_stepping(void)" (?i2s_out_set_stepping@@YAHXZ)
-"int __cdecl nvs_erase_key(class NvsEmulator *,char const *)" (?nvs_erase_key@@YAHPAVNvsEmulator@@PBD@Z)
-"int __cdecl nvs_get_blob(class NvsEmulator *,char const *,void *,unsigned int *)" (?nvs_get_blob@@YAHPAVNvsEmulator@@PBDPAXPAI@Z)
-"int __cdecl nvs_get_i32(class NvsEmulator *,char const *,int *)" (?nvs_get_i32@@YAHPAVNvsEmulator@@PBDPAH@Z)
-"int __cdecl nvs_get_i8(class NvsEmulator *,char const *,signed char *)" (?nvs_get_i8@@YAHPAVNvsEmulator@@PBDPAC@Z)
-"int __cdecl nvs_get_str(class NvsEmulator *,char const *,char *,unsigned int *)" (?nvs_get_str@@YAHPAVNvsEmulator@@PBDPADPAI@Z)
-"int __cdecl nvs_open(char const *,enum nvs_open_mode,class NvsEmulator * *)" (?nvs_open@@YAHPBDW4nvs_open_mode@@PAPAVNvsEmulator@@@Z)
-"int __cdecl nvs_set_blob(class NvsEmulator *,char const *,void const *,unsigned int)" (?nvs_set_blob@@YAHPAVNvsEmulator@@PBDPBXI@Z)
-"int __cdecl nvs_set_i32(class NvsEmulator *,char const *,int)" (?nvs_set_i32@@YAHPAVNvsEmulator@@PBDH@Z)
-"int __cdecl nvs_set_i8(class NvsEmulator *,char const *,int)" (?nvs_set_i8@@YAHPAVNvsEmulator@@PBDH@Z)
-"int __cdecl nvs_set_str(class NvsEmulator *,char const *,char const *)" (?nvs_set_str@@YAHPAVNvsEmulator@@PBD1@Z)
"int __cdecl rmt_config(struct rmt_config_t const *)" (?rmt_config@@YAHPBUrmt_config_t@@@Z)
"int __cdecl rmt_fill_tx_items(enum rmt_channel_t,struct rmt_item32_s const *,unsigned short,unsigned short)" (?rmt_fill_tx_items@@YAHW4rmt_channel_t@@PBUrmt_item32_s@@GG@Z)
"int __cdecl rmt_set_source_clk(enum rmt_channel_t,enum rmt_source_clk_t)" (?rmt_set_source_clk@@YAHW4rmt_channel_t@@W4rmt_source_clk_t@@@Z)
-"int __cdecl strcasecmp(char const *,char const *)" (?strcasecmp@@YAHPBD0@Z)
-"int __cdecl strncasecmp(char const *,char const *,unsigned int)" (?strncasecmp@@YAHPBD0I@Z)
-"int __cdecl temperatureRead(void)" (?temperatureRead@@YAHXZ)
"int __cdecl uart_driver_install(enum uart_port_t,int,int,int,void * *,int)" (?uart_driver_install@@YAHW4uart_port_t@@HHHPAPAXH@Z)
"int __cdecl uart_flush(enum uart_port_t)" (?uart_flush@@YAHW4uart_port_t@@@Z)
"int __cdecl uart_get_buffered_data_len(enum uart_port_t,unsigned int *)" (?uart_get_buffered_data_len@@YAHW4uart_port_t@@PAI@Z)
diff --git a/X86TestSupport/WString.cpp b/X86TestSupport/WString.cpp
index 74883bfb..68e731c3 100644
--- a/X86TestSupport/WString.cpp
+++ b/X86TestSupport/WString.cpp
@@ -3,12 +3,12 @@
#include
#include
-#pragma warning(disable : 4996) // itoa
+#pragma warning(disable : 4996) // itoa
std::string String::ValueToString(int value, int base) {
char buffer[100] = { 0 };
int number_base = 10;
- std::string output = itoa(value, buffer, base);
+ std::string output = itoa(value, buffer, base);
return output;
}
@@ -19,62 +19,78 @@ std::string String::DecToString(double value, int decimalPlaces) {
return s;
}
-StringAppender& operator +(const StringAppender& lhs, const String& rhs) {
+StringAppender& operator+(const StringAppender& lhs, const String& rhs) {
StringAppender& a = const_cast(lhs);
a.concat(rhs);
return a;
}
-StringAppender& operator +(const StringAppender& lhs, const char* cstr) {
+StringAppender& operator+(const StringAppender& lhs, const char* cstr) {
StringAppender& a = const_cast(lhs);
a.concat(cstr);
return a;
}
-StringAppender& operator +(const StringAppender& lhs, char c) {
+StringAppender& operator+(const StringAppender& lhs, char c) {
StringAppender& a = const_cast(lhs);
a.concat(c);
return a;
}
-StringAppender& operator +(const StringAppender& lhs, unsigned char num) {
+StringAppender& operator+(const StringAppender& lhs, unsigned char num) {
StringAppender& a = const_cast(lhs);
a.concat(num);
return a;
}
-StringAppender& operator +(const StringAppender& lhs, int num) {
+StringAppender& operator+(const StringAppender& lhs, int num) {
StringAppender& a = const_cast(lhs);
a.concat(num);
return a;
}
-StringAppender& operator +(const StringAppender& lhs, unsigned int num) {
+StringAppender& operator+(const StringAppender& lhs, unsigned int num) {
StringAppender& a = const_cast(lhs);
a.concat(num);
return a;
}
-StringAppender& operator +(const StringAppender& lhs, long num) {
+StringAppender& operator+(const StringAppender& lhs, long num) {
StringAppender& a = const_cast(lhs);
a.concat(num);
return a;
}
-StringAppender& operator +(const StringAppender& lhs, unsigned long num) {
+StringAppender& operator+(const StringAppender& lhs, unsigned long num) {
StringAppender& a = const_cast(lhs);
a.concat(num);
return a;
}
-StringAppender& operator +(const StringAppender& lhs, float num) {
+StringAppender& operator+(const StringAppender& lhs, float num) {
StringAppender& a = const_cast(lhs);
a.concat(num);
return a;
}
-StringAppender& operator +(const StringAppender& lhs, double num) {
+StringAppender& operator+(const StringAppender& lhs, double num) {
StringAppender& a = const_cast(lhs);
a.concat(num);
return a;
}
+
+int strcasecmp(const char* lhs, const char* rhs) {
+ while (*lhs && *rhs && tolower(*lhs) == tolower(*rhs)) {
+ ++lhs;
+ ++rhs;
+ }
+ return (*lhs) == '\0' && (*rhs) == '\0';
+}
+int strncasecmp(const char* lhs, const char* rhs, size_t count) {
+ while (*lhs && *rhs && tolower(*lhs) == tolower(*rhs) && count > 0) {
+ ++lhs;
+ ++rhs;
+ --count;
+ }
+ return count == 0 || ((*lhs) == '\0' && (*rhs) == '\0');
+}
diff --git a/X86TestSupport/nvs.cpp b/X86TestSupport/nvs.cpp
new file mode 100644
index 00000000..2297096d
--- /dev/null
+++ b/X86TestSupport/nvs.cpp
@@ -0,0 +1,64 @@
+#include "nvs.h"
+
+esp_err_t nvs_open(const char* name, nvs_open_mode open_mode, nvs_handle* out_handle) {
+ *out_handle = &(NvsEmulator::instance());
+ return ESP_OK;
+}
+esp_err_t nvs_get_i32(nvs_handle handle, const char* key, int32_t* out_value) {
+ if (handle->tryGetI32(key, *out_value)) {
+ return ESP_OK;
+ } else {
+ return ESP_ERR_NVS_NOT_FOUND;
+ }
+}
+esp_err_t nvs_get_i8(nvs_handle handle, const char* key, int8_t* out_value) {
+ if (handle->tryGetI8(key, *out_value)) {
+ return ESP_OK;
+ } else {
+ return ESP_ERR_NVS_NOT_FOUND;
+ }
+}
+esp_err_t nvs_get_str(nvs_handle handle, const char* key, char* out_value, size_t* length) {
+ if (handle->tryGetStr(key, out_value, *length)) {
+ return ESP_OK;
+ } else {
+ return ESP_ERR_NVS_NOT_FOUND;
+ }
+}
+esp_err_t nvs_get_blob(nvs_handle handle, const char* key, void* out_value, size_t* length) {
+ if (handle->tryGetBlob(key, out_value, *length)) {
+ return ESP_OK;
+ } else {
+ return ESP_ERR_NVS_NOT_FOUND;
+ }
+}
+esp_err_t nvs_erase_key(nvs_handle handle, const char* key) {
+ handle->erase(key);
+ return ESP_OK;
+}
+esp_err_t nvs_erase_all(nvs_handle handle) {
+ handle->clear();
+ return ESP_OK;
+}
+esp_err_t nvs_set_i8(nvs_handle handle, const char* key, int8_t value) {
+ char* v = reinterpret_cast(&value);
+ std::string data(v, v + 1);
+ handle->set(key, data);
+ return ESP_OK;
+}
+esp_err_t nvs_set_i32(nvs_handle handle, const char* key, int32_t value) {
+ char* v = reinterpret_cast(&value);
+ std::string data(v, v + 4);
+ handle->set(key, data);
+ return ESP_OK;
+}
+esp_err_t nvs_set_str(nvs_handle handle, const char* key, const char* value) {
+ handle->set(key, value);
+ return ESP_OK;
+}
+esp_err_t nvs_set_blob(nvs_handle handle, const char* key, const void* value, size_t length) {
+ auto c = static_cast(value);
+ std::string data(c, c + length);
+ handle->set(key, data);
+ return ESP_OK;
+}
diff --git a/X86TestSupport/nvs.h b/X86TestSupport/nvs.h
index 5d9851dc..b558eecb 100644
--- a/X86TestSupport/nvs.h
+++ b/X86TestSupport/nvs.h
@@ -1,6 +1,7 @@
#pragma once
#include
+#include "esp_err.h"
class NvsEmulator {
// NVS is basically a key-value store.
@@ -28,10 +29,10 @@ public:
}
}
- bool tryGetStr(const char* str, char* buf, int32_t& len) {
+ bool tryGetStr(const char* str, char* buf, size_t& len) {
auto it = data.find(str);
if (it != data.end()) {
- auto v = int32_t(it->second.size());
+ auto v = it->second.size();
if (buf) {
if (v > len) {
v = len;
@@ -47,10 +48,10 @@ public:
}
}
- bool tryGetBlob(const char* str, char* buf, int32_t& len) {
+ bool tryGetBlob(const char* str, void* buf, size_t& len) {
auto it = data.find(str);
if (it != data.end()) {
- auto v = int32_t(it->second.size());
+ auto v = it->second.size();
if (buf) {
if (v > len) {
v = len;
@@ -66,6 +67,8 @@ public:
}
}
+ void set(const char* str, std::string value) { data[str] = value; }
+
void erase(const char* str) {
auto it = data.find(str);
if (it != data.end()) {
@@ -97,10 +100,7 @@ inline esp_err_t nvs_get_stats(const char* part_name, nvs_stats_t* stats) {
return ESP_OK;
}
-inline esp_err_t nvs_erase_all(nvs_handle handle) {
- handle->clear();
- return ESP_OK;
-}
+esp_err_t nvs_erase_all(nvs_handle handle);
enum nvs_open_mode { NVS_READWRITE };
@@ -157,7 +157,7 @@ esp_err_t nvs_get_blob(nvs_handle handle, const char* key, void* out_value, size
esp_err_t nvs_erase_key(nvs_handle handle, const char* key);
esp_err_t nvs_erase_all(nvs_handle handle);
-esp_err_t nvs_set_i8(nvs_handle handle, const char* key, int32_t value);
+esp_err_t nvs_set_i8(nvs_handle handle, const char* key, int8_t value);
esp_err_t nvs_set_i32(nvs_handle handle, const char* key, int32_t value);
esp_err_t nvs_set_str(nvs_handle handle, const char* key, const char* value);
esp_err_t nvs_set_blob(nvs_handle handle, const char* key, const void* value, size_t length);
diff --git a/generate_vcxproj.py b/generate_vcxproj.py
index c2624a6a..9f54c579 100644
--- a/generate_vcxproj.py
+++ b/generate_vcxproj.py
@@ -17,6 +17,7 @@ PATHS_TO_SEARCH = ['Grbl_Esp32']
HEADER_EXT = ['.h', '.inl']
SOURCE_EXT = ['.c', '.cpp']
OTHER_EXT = ['.ino', '.md']
+TEST_IGNORE = ['I2SOut.cpp','I2SOut.h']
import os, uuid
@@ -276,5 +277,15 @@ def main(paths):
for path in paths:
generator.Walk(path)
generator.Generate()
+
+def tests(paths):
+ generator = Generator()
+ generator.Name = "UnitTests"
+ OTHER_EXT = ['.md']
+ newpaths = ['Grbl_Esp32', 'X86TestSupport']
+ for path in newpaths:
+ generator.Walk(path)
+ generator.Generate()
main(PATHS_TO_SEARCH)
+