# Version Checker
这是一个用于 ESP-IDF 工程的版本号比较组件。
## 功能说明
* 支持纯数字方式比较 3 位或 4 位版本号大小。
* 支持纯数字方式判断 3 位或 4 位版本号是否完全相同。
* 支持字符串方式比较 `"1.5.23"`、`"2.0.32.105"` 这类版本号大小。
* 支持字符串方式判断版本号是否完全相同。
## 目录结构
```text
version_checker/
├── include/
│ └── version_checker.h
├── src/
│ └── version_checker.c
├── CMakeLists.txt
├── idf_component.yml
└── README.md
```
## 对外接口
头文件:
```c
#include "version_checker.h"
```
接口分类:
```c
bool version_is_greater_parts(...);
bool version_is_equal_parts(...);
bool version_is_greater_string(const char *current_version, const char *compare_version);
bool version_is_equal_string(const char *current_version, const char *compare_version);
```
说明:
* `version_is_greater_parts(...)` 支持 6 个参数和 8 个参数两种形式,分别对应 3 位版本号和 4 位版本号。
* `version_is_equal_parts(...)` 支持 6 个参数和 8 个参数两种形式,分别对应 3 位版本号和 4 位版本号。
* `version_is_greater_string(...)` 和 `version_is_equal_string(...)` 要求两边的版本号位数一致。
## 使用示例
### 数字方式
```c
bool result1 = version_is_greater_parts(1, 5, 26, 1, 5, 25);
bool result2 = version_is_greater_parts(2, 0, 32, 105, 2, 0, 32, 104);
bool result3 = version_is_equal_parts(1, 5, 23, 1, 5, 23);
bool result4 = version_is_equal_parts(2, 0, 32, 105, 2, 0, 32, 105);
```
### 字符串方式
```c
bool result1 = version_is_greater_string("1.5.26", "1.5.25");
bool result2 = version_is_greater_string("2.0.32.105", "2.0.32.104");
bool result3 = version_is_equal_string("1.5.23", "1.5.23");
bool result4 = version_is_equal_string("2.0.32.105", "2.0.32.105");
```
## main.c 测试示例
下面示例整理自 `main/main.c` 中的测试代码,可直接用于串口日志验证:
```c
bool parts_greater_3_true = version_is_greater_parts(1, 5, 26, 1, 5, 25);
ESP_LOGI(TAG, "比较 1.5.26 是否大于 1.5.25: %s", parts_greater_3_true ? "true" : "false");
bool parts_greater_3_false = version_is_greater_parts(1, 5, 25, 1, 5, 26);
ESP_LOGI(TAG, "比较 1.5.25 是否大于 1.5.26: %s", parts_greater_3_false ? "true" : "false");
bool parts_greater_4_true = version_is_greater_parts(2, 0, 32, 105, 2, 0, 32, 104);
ESP_LOGI(TAG, "比较 2.0.32.105 是否大于 2.0.32.104: %s", parts_greater_4_true ? "true" : "false");
bool parts_greater_4_false = version_is_greater_parts(2, 0, 32, 104, 2, 0, 32, 105);
ESP_LOGI(TAG, "比较 2.0.32.104 是否大于 2.0.32.105: %s", parts_greater_4_false ? "true" : "false");
bool parts_equal_3_true = version_is_equal_parts(1, 5, 23, 1, 5, 23);
ESP_LOGI(TAG, "比较 1.5.23 是否等于 1.5.23: %s", parts_equal_3_true ? "true" : "false");
bool parts_equal_3_false = version_is_equal_parts(1, 5, 23, 1, 5, 24);
ESP_LOGI(TAG, "比较 1.5.23 是否等于 1.5.24: %s", parts_equal_3_false ? "true" : "false");
bool parts_equal_4_true = version_is_equal_parts(2, 0, 32, 105, 2, 0, 32, 105);
ESP_LOGI(TAG, "比较 2.0.32.105 是否等于 2.0.32.105: %s", parts_equal_4_true ? "true" : "false");
bool parts_equal_4_false = version_is_equal_parts(2, 0, 32, 105, 2, 0, 32, 106);
ESP_LOGI(TAG, "比较 2.0.32.105 是否等于 2.0.32.106: %s", parts_equal_4_false ? "true" : "false");
bool string_greater_3_true = version_is_greater_string("1.5.26", "1.5.25");
ESP_LOGI(TAG, "比较 \"1.5.26\" 是否大于 \"1.5.25\": %s", string_greater_3_true ? "true" : "false");
bool string_greater_3_false = version_is_greater_string("1.5.25", "1.5.26");
ESP_LOGI(TAG, "比较 \"1.5.25\" 是否大于 \"1.5.26\": %s", string_greater_3_false ? "true" : "false");
bool string_greater_4_true = version_is_greater_string("2.0.32.105", "2.0.32.104");
ESP_LOGI(TAG, "比较 \"2.0.32.105\" 是否大于 \"2.0.32.104\": %s", string_greater_4_true ? "true" : "false");
bool string_greater_4_false = version_is_greater_string("2.0.32.104", "2.0.32.105");
ESP_LOGI(TAG, "比较 \"2.0.32.104\" 是否大于 \"2.0.32.105\": %s", string_greater_4_false ? "true" : "false");
bool string_equal_3_true = version_is_equal_string("1.5.23", "1.5.23");
ESP_LOGI(TAG, "比较 \"1.5.23\" 是否等于 \"1.5.23\": %s", string_equal_3_true ? "true" : "false");
bool string_equal_3_false = version_is_equal_string("1.5.23", "1.5.24");
ESP_LOGI(TAG, "比较 \"1.5.23\" 是否等于 \"1.5.24\": %s", string_equal_3_false ? "true" : "false");
bool string_equal_4_true = version_is_equal_string("2.0.32.105", "2.0.32.105");
ESP_LOGI(TAG, "比较 \"2.0.32.105\" 是否等于 \"2.0.32.105\": %s", string_equal_4_true ? "true" : "false");
bool string_equal_4_false = version_is_equal_string("2.0.32.105", "2.0.32.106");
ESP_LOGI(TAG, "比较 \"2.0.32.105\" 是否等于 \"2.0.32.106\": %s", string_equal_4_false ? "true" : "false");
```
idf.py add-dependency "dxbsw/version_checker^1.0.0"