Exemple #1
0
char gpio_port_init(unsigned char port_number, unsigned char in, char value) {

     char result = 0;

     char buffer[GPIO_BUFFER_SIZE];
     const char val_str[] = "value";




     if ( st_file_exists(gpio_get_file(buffer, port_number, val_str)) == 0 ) {

#ifdef __GPIO_SIMULATE
    	 snprintf(buffer, GPIO_BUFFER_SIZE, "/supla_virtual_dev/gpio/gpio%d", port_number);

    	 if ( st_file_exists(buffer) == 0 ) {
    		 mkdir(buffer, 0755);
    		 gpio_set_value(port_number, 0);

    		 gpio_create_file(port_number, "value");
    		 gpio_create_file(port_number, "direction");
    		 gpio_create_file(port_number, "edge");
    	 }

    	 snprintf(buffer, GPIO_BUFFER_SIZE, "%d", port_number);
#else
        snprintf(buffer, GPIO_BUFFER_SIZE, "%d", port_number);
        gpio_write_file("/sys/class/gpio/export", buffer);
#endif
     }

     if ( st_file_exists(gpio_get_file(buffer, port_number, val_str)) == 0 ) {

         supla_log(LOG_ERR, "GPIO %d does not exist.", port_number);
         return 0;
     }

     if ( in == 1 ) {
        result = gpio_set_params(buffer, port_number, "in", "both");
     } else {
        result = gpio_set_params(buffer, port_number, "out", "none");
     };

     if ( result == 0 )
       supla_log(LOG_ERR, "Can't set GPIO port parameters. Port number %d", port_number);


     return result;
}
Exemple #2
0
unsigned char scfg_load(int argc, char* argv[], char default_file[]) {

	   int a;
	   char *cfg_path = NULL;

	   for(a=0;a<argc;a++) {
	           if ( strcmp("-c", argv[a]) == 0 && a<argc-1 ) {
	                   cfg_path = argv[a+1];
	                   a++;
	           } else if ( strcmp("-p", argv[a]) == 0 && a<argc-1 && strlen(argv[a+1]) < 1024 ) {
	        	       pidfile_path = strdup(argv[a+1]);
	                           a++;
	           } else if ( strcmp("-d", argv[a]) == 0 ) {
	                   run_as_daemon = 1;
	           } else if ( strcmp("-D", argv[a]) == 0 ) {
	        	       debug_mode = 1;
	           } else if ( strcmp("-h", argv[a]) == 0 ) {
			   scfg_print_help(argv[0]);
			   return 0;
		   }
	   }

	   if ( cfg_path == NULL ) {
	        cfg_path = default_file;
	   }

	   if ( st_file_exists(cfg_path) == 0 ) {
	          supla_log(LOG_ERR, "Configuration file not found: %s", cfg_path == NULL ? "" : cfg_path);
	          return 0;
	   }

	   if ( ini_parse(cfg_path, scfg_ini_handler, NULL) < 0 ) {
		    supla_log(LOG_ERR, "Config read error");
	        return 0;
	   }


	   return 1;
}
unsigned char devcfg_init(int argc, char* argv[]) {

	memset(DEVICE_GUID, 0, SUPLA_GUID_SIZE);
	unsigned char result = 0;

	scfg_set_callback(devcfg_channel_cfg);

	// !!! order is important !!!
	char *s_global = "GLOBAL";
	scfg_add_str_param(s_global, "device_guid_file", "");
	scfg_add_str_param(s_global, "alt_cfg", "");
	scfg_add_str_param(s_global, "state_file", "");
	scfg_add_str_param(s_global, "device_name", "");

	char *s_server = "SERVER";
	scfg_add_str_param(s_server, "host", "");
	scfg_add_int_param(s_server, "tcp_port", 2015);
	scfg_add_int_param(s_server, "ssl_port", 2016);
	scfg_add_bool_param(s_server, "ssl_enabled", 1);

	char *s_location = "LOCATION";

	scfg_add_int_param(s_location, "ID", 0);
	scfg_add_str_param(s_location, "PASSWORD", 0);

	result = scfg_load(argc, argv, "/etc/supla-dev/supla.cfg");

	if ( result == 1
		 && st_file_exists(scfg_string(CFG_ALTCFG_FILE)) == 1 ) {

		result = scfg_load(argc, argv, scfg_string(CFG_ALTCFG_FILE));
	}

	scfg_names_free();

	return result;
}
Exemple #4
0
char w1_ds18b20_get_temp(char *device, double *temp) {
  int fd;
  int count;
  int val;
  char buffer[200];
  char result = 0;

  if (device == 0 || strlen(device) == 0 || strlen(device) > 100) return 0;

  memset(buffer, 0, 200);

#ifdef __W1_SIMULATE
  snprintf(buffer, sizeof(buffer), "/supla_virtual_dev/w1/devices/%s/w1_slave",
           device);
#else
  snprintf(buffer, sizeof(buffer), "/sys/bus/w1/devices/%s/w1_slave", device);
#endif

  if (st_file_exists(buffer) == 0) return 0;

  fd = open(buffer, O_RDONLY);
  if (fd != -1) {
    if (70 <= (count = read(fd, buffer, 200)) &&
        0 == memcmp(&buffer[29], "crc", 3) &&
        0 == memcmp(&buffer[36], "YES", 3) &&
        0 == memcmp(&buffer[67], "t=", 2)) {
      sscanf(&buffer[69], "%i", &val);
      *temp = val / 1000.00;

      result = 1;
    }
    close(fd);
  }

  return result;
}
Exemple #5
0
unsigned char clientcfg_init(int argc, char* argv[]) {

    int a;
    struct passwd *pw;
    char *buffer;
    char GUIDHEX[SUPLA_GUID_HEXSIZE+1];

    for(a=0; a<argc; a++) {
        if ( strcmp("-i", argv[a]) == 0 && a<argc-1 ) {
            cfg_id_file = strdup(argv[a+1]);
            a++;
        } else if ( strcmp("-h", argv[a]) == 0 && a<argc-1 ) {
            cfg_host = strdup(argv[a+1]);
            a++;
        } else if ( strcmp("-tcp", argv[a]) == 0  ) {
            cfg_ssl_enabled = 0;
        } else if ( strcmp("-p", argv[a]) == 0 && a<argc-1 ) {
            cfg_port = atoi(argv[a+1]);
            a++;
        } else if ( strcmp("-aid", argv[a]) == 0 && a<argc-1 ) {
            cfg_aid = atoi(argv[a+1]);
            a++;
        } else if ( strcmp("-pwd", argv[a]) == 0 && a<argc-1 ) {
            cfg_pwd = strdup(argv[a+1]);
            a++;
        };
    }

    if ( cfg_port == 0 )
        cfg_port = cfg_ssl_enabled == 1 ? 2016 : 2015;

    if ( cfg_host == NULL )
        cfg_host = strdup("127.0.0.1");

    if ( cfg_id_file == NULL ) {

        pw = getpwuid(getuid());
        a = strlen(pw->pw_dir)+50;

        buffer = malloc(a);

        if ( snprintf(buffer, a, "%s/.supla-client", pw->pw_dir) < 1 ) {
            free(buffer);
            return 0;
        }


        if ( st_file_exists(buffer) == 0 ) {
            if ( mkdir(buffer, 0700) == -1 ) {
                free(buffer);
                return 0;
            }
        }

        if ( snprintf(buffer, a, "%s/.supla-client/id", pw->pw_dir) < 1 ) {
            free(buffer);
            return 0;
        }

        cfg_id_file = strdup(buffer);
        free(buffer);
    }

    if ( cfg_id_file == NULL || strlen(cfg_id_file) < 1 ) {
        supla_log(LOG_ERR, "Unknown id file!");
        return 0;
    }

    if ( st_read_guid_from_file(cfg_id_file, cfg_client_GUID, 1) == 0 ) {
        return 0;
    }


    st_guid2hex(GUIDHEX, cfg_client_GUID);
    GUIDHEX[SUPLA_GUID_HEXSIZE] = 0;
    supla_log(LOG_INFO, "Client GUID: %s", GUIDHEX);


    return 1;
}