mirror of
https://github.com/eddyem/CCD_Capture.git
synced 2025-12-06 10:45:13 +03:00
try to fix network data transport (really need another socket)
This commit is contained in:
parent
87e8120122
commit
8b6e7435e0
@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
#include <C/FlyCapture2_C.h>
|
#include <C/FlyCapture2_C.h>
|
||||||
#include <C/FlyCapture2Defs_C.h>
|
#include <C/FlyCapture2Defs_C.h>
|
||||||
|
#include <stdatomic.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -33,6 +34,7 @@ static fc2PGRGuid guid;
|
|||||||
static fc2Error err = FC2_ERROR_OK;
|
static fc2Error err = FC2_ERROR_OK;
|
||||||
|
|
||||||
static int isopened = FALSE, is16bit = FALSE;
|
static int isopened = FALSE, is16bit = FALSE;
|
||||||
|
static atomic_int canceled = 0;
|
||||||
static char camname[BUFSIZ] = {0};
|
static char camname[BUFSIZ] = {0};
|
||||||
|
|
||||||
#ifndef Stringify
|
#ifndef Stringify
|
||||||
@ -287,6 +289,7 @@ rtn:
|
|||||||
|
|
||||||
static int capture(IMG *ima){
|
static int capture(IMG *ima){
|
||||||
FNAME();
|
FNAME();
|
||||||
|
if(canceled) return FALSE;
|
||||||
if(!ima || !ima->data || !isopened) return FALSE;
|
if(!ima || !ima->data || !isopened) return FALSE;
|
||||||
static int toohot = FALSE;
|
static int toohot = FALSE;
|
||||||
float f;
|
float f;
|
||||||
@ -432,12 +435,17 @@ static int shutter(_U_ shutter_op cmd){
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void capcancel(){
|
||||||
|
canceled = 1;
|
||||||
|
DBG("No capturing now");
|
||||||
|
}
|
||||||
|
|
||||||
static int ffalse(_U_ float f){ return FALSE; }
|
static int ffalse(_U_ float f){ return FALSE; }
|
||||||
static int fpfalse(_U_ float *f){ return FALSE; }
|
static int fpfalse(_U_ float *f){ return FALSE; }
|
||||||
static int ifalse(_U_ int i){ return FALSE; }
|
static int ifalse(_U_ int i){ return FALSE; }
|
||||||
static int vtrue(){ return TRUE; }
|
static int vtrue(){ return TRUE; }
|
||||||
static int ipfalse(_U_ int *i){ return FALSE; }
|
static int ipfalse(_U_ int *i){ return FALSE; }
|
||||||
static void vstub(){ return ;}
|
//static void vstub(){ return ;}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Global objects: camera, focuser and wheel
|
* Global objects: camera, focuser and wheel
|
||||||
@ -447,7 +455,7 @@ Camera camera = {
|
|||||||
.close = disconnect,
|
.close = disconnect,
|
||||||
.pollcapture = pollcapt,
|
.pollcapture = pollcapt,
|
||||||
.capture = capture,
|
.capture = capture,
|
||||||
.cancel = vstub,
|
.cancel = capcancel,
|
||||||
.startexposition = vtrue,
|
.startexposition = vtrue,
|
||||||
// setters:
|
// setters:
|
||||||
.setDevNo = setdevno,
|
.setDevNo = setdevno,
|
||||||
|
|||||||
31
ccdfunc.c
31
ccdfunc.c
@ -211,14 +211,13 @@ int saveFITS(IMG *img, char **outp){
|
|||||||
}
|
}
|
||||||
int width = img->w, height = img->h;
|
int width = img->w, height = img->h;
|
||||||
void *data = (void*) img->data;
|
void *data = (void*) img->data;
|
||||||
long naxes[2] = {width, height};
|
long naxes[2] = {width, height}, tmpl;
|
||||||
double tmpd = 0.0;
|
double tmpd = 0.0;
|
||||||
float tmpf = 0.0;
|
float tmpf = 0.0;
|
||||||
int tmpi = 0;
|
int tmpi = 0;
|
||||||
struct tm *tm_time;
|
struct tm *tm_time;
|
||||||
char bufc[FLEN_CARD];
|
char bufc[FLEN_CARD];
|
||||||
time_t savetime = time(NULL);
|
time_t savetime = time(NULL);
|
||||||
double dsavetime = dtime();
|
|
||||||
fitsfile *fp;
|
fitsfile *fp;
|
||||||
fitserror = 0;
|
fitserror = 0;
|
||||||
TRYFITS(fits_create_file, &fp, fnam);
|
TRYFITS(fits_create_file, &fp, fnam);
|
||||||
@ -278,9 +277,10 @@ int saveFITS(IMG *img, char **outp){
|
|||||||
// DATE / Creation date (YYYY-MM-DDThh:mm:ss, UTC)
|
// DATE / Creation date (YYYY-MM-DDThh:mm:ss, UTC)
|
||||||
strftime(bufc, FLEN_VALUE, "%Y-%m-%dT%H:%M:%S", gmtime(&savetime));
|
strftime(bufc, FLEN_VALUE, "%Y-%m-%dT%H:%M:%S", gmtime(&savetime));
|
||||||
WRITEKEY(fp, TSTRING, "DATE", bufc, "Creation date (YYYY-MM-DDThh:mm:ss, UTC)");
|
WRITEKEY(fp, TSTRING, "DATE", bufc, "Creation date (YYYY-MM-DDThh:mm:ss, UTC)");
|
||||||
|
tmpl = (long) savetime;
|
||||||
tm_time = localtime(&savetime);
|
tm_time = localtime(&savetime);
|
||||||
strftime(bufc, FLEN_VALUE, "File creation time (UNIX)", tm_time);
|
strftime(bufc, FLEN_VALUE, "File creation time (UNIX)", tm_time);
|
||||||
WRITEKEY(fp, TDOUBLE, "UNIXTIME", &dsavetime, bufc);
|
WRITEKEY(fp, TLONG, "UNIXTIME", &tmpl, bufc);
|
||||||
strftime(bufc, 80, "%Y/%m/%d", tm_time);
|
strftime(bufc, 80, "%Y/%m/%d", tm_time);
|
||||||
// DATE-OBS / DATE (YYYY/MM/DD) OF OBS.
|
// DATE-OBS / DATE (YYYY/MM/DD) OF OBS.
|
||||||
WRITEKEY(fp, TSTRING, "DATE-OBS", bufc, "DATE OF OBS. (YYYY/MM/DD, local)");
|
WRITEKEY(fp, TSTRING, "DATE-OBS", bufc, "DATE OF OBS. (YYYY/MM/DD, local)");
|
||||||
@ -718,8 +718,6 @@ int prepare_ccds(){
|
|||||||
}else WARNX(_("Can't set brightness to %g"), GP->brightness);
|
}else WARNX(_("Can't set brightness to %g"), GP->brightness);
|
||||||
}
|
}
|
||||||
/*********************** expose control ***********************/
|
/*********************** expose control ***********************/
|
||||||
// cancel previous exp
|
|
||||||
camera->cancel();
|
|
||||||
if(GP->hbin < 1) GP->hbin = 1;
|
if(GP->hbin < 1) GP->hbin = 1;
|
||||||
if(GP->vbin < 1) GP->vbin = 1;
|
if(GP->vbin < 1) GP->vbin = 1;
|
||||||
if(!camera->setbin(GP->hbin, GP->vbin)){
|
if(!camera->setbin(GP->hbin, GP->vbin)){
|
||||||
@ -813,9 +811,11 @@ DBG("w=%d, h=%d", raw_width, raw_height);
|
|||||||
closecam();
|
closecam();
|
||||||
}
|
}
|
||||||
|
|
||||||
void cancel(){
|
// cancel expositions and close camera devise
|
||||||
|
void camstop(){
|
||||||
if(camera){
|
if(camera){
|
||||||
camera->cancel();
|
camera->cancel();
|
||||||
|
camera->close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -855,16 +855,18 @@ eof:
|
|||||||
* @return TRUE if new image available
|
* @return TRUE if new image available
|
||||||
*/
|
*/
|
||||||
int ccdcaptured(IMG **imgptr){
|
int ccdcaptured(IMG **imgptr){
|
||||||
|
static double tlast = 0.;
|
||||||
if(!imgptr) return FALSE;
|
if(!imgptr) return FALSE;
|
||||||
static pthread_t grabthread = 0;
|
static pthread_t grabthread = 0;
|
||||||
if(imgptr == (void*)-1){ // kill `grabnext`
|
if(imgptr == (void*)-1){ // kill `grabnext`
|
||||||
DBG("Kill grabbing thread");
|
DBG("Wait for grabbing thread ends");
|
||||||
if(grabthread){
|
if(grabthread){
|
||||||
pthread_cancel(grabthread);
|
//pthread_cancel(grabthread); - this kills some cameras
|
||||||
|
//pthread_timedjoin_np
|
||||||
pthread_join(grabthread, NULL);
|
pthread_join(grabthread, NULL);
|
||||||
grabthread = 0;
|
grabthread = 0;
|
||||||
}
|
}
|
||||||
DBG("Killed");
|
DBG("OK");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
frameformat fmt = camera->geometry;
|
frameformat fmt = camera->geometry;
|
||||||
@ -879,20 +881,27 @@ int ccdcaptured(IMG **imgptr){
|
|||||||
ima->h = raw_height;
|
ima->h = raw_height;
|
||||||
*imgptr = ima;
|
*imgptr = ima;
|
||||||
}else ima = *imgptr;
|
}else ima = *imgptr;
|
||||||
|
|
||||||
if(!grabthread){ // start new grab
|
if(!grabthread){ // start new grab
|
||||||
DBG("\n\n\nStart new grab");
|
DBG("\n\n\nStart new grab");
|
||||||
if(pthread_create(&grabthread, NULL, &grabnext, (void*)ima)){
|
if(pthread_create(&grabthread, NULL, &grabnext, (void*)ima)){
|
||||||
WARN("Can't create grabbing thread");
|
WARN("Can't create grabbing thread");
|
||||||
grabthread = 0;
|
grabthread = 0;
|
||||||
}
|
}
|
||||||
|
tlast = dtime();
|
||||||
}else{ // grab in process
|
}else{ // grab in process
|
||||||
if(grabends){ // thread is dead
|
if(grabends){ // thread is dead
|
||||||
DBG("Thread is dead");
|
DBG("Grab ends");
|
||||||
void *vr;
|
void *vr;
|
||||||
pthread_join(grabthread, &vr);
|
pthread_join(grabthread, &vr);
|
||||||
int retcode = *(int*)vr;
|
int retcode = *(int*)vr;
|
||||||
DBG("retcode = %d", retcode);
|
DBG("retcode = %d", retcode);
|
||||||
grabthread = 0;
|
grabthread = 0;
|
||||||
|
if(GP->verbose > 1){
|
||||||
|
double t = dtime();
|
||||||
|
green("Framerate=%.2g\n", 1./(t-tlast));
|
||||||
|
tlast = t;
|
||||||
|
}
|
||||||
if(retcode) return TRUE;
|
if(retcode) return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -29,7 +29,7 @@ void focusers();
|
|||||||
void wheels();
|
void wheels();
|
||||||
int prepare_ccds();
|
int prepare_ccds();
|
||||||
void ccds();
|
void ccds();
|
||||||
void cancel();
|
void camstop();
|
||||||
|
|
||||||
int startCCD(void **dlh);
|
int startCCD(void **dlh);
|
||||||
int startWheel(void **dlh);
|
int startWheel(void **dlh);
|
||||||
|
|||||||
119
client.c
119
client.c
@ -33,6 +33,7 @@ static char sendbuf[BUFSIZ];
|
|||||||
#define SENDMSG(...) do{snprintf(sendbuf, BUFSIZ-1, __VA_ARGS__); verbose(2, "\t> %s", sendbuf); sendstrmessage(sock, sendbuf); getans(sock);}while(0)
|
#define SENDMSG(...) do{snprintf(sendbuf, BUFSIZ-1, __VA_ARGS__); verbose(2, "\t> %s", sendbuf); sendstrmessage(sock, sendbuf); getans(sock);}while(0)
|
||||||
static volatile atomic_int expstate = CAMERA_CAPTURE;
|
static volatile atomic_int expstate = CAMERA_CAPTURE;
|
||||||
static int xm0,ym0,xm1,ym1; // max format
|
static int xm0,ym0,xm1,ym1; // max format
|
||||||
|
static int xc0,yc0,xc1,yc1; // current format
|
||||||
|
|
||||||
#ifdef IMAGEVIEW
|
#ifdef IMAGEVIEW
|
||||||
static IMG ima = {0};
|
static IMG ima = {0};
|
||||||
@ -110,6 +111,9 @@ static int parseans(char *ans){
|
|||||||
}else if(0 == strcmp(CMD_FRAMEMAX, ans)){
|
}else if(0 == strcmp(CMD_FRAMEMAX, ans)){
|
||||||
sscanf(val, "%d,%d,%d,%d", &xm0, &ym0, &xm1, &ym1);
|
sscanf(val, "%d,%d,%d,%d", &xm0, &ym0, &xm1, &ym1);
|
||||||
DBG("Got maxformat: %d,%d,%d,%d", xm0, ym0, xm1, ym1);
|
DBG("Got maxformat: %d,%d,%d,%d", xm0, ym0, xm1, ym1);
|
||||||
|
}else if(0 == strcmp(CMD_FRAMEFORMAT, ans)){
|
||||||
|
sscanf(val, "%d,%d,%d,%d", &xc0, &yc0, &xc1, &yc1);
|
||||||
|
DBG("Got current format: %d,%d,%d,%d", xc0, yc0, xc1, yc1);
|
||||||
}
|
}
|
||||||
#ifdef IMAGEVIEW
|
#ifdef IMAGEVIEW
|
||||||
else if(0 == strcmp(CMD_IMWIDTH, ans)){
|
else if(0 == strcmp(CMD_IMWIDTH, ans)){
|
||||||
@ -165,13 +169,15 @@ static void send_headers(int sock){
|
|||||||
// CCD/CMOS
|
// CCD/CMOS
|
||||||
if(GP->X0 > -1 || GP->Y0 > -1 || GP->X1 > -1 || GP->Y1 > -1){ // set format
|
if(GP->X0 > -1 || GP->Y0 > -1 || GP->X1 > -1 || GP->Y1 > -1){ // set format
|
||||||
SENDMSG(CMD_FRAMEMAX);
|
SENDMSG(CMD_FRAMEMAX);
|
||||||
DBG("max format: (%d,%d)x(%d,%d)", xm0,ym0,xm1,ym1);
|
SENDMSG(CMD_FRAMEFORMAT);
|
||||||
if(GP->X0 < 0) GP->X0 = xm0; // default values
|
if(GP->X0 < 0) GP->X0 = xc0; // default values
|
||||||
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 = ym0;
|
if(GP->Y0 < 0) GP->Y0 = yc0;
|
||||||
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 > xm1) GP->X1 = xm1;
|
if(GP->X1 < GP->X0+1) GP->X1 = xc1;
|
||||||
if(GP->Y1 < GP->Y0+1 || GP->Y1 > ym1) GP->Y1 = ym1;
|
else if(GP->X1 > xm1) GP->X1 = xm1;
|
||||||
|
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);
|
SENDMSG(CMD_FRAMEFORMAT "=%d,%d,%d,%d", GP->X0, GP->Y0, GP->X1, GP->Y1);
|
||||||
}
|
}
|
||||||
@ -245,7 +251,8 @@ void client(int sock){
|
|||||||
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);
|
SENDMSG(CMD_EXPSTATE "=%d", CAMERA_CAPTURE);
|
||||||
}else{
|
}else{
|
||||||
while(getans(sock));
|
double t0 = dtime();
|
||||||
|
while(getans(sock) && dtime() - t0 < WAIT_TIMEOUT);
|
||||||
DBG("RETURN: no more data");
|
DBG("RETURN: no more data");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -306,15 +313,48 @@ void init_grab_sock(int sock){
|
|||||||
send_headers(sock);
|
send_headers(sock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void getimage(){
|
||||||
|
int sock = grabsockfd;
|
||||||
|
SENDMSG(CMD_IMWIDTH);
|
||||||
|
SENDMSG(CMD_IMHEIGHT);
|
||||||
|
while(readmsg(sock)); // clear all incoming data
|
||||||
|
sendstrmessage(sock, CMD_GETIMAGE); // ask for image
|
||||||
|
if(imbufsz < imdatalen){
|
||||||
|
DBG("Reallocate memory from %d to %d", imbufsz, imdatalen);
|
||||||
|
ima.data = realloc(ima.data, imdatalen);
|
||||||
|
imbufsz = imdatalen;
|
||||||
|
}
|
||||||
|
double t0 = dtime();
|
||||||
|
int got = 0;
|
||||||
|
while(dtime() - t0 < CLIENT_TIMEOUT){
|
||||||
|
if(!canberead(sock)) continue;
|
||||||
|
uint8_t *target = ((uint8_t*)ima.data)+got;
|
||||||
|
int rd = read(sock, target, imdatalen - got);
|
||||||
|
if(rd <= 0){
|
||||||
|
WARNX("Server disconnected");
|
||||||
|
signals(1);
|
||||||
|
}
|
||||||
|
got += rd;
|
||||||
|
DBG("Read %d bytes; total read %d from %d; first: %x %x %x %x", rd, got, imdatalen, target[0],
|
||||||
|
target[1], target[2], target[3]);
|
||||||
|
if(got == imdatalen){
|
||||||
|
DBG("Got image");
|
||||||
|
grabends = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(dtime() - t0 > CLIENT_TIMEOUT) WARNX("Timeout, image didn't received");
|
||||||
|
}
|
||||||
|
|
||||||
static void *grabnext(void _U_ *arg){ // daemon grabbing images through the net
|
static void *grabnext(void _U_ *arg){ // daemon grabbing images through the net
|
||||||
FNAME();
|
FNAME();
|
||||||
if(grabsockfd < 0) return NULL;
|
if(grabsockfd < 0) return NULL;
|
||||||
int sock = grabsockfd;
|
int sock = grabsockfd;
|
||||||
while(1){
|
while(1){
|
||||||
|
DBG("WAIT");
|
||||||
while(grabends); // wait until image processed
|
while(grabends); // wait until image processed
|
||||||
SENDMSG(CMD_IMWIDTH);
|
|
||||||
SENDMSG(CMD_IMHEIGHT);
|
|
||||||
expstate = CAMERA_CAPTURE;
|
expstate = CAMERA_CAPTURE;
|
||||||
|
DBG("CAPT");
|
||||||
SENDMSG(CMD_EXPSTATE "=%d", CAMERA_CAPTURE); // start capture
|
SENDMSG(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
|
||||||
@ -335,31 +375,23 @@ static void *grabnext(void _U_ *arg){ // daemon grabbing images through the net
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
DBG("Frame ready");
|
DBG("Frame ready");
|
||||||
while(readmsg(sock)); // clear all incoming data
|
getimage();
|
||||||
sendstrmessage(sock, CMD_GETIMAGE); // ask for image
|
}
|
||||||
if(imbufsz < imdatalen){
|
return NULL;
|
||||||
DBG("Reallocate memory from %d to %d", imbufsz, imdatalen);
|
}
|
||||||
ima.data = realloc(ima.data, imdatalen);
|
|
||||||
imbufsz = imdatalen;
|
static void *waitimage(void _U_ *arg){ // passive waiting for next image
|
||||||
|
FNAME();
|
||||||
|
if(grabsockfd < 0) return NULL;
|
||||||
|
int sock = grabsockfd;
|
||||||
|
while(1){
|
||||||
|
while(grabends); // wait until image processed
|
||||||
|
getans(sock);
|
||||||
|
if(expstate != CAMERA_FRAMERDY){
|
||||||
|
usleep(1000);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
t0 = dtime();
|
getimage();
|
||||||
int got = 0;
|
|
||||||
while(dtime() - t0 < CLIENT_TIMEOUT){
|
|
||||||
if(!canberead(sock)) continue;
|
|
||||||
int rd = read(sock, ((uint8_t*)ima.data)+got, imdatalen - got);
|
|
||||||
if(rd <= 0){
|
|
||||||
WARNX("Server disconnected");
|
|
||||||
signals(1);
|
|
||||||
}
|
|
||||||
got += rd;
|
|
||||||
DBG("Read %d bytes; total read %d from %d", rd, got, imdatalen);
|
|
||||||
if(got == imdatalen){
|
|
||||||
DBG("Got image");
|
|
||||||
grabends = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(dtime() - t0 > CLIENT_TIMEOUT) WARNX("Timeout, image didn't received");
|
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -370,24 +402,33 @@ int sockcaptured(IMG **imgptr){
|
|||||||
static pthread_t grabthread = 0;
|
static pthread_t grabthread = 0;
|
||||||
if(grabsockfd < 0) return FALSE;
|
if(grabsockfd < 0) return FALSE;
|
||||||
if(imgptr == (void*)-1){ // kill `grabnext`
|
if(imgptr == (void*)-1){ // kill `grabnext`
|
||||||
DBG("Kill grabbing thread");
|
DBG("Wait for grabbing thread");
|
||||||
if(grabthread){
|
if(grabthread){
|
||||||
pthread_cancel(grabthread);
|
pthread_cancel(grabthread);
|
||||||
pthread_join(grabthread, NULL);
|
pthread_join(grabthread, NULL);
|
||||||
grabthread = 0;
|
grabthread = 0;
|
||||||
}
|
}
|
||||||
DBG("Killed");
|
DBG("OK");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
if(!grabthread){ // start new grab
|
if(!grabthread){ // start new grab
|
||||||
DBG("\n\n\nStart new grab");
|
if(GP->viewer){
|
||||||
if(pthread_create(&grabthread, NULL, &grabnext, NULL)){
|
DBG("\n\n\nStart new waiting");
|
||||||
WARN("Can't create grabbing thread");
|
if(pthread_create(&grabthread, NULL, &waitimage, NULL)){
|
||||||
grabthread = 0;
|
WARN("Can't create waiting thread");
|
||||||
}
|
grabthread = 0;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
DBG("\n\n\nStart new grab");
|
||||||
|
if(pthread_create(&grabthread, NULL, &grabnext, NULL)){
|
||||||
|
WARN("Can't create grabbing thread");
|
||||||
|
grabthread = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}else{ // grab in process
|
}else{ // grab in process
|
||||||
if(grabends){ // image is ready
|
if(grabends){ // image is ready
|
||||||
DBG("Image ready");
|
DBG("Image ready");
|
||||||
|
grabthread = 0;
|
||||||
if(*imgptr && (*imgptr != &ima)) free(*imgptr);
|
if(*imgptr && (*imgptr != &ima)) free(*imgptr);
|
||||||
*imgptr = &ima;
|
*imgptr = &ima;
|
||||||
grabends = 0;
|
grabends = 0;
|
||||||
|
|||||||
@ -101,6 +101,7 @@ myoption cmdlnopts[] = {
|
|||||||
{"path", NEED_ARG, NULL, 0, arg_string, APTR(&G.path), N_("UNIX socket name")},
|
{"path", NEED_ARG, NULL, 0, arg_string, APTR(&G.path), N_("UNIX socket name")},
|
||||||
{"port", NEED_ARG, NULL, 0, arg_string, APTR(&G.port), N_("local INET socket port")},
|
{"port", NEED_ARG, NULL, 0, arg_string, APTR(&G.port), N_("local INET socket port")},
|
||||||
{"client", NO_ARGS, &G.client,1, arg_none, NULL, N_("run as client")},
|
{"client", NO_ARGS, &G.client,1, arg_none, NULL, N_("run as client")},
|
||||||
|
{"viewer", NO_ARGS, &G.viewer,1, arg_none, NULL, N_("passive viewer (only get last images)")},
|
||||||
{"pidfile", NEED_ARG, NULL, 0, arg_string, APTR(&G.pidfile), N_("PID file (default: " DEFAULT_PID_FILE ")")},
|
{"pidfile", NEED_ARG, NULL, 0, arg_string, APTR(&G.pidfile), N_("PID file (default: " DEFAULT_PID_FILE ")")},
|
||||||
{"restart", NO_ARGS, &G.restart,1, arg_none, NULL, N_("restart image server")},
|
{"restart", NO_ARGS, &G.restart,1, arg_none, NULL, N_("restart image server")},
|
||||||
|
|
||||||
|
|||||||
@ -42,8 +42,9 @@ typedef struct{
|
|||||||
char **addhdr; // list of files from which to add header records
|
char **addhdr; // list of files from which to add header records
|
||||||
int restart; // restart server
|
int restart; // restart server
|
||||||
int waitexpend; // wait while exposition ends
|
int waitexpend; // wait while exposition ends
|
||||||
int cancelexpose; // cancel exp
|
int cancelexpose; // cancel exp (for Grasshopper - forbid forever)
|
||||||
int client; // run as client
|
int client; // run as client
|
||||||
|
int viewer; // passive client (only get last images)
|
||||||
int listdevices; // list connected devices
|
int listdevices; // list connected devices
|
||||||
int fanspeed; // fan speed: 0-2
|
int fanspeed; // fan speed: 0-2
|
||||||
int noflush; // turn off bg flushing
|
int noflush; // turn off bg flushing
|
||||||
|
|||||||
@ -518,11 +518,11 @@ void closeGL(){
|
|||||||
usleep(1000);
|
usleep(1000);
|
||||||
if(!initialized) return;
|
if(!initialized) return;
|
||||||
initialized = 0;
|
initialized = 0;
|
||||||
cancel(); // cancel expositions
|
camstop(); // cancel expositions
|
||||||
|
//DBG("Leave mainloop");
|
||||||
|
//glutLeaveMainLoop();
|
||||||
DBG("kill");
|
DBG("kill");
|
||||||
killwindow();
|
killwindow();
|
||||||
DBG("Leave mainloop");
|
|
||||||
glutLeaveMainLoop();
|
|
||||||
DBG("join");
|
DBG("join");
|
||||||
if(GLUTthread) pthread_join(GLUTthread, NULL); // wait while main thread exits
|
if(GLUTthread) pthread_join(GLUTthread, NULL); // wait while main thread exits
|
||||||
DBG("main GL thread cancelled");
|
DBG("main GL thread cancelled");
|
||||||
|
|||||||
@ -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-02 12:50+0300\n"
|
"POT-Creation-Date: 2023-04-04 18:42+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"
|
||||||
@ -234,14 +234,18 @@ msgid "run as client"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: cmdlnopts.c:104
|
#: cmdlnopts.c:104
|
||||||
msgid "PID file (default: "
|
msgid "passive viewer (only get last images)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: cmdlnopts.c:105
|
#: cmdlnopts.c:105
|
||||||
|
msgid "PID file (default: "
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: cmdlnopts.c:106
|
||||||
msgid "restart image server"
|
msgid "restart image server"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: cmdlnopts.c:108
|
#: cmdlnopts.c:109
|
||||||
msgid "Display image in OpenGL window"
|
msgid "Display image in OpenGL window"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -474,88 +478,88 @@ msgstr ""
|
|||||||
msgid "Can't set brightness to %g"
|
msgid "Can't set brightness to %g"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ccdfunc.c:726 server.c:229
|
#: ccdfunc.c:724 server.c:228
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Can't set binning %dx%d"
|
msgid "Can't set binning %dx%d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ccdfunc.c:738 server.c:230
|
#: ccdfunc.c:736 server.c:229
|
||||||
msgid "Can't set given geometry"
|
msgid "Can't set given geometry"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ccdfunc.c:742
|
#: ccdfunc.c:740
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Can't set %d flushes"
|
msgid "Can't set %d flushes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ccdfunc.c:746
|
#: ccdfunc.c:744
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Can't set exposure time to %f seconds"
|
msgid "Can't set exposure time to %f seconds"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ccdfunc.c:749
|
#: ccdfunc.c:747
|
||||||
msgid "Can't change frame type"
|
msgid "Can't change frame type"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ccdfunc.c:752
|
#: ccdfunc.c:750
|
||||||
msgid "Can't set bit depth"
|
msgid "Can't set bit depth"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ccdfunc.c:754
|
#: ccdfunc.c:752
|
||||||
msgid "Can't set readout speed"
|
msgid "Can't set readout speed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ccdfunc.c:755
|
#: ccdfunc.c:753
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Readout mode: %s"
|
msgid "Readout mode: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ccdfunc.c:756
|
#: ccdfunc.c:754
|
||||||
msgid "Only show statistics"
|
msgid "Only show statistics"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. GET binning should be AFTER setgeometry!
|
#. GET binning should be AFTER setgeometry!
|
||||||
#: ccdfunc.c:758
|
#: ccdfunc.c:756
|
||||||
msgid "Can't get current binning"
|
msgid "Can't get current binning"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Захват кадра %d\n
|
#. Захват кадра %d\n
|
||||||
#: ccdfunc.c:780
|
#: ccdfunc.c:778
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Capture frame %d"
|
msgid "Capture frame %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ccdfunc.c:782 ccdfunc.c:832 server.c:124
|
#: ccdfunc.c:780 ccdfunc.c:832 server.c:123
|
||||||
msgid "Can't start exposition"
|
msgid "Can't start exposition"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ccdfunc.c:786
|
#: ccdfunc.c:784
|
||||||
msgid "Can't capture image"
|
msgid "Can't capture image"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ccdfunc.c:789
|
#: ccdfunc.c:787
|
||||||
msgid "Read grabbed image"
|
msgid "Read grabbed image"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ccdfunc.c:792 ccdfunc.c:840
|
#: ccdfunc.c:790 ccdfunc.c:840
|
||||||
msgid "Can't grab image"
|
msgid "Can't grab image"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. %d секунд до окончания паузы\n
|
#. %d секунд до окончания паузы\n
|
||||||
#: ccdfunc.c:801 client.c:282
|
#: ccdfunc.c:799 client.c:289
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d seconds till pause ends\n"
|
msgid "%d seconds till pause ends\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: server.c:167
|
#: server.c:166
|
||||||
msgid "No camera device"
|
msgid "No camera device"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: client.c:269
|
#: client.c:276
|
||||||
msgid "Can't make exposition"
|
msgid "Can't make exposition"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: client.c:298
|
#: client.c:305
|
||||||
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-02 12:50+0300\n"
|
"POT-Creation-Date: 2023-04-04 18:23+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 я│п╣п╨я┐п╫п╢ п╢п╬ п╬п╨п╬п╫я┤п╟п╫п╦я▐ п©п╟я┐п╥я▀\n
|
#. %d я│п╣п╨я┐п╫п╢ п╢п╬ п╬п╨п╬п╫я┤п╟п╫п╦я▐ п©п╟я┐п╥я▀\n
|
||||||
#: ccdfunc.c:801 client.c:282
|
#: ccdfunc.c:799 client.c:289
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d seconds till pause ends\n"
|
msgid "%d seconds till pause ends\n"
|
||||||
msgstr "%d секунд до окончания паузы\n"
|
msgstr "%d секунд до окончания паузы\n"
|
||||||
@ -52,11 +52,11 @@ msgstr "
|
|||||||
msgid "Camera model: %s"
|
msgid "Camera model: %s"
|
||||||
msgstr "Модель светоприемника: %s"
|
msgstr "Модель светоприемника: %s"
|
||||||
|
|
||||||
#: ccdfunc.c:786
|
#: ccdfunc.c:784
|
||||||
msgid "Can't capture image"
|
msgid "Can't capture image"
|
||||||
msgstr "Не могу захватить изображение"
|
msgstr "Не могу захватить изображение"
|
||||||
|
|
||||||
#: ccdfunc.c:749
|
#: ccdfunc.c:747
|
||||||
msgid "Can't change frame type"
|
msgid "Can't change frame type"
|
||||||
msgstr "Не могу изменить тип кадра"
|
msgstr "Не могу изменить тип кадра"
|
||||||
|
|
||||||
@ -89,7 +89,7 @@ msgid "Can't get IOport state (unsupported?)"
|
|||||||
msgstr "Не могу получить состояние порта I/O (не поддерживается?)"
|
msgstr "Не могу получить состояние порта I/O (не поддерживается?)"
|
||||||
|
|
||||||
#. GET binning should be AFTER setgeometry!
|
#. GET binning should be AFTER setgeometry!
|
||||||
#: ccdfunc.c:758
|
#: ccdfunc.c:756
|
||||||
msgid "Can't get current binning"
|
msgid "Can't get current binning"
|
||||||
msgstr "Не могу получить текущее значение биннинга"
|
msgstr "Не могу получить текущее значение биннинга"
|
||||||
|
|
||||||
@ -105,7 +105,7 @@ msgstr "
|
|||||||
msgid "Can't get max wheel position"
|
msgid "Can't get max wheel position"
|
||||||
msgstr "Не могу определить предельную позицию колеса"
|
msgstr "Не могу определить предельную позицию колеса"
|
||||||
|
|
||||||
#: ccdfunc.c:792 ccdfunc.c:840
|
#: ccdfunc.c:790 ccdfunc.c:840
|
||||||
msgid "Can't grab image"
|
msgid "Can't grab image"
|
||||||
msgstr "Не могу захватить изображение"
|
msgstr "Не могу захватить изображение"
|
||||||
|
|
||||||
@ -117,7 +117,7 @@ msgstr "
|
|||||||
msgid "Can't init mutex!"
|
msgid "Can't init mutex!"
|
||||||
msgstr "Не могу инициализировать мьютекс!"
|
msgstr "Не могу инициализировать мьютекс!"
|
||||||
|
|
||||||
#: client.c:269
|
#: client.c:276
|
||||||
msgid "Can't make exposition"
|
msgid "Can't make exposition"
|
||||||
msgstr "Не могу выполнить экспозицию"
|
msgstr "Не могу выполнить экспозицию"
|
||||||
|
|
||||||
@ -136,7 +136,7 @@ msgstr "
|
|||||||
msgid "Can't save file with prefix %s"
|
msgid "Can't save file with prefix %s"
|
||||||
msgstr "Не могу сохранить файл с префиксом %s"
|
msgstr "Не могу сохранить файл с префиксом %s"
|
||||||
|
|
||||||
#: ccdfunc.c:742
|
#: ccdfunc.c:740
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Can't set %d flushes"
|
msgid "Can't set %d flushes"
|
||||||
msgstr "Не могу установить %d сбросов"
|
msgstr "Не могу установить %d сбросов"
|
||||||
@ -162,12 +162,12 @@ msgstr "
|
|||||||
msgid "Can't set active wheel number"
|
msgid "Can't set active wheel number"
|
||||||
msgstr "Не могу установить номер активного колеса"
|
msgstr "Не могу установить номер активного колеса"
|
||||||
|
|
||||||
#: ccdfunc.c:726 server.c:229
|
#: ccdfunc.c:724 server.c:228
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Can't set binning %dx%d"
|
msgid "Can't set binning %dx%d"
|
||||||
msgstr "Не могу установить биннинг %dx%d"
|
msgstr "Не могу установить биннинг %dx%d"
|
||||||
|
|
||||||
#: ccdfunc.c:752
|
#: ccdfunc.c:750
|
||||||
msgid "Can't set bit depth"
|
msgid "Can't set bit depth"
|
||||||
msgstr "Не могу установить разрядность АЦП"
|
msgstr "Не могу установить разрядность АЦП"
|
||||||
|
|
||||||
@ -176,7 +176,7 @@ msgstr "
|
|||||||
msgid "Can't set brightness to %g"
|
msgid "Can't set brightness to %g"
|
||||||
msgstr "Не могу установить яркость в %g"
|
msgstr "Не могу установить яркость в %g"
|
||||||
|
|
||||||
#: ccdfunc.c:746
|
#: ccdfunc.c:744
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Can't set exposure time to %f seconds"
|
msgid "Can't set exposure time to %f seconds"
|
||||||
msgstr "Не могу установить экспозицию в %f секунд"
|
msgstr "Не могу установить экспозицию в %f секунд"
|
||||||
@ -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:738 server.c:230
|
#: ccdfunc.c:736 server.c:229
|
||||||
msgid "Can't set given geometry"
|
msgid "Can't set given geometry"
|
||||||
msgstr "Не могу установить геометрию"
|
msgstr "Не могу установить геометрию"
|
||||||
|
|
||||||
@ -204,7 +204,7 @@ msgstr "
|
|||||||
msgid "Can't set position %g: out of limits [%g, %g]"
|
msgid "Can't set position %g: out of limits [%g, %g]"
|
||||||
msgstr "Не могу установить позицию %g: вне пределов [%g, %g]"
|
msgstr "Не могу установить позицию %g: вне пределов [%g, %g]"
|
||||||
|
|
||||||
#: ccdfunc.c:754
|
#: ccdfunc.c:752
|
||||||
msgid "Can't set readout speed"
|
msgid "Can't set readout speed"
|
||||||
msgstr "Не могу установить скорость считывания"
|
msgstr "Не могу установить скорость считывания"
|
||||||
|
|
||||||
@ -213,12 +213,12 @@ msgstr "
|
|||||||
msgid "Can't set wheel position %d"
|
msgid "Can't set wheel position %d"
|
||||||
msgstr "Не могу установить положение колеса %d"
|
msgstr "Не могу установить положение колеса %d"
|
||||||
|
|
||||||
#: ccdfunc.c:782 ccdfunc.c:832 server.c:124
|
#: ccdfunc.c:780 ccdfunc.c:832 server.c:123
|
||||||
msgid "Can't start exposition"
|
msgid "Can't start exposition"
|
||||||
msgstr "Не могу начать экспозицию"
|
msgstr "Не могу начать экспозицию"
|
||||||
|
|
||||||
#. п≈п╟я┘п╡п╟я┌ п╨п╟п╢я─п╟ %d\n
|
#. п≈п╟я┘п╡п╟я┌ п╨п╟п╢я─п╟ %d\n
|
||||||
#: ccdfunc.c:780
|
#: ccdfunc.c:778
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Capture frame %d"
|
msgid "Capture frame %d"
|
||||||
msgstr "Захват кадра %d"
|
msgstr "Захват кадра %d"
|
||||||
@ -228,7 +228,7 @@ msgstr "
|
|||||||
msgid "Current format: %s"
|
msgid "Current format: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: cmdlnopts.c:108
|
#: cmdlnopts.c:109
|
||||||
msgid "Display image in OpenGL window"
|
msgid "Display image in OpenGL window"
|
||||||
msgstr "Отображение изображения в окне OpenGL"
|
msgstr "Отображение изображения в окне OpenGL"
|
||||||
|
|
||||||
@ -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:167
|
#: server.c:166
|
||||||
msgid "No camera device"
|
msgid "No camera device"
|
||||||
msgstr "Не указано устройство камеры"
|
msgstr "Не указано устройство камеры"
|
||||||
|
|
||||||
@ -305,11 +305,11 @@ msgstr "
|
|||||||
msgid "No wheels found"
|
msgid "No wheels found"
|
||||||
msgstr "Турелей не обнаружено"
|
msgstr "Турелей не обнаружено"
|
||||||
|
|
||||||
#: ccdfunc.c:756
|
#: ccdfunc.c:754
|
||||||
msgid "Only show statistics"
|
msgid "Only show statistics"
|
||||||
msgstr "Только отобразить статистику"
|
msgstr "Только отобразить статистику"
|
||||||
|
|
||||||
#: cmdlnopts.c:104
|
#: cmdlnopts.c:105
|
||||||
msgid "PID file (default: "
|
msgid "PID file (default: "
|
||||||
msgstr "PID-файл (по умолчанию: "
|
msgstr "PID-файл (по умолчанию: "
|
||||||
|
|
||||||
@ -318,16 +318,16 @@ msgstr "PID-
|
|||||||
msgid "Pixel size: %g x %g"
|
msgid "Pixel size: %g x %g"
|
||||||
msgstr "Размер пикселя: %g x %g"
|
msgstr "Размер пикселя: %g x %g"
|
||||||
|
|
||||||
#: ccdfunc.c:789
|
#: ccdfunc.c:787
|
||||||
msgid "Read grabbed image"
|
msgid "Read grabbed image"
|
||||||
msgstr "Считывание изображения"
|
msgstr "Считывание изображения"
|
||||||
|
|
||||||
#: ccdfunc.c:755
|
#: ccdfunc.c:753
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Readout mode: %s"
|
msgid "Readout mode: %s"
|
||||||
msgstr "Режим считывания: %s"
|
msgstr "Режим считывания: %s"
|
||||||
|
|
||||||
#: client.c:298
|
#: client.c:305
|
||||||
msgid "Server timeout"
|
msgid "Server timeout"
|
||||||
msgstr "Таймаут сервера"
|
msgstr "Таймаут сервера"
|
||||||
|
|
||||||
@ -521,11 +521,15 @@ msgstr "
|
|||||||
msgid "output file name"
|
msgid "output file name"
|
||||||
msgstr "имя файла"
|
msgstr "имя файла"
|
||||||
|
|
||||||
|
#: cmdlnopts.c:104
|
||||||
|
msgid "passive viewer (only get last images)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: cmdlnopts.c:60
|
#: cmdlnopts.c:60
|
||||||
msgid "program author"
|
msgid "program author"
|
||||||
msgstr "автор программы"
|
msgstr "автор программы"
|
||||||
|
|
||||||
#: cmdlnopts.c:105
|
#: cmdlnopts.c:106
|
||||||
msgid "restart image server"
|
msgid "restart image server"
|
||||||
msgstr "перезапуск сервера"
|
msgstr "перезапуск сервера"
|
||||||
|
|
||||||
|
|||||||
13
main.c
13
main.c
@ -58,17 +58,16 @@ void signals(int signo){
|
|||||||
// slave: cancel exposition
|
// slave: cancel exposition
|
||||||
if(signo) WARNX("Get signal %d - exit", signo);
|
if(signo) WARNX("Get signal %d - exit", signo);
|
||||||
if(!GP->client){
|
if(!GP->client){
|
||||||
DBG("Cancel capturing");
|
DBG("Cancel capturing and close all");
|
||||||
cancel();
|
camstop();
|
||||||
|
closewheel();
|
||||||
|
focclose();
|
||||||
}
|
}
|
||||||
#ifdef IMAGEVIEW
|
#ifdef IMAGEVIEW
|
||||||
DBG("KILL GL");
|
DBG("KILL GL");
|
||||||
closeGL();
|
closeGL();
|
||||||
usleep(10000);
|
usleep(10000);
|
||||||
#endif
|
#endif
|
||||||
closewheel();
|
|
||||||
focclose();
|
|
||||||
closecam();
|
|
||||||
exit(signo);
|
exit(signo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,6 +86,10 @@ int main(int argc, char **argv){
|
|||||||
omp_set_num_threads(cpunumber);
|
omp_set_num_threads(cpunumber);
|
||||||
*/
|
*/
|
||||||
parse_args(argc, argv);
|
parse_args(argc, argv);
|
||||||
|
if(GP->viewer){
|
||||||
|
GP->client = 1;
|
||||||
|
GP->showimage = 1;
|
||||||
|
}
|
||||||
if(GP->outfile && GP->outfileprefix) ERRX("Can't use outfile name and prefix together");
|
if(GP->outfile && GP->outfileprefix) ERRX("Can't use outfile name and prefix together");
|
||||||
if(GP->outfile && !GP->rewrite){
|
if(GP->outfile && !GP->rewrite){
|
||||||
struct stat filestat;
|
struct stat filestat;
|
||||||
|
|||||||
14
server.c
14
server.c
@ -117,7 +117,6 @@ static inline void cameraidlestate(){ // idle - wait for capture commands
|
|||||||
DBG("Start exposition");
|
DBG("Start exposition");
|
||||||
camflags &= ~(FLAG_STARTCAPTURE | FLAG_CANCEL);
|
camflags &= ~(FLAG_STARTCAPTURE | FLAG_CANCEL);
|
||||||
camstate = CAMERA_CAPTURE;
|
camstate = CAMERA_CAPTURE;
|
||||||
camera->cancel();
|
|
||||||
fixima();
|
fixima();
|
||||||
if(!camera->startexposition()){
|
if(!camera->startexposition()){
|
||||||
LOGERR("Can't start exposition");
|
LOGERR("Can't start exposition");
|
||||||
@ -515,9 +514,16 @@ static hresult brightnesshandler(_U_ int fd, _U_ const char *key, _U_ const char
|
|||||||
static hresult formathandler(int fd, const char *key, const char *val){
|
static hresult formathandler(int fd, const char *key, const char *val){
|
||||||
char buf[64];
|
char buf[64];
|
||||||
frameformat fmt;
|
frameformat fmt;
|
||||||
|
DBG("key=%s, val=%s", key, val);
|
||||||
if(val){
|
if(val){
|
||||||
if(0 == strcmp(key, CMD_FRAMEMAX)) return RESULT_BADKEY; // can't set maxformat
|
if(0 == strcmp(key, CMD_FRAMEMAX)){
|
||||||
if(4 != sscanf(val, "%d,%d,%d,%d", &fmt.xoff, &fmt.yoff, &fmt.w, &fmt.h)) return RESULT_BADVAL;
|
DBG("CANT SET MAXFORMAT");
|
||||||
|
return RESULT_BADKEY; // can't set maxformat
|
||||||
|
}
|
||||||
|
if(4 != sscanf(val, "%d,%d,%d,%d", &fmt.xoff, &fmt.yoff, &fmt.w, &fmt.h)){
|
||||||
|
DBG("Wrong format %s", val);
|
||||||
|
return RESULT_BADVAL;
|
||||||
|
}
|
||||||
fmt.w -= fmt.xoff; fmt.h -= fmt.yoff;
|
fmt.w -= fmt.xoff; fmt.h -= fmt.yoff;
|
||||||
int r = camera->setgeometry(&fmt);
|
int r = camera->setgeometry(&fmt);
|
||||||
if(!r) return RESULT_FAIL;
|
if(!r) return RESULT_FAIL;
|
||||||
@ -894,7 +900,7 @@ static hresult imsizehandler(int fd, const char *key, _U_ const char *val){
|
|||||||
if(0 == strcmp(key, CMD_IMHEIGHT)) snprintf(buf, 63, CMD_IMHEIGHT "=%d", ima.h);
|
if(0 == strcmp(key, CMD_IMHEIGHT)) snprintf(buf, 63, CMD_IMHEIGHT "=%d", ima.h);
|
||||||
else snprintf(buf, 63, CMD_IMWIDTH "=%d", ima.w);
|
else snprintf(buf, 63, CMD_IMWIDTH "=%d", ima.w);
|
||||||
if(!sendstrmessage(fd, buf)) return RESULT_DISCONNECTED;
|
if(!sendstrmessage(fd, buf)) return RESULT_DISCONNECTED;
|
||||||
return RESULT_OK;
|
return RESULT_SILENCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// for setters: do nothing when camera not in idle state
|
// for setters: do nothing when camera not in idle state
|
||||||
|
|||||||
2
socket.c
2
socket.c
@ -120,6 +120,7 @@ int start_socket(int isserver, char *path, int isnet){
|
|||||||
else{
|
else{
|
||||||
#ifdef IMAGEVIEW
|
#ifdef IMAGEVIEW
|
||||||
if(GP->showimage){
|
if(GP->showimage){
|
||||||
|
if(!GP->viewer && GP->exptime < 0.00001) ERRX("Need exposition time!");
|
||||||
init_grab_sock(sock);
|
init_grab_sock(sock);
|
||||||
viewer(sockcaptured); // start viewer with socket client parser
|
viewer(sockcaptured); // start viewer with socket client parser
|
||||||
}else
|
}else
|
||||||
@ -256,6 +257,7 @@ static int parsestring(int fd, handleritem *handlers, char *str){
|
|||||||
return sendstrmessage(fd, hresult2str(r));
|
return sendstrmessage(fd, hresult2str(r));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
DBG("Command not found!");
|
||||||
return sendstrmessage(fd, resmessages[RESULT_BADKEY]);
|
return sendstrmessage(fd, resmessages[RESULT_BADKEY]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
4
socket.h
4
socket.h
@ -29,13 +29,13 @@
|
|||||||
#define MAXCLIENTS (30)
|
#define MAXCLIENTS (30)
|
||||||
|
|
||||||
// wait for mutex locking
|
// wait for mutex locking
|
||||||
#define BUSY_TIMEOUT (0.3)
|
#define BUSY_TIMEOUT (0.1)
|
||||||
// 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)
|
||||||
#define WAIT_TIMEOUT (2.0)
|
#define WAIT_TIMEOUT (2.0)
|
||||||
// client will disconnect after this time from last server message
|
// client will disconnect after this time from last server message
|
||||||
#define CLIENT_TIMEOUT (10.0)
|
#define CLIENT_TIMEOUT (3.0)
|
||||||
|
|
||||||
extern pthread_mutex_t locmutex;
|
extern pthread_mutex_t locmutex;
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user