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; }
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; }
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; }
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; }