apogee_control/bta_shdata.h
2015-02-10 00:08:55 +03:00

1160 lines
49 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#ifndef __BTA_SHDATA_H__
#define __BTA_SHDATA_H__
#define _XOPEN_SOURCE 501
/* ïÓÎÏ×ÎÙÅ ÏÐÒÅÄÅÌÅÎÉÑ É ÆÕÎËÃÉÉ ÐÏÄÄÅÒÖËÉ ÍÅÖÐÒÏÇÒÁÍÍÎÏÇÏ ÉÎÔÅÒÆÅÊÓÁ */
/* ÷ÏÚÍÏÖÎÙÅ ×ÎÅÛÎÉÅ ÏÐÒÅÄÅÌÅÎÉÑ: */
/* BTA_MODULE - ÐÒÉ ÉÓÐ-É × ÄÏÐ. C-ÍÏÄÕÌÑÈ (ÎÅ × ÇÌÁ×Î.ÐÒÏÇÒÁÍÍÅ) */
/* SHM_OLD_SIZE - ÄÌÑ ÇÅÎÅÒÁÃÉÉ ÐÒÅÄÙÄÕÝÅÊ ×ÅÓÉÉ ÓÔÒÕËÔÕÒÙ âôá-ÄÁÎÎÙÈ */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdint.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/msg.h>
#include <errno.h>
#pragma GCC diagnostic ignored "-Wunused-function"
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmissing-braces"
#pragma GCC diagnostic ignored "-Wsequence-point"
#pragma GCC diagnostic ignored "-Wpointer-to-int-cast"
#pragma GCC diagnostic ignored "-Wimplicit-function-declaration"
//#define int __int32_t
#define uint __uint32_t
struct SHM_Block { /* ÏÐÉÓÁÎÉÅ ÂÌÏËÁ ÒÁÚÄÅÌÑÅÍÏÊ ÐÁÍÑÔÉ */
union {
char name[5]; /* ËÌÀÞ ÉÄÅÎÔÅÆÉËÁÃÉÉ ÓÅÇÍÅÎÔÁ ÐÁÍÑÔÉ */
key_t code;
} key;
int size; /* ÒÁÚÍÅÒ ÉÓÐÏÌØÚÕÅÍÏÊ ÞÁÓÔÉ × ÂÁÊÔÁÈ */
int maxsize; /* ÒÁÚÍÅÒ ÐÒÉ ÓÏÚÄÁÎÉÉ ("Ó ÚÁÐÁÓÏÍ" ÄÌÑ ÂÕÄÕÝÉÈ ×ÅÒÓÉÊ) */
int mode; /* ÒÅÖÉÍ ÄÏÓÔÕÐÁ (rwxrwxrwx) */
int atflag; /* ÒÅÖÉÍ ÐÏÄÓÏÅÄÉÎÅÎÉÑ (SHM_RDONLY ÉÌÉ 0) */
void (*init)(); /* ÐÒÏÃÅÄÕÒÁ ÉÎÉÃÉÁÌÉÚÁÃÉÉ */
int (*check)(); /* ÐÒÏÃÅÄÕÒÁ ÐÒÏ×ÅÒËÉ */
void (*close)(); /* ÐÒÏÃÅÄÕÒÁ ÏÔÓÏÅÄÉÎÅÎÉÑ */
int side; /* ÔÉÐ ÐÏÄÓÏÅÄÉÎÅÎÉÑ: ëÌÉÅÎÔ/óÅÒ×ÅÒ */
int id; /* ÄÅÓËÒÉÐÔÏÒ ÐÏÄÓÏÅÄÉÎÅÎÉÑ */
unsigned char *addr; /* ÁÄÒÅÓ ÐÏÄÓÏÅÄÉÎÅÎÉÑ */
};
struct CMD_Queue { /* ÏÐÉÓÁÎÉÅ ÏÞÅÒÅÄÉ (ËÁÎÁÌÁ) ËÏÍÁÎÄ */
union {
char name[5]; /* ËÌÀÞ ÉÄÅÎÔÅÆÉËÁÃÉÉ ÏÞÅÒÅÄÉ */
key_t code;
} key;
int mode; /* ÒÅÖÉÍ ÄÏÓÔÕÐÁ (rwxrwxrwx) */
int side; /* ÔÉÐ ÐÏÄÓÏÅÄÉÎÅÎÉÑ: ëÌÉÅÎÔ/óÅÒ×ÅÒ (Sender/Receiver)*/
int id; /* ÄÅÓËÒÉÐÔÏÒ ÐÏÄÓÏÅÄÉÎÅÎÉÑ */
uint acckey; /* ËÌÀÞ ÄÏÓÔÕÐÁ (ÄÌÑ ÐÅÒÅÄÁÞÉ ëÌÉÅÎÔ->óÅÒ×ÅÒ) */
};
#ifndef BTA_MODULE
/* ËÁÎÁÌ ËÏÍÁÎÄ ÇÌÁ×ÎÏÇÏ ÏÐÅÒÁÔÏÒÓËÏÇÏ ÉÎÔÅÒÆÅÊÓÁ (Level5)*/
struct CMD_Queue mcmd = {{'M','c','m','d',0},0200,0,-1,0};
/* ËÁÎÁÌ ÐÅÒÅÄÁÞÉ ÏÐÅÒÁÔÏÒÓËÉÈ (ÐÒÉ×ÅÌÅÇÉÒÏ×ÁÎÎÙÈ) ËÏÍÁÎÄ (Level4)*/
struct CMD_Queue ocmd = {{'O','c','m','d',0},0200,0,-1,0};
/* ËÁÎÁÌ ÐÅÒÅÄÁÞÉ ÐÏÌØÚÏ×ÁÔÅÌØÓËÉÈ (ÎÅÐÒÉ×ÅÌÅÇÉÒÏ×ÁÎÎÙÈ) ËÏÍÁÎÄ (Level2/3)*/
struct CMD_Queue ucmd = {{'U','c','m','d',0},0200,0,-1,0};
#else
extern struct CMD_Queue mcmd;
extern struct CMD_Queue ocmd;
extern struct CMD_Queue ucmd;
#endif
static void send_cmd_noarg(int);
static void send_cmd_str(int, char *);
static void send_cmd_i1(int, int);
static void send_cmd_i2(int, int, int);
static void send_cmd_i3(int, int, int, int);
static void send_cmd_i4(int, int, int, int, int);
static void send_cmd_d1(int, double);
static void send_cmd_d2(int, double, double);
static void send_cmd_i1d1(int, int, double);
static void send_cmd_i2d1(int, int, int, double);
static void send_cmd_i3d1(int, int, int, int, double);
/* ÓÐÉÓÏË ËÏÍÁÎÄ */
/* ÉÍÑ ËÏÄ ÁÒÇÕÍÅÎÔÙ ÔÉÐ */
#define StopTel 1 /* ÏÓÔÁÎÏ× ÔÅÌÅÓËÏÐÁ */
#define StopTeleskope() send_cmd_noarg( 1 ) /* ÏÐÅÒ. */
#define StartHS 2 /* ÓÔÁÒÔ ÐÒÉ×ÏÄÁ ÎÁ×ÅÄÅÎÉÑ */
#define StartHightSpeed() send_cmd_noarg( 2 ) /* ÏÐÅÒ/ÔÓÔ*/
#define StartLS 3 /* ÓÔÁÒÔ ÐÒÉ×ÏÄÁ ×ÅÄÅÎÉÑ */
#define StartLowSpeed() send_cmd_noarg( 3 ) /* ÏÐÅÒ/ÔÓÔ*/
#define SetTmr 4 /* ÕÓÔ. Ch7_15 ÉÌÉ SysTimer */
#define SetTimerMode(T) send_cmd_i1 ( 4, (int)(T)) /* í.ÏÐÅÒ. */
#define SetModMod 5 /* ÕÓÔ. ÒÅÖÉÍ ÍÏÄÅÌÉÒÏ×ÁÎÉÑ */
#define SetModelMode(M) send_cmd_i1 ( 5, (int)(M)) /* í.ÏÐÅÒ. */
#define SetCodA 6 /* ËÏÄ ÓËÏÒÏÓÔÉ ÐÏ A */
#define SetPKN_A(iA,sA) send_cmd_i2 ( 6, (int)(iA),(int)(sA)) /* ÏÐÅÒ/ÔÓÔ*/
#define SetCodZ 7 /* ËÏÄ ÓËÏÒÏÓÔÉ ÐÏ Z */
#define SetPKN_Z(iZ) send_cmd_i1 ( 7, (int)(iZ)) /* ÏÐÅÒ/ÔÓÔ*/
#define SetCodP 8 /* ËÏÄ ÓËÏÒÏÓÔÉ ÐÏ P */
#define SetPKN_P(iP) send_cmd_i1 ( 8, (int)(iP)) /* ÏÐÅÒ/ÔÓÔ*/
#define SetVA 9 /* ÕÓÔ. ÓËÏÒÏÓÔØ ÐÏ A */
#define SetSpeedA(vA) send_cmd_d1 ( 9, (double)(vA)) /* ÏÐÅÒ/ÔÓÔ*/
#define SetVZ 10 /* ÕÓÔ. ÓËÏÒÏÓÔØ ÐÏ Z */
#define SetSpeedZ(vZ) send_cmd_d1 (10, (double)(vZ)) /* ÏÐÅÒ/ÔÓÔ*/
#define SetVP 11 /* ÕÓÔ. ÓËÏÒÏÓÔØ ÐÏ P */
#define SetSpeedP(vP) send_cmd_d1 (11, (double)(vP)) /* ÏÐÅÒ/ÔÓÔ*/
#define SetAD 12 /* ÚÁÐ.ÎÏ×ÙÅ ËÏÏÒÄÉÎÁÔÙ R.A.É Decl */
#define SetRADec(Alp,Del) send_cmd_d2 (12, (double)(Alp),(double)(Del))/* ÐÏÌØÚ.*/
#define SetAZ 13 /* ÚÁÐ.ËÏÏÒÄÉÎÁÔÙ ÁÚÉÍÕÔ É ÚÅÎ.ÒÁÓÓÔ.*/
#define SetAzimZ(A,Z) send_cmd_d2 (13, (double)(A),(double)(Z))/* ÐÏÌØÚ.*/
#define GoToAD 14 /* ÓÔÁÒÔ ÎÁ×ÅÄÅÎÉÑ ÎÁ ÏÂßÅËÔ (ÐÏ R.A.É Decl)*/
#define GoToObject() send_cmd_noarg(14 ) /* ÏÐÅÒ. */
#define MoveToAD 15 /* ÐÅÒÅÅÚÄ ÎÁ ÏÂßÅËÔ (ÐÏ R.A.É Decl)*/
#define MoveToObject() send_cmd_noarg(15 ) /* ÐÏÌØÚ.*/
#define GoToAZ 16 /* ÎÁ×ÅÄÅÎÉÅ ÐÏ ÐÏÌÏÖÅÎÉÀ (ÐÏ A Z)*/
#define GoToAzimZ() send_cmd_noarg(16 ) /* ÏÐÅÒ. */
#define WriteAZ 17 /* ÕÓÔÁÎÏ×ËÁ A É Z ÄÌÑ FullModel*/
#define WriteModelAZ() send_cmd_noarg(17 ) /* ÏÐÅÒ. */
#define SetModP 18 /* ÕÓÔ. ÒÅÖÉÍ ÉÓÐÏÌØÚÏ×ÁÎÉÑ P2 */
#define SetPMode(pmod) send_cmd_i1 (18, (int)(pmod)) /* ÐÏÌØÚ.*/
#define P2Move 19 /* ×ËÌ./×ÙËÌ. (+-1,0) Ä×ÉÖÅÎÉÅ P2 */
#define MoveP2(dir) send_cmd_i1 (19, (int)(dir)) /* ÐÏÌØÚ.*/
#define FocMove 20 /* ×ËÌ./×ÙËÌ. (+-2,+-1,0) Ä×ÉÖÅÎÉÅ ÆÏËÕÓÁ */
#define MoveFocus(speed,time) send_cmd_i1d1(20,(int)(speed),(double)(time)) /* ÐÏÌØÚ.*/
#define UsePCorr 21 /* ÒÅÖÉÍ ÕÞÅÔÁ ÐÏÐÒÁ×ÏË ÐÏÌÏÖÅÎÉÑ (óëî) */
#define SwitchPosCorr(pc_flag) send_cmd_i1 (21, (int)(pc_flag)) /* ÏÐÅÒ. */
#define SetTrkFlags 22 /* ÕÓÔ. ÆÌÁÇÏ× ÒÅÖÉÍÁ ÓÌÅÖÅÎÉÑ */
#define SetTrkOkMode(trk_flags) send_cmd_i1 (22, (int)(trk_flags)) /* ÏÐÅÒ.*/
#define SetTFoc 23 /* ÕÓÔ.ÆÏËÕÓÁ: 0-ðæ, 1-î1, 2-î2 */
#define SetTelFocus(N) send_cmd_i1 ( 23, (int)(N)) /* ÏÐÅÒ. */
#define SetVAD 24 /* ÕÓÔ.ÓË.ÓÏÂÓ×.Ä×-Ñ ÏÂßÅËÔÁ ÐÏ R.A.É Decl */
#define SetVelAD(VAlp,VDel) send_cmd_d2 (24, (double)(VAlp),(double)(VDel))/* ÏÐÅÒ.*/
#define SetRevA 25 /* ÕÓÔ. ÒÅÖÉÍ "ÏÂÈÏÄÁ" ÁÚÉÍÕÔÁ */
#define SetAzRevers(amod) send_cmd_i1 (25, (int)(amod)) /* ÐÏÌØÚ.*/
#define SetVP2 26 /* ÕÓÔ.ÓËÏÒ..Ä×-Ñ P2 (ÄÌÑ äâõ) */
#define SetVelP2(vP2) send_cmd_d1 (26, (double)(vP2)) /* ÐÏÌØÚ.*/
#define SetTarg 27 /* ÕÓÔ. ÃÅÌÉ ÎÁ×ÅÄÅÎÉÑ */
#define SetSysTarg(Targ) send_cmd_i1 (27, (int)(Targ)) /* ÏÐÅÒ.*/
#define SendMsg 28 /* ÒÁÚÍÅÝÅÎÉÅ ÓÏÏÂÝÅÎÉÑ (×ÓÅÍ ËÌÉÅÎÔÁÍ É × ÐÒÏÔÏËÏÌ) */
#define SendMessage(Mesg) send_cmd_str (28, (char *)(Mesg)) /* ÐÏÌØÚ.*/
#define CorrAD 29 /* ËÏÒÒÅËÃÉÑ ËÏÏÒÄÉÎÁÔ R.A.É Decl */
#define DoADcorr(dAlp,dDel) send_cmd_d2 (29, (double)(dAlp),(double)(dDel))/* ÐÏÌØÚ.*/
#define CorrAZ 30 /* ËÏÒÒÅËÃÉÑ ËÏÏÒÄÉÎÁÔ A É Z*/
#define DoAZcorr(dA,dZ) send_cmd_d2 (30, (double)(dA),(double)(dZ))/* ÐÏÌØÚ.*/
#define SetVCAZ 31 /* ÕÓÔ.ÓËÏÒ.ËÏÒÒÅËÃÉÉ ÐÏ A É Z*/
#define SetVCorr(vA,vZ) send_cmd_d2 (31, (double)(vA),(double)(vZ))/* ÐÏÌØÚ.*/
#define P2MoveTo 32 /* ÐÅÒÅÅÚÄ P2 ÐÏ ×ÒÅÍÅÎÉ */
#define MoveP2To(vP2,time) send_cmd_d2 (32, (double)(vP2),(double)(time))/* ÐÏÌØÚ.*/
#define GoToTD 33 /* ÓÔÁÒÔ ÎÁ×ÅÄÅÎÉÑ ÎÁ ÓÔÁÃÉÏÎÁÒ (ÐÏ t É Decl)*/
#define GoToSat() send_cmd_noarg (33 ) /* ÏÐÅÒ..*/
#define MoveToTD 34 /* ÐÅÒÅÅÚÄ ÎÁ ÓÔÁÃÉÏÎÁÒ (ÐÏ t É Decl)*/
#define MoveToSat() send_cmd_noarg (34 ) /* ÐÏÌØÚ.*/
#define NullCom 35 /* ÐÕÓÔÁÑ ËÏÍÁÎÄÁ (ÄÌÑ ÓÉÎÈÒÏÎÉÚÁÃÉÊ?) */
#define SyncCom() send_cmd_noarg (35 ) /* ÏÐÅÒ. */
#define StartTel 36 /* ËÎÏÐËÁ "ðÕÓË" ÔÅÌÅÓËÏÐÁ */
#define StartTeleskope() send_cmd_noarg(36 ) /* ÏÐÅÒ. */
#define SetTMod 37 /* ÕÓÔ. ÒÅÖÉÍÙ ÒÁÂÏÔÙ ÔÅÌÅÓËÏÐÁ */
#define SetTelMode(M) send_cmd_i1 ( 37, (int)(M)) /* í.ÏÐÅÒ. */
#define TelOn 38 /* ËÎÏÐËÁ ÷ËÌ. íÁÓÌÏ, üíõ É Ô.Ä.*/
#define TeleskopeOn() send_cmd_noarg(38 ) /* í.ÏÐÅÒ. */
#define SetModD 39 /* ÕÓÔ. ÒÅÖÉÍ ÉÓÐÏÌØÚÏ×ÁÎÉÑ ËÕÐÏÌÁ */
#define SetDomeMode(dmod) send_cmd_i1 (39, (int)(dmod)) /* í.ÏÐÅÒ.*/
#define DomeMove 40 /* ×ËÌ./×ÙËÌ. (+-1+-2,+-3,0) Ä×ÉÖÅÎÉÅ ËÕÐÏÌÁ */
#define MoveDome(speed,time) send_cmd_i1d1(40,(int)(speed),(double)(time)) /* ÏÐÅÒ.*/
#define SetPass 41 /* ÕÓÔ. ÐÁÒÏÌØ ÕÒÏ×ÎÑ ÄÏÓÔÕÐÁ */
#define SetPasswd(LPass) send_cmd_str (41, (char *)(LPass)) /* í.ÏÐÅÒ.*/
#define SetLevC 42 /* ÕÓÔ. ËÏÄ ÕÒÏ×ÎÑ ÄÏÓÔÕÐÁ */
#define SetLevCode(Nlev,Cod) send_cmd_i2(42, (int)(Nlev),(int)(Cod)) /* í.ÏÐÅÒ.*/
#define SetLevK 43 /* ÕÓÔ. ËÌÀÞ ÕÒÏ×ÎÑ ÄÏÓÔÕÐÁ */
#define SetLevKey(Nlev,Key) send_cmd_i2(43, (int)(Nlev),(int)(Key)) /* í.ÏÐÅÒ.*/
#define SetNet 44 /* ÕÓÔ. ÍÁÓËÕ É ÁÄÒÅÓ ÐÏÄÓÅÔÉ */
#define SetNetAcc(Mask,Addr) send_cmd_i2(44, (int)(Mask),(int)(Addr)) /* í.ÏÐÅÒ.*/
#define SetMet 45 /* ××ÏÄ ÍÅÔÅÏ ÄÁÎÎÙÈ */
#define SetMeteo(m_id,m_val) send_cmd_i1d1(45,(int)(m_id),(double)(m_val)) /* ÏÐÅÒ.*/
#define TurnMetOff 46 /* ÏÔÍÅÎÁ ÉÓÐ. ÍÅÔÅÏ ÄÁÎÎÙÈ */
#define TurnMeteoOff(m_id) send_cmd_i1 (46, (int)(m_id)) /* ÏÐÅÒ.*/
#define SetDUT1 47 /* ÕÓÔ.ÐÏÐÒ.×ÒÅÍÅÎÉ(IERS DUT1=UT1-UTC) */
#define SetDtime(dT) send_cmd_d1 (47, (double)(dT)) /* í.ÏÐÅÒ.*/
#define SetPM 48 /* ÕÓÔ.ÐÏÌÏÖ.ÐÏÌÀÓÁ(IERS polar motion)*/
#define SetPolMot(Xp,Yp) send_cmd_d2 (48, (double)(Xp),(double)(Yp)) /* í.ÏÐÅÒ.*/
#define GetSEW 49 /* ÐÒÏÞÉÔÁÔØ SEW ÐÁÒÁÍÅÔÒ */
#define GetSEWparam(Ndrv,Indx,Cnt) send_cmd_i3(49,(int)(Ndrv),(int)(Indx),(int)(Cnt)) /* M.ÏÐÅÒ.*/
#define PutSEW 50 /* ÚÁÐÉÓÁÔØ SEW ÐÁÒÁÍÅÔÒ */
#define PutSEWparam(Ndrv,Indx,Key,Val) send_cmd_i4(50,(int)(Ndrv),(int)(Indx),(int)(Key),(int)(Val)) /* M.ÏÐÅÒ.*/
#define SetLocks 51 /* ÕÓÔÁÎÏ×ËÁ ÂÌÏËÉÒÏ×ÏË ÕÐÒÁ×ÌÅÎÉÑ ÕÚÌÁÍÉ */
#define SetLockFlags(f) send_cmd_i1 (SetLocks, (int)(f)) /* M.ÏÐÅÒ.*/
#define ClearLocks 52 /* ÏÔÍÅÎÁ ÂÌÏËÉÒÏ×ÏË ÕÐÒÁ×ÌÅÎÉÑ ÕÚÌÁÍÉ */
#define ClearLockFlags(f) send_cmd_i1 (ClearLocks, (int)(f)) /* M.ÏÐÅÒ.*/
#define SetRKbits 53 /* õÓÔÁÎÏ×ËÁ ÄÏÐ.ÂÉÔÏ× PEP-RK */
#define AddRKbits(f) send_cmd_i1 (SetRKbits, (int)(f)) /* M.ÏÐÅÒ.*/
#define ClrRKbits 54 /* ïÞÉÓÔËÁ ÄÏÐ.ÂÉÔÏ× PEP-RK */
#define ClearRKbits(f) send_cmd_i1 (ClrRKbits, (int)(f)) /* M.ÏÐÅÒ.*/
#define SetSEWnd 55 /* ÕÓÔ.ÎÏÍÅÒ SEW-Ä×ÉÖËÁ ËÕÐÏÌÁ (ÄÌÑ ÉÎÄÉËÁÃÉÉ)*/
#define SetDomeDrive(ND) send_cmd_i1 (SetSEWnd, (int)(ND)) /* í.ÏÐÅÒ.*/
#define SEWsDome 56 /* ÷ËÌ./÷ÙËÌ. SEW-Ä×ÉÖËÏ× ËÕÐÏÌÁ */
#define DomeSEW(OnOff) send_cmd_i1 (SEWsDome, (int)(OnOff)) /* í.ÏÐÅÒ.*/
/* ÓÔÒÕËÔÕÒÁ ÄÁÎÎÙÈ ÁÌÇÏÒÉÔÍÁ ÕÐÒÁ×ÌÅÎÉÑ (ÒÁÓÐÒÅÄÅÌÅÎÉÅ "ÇÌÏÂÁÌØÎÏÊ ÏÂÌÁÓÔÉ") */
#define BTA_Data_Ver 2
#pragma pack(4)
//struct __attribute__((packed)) BTA_Data {
struct BTA_Data {
int magic; /* ËÏÄ ÏÐÏÚÎÁÎÉÑ ÓÔÒÕËÔÕÒÙ */
int version; /* ÎÏÍÅÒ ×ÅÒÓÉÉ ÓÔÒÕËÔÕÒÙ = BTA_Data_Ver*/
int size; /* ÒÁÚÍÅÒ ÓÔÒÕËÔÕÒÙ = sizeof(struct BTA_Data)*/
int pid;
#define ServPID (sdt->pid) /*ÎÏÍÅÒ ÐÒÏÃÅÓÓÁ ÇÌ.ÕÐÒ.ÐÒÏÇÒÁÍÍÙ */
/* ÒÅÖÉÍÙ ÒÁÂÏÔÙ */
int model;
#define UseModel (sdt->model) /* ×ÁÒÉÁÎÔ ÉÓÐÏÌØÚÏ×ÁÎÉÑ ÍÏÄÅÌÉÒÏ×ÁÎÉÑ */
#define NoModel 0 /* ÏÔËÌÀÞÅÎÏ */
#define CheckModel 1 /* ÐÒÉ×ÏÄÁ ËÏÎÔÒÏÌÉÒÕÀÔÓÑ ÐÏ ÍÏÄÅÌÉ */
#define DriveModel 2 /* ÍÏÄÅÌÉÒÏ×ÁÎÉÅ ÐÒÉ×ÏÄÏ× É "ÓÌÅÐÏÅ" ÕÐÒÁ×ÌÅÎÉÅ ÂÅÚ ÒÅÁÌØÎÙÈ ÄÁÔÞÉËÏ× */
#define FullModel 3 /* ÐÏÌÎÏÅ ÍÏÄÅÌÉÒÏ×ÁÎÉÅ ÂÅÚ ÔÅÌÅÓËÏÐÁ */
int timer;
#define ClockType (sdt->timer) /* ËÁËÉÅ ÞÁÓÙ ÉÓÐÏÌØÚÕÀÔÓÑ */
#define Ch7_15 0 /* ÷ÎÕÔÒ.ÞÁÓÙ ÕÐÒ.ÐÒÏÇÒÁÍÍÙ Ó ÓÉÎÈÒÏÎÉÚÁÃÉÅÊ ÐÏ þ7-15 */
#define SysTimer 1 /* ôÁÊÍÅÒ ÓÉÓÔÅÍÙ (ÎÅÉÚ×ÅÓÔÎÏ ÓÉÎÈÒÏÎÉÚÉÒÏ×ÁÎÎÙÊ ÉÌÉ ÎÅÔ) */
#define ExtSynchro 2 /* òÁÂÏÔÁÅÔ ÓÉÎÈÒÏÎÉÚÁÃÉÑ ÔÁÊÍÅÒÁ ÓÉÓÔÅÍÙ ×ÎÅÛÎÅÊ ÐÒÏÇÒÁÍÍÏÊ (bta_time ÉÌÉ xntpd)*/
int system;
#define Sys_Mode (sdt->system) /* ÒÅÖÉÍ ÒÁÂÏÔÙ ÓÉÓÔÅÍÙ */
#define SysStop 0 /* ïÓÔÁÎÏ× */
#define SysWait 1 /* ïÖÉÄÁÎÉÅ ÓÔÁÒÔÁ (ÎÁ×ÅÄÅÎÉÑ) */
#define SysPointAZ 2 /* îÁ×ÅÄÅÎÉÅ ÐÏ ÐÏÌÏÖÅÎÉÀ (ÐÏ A Z)*/
#define SysPointAD 3 /* îÁ×ÅÄÅÎÉÅ ÎÁ ÏÂßÅËÔ (ÐÏ R.A.É Decl)*/
#define SysTrkStop 4 /* ÷ÅÄÅÎÉÅ: ÏÖÉÄÁÎÉÅ ÓÔÁÒÔÁ */
#define SysTrkStart 5 /* ÷ÅÄÅÎÉÅ: ÒÁÚÇÏÎ ÄÏ ÎÏÍÉÎ.ÓËÏÒÏÓÔÉ (ÏÂßÅËÔÁ)*/
#define SysTrkMove 6 /* ÷ÅÄÅÎÉÅ: ÐÅÒÅÅÚÄ ÎÁ ÏÂßÅËÔ */
#define SysTrkSeek 7 /* ÷ÅÄÅÎÉÅ: ÓÌÅÖÅÎÉÅ ÚÁ ÏÂßÅËÔÏÍ */
#define SysTrkOk 8 /* ÷ÅÄÅÎÉÅ: ÒÁÓÓÏÇÌÁÓÏ×ÁÎÉÑ × ÄÏÐÕÓËÅ */
#define SysTrkCorr 9 /* ÷ÅÄÅÎÉÅ: ËÏÒÒÅËÃÉÑ ÐÏÌÏÖÅÎÉÑ */
#define SysTest 10 /* ôÅÓÔÉÒÏ×ÁÎÉÅ */
int sys_target;
#define Sys_Target (sdt->sys_target) /* ÃÅÌØ ÎÁ×ÅÄÅÎÉÑ */
#define TagPosition 0 /* ðÏÌÏÖÅÎÉÅ A/Z */
#define TagObject 1 /* ïÂßÅËÔ Alpha/Delta */
#define TagNest 2 /* ðÏÌÏÖÅÎÉÅ "çÎÅÚÄÏ" */
#define TagZenith 3 /* ðÏÌÏÖÅÎÉÅ "úÅÎÉÔ" */
#define TagHorizon 4 /* ðÏÌÏÖÅÎÉÅ "çÏÒÉÚÏÎÔ" */
#define TagStatObj 5 /* "óÔÁÃÉÏÎÁÒ" t/Delta */
int tel_focus;
#define Tel_Focus (sdt->tel_focus) /* ÔÉÐ ÆÏËÕÓÁ ÔÅÌÅÓËÏÐÁ: 0-ðæ, 1-î1, 2-î2 */
#define Prime 0
#define Nasmyth1 1
#define Nasmyth2 2
double pc_coeff[8];
#define PosCor_Coeff (sdt->pc_coeff) /* ËÏÜÆ-ÔÙ óëî ÄÌÑ ÔÅË.ÆÏËÕÓÁ */
/* ÓÏÓÔÏÑÎÉÅ ÔÅÌÅÓËÏÐÁ */
#define Stopping 0 /* ïÓÔÁÎÏ× */
#define Pointing 1 /* îÁ×ÅÄÅÎÉÅ */
#define Tracking 2 /* ÷ÅÄÅÎÉÅ */
int tel_state;
#define Tel_State (sdt->tel_state) /* ÒÅÁÌØÎÏ ÏÔÒÁÂÁÔÙ×ÁÅÍÏÅ */
int req_state;
#define Req_State (sdt->req_state) /* ÚÁÔÒÅÂÏ×ÁÎÎÏÅ ÐÒÏÇÒÁÍÍÏÊ */
int tel_hard_state;
#define Tel_Hardware (sdt->tel_hard_state) /* ÓÏÓÔÏÑÎÉÅ õóï */
#define Hard_Off 0 /* ÐÉÔÁÎÉÅ ×ÙËÌÀÞÅÎÏ */
#define Hard_On 1 /* ×ËÌÀÞÅÎÏ */
/* ÒÅÖÉÍÙ ÒÁÂÏÔÙ ÔÅÌÅÓËÏÐÁ */
int tel_mode;
#define Tel_Mode (sdt->tel_mode)
#define Automatic 0 /* "á×ÔÏÍÁÔ" - ÎÏÒÍÁÌØÎÙÊ ÒÅÖÉÍ*/
#define Manual 1 /* "ð/Á×Ô.ÕÐÒ." - ÐÕÌØÔÏ×ÏÊ ÒÅÖÉÍ É × ÎÅÍ:*/
#define ZenHor 2 /* "úÅÎÉÔ-çÏÒÉÚÏÎÔ" - ÒÁÂÏÔÁ ÐÒÉ Z<5 É Z>80*/
#define A_Move 4 /* ÒÕÞÎÏÅ Ä×ÉÖÅÎÉÅ A */
#define Z_Move 8 /* --- "" --- Z */
#define Balance 0x10 /* ÂÁÌÁÎÓÉÒÏ×ËÁ ÔÒÕÂÙ */
/* ×ËÌ./×ÙËÌ. ÒÅÖÉÍ "ÏÂÈÏÄÁ" ÁÚÉÍÕÔÁ */
int az_mode;
#define Az_Mode (sdt->az_mode)
#define Rev_Off 0 /* ÎÏÒÍÁÌØÎÏÅ ÎÁ×ÅÄÅÎÉÅ ÎÁ ÂÌÉÖÁÊÛÅÅ ÐÏÌÏÖÅÎÉÅ ÐÏ ÁÚÉÍÕÔÕ */
#define Rev_On 1 /* ÎÁ×ÅÄÅÎÉÅ Ó ÐÅÒÅÇÏÎÏÍ ÎÁ 360ÇÒÁÄ. */
/* ÒÁÂÏÔÁ P2 */
int p2_state;
#define P2_State (sdt->p2_state) /* ÒÅÁÌØÎÏÅ ÓÏÓÔÏÑÎÉÅ ÐÒÉ×ÏÄÁ P2 */
#define P2_Off 0 /* óÔÏÉÔ */
#define P2_On 1 /* ÷ÅÄÅÔ */
#define P2_Plus 2 /* ÂÙÓÔÒÏ ÅÄÅÔ × + */
#define P2_Minus -2 /* ÂÙÓÔÒÏ ÅÄÅÔ × - */
int p2_req_mode;
#define P2_Mode (sdt->p2_req_mode) /* ÒÅÖÉÍ ÉÓÐÏÌØÚÏ×ÁÎÉÑ P2 (ÐÏËÁ: ÷ËÌ/÷ÙËÌ)*/
/* ÓÏÓÔÏÑÎÉÅ ÐÒÉ×ÏÄÁ ÆÏËÕÓÁ */
int focus_state;
#define Foc_State (sdt->focus_state)
#define Foc_Off 0 /* óÔÏÉÔ */
#define Foc_Lplus 1 /* ÍÅÄÌ. ÅÄÅÔ × + */
#define Foc_Lminus -1 /* ÍÅÄÌ. ÅÄÅÔ × - */
#define Foc_Hplus 2 /* ÂÙÓÔÒÏ ÅÄÅÔ × + */
#define Foc_Hminus -2 /* ÂÙÓÔÒÏ ÅÄÅÔ × - */
/* ÓÏÓÔÏÑÎÉÅ ÐÒÉ×ÏÄÁ ËÕÐÏÌÁ */
int dome_state;
#define Dome_State (sdt->dome_state)
#define D_On 7 /* á×ÔÏÍÁÔÉÞÅÓËÏÅ ÓÏÇÌÁÓÏ×ÁÎÉÅ Ó ÔÅÌÅÓËÏÐÏÍ */
#define D_Off 0 /* óÔÏÉÔ */
#define D_Lplus 1 /* ÍÅÄÌ. ÅÄÅÔ × + */
#define D_Lminus -1 /* ÍÅÄÌ. ÅÄÅÔ × - */
#define D_Mplus 2 /* ÓÒÅÄ.ÓËÏÒ. × + */
#define D_Mminus -2 /* ÓÒÅÄ.ÓËÏÒ. × - */
#define D_Hplus 3 /* ÂÙÓÔÒÏ ÅÄÅÔ × + */
#define D_Hminus -3 /* ÂÙÓÔÒÏ ÅÄÅÔ × - */
/* ÕÞÅÔ ÐÏÐÒÁ×ÏË ÐÏÌÏÖÅÎÉÑ (óëî) */
int pcor_mode;
#define Pos_Corr (sdt->pcor_mode) /* ËÏÒÒÅËÃÉÑ ÐÏÌÏÖÅÎÉÑ ÏÂßÅËÔÁ ÐÏ A/Z: ÷ËÌ/÷ÙËÌ*/
#define PC_Off 0 /* ÷ÙËÌ. */
#define PC_On 1 /* ÷ËÌ. */
/* ÆÌÁÇÉ ×ËÌ/×ÙËÌ. ×ÁÒÉÁÎÔÏ× ÒÅÖÉÍÁ ÓÌÅÖÅÎÉÑ */
int trkok_mode;
#define TrkOk_Mode (sdt->trkok_mode)
#define UseDiffVel 1 /* ÏÐÒÅÄÅÌÅÎÉÅ&ÕÞÅÔ ÐÏÐÒÁ×ÏË ÒÅÁÌØÎÏÊ ÓËÏÒÏÓÔÉ ÐÒÉ×ÏÄÏ× (~ÉÚÏÄÏÒÏÍ)*/
#define UseDiffAZ 2 /* ÓÌÅÖÅÎÉÅ ÐÏ ÒÁÓÓÏÇÌÁÓÏ×ÁÎÉÀ (ÉÎÁÞÅ ÕÓÔ.ÒÁÓÓÞÅÔÎ.ÓËÏÒÏÓÔÅÊ) */
#define UseDFlt 4 /* ×ËÌ. ÃÉÆÒÏ×ÏÇÏ ÆÉÌØÔÒÁ ÒÁÓÓÏÇÌÁÓÏ×ÁÎÉÊ */
/* ××ÅÄÅÎÎÙÅ ÚÎÁÞÅÎÉÑ */
double i_alpha, i_delta;
#define InpAlpha (sdt->i_alpha) /* ××ÅÄÅÎÎÁÑ ËÏÏÒÄÉÎÁÔÁ R.A. (sec) */
#define InpDelta (sdt->i_delta) /* -- " -- Decl. (") */
double s_alpha, s_delta;
#define SrcAlpha (sdt->s_alpha) /* ÉÓÈÏÄÎÁÑ ËÏÏÒÄÉÎÁÔÁ R.A. (sec) */
#define SrcDelta (sdt->s_delta) /* -- " -- Decl. (") */
double v_alpha, v_delta;
#define VelAlpha (sdt->v_alpha) /* ÓË.ÓÏÂÓ×.Ä×-Ñ ÏÂßÅËÔÁ ÐÏ R.A. (sec/ÓÅË) */
#define VelDelta (sdt->v_delta) /* -- " -- Decl. ("/ÓÅË) */
double i_azim, i_zdist;
#define InpAzim (sdt->i_azim) /* ÄÌÑ ÎÁ×ÅÄÅÎÉÑ ÐÏ ÁÚÉÍÕÔÕ (") */
#define InpZdist (sdt->i_zdist) /* -- " -- ÚÅÎ.ÒÁÓÓÔ. (") */
/* ÒÁÓÓÞÅÔÎÙÅ ÚÎÁÞÅÎÉÑ */
double c_alpha, c_delta;
#define CurAlpha (sdt->c_alpha) /* ÔÅËÕÝÁÑ ËÏÏÒÄÉÎÁÔÁ R.A. (sec) */
#define CurDelta (sdt->c_delta) /* -- " -- Decl. (") */
double tag_a, tag_z, tag_p;
#define tag_A (sdt->tag_a) /* ÔÅËÕÝÉÊ A (") ÏÂßÅËÔÁ */
#define tag_Z (sdt->tag_z) /* - " - Z (") - " - */
#define tag_P (sdt->tag_p) /* - " - P (") - " - */
double pcor_a, pcor_z, refr_z;
#define pos_cor_A (sdt->pcor_a) /* ÐÏÐÒÁ×ËÁ ÐÏÌÏÖÅÎÉÑ ÏÂßÅËÔÁ ÐÏ A (") */
#define pos_cor_Z (sdt->pcor_z) /* - " - - " - ÐÏ Z (") */
#define refract_Z (sdt->refr_z) /* ÐÏÐÒÁ×ËÁ ÚÁ ÒÅÆÒÁËÃÉÀ ÄÌÑ ÏÂßÅËÔÁ (") */
double tcor_a, tcor_z, tref_z;
#define tel_cor_A (sdt->tcor_a) /* ÐÏÐÒÁ×ËÁ ÏÂÒ.ÐÅÒÅÓÞÅÔÁ ÐÏÌÏÖÅÎÉÑ ÔÅÌÅÓËÏÐÁ ÐÏ A (") */
#define tel_cor_Z (sdt->tcor_z) /* - " - - " - - " - ÐÏ Z (") */
#define tel_ref_Z (sdt->tref_z) /* ÐÏÐÒÁ×ËÁ ÏÂÒ.ÐÅÒÅÓÞÅÔÁ ÚÁ ÒÅÆÒÁËÃÉÀ (") */
double diff_a, diff_z, diff_p;
#define Diff_A (sdt->diff_a) /* ÒÁÓÓÏÇÌ-Å(ÏÓÔÁÌÏÓØ ÅÈÁÔØ) ÐÏ A (") */
#define Diff_Z (sdt->diff_z) /* - " - - " - Z (") */
#define Diff_P (sdt->diff_p) /* - " - - " - P (") */
double vbasea,vbasez,vbasep;
#define vel_objA (sdt->vbasea) /* ÂÁÚÏ×ÁÑ ÓËÏÒÏÓÔØ ÏÂßÅËÔÁ ÐÏ A ("/ÓÅË) */
#define vel_objZ (sdt->vbasez) /* - " - - " - Z - " - */
#define vel_objP (sdt->vbasep) /* - " - - " - P - " - */
double diffva,diffvz,diffvp;
#define diff_vA (sdt->diffva) /* ÐÏÐÒÁ×ËÁ ÒÅÁÌØÎÏÊ ÓËÏÒÏÓÔÉ ÐÒÉ×ÏÄÁ ÐÏ ÁÚÉÍÕÔÕ */
#define diff_vZ (sdt->diffvz) /* -- "" -- -- "" -- ÐÏ Z */
#define diff_vP (sdt->diffvp) /* -- "" -- -- "" -- ÐÏ P */
double speeda,speedz,speedp;
#define speedA (sdt->speeda) /* ÓËÏÒÏÓÔØ ÐÏ A ("/ÓÅË) ÄÌÑ ÕÐÒÁ×ÌÅÎÉÑ ÐÒÉ×ÏÄÏÍ */
#define speedZ (sdt->speedz) /* - " - Z - " - */
#define speedP (sdt->speedp) /* - " - P - " - */
double m_time_precip;
#define Precip_time (sdt->m_time_precip)/* ÍÏÍÅÎÔ ×ÒÅÍÅÎÉ ÐÏÑ×ÌÅÎÉÑ ÏÓÁÄËÏ× (precipitations)*/
unsigned char reserve[16];
#define Reserve (sdt->reserve) /* Ó×ÏÂÏÄÎÏÅ ÍÅÓÔÏ */
double rspeeda, rspeedz, rspeedp;
#define req_speedA (sdt->rspeeda) /* ÓËÏÒÏÓÔØ ("/ÓÅË) ×ÙÄÁÎÎÁÑ ÎÁ ÐÒÉ×ÏÄ A */
#define req_speedZ (sdt->rspeedz) /* - " - Z */
#define req_speedP (sdt->rspeedp) /* - " - P */
double simvela, simvelz, simvelp, simvelf, simveld;
#define mod_vel_A (sdt->simvela) /* ÓËÏÒÏÓÔØ ÐÏ A ("/ÓÅË) ÍÏÄÅÌØÎÁÑ */
#define mod_vel_Z (sdt->simvelz) /* - " - Z - " - */
#define mod_vel_P (sdt->simvelp) /* - " - P - " - */
#define mod_vel_F (sdt->simvelf) /* - " - F - " - */
#define mod_vel_D (sdt->simvelf) /* - " - D - " - */
/* ÒÅÚÕÌØÔÁÔÙ ÉÚÍÅÒÅÎÉÑ ÄÁÔÞÉËÏ× É ÒÁÓÓÞÉÔÁÎÎÙÅ ÐÏ ÎÉÍ ÚÎÁÞÅÎÉÑ */
uint kost;
#define code_KOST (sdt->kost) /* ÓÏÓÔ. ÔÅÌÅÓËÏÐÁ É ÒÕÞÎÏÊ ËÏÒÒÅËÃÉÉ */
/* 0x8000 - ÁÚÉÍÕÔ ÐÏÌÏÖÉÔÅÌØÎÙÊ */
/* 0x4000 - ÏÔÒÁÂÏÔËÁ ×ËÌ. */
/* 0x2000 - ÒÅÖÉÍ ×ÅÄÅÎÉÑ */
/* 0x1000 - ÏÔÒÁÂÏÔËÁ P2 ×ËÌ.*/
/* 0x01F0 - ÓË.ËÏÒÒ. 0.2 0.4 1.0 2.0 5.0("/ÓÅË) */
/* 0x000F - ÎÁÐÒ.ËÏÒÒ. +Z -Z +A -A */
double m_time, s_time, l_time;
#define M_time (sdt->m_time) /* ÔÅËÕÝÅÅ ÍÏÓËÏ×ÓËÏÅ ×ÒÅÍÑ (ÔÅÐÅÒØ UTC!)*/
#define S_time (sdt->s_time) /* ÔÅËÕÝÅÅ Ú×ÅÚÄÎÏÅ ×ÒÅÍÑ */
#define L_time (sdt->l_time) /* ×ÒÅÍÑ ÒÁÂÏÔÙ ÐÒÏÇÒÁÍÍÙ */
uint ppndd_a, ppndd_z, ppndd_p, ppndd_b;
#define ppndd_A (sdt->ppndd_a) /* ËÏÄ ÄÁÔÞÉËÁ ððîää (ÇÒÕÂÏÇÏ ÏÔÓÞÅÔÁ) A */
#define ppndd_Z (sdt->ppndd_z) /* - "" - Z */
#define ppndd_P (sdt->ppndd_p) /* - "" - P */
#define ppndd_B (sdt->ppndd_b) /* ËÏÄ ÄÁÔÞÉËÁ ððîää ÄÁ×ÌÅÎÉÑ */
uint dup_a, dup_z, dup_p, dup_f, dup_d;
#define dup_A (sdt->dup_a) /* ËÏÄ çÒÅÑ ÄÁÔÞÉËÁ äõð (ÔÏÞÎÏÇÏ ÏÔÓÞÅÔÁ) A */
#define dup_Z (sdt->dup_z) /* - "" - Z */
#define dup_P (sdt->dup_p) /* - "" - P */
#define dup_F (sdt->dup_f) /* ËÏÄ çÒÅÑ ÄÁÔÞÉËÁ äõð ÆÏËÕÓÁ ÔÅÌÅÓËÏÐÁ */
#define dup_D (sdt->dup_d) /* ËÏÄ çÒÅÑ ÄÁÔÞÉËÁ äõð ÐÏÌÏÖÅÎÉÑ ËÕÐÏÌÁ */
uint low_a, low_z, low_p, low_f, low_d;
#define low_A (sdt->low_a) /* 14Ò-× Ä×.ËÏÄÁ ÔÏÞÎÏÇÏ ÏÔÓÞÅÔÁ A */
#define low_Z (sdt->low_z) /* - "" - Z */
#define low_P (sdt->low_p) /* - "" - P */
#define low_F (sdt->low_f) /* ËÏÄ ÏÔÓÞÅÔÁ ÆÏËÕÓÁ ÔÅÌÅÓËÏÐÁ */
#define low_D (sdt->low_d) /* ËÏÄ ÏÔÓÞÅÔÁ ÐÏÌÏÖÅÎÉÑ ËÕÐÏÌÁ */
uint code_a, code_z, code_p, code_b, code_f, code_d;
#define code_A (sdt->code_a) /* 23Ò-× Ä×.ËÏÄÁ ÏÔÓÞÅÔÁ A */
#define code_Z (sdt->code_z) /* - "" - Z */
#define code_P (sdt->code_p) /* - "" - P */
#define code_B (sdt->code_b) /* ËÏÄ ÄÁ×ÌÅÎÉÑ */
#define code_F (sdt->code_f) /* ËÏÄ ÏÔÓÞÅÔÁ ÆÏËÕÓÁ ÔÅÌÅÓËÏÐÁ */
#define code_D (sdt->code_d) /* ËÏÄ ÏÔÓÞÅÔÁ ÐÏÌÏÖÅÎÉÑ ËÕÐÏÌÁ */
uint adc[8];
#define ADC(N) (sdt->adc[(N)]) /* ËÏÄÙ 8-ÍÉ ËÁÎÁÌÏ× áãð PCL818 */
#define code_T1 ADC(0) /* ËÏÄ ÄÁÔÞÉËÁ ÎÁÒÕÖ. ÔÅÍÐÅÒÁÔÕÒÙ*/
#define code_T2 ADC(1) /* ËÏÄ ÄÁÔÞÉËÁ ÔÅÍÐÅÒÁÔÕÒÙ ÐÏÄ ËÕÐ.*/
#define code_T3 ADC(2) /* ËÏÄ ÄÁÔÞÉËÁ ÔÅÍÐÅÒÁÔÕÒÙ ÚÅÒËÁÌÁ */
#define code_Wnd ADC(3) /* ËÏÄ ÄÁÔÞÉËÁ ×ÅÔÒÁ */
double val_a, val_z, val_p, val_b, val_f, val_d;
double val_t1, val_t2, val_t3, val_wnd;
#define val_A (sdt->val_a) /* ÏÔÓÞÅÔ A (") */
#define val_Z (sdt->val_z) /* - " - Z (") */
#define val_P (sdt->val_p) /* - " - P (") */
#define val_B (sdt->val_b) /* ÄÁ×ÌÅÎÉe (ÍÍ.ÒÔ.ÓÔ.)*/
#define val_F (sdt->val_f) /* ÆÏËÕÓ ÔÅÌÅÓËÏÐÁ (ÍÍ) */
#define val_D (sdt->val_d) /* ÐÏÌÏÖÅÎÉÅ ËÕÐÏÌÁ (") */
#define val_T1 (sdt->val_t1) /* ÎÁÒÕÖ. ÔÅÍÐÅÒÁÔÕÒÁ (ÇÒ.)*/
#define val_T2 (sdt->val_t2) /* ÔÅÍÐÅÒÁÔÕÒÁ ÐÏÄ ËÕÐ.(ÇÒ.)*/
#define val_T3 (sdt->val_t3) /* ÔÅÍÐÅÒÁÔÕÒÁ ÚÅÒËÁÌÁ (ÇÒ.)*/
#define val_Wnd (sdt->val_wnd) /* ×ÅÔÅÒ (Í/ÓÅË)*/
double val_alp, val_del;
#define val_Alp (sdt->val_alp) /* ÏÂÒÁÔÎÙÊ ÐÅÒÅÓÞÅÔ R.A. (sec) */
#define val_Del (sdt->val_del) /* -- " -- Decl. (") */
double vel_a, vel_z, vel_p, vel_f, vel_d;
#define vel_A (sdt->vel_a) /* ÓËÏÒÏÓÔØ ÐÏ A ("/ÓÅË) ÉÚÍÅÒÅÎÎÁÑ */
#define vel_Z (sdt->vel_z) /* - " - Z - " - */
#define vel_P (sdt->vel_p) /* - " - P - " - */
#define vel_F (sdt->vel_f) /* - " - F - " - */
#define vel_D (sdt->vel_d) /* - " - D - " - */
/* ÏÞÅÒÅÄØ ÐÏÓÌÅÄÎÉÈ ÓÉÓÔÅÍÎÙÈ ÓÏÏÂÝÅÎÉÊ */
#define MesgNum 3
#define MesgLen 39
//struct __attribute__((packed)) SysMesg {
struct SysMesg {
int seq_num;
char type;
#define MesgEmpty 0
#define MesgInfor 1
#define MesgWarn 2
#define MesgFault 3
#define MesgLog 4
char text[MesgLen];
} sys_msg_buf[MesgNum];
#define Sys_Mesg(N) (sdt->sys_msg_buf[N])
/* ÕÐÒÁ×ÌÅÎÉÅ ÄÏÓÔÕÐÏÍ */
/* ËÏÄÙ ÕÓÔÁÎÏ×ËÉ ÕÒÏ×ÎÅÊ ÄÏÓÔÕÐÁ ÄÌÑ ËÌÉÅÎÔÏ× */
uint code_lev1,code_lev2,code_lev3,code_lev4,code_lev5;
#define code_Lev1 (sdt->code_lev1) /* "ÕÄÁÌÅÎÎÙÊ ÎÁÂÌÀÄÁÔÅÌØ" - ÔÏÌØËÏ ÉÎÆÏÒÍÁÃÉÑ */
#define code_Lev2 (sdt->code_lev2) /* "ÍÅÓÔÎÙÊ ÎÁÂÌÀÄÁÔÅÌØ" - + ××ÏÄ ËÏÏÒÄÉÎÁÔ */
#define code_Lev3 (sdt->code_lev3) /* "ÇÌÁ×ÎÙÊ ÎÁÂÌÀÄÁÔÅÌØ" - + A/Z-ËÏÒÒ-Ñ, ÕÐÒ.P2/F */
#define code_Lev4 (sdt->code_lev4) /* "ÏÐÅÒÁÔÏÒ" - + ÐÕÓË/ÓÔÏÐ ÔÅÌÅÓË., ÔÅÓÔÉÒÏ×ÁÎÉÅ */
#define code_Lev5 (sdt->code_lev5) /* "ÇÌÁ×ÎÙÊ ÏÐÅÒÁÔÏÒ" - ×ÓÅ ÏÐÅÒÁÃÉÉ */
/* ÏÇÒÁÎÉÞÅÎÉÅ ÓÅÔÅ×ÏÇÏ ÄÏÓÔÕÐÁ */
uint netmask, netaddr, acsmask, acsaddr;
#define NetMask (sdt->netmask) /* ÍÁÓËÁ ÐÏÄÓÅÔÉ (ÏÂÙÞÎÏ: 255.255.255.0) */
#define NetWork (sdt->netaddr) /* ÁÄÒÅÓ ÐÏÄÓÅÔÉ (ÎÁÐÒÉÍÅÒ: 192.168.3.0) */
#define ACSMask (sdt->acsmask) /* ÍÁÓËÁ áóõ-ÓÅÔÉ (ÎÁÐÒÉÍÅÒ: 255.255.255.0) */
#define ACSNet (sdt->acsaddr) /* ÁÄÒÅÓ áóõ-ÓÅÔÉ (ÎÁÐÒÉÍÅÒ: 192.168.13.0) */
/* ××ÏÄ ÍÅÔÅÏ-ÄÁÎÎÙÈ */
int meteo_stat;
#define MeteoMode (sdt->meteo_stat) /* ÆÌÁÇÉ ÄÁÔÞÉËÏ× É ××ÏÄÁ ÄÁÎÎÙÈ*/
#define INPUT_B 1 /* ÄÁ×ÌÅÎÉÅ *//* ÆÌÁÇÉ ÒÕÞÎÏÇÏ ××ÏÄÁ ÍÅÔÅÏ ÄÁÎÎÙÈ */
#define INPUT_T1 2 /* T-ÎÁÒÕÖÎÁÑ */
#define INPUT_T2 4 /* T-ÐÏÄËÕÐÏÌØÎÁÑ */
#define INPUT_T3 8 /* T-ÚÅÒËÁÌÁ */
#define INPUT_WND 0x10 /* ×ÅÔÅÒ */
#define INPUT_HMD 0x20 /* ×ÌÁÖÎÏÓÔØ */
#define SENSOR_B (INPUT_B <<8) /* ÆÌÁÇÉ ×ÎÅÛÎÉÈ ÍÅÔÅÏ-ÄÁÔÞÉËÏ× (e.g.ÐÏ CAN-ÛÉÎÅ)*/
#define SENSOR_T1 (INPUT_T1 <<8)
#define SENSOR_T2 (INPUT_T2 <<8)
#define SENSOR_T3 (INPUT_T3 <<8)
#define SENSOR_WND (INPUT_WND<<8)
#define SENSOR_HMD (INPUT_HMD<<8)
#define ADC_B (INPUT_B <<16) /* ÆÌÁÇÉ ÓÞÉÔÙ×ÁÎÉÑ Ó áãð ÕÐÒ.ËÏÍÐÕÔÅÒÁ */
#define ADC_T1 (INPUT_T1 <<16)
#define ADC_T2 (INPUT_T2 <<16)
#define ADC_T3 (INPUT_T3 <<16)
#define ADC_WND (INPUT_WND<<16)
#define ADC_HMD (INPUT_HMD<<16)
#define NET_B (INPUT_B <<24) /* ÆÌÁÇÉ ÐÏÌÕÞÅÎÉÑ ÄÁÎÎÙÈ Ó ÍÅÔÅÏÓÔÁÎÃÉÉ ÐÏ ÓÅÔÉ */
#define NET_T1 (INPUT_T1 <<24)
#define NET_WND (INPUT_WND<<24)
#define NET_HMD (INPUT_HMD<<24)
double inp_b, inp_t1, inp_t2, inp_t3, inp_wnd;
#define inp_B (sdt->inp_b) /* ÄÁ×ÌÅÎÉe (ÍÍ.ÒÔ.ÓÔ.)*/
#define inp_T1 (sdt->inp_t1) /* ÎÁÒÕÖ. ÔÅÍÐÅÒÁÔÕÒÁ (ÇÒ.)*/
#define inp_T2 (sdt->inp_t2) /* ÔÅÍÐÅÒÁÔÕÒÁ ÐÏÄ ËÕÐ.(ÇÒ.)*/
#define inp_T3 (sdt->inp_t3) /* ÔÅÍÐÅÒÁÔÕÒÁ ÚÅÒËÁÌÁ (ÇÒ.)*/
#define inp_Wnd (sdt->inp_wnd) /* ×ÅÔÅÒ (Í/ÓÅË)*/
double temper, press;
#define Temper (sdt->temper) /* ÔÅÍÒÅÒÁÔÕÒÁ ÉÓÐÏÌØÚÕÅÍÁÑ ÄÌÑ ÒÅÆÒÁËÃÉÉ */
#define Pressure (sdt->press) /* ÄÁ×ÌÅÎÉÅ ÉÓÐÏÌØÚÕÅÍÏÅ ÄÌÑ ÒÅÆÒÁËÃÉÉ */
double m_time10, m_time15;
#define Wnd10_time (sdt->m_time10) /* ÍÏÍÅÎÔ ×ÒÅÍÅÎÉ ÐÏÒÙ×Á >=10Í/ÓÅË*/
#define Wnd15_time (sdt->m_time15) /* - " - - " - - " - >=15Í/ÓÅË*/
/* IERS DUT1 (ÉÓÔÏÞÎÉË: ftp://maia.usno.navy.mil/ser7/ser7.dat) */
double dut1;
#define DUT1 (sdt->dut1) /* ÐÏÐÒÁ×ËÁ ÓÒ.ÓÏÌÎÅÞÎÏÇÏ ×ÒÅÍÅÎÉ: DUT1 = UT1-UTC */
double a_time, z_time, p_time;
#define A_time (sdt->a_time) /* ÍÏÍÅÎÔ ÓÞÉÔÙ×ÁÎÉÑ ÄÁÔÞÉËÁ A */
#define Z_time (sdt->z_time) /* - " - - " - - " - Z */
#define P_time (sdt->p_time) /* - " - - " - - " - P */
double speedain, speedzin, speedpin;
#define speedAin (sdt->speedain) /* ÐÏÓÔÏÑÎÎÁÑ ÓËÏÒÏÓÔØ ÕÓÔ-Ñ ÐÏ A */
#define speedZin (sdt->speedzin) /* ÐÏÓÔÏÑÎÎÁÑ ÓËÏÒÏÓÔØ ÕÓÔ-Ñ ÐÏ Z */
#define speedPin (sdt->speedpin) /* ÐÏÓÔÏÑÎÎÁÑ ÓËÏÒÏÓÔØ ÕÓÔ-Ñ ÐÏ P2*/
double acc_a, acc_z, acc_p, acc_f, acc_d;
#define acc_A (sdt->acc_a) /* ÕÓËÏÒÅÎÉÅ ÐÏ A ("/ÓÅË^2) */
#define acc_Z (sdt->acc_z) /* - " - Z - " - */
#define acc_P (sdt->acc_p) /* - " - P - " - */
#define acc_F (sdt->acc_f) /* - " - F - " - */
#define acc_D (sdt->acc_d) /* - " - D - " - */
uint code_sew;
#define code_SEW (sdt->code_sew) /* ËÏÄ ÓÐÅÃ.ÄÏÓÔÕÐÁ Ë SEW-ËÏÎÔÒÏÌÌÅÒÁÍ */
/* ÐÁÒÁÍÅÔÒÙ SEW-ËÏÎÔÒÏÌÌÅÒÏ× */
//struct __attribute__((packed)) SEWdata {
struct SEWdata {
int status;
double set_speed;
double mes_speed;
double current;
int index;
union {
unsigned char b[4];
__uint32_t l;
} value;
} sewdrv[3];
#define statusSEW(Drv) (sdt->sewdrv[(Drv)-1].status) /*ÓÏÓÔÏÑÎÉÅ ËÏÎÔÒÏÌÌÅÒÁ*/
#define statusSEW1 (sdt->sewdrv[0].status)
#define statusSEW2 (sdt->sewdrv[1].status)
#define statusSEW3 (sdt->sewdrv[2].status)
#define speedSEW(Drv) (sdt->sewdrv[(Drv)-1].set_speed) /*ÕÓÔÁÎÏ×ÌÅÎÎÁÑ ÓËÏÒÏÓÔØ*/
#define speedSEW1 (sdt->sewdrv[0].set_speed) /* ÏÂ/ÍÉÎ (rpm)*/
#define speedSEW2 (sdt->sewdrv[1].set_speed)
#define speedSEW3 (sdt->sewdrv[2].set_speed)
#define vel_SEW(Drv) (sdt->sewdrv[(Drv)-1].mes_speed) /*ÉÚÍÅÒÅÎÎÁÑ ÓËÏÒÏÓÔØ */
#define vel_SEW1 (sdt->sewdrv[0].mes_speed) /* ÏÂ/ÍÉÎ (rpm)*/
#define vel_SEW2 (sdt->sewdrv[1].mes_speed)
#define vel_SEW3 (sdt->sewdrv[2].mes_speed)
#define currentSEW(Drv) (sdt->sewdrv[(Drv)-1].current) /*ÔÏË (á)*/
#define currentSEW1 (sdt->sewdrv[0].current)
#define currentSEW2 (sdt->sewdrv[1].current)
#define currentSEW3 (sdt->sewdrv[2].current)
#define indexSEW(Drv) (sdt->sewdrv[(Drv)-1].index) /*ÎÏÍÅÒ ÐÁÒÁÍÅÔÒÁ*/
#define indexSEW1 (sdt->sewdrv[0].index)
#define indexSEW2 (sdt->sewdrv[1].index)
#define indexSEW3 (sdt->sewdrv[2].index)
#define valueSEW(Drv) (sdt->sewdrv[(Drv)-1].value.l) /*ËÏÄ ÚÎÁÞÅÎÉÑ ÐÁÒÁÍÅÔÒÁ*/
#define valueSEW1 (sdt->sewdrv[0].value.l)
#define valueSEW2 (sdt->sewdrv[1].value.l)
#define valueSEW3 (sdt->sewdrv[2].value.l)
#define bvalSEW(Drv,Nb) (sdt->sewdrv[(Drv)-1].value.b[Nb]) /*ÂÁÊÔ ËÏÄÁ ÚÎÁÞÅÎÉÑ ÐÁÒÁÍÅÔÒÁ*/
/* ÉÎÆÏÒÍÁÃÉÑ ÏÔ PEP-ËÏÎÔÒÏÌÌÅÒÏ× */
uint pep_code_a, pep_code_z, pep_code_p;
#define PEP_code_A (sdt->pep_code_a) /* 23Ò-× Ä×.ËÏÄÁ ÏÔÓÞÅÔÁ A */
#define PEP_code_Z (sdt->pep_code_z) /* - "" - Z */
#define PEP_code_P (sdt->pep_code_p) /* - "" - P */
uint pep_sw_a, pep_sw_z, pep_sw_p;
#define switch_A (sdt->pep_sw_a) /* ËÏÄ ËÏÎÃÅ×ÉËÏ× ÁÚÉÍÕÔÁ */
#define Sw_minus_A 1 /* ÁÚÉÍÕÔ ÏÔÒÉÃÁÔÅÌØÎÙÊ (ÓÍ. code_KOST&0x8000)*/
#define Sw_plus240_A 2 /* ËÏÎÃÅ×ÉË "+240ÇÒÁÄ" */
#define Sw_minus240_A 4 /* ËÏÎÃÅ×ÉË "-240ÇÒÁÄ" */
#define Sw_minus45_A 8 /* ÐÏÌÏÖÅÎÉÅ "× ÇÏÒÉÚÏÎÔ" (~-46ÇÒÁÄ)*/
#define switch_Z (sdt->pep_sw_z) /* ËÏÄ ËÏÎÃÅ×ÉËÏ× Z */
#define Sw_0_Z 0x01 /* ËÏÎÃÅ×ÉË "0ÇÒÁÄ" */
#define Sw_5_Z 0x02 /* ËÏÎÃÅ×ÉË "5ÇÒÁÄ" */
#define Sw_20_Z 0x04 /* ËÏÎÃÅ×ÉË "20ÇÒÁÄ" */
#define Sw_60_Z 0x08 /* ËÏÎÃÅ×ÉË "60ÇÒÁÄ" */
#define Sw_80_Z 0x10 /* ËÏÎÃÅ×ÉË "80ÇÒÁÄ" */
#define Sw_90_Z 0x20 /* ËÏÎÃÅ×ÉË "90ÇÒÁÄ" */
#define switch_P (sdt->pep_sw_p) /* - "" - óðæ */
#define Sw_No_P 0x00 /* "îÅÔ ËÏÎÃÅ×ÉËÏ×" */
#define Sw_22_P 0x01 /* ËÏÎÃÅ×ÉË "22ÇÒÁÄ" */
#define Sw_89_P 0x02 /* ËÏÎÃÅ×ÉË "89ÇÒÁÄ" */
#define Sw_Sm_P 0x80 /* ÄÁÔÞÉË ÄÙÍÁ óðæ */
uint pep_code_f, pep_code_d, pep_code_ri, pep_code_ro;
#define PEP_code_F (sdt->pep_code_f) /* ËÏÄ ÏÔÓÞÅÔÁ ÆÏËÕÓÁ ÔÅÌÅÓËÏÐÁ */
#define PEP_code_D (sdt->pep_code_d) /* ËÏÄ ÏÔÓÞÅÔÁ ÐÏÌÏÖÅÎÉÑ ËÕÐÏÌÁ */
#define PEP_code_Rin (sdt->pep_code_ri)/* ËÏÄ ÐÒÉÎÑÔÙÊ ÉÚ òë */
#define PEP_code_Rout (sdt->pep_code_ro)/* ËÏÄ ×ÙÄÁ×ÁÅÍÙÊ × òë */
unsigned char pep_on[10]; /* ÆÌÁÇÉ ÒÁÂÏÔÙ PEP-ËÏÎÔÒÏÌÌÅÒÏ× */
#define PEP_A_On (sdt->pep_on[0])
#define PEP_A_Off (PEP_A_On==0)
#define PEP_Z_On (sdt->pep_on[1])
#define PEP_Z_Off (PEP_Z_On==0)
#define PEP_P_On (sdt->pep_on[2])
#define PEP_P_Off (PEP_P_On==0)
#define PEP_F_On (sdt->pep_on[3])
#define PEP_F_Off (PEP_F_On==0)
#define PEP_D_On (sdt->pep_on[4])
#define PEP_D_Off (PEP_D_On==0)
#define PEP_R_On (sdt->pep_on[5])
#define PEP_R_Off ((PEP_R_On&1)==0)
#define PEP_R_Inp ((PEP_R_On&2)!=0)
#define PEP_K_On (sdt->pep_on[6])
#define PEP_K_Off ((PEP_K_On&1)==0)
#define PEP_K_Inp ((PEP_K_On&2)!=0)
/* IERS polar motion (ÉÓÔÏÞÎÉË: ftp://maia.usno.navy.mil/ser7/ser7.dat) */
double xpol, ypol;
#define polarX (sdt->xpol) /* X-ÐÏÐÒÁ×Ëa ÐÏÌÏÖ.ÐÏÌÀÓÁ */
#define polarY (sdt->ypol) /* Y-ÐÏÐÒÁ×Ëa ÐÏÌÏÖ.ÐÏÌÀÓÁ */
double jdate, eetime;
#define JDate (sdt->jdate) /* ÔÅËÕÝÁÑ ÀÌÉÁÎÓËÁÑ ÄÁÔÁ */
#define EE_time (sdt->eetime) /* ÐÏÐÒÁ×.Ú×.×Ò. ÚÁ "Equation of the Equinoxes" */
/* ÅÝÅ ××ÏÄ ÍÅÔÅÏ-ÄÁÎÎÙÈ */
double val_hmd, inp_hmd;
#define val_Hmd (sdt->val_hmd) /* ÚÎÁÞÅÎÉÅ ×ÌÁÖÎÏÓÔÉ (%) */
#define inp_Hmd (sdt->val_hmd) /* ÒÕÞÎÏÊ ××ÏÄ */
/* ÐÏÌÏÖÅÎÉÅ ÞÅÒ×ÑËÁ (ÐÏÄ×ÅÓËÁ) */
double worm_a, worm_z;
#define worm_A (sdt->worm_a) /* ÐÏÌÏÖÅÎÉÅ ÐÏÄ×ÅÓËÉ A (ÍËÍ) */
#define worm_Z (sdt->worm_z) /* ÐÏÌÏÖÅÎÉÅ ÐÏÄ×ÅÓËÉ Z (ÍËÍ) */
/* ÆÌÁÇÉ ÂÌÏËÉÒÏ×ËÉ ÕÐÒÁ×ÌÅÎÉÑ ÕÚÌÁÍÉ */
__uint32_t lock_flags;
#define LockFlags (sdt->lock_flags)
#define Lock_A 0x01
#define Lock_Z 0x02
#define Lock_P 0x04
#define Lock_F 0x08
#define Lock_D 0x10
#define A_Locked (LockFlags&Lock_A)
#define Z_Locked (LockFlags&Lock_Z)
#define P_Locked (LockFlags&Lock_P)
#define F_Locked (LockFlags&Lock_F)
#define D_Locked (LockFlags&Lock_D)
/* ÔÒÅÂÕÅÍÁÑ ÓËÏÒÏÓÔØ ÐÒÉ×ÏÄÁ ËÕÐÏÌÁ (ÄÌÑ ÕÐÒ-Ñ SEW-ÐÒÉ×ÏÄÁÍÉ)*/
int sew_dome_speed; /* ÐÏËÁ ÔÏÖÅ ÞÔÏ É Dome_State */
#define Dome_Speed (sdt->sew_dome_speed) /* Ô.Å. D_Lplus,D_Lminus,.... */
/* ÎÏÍÅÒ SEW-Ä×ÉÖËÁ ËÕÐÏÌÁ (ÄÌÑ ÉÎÄÉËÁÃÉÉ)*/
int sew_dome_num;
#define DomeSEW_N (sdt->sew_dome_num)
/* ÐÁÒÁÍÅÔÒÙ ×ÙÂÒÁÎÎÏÇÏ(DomeSEW_N) SEW-ËÏÎÔÒÏÌÌÅÒÁ ËÕÐÏÌÁ*/
struct SEWdata sewdomedrv;
#define statusSEWD (sdt->sewdomedrv.status) /*ÓÏÓÔÏÑÎÉÅ ËÏÎÔÒÏÌÌÅÒÁ*/
#define speedSEWD (sdt->sewdomedrv.set_speed) /*ÕÓÔÁÎÏ×ÌÅÎÎÁÑ ÓËÏÒÏÓÔØ ÏÂ/ÍÉÎ (rpm)*/
#define vel_SEWD (sdt->sewdomedrv.mes_speed) /*ÉÚÍÅÒÅÎÎÁÑ ÓËÏÒÏÓÔØ ÏÂ/ÍÉÎ (rpm)*/
#define currentSEWD (sdt->sewdomedrv.current) /*ÔÏË (á)*/
#define indexSEWD (sdt->sewdomedrv.index) /*ÎÏÍÅÒ ÐÁÒÁÍÅÔÒÁ*/
#define valueSEWD (sdt->sewdomedrv.value.l) /*ËÏÄ ÚÎÁÞÅÎÉÑ ÐÁÒÁÍÅÔÒÁ*/
/* ÉÎÆÏÒÍÁÃÉÑ PEP-ËÏÎÔÒÏÌÌÅÒÁ ËÕÐÏÌÁ */
uint pep_code_di, pep_code_do;
#define PEP_code_Din (sdt->pep_code_di) /* ËÏÄ ÐÒÉÎÑÔÙÊ ÉÚ PEP-ËÕÐÏÌÁ */
#define PEP_Dome_SEW_Ok 0x200
#define PEP_Dome_Cable_Ok 0x100
#define PEP_code_Dout (sdt->pep_code_do) /* ËÏÄ ×ÙÄÁ×ÁÅÍÙÊ × PEP-ËÕÐÏÌÁ */
#define PEP_Dome_SEW_On 0x10
#define PEP_Dome_SEW_Off 0x20
};
#ifndef BTA_MODULE
struct BTA_Data *sdt;
#else
extern struct BTA_Data *sdt;
#endif
struct BTA_Local { /* ÓÔÒÕËÔÕÒÁ ÌÏËÁÌØÎÙÈ ÄÁÎÎÙÈ */
unsigned char reserve[120]; /* Ó×ÏÂÏÄÎÏÅ ÍÅÓÔÏ ÄÌÑ ÒÁÓÛÉÒÅÎÉÑ ÇÌÏÂÁÌØÎÏÊ ÏÂÌÁÓÔÉ */
/* (ÎÁ ÇÌÏÂÁÌØÎÕÀ ÏÂÌÁÓÔØ ÒÅÚÅÒ×ÉÒÕÅÍ 1500 ÂÁÊÔ) */
double pr_oil_a,pr_oil_z,pr_oil_t;
#define PressOilA (sdtl->pr_oil_a) /* äÁ×ÌÅÎÉÅ × ÍÁÓÌÏÐÒÏ×ÏÄÅ A (íðÁ) */
#define PressOilZ (sdtl->pr_oil_z) /* äÁ×ÌÅÎÉÅ × ÍÁÓÌÏÐÒÏ×ÏÄÅ Z (íðÁ) */
#define PressOilTank (sdtl->pr_oil_t) /* äÁÔÞÉË ÕÒÏ×ÎÑ ÍÁÓÌÁ × ÂÁËÅ(ëðÁ) */
double t_oil_1,t_oil_2;
#define OilTemper1 (sdtl->t_oil_1) /* ôÅÍÐÅÒÁÔÕÒÁ ÍÁÓÌÁ */
#define OilTemper2 (sdtl->t_oil_2) /* ôÅÍÐÅÒÁÔÕÒÁ ÏÈÌÁÖÄÁÀÝÅÊ ×ÏÄÙ */
};
#ifndef BTA_MODULE
struct BTA_Local *sdtl; /* ËÏÎÅÃ ÇÌÏÂÁÌØÎÙÈ, ÎÁÞÁÌÏ ÌÏËÁÌØÎÙÈ ÄÁÎÎÙÈ */
#else
extern struct BTA_Local *sdtl;
#endif
#define ClientSide 0
#define ServerSide 1
#ifndef BTA_MODULE
static void bta_data_init();
static int bta_data_check();
static void bta_data_close();
/* ÏÐÉÓÁÎÉÅ ÂÌÏËÁ ÄÁÎÎÙÈ ÁÌÇÏÒÉÔÍÁ ÕÐÒÁ×ÌÅÎÉÑ ("ÇÌÏÂÁÌØÎÁÑ ÏÂÌÁÓÔØ") */
struct SHM_Block sdat = {
{'S','d','a','t',0},sizeof(struct BTA_Data),2048,0444,SHM_RDONLY,bta_data_init,bta_data_check,bta_data_close,0,-1,NULL
};
#else
extern struct SHM_Block sdat;
#endif
#ifndef BTA_MODULE
/* ÉÎÉÃÉÁÌÉÚÁÃÉÑ ÄÁÎÎÙÈ ÁÌÇÏÒÉÔÍÁ ÕÐÒÁ×ÌÅÎÉÑ (ÏÂÎÕÌÅÎÉÅ "ÇÌÏÂÁÌØÎÏÊ ÏÂÌÁÓÔÉ") */
static void bta_data_init() {
int i;
sdt = (struct BTA_Data *)sdat.addr;
sdtl = (struct BTA_Local *)(sdat.addr+sizeof(struct BTA_Data));
if(sdat.side == ClientSide) {
if(sdt->magic != sdat.key.code) {
fprintf(stderr,"Wrong shared data (maybe server turned off)\n");
/*exit(1);*/
}
if(sdt->version == 0) {
fprintf(stderr,"Null shared data version (maybe server turned off)\n");
/*exit(1);*/
}
else if(sdt->version != BTA_Data_Ver) {
fprintf(stderr,"Wrong shared data version: I'am - %d, but server - %d ...\n",
BTA_Data_Ver, sdt->version );
/*exit(1);*/
}
if(sdt->size != sdat.size) {
if(sdt->size > sdat.size) {
/* ÎÏ ËÌÉÅÎÔ ÉÍÅÅÔ ÐÒÁ×Ï ÉÓÐÏÌØÚÏ×ÁÔØ ÎÁÞÁÌØÎÕÀ ÞÁÓÔØ ÄÁÎÎÙÈ */
fprintf(stderr,"Wrong shared area size: I needs - %d, but server - %d ...\n",
sdat.size, sdt->size );
} else {
/* "ÚÁÌÅÚÁÎÉÅ" × ÐÕÓÔÕÀ ÒÅÚÅÒ×ÎÕÀ ÞÁÓÔØ ÔÅÐÅÒØ ÔÏÖÅ */
/* ÂÕÄÅÍ ÏÓÔÁ×ÌÑÔØ ÎÁ ÓÏ×ÅÓÔÉ Á×ÔÏÒÁ ËÌÉÅÎÔÁ! */
fprintf(stderr,"Attention! Too little shared data structure!\n");
sleep(1);
fprintf(stderr,"I needs - %d, but server gives only %d ...\n",
sdat.size, sdt->size );
sleep(1);
fprintf(stderr,"May be server's version too old!?\n");
/* exit(1); */
}
}
return;
}
/* ServerSide */
if(sdt->magic != sdat.key.code ||
sdt->version != BTA_Data_Ver ||
sdt->size != sdat.size) {
for(i=0; i<sdat.maxsize; i++) sdat.addr[i]=0;
sdt->magic = sdat.key.code;
sdt->version = BTA_Data_Ver;
sdt->size = sdat.size;
ServPID = 0;
UseModel = NoModel;
ClockType = Ch7_15;
Sys_Mode = SysStop;
Sys_Target = TagPosition;
Tel_Focus = Prime;
Tel_Hardware = Hard_On;
Tel_Mode = Automatic;
Az_Mode = Rev_Off;
P2_State = P2_Mode = P2_Off;
Foc_State = Foc_Off;
Dome_State = D_Off;
Pos_Corr = PC_On;
TrkOk_Mode = UseDiffVel | UseDiffAZ ;
InpAlpha=InpDelta= 0.;
SrcAlpha=SrcDelta= 0.;
VelAlpha=VelDelta= 0.;
CurAlpha=CurDelta= 0.;
InpAzim=InpZdist = 0.;
Diff_A=Diff_Z=Diff_P=0.0;
pos_cor_A=pos_cor_Z=refract_Z = 0.;
tel_cor_A=tel_cor_Z=tel_ref_Z = 0.;
vel_objA=vel_objZ=vel_objP = 0.;
diff_vA=diff_vZ=diff_vP=0.;
speedA = speedZ = speedP = 0.;
req_speedA = req_speedZ = req_speedP = 0.;
mod_vel_A=mod_vel_Z=mod_vel_P=mod_vel_F=mod_vel_D=0.;
code_KOST = 0;
M_time = S_time = L_time = 0.;
ppndd_A=ppndd_Z=ppndd_P=ppndd_B=0;
dup_A=dup_Z=dup_P=dup_F=dup_D=0;
low_A=low_Z=low_P=low_F=low_D=0;
code_A=code_Z=code_P=code_B=code_F=code_D=code_T1=code_T2=code_T3=code_Wnd=0;
val_A=val_Z=val_P=val_B=val_F=val_D=val_T1=val_T2=val_T3=val_Wnd=val_Alp=val_Del=0.;
vel_A=vel_Z=vel_P=vel_F=vel_D=0.;
for(i=0; i<MesgNum; i++) {
Sys_Mesg(i).seq_num = 0;
Sys_Mesg(i).type = MesgEmpty;
Sys_Mesg(i).text[0] = '\0';
}
code_Lev1=code_Lev2=code_Lev3=code_Lev4=code_Lev5=0;
NetMask=NetWork=ACSMask=ACSNet=0;
MeteoMode = 0;
inp_B = 591.;
inp_T1 = inp_T2 = inp_T3 = inp_Wnd = 0.0;
Temper = 0.0;
Pressure = 595.;
Wnd10_time = Wnd15_time = Precip_time = 0.0;
DUT1 = 0.0;
A_time = P_time = Z_time = 0.0;
speedAin = speedZin = speedZin = 0.0;
acc_A = acc_Z = acc_P = 0.0;
for(i=1; i<4; i++) {
statusSEW(i) = 0;
speedSEW(i) = 0.0;
vel_SEW(i) = 0.0;
currentSEW(i) = 0.0;
indexSEW(i) = 0;
valueSEW(i) = 0;
}
PEP_code_A = 0x002aaa;
PEP_code_Z = 0x002aaa;
PEP_code_P = 0x002aaa;
PEP_code_F = 0x002aaa;
PEP_code_D = 0x002aaa;
PEP_code_Rin = 0x0;
PEP_code_Rout = 0x0;
switch_A = switch_Z = switch_P = 0;
PEP_A_On = PEP_Z_On = PEP_P_On = PEP_F_On = PEP_D_On = PEP_R_On = PEP_K_On = 0;
polarX = polarY = 0;
JDate=0.;
EE_time = 0.0;
worm_A = worm_Z = 0.0;
val_Hmd = inp_Hmd = 0.0;
LockFlags = 0;
Dome_Speed = D_Off;
DomeSEW_N=1;
statusSEWD = 0;
speedSEWD = 0.0;
vel_SEWD = 0.0;
currentSEWD = 0.0;
indexSEWD = 0;
valueSEWD = 0;
PEP_code_Din = 0x0;
PEP_code_Dout = 0x0;
PressOilA = PressOilZ = PressOilTank = 0.0;
OilTemper1 = OilTemper2 = 0.0;
}
}
static int bta_data_check() {
return( (sdt->magic == sdat.key.code) && (sdt->version == BTA_Data_Ver) );
}
static void bta_data_close() {
if(sdat.side == ServerSide) {
sdt->magic = 0;
sdt->version = 0;
}
}
/* ÂÌÏË ÉÎÆÏÒÍÁÃÉÏÎÎÙÈ ÓÏÏÂÝÅÎÉÊ ??? */
/*struct SHM_Block info = {{'I','n','f','o',0},1024,1024,0444,SHM_RDONLY,NULL,NULL,NULL,0,-1,NULL};*/
/* Allocate shared memory segment */
static int get_shm_block( struct SHM_Block *sb, int server) {
int getsize = (server)? sb->maxsize : sb->size;
/* first try to find existing one */
sb->id = shmget(sb->key.code, getsize, sb->mode);
if (sb->id<0 && errno==ENOENT && server) {
/* if no - try to create a new one */
int cresize = sb->maxsize;
if(sb->size > cresize) {
fprintf(stderr,"Wrong shm maxsize(%d) < realsize(%d)\n",sb->maxsize,sb->size);
cresize = sb->size;
}
sb->id = shmget(sb->key.code, cresize, IPC_CREAT|IPC_EXCL|sb->mode);
}
if (sb->id<0) {
char msg[80];
if(server)
sprintf(msg,"Can't create shared memory segment '%s'",sb->key.name);
else
sprintf(msg,"Can't find shared segment '%s' (maybe no server process) ",sb->key.name);
perror(msg);
return 0;
}
/* attach it to our memory space */
sb->addr = (unsigned char *)shmat ( sb->id, NULL, sb->atflag );
if ((int)(sb->addr) == -1) {
char msg[80];
sprintf(msg,"Can't attach shared memory segment '%s'",sb->key.name);
perror(msg);
return 0;
}
if(server) {
if((shmctl(sb->id, SHM_LOCK, NULL) < 0) < 0) {
char msg[80];
sprintf(msg,"Can't prevents swapping of shared memory segment '%s'",sb->key.name);
perror(msg);
return 0;
}
}
fprintf(stderr,"Create&attach shared memory segment '%s' %dbytes at %x \n",
sb->key.name, sb->size, (uint)sb->addr);
sb->side = server;
if(sb->init!=NULL)
sb->init();
return 1;
}
static int close_shm_block( struct SHM_Block *sb) {
int ret;
if(sb->close != NULL)
sb->close();
if(sb->side == ServerSide) {
// ret = shmctl(sb->id, SHM_UNLOCK, NULL);
ret = shmctl(sb->id, IPC_RMID, NULL);
}
ret = shmdt (sb->addr);
return(ret);
}
#endif
static int check_shm_block( struct SHM_Block *sb) {
if(sb->check != NULL)
return(sb->check());
else return(0);
}
#ifndef BTA_MODULE
int snd_id=-1; /* ÔÅËÕÝÉÊ (É ÅÄÉÎÓÔ×ÅÎÎÙÊ?) ËÁÎÁÌ ÏÔÓÙÌËÉ ËÏÍÁÎÄ ËÌÉÅÎÔÁ */
int cmd_src_pid=0; /* ÎÏÍÅÒ ÐÒÏÃÅÓÓÁ ÉÓÔÏÞÎÉËÁ ÄÌÑ ïäîïê ÓÌÅÄ.ËÏÍÁÎÄÙ */
__uint32_t cmd_src_ip=0; /* IP-ÁÄÒ. ÉÓÔÏÞÎÉËÁ ÄÌÑ ïäîïê ÓÌÅÄ.ËÏÍÁÎÄÙ */
#else
extern int snd_id;
extern int cmd_src_pid;
extern __uint32_t cmd_src_ip;
#endif
#ifndef BTA_MODULE
/* Create|Find command queue */
static void get_cmd_queue( struct CMD_Queue *cq, int server) {
if (!server && cq->id>=0) { /* if already in use */
snd_id = cq->id; /* set current... */
return;
}
/* first try to find existing one */
cq->id = msgget(cq->key.code, cq->mode);
if (cq->id<0 && errno==ENOENT && server)
/* if no - try to create a new one */
cq->id = msgget(cq->key.code, IPC_CREAT|IPC_EXCL|cq->mode);
if (cq->id<0) {
char msg[80];
if(server)
sprintf(msg,"Can't create comand queue '%s'",cq->key.name);
else
sprintf(msg,"Can't find comand queue '%s' (maybe no server process) ",cq->key.name);
perror(msg);
return;
}
cq->side = server;
if (server) {
char buf[120]; /* ×ÙÂÒÏÓÉÔØ ×ÓÅ ËÏÍÁÎÄÙ ÉÚ ÏÞÅÒÅÄÉ */
while(msgrcv(cq->id, (struct msgbuf *)buf, 112, 0, IPC_NOWAIT)>0);
} else
snd_id = cq->id;
cq->acckey = 0;
}
#endif
/* ÕÓÔÁÎÏ×ËÁ ËÌÀÞÁ ÄÏÓÔÕÐÁ × ÔÅË. ËÁÎÁÌÅ */
static void set_acckey(uint newkey) {
if (snd_id<0) return;
if(ucmd.id==snd_id) ucmd.acckey=newkey;
else if(ocmd.id==snd_id) ocmd.acckey=newkey;
else if(mcmd.id==snd_id) mcmd.acckey=newkey;
}
/* ÕÓÔÁÎÏ×ËÁ ÄÁÎÎÙÈ ÉÓÔÏÞÎÉËÁ ÄÌÑ ïäîïê ÓÌÅÄ.ËÏÍÁÎÄÙ */
/* ÅÓÌÉ ÎÅ ÐÏÄÈÏÄÑÔ ÕÍÏÌÞÁÎÉÑ: IP=0(ÌÏËÁÌØÎÁÑ ËÏÍÁÎÄÁ) É PID ÔÅËÕÝ.ÐÒÏÃÅÓÓÁ */
static void set_cmd_src(__uint32_t ip, int pid) {
cmd_src_pid = pid;
cmd_src_ip = ip;
}
/* ÓÔÒÕËÔÕÒÁ ÓÏÏÂÝÅÎÉÑ */
struct my_msgbuf {
__int32_t mtype; /* type of message */
__uint32_t acckey; /* ËÌÀÞ ÄÏÓÔÕÐÁ ËÌÉÅÎÔÁ */
__uint32_t src_pid; /* ÎÏÍÅÒ ÐÒÏÃÅÓÓÁ ÉÓÔÏÞÎÉËÁ */
__uint32_t src_ip; /* IP-ÁÄÒ. ÉÓÔÏÞÎÉËÁ, =0 - ÌÏËÁÌØÎÁÑ ËÏÍÁÎÄÁ */
char mtext[100]; /* message text */
};
/* ÏÔÓÙÌËÁ ËÏÍÁÎÄ ËÌÉÅÎÔÁ Ë ÓÅÒ×ÅÒÕ */
static void send_cmd(int cmd_code, char *buf, int size) {
struct my_msgbuf mbuf;
if (snd_id<0) return;
if (size>100) size=100;
if (cmd_code>0)
mbuf.mtype = cmd_code;
else
return;
if(ucmd.id==snd_id) mbuf.acckey=ucmd.acckey;
else if(ocmd.id==snd_id) mbuf.acckey=ocmd.acckey;
else if(mcmd.id==snd_id) mbuf.acckey=mcmd.acckey;
mbuf.src_pid = cmd_src_pid? cmd_src_pid : getpid();
mbuf.src_ip = cmd_src_ip;
cmd_src_pid = cmd_src_ip = 0;
if(size>0)
memcpy( mbuf.mtext, buf, size);
else {
mbuf.mtext[0] = 0;
size = 1;
}
msgsnd( snd_id, (struct msgbuf *)&mbuf, size+12, IPC_NOWAIT);
}
static void send_cmd_noarg(int cmd_code) {
send_cmd(cmd_code, NULL, 0);
}
static void send_cmd_str(int cmd_code, char *arg) {
send_cmd(cmd_code, arg, strlen(arg)+1);
}
static void send_cmd_i1(int cmd_code, int arg1) {
send_cmd(cmd_code, (char *)&arg1, sizeof(int));
}
static void send_cmd_i2(int cmd_code, int arg1, int arg2) {
int ibuf[2];
ibuf[0] = arg1;
ibuf[1] = arg2;
send_cmd(cmd_code, (char *)ibuf, 2*sizeof(int));
}
static void send_cmd_i3(int cmd_code, int arg1, int arg2, int arg3) {
int ibuf[3];
ibuf[0] = arg1;
ibuf[1] = arg2;
ibuf[2] = arg3;
send_cmd(cmd_code, (char *)ibuf, 3*sizeof(int));
}
static void send_cmd_i4(int cmd_code, int arg1, int arg2, int arg3, int arg4) {
int ibuf[4];
ibuf[0] = arg1;
ibuf[1] = arg2;
ibuf[2] = arg3;
ibuf[3] = arg4;
send_cmd(cmd_code, (char *)ibuf, 4*sizeof(int));
}
static void send_cmd_d1(int cmd_code, double arg1) {
send_cmd(cmd_code, (char *)&arg1, sizeof(double));
}
static void send_cmd_d2(int cmd_code, double arg1, double arg2) {
double dbuf[2];
dbuf[0] = arg1;
dbuf[1] = arg2;
send_cmd(cmd_code, (char *)dbuf, 2*sizeof(double));
}
static void send_cmd_i1d1(int cmd_code, int arg1, double arg2) {
struct {
int ival;
double dval;
} buf;
buf.ival = arg1;
buf.dval = arg2;
send_cmd(cmd_code, (char *)&buf, sizeof(buf));
}
static void send_cmd_i2d1(int cmd_code, int arg1, int arg2, double arg3) {
struct {
int ival[2];
double dval;
} buf;
buf.ival[0] = arg1;
buf.ival[1] = arg2;
buf.dval = arg3;
send_cmd(cmd_code, (char *)&buf, sizeof(buf));
}
static void send_cmd_i3d1(int cmd_code, int arg1, int arg2, int arg3, double arg4) {
struct {
int ival[3];
double dval;
} buf;
buf.ival[0] = arg1;
buf.ival[1] = arg2;
buf.ival[2] = arg3;
buf.dval = arg4;
send_cmd(cmd_code, (char *)&buf, sizeof(buf));
}
static void encode_lev_passwd(char *passwd, int nlev, uint *keylev, uint *codlev) {
char salt[4];
char *encr;
union {
uint ui;
char c[4];
} key,cod;
sprintf(salt,"L%1d",nlev);
encr = (char *)crypt(passwd, salt);
cod.c[0] = encr[2];
key.c[0] = encr[3];
cod.c[1] = encr[4];
key.c[1] = encr[5];
cod.c[2] = encr[6];
key.c[2] = encr[7];
cod.c[3] = encr[8];
key.c[3] = encr[9];
*keylev = key.ui;
*codlev = cod.ui;
}
static int find_lev_passwd(char *passwd, uint *keylev, uint *codlev) {
int nlev;
for(nlev=5; nlev>0; nlev--) {
encode_lev_passwd(passwd, nlev, keylev, codlev);
if(nlev == 1 && code_Lev1 == *codlev) break;
if(nlev == 2 && code_Lev2 == *codlev) break;
if(nlev == 3 && code_Lev3 == *codlev) break;
if(nlev == 4 && code_Lev4 == *codlev) break;
if(nlev == 5 && code_Lev5 == *codlev) break;
}
return(nlev);
}
static int check_lev_passwd(char *passwd) {
uint keylev,codlev;
int nlev;
nlev = find_lev_passwd(passwd, &keylev, &codlev);
if(nlev>0) set_acckey(keylev);
return(nlev);
}
#pragma GCC diagnostic pop
#endif // __BTA_SHDATA_H__