Esempio n. 1
0
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));
  }
}
Esempio n. 2
0
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 ||
Esempio n. 3
0
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;
}
Esempio n. 4
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);
}