static void dispatch_controller_settings(home_screen_t* s, controller_settings_t* settings) { (void)settings; int i; for (i = 0; i < NUM_OUTPUTS; ++i) { set_output_settings(s, i, temp_control_get_output_function(i)); } }
static void click_output_button(button_event_t* event) { if (event->id != EVT_BUTTON_CLICK) return; widget_t* parent = widget_get_parent(event->widget); home_screen_t* s = widget_get_instance_data(parent); const controller_settings_t* controller1_settings = app_cfg_get_controller_settings(CONTROLLER_1); const controller_settings_t* controller2_settings = app_cfg_get_controller_settings(CONTROLLER_2); output_id_t output; if (event->widget == s->outputs[OUTPUT_1].button) output = OUTPUT_1; else output = OUTPUT_2; output_function_t controller_1_function = controller1_settings->output_settings[output].function; output_function_t controller_2_function = controller2_settings->output_settings[output].function; if (controller_1_function == OUTPUT_FUNC_MANUAL || controller_2_function == OUTPUT_FUNC_MANUAL) { if (s->outputs[output].enabled == false) s->outputs[output].enabled = true; else s->outputs[output].enabled = false; set_output_settings(s, output, OUTPUT_FUNC_MANUAL); } else if (controller_1_function == OUTPUT_FUNC_HEATING || controller_1_function == OUTPUT_FUNC_COOLING) { if (s->output_ovrd[output] == true) s->output_ovrd[output] = false; else s->output_ovrd[output] = true; output_ovrd_msg_t msg = { .output = output, .controller = CONTROLLER_1 }; msg_send(MSG_OUTPUT_OVRD, &msg); set_output_icon_color(s, output); } else if (controller_2_function == OUTPUT_FUNC_HEATING ||
void parse_incoming_sms(){ uint8_t temp = 0; int32_t temp2 = 0; int32_t temp3 = 0; int i; char command_str[70]; char command[20]; char command_count = 0; char bug_command_count = 0; for (i = 0;i<11;i++) tel_number_temp[i] = gsm_message[i+24]; last_control_ID_number = check_number(tel_number_temp); if (last_control_ID_number > MAX_TEL_NUMBERS) return; sms_ucs_to_eng(gsm_message, input_sms_message); #ifdef DEBUG_MODEM send_string_to_UART3("INCOMING SMS! NUMBER: "); send_string_to_UART3(tel_number_temp); send_string_to_UART3(" ID: "); send_int_to_UART3(last_control_ID_number); send_string_to_UART3(" \n\r"); send_string_to_UART3(" SMS: "); send_string_to_UART3(input_sms_message); send_string_to_UART3(" \n\r"); #endif while(get_next_command_from_sms(input_sms_message,command_str,command_count)){ command_count++; #ifdef DEBUG_MODEM send_string_to_UART3("Progessing command: "); send_string_to_UART3(command_str); send_string_to_UART3("\n\r"); #endif switch(command_str[0]){ //nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn case 'n': switch(command_str[1]){ case 'n': //nnX +79021201364 sms_command_nn(command_str); break; case 't': //ntX -10,29,00010011 temp = 0; temp2 = parse_int_in_message(command_str,4); temp3 = parse_int_in_message(command_str,(4 + get_size_number(temp2) + 1)); for (i = 0;;i++) { char a = command_str[4 + i + get_size_number(temp2) + 1 + get_size_number(temp3) +1]; if ((a != '0') && (a != '1')) break; temp = (temp<<1) | (a - '0'); } set_ds18x20_settings((command_str[2]-'0'),temp2,temp3,temp); break; case 'v': temp = 0; if (command_str[2] == 't'){ if (command_str[3] < '0' || command_str[3] > '9') break; //nvt1 dverb zapili set_input_text((command_str[3]-'0'),command_str); }else{ if (command_str[2] < '0' || command_str[2] > '9') break; //nv1 3,7,000,2 for (i = 0;;i++) { if ((command_str[8 + i] != '0') && (command_str[8 + i] != '1')) break; temp = (temp<<1) | (command_str [8 + i] - '0'); } set_input_settings( (command_str[2]-'0'), (command_str[4]-'0'), (command_str[6]-'0'), temp, parse_int_in_message(command_str,(8+i+1)) ); } break; case 'r': //nr lov12 for (i = 0;i < MAX_OUTPUT;i++){ set_output_settings(i,(command_str[3 + i])); } break; case 'i': //ni lov12 for (i = 0;i < MAX_LED;i++){ set_led_settings(i,(command_str[3 + i])); } break; case 'p': //np 93 setting_powered(1); break; case 'a': //np 93 setting_powered(2); break; case 's': //ns temp = 0; temp2 = 0; temp3 = 0; for (i = 0;;i++) { if ((command_str[3 + i] != '0') && (command_str[3 + i] != '1')) break; temp = (temp<<1) | (command_str[3 + i] - '0'); } temp2 = parse_int_in_message(command_str,(3+i+1)); temp3 = parse_int_in_message(command_str,(3+i+1+ get_size_number(temp2) +1)); set_device_setting(temp,temp2,temp3); break; default: bug_command_count++; break; } break; //oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo case 'o': //o0 o1 o str_add_str(last_control_guard,sizeof(last_control_guard),"+79",0); convert_number_to_eng(tel_number_temp); str_add_str(last_control_guard,sizeof(last_control_guard),tel_number_temp,10); if (command_str[1]) set_new_guard_st((command_str[1] - '0')); else set_new_guard_st(!get_guard_st()); break; //rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr case 'r': //r sms_command_r(); break; //bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb case 'b': //b *102# temp = str_length(command_str); for (i = 0; i < (temp - 2);i++){ command[i] = command_str[i+2]; } command[i+1] = 0; send_string_to_GSM("AT+CUSD=1,\""); send_string_to_GSM(command); send_command_to_GSM("\"","OK",gsm_message,2,5); // send_command_to_GSM("AT+CUSD=1,\"*102#\"","OK",gsm_message,2,5); break; //aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa case 'a': if ((command_str[1]) == 's') { //vs 3 if (!command_str[3]) FULL_RESET(); temp = parse_int_in_message(command_str,(3)); set_time_to_reset(temp); }else if ((command_str[1]) == 'r'){ //vr 48 setting_time_to_report(parse_int_in_message(command_str,(3))); }else{ bug_command_count++; } break; //UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU case 'u': if ((command_str[1]) == 'v') { //vs 3 temp2 = parse_int_in_message(command_str,4); sms_control_output((command_str[2] - '0'), temp2); }else{ bug_command_count++; } break; //SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS case 's': if ((command_str[1]) == 'b') if ((command_str[2]) == 'r') if ((command_str[3]) == 'o') if ((command_str[4]) == 's') FULL_ERASE_DEVICE(); break; default: bug_command_count++; break; } for (i = 0;i<70;i++){ if (!command_str[i]) break; command_str[i] = 0; } } if (check_device_setting(DEVICE_SETTING_SMS_AT_SMS_COMMAND)){ if ((command_count - bug_command_count)){ str_add_str(output_sms_message,sizeof(output_sms_message),"prinqto komand: ",0); str_add_num(output_sms_message,(command_count - bug_command_count)); } if (bug_command_count){ str_add_str(output_sms_message,sizeof(output_sms_message)," \nnevernaq komanda: ",0); str_add_num(output_sms_message,bug_command_count); } send_sms_message_for_all(output_sms_message,SMS_FUNCTION_SERVICE); } for (i = 0;i<70;i++) input_sms_message[i] = 0; }
widget_t* home_screen_create() { home_screen_t* s = calloc(1, sizeof(home_screen_t)); s->sample_timestamp = chTimeNow(); s->screen = widget_create(NULL, &home_widget_class, s, display_rect); widget_set_background(s->screen, BLACK); rect_t rect = { .x = TILE_X(0), .y = TILE_Y(0), .width = TILE_SPAN(3), .height = TILE_SPAN(2), }; s->stage_widget = widget_create(s->screen, NULL, NULL, rect); widget_set_background(s->stage_widget, GREEN); rect.x = TILE_X(3); rect.width = TILE_SPAN(1); rect.height = TILE_SPAN(1); s->sensors[SENSOR_1].button = button_create(s->screen, rect, img_temp_med, WHITE, STEEL, click_sensor_button); rect.y = TILE_Y(1); s->sensors[SENSOR_2].button = button_create(s->screen, rect, img_temp_med, WHITE, STEEL, click_sensor_button); rect.x = TILE_X(0); rect.y = TILE_Y(2); s->outputs[OUTPUT_1].button = button_create(s->screen, rect, img_plug, WHITE, STEEL, click_output_button); rect.x = TILE_X(1); s->outputs[OUTPUT_2].button = button_create(s->screen, rect, img_plug, WHITE, STEEL, click_output_button); rect.x = TILE_X(2); s->conn_button = button_create(s->screen, rect, img_signal, RED, STEEL, click_conn_button); rect.x = TILE_X(3); s->settings_button = button_create(s->screen, rect, img_settings, WHITE, COBALT, click_settings_button); rect.x = 0; rect.width = TILE_SPAN(3); s->sensors[SENSOR_1].quantity_widget = quantity_widget_create(s->stage_widget, rect, app_cfg_get_temp_unit()); widget_disable(s->sensors[SENSOR_1].quantity_widget); s->sensors[SENSOR_2].quantity_widget = quantity_widget_create(s->stage_widget, rect, app_cfg_get_temp_unit()); widget_disable(s->sensors[SENSOR_2].quantity_widget); place_quantity_widgets(s); set_output_settings(s, OUTPUT_1, temp_control_get_output_function(OUTPUT_1)); set_output_settings(s, OUTPUT_2, temp_control_get_output_function(OUTPUT_2)); gui_msg_subscribe(MSG_SENSOR_SAMPLE, s->screen); gui_msg_subscribe(MSG_SENSOR_TIMEOUT, s->screen); gui_msg_subscribe(MSG_OUTPUT_STATUS, s->screen); gui_msg_subscribe(MSG_TEMP_UNIT, s->screen); gui_msg_subscribe(MSG_NET_STATUS, s->screen); gui_msg_subscribe(MSG_API_STATUS, s->screen); gui_msg_subscribe(MSG_CONTROLLER_SETTINGS, s->screen); gui_msg_subscribe(MSG_API_CONTROLLER_SETTINGS, s->screen); return s->screen; } void home_screen_destroy(widget_t* w) { home_screen_t* s = widget_get_instance_data(w); gui_msg_unsubscribe(MSG_SENSOR_SAMPLE, s->screen); gui_msg_unsubscribe(MSG_SENSOR_TIMEOUT, s->screen); gui_msg_unsubscribe(MSG_OUTPUT_STATUS, s->screen); gui_msg_unsubscribe(MSG_TEMP_UNIT, s->screen); gui_msg_unsubscribe(MSG_NET_STATUS, s->screen); gui_msg_unsubscribe(MSG_API_STATUS, s->screen); gui_msg_unsubscribe(MSG_CONTROLLER_SETTINGS, s->screen); gui_msg_unsubscribe(MSG_API_CONTROLLER_SETTINGS, s->screen); free(s); }