Tested, beta-stage

This commit is contained in:
eddyem 2015-11-24 21:26:33 +03:00
parent dd6821cecb
commit 7c247e1f8f
7 changed files with 162 additions and 109 deletions

View File

@ -32,6 +32,8 @@
#include "angle_functions.h" #include "angle_functions.h"
#include "usefull_macros.h" #include "usefull_macros.h"
static char buf[BUFSZ+1];
extern void sla_caldj(int*, int*, int*, double*, int*); extern void sla_caldj(int*, int*, int*, double*, int*);
extern void sla_amp(double*, double*, double*, double*, double*, double*); extern void sla_amp(double*, double*, double*, double*, double*, double*);
extern void sla_map(double*, double*, double*, double*, double*,double*, double*, double*, double*, double*); extern void sla_map(double*, double*, double*, double*, double*,double*, double*, double*, double*, double*);
@ -268,3 +270,63 @@ baddate:
return FALSE; return FALSE;
} }
char *time_asc(double t){
int h, min;
double sec;
h = (int)(t/3600.);
min = (int)((t - (double)h*3600.)/60.);
sec = t - (double)h*3600. - (double)min*60.;
h %= 24;
if(sec>59.99) sec=59.99;
snprintf(buf, BUFSZ, "%02d:%02d:%05.2f", h,min,sec);
return buf;
}
char *angle_asc(double a){
char s;
int d, min;
double sec;
if (a >= 0.)
s = '+';
else {
s = '-'; a = -a;
}
d = (int)(a/3600.);
min = (int)((a - (double)d*3600.)/60.);
sec = a - (double)d*3600. - (double)min*60.;
d %= 360;
if(sec>59.9) sec=59.9;
snprintf (buf, BUFSZ, "%c%02d:%02d:%04.1f", s,d,min,sec);
return buf;
}
char *angle_fmt(double a, char *format){
char s, *p;
int d, min, n;
double sec, msec;
char *newformat = MALLOC(char, strlen(format) + 3);
sprintf(newformat, "%s", format);
if (a >= 0.)
s = '+';
else {
s = '-'; a = -a;
}
d = (int)(a/3600.);
min = (int)((a - (double)d*3600.)/60.);
sec = a - (double)d*3600. - (double)min*60.;
d %= 360;
if ((p = strchr(format,'.')) == NULL)
msec=59.;
else if (*(p+2) == 'f' ) {
n = *(p+1) - '0';
msec = 60. - pow(10.,(double)(-n));
} else
msec=60.;
if(sec>msec) sec=msec;
if (strstr(format,"%c"))
snprintf(buf, BUFSZ, newformat, s,d,min,sec);
else
snprintf(buf, BUFSZ, newformat, d,min,sec);
free(newformat);
return buf;
}

View File

@ -24,6 +24,8 @@
#include <stdbool.h> #include <stdbool.h>
#define BUFSZ 255
#ifndef TRUE #ifndef TRUE
#define TRUE true #define TRUE true
#endif #endif
@ -32,6 +34,9 @@
#define FALSE false #define FALSE false
#endif #endif
char *time_asc(double t);
char *angle_asc(double a);
char *angle_fmt(double a, char *format);
double sec_to_degr(double sec); double sec_to_degr(double sec);
char *get_degrees(double *ret, char *str); char *get_degrees(double *ret, char *str);
bool calc_AP(double r, double d, double *appRA, double *appDecl); bool calc_AP(double r, double d, double *appRA, double *appDecl);

View File

