Skip to content

Commit

Permalink
Home Accessory Architect v12.11.0 Merlin
Browse files Browse the repository at this point in the history
  • Loading branch information
RavenSystem committed Jan 16, 2024
1 parent 44982f9 commit 16aabfc
Show file tree
Hide file tree
Showing 9 changed files with 123 additions and 87 deletions.
2 changes: 1 addition & 1 deletion HAA/HAA_Installer/main/header.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@
#include "../../common/common_headers.h"

#define INSTALLER_BETA_REVISION "" // Format: "b01"
#define INSTALLER_VERSION "7.8.3"INSTALLER_BETA_REVISION
#define INSTALLER_VERSION "7.9.0"INSTALLER_BETA_REVISION

#endif // __HAA_OTA_HEADER_H__
18 changes: 17 additions & 1 deletion HAA/HAA_Installer/main/ota.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,13 @@
#include "errno.h"
#include "esp32_port.h"

#define sdk_system_overclock()
#define sdk_system_restoreclock()

#else // ESP_OPEN_RTOS

#include <esp8266.h>
#include <esplibs/libmain.h>
#include <sysparam.h>
#include <spiflash.h>
#include <rboot-api.h>
Expand Down Expand Up @@ -278,6 +282,7 @@ static int ota_connect(char* host, uint16_t port, int *socket, WOLFSSL** ssl, co

INFO_NNL("OK\nSNI..");
ret = wolfSSL_UseSNI(*ssl, WOLFSSL_SNI_HOST_NAME, host, strlen(host));

if (ret != SSL_SUCCESS) {
freeaddrinfo(res);
ERROR("%i", ret);
Expand All @@ -288,8 +293,13 @@ static int ota_connect(char* host, uint16_t port, int *socket, WOLFSSL** ssl, co

//wolfSSL_Debugging_OFF();

ret = wolfSSL_connect(*ssl);
sdk_system_overclock();

INFO_NNL("OK\nSSLConnect..");
ret = wolfSSL_connect(*ssl);

sdk_system_restoreclock();

if (ret != SSL_SUCCESS) {
freeaddrinfo(res);
ERROR("%i", ret);
Expand Down Expand Up @@ -582,7 +592,9 @@ static int ota_get_file_ex(char* repo, char* file, int sector, uint8_t* buffer,
//wolfSSL_Debugging_ON();
do {
if (is_ssl) {
sdk_system_overclock();
ret = wolfSSL_read(ssl, recv_buf, RECV_BUF_LEN - 1);
sdk_system_restoreclock();
} else {
ret = lwip_read(socket, recv_buf, RECV_BUF_LEN - 1);
}
Expand Down Expand Up @@ -831,6 +843,8 @@ int ota_get_sign(char* repo, char* file, uint8_t* signature, uint16_t port, bool
int ota_verify_sign(int start_sector, int filesize, uint8_t* signature) {
INFO(">>> Verifying");

sdk_system_overclock();

int bytes;
uint8_t hash[HASHSIZE];
uint8_t* buffer = malloc(1024);
Expand Down Expand Up @@ -872,6 +886,8 @@ int ota_verify_sign(int start_sector, int filesize, uint8_t* signature) {
int verify = 0;
wc_ecc_verify_hash(signature, SIGNSIZE, hash, HASHSIZE, &verify, &public_key);

sdk_system_restoreclock();

INFO(">>> Result %s", verify == 1 ? "OK" : "ERROR");

return verify - 1;
Expand Down
4 changes: 2 additions & 2 deletions HAA/HAA_Installer/main/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -304,7 +304,7 @@ static void wifi_scan_sc_done() {
return;
}

INFO("Search BSSID for %s", wifi_ssid);
INFO("Searching %s", wifi_ssid);

int8_t best_rssi = INT8_MIN;
uint8_t* best_bssid = malloc(6);
Expand Down Expand Up @@ -345,7 +345,7 @@ static void wifi_scan_sc_done(void* arg, sdk_scan_status_t status) {
return;
}

INFO("Search BSSID for %s", wifi_ssid);
INFO("Searching %s", wifi_ssid);

struct sdk_bss_info* bss = (struct sdk_bss_info*) arg;
// first one is invalid
Expand Down
1 change: 0 additions & 1 deletion HAA/HAA_Main/main/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@ EXTRA_CFLAGS += -DLWIP_RAW=1
EXTRA_CFLAGS += -DARP_TABLE_SIZE=10
EXTRA_CFLAGS += -DDNS_MAX_RETRIES=2
EXTRA_CFLAGS += -DDHCP_DOES_ARP_CHECK=0
EXTRA_CFLAGS += -DLWIP_DHCP_RANDOMIZE_COARSE_TIME_SECS=10
EXTRA_CFLAGS += -DDEFAULT_RAW_RECVMBOX_SIZE=5
EXTRA_CFLAGS += -DMEMP_NUM_NETCONN=16
#EXTRA_CFLAGS += -DCHECKSUM_CHECK_UDP=0
Expand Down
8 changes: 7 additions & 1 deletion HAA/HAA_Main/main/header.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
#include "../../common/common_headers.h"

// Version
#define HAA_FIRMWARE_VERSION "12.10.4"
#define HAA_FIRMWARE_VERSION "12.11.0"
#define HAA_FIRMWARE_BETA_REVISION "" // Format: "b01"
#define HAA_FIRMWARE_CODENAME "Merlin"

Expand Down Expand Up @@ -215,6 +215,8 @@
#define TH_DEADBAND_FORCE_IDLE ch_group->num_f[3]
#define THERMOSTAT_DEADBAND_SOFT_ON "ds"
#define TH_DEADBAND_SOFT_ON ch_group->num_f[4]
#define THERMOSTAT_SAFE_MARGIN_TEMP "mc"
#define TH_SAFE_MARGIN_TEMP ch_group->num_f[5]
#define THERMOSTAT_UPDATE_DELAY "dl"
#define THERMOSTAT_UPDATE_DELAY_MIN (0.15f)
#define THERMOSTAT_UPDATE_DELAY_DEFAULT (3.0f)
Expand Down Expand Up @@ -249,6 +251,10 @@
#define THERMOSTAT_ACTION_GATE_CLOSE (12)
#define THERMOSTAT_ACTION_GATE_OPEN (13)
#define THERMOSTAT_ACTION_ON (14)
#define THERMOSTAT_ACTION_HEATER_SAFE_UP (15)
#define THERMOSTAT_ACTION_HEATER_SAFE_DOWN (16)
#define THERMOSTAT_ACTION_COOLER_SAFE_UP (17)
#define THERMOSTAT_ACTION_COOLER_SAFE_DOWN (18)
#define THERMOSTAT_TEMP_UP (0)
#define THERMOSTAT_TEMP_DOWN (1)
#define TH_ACTIVE_INT ch_group->ch[2]->value.int_value
Expand Down
87 changes: 49 additions & 38 deletions HAA/HAA_Main/main/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -2099,13 +2099,6 @@ void process_th_task(void* args) {
void heating(const float deadband, const float deadband_soft_on, const float deadband_force_idle) {
INFO("<%i> Heat", ch_group->serv_index);

// Security measure
if (SENSOR_TEMPERATURE_FLOAT > (TH_HEATER_TARGET_TEMP_FLOAT + deadband + deadband_force_idle + SAFE_TEMPERATURE_MARGIN)) {
THERMOSTAT_CURRENT_ACTION = THERMOSTAT_ACTION_HEATER_ON;
} else if (SENSOR_TEMPERATURE_FLOAT < (TH_HEATER_TARGET_TEMP_FLOAT - deadband - deadband_soft_on - SAFE_TEMPERATURE_MARGIN)) {
THERMOSTAT_CURRENT_ACTION = THERMOSTAT_ACTION_HEATER_IDLE;
}

if (SENSOR_TEMPERATURE_FLOAT < (TH_HEATER_TARGET_TEMP_FLOAT - deadband - deadband_soft_on)) {
TH_MODE_INT = THERMOSTAT_MODE_HEATER;
if (th_current_action != THERMOSTAT_ACTION_HEATER_ON) {
Expand Down Expand Up @@ -2167,18 +2160,20 @@ void process_th_task(void* args) {
}
}
}

// Security measure
if (TH_SAFE_MARGIN_TEMP > 0.f && !mode_has_changed) {
if (SENSOR_TEMPERATURE_FLOAT > (TH_HEATER_TARGET_TEMP_FLOAT + deadband + deadband_force_idle + TH_SAFE_MARGIN_TEMP)) {
do_actions(ch_group, THERMOSTAT_ACTION_HEATER_SAFE_UP);
} else if (SENSOR_TEMPERATURE_FLOAT < (TH_HEATER_TARGET_TEMP_FLOAT - deadband - deadband_soft_on - TH_SAFE_MARGIN_TEMP)) {
do_actions(ch_group, THERMOSTAT_ACTION_HEATER_SAFE_DOWN);
}
}
}

void cooling(const float deadband, const float deadband_soft_on, const float deadband_force_idle) {
INFO("<%i> Cool", ch_group->serv_index);

// Security measure
if (SENSOR_TEMPERATURE_FLOAT > (TH_COOLER_TARGET_TEMP_FLOAT + deadband + deadband_soft_on + SAFE_TEMPERATURE_MARGIN)) {
THERMOSTAT_CURRENT_ACTION = THERMOSTAT_ACTION_COOLER_IDLE;
} else if (SENSOR_TEMPERATURE_FLOAT < (TH_COOLER_TARGET_TEMP_FLOAT - deadband- deadband_force_idle - SAFE_TEMPERATURE_MARGIN)) {
THERMOSTAT_CURRENT_ACTION = THERMOSTAT_ACTION_COOLER_ON;
}

if (SENSOR_TEMPERATURE_FLOAT > (TH_COOLER_TARGET_TEMP_FLOAT + deadband + deadband_soft_on)) {
TH_MODE_INT = THERMOSTAT_MODE_COOLER;
if (th_current_action != THERMOSTAT_ACTION_COOLER_ON) {
Expand Down Expand Up @@ -2240,6 +2235,15 @@ void process_th_task(void* args) {
}
}
}

// Security measure
if (TH_SAFE_MARGIN_TEMP > 0.f && !mode_has_changed) {
if (SENSOR_TEMPERATURE_FLOAT > (TH_COOLER_TARGET_TEMP_FLOAT + deadband + deadband_soft_on + TH_SAFE_MARGIN_TEMP)) {
do_actions(ch_group, THERMOSTAT_ACTION_COOLER_SAFE_UP);
} else if (SENSOR_TEMPERATURE_FLOAT < (TH_COOLER_TARGET_TEMP_FLOAT - deadband- deadband_force_idle - TH_SAFE_MARGIN_TEMP)) {
do_actions(ch_group, THERMOSTAT_ACTION_COOLER_SAFE_DOWN);
}
}
}

if (TH_ACTIVE_INT) {
Expand Down Expand Up @@ -2964,7 +2968,7 @@ void temperature_task(void* args) {
ch_group->ch[0]->value.float_value = temperature_value;
homekit_characteristic_notify_safe(ch_group->ch[0]);

if (ch_group->chs > 4) {
if (ch_group->serv_type == SERV_TYPE_THERMOSTAT) {
hkc_th_setter(ch_group->ch[0], ch_group->ch[0]->value);
}
}
Expand All @@ -2990,7 +2994,7 @@ void temperature_task(void* args) {
ch_group->ch[1]->value.float_value = humidity_value_int;
homekit_characteristic_notify_safe(ch_group->ch[1]);

if (ch_group->chs > 4) {
if (ch_group->serv_type == SERV_TYPE_HUMIDIFIER) {
hkc_humidif_setter(ch_group->ch[1], ch_group->ch[1]->value);
}
}
Expand Down Expand Up @@ -6775,6 +6779,7 @@ void irrf_tx_task(void* pvParameters) {
}

// IR TRANSMITTER
uint32_t start;
unsigned int ir_true, ir_false, ir_gpio;
if (freq > 1) {
ir_true = !main_config.ir_tx_inv;
Expand All @@ -6787,6 +6792,7 @@ void irrf_tx_task(void* pvParameters) {
}

for (unsigned int r = 0; r < action_irrf_tx->repeats; r++) {

HAA_ENTER_CRITICAL_TASK();

for (unsigned int i = 0; i < ir_code_len; i++) {
Expand All @@ -6795,10 +6801,9 @@ void irrf_tx_task(void* pvParameters) {
gpio_write(ir_gpio, ir_false);
sdk_os_delay_us(ir_code[i]);
} else { // Mark
const uint32_t start = sdk_system_get_time_raw();
start = sdk_system_get_time_raw();
if (freq > 1) {
const uint32_t time_limit = ir_code[i];
while (((uint32_t) (sdk_system_get_time_raw() - start)) < time_limit) {
while ((sdk_system_get_time_raw() - start) < ir_code[i]) {
gpio_write(ir_gpio, ir_true);
sdk_os_delay_us(freq);
gpio_write(ir_gpio, ir_false);
Expand Down Expand Up @@ -8482,7 +8487,7 @@ void normal_mode_init() {
TH_SENSOR_TYPE = sensor_type;
TH_SENSOR_TEMP_OFFSET = th_sensor_temp_offset(json_accessory);
TH_SENSOR_HUM_OFFSET = th_sensor_hum_offset(json_accessory);
TH_SENSOR_ERROR_COUNT = 0;
//TH_SENSOR_ERROR_COUNT = 0;
if (sensor_type == 3) {
TH_SENSOR_INDEX = th_sensor_index(json_accessory);
}
Expand Down Expand Up @@ -10354,7 +10359,7 @@ void normal_mode_init() {

// *** NEW THERMOSTAT
void new_thermostat(const uint8_t accessory, uint8_t service, const uint8_t total_services, cJSON_rsf* json_context, const uint8_t serv_type) {
ch_group_t* ch_group = new_ch_group(7, 9, 5, 4);
ch_group_t* ch_group = new_ch_group(7, 9, 6, 4);
ch_group->serv_type = SERV_TYPE_THERMOSTAT;
ch_group->serv_index = service_numerator;
unsigned int homekit_enabled = acc_homekit_enabled(json_context);
Expand Down Expand Up @@ -10382,21 +10387,27 @@ void normal_mode_init() {
const float default_target_temp = (min_temp + max_temp) / 2;

// Temperature Deadbands
TH_DEADBAND = 0;
//TH_DEADBAND = 0;
if (cJSON_rsf_GetObjectItemCaseSensitive(json_context, THERMOSTAT_DEADBAND) != NULL) {
TH_DEADBAND = cJSON_rsf_GetObjectItemCaseSensitive(json_context, THERMOSTAT_DEADBAND)->valuefloat / 2.f;
}

TH_DEADBAND_FORCE_IDLE = 0;
//TH_DEADBAND_FORCE_IDLE = 0;
if (cJSON_rsf_GetObjectItemCaseSensitive(json_context, THERMOSTAT_DEADBAND_FORCE_IDLE) != NULL) {
TH_DEADBAND_FORCE_IDLE = cJSON_rsf_GetObjectItemCaseSensitive(json_context, THERMOSTAT_DEADBAND_FORCE_IDLE)->valuefloat;
}

TH_DEADBAND_SOFT_ON = 0;
//TH_DEADBAND_SOFT_ON = 0;
if (cJSON_rsf_GetObjectItemCaseSensitive(json_context, THERMOSTAT_DEADBAND_SOFT_ON) != NULL) {
TH_DEADBAND_SOFT_ON = cJSON_rsf_GetObjectItemCaseSensitive(json_context, THERMOSTAT_DEADBAND_SOFT_ON)->valuefloat;
}

// Temperature Safe Margin;
//TH_SAFE_MARGIN_TEMP = 0;
if (cJSON_rsf_GetObjectItemCaseSensitive(json_context, THERMOSTAT_SAFE_MARGIN_TEMP) != NULL) {
TH_SAFE_MARGIN_TEMP = cJSON_rsf_GetObjectItemCaseSensitive(json_context, THERMOSTAT_SAFE_MARGIN_TEMP)->valuefloat;
}

// Thermostat Type
unsigned int th_type = THERMOSTAT_TYPE_HEATER;
if (cJSON_rsf_GetObjectItemCaseSensitive(json_context, THERMOSTAT_TYPE) != NULL) {
Expand Down Expand Up @@ -10816,17 +10827,17 @@ void normal_mode_init() {
service++;

// Humidity Deadbands
HM_DEADBAND = 0;
//HM_DEADBAND = 0;
if (cJSON_rsf_GetObjectItemCaseSensitive(json_context, HUMIDIF_DEADBAND) != NULL) {
HM_DEADBAND = cJSON_rsf_GetObjectItemCaseSensitive(json_context, HUMIDIF_DEADBAND)->valuefloat / 2.f;
}

HM_DEADBAND_FORCE_IDLE = 0;
//HM_DEADBAND_FORCE_IDLE = 0;
if (cJSON_rsf_GetObjectItemCaseSensitive(json_context, HUMIDIF_DEADBAND_FORCE_IDLE) != NULL) {
HM_DEADBAND_FORCE_IDLE = cJSON_rsf_GetObjectItemCaseSensitive(json_context, HUMIDIF_DEADBAND_FORCE_IDLE)->valuefloat;
}

HM_DEADBAND_SOFT_ON = 0;
//HM_DEADBAND_SOFT_ON = 0;
if (cJSON_rsf_GetObjectItemCaseSensitive(json_context, HUMIDIF_DEADBAND_SOFT_ON) != NULL) {
HM_DEADBAND_SOFT_ON = cJSON_rsf_GetObjectItemCaseSensitive(json_context, HUMIDIF_DEADBAND_SOFT_ON)->valuefloat;
}
Expand Down Expand Up @@ -11064,7 +11075,7 @@ void normal_mode_init() {
}

LIGHTBULB_MAX_POWER = 1;
LIGHTBULB_CURVE_FACTOR = 0;
//LIGHTBULB_CURVE_FACTOR = 0;
lightbulb_group->r[0] = 0.6914;
lightbulb_group->r[1] = 0.3077;
lightbulb_group->g[0] = 0.1451;
Expand Down Expand Up @@ -11430,9 +11441,9 @@ void normal_mode_init() {

register_actions(ch_group, json_context, 0);
set_accessory_ir_protocol(ch_group, json_context);
GARAGE_DOOR_CURRENT_TIME = GARAGE_DOOR_TIME_MARGIN_DEFAULT;
//GARAGE_DOOR_CURRENT_TIME = GARAGE_DOOR_TIME_MARGIN_DEFAULT;
GARAGE_DOOR_WORKING_TIME = GARAGE_DOOR_TIME_OPEN_DEFAULT;
GARAGE_DOOR_TIME_MARGIN = GARAGE_DOOR_TIME_MARGIN_DEFAULT;
//GARAGE_DOOR_TIME_MARGIN = GARAGE_DOOR_TIME_MARGIN_DEFAULT;
GARAGE_DOOR_CLOSE_TIME_FACTOR = 1;
GARAGE_DOOR_VIRTUAL_STOP = virtual_stop(json_context);

Expand Down Expand Up @@ -11594,7 +11605,7 @@ void normal_mode_init() {

WINDOW_COVER_TIME_OPEN = WINDOW_COVER_TIME_DEFAULT;
WINDOW_COVER_TIME_CLOSE = WINDOW_COVER_TIME_DEFAULT;
WINDOW_COVER_CORRECTION = WINDOW_COVER_CORRECTION_DEFAULT;
//WINDOW_COVER_CORRECTION = WINDOW_COVER_CORRECTION_DEFAULT;
WINDOW_COVER_MARGIN_SYNC = WINDOW_COVER_MARGIN_SYNC_DEFAULT;
WINDOW_COVER_VIRTUAL_STOP = virtual_stop(json_context);
register_actions(ch_group, json_context, 0);
Expand Down Expand Up @@ -11714,7 +11725,7 @@ void normal_mode_init() {
LIGHT_SENSOR_FACTOR = cJSON_rsf_GetObjectItemCaseSensitive(json_context, LIGHT_SENSOR_FACTOR_SET)->valuefloat;
}

LIGHT_SENSOR_OFFSET = LIGHT_SENSOR_OFFSET_DEFAULT;
//LIGHT_SENSOR_OFFSET = LIGHT_SENSOR_OFFSET_DEFAULT;
if (cJSON_rsf_GetObjectItemCaseSensitive(json_context, LIGHT_SENSOR_OFFSET_SET) != NULL) {
LIGHT_SENSOR_OFFSET = cJSON_rsf_GetObjectItemCaseSensitive(json_context, LIGHT_SENSOR_OFFSET_SET)->valuefloat;
}
Expand Down Expand Up @@ -12172,7 +12183,7 @@ void normal_mode_init() {
set_accessory_ir_protocol(ch_group, json_context);
register_wildcard_actions(ch_group, json_context);

PM_LAST_SAVED_CONSUPTION = 0;
//PM_LAST_SAVED_CONSUPTION = 0;

ch_group->ch[0] = NEW_HOMEKIT_CHARACTERISTIC(CUSTOM_VOLT, 0);
ch_group->ch[1] = NEW_HOMEKIT_CHARACTERISTIC(CUSTOM_AMPERE, 0);
Expand Down Expand Up @@ -12216,7 +12227,7 @@ void normal_mode_init() {
PM_VOLTAGE_FACTOR = (float) cJSON_rsf_GetObjectItemCaseSensitive(json_context, PM_VOLTAGE_FACTOR_SET)->valuefloat;
}

PM_VOLTAGE_OFFSET = PM_VOLTAGE_OFFSET_DEFAULT;
//PM_VOLTAGE_OFFSET = PM_VOLTAGE_OFFSET_DEFAULT;
if (cJSON_rsf_GetObjectItemCaseSensitive(json_context, PM_VOLTAGE_OFFSET_SET) != NULL) {
PM_VOLTAGE_OFFSET = (float) cJSON_rsf_GetObjectItemCaseSensitive(json_context, PM_VOLTAGE_OFFSET_SET)->valuefloat;
}
Expand All @@ -12226,7 +12237,7 @@ void normal_mode_init() {
PM_CURRENT_FACTOR = (float) cJSON_rsf_GetObjectItemCaseSensitive(json_context, PM_CURRENT_FACTOR_SET)->valuefloat;
}

PM_CURRENT_OFFSET = PM_CURRENT_OFFSET_DEFAULT;
//PM_CURRENT_OFFSET = PM_CURRENT_OFFSET_DEFAULT;
if (cJSON_rsf_GetObjectItemCaseSensitive(json_context, PM_CURRENT_OFFSET_SET) != NULL) {
PM_CURRENT_OFFSET = (float) cJSON_rsf_GetObjectItemCaseSensitive(json_context, PM_CURRENT_OFFSET_SET)->valuefloat;
}
Expand All @@ -12236,7 +12247,7 @@ void normal_mode_init() {
PM_POWER_FACTOR = (float) cJSON_rsf_GetObjectItemCaseSensitive(json_context, PM_POWER_FACTOR_SET)->valuefloat;
}

PM_POWER_OFFSET = PM_POWER_OFFSET_DEFAULT;
//PM_POWER_OFFSET = PM_POWER_OFFSET_DEFAULT;
if (cJSON_rsf_GetObjectItemCaseSensitive(json_context, PM_POWER_OFFSET_SET) != NULL) {
PM_POWER_OFFSET = (float) cJSON_rsf_GetObjectItemCaseSensitive(json_context, PM_POWER_OFFSET_SET)->valuefloat;
}
Expand Down Expand Up @@ -12486,7 +12497,7 @@ void normal_mode_init() {
FM_FACTOR = (float) cJSON_rsf_GetObjectItemCaseSensitive(json_context, FM_FACTOR_SET)->valuefloat;
}

FM_OFFSET = FM_OFFSET_DEFAULT;
//FM_OFFSET = FM_OFFSET_DEFAULT;
if (cJSON_rsf_GetObjectItemCaseSensitive(json_context, FM_OFFSET_SET) != NULL) {
FM_OFFSET = (float) cJSON_rsf_GetObjectItemCaseSensitive(json_context, FM_OFFSET_SET)->valuefloat;
}
Expand Down Expand Up @@ -12560,7 +12571,7 @@ void normal_mode_init() {
FM_I2C_ADDR = i2c_addr;
FM_I2C_REG_LEN = i2c_read_len;

FM_I2C_VAL_OFFSET = FM_I2C_VAL_OFFSET_DEFAULT;
//FM_I2C_VAL_OFFSET = FM_I2C_VAL_OFFSET_DEFAULT;
if (cJSON_rsf_GetObjectItemCaseSensitive(json_context, FM_I2C_VAL_OFFSET_SET) != NULL) {
FM_I2C_VAL_OFFSET = cJSON_rsf_GetObjectItemCaseSensitive(json_context, FM_I2C_VAL_OFFSET_SET)->valuefloat;
}
Expand Down
Loading

0 comments on commit 16aabfc

Please sign in to comment.