mirror of
https://github.com/eddyem/CCD_Capture.git
synced 2025-12-06 10:45:13 +03:00
shm to client; TODO: check new image by timestamp, not by control socket messages
This commit is contained in:
parent
8132c07479
commit
cfa057d0c1
@ -69,20 +69,24 @@ static int startexp(){
|
||||
static int camcapt(IMG *ima){
|
||||
static int n = 0;
|
||||
if(!ima || !ima->data) return FALSE;
|
||||
#ifdef EBUG
|
||||
double t0 = dtime();
|
||||
#endif
|
||||
int y1 = ima->h * curvbin, x1 = ima->w * curhbin;
|
||||
if(bitpix == 16){
|
||||
OMP_FOR()
|
||||
for(int y = 0; y < ima->h; ++y){
|
||||
uint16_t *d = &((uint16_t*)ima->data)[y*ima->w];
|
||||
for(int x = 0; x < ima->w; ++x){ // sinusoide 100x200
|
||||
for(int y = 0; y < y1; y += curvbin){
|
||||
uint16_t *d = &((uint16_t*)ima->data)[y*ima->w/curvbin];
|
||||
for(int x = 0; x < x1; x += curhbin){ // sinusoide 100x200
|
||||
//*d++ = (uint16_t)(((n+x)%100)/99.*65535.);
|
||||
*d++ = (uint16_t)((1. + sin((n+x) * M_PI/50.)*sin((n+y) * M_PI/100.))*32767.);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
OMP_FOR()
|
||||
for(int y = 0; y < ima->h; ++y){
|
||||
uint8_t *d = &((uint8_t*)ima->data)[y*ima->w];
|
||||
for(int x = 0; x < ima->w; ++x){ // sinusoide 100x200
|
||||
for(int y = 0; y < y1; y += curvbin){
|
||||
uint8_t *d = &((uint8_t*)ima->data)[y*ima->w/curvbin];
|
||||
for(int x = 0; x < x1; x += curhbin){ // sinusoide 100x200
|
||||
//*d++ = (uint16_t)(((n+x)%100)/99.*65535.);
|
||||
*d++ = (uint8_t)((1. + sin((n+x) * M_PI/50.)*sin((n+y) * M_PI/100.))*127.);
|
||||
}
|
||||
@ -90,6 +94,7 @@ static int camcapt(IMG *ima){
|
||||
}
|
||||
++n;
|
||||
ima->bitpix = bitpix;
|
||||
DBG("Time of capture: %g", dtime() - t0);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@ -31,7 +31,7 @@ typedef struct __attribute__((packed, aligned(4))){
|
||||
int w, h; // image size
|
||||
uint16_t max, min; // min/max values
|
||||
float avr, std; // statistics
|
||||
size_t bytelen; // size of image in bytes
|
||||
size_t bytelen; // size of image in bytes
|
||||
void *data; // pointer to data (next byte after this struct) - only for server
|
||||
/* `data` is uint8_t or uint16_t depending on `bitpix` */
|
||||
} IMG;
|
||||
|
||||
@ -210,6 +210,8 @@ int saveFITS(IMG *img, char **outp){
|
||||
LOGERR("Can't save image with prefix %s", GP->outfileprefix);
|
||||
}
|
||||
}
|
||||
calculate_stat(img);
|
||||
|
||||
int width = img->w, height = img->h;
|
||||
long naxes[2] = {width, height};
|
||||
double tmpd = 0.0;
|
||||
@ -283,6 +285,7 @@ int saveFITS(IMG *img, char **outp){
|
||||
tm_time = localtime(&savetime);
|
||||
strftime(bufc, FLEN_VALUE, "File creation time (UNIX)", tm_time);
|
||||
WRITEKEY(fp, TDOUBLE, "UNIXTIME", &dsavetime, bufc);
|
||||
WRITEKEY(fp, TDOUBLE, "TIMESTAM", &img->timestamp, "Time of acquisition end");
|
||||
strftime(bufc, 80, "%Y/%m/%d", tm_time);
|
||||
// DATE-OBS / DATE (YYYY/MM/DD) OF OBS.
|
||||
WRITEKEY(fp, TSTRING, "DATE-OBS", bufc, "DATE OF OBS. (YYYY/MM/DD, local)");
|
||||
|
||||
70
client.c
70
client.c
@ -44,9 +44,10 @@ static int xm0,ym0,xm1,ym1; // max format
|
||||
static int xc0,yc0,xc1,yc1; // current format
|
||||
|
||||
#ifdef IMAGEVIEW
|
||||
static IMG ima = {0};
|
||||
static volatile atomic_int grabno = 0, oldgrabno = 0;
|
||||
static size_t imbufsz = 0;
|
||||
// IPC key for shared memory
|
||||
static IMG ima = {0}, *shmima = NULL; // ima - local storage, shmima - shm (if available)
|
||||
static size_t imbufsz = 0; // image buffer for allocated `ima`
|
||||
static uint8_t *imbuf = NULL;
|
||||
#endif
|
||||
|
||||
@ -196,7 +197,7 @@ static void send_headers(int sock){
|
||||
if(!isnan(GP->gain)) SENDMSGW(CMD_GAIN, "=%g", GP->gain);
|
||||
if(!isnan(GP->brightness)) SENDMSGW(CMD_BRIGHTNESS, "=%g", GP->brightness);
|
||||
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->exptime > -DBL_EPSILON){ // exposition and reading control: only if start of exposition
|
||||
if(GP->_8bit) SENDMSGW(CMD_8BIT, "=1");
|
||||
else SENDMSGW(CMD_8BIT, "=0");
|
||||
if(GP->fast) SENDMSGW(CMD_FASTSPD, "=1");
|
||||
@ -278,8 +279,10 @@ void client(int sock){
|
||||
WARNX(_("Can't make exposition"));
|
||||
continue;
|
||||
}
|
||||
if(expstate != CAMERA_CAPTURE){
|
||||
//if(expstate != CAMERA_CAPTURE){
|
||||
if(expstate == CAMERA_FRAMERDY){
|
||||
verbose(2, "Frame ready!");
|
||||
expstate = CAMERA_IDLE;
|
||||
if(Nremain){
|
||||
verbose(1, "\n");
|
||||
if(GP->pause_len > 0){
|
||||
@ -299,7 +302,7 @@ void client(int sock){
|
||||
SENDMSGW(CMD_EXPSTATE, "=%d", CAMERA_CAPTURE);
|
||||
}else{
|
||||
GP->waitexpend = 0;
|
||||
timeout = WAIT_TIMEOUT; // wait for last file name
|
||||
timeout = ANSWER_TIMEOUT; // wait for last file name
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -309,11 +312,14 @@ void client(int sock){
|
||||
}
|
||||
|
||||
#ifdef IMAGEVIEW
|
||||
static int controlfd = -1;
|
||||
static int controlfd = -1; // control socket FD
|
||||
void init_grab_sock(int sock){
|
||||
if(sock < 0) ERRX("Can't run without command socket");
|
||||
controlfd = sock;
|
||||
send_headers(sock);
|
||||
if(!GP->forceimsock && !shmima){ // init shm buffer if user don't ask to work through image socket
|
||||
shmima = getshm(GP->shmkey, 0); // try to init client shm
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -323,7 +329,7 @@ void init_grab_sock(int sock){
|
||||
static int readNbytes(int fd, size_t N, uint8_t *buf){
|
||||
size_t got = 0, need = N;
|
||||
double t0 = dtime();
|
||||
while(dtime() - t0 < CLIENT_TIMEOUT && canberead(fd) && need){
|
||||
while(dtime() - t0 < CLIENT_TIMEOUT /*&& canberead(fd)*/ && need){
|
||||
ssize_t rd = read(fd, buf + got, need);
|
||||
if(rd <= 0){
|
||||
WARNX("Server disconnected");
|
||||
@ -335,22 +341,33 @@ static int readNbytes(int fd, size_t N, uint8_t *buf){
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief getimage - read image from shared memory or socket
|
||||
*/
|
||||
static void getimage(){
|
||||
FNAME();
|
||||
int imsock = -1;
|
||||
static double oldtimestamp = -1.;
|
||||
TIMESTAMP("Get image sizes");
|
||||
/*SENDCMDW(CMD_IMWIDTH);
|
||||
SENDCMDW(CMD_IMHEIGHT);*/
|
||||
int imsock = open_socket(FALSE, GP->imageport, TRUE);
|
||||
if(imsock < 0) ERRX("getimage(): can't open image transport socket");
|
||||
// get image size
|
||||
if(!readNbytes(imsock, sizeof(IMG), (uint8_t*)&ima)){
|
||||
WARNX("Can't read image header");
|
||||
goto eofg;
|
||||
if(shmima){ // read image from shared memory
|
||||
memcpy(&ima, shmima, sizeof(IMG));
|
||||
}else{ // get image by socket
|
||||
imsock = open_socket(FALSE, GP->imageport, TRUE);
|
||||
if(imsock < 0) ERRX("getimage(): can't open image transport socket");
|
||||
// get image size
|
||||
if(!readNbytes(imsock, sizeof(IMG), (uint8_t*)&ima)){
|
||||
WARNX("Can't read image header");
|
||||
goto eofg;
|
||||
}
|
||||
}
|
||||
if(ima.bytelen < 1){
|
||||
WARNX("Wrong image size");
|
||||
goto eofg;
|
||||
}
|
||||
DBG("bytelen=%zd, w=%d, h=%d; bitpix=%d", ima.bytelen, ima.w, ima.h, ima.bitpix);
|
||||
// realloc memory if needed
|
||||
if(imbufsz < ima.bytelen){
|
||||
size_t newsz = 1024 * (1 + ima.bytelen / 1024);
|
||||
DBG("Reallocate memory from %zd to %zd", imbufsz, newsz);
|
||||
@ -359,14 +376,24 @@ static void getimage(){
|
||||
}
|
||||
ima.data = imbuf; // renew this value each time after getting `ima` from server
|
||||
TIMESTAMP("Start of data read");
|
||||
if(!readNbytes(imsock, ima.bytelen, imbuf)){
|
||||
WARNX("Can't read image data");
|
||||
goto eofg;
|
||||
if(shmima){
|
||||
uint8_t *datastart = (uint8_t*)shmima + sizeof(IMG);
|
||||
memcpy(imbuf, datastart, ima.bytelen);
|
||||
TIMESTAMP("Got by shared memory");
|
||||
}else{
|
||||
if(!readNbytes(imsock, ima.bytelen, imbuf)){
|
||||
WARNX("Can't read image data");
|
||||
goto eofg;
|
||||
}
|
||||
TIMESTAMP("Got by socket");
|
||||
}
|
||||
TIMESTAMP("Got image");
|
||||
++grabno;
|
||||
if(ima.timestamp != oldtimestamp){ // test if image is really new
|
||||
oldtimestamp = ima.timestamp;
|
||||
TIMESTAMP("Got image");
|
||||
++grabno;
|
||||
}else WARNX("Still got old image");
|
||||
eofg:
|
||||
close(imsock);
|
||||
if(!shmima) close(imsock);
|
||||
}
|
||||
|
||||
static void *grabnext(void _U_ *arg){ // daemon grabbing images through the net
|
||||
@ -374,7 +401,6 @@ static void *grabnext(void _U_ *arg){ // daemon grabbing images through the net
|
||||
if(controlfd < 0) return NULL;
|
||||
int sock = controlfd;
|
||||
while(1){
|
||||
DBG("xx");
|
||||
if(!getWin()) exit(1);
|
||||
expstate = CAMERA_CAPTURE;
|
||||
TIMESTAMP("End of cycle, start new #%d", grabno+1);
|
||||
@ -386,13 +412,15 @@ static void *grabnext(void _U_ *arg){ // daemon grabbing images through the net
|
||||
sleept = (useconds_t)(GP->exptime * 500000.);
|
||||
if(sleept < 1000) sleept = 1000;
|
||||
}
|
||||
// double exptime = GP->exptime;
|
||||
while(dtime() - t0 < timeout){
|
||||
TIMESTAMP("Wait for exposition ends");
|
||||
TIMESTAMP("Wait for exposition ends (%u us)", sleept);
|
||||
usleep(sleept);
|
||||
TIMESTAMP("check answer");
|
||||
getans(sock, NULL);
|
||||
//TIMESTAMP("EXPSTATE ===> %d", expstate);
|
||||
if(expstate != CAMERA_CAPTURE) break;
|
||||
if(dtime() - t0 < GP->exptime + 0.5) sleept = 1000;
|
||||
}
|
||||
if(dtime() - t0 >= timeout || expstate != CAMERA_FRAMERDY){
|
||||
WARNX("Image wasn't received");
|
||||
|
||||
@ -96,14 +96,15 @@ myoption cmdlnopts[] = {
|
||||
{"brightness",NEED_ARG, NULL, 0, arg_float, APTR(&G.brightness),N_("CMOS brightness level")},
|
||||
|
||||
{"logfile", NEED_ARG, NULL, 0, arg_string, APTR(&G.logfile), N_("logging file name (if run as server)")},
|
||||
{"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")},
|
||||
{"imageport",NEED_ARG, NULL, 0, arg_string, APTR(&G.imageport), N_("local INET socket port to send/receive images")},
|
||||
{"path", NEED_ARG, NULL, 0, arg_string, APTR(&G.path), N_("UNIX socket name (command socket)")},
|
||||
{"port", NEED_ARG, NULL, 0, arg_string, APTR(&G.port), N_("local INET command socket port")},
|
||||
{"imageport",NEED_ARG, NULL, 0, arg_string, APTR(&G.imageport), N_("INET image socket port")},
|
||||
{"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)")},
|
||||
{"restart", NO_ARGS, &G.restart,1, arg_none, NULL, N_("restart image server")},
|
||||
|
||||
{"shmkey", NEED_ARG, NULL, 'k', arg_int, APTR(&G.shmkey), N_("shared memory (with image data) key (default: 7777777")},
|
||||
{"forceimsock",NO_ARGS, &G.forceimsock,1, arg_none, NULL, N_("force using image through socket transition even if can use SHM")},
|
||||
|
||||
#ifdef IMAGEVIEW
|
||||
{"display", NO_ARGS, NULL, 'D', arg_int, APTR(&G.showimage), N_("Display image in OpenGL window")},
|
||||
|
||||
@ -70,6 +70,7 @@ typedef struct{
|
||||
int rewrite; // rewrite file
|
||||
int showimage; // show image preview
|
||||
int shmkey; // shared memory (with image data) key
|
||||
int forceimsock; // force using image through socket transition even if can use SHM
|
||||
float gain; // gain level (only for CMOS)
|
||||
float brightness; // brightness (only for CMOS)
|
||||
double exptime; // time of exposition in seconds
|
||||
|
||||
Binary file not shown.
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-12-14 16:53+0300\n"
|
||||
"POT-Creation-Date: 2023-12-21 16:46+0300\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@ -222,15 +222,15 @@ msgid "logging file name (if run as server)"
|
||||
msgstr ""
|
||||
|
||||
#: cmdlnopts.c:99
|
||||
msgid "UNIX socket name"
|
||||
msgid "UNIX socket name (command socket)"
|
||||
msgstr ""
|
||||
|
||||
#: cmdlnopts.c:100
|
||||
msgid "local INET socket port"
|
||||
msgid "local INET command socket port"
|
||||
msgstr ""
|
||||
|
||||
#: cmdlnopts.c:101
|
||||
msgid "local INET socket port to send/receive images"
|
||||
msgid "INET image socket port"
|
||||
msgstr ""
|
||||
|
||||
#: cmdlnopts.c:102
|
||||
@ -249,7 +249,11 @@ msgstr ""
|
||||
msgid "shared memory (with image data) key (default: 7777777"
|
||||
msgstr ""
|
||||
|
||||
#: cmdlnopts.c:109
|
||||
#: cmdlnopts.c:107
|
||||
msgid "force using image through socket transition even if can use SHM"
|
||||
msgstr ""
|
||||
|
||||
#: cmdlnopts.c:110
|
||||
msgid "Display image in OpenGL window"
|
||||
msgstr ""
|
||||
|
||||
@ -283,291 +287,291 @@ msgstr ""
|
||||
msgid "Can't save file with prefix %s"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:359
|
||||
#: ccdfunc.c:362
|
||||
#, c-format
|
||||
msgid "File saved as '%s'"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:368
|
||||
#: ccdfunc.c:371
|
||||
msgid "Error saving file"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:445
|
||||
#: ccdfunc.c:448
|
||||
#, c-format
|
||||
msgid "Image stat:\n"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:453
|
||||
#: ccdfunc.c:456
|
||||
msgid "Focuser device not pointed"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:460
|
||||
#: ccdfunc.c:463
|
||||
msgid "No focusers found"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:491
|
||||
#: ccdfunc.c:494
|
||||
#, c-format
|
||||
msgid "Found %d focusers, you point number %d"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:495
|
||||
#: ccdfunc.c:498
|
||||
msgid "Can't set active focuser number"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:509
|
||||
#: ccdfunc.c:512
|
||||
msgid "Can't get focuser limit positions"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:516
|
||||
#: ccdfunc.c:519
|
||||
msgid "Can't get current focuser position"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:530
|
||||
#: ccdfunc.c:533
|
||||
#, c-format
|
||||
msgid "Can't set position %g: out of limits [%g, %g]"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:534
|
||||
#: ccdfunc.c:537
|
||||
msgid "Can't home focuser"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:536
|
||||
#: ccdfunc.c:539
|
||||
#, c-format
|
||||
msgid "Can't set position %g"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:544
|
||||
#: ccdfunc.c:547
|
||||
msgid "Wheel device not pointed"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:551
|
||||
#: ccdfunc.c:554
|
||||
msgid "No wheels found"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:582
|
||||
#: ccdfunc.c:585
|
||||
#, c-format
|
||||
msgid "Found %d wheels, you point number %d"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:586
|
||||
#: ccdfunc.c:589
|
||||
msgid "Can't set active wheel number"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:602
|
||||
#: ccdfunc.c:605
|
||||
msgid "Can't get max wheel position"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:609
|
||||
#: ccdfunc.c:612
|
||||
#, c-format
|
||||
msgid "Wheel position should be from 0 to %d"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:613
|
||||
#: ccdfunc.c:616
|
||||
#, c-format
|
||||
msgid "Can't set wheel position %d"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:630
|
||||
#: ccdfunc.c:633
|
||||
#, c-format
|
||||
msgid "%.1f seconds till exposition ends"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:645
|
||||
#: ccdfunc.c:648
|
||||
msgid "Camera device not pointed"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:652 ccdfunc.c:653
|
||||
#: ccdfunc.c:655 ccdfunc.c:656
|
||||
msgid "No cameras found"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:683
|
||||
#: ccdfunc.c:686
|
||||
#, c-format
|
||||
msgid "Found %d cameras, you point number %d"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:687
|
||||
#: ccdfunc.c:690
|
||||
msgid "Can't set active camera number"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:693
|
||||
#: ccdfunc.c:696
|
||||
msgid "Can't set fan speed"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:694
|
||||
#: ccdfunc.c:697
|
||||
#, c-format
|
||||
msgid "Set fan speed to %d"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:699
|
||||
#: ccdfunc.c:702
|
||||
#, c-format
|
||||
msgid "Camera model: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:700
|
||||
#: ccdfunc.c:703
|
||||
#, c-format
|
||||
msgid "Pixel size: %g x %g"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:706
|
||||
#: ccdfunc.c:709
|
||||
#, c-format
|
||||
msgid "Full array: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:709
|
||||
#: ccdfunc.c:712
|
||||
#, c-format
|
||||
msgid "Field of view: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:712
|
||||
#: ccdfunc.c:715
|
||||
#, c-format
|
||||
msgid "Current format: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:715
|
||||
#: ccdfunc.c:718
|
||||
#, c-format
|
||||
msgid "Can't set T to %g degC"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:723
|
||||
#: ccdfunc.c:726
|
||||
#, c-format
|
||||
msgid "Shutter command: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:725
|
||||
#: ccdfunc.c:728
|
||||
#, c-format
|
||||
msgid "Can't run shutter command %s (unsupported?)"
|
||||
msgstr ""
|
||||
|
||||
#. "Попытка сконфигурировать порт I/O как %d\n"
|
||||
#: ccdfunc.c:729
|
||||
#: ccdfunc.c:732
|
||||
#, c-format
|
||||
msgid "Try to configure I/O port as %d"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:731
|
||||
#: ccdfunc.c:734
|
||||
msgid "Can't configure (unsupported?)"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:738
|
||||
#: ccdfunc.c:741
|
||||
msgid "Can't get IOport state (unsupported?)"
|
||||
msgstr ""
|
||||
|
||||
#. "Попытка записи %d в порт I/O\n"
|
||||
#: ccdfunc.c:742
|
||||
#: ccdfunc.c:745
|
||||
#, c-format
|
||||
msgid "Try to write %d to I/O port"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:744
|
||||
#: ccdfunc.c:747
|
||||
msgid "Can't set IOport"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:751
|
||||
#: ccdfunc.c:754
|
||||
#, c-format
|
||||
msgid "Set gain to %g"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:752
|
||||
#: ccdfunc.c:755
|
||||
#, c-format
|
||||
msgid "Can't set gain to %g"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:757
|
||||
#: ccdfunc.c:760
|
||||
#, c-format
|
||||
msgid "Set brightness to %g"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:758
|
||||
#: ccdfunc.c:761
|
||||
#, c-format
|
||||
msgid "Can't set brightness to %g"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:764 server.c:312
|
||||
#: ccdfunc.c:767 server.c:262
|
||||
#, c-format
|
||||
msgid "Can't set binning %dx%d"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:776 server.c:313
|
||||
#: ccdfunc.c:779 server.c:263
|
||||
msgid "Can't set given geometry"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:780
|
||||
#: ccdfunc.c:783
|
||||
#, c-format
|
||||
msgid "Can't set %d flushes"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:784
|
||||
#: ccdfunc.c:787
|
||||
#, c-format
|
||||
msgid "Can't set exposure time to %f seconds"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:787
|
||||
#: ccdfunc.c:790
|
||||
msgid "Can't change frame type"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:790
|
||||
#: ccdfunc.c:793
|
||||
msgid "Can't set bit depth"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:792
|
||||
#: ccdfunc.c:795
|
||||
msgid "Can't set readout speed"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:793
|
||||
#: ccdfunc.c:796
|
||||
#, c-format
|
||||
msgid "Readout mode: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:794
|
||||
#: ccdfunc.c:797
|
||||
msgid "Only show statistics"
|
||||
msgstr ""
|
||||
|
||||
#. GET binning should be AFTER setgeometry!
|
||||
#: ccdfunc.c:796
|
||||
#: ccdfunc.c:799
|
||||
msgid "Can't get current binning"
|
||||
msgstr ""
|
||||
|
||||
#. Захват кадра %d\n
|
||||
#: ccdfunc.c:821
|
||||
#: ccdfunc.c:824
|
||||
#, c-format
|
||||
msgid "Capture frame %d"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:823 ccdfunc.c:908 server.c:198
|
||||
#: ccdfunc.c:826 ccdfunc.c:911 server.c:148
|
||||
msgid "Can't start exposition"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:828
|
||||
#: ccdfunc.c:831
|
||||
msgid "Can't capture image"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:831
|
||||
#: ccdfunc.c:834
|
||||
msgid "Read grabbed image"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:835 ccdfunc.c:921
|
||||
#: ccdfunc.c:838 ccdfunc.c:924
|
||||
msgid "Can't grab image"
|
||||
msgstr ""
|
||||
|
||||
#. %d секунд до окончания паузы\n
|
||||
#: ccdfunc.c:847 client.c:291
|
||||
#: ccdfunc.c:850 client.c:294
|
||||
#, c-format
|
||||
msgid "%d seconds till pause ends\n"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:919
|
||||
#: ccdfunc.c:922
|
||||
msgid "Some error when capture"
|
||||
msgstr ""
|
||||
|
||||
#: server.c:246
|
||||
#: server.c:196
|
||||
msgid "No camera device"
|
||||
msgstr ""
|
||||
|
||||
#: client.c:278
|
||||
#: client.c:279
|
||||
msgid "Can't make exposition"
|
||||
msgstr ""
|
||||
|
||||
#: client.c:307
|
||||
#: client.c:310
|
||||
msgid "Server timeout"
|
||||
msgstr ""
|
||||
|
||||
|
||||
152
locale/ru/ru.po
152
locale/ru/ru.po
@ -7,7 +7,7 @@
|
||||
msgid ""
|
||||
msgstr "Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-12-14 16:52+0300\n"
|
||||
"POT-Creation-Date: 2023-12-21 16:40+0300\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@ -16,13 +16,13 @@ msgstr "Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Content-Type: text/plain; charset=koi8-r\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: ccdfunc.c:630
|
||||
#: ccdfunc.c:633
|
||||
#, c-format
|
||||
msgid "%.1f seconds till exposition ends"
|
||||
msgstr "%.1f ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÜËÓÐÏÚÉÃÉÉ"
|
||||
|
||||
#. %d Ñ<>екунд до окончаниÑ<C2B8> паузы\n
|
||||
#: ccdfunc.c:847 client.c:291
|
||||
#: ccdfunc.c:850 client.c:294
|
||||
#, c-format
|
||||
msgid "%d seconds till pause ends\n"
|
||||
msgstr "%d ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÐÁÕÚÙ\n"
|
||||
@ -39,7 +39,7 @@ msgstr "
|
||||
msgid "CMOS gain level"
|
||||
msgstr "ÕÒÏ×ÅÎØ Gain CMOS"
|
||||
|
||||
#: ccdfunc.c:645
|
||||
#: ccdfunc.c:648
|
||||
msgid "Camera device not pointed"
|
||||
msgstr "õÓÔÒÏÊÓÔ×Ï Ó×ÅÏÐÒÉÅÍÎÉËÁ ÎÅ ÐÏÄËÌÀÞÅÎÏ"
|
||||
|
||||
@ -47,20 +47,20 @@ msgstr "
|
||||
msgid "Camera device unknown"
|
||||
msgstr "õÓÔÒÏÊÓÔ×Ï Ó×ÅÏÐÒÉÅÍÎÉËÁ ÎÅ ÏÐÏÚÎÁÎÏ"
|
||||
|
||||
#: ccdfunc.c:699
|
||||
#: ccdfunc.c:702
|
||||
#, c-format
|
||||
msgid "Camera model: %s"
|
||||
msgstr "íÏÄÅÌØ Ó×ÅÔÏÐÒÉÅÍÎÉËÁ: %s"
|
||||
|
||||
#: ccdfunc.c:828
|
||||
#: ccdfunc.c:831
|
||||
msgid "Can't capture image"
|
||||
msgstr "îÅ ÍÏÇÕ ÚÁÈ×ÁÔÉÔØ ÉÚÏÂÒÁÖÅÎÉÅ"
|
||||
|
||||
#: ccdfunc.c:787
|
||||
#: ccdfunc.c:790
|
||||
msgid "Can't change frame type"
|
||||
msgstr "îÅ ÍÏÇÕ ÉÚÍÅÎÉÔØ ÔÉÐ ËÁÄÒÁ"
|
||||
|
||||
#: ccdfunc.c:731
|
||||
#: ccdfunc.c:734
|
||||
msgid "Can't configure (unsupported?)"
|
||||
msgstr "îÅ ÍÏÇÕ ÓËÏÎÆÉÇÕÒÉÒÏ×ÁÔØ (ÏÐÃÉÑ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)"
|
||||
|
||||
@ -84,32 +84,32 @@ msgstr "
|
||||
msgid "Can't find wheel in plugin %s: %s"
|
||||
msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ ÐÌÁÇÉÎ ÔÕÒÅÌÉ %s: %s"
|
||||
|
||||
#: ccdfunc.c:738
|
||||
#: ccdfunc.c:741
|
||||
msgid "Can't get IOport state (unsupported?)"
|
||||
msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÓÏÓÔÏÑÎÉÅ ÐÏÒÔÁ I/O (ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)"
|
||||
|
||||
#. GET binning should be AFTER setgeometry!
|
||||
#: ccdfunc.c:796
|
||||
#: ccdfunc.c:799
|
||||
msgid "Can't get current binning"
|
||||
msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÔÅËÕÝÅÅ ÚÎÁÞÅÎÉÅ ÂÉÎÎÉÎÇÁ"
|
||||
|
||||
#: ccdfunc.c:516
|
||||
#: ccdfunc.c:519
|
||||
msgid "Can't get current focuser position"
|
||||
msgstr "îÅ ÍÏÇÕ ÏÐÒÅÄÅÌÉÔØ ÔÅËÕÝÕÀ ÐÏÚÉÃÉÀ ÆÏËÕÓÅÒÁ"
|
||||
|
||||
#: ccdfunc.c:509
|
||||
#: ccdfunc.c:512
|
||||
msgid "Can't get focuser limit positions"
|
||||
msgstr "îÅ ÍÏÇÕ ÏÐÒÅÄÅÌÉÔØ ÐÒÅÄÅÌØÎÕÀ ÐÏÚÉÃÉÀ ÆÏËÕÓÅÒÁ"
|
||||
|
||||
#: ccdfunc.c:602
|
||||
#: ccdfunc.c:605
|
||||
msgid "Can't get max wheel position"
|
||||
msgstr "îÅ ÍÏÇÕ ÏÐÒÅÄÅÌÉÔØ ÐÒÅÄÅÌØÎÕÀ ÐÏÚÉÃÉÀ ËÏÌÅÓÁ"
|
||||
|
||||
#: ccdfunc.c:835 ccdfunc.c:921
|
||||
#: ccdfunc.c:838 ccdfunc.c:924
|
||||
msgid "Can't grab image"
|
||||
msgstr "îÅ ÍÏÇÕ ÚÁÈ×ÁÔÉÔØ ÉÚÏÂÒÁÖÅÎÉÅ"
|
||||
|
||||
#: ccdfunc.c:534
|
||||
#: ccdfunc.c:537
|
||||
msgid "Can't home focuser"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÆÏËÕÓÅÒ × ÎÕÌØ"
|
||||
|
||||
@ -117,7 +117,7 @@ msgstr "
|
||||
msgid "Can't init mutex!"
|
||||
msgstr "îÅ ÍÏÇÕ ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ÍØÀÔÅËÓ!"
|
||||
|
||||
#: client.c:278
|
||||
#: client.c:279
|
||||
msgid "Can't make exposition"
|
||||
msgstr "îÅ ÍÏÇÕ ×ÙÐÏÌÎÉÔØ ÜËÓÐÏÚÉÃÉÀ"
|
||||
|
||||
@ -125,7 +125,7 @@ msgstr "
|
||||
msgid "Can't open OpenGL window, image preview will be inaccessible"
|
||||
msgstr "îÅ ÍÏÇÕ ÏÔËÒÙÔØ ÏËÎÏ OpenGL, ÏÔÏÂÒÁÖÅÎÉÅ ÂÕÄÅÔ ÎÅÄÏÓÔÕÐÎÏ"
|
||||
|
||||
#: ccdfunc.c:725
|
||||
#: ccdfunc.c:728
|
||||
#, c-format
|
||||
msgid "Can't run shutter command %s (unsupported?)"
|
||||
msgstr "îÅ ÍÏÇÕ ×ÙÐÏÌÎÉÔØ ËÏÍÁÎÄÕ ÚÁÔ×ÏÒÁ %s (ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)"
|
||||
@ -136,99 +136,99 @@ msgstr "
|
||||
msgid "Can't save file with prefix %s"
|
||||
msgstr "îÅ ÍÏÇÕ ÓÏÈÒÁÎÉÔØ ÆÁÊÌ Ó ÐÒÅÆÉËÓÏÍ %s"
|
||||
|
||||
#: ccdfunc.c:780
|
||||
#: ccdfunc.c:783
|
||||
#, c-format
|
||||
msgid "Can't set %d flushes"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ %d ÓÂÒÏÓÏ×"
|
||||
|
||||
#: ccdfunc.c:744
|
||||
#: ccdfunc.c:747
|
||||
msgid "Can't set IOport"
|
||||
msgstr "îÅ ÍÏÇÕ ÐÏÍÅÎÑÔØ ÚÎÁÞÅÎÉÑ ÐÏÒÔÁ I/O"
|
||||
|
||||
#: ccdfunc.c:715
|
||||
#: ccdfunc.c:718
|
||||
#, c-format
|
||||
msgid "Can't set T to %g degC"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÔÅÍÐÅÒÁÔÕÒÕ × %g ÇÒÁÄã"
|
||||
|
||||
#: ccdfunc.c:687
|
||||
#: ccdfunc.c:690
|
||||
msgid "Can't set active camera number"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÎÏÍÅÒ ÁËÔÉ×ÎÏÊ ËÁÍÅÒÙ"
|
||||
|
||||
#: ccdfunc.c:495
|
||||
#: ccdfunc.c:498
|
||||
msgid "Can't set active focuser number"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÎÏÍÅÒ ÁËÔÉ×ÎÏÇÏ ÆÏËÕÓÅÒÁ"
|
||||
|
||||
#: ccdfunc.c:586
|
||||
#: ccdfunc.c:589
|
||||
msgid "Can't set active wheel number"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÎÏÍÅÒ ÁËÔÉ×ÎÏÇÏ ËÏÌÅÓÁ"
|
||||
|
||||
#: ccdfunc.c:764 server.c:312
|
||||
#: ccdfunc.c:767 server.c:262
|
||||
#, c-format
|
||||
msgid "Can't set binning %dx%d"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÂÉÎÎÉÎÇ %dx%d"
|
||||
|
||||
#: ccdfunc.c:790
|
||||
#: ccdfunc.c:793
|
||||
msgid "Can't set bit depth"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÒÁÚÒÑÄÎÏÓÔØ áãð"
|
||||
|
||||
#: ccdfunc.c:758
|
||||
#: ccdfunc.c:761
|
||||
#, c-format
|
||||
msgid "Can't set brightness to %g"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÑÒËÏÓÔØ × %g"
|
||||
|
||||
#: ccdfunc.c:784
|
||||
#: ccdfunc.c:787
|
||||
#, c-format
|
||||
msgid "Can't set exposure time to %f seconds"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÜËÓÐÏÚÉÃÉÀ × %f ÓÅËÕÎÄ"
|
||||
|
||||
#: ccdfunc.c:693
|
||||
#: ccdfunc.c:696
|
||||
msgid "Can't set fan speed"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ×ÅÎÔÉÌÑÔÏÒÏ×"
|
||||
|
||||
#: ccdfunc.c:752
|
||||
#: ccdfunc.c:755
|
||||
#, c-format
|
||||
msgid "Can't set gain to %g"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ Gain × %g"
|
||||
|
||||
#: ccdfunc.c:776 server.c:313
|
||||
#: ccdfunc.c:779 server.c:263
|
||||
msgid "Can't set given geometry"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÇÅÏÍÅÔÒÉÀ"
|
||||
|
||||
#: ccdfunc.c:536
|
||||
#: ccdfunc.c:539
|
||||
#, c-format
|
||||
msgid "Can't set position %g"
|
||||
msgstr "îÅ ÍÏÇÕ ÉÚÍÅÎÉÔØ ÐÏÚÉÃÉÀ ÎÁ %g"
|
||||
|
||||
#: ccdfunc.c:530
|
||||
#: ccdfunc.c:533
|
||||
#, c-format
|
||||
msgid "Can't set position %g: out of limits [%g, %g]"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÐÏÚÉÃÉÀ %g: ×ÎÅ ÐÒÅÄÅÌÏ× [%g, %g]"
|
||||
|
||||
#: ccdfunc.c:792
|
||||
#: ccdfunc.c:795
|
||||
msgid "Can't set readout speed"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ÓÞÉÔÙ×ÁÎÉÑ"
|
||||
|
||||
#: ccdfunc.c:613
|
||||
#: ccdfunc.c:616
|
||||
#, c-format
|
||||
msgid "Can't set wheel position %d"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÐÏÌÏÖÅÎÉÅ ËÏÌÅÓÁ %d"
|
||||
|
||||
#: ccdfunc.c:823 ccdfunc.c:908 server.c:198
|
||||
#: ccdfunc.c:826 ccdfunc.c:911 server.c:148
|
||||
msgid "Can't start exposition"
|
||||
msgstr "îÅ ÍÏÇÕ ÎÁÞÁÔØ ÜËÓÐÏÚÉÃÉÀ"
|
||||
|
||||
#. Захват кадра %d\n
|
||||
#: ccdfunc.c:821
|
||||
#: ccdfunc.c:824
|
||||
#, c-format
|
||||
msgid "Capture frame %d"
|
||||
msgstr "úÁÈ×ÁÔ ËÁÄÒÁ %d"
|
||||
|
||||
#: ccdfunc.c:712
|
||||
#: ccdfunc.c:715
|
||||
#, c-format
|
||||
msgid "Current format: %s"
|
||||
msgstr ""
|
||||
|
||||
#: cmdlnopts.c:109
|
||||
#: cmdlnopts.c:110
|
||||
msgid "Display image in OpenGL window"
|
||||
msgstr "ïÔÏÂÒÁÖÅÎÉÅ ÉÚÏÂÒÁÖÅÎÉÑ × ÏËÎÅ OpenGL"
|
||||
|
||||
@ -237,40 +237,40 @@ msgstr "
|
||||
msgid "Equalization of histogram: %s"
|
||||
msgstr "üË×ÁÌÉÚÁÃÉÑ ÇÉÓÔÏÇÒÁÍÍÙ: %s"
|
||||
|
||||
#: ccdfunc.c:368
|
||||
#: ccdfunc.c:371
|
||||
msgid "Error saving file"
|
||||
msgstr "ïÛÉÂËÁ ÓÏÈÒÁÎÅÎÉÑ ÆÁÊÌÁ"
|
||||
|
||||
#: ccdfunc.c:709
|
||||
#: ccdfunc.c:712
|
||||
#, c-format
|
||||
msgid "Field of view: %s"
|
||||
msgstr "ðÏÌÅ ÚÒÅÎÉÑ: %s"
|
||||
|
||||
#: ccdfunc.c:359
|
||||
#: ccdfunc.c:362
|
||||
#, c-format
|
||||
msgid "File saved as '%s'"
|
||||
msgstr "æÁÊÌ ÓÏÈÒÁÎÅÎ ËÁË '%s'"
|
||||
|
||||
#: ccdfunc.c:453
|
||||
#: ccdfunc.c:456
|
||||
msgid "Focuser device not pointed"
|
||||
msgstr "õÓÔÒÏÊÓÔ×Ï ÆÏËÕÓÅÒÁ ÎÅ ÕËÁÚÁÎÏ"
|
||||
|
||||
#: ccdfunc.c:683
|
||||
#: ccdfunc.c:686
|
||||
#, c-format
|
||||
msgid "Found %d cameras, you point number %d"
|
||||
msgstr "ïÂÎÁÒÕÖÅÎÏ %d ËÁÍÅÒ, ×Ù ÕËÁÚÁÌÉ %d"
|
||||
|
||||
#: ccdfunc.c:491
|
||||
#: ccdfunc.c:494
|
||||
#, c-format
|
||||
msgid "Found %d focusers, you point number %d"
|
||||
msgstr "ïÂÎÁÒÕÖÅÎÏ %d ÆÏËÕÓÅÒÏ×, ×Ù ÕËÁÚÁÌÉ %d"
|
||||
|
||||
#: ccdfunc.c:582
|
||||
#: ccdfunc.c:585
|
||||
#, c-format
|
||||
msgid "Found %d wheels, you point number %d"
|
||||
msgstr "ïÂÎÁÒÕÖÅÎÏ %d ËÏÌÅÓ, ×Ù ÕËÁÚÁÌÉ %d"
|
||||
|
||||
#: ccdfunc.c:706
|
||||
#: ccdfunc.c:709
|
||||
#, c-format
|
||||
msgid "Full array: %s"
|
||||
msgstr "ðÏÌÎÙÊ ÆÏÒÍÁÔ: %s"
|
||||
@ -280,7 +280,12 @@ msgstr "
|
||||
msgid "Histogram conversion: %s"
|
||||
msgstr "ðÒÅÏÂÒÁÚÏ×ÁÎÉÅ ÇÉÓÔÏÇÒÁÍÍÙ: %s"
|
||||
|
||||
#: ccdfunc.c:445
|
||||
#: cmdlnopts.c:101
|
||||
#, fuzzy
|
||||
msgid "INET image socket port"
|
||||
msgstr "饉鹿 卿個景卦하 膽旽凜하 遝愾讀"
|
||||
|
||||
#: ccdfunc.c:448
|
||||
#, c-format
|
||||
msgid "Image stat:\n"
|
||||
msgstr "óÔÁÔÉÓÔÉËÁ ÐÏ ÉÚÏÂÒÁÖÅÎÉÀ: \n"
|
||||
@ -289,89 +294,90 @@ msgstr "
|
||||
msgid "N flushes before exposing (default: 1)"
|
||||
msgstr "N ÚÁÓ×ÅÞÉ×ÁÎÉÊ ÐÅÒÅÄ ÜËÓÐÏÚÉÃÉÅÊ (ÐÏ ÕÍÏÌÞÁÎÉÀ: 1)"
|
||||
|
||||
#: server.c:246
|
||||
#: server.c:196
|
||||
msgid "No camera device"
|
||||
msgstr "îÅ ÕËÁÚÁÎÏ ÕÓÔÒÏÊÓÔ×Ï ËÁÍÅÒÙ"
|
||||
|
||||
#: ccdfunc.c:652 ccdfunc.c:653
|
||||
#: ccdfunc.c:655 ccdfunc.c:656
|
||||
msgid "No cameras found"
|
||||
msgstr "ëÁÍÅÒ ÎÅ ÏÂÎÁÒÕÖÅÎÏ"
|
||||
|
||||
#: ccdfunc.c:460
|
||||
#: ccdfunc.c:463
|
||||
msgid "No focusers found"
|
||||
msgstr "æÏËÕÓÅÒÏ× ÎÅ ÏÂÎÁÒÕÖÅÎÏ"
|
||||
|
||||
#: ccdfunc.c:551
|
||||
#: ccdfunc.c:554
|
||||
msgid "No wheels found"
|
||||
msgstr "ôÕÒÅÌÅÊ ÎÅ ÏÂÎÁÒÕÖÅÎÏ"
|
||||
|
||||
#: ccdfunc.c:794
|
||||
#: ccdfunc.c:797
|
||||
msgid "Only show statistics"
|
||||
msgstr "ôÏÌØËÏ ÏÔÏÂÒÁÚÉÔØ ÓÔÁÔÉÓÔÉËÕ"
|
||||
|
||||
#: ccdfunc.c:700
|
||||
#: ccdfunc.c:703
|
||||
#, c-format
|
||||
msgid "Pixel size: %g x %g"
|
||||
msgstr "òÁÚÍÅÒ ÐÉËÓÅÌÑ: %g x %g"
|
||||
|
||||
#: ccdfunc.c:831
|
||||
#: ccdfunc.c:834
|
||||
msgid "Read grabbed image"
|
||||
msgstr "óÞÉÔÙ×ÁÎÉÅ ÉÚÏÂÒÁÖÅÎÉÑ"
|
||||
|
||||
#: ccdfunc.c:793
|
||||
#: ccdfunc.c:796
|
||||
#, c-format
|
||||
msgid "Readout mode: %s"
|
||||
msgstr "òÅÖÉÍ ÓÞÉÔÙ×ÁÎÉÑ: %s"
|
||||
|
||||
#: client.c:307
|
||||
#: client.c:310
|
||||
msgid "Server timeout"
|
||||
msgstr "ôÁÊÍÁÕÔ ÓÅÒ×ÅÒÁ"
|
||||
|
||||
#: ccdfunc.c:757
|
||||
#: ccdfunc.c:760
|
||||
#, c-format
|
||||
msgid "Set brightness to %g"
|
||||
msgstr "õÓÔÁÎÏ×ÉÔØ ÑÒËÏÓÔØ × %g"
|
||||
|
||||
#: ccdfunc.c:694
|
||||
#: ccdfunc.c:697
|
||||
#, c-format
|
||||
msgid "Set fan speed to %d"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ×ÅÎÔÉÌÑÔÏÒÏ× × %d"
|
||||
|
||||
#: ccdfunc.c:751
|
||||
#: ccdfunc.c:754
|
||||
#, c-format
|
||||
msgid "Set gain to %g"
|
||||
msgstr "õÓÔÁÎÏ×ÉÔØ Gain × %g"
|
||||
|
||||
#: ccdfunc.c:723
|
||||
#: ccdfunc.c:726
|
||||
#, c-format
|
||||
msgid "Shutter command: %s\n"
|
||||
msgstr "ëÏÍÁÎÄÁ ÚÁÔ×ÏÒÁ: %s\n"
|
||||
|
||||
#: ccdfunc.c:919
|
||||
#: ccdfunc.c:922
|
||||
msgid "Some error when capture"
|
||||
msgstr ""
|
||||
|
||||
#. "Попытка Ñ<>конфигурировать порт I/O как %d\n"
|
||||
#: ccdfunc.c:729
|
||||
#: ccdfunc.c:732
|
||||
#, c-format
|
||||
msgid "Try to configure I/O port as %d"
|
||||
msgstr "ðÏÐÙÔËÁ ÓËÏÎÆÉÇÕÒÉÒÏ×ÁÔØ ÐÏÒÔ I/O ËÁË %d"
|
||||
|
||||
#. "Попытка запиÑ<C2B8>и %d в порт I/O\n"
|
||||
#: ccdfunc.c:742
|
||||
#: ccdfunc.c:745
|
||||
#, c-format
|
||||
msgid "Try to write %d to I/O port"
|
||||
msgstr "ðÏÐÙÔËÁ ÚÁÐÉÓÉ %d × ÐÏÒÔ I/O"
|
||||
|
||||
#: cmdlnopts.c:99
|
||||
msgid "UNIX socket name"
|
||||
#, fuzzy
|
||||
msgid "UNIX socket name (command socket)"
|
||||
msgstr "éÍÑ UNIX-ÓÏËÅÔÁ"
|
||||
|
||||
#: ccdfunc.c:544
|
||||
#: ccdfunc.c:547
|
||||
msgid "Wheel device not pointed"
|
||||
msgstr "õÓÔÒÏÊÓÔ×Ï ÔÕÒÅÌÉ ÎÅ ÕËÁÚÁÎÏ"
|
||||
|
||||
#: ccdfunc.c:609
|
||||
#: ccdfunc.c:612
|
||||
#, c-format
|
||||
msgid "Wheel position should be from 0 to %d"
|
||||
msgstr "ðÏÚÉÃÉÑ ËÏÌÅÓÁ ÄÏÌÖÎÁ ÂÙÔØ ÏÔ 0 ÄÏ %d"
|
||||
@ -440,6 +446,10 @@ msgstr "
|
||||
msgid "focuser device plugin (e.g. devzwo.so)"
|
||||
msgstr "ÐÌÁÇÉÎ ÆÏËÕÓÅÒÁ (ÎÁÐÒÉÍÅÒ, devzwo.so)"
|
||||
|
||||
#: cmdlnopts.c:107
|
||||
msgid "force using image through socket transition even if can use SHM"
|
||||
msgstr ""
|
||||
|
||||
#: cmdlnopts.c:84
|
||||
msgid "get value of I/O port pins"
|
||||
msgstr "ÐÏÌÕÞÉÔØ ÚÎÁÞÅÎÉÅ ÐÏÒÔÁ I/O"
|
||||
@ -457,12 +467,8 @@ msgid "list connected devices"
|
||||
msgstr "ÓÐÉÓÏË ÐÏÄËÌÀÞÅÎÎÙÈ ÕÓÔÒÏÊÓÔ×"
|
||||
|
||||
#: cmdlnopts.c:100
|
||||
msgid "local INET socket port"
|
||||
msgstr "饉鹿 卿個景卦하 膽旽凜하 遝愾讀"
|
||||
|
||||
#: cmdlnopts.c:101
|
||||
#, fuzzy
|
||||
msgid "local INET socket port to send/receive images"
|
||||
msgid "local INET command socket port"
|
||||
msgstr "ÐÏÒÔ ÌÏËÁÌØÎÏÇÏ ÓÅÔÅ×ÏÇÏ ÓÏËÅÔÁ"
|
||||
|
||||
#: cmdlnopts.c:98
|
||||
@ -607,3 +613,7 @@ msgstr "
|
||||
|
||||
#~ msgid "PID file (default: "
|
||||
#~ msgstr "PID-ÆÁÊÌ (ÐÏ ÕÍÏÌÞÁÎÉÀ: "
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "local INET socket port to send/receive images"
|
||||
#~ msgstr "饉鹿 卿個景卦하 膽旽凜하 遝愾讀"
|
||||
|
||||
66
server.c
66
server.c
@ -22,8 +22,6 @@
|
||||
#include <poll.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/shm.h>
|
||||
#include <sys/socket.h>
|
||||
#include <usefull_macros.h>
|
||||
|
||||
@ -120,55 +118,6 @@ static void unlock(){
|
||||
|
||||
static IMG *ima = NULL;
|
||||
|
||||
/**
|
||||
* @brief getshm - get shared memory segment for image
|
||||
* @param imsize - size of image data (in bytes)
|
||||
* @return
|
||||
*/
|
||||
static IMG *getshm(key_t key, size_t imsize){
|
||||
size_t shmsize = sizeof(IMG) + imsize;
|
||||
shmsize = 1024 * (1 + shmsize / 1024);
|
||||
DBG("Allocate %zd bytes in shared memory", shmsize);
|
||||
int shmid = -1;
|
||||
int flags = (imsize) ? IPC_CREAT | 0666 : 0;
|
||||
shmid = shmget(key, 0, flags);
|
||||
if(shmid < 0){
|
||||
WARN("Can't get shared memory segment %d", key);
|
||||
return NULL;
|
||||
}
|
||||
if(imsize){ // check if segment exists and its size equal to needs
|
||||
struct shmid_ds buf;
|
||||
if(shmctl(shmid, IPC_STAT, &buf) > -1 && shmsize != buf.shm_segsz){ // remove already existing segment
|
||||
DBG("Need to remove already existing segment");
|
||||
shmctl(shmid, IPC_RMID, NULL);
|
||||
}
|
||||
shmid = shmget(key, shmsize, flags);
|
||||
if(shmid < 0){
|
||||
WARN("Can't create shared memory segment %d", key);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
flags = (imsize) ? 0 : SHM_RDONLY; // client opens memory in readonly mode
|
||||
IMG *ptr = shmat(shmid, NULL, flags);
|
||||
if(ptr == (void*)-1){
|
||||
WARN("Can't attach SHM segment %d", key);
|
||||
return NULL;
|
||||
}
|
||||
if(!imsize){
|
||||
if(ptr->MAGICK != SHM_MAGIC){
|
||||
WARNX("Shared memory %d isn't belongs to image server", key);
|
||||
shmdt(ptr);
|
||||
return NULL;
|
||||
}
|
||||
return ptr;
|
||||
}
|
||||
bzero(ptr, sizeof(IMG));
|
||||
ptr->data = (void*)((uint8_t*)ptr + sizeof(IMG));
|
||||
ptr->MAGICK = SHM_MAGIC;
|
||||
shmkey = key;
|
||||
return ptr;
|
||||
}
|
||||
|
||||
static void fixima(){
|
||||
FNAME();
|
||||
if(!camera) return;
|
||||
@ -176,7 +125,8 @@ static void fixima(){
|
||||
// allocate memory for largest possible image
|
||||
if(!ima) ima = getshm(GP->shmkey, camera->array.h * camera->array.w * 2);
|
||||
if(!ima) ERRX("Can't allocate memory for image");
|
||||
if(raw_width == ima->w && raw_height == ima->h) return; // all OK
|
||||
shmkey = GP->shmkey;
|
||||
//if(raw_width == ima->w && raw_height == ima->h) return; // all OK
|
||||
DBG("curformat: %dx%d", curformat.w, curformat.h);
|
||||
ima->h = raw_height;
|
||||
ima->w = raw_width;
|
||||
@ -224,10 +174,10 @@ static inline void cameracapturestate(){ // capturing - wait for exposition ends
|
||||
camstate = CAMERA_ERROR;
|
||||
return;
|
||||
}else{
|
||||
if(lastfile){
|
||||
/*if(lastfile){ (move calcstat into savefits)
|
||||
TIMESTAMP("Calc stat");
|
||||
calculate_stat(ima);
|
||||
}
|
||||
}*/
|
||||
if(saveFITS(ima, &lastfile)){
|
||||
DBG("LAST file name changed");
|
||||
}
|
||||
@ -677,9 +627,9 @@ static hresult _8bithandler(int fd, _U_ const char *key, const char *val){
|
||||
if(val){
|
||||
int s = atoi(val);
|
||||
if(s != 0 && s != 1) return RESULT_BADVAL;
|
||||
if(!camera->setbitdepth(!s)) return RESULT_FAIL;
|
||||
fixima();
|
||||
GP->_8bit = s;
|
||||
s = !s;
|
||||
if(!camera->setbitdepth(s)) return RESULT_FAIL;
|
||||
}
|
||||
snprintf(buf, 63, CMD_8BIT "=%d", GP->_8bit);
|
||||
if(!sendstrmessage(fd, buf)) return RESULT_DISCONNECTED;
|
||||
@ -1155,7 +1105,7 @@ void server(int sock, int imsock){
|
||||
}
|
||||
// process some data & send messages to ALL
|
||||
if(camstate == CAMERA_FRAMERDY || camstate == CAMERA_ERROR){
|
||||
if(camstate == CAMERA_FRAMERDY) ima->timestamp = time(NULL); // set timestamp
|
||||
if(camstate == CAMERA_FRAMERDY) ima->timestamp = dtime(); // set timestamp
|
||||
char buff[PATH_MAX+32];
|
||||
snprintf(buff, PATH_MAX, CMD_EXPSTATE "=%d", camstate);
|
||||
DBG("Send %s to %d clients", buff, nfd - 2);
|
||||
@ -1163,7 +1113,7 @@ void server(int sock, int imsock){
|
||||
TIMESTAMP("Send message that all ready");
|
||||
sendstrmessage(poll_set[i].fd, buff);
|
||||
}
|
||||
if(camstate == CAMERA_FRAMERDY){ // send to all last file name
|
||||
if(camstate == CAMERA_FRAMERDY && (GP->outfile || GP->outfileprefix)){ // send to all last file name if file saved
|
||||
snprintf(buff, PATH_MAX+31, CMD_LASTFNAME "=%s", lastfile);
|
||||
for(int i = 2; i < nfd; ++i)
|
||||
sendstrmessage(poll_set[i].fd, buff);
|
||||
|
||||
59
socket.c
59
socket.c
@ -42,7 +42,7 @@ double __t0 = 0.;
|
||||
* @brief open_socket - create socket and open it
|
||||
* @param isserver - TRUE for server, FALSE for client
|
||||
* @param path - UNIX-socket path or local INET socket port
|
||||
* @param isnet - TRUE for INET socket, FALSE for UNIX
|
||||
* @param isnet - 1/2 for INET socket (1 - localhost, 2 - network), 0 for UNIX
|
||||
* @return socket FD or -1 if failed
|
||||
*/
|
||||
int open_socket(int isserver, char *path, int isnet){
|
||||
@ -57,7 +57,8 @@ int open_socket(int isserver, char *path, int isnet){
|
||||
hints.ai_family = AF_INET;
|
||||
hints.ai_socktype = SOCK_STREAM;
|
||||
hints.ai_flags = AI_PASSIVE;
|
||||
if(getaddrinfo("127.0.0.1", path, &hints, &res) != 0){
|
||||
const char *node = (isnet == 2) ? NULL : "127.0.0.1";
|
||||
if(getaddrinfo(node, path, &hints, &res) != 0){
|
||||
ERR("getaddrinfo");
|
||||
}
|
||||
}else{
|
||||
@ -128,9 +129,9 @@ int open_socket(int isserver, char *path, int isnet){
|
||||
*/
|
||||
int start_socket(int isserver){
|
||||
char *path = NULL;
|
||||
int isnet = FALSE;
|
||||
int isnet = 0;
|
||||
if(GP->path) path = GP->path;
|
||||
else if(GP->port){ path = GP->port; isnet = TRUE; }
|
||||
else if(GP->port){ path = GP->port; isnet = 1; }
|
||||
else ERRX("Point network port or UNIX-socket path");
|
||||
int sock = open_socket(isserver, path, isnet), imsock = -1;
|
||||
if(sock < 0){
|
||||
@ -138,7 +139,7 @@ int start_socket(int isserver){
|
||||
ERRX("start_socket(): can't open socket");
|
||||
}
|
||||
if(isserver){
|
||||
imsock = open_socket(TRUE, GP->imageport, TRUE);
|
||||
imsock = open_socket(TRUE, GP->imageport, 2); // image socket should be networked
|
||||
server(sock, imsock);
|
||||
}else{
|
||||
#ifdef IMAGEVIEW
|
||||
@ -276,3 +277,51 @@ int canberead(int fd){
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief getshm - get shared memory segment for image
|
||||
* @param imsize - size of image data (in bytes): if !=0 allocate as server, else - as client (readonly)
|
||||
* @return pointer to shared memory region or NULL if failed
|
||||
*/
|
||||
IMG *getshm(key_t key, size_t imsize){
|
||||
size_t shmsize = sizeof(IMG) + imsize;
|
||||
shmsize = 1024 * (1 + shmsize / 1024);
|
||||
DBG("Allocate %zd bytes in shared memory", shmsize);
|
||||
int shmid = -1;
|
||||
int flags = (imsize) ? IPC_CREAT | 0666 : 0;
|
||||
shmid = shmget(key, 0, flags);
|
||||
if(shmid < 0){
|
||||
if(imsize) WARN("Can't get shared memory segment %d", key); // suppress warnings for client
|
||||
return NULL;
|
||||
}
|
||||
if(imsize){ // check if segment exists and its size equal to needs
|
||||
struct shmid_ds buf;
|
||||
if(shmctl(shmid, IPC_STAT, &buf) > -1 && shmsize != buf.shm_segsz){ // remove already existing segment
|
||||
DBG("Need to remove already existing segment");
|
||||
shmctl(shmid, IPC_RMID, NULL);
|
||||
}
|
||||
shmid = shmget(key, shmsize, flags);
|
||||
if(shmid < 0){
|
||||
WARN("Can't create shared memory segment %d", key);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
flags = (imsize) ? 0 : SHM_RDONLY; // client opens memory in readonly mode
|
||||
IMG *ptr = shmat(shmid, NULL, flags);
|
||||
if(ptr == (void*)-1){
|
||||
if(imsize) WARN("Can't attach SHM segment %d", key);
|
||||
return NULL;
|
||||
}
|
||||
if(!imsize){
|
||||
if(ptr->MAGICK != SHM_MAGIC){
|
||||
WARNX("Shared memory %d isn't belongs to image server", key);
|
||||
shmdt(ptr);
|
||||
return NULL;
|
||||
}
|
||||
return ptr;
|
||||
}
|
||||
bzero(ptr, sizeof(IMG));
|
||||
ptr->data = (void*)((uint8_t*)ptr + sizeof(IMG));
|
||||
ptr->MAGICK = SHM_MAGIC;
|
||||
return ptr;
|
||||
}
|
||||
|
||||
8
socket.h
8
socket.h
@ -19,8 +19,12 @@
|
||||
#pragma once
|
||||
#include <pthread.h>
|
||||
#include <stdint.h>
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/shm.h>
|
||||
#include <usefull_macros.h>
|
||||
|
||||
#include "basestructs.h"
|
||||
|
||||
// max & min TCP socket port number
|
||||
#define PORTN_MAX (65535)
|
||||
#define PORTN_MIN (1024)
|
||||
@ -32,7 +36,7 @@
|
||||
// wait for mutex locking
|
||||
#define BUSY_TIMEOUT (1.0)
|
||||
// waiting for answer timeout
|
||||
#define ANSWER_TIMEOUT (0.1)
|
||||
#define ANSWER_TIMEOUT (0.001)
|
||||
// wait for exposition ends (between subsequent check calls)
|
||||
#define WAIT_TIMEOUT (2.0)
|
||||
// client will disconnect after this time from last server message
|
||||
@ -75,5 +79,5 @@ int senddata(int fd, void *data, size_t l);
|
||||
int sendmessage(int fd, const char *msg, int l);
|
||||
int sendstrmessage(int fd, const char *msg);
|
||||
char *get_keyval(char *keyval);
|
||||
|
||||
IMG *getshm(key_t key, size_t imsize);
|
||||
int canberead(int fd);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user