@ -52,9 +52,9 @@ glob_pars *GP = NULL;
#ifdef EMULATION #ifdef EMULATION
#define ACS_CMD(a) do{green(#a); printf("\n");}while(0) #define ACS_CMD(a) do{green(#a); printf("\n");}while(0)
#else #else
#define ACS_CMD(a) do{red(#a); printf("\n");}while(0) //#define ACS_CMD(a) do{red(#a); printf("\n");}while(0)
// Uncomment only in final release // Uncomment only in final release
// #define ACS_CMD(a) do{DBG(#a "\n"); a; }while(0) #define ACS_CMD(a) do{DBG(#a "\n"); a; }while(0)
#endif #endif
@ -120,11 +120,10 @@ void set_timeout(int delay){
char indi[] = "|/-\\"; char indi[] = "|/-\\";
char *iptr = indi; char *iptr = indi;
#define WAIT_EVENT(evt, max_delay) do{int __ = 0; set_timeout(max_delay); \ #define WAIT_EVENT(evt, max_delay) do{int __ = 0; set_timeout(max_delay); \
PRINT(" "); while(!tmout && !evt){\ PRINT(" "); while(!tmout && !(evt)){ \
usleep(100000); if(!*(++iptr)) iptr = indi; if(++__%10==0) PRINT("\b. "); \ usleep(100000); if(!*(++iptr)) iptr = indi; if(++__%10==0) PRINT("\b. "); \
PRINT("\b%c", *iptr);}; PRINT("\n");}while(0) PRINT("\b%c", *iptr);}; PRINT("\n");}while(0)
#ifndef EMULATION #ifndef EMULATION
void get_passhash(passhash *p){ void get_passhash(passhash *p){
int fd = -1, i, c, nlev = 0; int fd = -1, i, c, nlev = 0;
@ -198,21 +197,33 @@ void get_passhash(passhash *p){
* move P2 to the given angle relative to current position +- P2_ANGLE_THRES * move P2 to the given angle relative to current position +- P2_ANGLE_THRES
*/ */
void cmd_P2moveto(double p2shift){ void cmd_P2moveto(double p2shift){
double p2vel = 45.*60., p2dt, p2mintime = 4.5, p2secs = fabs(p2shift) * 3600.; double p2vel = 45.*60., p2dt, p2mintime = P2_MINTIME, p2secs = fabs(p2shift) * 3600.;
if(fabs(p2shift) < P2_ANGLE_THRES) return; if(fabs(p2shift) < P2_ANGLE_THRES) return;
p2dt = p2secs / p2vel; p2dt = p2secs / p2vel;
if(p2dt < p2mintime){ if(p2dt < p2mintime){
p2vel = p2secs / p2mintime; p2vel = p2secs / p2mintime;
if(p2vel < 1.) p2vel = 1; if(p2vel < 1.) p2vel = 1.;
p2dt = p2secs / p2vel; p2dt = p2secs / p2vel;
} }
// if speed is too fast, make dt less
if(p2vel > P2_FAST_SPEED && p2dt > P2_FAST_T_CORR + P2_MINTIME){
p2dt -= P2_FAST_T_CORR;
}
if(p2shift < 0) p2vel = -p2vel; if(p2shift < 0) p2vel = -p2vel;
DBG("p2vel=%g, p2dt = %g", p2vel, p2dt); DBG("p2vel=%g, p2dt = %g, p2_val=%s", p2vel, p2dt, angle_asc(val_P));
ACS_CMD(MoveP2To(p2vel, p2dt)); ACS_CMD(MoveP2To(p2vel, p2dt));
#ifndef EMULATION #ifndef EMULATION
PRINT(_("Wait for starting"));
WAIT_EVENT(((fabs(vel_P) > 1.) && (P2_State != P2_Off)), WAITING_TMOUT);
if((fabs(vel_P) < 1.) || (P2_State == P2_Off)){
DBG("vel: %g, state: %d", vel_P, P2_State);
WARNX(_("P2 didn't start!"));
return;
}
PRINT(_("Moving P2 ")); PRINT(_("Moving P2 "));
// wait until P2 stops, set to guiding or timeout ends // wait until P2 stops, set to guiding or timeout ends
WAIT_EVENT(((fabs(vel_P) < 1.) || (P2_State == P2_On)), p2dt + 1.); WAIT_EVENT(((fabs(vel_P) < 1.) && (P2_State == P2_Off)), p2dt + 1.);
DBG("P2 state: %d, vel_P: %g, p2_val=%s", P2_State, vel_P, angle_asc(val_P));
if(tmout && P2_State != P2_Off){ if(tmout && P2_State != P2_Off){
WARNX(_("Timeout reached, stop P2")); WARNX(_("Timeout reached, stop P2"));
ACS_CMD(MoveP2(0)); ACS_CMD(MoveP2(0));
@ -276,7 +287,7 @@ bdrg:
#ifndef EMULATION #ifndef EMULATION
if(P2_State != P2_Off){ if(P2_State != P2_Off){
PRINT(_("Wait for P2 stop ")); PRINT(_("Wait for P2 stop "));
WAIT_EVENT(P2_State == P2_Off, 5); WAIT_EVENT(P2_State == P2_Off, WAITING_TMOUT);
if(tmout && P2_State != P2_Off){ if(tmout && P2_State != P2_Off){
WARNX(_("Timeout reached, can't stop P2")); WARNX(_("Timeout reached, can't stop P2"));
return 0; return 0;
@ -284,13 +295,15 @@ bdrg:
} }
#endif #endif
} }
int p2oldmode = P2_Mode;
ACS_CMD(SetPMode(P2_Off));
DBG("Move P2 to %gdegr", p2angle); DBG("Move P2 to %gdegr", p2angle);
if(fabs(p2angle - p2val) < P2_ANGLE_THRES){ if(fabs(p2angle - p2val) < P2_ANGLE_THRES){
WARNX(_("Zero moving (< %g)"), P2_ANGLE_THRES); WARNX(_("Zero moving (< %g)"), P2_ANGLE_THRES);
return TRUE; return TRUE;
} }
int i; int i;
for(i = 0; i < 3; ++i){ for(i = 0; i < 5; ++i){
if(i) PRINT(_("Try %d. "), i+1); if(i) PRINT(_("Try %d. "), i+1);
cmd_P2moveto(p2angle - p2val); cmd_P2moveto(p2angle - p2val);
p2val = sec_to_degr(val_P); p2val = sec_to_degr(val_P);
@ -300,6 +313,8 @@ bdrg:
WARNX(_("Error moving P2: have %gdegr, need %gdegr"), p2val, p2angle); WARNX(_("Error moving P2: have %gdegr, need %gdegr"), p2val, p2angle);
return FALSE; return FALSE;
} }
PRINT(_("All OK, current P2 value: %s\n"), angle_asc(val_P));
ACS_CMD(SetPMode(p2oldmode));
return TRUE; return TRUE;
} }
@ -317,7 +332,7 @@ bool setP2mode(char *arg){
#ifndef EMULATION #ifndef EMULATION
if(P2_State != mode){ if(P2_State != mode){
PRINT(_("Wait for given mode ")); PRINT(_("Wait for given mode "));
WAIT_EVENT(P2_State == mode, 5); WAIT_EVENT(P2_State == mode, WAITING_TMOUT);
if(tmout && P2_State != mode){ if(tmout && P2_State != mode){
WARNX(_("Timeout reached, can't set P2 mode")); WARNX(_("Timeout reached, can't set P2 mode"));
return FALSE; return FALSE;
@ -334,13 +349,13 @@ void cmd_Fmoveto(double f){
const double FOC_HVEL = 0.63, FOC_LVEL = 0.13; const double FOC_HVEL = 0.63, FOC_LVEL = 0.13;
int _U_ fspeed; int _U_ fspeed;
if(f < 1. || f > 199.) return; if(f < 1. || f > 199.) return;
double fshift = f - val_F, fvel, _U_ fdt; double fshift = f - val_F, fvel, fdt;
if(fabs(fshift) > 1.){ if(fabs(fshift) > 1.){
fvel = FOC_HVEL; fvel = FOC_HVEL;
fspeed = (fshift > 0) ? Foc_Hplus : Foc_Hminus; fspeed = (fshift > 0.) ? Foc_Hplus : Foc_Hminus;
}else if(fabs(fshift) > 0.05){ }else if(fabs(fshift) > FOCUS_THRES){
fvel = FOC_LVEL; fvel = FOC_LVEL;
fspeed = (fshift > 0) ? Foc_Lplus : Foc_Lminus; fspeed = (fshift > 0.) ? Foc_Lplus : Foc_Lminus;
} else{ } else{
WARNX(_("Can't move for such small distance (%gmm)"), fshift); WARNX(_("Can't move for such small distance (%gmm)"), fshift);
return; return;
@ -348,8 +363,15 @@ void cmd_Fmoveto(double f){
fdt = fabs(fshift) / fvel; fdt = fabs(fshift) / fvel;
ACS_CMD(MoveFocus(fspeed, fdt)); ACS_CMD(MoveFocus(fspeed, fdt));
#ifndef EMULATION #ifndef EMULATION
DBG("dt: %g, fvel: %g, fstate: %d, F:%g", fdt, vel_F, Foc_State, val_F);
PRINT(_("Wait for starting"));
WAIT_EVENT((Foc_State != Foc_Off || fabs(vel_F) > 0.01), WAITING_TMOUT);
PRINT(_("Moving Focus ")); PRINT(_("Moving Focus "));
WAIT_EVENT((fabs(vel_F) < 0.01 || Foc_State == Foc_Off), fdt + 1.); WAIT_EVENT((fabs(vel_F) < 0.01 && Foc_State == Foc_Off), fdt + 1.);
DBG("fvel: %g, fstate: %d, F:%g", vel_F, Foc_State, val_F);
PRINT(_("Wait for stop"));
WAIT_EVENT((Foc_State == Foc_Off && fabs(vel_F) < 0.01), WAITING_TMOUT);
DBG("fvel: %g, fstate: %d, F:%g", vel_F, Foc_State, val_F);
if(tmout && Foc_State != Foc_Off){ if(tmout && Foc_State != Foc_Off){
WARNX(_("Timeout reached, stop focus")); WARNX(_("Timeout reached, stop focus"));
ACS_CMD(MoveFocus(Foc_Off, 0.)); ACS_CMD(MoveFocus(Foc_Off, 0.));
@ -374,7 +396,7 @@ bool moveFocus(double val){
#ifndef EMULATION #ifndef EMULATION
if(Foc_State != Foc_Off){ if(Foc_State != Foc_Off){
PRINT(_("Wait for focus stop ")); PRINT(_("Wait for focus stop "));
WAIT_EVENT(Foc_State == Foc_Off, 3); WAIT_EVENT(Foc_State == Foc_Off, WAITING_TMOUT);
if(tmout && Foc_State != Foc_Off){ if(tmout && Foc_State != Foc_Off){
WARNX(_("Timeout reached, can't stop focus motor")); WARNX(_("Timeout reached, can't stop focus motor"));
return FALSE; return FALSE;
@ -443,12 +465,17 @@ bool setCoords(char *coords, bool isEQ){
// calculate apparent place according to other cmdline arguments // calculate apparent place according to other cmdline arguments
if(!calc_AP(r, d, &appRA, &appDecl)) goto badcrds; if(!calc_AP(r, d, &appRA, &appDecl)) goto badcrds;
DBG("Set RA/Decl to %g, %g", appRA/3600, appDecl/3600); DBG("Set RA/Decl to %g, %g", appRA/3600, appDecl/3600);
r = InpAlpha, d = InpDelta; // save old coordinates
ACS_CMD(SetRADec(appRA, appDecl)); ACS_CMD(SetRADec(appRA, appDecl));
#ifndef EMULATION #ifndef EMULATION
if(InpAlpha != r || InpDelta != d){ DBG("InpAlpha = %g, InpDelta = %g, was: A = %g, D = %g",
InpAlpha, InpDelta, r, d);
// now check whether old coordinates was changed
if(fabs(InpAlpha - r) > INPUT_COORDS_THRES || fabs(InpDelta - d) > INPUT_COORDS_THRES){
PRINT(_("Wait for command result")); PRINT(_("Wait for command result"));
WAIT_EVENT((InpAlpha == r && InpDelta == d), 3); WAIT_EVENT((fabs(InpAlpha - r) < INPUT_COORDS_THRES &&
if(InpAlpha != r || InpDelta != d){ fabs(InpDelta - d) < INPUT_COORDS_THRES), WAITING_TMOUT);
if(tmout){
WARNX(_("Can't send data to system!")); WARNX(_("Can't send data to system!"));
return FALSE; return FALSE;
} }
@ -462,10 +489,11 @@ bool setCoords(char *coords, bool isEQ){
DBG("Set A/Z to %g, %g", r/3600, d/3600); DBG("Set A/Z to %g, %g", r/3600, d/3600);
ACS_CMD(SetAzimZ(r, d)); ACS_CMD(SetAzimZ(r, d));
#ifndef EMULATION #ifndef EMULATION
if(InpAzim != r || InpZdist != d){ if(fabs(InpAzim - r) > INPUT_COORDS_THRES || fabs(InpZdist - d) > INPUT_COORDS_THRES){
PRINT(_("Wait for command result")); PRINT(_("Wait for command result"));
WAIT_EVENT((InpAzim == r && InpZdist == d), 3); WAIT_EVENT((fabs(InpAzim - r) < INPUT_COORDS_THRES &&
if(InpAzim != r || InpZdist != d){ fabs(InpZdist - d) < INPUT_COORDS_THRES), WAITING_TMOUT);
if(tmout){
WARNX(_("Can't send data to system!")); WARNX(_("Can't send data to system!"));
return FALSE; return FALSE;
} }
@ -487,12 +515,13 @@ badcrds:
bool azreverce(){ bool azreverce(){
bool ret = TRUE; bool ret = TRUE;
int mode = Az_Mode; int mode = Az_Mode;
DBG("mode: %d", mode);
if(mode == Rev_Off) mode = Rev_On; if(mode == Rev_Off) mode = Rev_On;
else mode = Rev_On; else mode = Rev_Off;
ACS_CMD(SetAzRevers(mode)); ACS_CMD(SetAzRevers(mode));
PRINT(_("Turn %s azimuth reverce "), (mode == Rev_Off) ? "off" : "on"); PRINT(_("Turn %s azimuth reverce "), (mode == Rev_Off) ? "off" : "on");
#ifndef EMULATION #ifndef EMULATION
WAIT_EVENT((Az_Mode == mode), 3); WAIT_EVENT((Az_Mode == mode), WAITING_TMOUT);
if(Az_Mode != mode) ret = FALSE; if(Az_Mode != mode) ret = FALSE;
#endif #endif
return ret; return ret;
@ -500,7 +529,7 @@ bool azreverce(){
bool testauto(){ bool testauto(){
if(Tel_Mode != Automatic){ if(Tel_Mode != Automatic){
WARNX(_("Can't stop telescope: not automatic mode!")); WARNX(_("Not automatic mode!"));
return FALSE; return FALSE;
} }
return TRUE; return TRUE;
@ -513,7 +542,7 @@ bool stop_telescope(){
return TRUE; return TRUE;
} }
ACS_CMD(StopTeleskope()); ACS_CMD(StopTeleskope());
WAIT_EVENT((Sys_Mode == SysStop), 3); WAIT_EVENT((Sys_Mode == SysStop), WAITING_TMOUT);
if(Tel_Mode != SysStop){ if(Tel_Mode != SysStop){
WARNX(_("Can't stop telescope")); WARNX(_("Can't stop telescope"));
return FALSE; return FALSE;
@ -539,18 +568,19 @@ bool gotopos(bool isradec){
ACS_CMD(SetSysTarg(TagPosition)); ACS_CMD(SetSysTarg(TagPosition));
} }
DBG("start"); DBG("start");
usleep(500000);
ACS_CMD(StartTeleskope()); ACS_CMD(StartTeleskope());
usleep(500000);
#ifndef EMULATION #ifndef EMULATION
PRINT("Go"); PRINT("Go");
WAIT_EVENT((Sys_Mode != SysStop && Sys_Mode != SysWait), 5); WAIT_EVENT((Sys_Mode != SysStop && Sys_Mode != SysWait), WAITING_TMOUT);
if(tmout){ if(tmout){
WARNX(_("Can't move telescope")); WARNX(_("Can't move telescope"));
ACS_CMD(StopTeleskope());
return FALSE; return FALSE;
} }
PRINT("Wait for tracking"); PRINT("Wait for tracking");
// Wait with timeout 15min // Wait with timeout 15min
WAIT_EVENT((Sys_Mode == SysTrkOk), 900); WAIT_EVENT((Sys_Mode == SysTrkOk), 900.);
if(tmout){ if(tmout){
WARNX(_("Eror during telescope pointing")); WARNX(_("Eror during telescope pointing"));
return FALSE; return FALSE;
@ -573,7 +603,7 @@ bool PCS_state(bool on){
ACS_CMD(SwitchPosCorr(PC_Off)); ACS_CMD(SwitchPosCorr(PC_Off));
} }
#ifndef EMULATION #ifndef EMULATION
WAIT_EVENT((Pos_Corr == newstate), 3); WAIT_EVENT((Pos_Corr == newstate), WAITING_TMOUT);
if(tmout){ if(tmout){
WARNX(_("Can't set new PCS state")); WARNX(_("Can't set new PCS state"));
return FALSE; return FALSE;
@ -595,24 +625,33 @@ bool run_correction(char *dxdy, bool isAZ){
if(!myatod(&dy, &eptr)) goto badang; if(!myatod(&dy, &eptr)) goto badang;
DBG("dx: %g, dy: %g", dx, dy); DBG("dx: %g, dy: %g", dx, dy);
if(!testauto() || dx > CORR_MAX_ANGLE || dy > CORR_MAX_ANGLE) return FALSE; if(!testauto() || dx > CORR_MAX_ANGLE || dy > CORR_MAX_ANGLE) return FALSE;
int32_t oldmode = Sys_Mode;
if(isAZ){ if(isAZ){
dx /= sin(val_Z * AS2R); // transform dA to "telescope coordinates"
#ifndef EMULATION #ifndef EMULATION
double targA = val_A+dx, targZ = val_Z+dy; //double targA = val_A+dx, targZ = val_Z+dy;
#endif #endif
ACS_CMD(DoAZcorr(dx / sin(val_Z * AS2R), dy));// transform dA to "telescope coordinates" ACS_CMD(DoAZcorr(dx, dy));
#ifndef EMULATION #ifndef EMULATION
WAIT_EVENT((fabs(val_A - targA) < CORR_THRES && fabs(val_Z - targZ) < CORR_THRES), 10); PRINT(_("Wait for A/Z correction ends"));
//WAIT_EVENT((fabs(val_A - targA) < CORR_THRES && fabs(val_Z - targZ) < CORR_THRES), 10.);
#endif #endif
}else{ }else{
#ifndef EMULATION #ifndef EMULATION
double targA = val_Alp+dx, targD = val_Del+dy; //double targA = val_Alp+dx, targD = val_Del+dy;
#endif #endif
ACS_CMD(DoADcorr(dx, dy)); ACS_CMD(DoADcorr(dx, dy));
#ifndef EMULATION #ifndef EMULATION
WAIT_EVENT((fabs(val_Alp - targA) < CORR_THRES && fabs(val_Del - targD) < CORR_THRES), 10); //WAIT_EVENT((fabs(val_Alp - targA) < CORR_THRES && fabs(val_Del - targD) < CORR_THRES), 10.);
#endif #endif
} }
#ifndef EMULATION #ifndef EMULATION
PRINT(_("Wait for correction starts"));
WAIT_EVENT(Sys_Mode != oldmode, 10.);
if(tmout) goto atmout;
PRINT(_("Wait for correction ends"));
WAIT_EVENT(Sys_Mode == oldmode, 150.);
atmout:
if(tmout){ if(tmout){
WARNX(_("Can't do correction (or angle is too large)")); WARNX(_("Can't do correction (or angle is too large)"));
return FALSE; return FALSE;

View File

@ -22,15 +22,25 @@
#ifndef __BTA_CONTROL_H__ #ifndef __BTA_CONTROL_H__
#define __BTA_CONTROL_H__ #define __BTA_CONTROL_H__
// timeout for system messages process - 3 seconds
#define WAITING_TMOUT (3.)
// end-switches position (in degr); prohibited angles are in range [P2_LOW_ES .. P2_HIGH_ES] // end-switches position (in degr); prohibited angles are in range [P2_LOW_ES .. P2_HIGH_ES]
#define P2_LOW_ES (21.0) #define P2_LOW_ES (21.0)
#define P2_HIGH_ES (90.0) #define P2_HIGH_ES (90.0)
// minimal P2 moving time
#define P2_MINTIME (4.5)
// fast speed - 10arcmin per second
#define P2_FAST_SPEED (600.)
// this value will be substituted from calculated rotation time in case of moving on large speed
#define P2_FAST_T_CORR (1.5)
// angle threshold (for p2 move) in degrees // angle threshold (for p2 move) in degrees
#define P2_ANGLE_THRES (0.01) #define P2_ANGLE_THRES (0.01)
#define FOCUS_THRES (0.01) #define FOCUS_THRES (0.03)
// max angles for correction of telescope (5' = 300'') // max angles for correction of telescope (5' = 300'')
#define CORR_MAX_ANGLE (300) #define CORR_MAX_ANGLE (300)
// correction threshold // correction threshold (arcsec)
#define CORR_THRES (0.1) //#define CORR_THRES (0.1)
// input coordinates threshold (arcsec)
#define INPUT_COORDS_THRES (1.)
#endif // __BTA_CONTROL_H__ #endif // __BTA_CONTROL_H__

View File

@ -52,13 +52,11 @@
#include <crypt.h> #include <crypt.h>
#include "angle_functions.h"
#include "bta_shdata.h" #include "bta_shdata.h"
#include "bta_print.h" #include "bta_print.h"
#include "usefull_macros.h" #include "usefull_macros.h"
#define BUFSZ 255
static char buf[BUFSZ+1];
typedef struct{ typedef struct{
const char *name; const char *name;
const info_level lvl; const info_level lvl;
@ -220,68 +218,6 @@ const parstr const parameters_str[] = {
}; };
char *time_asc(double t){
int h, min;
double sec;
h = (int)(t/3600.);
min = (int)((t - (double)h*3600.)/60.);
sec = t - (double)h*3600. - (double)min*60.;
h %= 24;
if(sec>59.99) sec=59.99;
snprintf(buf, BUFSZ, "%02d:%02d:%05.2f", h,min,sec);
return buf;
}
char *angle_asc(double a){
char s;
int d, min;
double sec;
if (a >= 0.)
s = '+';
else {
s = '-'; a = -a;
}
d = (int)(a/3600.);
min = (int)((a - (double)d*3600.)/60.);
sec = a - (double)d*3600. - (double)min*60.;
d %= 360;
if(sec>59.9) sec=59.9;
snprintf (buf, BUFSZ, "%c%02d:%02d:%04.1f", s,d,min,sec);
return buf;
}
char *angle_fmt(double a, char *format){
char s, *p;
int d, min, n;
double sec, msec;
char *newformat = MALLOC(char, strlen(format) + 3);
sprintf(newformat, "%s", format);
if (a >= 0.)
s = '+';
else {
s = '-'; a = -a;
}
d = (int)(a/3600.);
min = (int)((a - (double)d*3600.)/60.);
sec = a - (double)d*3600. - (double)min*60.;
d %= 360;
if ((p = strchr(format,'.')) == NULL)
msec=59.;
else if (*(p+2) == 'f' ) {
n = *(p+1) - '0';
msec = 60. - pow(10.,(double)(-n));
} else
msec=60.;
if(sec>msec) sec=msec;
if (strstr(format,"%c"))
snprintf(buf, BUFSZ, newformat, s,d,min,sec);
else
snprintf(buf, BUFSZ, newformat, d,min,sec);
free(newformat);
return buf;
}
#ifndef M_PI #ifndef M_PI
#define M_PI (3.14159265358979323846) #define M_PI (3.14159265358979323846)
#endif #endif
@ -347,7 +283,7 @@ double calc_PA(double alpha, double delta, double stime){
} }
void calc_AD(double az, double zd, double stime, double *alpha, double *delta){ void calc_AD(double az, double zd, double stime, double *alpha, double *delta){
double sin_d, sin_a,cos_a, sin_z,cos_z; double sin_d, sin_a, cos_a, sin_z, cos_z;
double t, d, z, a, x, y; double t, d, z, a, x, y;
a = az * S2R; a = az * S2R;
z = zd * S2R; z = zd * S2R;

View File

@ -9,8 +9,9 @@ struct CMD_Queue ocmd = {{"Ocmd"}, 0200,0,-1,0};
// User command channel (level 2/3) // User command channel (level 2/3)
struct CMD_Queue ucmd = {{"Ucmd"}, 0200,0,-1,0}; struct CMD_Queue ucmd = {{"Ucmd"}, 0200,0,-1,0};
static char msg[80]; #define MSGLEN (80)
#define PERR(...) do{sprintf(msg, __VA_ARGS__); perror(msg);} while(0) static char msg[MSGLEN];
#define PERR(...) do{snprintf(msg, MSGLEN, __VA_ARGS__); perror(msg);} while(0)
#ifndef BTA_MODULE #ifndef BTA_MODULE
volatile struct BTA_Data *sdt; volatile struct BTA_Data *sdt;
@ -127,8 +128,7 @@ int get_shm_block(volatile struct SHM_Block *sb, int server) {
PERR("Can't prevents swapping of shared memory segment '%s'",sb->key.name); PERR("Can't prevents swapping of shared memory segment '%s'",sb->key.name);
return 0; return 0;
} }
DBG("Create & attach shared memory segment '%s' %dbytes at %lx", DBG("Create & attach shared memory segment '%s' %dbytes", sb->key.name, sb->size);
sb->key.name, sb->size, (uint64_t)sb->addr);
sb->side = server; sb->side = server;
if(sb->init != NULL) if(sb->init != NULL)
sb->init(); sb->init();

View File

@ -83,6 +83,7 @@ myoption cmdlnopts[] = {
end_option end_option
}; };
/** /**
* Parce command line options and return dynamically allocated structure * Parce command line options and return dynamically allocated structure
* to global parameters * to global parameters