int sbSaveControlParamters(const char * fname, const struct SBControlParameters * params) { int res; FILE * fp = fopen(fname,"w"); if (!fp) {perror("sbSaveControlParamters:");return -1;} res = sbPrintControlParameters(fp,params); fclose(fp); return res; }
int sbLoadControlParameters(const char * fname, struct SBControlParameters * params) { char line[80],pname[80]; float value; int res = 0; FILE * fp = stdin; if (strcmp(fname,"-")!=0) { fp = fopen(fname,"r"); if (!fp) {perror("sbLoadControlParameters:");return -1;} } while (!feof(fp)) { line[0] = 0; fgets(line,79,fp); if (line[0] == '#') { continue; } if (sscanf(line," %s %e ",pname,&value) != 2) { continue; } if (strcasecmp(pname,"baseThrust")==0) { params->baseThrust = value; } if (strcasecmp(pname,"yawOffset")==0) { params->yawOffset = value; } if (strcasecmp(pname,"altitudeKp")==0) { params->altitudeKp = value; } if (strcasecmp(pname,"altitudeKd")==0) { params->altitudeKd = value; } if (strcasecmp(pname,"altitudeKi")==0) { params->altitudeKi = value; } if (strcasecmp(pname,"yawKp")==0) { params->yawKp = value; } if (strcasecmp(pname,"yawKi")==0) { params->yawKi = value; } if (strcasecmp(pname,"yawKd")==0) { params->yawKd = value; } } if (fp != stdin) { fclose(fp); } printf("Loaded control parameters:\n"); sbPrintControlParameters(stdout,params); return res; }
int save(const char * fname) { struct SBControlParameters params; res = 0; sbLockCommunication(&simple->control); DEBUG(res = sbGetControlParameters(&simple->control,¶ms)); sbUnlockCommunication(&simple->control); if (res) return res; if (strcmp(fname,"-")==0) { DEBUG(res = sbPrintControlParameters(stdout,¶ms)); } else { DEBUG(res = sbSaveControlParamters(fname,¶ms)); } if (res) return res; return 0; }