/* * This file is part of the loccorr project. * Copyright 2021 Edward V. Emelianov . * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #ifndef CONFIG_H__ #define CONFIG_H__ // default configuration borders // min/max total steps range #define MINSTEPS (100) #define MAXSTEPS (50000) #define Fmaxsteps (64000) // steps per pixel #define COEFMIN (0.1) #define COEFMAX (10000) // area #define MINAREA (4) #define MAXAREA (2500000) #define MAX_NDILAT (100) #define MAX_NEROS (100) #define MAX_THROWPART (0.9) #define MAX_OFFSET (10000) // min/max exposition in ms #define EXPOS_MIN (0.1) #define EXPOS_MAX (4001.) #define GAIN_MIN (0.) #define GAIN_MAX (100.) #define BRIGHT_MIN (0.) #define BRIGHT_MAX (10.) // max average images counter #define NAVER_MAX (50) // coefficients to convert dx,dy to du,dv #define KUVMIN (-5000.) #define KUVMAX (5000.) // default coefficient for corrections (move to Kdu, Kdv instead of du, dv) #define KCORR (0.97) // exposition methods: 0 - auto, 1 - fixed #define EXPAUTO (0) #define EXPMANUAL (1) // roundness parameter #define MINWH (0.3) #define MAXWH (3.) // messageID field name #define MESSAGEID "messageid" typedef struct{ int maxUsteps; // max amount of steps by both axes int maxVsteps; int maxFpos; // min/max F position (in microsteps) - user can't change this int minFpos; int minarea; // min/max area of star image int maxarea; int Nerosions; // amount of erosions/dilations int Ndilations; int xoff; // subimage offset int yoff; int width; // subimage size int height; int equalize; // !=0 to equalize output image histogram int naverage; // amount of images for average calculation (>1) int stpserverport; // steppers' server port int starssort; // stars sorting algorithm: by distance from target (0) or by intensity (1) int expmethod; // 0 - auto, 1 - fixed // dU = Kxu*dX + Kyu*dY; dV = Kxv*dX + Kyv*dY double Kxu; double Kyu; double Kxv; double Kyv; double minwh; double maxwh; // roundness parameters double xtarget; // target (center) values (in absolute coordinates! screen coords = target - offset) double ytarget; double throwpart; // part of values to throw avay @ histogram equalisation double maxexp; // minimal and maximal exposition (in ms) double minexp; double fixedexp; // exptime in manual mode double gain; // gain value in manual mode double brightness; // brightness @camera double intensthres; // threshold for stars intensity comparison: fabs(Ia-Ib)/(Ia+Ib) > thres -> stars differs } configuration; typedef enum{ PAR_INT, PAR_DOUBLE } partype; typedef struct{ const char *name; // parameter name partype type; // type of parameter's value void *ptr; // pointer to value in `theconf` int got; // counter of parameter in config file double minval; // min/max values double maxval; const char *help; // help message } confparam; typedef union{ double dblval; int intval; } dblint; typedef struct{ dblint val; partype type; } key_value; extern configuration theconf; char *get_cmd_list(char *buff, int l); int chkconfig(const char *confname); int saveconf(const char *confname); char *get_keyval(const char *pair, char value[128]); confparam *chk_keyval(const char *key, const char *val, key_value *result); char *listconf(const char *messageid, char *buf, int buflen); #endif // CONFIG_H__