int arctechDimCreateCode(JsonNode *code) { int id = -1; int unit = -1; int state = -1; int all = 0; int dimlevel = -1; int max = 0; int min = 15; int tmp; protocol_setting_get_number(arctech_dimmer, "min", &min); protocol_setting_get_number(arctech_dimmer, "max", &max); json_find_number(code, "id", &id); json_find_number(code, "unit", &unit); json_find_number(code, "dimlevel", &dimlevel); json_find_number(code, "all", &all); if(json_find_number(code, "off", &tmp) == 0) state=0; else if(json_find_number(code, "on", &tmp) == 0) state=1; if(id == -1 || (unit == -1 && all == 0) || (dimlevel == -1 && state == -1)) { logprintf(LOG_ERR, "arctech_dimmer: insufficient number of arguments"); return EXIT_FAILURE; } else if(id > 67108863 || id < 1) { logprintf(LOG_ERR, "arctech_dimmer: invalid id range"); return EXIT_FAILURE; } else if((unit > 15 || unit < 0) && all == 0) { logprintf(LOG_ERR, "arctech_dimmer: invalid unit range"); return EXIT_FAILURE; } else if(dimlevel != -1 && (dimlevel > max || dimlevel < min)) { logprintf(LOG_ERR, "arctech_dimmer: invalid dimlevel range"); return EXIT_FAILURE; } else if(dimlevel >= 0 && state == 0) { logprintf(LOG_ERR, "arctech_dimmer: dimlevel and state cannot be combined"); return EXIT_FAILURE; } else { if(unit == -1 && all == 1) { unit = 0; } if(dimlevel >= 0) { state = -1; } arctechDimCreateMessage(id, unit, state, all, dimlevel); arctechDimCreateStart(); arctechDimClearCode(); arctechDimCreateId(id); arctechDimCreateAll(all); arctechDimCreateState(state); arctechDimCreateUnit(unit); if(dimlevel > -1) { arctechDimCreateDimlevel(dimlevel); } arctechDimCreateFooter(); } return EXIT_SUCCESS; }
int arctechDimCreateCode(JsonNode *code) { int id = -1; int unit = -1; int state = -1; int all = 0; int dimlevel = -1; char *tmp; if(json_find_string(code, "id", &tmp) == 0) id=atoi(tmp); if(json_find_string(code, "off", &tmp) == 0) state=0; else if(json_find_string(code, "on", &tmp) == 0) state=1; if(json_find_string(code, "unit", &tmp) == 0) unit = atoi(tmp); if(json_find_string(code, "dimlevel", &tmp) == 0) dimlevel = atoi(tmp); if(json_find_string(code, "all", &tmp) == 0) all = 1; if(id == -1 || (unit == -1 && all == 0) || (dimlevel == -1 && state == -1)) { logprintf(LOG_ERR, "arctech_dimmer: insufficient number of arguments"); return EXIT_FAILURE; } else if(id > 67108863 || id < 1) { logprintf(LOG_ERR, "arctech_dimmer: invalid id range"); return EXIT_FAILURE; } else if((unit > 15 || unit < 0) && all == 0) { logprintf(LOG_ERR, "arctech_dimmer: invalid unit range"); return EXIT_FAILURE; } else if(state == -1 && (dimlevel > 16 || dimlevel < 0)) { logprintf(LOG_ERR, "arctech_dimmer: invalid dimlevel range"); return EXIT_FAILURE; } else if(dimlevel >= 0 && state == 0) { logprintf(LOG_ERR, "arctech_dimmer: dimlevel and state cannot be combined"); return EXIT_FAILURE; } else { if(unit == -1 && all == 1) { unit = 0; } if(dimlevel >= 0) { state = -1; } arctechDimCreateMessage(id, unit, state, all, dimlevel); arctechDimCreateStart(); arctechDimClearCode(); arctechDimCreateId(id); arctechDimCreateAll(all); arctechDimCreateState(state); arctechDimCreateUnit(unit); if(dimlevel > -1) { arctechDimCreateDimlevel(dimlevel); } arctechDimCreateFooter(); } return EXIT_SUCCESS; }