mirror of
https://github.com/eddyem/CCD_Capture.git
synced 2025-12-06 10:45:13 +03:00
fixed some another bugs, but still have a lot
This commit is contained in:
parent
38dee72b04
commit
d3d1f33eac
104
client.c
104
client.c
@ -32,8 +32,10 @@
|
|||||||
#include "socket.h"
|
#include "socket.h"
|
||||||
|
|
||||||
static char sendbuf[BUFSIZ];
|
static char sendbuf[BUFSIZ];
|
||||||
// send any message and wait any answer
|
// send message and wait any answer
|
||||||
#define SENDMSG(...) do{snprintf(sendbuf, BUFSIZ-1, __VA_ARGS__); verbose(2, "\t> %s", sendbuf); sendstrmessage(sock, sendbuf); getans(sock, NULL);}while(0)
|
#define SENDMSG(...) do{snprintf(sendbuf, BUFSIZ-1, __VA_ARGS__); verbose(2, "\t> %s", sendbuf); sendstrmessage(sock, sendbuf); getans(sock, NULL);}while(0)
|
||||||
|
// send message and wait answer starting with 'cmd'
|
||||||
|
#define SENDMSGW(cmd, ...) do{snprintf(sendbuf, BUFSIZ-1, cmd __VA_ARGS__); verbose(2, "\t> %s", sendbuf); sendstrmessage(sock, sendbuf); getans(sock, cmd);}while(0)
|
||||||
// send command and wait for answer on it
|
// send command and wait for answer on it
|
||||||
#define SENDCMDW(cmd) do{strncpy(sendbuf, cmd, BUFSIZ-1); verbose(2, "\t> %s", sendbuf); sendstrmessage(sock, sendbuf); getans(sock, cmd);}while(0)
|
#define SENDCMDW(cmd) do{strncpy(sendbuf, cmd, BUFSIZ-1); verbose(2, "\t> %s", sendbuf); sendstrmessage(sock, sendbuf); getans(sock, cmd);}while(0)
|
||||||
static volatile atomic_int expstate = CAMERA_CAPTURE;
|
static volatile atomic_int expstate = CAMERA_CAPTURE;
|
||||||
@ -143,59 +145,63 @@ static void send_headers(int sock){
|
|||||||
if(GP->listdevices) SENDMSG(CMD_FOCLIST);
|
if(GP->listdevices) SENDMSG(CMD_FOCLIST);
|
||||||
if(GP->focdevno > -1) SENDMSG(CMD_FDEVNO "=%d", GP->focdevno);
|
if(GP->focdevno > -1) SENDMSG(CMD_FDEVNO "=%d", GP->focdevno);
|
||||||
if(!isnan(GP->gotopos)){
|
if(!isnan(GP->gotopos)){
|
||||||
SENDMSG(CMD_FGOTO "=%g", GP->gotopos);
|
SENDMSGW(CMD_FGOTO, "=%g", GP->gotopos);
|
||||||
}
|
}
|
||||||
// wheel
|
// wheel
|
||||||
if(GP->listdevices) SENDMSG(CMD_WLIST);
|
if(GP->listdevices) SENDCMDW(CMD_WLIST);
|
||||||
if(GP->whldevno > -1) SENDMSG(CMD_WDEVNO "=%d", GP->whldevno);
|
if(GP->whldevno > -1) SENDMSGW(CMD_WDEVNO, "=%d", GP->whldevno);
|
||||||
if(GP->setwheel > -1) SENDMSG(CMD_WPOS "=%d", GP->setwheel);
|
if(GP->setwheel > -1) SENDMSGW(CMD_WPOS, "=%d", GP->setwheel);
|
||||||
DBG("nxt");
|
DBG("nxt");
|
||||||
// CCD/CMOS
|
// CCD/CMOS
|
||||||
if(GP->X0 > -1 || GP->Y0 > -1 || GP->X1 > -1 || GP->Y1 > -1){ // set format
|
if(GP->X0 > INT_MIN || GP->Y0 > INT_MIN || GP->X1 > INT_MIN || GP->Y1 > INT_MIN){ // set format
|
||||||
SENDMSG(CMD_FRAMEMAX);
|
SENDCMDW(CMD_FRAMEMAX);
|
||||||
SENDMSG(CMD_FRAMEFORMAT);
|
SENDCMDW(CMD_FRAMEFORMAT);
|
||||||
if(GP->X0 < 0) GP->X0 = xc0; // default values
|
// default values
|
||||||
|
if(GP->X0 == INT_MIN) GP->X0 = xc0;
|
||||||
|
if(GP->X1 == INT_MIN) GP->X1 = xc1;
|
||||||
|
if(GP->Y0 == INT_MIN) GP->Y0 = yc0;
|
||||||
|
if(GP->Y1 == INT_MIN) GP->Y1 = yc1;
|
||||||
|
// limiting values
|
||||||
|
if(GP->X0 < 0) GP->X0 = xm0;
|
||||||
else if(GP->X0 > xm1-1) GP->X0 = xm1-1;
|
else if(GP->X0 > xm1-1) GP->X0 = xm1-1;
|
||||||
if(GP->Y0 < 0) GP->Y0 = yc0;
|
if(GP->Y0 < 0) GP->Y0 = ym0;
|
||||||
else if(GP->Y0 > ym1-1) GP->Y0 = ym1-1;
|
else if(GP->Y0 > ym1-1) GP->Y0 = ym1-1;
|
||||||
if(GP->X1 < GP->X0+1) GP->X1 = xc1;
|
if(GP->X1 < GP->X0+1 || GP->X1 > xm1) GP->X1 = xm1;
|
||||||
else if(GP->X1 > xm1) GP->X1 = xm1;
|
if(GP->Y1 < GP->Y0+1 || GP->Y1 > ym1) GP->Y1 = ym1;
|
||||||
if(GP->Y1 < GP->Y0+1) GP->Y1 = yc1;
|
|
||||||
else if(GP->Y1 > ym1) GP->Y1 = ym1;
|
|
||||||
DBG("set format: (%d,%d)x(%d,%d)", GP->X0,GP->X1,GP->Y0,GP->Y1);
|
DBG("set format: (%d,%d)x(%d,%d)", GP->X0,GP->X1,GP->Y0,GP->Y1);
|
||||||
SENDMSG(CMD_FRAMEFORMAT "=%d,%d,%d,%d", GP->X0, GP->Y0, GP->X1, GP->Y1);
|
SENDMSGW(CMD_FRAMEFORMAT, "=%d,%d,%d,%d", GP->X0, GP->Y0, GP->X1, GP->Y1);
|
||||||
}
|
}
|
||||||
if(GP->cancelexpose) SENDMSG(CMD_EXPSTATE "=%d", CAMERA_IDLE);
|
if(GP->cancelexpose) SENDMSGW(CMD_EXPSTATE, "=%d", CAMERA_IDLE);
|
||||||
if(GP->listdevices) SENDMSG(CMD_CAMLIST);
|
if(GP->listdevices) SENDCMDW(CMD_CAMLIST);
|
||||||
if(GP->camdevno > -1) SENDMSG(CMD_CAMDEVNO "=%d", GP->camdevno);
|
if(GP->camdevno > -1) SENDMSGW(CMD_CAMDEVNO, "=%d", GP->camdevno);
|
||||||
if(GP->hbin) SENDMSG(CMD_HBIN "=%d", GP->hbin);
|
if(GP->hbin) SENDMSGW(CMD_HBIN, "=%d", GP->hbin);
|
||||||
if(GP->vbin) SENDMSG(CMD_VBIN "=%d", GP->vbin);
|
if(GP->vbin) SENDMSGW(CMD_VBIN, "=%d", GP->vbin);
|
||||||
if(!isnan(GP->temperature)) SENDMSG(CMD_CAMTEMPER "=%g", GP->temperature);
|
if(!isnan(GP->temperature)) SENDMSGW(CMD_CAMTEMPER, "=%g", GP->temperature);
|
||||||
if(GP->shtr_cmd > -1) SENDMSG(CMD_SHUTTER "=%d", GP->shtr_cmd);
|
if(GP->shtr_cmd > -1) SENDMSGW(CMD_SHUTTER, "=%d", GP->shtr_cmd);
|
||||||
if(GP->confio > -1) SENDMSG(CMD_CONFIO "=%d", GP->confio);
|
if(GP->confio > -1) SENDMSGW(CMD_CONFIO, "=%d", GP->confio);
|
||||||
if(GP->setio > -1) SENDMSG(CMD_IO "=%d", GP->setio);\
|
if(GP->setio > -1) SENDMSGW(CMD_IO, "=%d", GP->setio);\
|
||||||
if(!isnan(GP->gain)) SENDMSG(CMD_GAIN "=%g", GP->gain);
|
if(!isnan(GP->gain)) SENDMSGW(CMD_GAIN, "=%g", GP->gain);
|
||||||
if(!isnan(GP->brightness)) SENDMSG(CMD_BRIGHTNESS "=%g", GP->brightness);
|
if(!isnan(GP->brightness)) SENDMSGW(CMD_BRIGHTNESS, "=%g", GP->brightness);
|
||||||
if(GP->nflushes > 0) SENDMSG(CMD_NFLUSHES "=%d", GP->nflushes);
|
if(GP->nflushes > 0) SENDMSGW(CMD_NFLUSHES, "=%d", GP->nflushes);
|
||||||
if(GP->outfile || GP->outfileprefix){ // exposition and reading control: only if start of exposition
|
if(GP->outfile || GP->outfileprefix){ // exposition and reading control: only if start of exposition
|
||||||
if(GP->_8bit) SENDMSG(CMD_8BIT "=1");
|
if(GP->_8bit) SENDMSGW(CMD_8BIT, "=1");
|
||||||
else SENDMSG(CMD_8BIT "=0");
|
else SENDMSGW(CMD_8BIT, "=0");
|
||||||
if(GP->fast) SENDMSG(CMD_FASTSPD "=1");
|
if(GP->fast) SENDMSGW(CMD_FASTSPD, "=1");
|
||||||
else SENDMSG(CMD_FASTSPD "=0");
|
else SENDMSGW(CMD_FASTSPD, "=0");
|
||||||
if(GP->dark) SENDMSG(CMD_DARK "=1");
|
if(GP->dark) SENDMSGW(CMD_DARK, "=1");
|
||||||
else SENDMSG(CMD_DARK "=0");
|
else SENDMSGW(CMD_DARK, "=0");
|
||||||
}
|
}
|
||||||
if(GP->outfile){
|
if(GP->outfile){
|
||||||
if(!*GP->outfile) SENDMSG(CMD_FILENAME "=");
|
if(!*GP->outfile) SENDMSGW(CMD_FILENAME, "=");
|
||||||
else SENDMSG(CMD_FILENAME "=%s", makeabspath(GP->outfile, FALSE));
|
else SENDMSGW(CMD_FILENAME, "=%s", makeabspath(GP->outfile, FALSE));
|
||||||
if(GP->rewrite) SENDMSG(CMD_REWRITE "=1");
|
if(GP->rewrite) SENDMSGW(CMD_REWRITE, "=1");
|
||||||
else SENDMSG(CMD_REWRITE "=0");
|
else SENDMSGW(CMD_REWRITE, "=0");
|
||||||
}
|
}
|
||||||
if(GP->outfileprefix){
|
if(GP->outfileprefix){
|
||||||
if(!*GP->outfileprefix) SENDMSG(CMD_FILENAMEPREFIX "=");
|
if(!*GP->outfileprefix) SENDMSGW(CMD_FILENAMEPREFIX, "=");
|
||||||
else SENDMSG(CMD_FILENAMEPREFIX "=%s", makeabspath(GP->outfileprefix, FALSE));
|
else SENDMSGW(CMD_FILENAMEPREFIX, "=%s", makeabspath(GP->outfileprefix, FALSE));
|
||||||
}
|
}
|
||||||
if(GP->exptime > -DBL_EPSILON) SENDMSG(CMD_EXPOSITION "=%g", GP->exptime);
|
if(GP->exptime > -DBL_EPSILON) SENDMSGW(CMD_EXPOSITION, "=%g", GP->exptime);
|
||||||
// FITS header keywords:
|
// FITS header keywords:
|
||||||
#define CHKHDR(x, cmd) do{if(x) SENDMSG(cmd "=%s", x);}while(0)
|
#define CHKHDR(x, cmd) do{if(x) SENDMSG(cmd "=%s", x);}while(0)
|
||||||
CHKHDR(GP->author, CMD_AUTHOR);
|
CHKHDR(GP->author, CMD_AUTHOR);
|
||||||
@ -216,13 +222,13 @@ static void send_headers(int sock){
|
|||||||
int N = snprintf(ptr, L-1, "%s,", *sptr++);
|
int N = snprintf(ptr, L-1, "%s,", *sptr++);
|
||||||
L -= N; ptr += N;
|
L -= N; ptr += N;
|
||||||
}
|
}
|
||||||
SENDMSG(CMD_HEADERFILES "=%s", buf);
|
SENDMSGW(CMD_HEADERFILES, "=%s", buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void client(int sock){
|
void client(int sock){
|
||||||
if(GP->restart){
|
if(GP->restart){
|
||||||
SENDMSG(CMD_RESTART);
|
SENDCMDW(CMD_RESTART);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
send_headers(sock);
|
send_headers(sock);
|
||||||
@ -233,7 +239,7 @@ void client(int sock){
|
|||||||
Nremain = GP->nframes - 1;
|
Nremain = GP->nframes - 1;
|
||||||
if(Nremain < 1) Nremain = 0;
|
if(Nremain < 1) Nremain = 0;
|
||||||
else GP->waitexpend = TRUE; // N>1 - wait for exp ends
|
else GP->waitexpend = TRUE; // N>1 - wait for exp ends
|
||||||
SENDMSG(CMD_EXPSTATE "=%d", CAMERA_CAPTURE);
|
SENDMSGW(CMD_EXPSTATE, "=%d", CAMERA_CAPTURE);
|
||||||
}else{
|
}else{
|
||||||
getans(sock, NULL);
|
getans(sock, NULL);
|
||||||
DBG("RETURN: no more data");
|
DBG("RETURN: no more data");
|
||||||
@ -247,7 +253,7 @@ void client(int sock){
|
|||||||
}
|
}
|
||||||
while(dtime() - t0 < timeout){
|
while(dtime() - t0 < timeout){
|
||||||
if(GP->waitexpend && dtime() - tw > WAIT_TIMEOUT){
|
if(GP->waitexpend && dtime() - tw > WAIT_TIMEOUT){
|
||||||
SENDMSG(CMD_TREMAIN); // get remained time
|
SENDCMDW(CMD_TREMAIN); // get remained time
|
||||||
tw = dtime();
|
tw = dtime();
|
||||||
sprintf(sendbuf, "%s", CMD_EXPSTATE);
|
sprintf(sendbuf, "%s", CMD_EXPSTATE);
|
||||||
sendstrmessage(sock, sendbuf);
|
sendstrmessage(sock, sendbuf);
|
||||||
@ -266,7 +272,7 @@ void client(int sock){
|
|||||||
if(GP->pause_len > 0){
|
if(GP->pause_len > 0){
|
||||||
double delta, time1 = dtime() + GP->pause_len;
|
double delta, time1 = dtime() + GP->pause_len;
|
||||||
while(1){
|
while(1){
|
||||||
SENDMSG(CMD_CAMTEMPER);
|
SENDCMDW(CMD_CAMTEMPER);
|
||||||
if((delta = time1 - dtime()) < __FLT_EPSILON__) break;
|
if((delta = time1 - dtime()) < __FLT_EPSILON__) break;
|
||||||
// %d ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÐÁÕÚÙ\n
|
// %d ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÐÁÕÚÙ\n
|
||||||
if(delta > 1.) verbose(1, _("%d seconds till pause ends\n"), (int)delta);
|
if(delta > 1.) verbose(1, _("%d seconds till pause ends\n"), (int)delta);
|
||||||
@ -277,7 +283,7 @@ void client(int sock){
|
|||||||
}
|
}
|
||||||
verbose(1, "Exposing frame %d...", ++nframe);
|
verbose(1, "Exposing frame %d...", ++nframe);
|
||||||
--Nremain;
|
--Nremain;
|
||||||
SENDMSG(CMD_EXPSTATE "=%d", CAMERA_CAPTURE);
|
SENDMSGW(CMD_EXPSTATE, "=%d", CAMERA_CAPTURE);
|
||||||
}else{
|
}else{
|
||||||
GP->waitexpend = 0;
|
GP->waitexpend = 0;
|
||||||
timeout = WAIT_TIMEOUT; // wait for last file name
|
timeout = WAIT_TIMEOUT; // wait for last file name
|
||||||
@ -301,8 +307,8 @@ static void getimage(){
|
|||||||
FNAME();
|
FNAME();
|
||||||
int sock = controlfd;
|
int sock = controlfd;
|
||||||
TIMESTAMP("Get image sizes");
|
TIMESTAMP("Get image sizes");
|
||||||
SENDMSG(CMD_IMWIDTH);
|
SENDCMDW(CMD_IMWIDTH);
|
||||||
SENDMSG(CMD_IMHEIGHT);
|
SENDCMDW(CMD_IMHEIGHT);
|
||||||
int imsock = open_socket(FALSE, GP->imageport, TRUE);
|
int imsock = open_socket(FALSE, GP->imageport, TRUE);
|
||||||
if(imsock < 0) ERRX("getimage(): can't open image transport socket");
|
if(imsock < 0) ERRX("getimage(): can't open image transport socket");
|
||||||
if(imbufsz < imdatalen){
|
if(imbufsz < imdatalen){
|
||||||
@ -342,7 +348,7 @@ static void *grabnext(void _U_ *arg){ // daemon grabbing images through the net
|
|||||||
expstate = CAMERA_CAPTURE;
|
expstate = CAMERA_CAPTURE;
|
||||||
TIMESTAMP("End of cycle, start new #%d", grabno+1);
|
TIMESTAMP("End of cycle, start new #%d", grabno+1);
|
||||||
TIMEINIT();
|
TIMEINIT();
|
||||||
SENDMSG(CMD_EXPSTATE "=%d", CAMERA_CAPTURE); // start capture
|
SENDMSGW(CMD_EXPSTATE, "=%d", CAMERA_CAPTURE); // start capture
|
||||||
double timeout = GP->exptime + CLIENT_TIMEOUT, t0 = dtime();
|
double timeout = GP->exptime + CLIENT_TIMEOUT, t0 = dtime();
|
||||||
useconds_t sleept = 500000; // 0.5s
|
useconds_t sleept = 500000; // 0.5s
|
||||||
if(GP->exptime < 0.5){
|
if(GP->exptime < 0.5){
|
||||||
|
|||||||
@ -18,8 +18,8 @@ static glob_pars G = {
|
|||||||
.instrument = NULL,
|
.instrument = NULL,
|
||||||
.exptime = -1.,
|
.exptime = -1.,
|
||||||
.nframes = 0,
|
.nframes = 0,
|
||||||
.X0 = -1, .Y0 = -1,
|
.X0 = INT_MIN, .Y0 = INT_MIN,
|
||||||
.X1 = -1, .Y1 = -1,
|
.X1 = INT_MIN, .Y1 = INT_MIN,
|
||||||
.focdevno = -1,
|
.focdevno = -1,
|
||||||
.camdevno = -1,
|
.camdevno = -1,
|
||||||
.whldevno = -1,
|
.whldevno = -1,
|
||||||
|
|||||||
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2023-04-11 10:00+0300\n"
|
"POT-Creation-Date: 2023-04-11 14:57+0300\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@ -478,12 +478,12 @@ msgstr ""
|
|||||||
msgid "Can't set brightness to %g"
|
msgid "Can't set brightness to %g"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ccdfunc.c:725 server.c:236
|
#: ccdfunc.c:725 server.c:251
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Can't set binning %dx%d"
|
msgid "Can't set binning %dx%d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ccdfunc.c:737 server.c:237
|
#: ccdfunc.c:737 server.c:252
|
||||||
msgid "Can't set given geometry"
|
msgid "Can't set given geometry"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -529,7 +529,7 @@ msgstr ""
|
|||||||
msgid "Capture frame %d"
|
msgid "Capture frame %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ccdfunc.c:783 ccdfunc.c:857 server.c:122
|
#: ccdfunc.c:783 ccdfunc.c:857 server.c:137
|
||||||
msgid "Can't start exposition"
|
msgid "Can't start exposition"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -546,7 +546,7 @@ msgid "Can't grab image"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. %d секунд до окончания паузы\n
|
#. %d секунд до окончания паузы\n
|
||||||
#: ccdfunc.c:807 client.c:272
|
#: ccdfunc.c:807 client.c:278
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d seconds till pause ends\n"
|
msgid "%d seconds till pause ends\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -555,15 +555,15 @@ msgstr ""
|
|||||||
msgid "Some error when capture"
|
msgid "Some error when capture"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: server.c:170
|
#: server.c:185
|
||||||
msgid "No camera device"
|
msgid "No camera device"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: client.c:259
|
#: client.c:265
|
||||||
msgid "Can't make exposition"
|
msgid "Can't make exposition"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: client.c:288
|
#: client.c:294
|
||||||
msgid "Server timeout"
|
msgid "Server timeout"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@ -7,7 +7,7 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr "Project-Id-Version: PACKAGE VERSION\n"
|
msgstr "Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2023-04-11 09:57+0300\n"
|
"POT-Creation-Date: 2023-04-11 14:24+0300\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@ -22,7 +22,7 @@ msgid "%.1f seconds till exposition ends"
|
|||||||
msgstr "%.1f ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÜËÓÐÏÚÉÃÉÉ"
|
msgstr "%.1f ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÜËÓÐÏÚÉÃÉÉ"
|
||||||
|
|
||||||
#. %d Ñ<>екунд до окончаниÑ<C2B8> паузы\n
|
#. %d Ñ<>екунд до окончаниÑ<C2B8> паузы\n
|
||||||
#: ccdfunc.c:807 client.c:272
|
#: ccdfunc.c:807 client.c:278
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d seconds till pause ends\n"
|
msgid "%d seconds till pause ends\n"
|
||||||
msgstr "%d ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÐÁÕÚÙ\n"
|
msgstr "%d ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÐÁÕÚÙ\n"
|
||||||
@ -117,7 +117,7 @@ msgstr "
|
|||||||
msgid "Can't init mutex!"
|
msgid "Can't init mutex!"
|
||||||
msgstr "îÅ ÍÏÇÕ ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ÍØÀÔÅËÓ!"
|
msgstr "îÅ ÍÏÇÕ ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ÍØÀÔÅËÓ!"
|
||||||
|
|
||||||
#: client.c:259
|
#: client.c:265
|
||||||
msgid "Can't make exposition"
|
msgid "Can't make exposition"
|
||||||
msgstr "îÅ ÍÏÇÕ ×ÙÐÏÌÎÉÔØ ÜËÓÐÏÚÉÃÉÀ"
|
msgstr "îÅ ÍÏÇÕ ×ÙÐÏÌÎÉÔØ ÜËÓÐÏÚÉÃÉÀ"
|
||||||
|
|
||||||
@ -162,7 +162,7 @@ msgstr "
|
|||||||
msgid "Can't set active wheel number"
|
msgid "Can't set active wheel number"
|
||||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÎÏÍÅÒ ÁËÔÉ×ÎÏÇÏ ËÏÌÅÓÁ"
|
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÎÏÍÅÒ ÁËÔÉ×ÎÏÇÏ ËÏÌÅÓÁ"
|
||||||
|
|
||||||
#: ccdfunc.c:725 server.c:236
|
#: ccdfunc.c:725 server.c:251
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Can't set binning %dx%d"
|
msgid "Can't set binning %dx%d"
|
||||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÂÉÎÎÉÎÇ %dx%d"
|
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÂÉÎÎÉÎÇ %dx%d"
|
||||||
@ -190,7 +190,7 @@ msgstr "
|
|||||||
msgid "Can't set gain to %g"
|
msgid "Can't set gain to %g"
|
||||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ Gain × %g"
|
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ Gain × %g"
|
||||||
|
|
||||||
#: ccdfunc.c:737 server.c:237
|
#: ccdfunc.c:737 server.c:252
|
||||||
msgid "Can't set given geometry"
|
msgid "Can't set given geometry"
|
||||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÇÅÏÍÅÔÒÉÀ"
|
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÇÅÏÍÅÔÒÉÀ"
|
||||||
|
|
||||||
@ -213,7 +213,7 @@ msgstr "
|
|||||||
msgid "Can't set wheel position %d"
|
msgid "Can't set wheel position %d"
|
||||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÐÏÌÏÖÅÎÉÅ ËÏÌÅÓÁ %d"
|
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÐÏÌÏÖÅÎÉÅ ËÏÌÅÓÁ %d"
|
||||||
|
|
||||||
#: ccdfunc.c:783 ccdfunc.c:857 server.c:122
|
#: ccdfunc.c:783 ccdfunc.c:857 server.c:137
|
||||||
msgid "Can't start exposition"
|
msgid "Can't start exposition"
|
||||||
msgstr "îÅ ÍÏÇÕ ÎÁÞÁÔØ ÜËÓÐÏÚÉÃÉÀ"
|
msgstr "îÅ ÍÏÇÕ ÎÁÞÁÔØ ÜËÓÐÏÚÉÃÉÀ"
|
||||||
|
|
||||||
@ -289,7 +289,7 @@ msgstr "
|
|||||||
msgid "N flushes before exposing (default: 1)"
|
msgid "N flushes before exposing (default: 1)"
|
||||||
msgstr "N ÚÁÓ×ÅÞÉ×ÁÎÉÊ ÐÅÒÅÄ ÜËÓÐÏÚÉÃÉÅÊ (ÐÏ ÕÍÏÌÞÁÎÉÀ: 1)"
|
msgstr "N ÚÁÓ×ÅÞÉ×ÁÎÉÊ ÐÅÒÅÄ ÜËÓÐÏÚÉÃÉÅÊ (ÐÏ ÕÍÏÌÞÁÎÉÀ: 1)"
|
||||||
|
|
||||||
#: server.c:170
|
#: server.c:185
|
||||||
msgid "No camera device"
|
msgid "No camera device"
|
||||||
msgstr "îÅ ÕËÁÚÁÎÏ ÕÓÔÒÏÊÓÔ×Ï ËÁÍÅÒÙ"
|
msgstr "îÅ ÕËÁÚÁÎÏ ÕÓÔÒÏÊÓÔ×Ï ËÁÍÅÒÙ"
|
||||||
|
|
||||||
@ -323,7 +323,7 @@ msgstr "
|
|||||||
msgid "Readout mode: %s"
|
msgid "Readout mode: %s"
|
||||||
msgstr "òÅÖÉÍ ÓÞÉÔÙ×ÁÎÉÑ: %s"
|
msgstr "òÅÖÉÍ ÓÞÉÔÙ×ÁÎÉÑ: %s"
|
||||||
|
|
||||||
#: client.c:288
|
#: client.c:294
|
||||||
msgid "Server timeout"
|
msgid "Server timeout"
|
||||||
msgstr "ôÁÊÍÁÕÔ ÓÅÒ×ÅÒÁ"
|
msgstr "ôÁÊÍÁÕÔ ÓÅÒ×ÅÒÁ"
|
||||||
|
|
||||||
|
|||||||
101
server.c
101
server.c
@ -30,6 +30,8 @@
|
|||||||
#include "server.h"
|
#include "server.h"
|
||||||
#include "socket.h"
|
#include "socket.h"
|
||||||
|
|
||||||
|
static int processData(int fd, handleritem *handlers, char *buf, int buflen);
|
||||||
|
|
||||||
static atomic_int camdevno = 0, wheeldevno = 0, focdevno = 0; // current devices numbers
|
static atomic_int camdevno = 0, wheeldevno = 0, focdevno = 0; // current devices numbers
|
||||||
static _Atomic camera_state camstate = CAMERA_IDLE;
|
static _Atomic camera_state camstate = CAMERA_IDLE;
|
||||||
#define FLAG_STARTCAPTURE (1<<0)
|
#define FLAG_STARTCAPTURE (1<<0)
|
||||||
@ -37,7 +39,6 @@ static _Atomic camera_state camstate = CAMERA_IDLE;
|
|||||||
#define FLAG_RESTARTSERVER (1<<2)
|
#define FLAG_RESTARTSERVER (1<<2)
|
||||||
static atomic_int camflags = 0, camfanspd = 0, confio = 0, nflushes;
|
static atomic_int camflags = 0, camfanspd = 0, confio = 0, nflushes;
|
||||||
static char *outfile = NULL, *lastfile = NULL; // current output file name/prefix; last name of saved file
|
static char *outfile = NULL, *lastfile = NULL; // current output file name/prefix; last name of saved file
|
||||||
//static pthread_mutex_t locmutex = PTHREAD_MUTEX_INITIALIZER; // mutex for wheel/camera/focuser functions
|
|
||||||
static frameformat frmformatmax = {0}, curformat = {0}; // maximal format
|
static frameformat frmformatmax = {0}, curformat = {0}; // maximal format
|
||||||
static void *camdev = NULL, *focdev = NULL, *wheeldev = NULL;
|
static void *camdev = NULL, *focdev = NULL, *wheeldev = NULL;
|
||||||
|
|
||||||
@ -97,6 +98,20 @@ strpair allcommands[] = {
|
|||||||
{NULL, NULL},
|
{NULL, NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static pthread_mutex_t locmutex = PTHREAD_MUTEX_INITIALIZER; // mutex for wheel/camera/focuser functions
|
||||||
|
|
||||||
|
// return TRUE if `locmutex` can be locked
|
||||||
|
static int lock(){
|
||||||
|
if(pthread_mutex_trylock(&locmutex)){
|
||||||
|
DBG("\n\nAlready locked");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
static void unlock(){
|
||||||
|
if(pthread_mutex_unlock(&locmutex)) ERR("Can't unlock mutex");
|
||||||
|
}
|
||||||
|
|
||||||
static IMG ima = {0};
|
static IMG ima = {0};
|
||||||
static void fixima(){
|
static void fixima(){
|
||||||
FNAME();
|
FNAME();
|
||||||
@ -176,7 +191,7 @@ static void* processCAM(_U_ void *d){
|
|||||||
signals(1);
|
signals(1);
|
||||||
}
|
}
|
||||||
usleep(100);
|
usleep(100);
|
||||||
if(0 == pthread_mutex_trylock(&locmutex)){
|
if(lock()){
|
||||||
// log
|
// log
|
||||||
if(dtime() - logt > TLOG_PAUSE){
|
if(dtime() - logt > TLOG_PAUSE){
|
||||||
logt = dtime();
|
logt = dtime();
|
||||||
@ -206,7 +221,7 @@ static void* processCAM(_U_ void *d){
|
|||||||
// do nothing: when `server` got this state it sends "expstate=3" to all clients and changes state to IDLE
|
// do nothing: when `server` got this state it sends "expstate=3" to all clients and changes state to IDLE
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
pthread_mutex_unlock(&locmutex);
|
unlock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -354,7 +369,6 @@ static hresult nameprefixhandler(_U_ int fd, _U_ const char *key, const char *va
|
|||||||
char *path = makeabspath(val, FALSE);
|
char *path = makeabspath(val, FALSE);
|
||||||
if(!path){
|
if(!path){
|
||||||
LOGERR("Can't create file '%s'", val);
|
LOGERR("Can't create file '%s'", val);
|
||||||
//pthread_mutex_unlock(&locmutex);
|
|
||||||
return RESULT_BADVAL;
|
return RESULT_BADVAL;
|
||||||
}
|
}
|
||||||
FREE(outfile);
|
FREE(outfile);
|
||||||
@ -676,7 +690,6 @@ static hresult FITSheaderhandler(int fd, _U_ const char *key, const char *val){
|
|||||||
FREE(*sptr++);
|
FREE(*sptr++);
|
||||||
}
|
}
|
||||||
FREE(list);
|
FREE(list);
|
||||||
//pthread_mutex_unlock(&locmutex);
|
|
||||||
return RESULT_BADVAL;
|
return RESULT_BADVAL;
|
||||||
}
|
}
|
||||||
*lptr++ = strdup(newpath);
|
*lptr++ = strdup(newpath);
|
||||||
@ -958,8 +971,8 @@ static handleritem items[] = {
|
|||||||
{chkcc, formathandler, CMD_FRAMEMAX},
|
{chkcc, formathandler, CMD_FRAMEMAX},
|
||||||
{chkcc, nflusheshandler, CMD_NFLUSHES},
|
{chkcc, nflusheshandler, CMD_NFLUSHES},
|
||||||
{chkcam, expstatehandler, CMD_EXPSTATE},
|
{chkcam, expstatehandler, CMD_EXPSTATE},
|
||||||
{NULL, imsizehandler, CMD_IMWIDTH},
|
{chktrue,imsizehandler, CMD_IMWIDTH},
|
||||||
{NULL, imsizehandler, CMD_IMHEIGHT},
|
{chktrue,imsizehandler, CMD_IMHEIGHT},
|
||||||
{chkcc, nameprefixhandler, CMD_FILENAMEPREFIX},
|
{chkcc, nameprefixhandler, CMD_FILENAMEPREFIX},
|
||||||
{chkcc, rewritefilehandler, CMD_REWRITE},
|
{chkcc, rewritefilehandler, CMD_REWRITE},
|
||||||
{chkcc, _8bithandler, CMD_8BIT},
|
{chkcc, _8bithandler, CMD_8BIT},
|
||||||
@ -1125,3 +1138,77 @@ char *makeabspath(const char *path, int shouldbe){
|
|||||||
if(unl) unlink(path);
|
if(unl) unlink(path);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// parse string of data (command or key=val)
|
||||||
|
// the CONTENT of buffer `str` WILL BE BROKEN!
|
||||||
|
// @return FALSE if client closed (nothing to read)
|
||||||
|
static int parsestring(int fd, handleritem *handlers, char *str){
|
||||||
|
if(fd < 1 || !handlers || !handlers->key || !str || !*str) return FALSE;
|
||||||
|
char *val = get_keyval(str);
|
||||||
|
if(val){
|
||||||
|
DBG("RECEIVE '%s=%s'", str, val);
|
||||||
|
LOGDBG("RECEIVE '%s=%s'", str, val);
|
||||||
|
}else{
|
||||||
|
DBG("RECEIVE '%s'", str);
|
||||||
|
LOGDBG("RECEIVE '%s'", str);
|
||||||
|
}
|
||||||
|
for(handleritem *h = handlers; h->key; ++h){
|
||||||
|
if(strcmp(str, h->key) == 0){ // found command
|
||||||
|
hresult r = RESULT_OK;
|
||||||
|
int l = FALSE;
|
||||||
|
if(h->chkfunction){
|
||||||
|
double t0 = dtime();
|
||||||
|
do{ l = lock(); } while(!l && dtime() - t0 < BUSY_TIMEOUT);
|
||||||
|
DBG("time: %g", dtime() - t0);
|
||||||
|
if(!l){
|
||||||
|
WARN("Can't lock mutex"); //signals(1);
|
||||||
|
return RESULT_BUSY; // long blocking work
|
||||||
|
}
|
||||||
|
r = h->chkfunction(val);
|
||||||
|
} // else NULL instead of chkfuntion -> don't check and don't lock mutex
|
||||||
|
if(r == RESULT_OK){ // no test function or it returns TRUE
|
||||||
|
if(h->handler) r = h->handler(fd, str, val);
|
||||||
|
else r = RESULT_FAIL;
|
||||||
|
}
|
||||||
|
if(l) unlock();
|
||||||
|
if(r == RESULT_DISCONNECTED){
|
||||||
|
DBG("handler return RESULT_DISCONNECTED");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return sendstrmessage(fd, hresult2str(r));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DBG("Command not found!");
|
||||||
|
return sendstrmessage(fd, hresult2str(RESULT_BADKEY));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief processData - read (if available) data from fd and run processing, sending to fd messages for each command
|
||||||
|
* @param fd - socket file descriptor
|
||||||
|
* @param handlers - NULL-terminated array of handlers
|
||||||
|
* @param buf (io) - zero-terminated buffer for storing rest of data (without newline), its content will be changed
|
||||||
|
* @param buflen - its length
|
||||||
|
* @return FALSE if client closed (nothing to read)
|
||||||
|
*/
|
||||||
|
static int processData(int fd, handleritem *handlers, char *buf, int buflen){
|
||||||
|
int curlen = strlen(buf);
|
||||||
|
if(curlen == buflen-1) curlen = 0; // buffer overflow - clear old content
|
||||||
|
ssize_t rd = read(fd, buf + curlen, buflen-1 - curlen);
|
||||||
|
if(rd <= 0){
|
||||||
|
//DBG("read %zd bytes from client", rd);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
//DBG("got %s[%zd] from %d", buf, rd, fd);
|
||||||
|
char *restofdata = buf, *eptr = buf + curlen + rd;
|
||||||
|
*eptr = 0;
|
||||||
|
do{
|
||||||
|
char *nl = strchr(restofdata, '\n');
|
||||||
|
if(!nl) break;
|
||||||
|
*nl++ = 0;
|
||||||
|
if(!parsestring(fd, handlers, restofdata)) return FALSE; // client disconnected
|
||||||
|
restofdata = nl;
|
||||||
|
//DBG("rest of data: %s", restofdata);
|
||||||
|
}while(1);
|
||||||
|
if(restofdata != buf) memmove(buf, restofdata, eptr - restofdata + 1);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|||||||
77
socket.c
77
socket.c
@ -38,8 +38,6 @@
|
|||||||
double __t0 = 0.;
|
double __t0 = 0.;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
pthread_mutex_t locmutex = PTHREAD_MUTEX_INITIALIZER; // mutex for wheel/camera/focuser functions
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief open_socket - create socket and open it
|
* @brief open_socket - create socket and open it
|
||||||
* @param isserver - TRUE for server, FALSE for client
|
* @param isserver - TRUE for server, FALSE for client
|
||||||
@ -187,7 +185,7 @@ int sendmessage(int fd, const char *msg, int l){
|
|||||||
buflen += 1024;
|
buflen += 1024;
|
||||||
tmpbuf = realloc(tmpbuf, buflen);
|
tmpbuf = realloc(tmpbuf, buflen);
|
||||||
}
|
}
|
||||||
//DBG("send to fd %d: %s [%d]", fd, msg, l);
|
DBG("send to fd %d: %s [%d]", fd, msg, l);
|
||||||
memcpy(tmpbuf, msg, l);
|
memcpy(tmpbuf, msg, l);
|
||||||
if(msg[l-1] != '\n') tmpbuf[l++] = '\n';
|
if(msg[l-1] != '\n') tmpbuf[l++] = '\n';
|
||||||
if(l != send(fd, tmpbuf, l, MSG_NOSIGNAL)){
|
if(l != send(fd, tmpbuf, l, MSG_NOSIGNAL)){
|
||||||
@ -248,79 +246,6 @@ char *get_keyval(char *keyval){
|
|||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
// parse string of data (command or key=val)
|
|
||||||
// the CONTENT of buffer `str` WILL BE BROKEN!
|
|
||||||
// @return FALSE if client closed (nothing to read)
|
|
||||||
static int parsestring(int fd, handleritem *handlers, char *str){
|
|
||||||
if(fd < 1 || !handlers || !handlers->key || !str || !*str) return FALSE;
|
|
||||||
char *val = get_keyval(str);
|
|
||||||
if(val){
|
|
||||||
DBG("RECEIVE '%s=%s'", str, val);
|
|
||||||
LOGDBG("RECEIVE '%s=%s'", str, val);
|
|
||||||
}else{
|
|
||||||
DBG("RECEIVE '%s'", str);
|
|
||||||
LOGDBG("RECEIVE '%s'", str);
|
|
||||||
}
|
|
||||||
for(handleritem *h = handlers; h->key; ++h){
|
|
||||||
if(strcmp(str, h->key) == 0){ // found command
|
|
||||||
hresult r = RESULT_OK;
|
|
||||||
int l = 1;
|
|
||||||
if(h->chkfunction){
|
|
||||||
double t0 = dtime();
|
|
||||||
do{ l = pthread_mutex_trylock(&locmutex); }while(l && dtime() - t0 > BUSY_TIMEOUT);
|
|
||||||
if(l){
|
|
||||||
DBG("Can't lock mutex");
|
|
||||||
return RESULT_BUSY; // long blocking work
|
|
||||||
}
|
|
||||||
r = h->chkfunction(val);
|
|
||||||
} // else NULL instead of chkfuntion -> don't check and don't lock mutex
|
|
||||||
if(r == RESULT_OK){ // no test function or it returns TRUE
|
|
||||||
if(h->handler) r = h->handler(fd, str, val);
|
|
||||||
else r = RESULT_FAIL;
|
|
||||||
}
|
|
||||||
if(!l) pthread_mutex_unlock(&locmutex);
|
|
||||||
if(r == RESULT_DISCONNECTED){
|
|
||||||
DBG("handler return RESULT_DISCONNECTED");
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
return sendstrmessage(fd, hresult2str(r));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
DBG("Command not found!");
|
|
||||||
return sendstrmessage(fd, resmessages[RESULT_BADKEY]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief processData - read (if available) data from fd and run processing, sending to fd messages for each command
|
|
||||||
* @param fd - socket file descriptor
|
|
||||||
* @param handlers - NULL-terminated array of handlers
|
|
||||||
* @param buf (io) - zero-terminated buffer for storing rest of data (without newline), its content will be changed
|
|
||||||
* @param buflen - its length
|
|
||||||
* @return FALSE if client closed (nothing to read)
|
|
||||||
*/
|
|
||||||
int processData(int fd, handleritem *handlers, char *buf, int buflen){
|
|
||||||
int curlen = strlen(buf);
|
|
||||||
if(curlen == buflen-1) curlen = 0; // buffer overflow - clear old content
|
|
||||||
ssize_t rd = read(fd, buf + curlen, buflen-1 - curlen);
|
|
||||||
if(rd <= 0){
|
|
||||||
//DBG("read %zd bytes from client", rd);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
//DBG("got %s[%zd] from %d", buf, rd, fd);
|
|
||||||
char *restofdata = buf, *eptr = buf + curlen + rd;
|
|
||||||
*eptr = 0;
|
|
||||||
do{
|
|
||||||
char *nl = strchr(restofdata, '\n');
|
|
||||||
if(!nl) break;
|
|
||||||
*nl++ = 0;
|
|
||||||
if(!parsestring(fd, handlers, restofdata)) return FALSE; // client disconnected
|
|
||||||
restofdata = nl;
|
|
||||||
//DBG("rest of data: %s", restofdata);
|
|
||||||
}while(1);
|
|
||||||
if(restofdata != buf) memmove(buf, restofdata, eptr - restofdata + 1);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* check data from fd (polling function for client)
|
* check data from fd (polling function for client)
|
||||||
* @param fd - file descriptor
|
* @param fd - file descriptor
|
||||||
|
|||||||
19
socket.h
19
socket.h
@ -30,7 +30,7 @@
|
|||||||
#define MAXCLIENTS (30)
|
#define MAXCLIENTS (30)
|
||||||
|
|
||||||
// wait for mutex locking
|
// wait for mutex locking
|
||||||
#define BUSY_TIMEOUT (0.1)
|
#define BUSY_TIMEOUT (1.0)
|
||||||
// waiting for answer timeout
|
// waiting for answer timeout
|
||||||
#define ANSWER_TIMEOUT (1.0)
|
#define ANSWER_TIMEOUT (1.0)
|
||||||
// wait for exposition ends (between subsequent check calls)
|
// wait for exposition ends (between subsequent check calls)
|
||||||
@ -47,16 +47,14 @@ extern double __t0;
|
|||||||
#define TIMESTAMP(...)
|
#define TIMESTAMP(...)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern pthread_mutex_t locmutex;
|
|
||||||
|
|
||||||
typedef enum{
|
typedef enum{
|
||||||
RESULT_OK, // all OK
|
RESULT_OK, // 0: all OK
|
||||||
RESULT_BUSY, // camera busy and no setters can be done
|
RESULT_BUSY, // 1: camera busy and no setters can be done
|
||||||
RESULT_FAIL, // failed running command
|
RESULT_FAIL, // 2: failed running command
|
||||||
RESULT_BADVAL, // bad key's value
|
RESULT_BADVAL, // 3: bad key's value
|
||||||
RESULT_BADKEY, // bad key
|
RESULT_BADKEY, // 4: bad key
|
||||||
RESULT_SILENCE, // send nothing to client
|
RESULT_SILENCE, // 5: send nothing to client
|
||||||
RESULT_DISCONNECTED,// client disconnected
|
RESULT_DISCONNECTED,// 6: client disconnected
|
||||||
RESULT_NUM
|
RESULT_NUM
|
||||||
} hresult;
|
} hresult;
|
||||||
|
|
||||||
@ -78,5 +76,4 @@ int sendmessage(int fd, const char *msg, int l);
|
|||||||
int sendstrmessage(int fd, const char *msg);
|
int sendstrmessage(int fd, const char *msg);
|
||||||
char *get_keyval(char *keyval);
|
char *get_keyval(char *keyval);
|
||||||
|
|
||||||
int processData(int fd, handleritem *handlers, char *buf, int buflen);
|
|
||||||
int canberead(int fd);
|
int canberead(int fd);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user