#include #include #include #include #include #include #include #include controller* controller_create(void) { controller *result = malloc(sizeof(*result)); uuid_generate(result->uuid); strcpy(result->name, "new emgauwa device"); result->port = 0; result->relay_count = 10; result->relays = malloc(sizeof(*result->relays) * result->relay_count); uint8_t i; for(i = 0; i < result->relay_count; i++) { result->relays[i] = relay_init(i); } return result; } controller* controller_read(void) { FILE *fp; controller *result; fp = fopen(CONTROLLER_FILE_NAME, "rb"); if(fp == NULL) { LOG_ERROR("Error opening file"); result = controller_create(); return result; } uint8_t header[CONTROLLER_FILE_HEADER_SIZE]; size_t read_size; read_size = fread(header, sizeof(*header), CONTROLLER_FILE_HEADER_SIZE, fp); if(ferror(fp) || read_size != CONTROLLER_FILE_HEADER_SIZE) { fclose(fp); LOG_ERROR("Error reading header"); result = controller_create(); return result; } uint8_t version = header[0]; printf("%d\n", version); switch(version) { case 1: controller_file_reader_1(fp); break; default: fclose(fp); LOG_ERROR("Error unsupported version number"); return NULL; } fclose(fp); result = controller_create(); return result; } int controller_save(controller* ci) { FILE *fp; fp = fopen(CONTROLLER_FILE_NAME, "w+b"); if(fp == NULL) { LOG_ERROR("Error creating or opening file"); return 1; } uint8_t header[CONTROLLER_FILE_HEADER_SIZE]; header[0] = CONTROLLER_FILE_VERSION; fwrite(header, sizeof(*header), CONTROLLER_FILE_HEADER_SIZE, fp); fwrite(ci->name, sizeof(*ci->name), CONTROLLER_NAME_LENGTH, fp); fclose(fp); return 0; }