diff --git a/Astar_cameras/artifical_star.c b/Astar_cameras/artifical_star.c index c70ba69..3071572 100644 --- a/Astar_cameras/artifical_star.c +++ b/Astar_cameras/artifical_star.c @@ -53,11 +53,13 @@ static float camtemp = -30., exptime = 0.1; static cc_capture_status capstat = CAPTURE_NO; static double texpstart = 0.; static uint8_t bitpix = 16; // bit depth: 8 or 16 -static il_Image *imagemask = NULL; // mask +static il_Image *imagemask = NULL, *imagebg; // mask & background +static char *maskfilename = NULL, *bgfilename = NULL; // filenames typedef struct{ int Nstars; // amount of stars int x0, y0; // center of field in array coordinates + double rotan0; // starting rotation angle int xs[MAX_STARS], ys[MAX_STARS]; // center of star field in array coordinates double fwhm; // stars min FWHM, arcsec double beta; // Moffat `beta` parameter @@ -66,6 +68,7 @@ typedef struct{ double mag[MAX_STARS]; // star magnitude: 0m is 0xffff/0xff ADUs per second double vX; // X axe drift speed (arcsec/s) double vY; // Y -//- + double vR; // rotation speed (arcsec/s) double fluct; // stars position fluctuations (arcsec/sec) double noiselambda; // poisson noice lambda value } settings_t; @@ -73,14 +76,16 @@ typedef struct{ static settings_t settings = { .Nstars = 1, .x0 = 512, .y0 = 512, - .xs = {0}, .ys = {0}, - .fwhm = 1.5, .beta = 1., .scale = 0.03, .mag = {0.}, - .fluct = 1., .noiselambda = 3., + .fwhm = 1.5, .beta = 1., .scale = 0.03, + .fluct = 0.3, .noiselambda = 1., }; // min/max for parameters static const double fwhmmin = 0.1, fwhmmax = 10., scalemin = 0.001, scalemax = 3600., magmin = -30., magmax = 30.; static const double vmin = -20., vmax = 20., fluctmin = 0., fluctmax = 3., betamin = 0.5; +static const double vrotmin = -36000., vrotmax = 36000.; // limit rotator speed to 10 degrees per second +static const double rotanmin = 0., rotanmax = 1295999; // 0..360degr-1'' static double dX = 0., dY = 0.; // current "sky" coordinates (arcsec) relative to field center (according vdrift) +static double rotangle = 0., sinr = 0., cosr = 1.; // current rotation angle (arcsec) around x0/y0 and its sin/cos static int Xc = 0, Yc = 0; // current pixel coordinates of "sky" center (due to current image size, clip and scale) + fluctuations static double Tstart = -1.; // global acquisition start static double Xfluct = 0., Yfluct = 0.; // fluctuation additions in arcsec @@ -98,13 +103,14 @@ static void test_template(){ FWHM0 = settings.fwhm; scale0 = settings.scale; il_Image_free(&star); +DBG("MAKE STAR, wh=%d, beta=%g", templ_wh, settings.beta); star = il_Image_star(IMTYPE_D, templ_wh, templ_wh, settings.fwhm, settings.beta); - //il_Image_minmax(star); - //DBG("STAR: %dx%d, max=%g, min=%g, %d bytes per pix, type %d; templ_wh=%d", star->height, star->width, star->maxval, star->minval, star->pixbytes, star->type, templ_wh); +il_Image_minmax(star); +DBG("STAR: %dx%d, max=%g, min=%g, %d bytes per pix, type %d; templ_wh=%d", star->height, star->width, star->maxval, star->minval, star->pixbytes, star->type, templ_wh); double sum = 0., *ptr = (double*)star->data; int l = templ_wh * templ_wh; for(int i = 0; i < l; ++i) sum += ptr[i]; - //green("sum=%g\n", sum); +green("sum=%g\n", sum); OMP_FOR() for(int i = 0; i < l; ++i) ptr[i] /= sum; } @@ -127,7 +133,8 @@ static void test_template(){ register int w = ima->w;\ int h = ima->h, tw2 = templ_wh/2, X0,Y0, X1,Y1, x0,y0;\ for(int N = 0; N < settings.Nstars; ++N){\ - int Xstar = Xc + settings.xs[N] - camera.geometry.xoff, Ystar = Yc + settings.ys[N] - camera.geometry.yoff;\ + int Xstar = Xc + (settings.xs[N]*cosr - settings.ys[N]*sinr)/settings.scale; \ + int Ystar = Yc + (settings.ys[N]*cosr + settings.xs[N]*sinr)/settings.scale;\ if(Xstar - tw2 < 0){\ X0 = tw2 - Xstar + 1;\ x0 = 0;\ @@ -164,6 +171,20 @@ static void test_template(){ }\ }\ }\ + if(imagebg){ /* add background */ \ + X0 = camera.geometry.xoff; Y0 = camera.geometry.yoff; \ + X1 = imagebg->width; Y1 = imagebg->height; \ + if(X1-X0 > w) X1 = X0 + w;\ + if(Y1-Y0 > h) Y1 = Y0 + h; \ + OMP_FOR()\ + for(int y = Y0; y < Y1; ++y){\ + type *out = &((type*)ima->data)[(y-Y0)*w];\ + uint8_t *in = &((uint8_t*)imagebg->data)[y*imagemask->width + X0];\ + for(int x = X0; x < X1; ++x, ++in, ++out){\ + *out = (*out + *in > maxval) ? maxval : *out + *in;\ + }\ + } \ + }\ if(imagemask){ /* apply mask */ \ X0 = camera.geometry.xoff; Y0 = camera.geometry.yoff; \ X1 = imagemask->width; Y1 = imagemask->height; \ @@ -174,12 +195,20 @@ static void test_template(){ type *out = &((type*)ima->data)[(y-Y0)*w];\ uint8_t *in = &((uint8_t*)imagemask->data)[y*imagemask->width + X0];\ for(int x = X0; x < X1; ++x, ++in, ++out){\ - type p = il_Poisson(settings.noiselambda); \ - /*type p = fabs(il_Normal(0., 3.)); */\ - if(*in == 0) *out = p; else *out = (*out+p > maxval) ? maxval : *out + p; \ + if(*in == 0) *out = 0;\ }\ } \ - } + }\ + if(settings.noiselambda > 1.){ /* apply noise */ \ + w *= h; \ + type *out = (type*)ima->data;\ + OMP_FOR()\ + for(int i = 0; i < w; ++i){\ + type p = il_Poisson(settings.noiselambda); \ + out[i] = (out[i] + p > maxval) ? maxval : out[i] + p; \ + }\ + }\ + static void gen16(cc_IMG *ima){ GEN(ima, uint16_t, 0xffff); @@ -214,11 +243,17 @@ static int startexp(){ else if(dT > 1.) dT = 1.; // dT for fluctuations amplitude if(Tstart < 0.) Tstart = Tnow; texpstart = Tnow; + double Tfromstart = Tnow - Tstart; // recalculate center of field coordinates at moment of exp start - dX += (dtime() - Tstart) * settings.vX; - dY += (dtime() - Tstart) * settings.vY; - Xc = dX/settings.scale + settings.x0 - camera.array.xoff; - Yc = dY/settings.scale + settings.y0 - camera.array.yoff; + dX = Tfromstart * settings.vX; + dY = Tfromstart * settings.vY; + rotangle = settings.rotan0 + Tfromstart * settings.vR; + if(rotangle < rotanmin) rotangle += 360.*3600.; + else if(rotangle > rotanmax) rotangle -= 360.*3600.; + sincos(rotangle * M_PI/3600./180., &sinr, &cosr); + double xx = dX/settings.scale, yy = dY/settings.scale; + Xc = xx*cosr - yy*sinr + settings.x0 - camera.array.xoff - camera.geometry.xoff; + Yc = yy*cosr + xx*sinr + settings.y0 - camera.array.yoff - camera.geometry.yoff; DBG("dX=%g, dY=%g; Xc=%d, Yc=%d", dX, dY, Xc, Yc); // add fluctuations double fx = settings.fluct * dT * (2.*drand48() - 1.); // [-fluct*dT, +fluct*dT] @@ -472,7 +507,31 @@ static cc_hresult loadmask(const char *str, cc_charbuff *ans){ snprintf(buf, FILENAME_MAX, "Can't read image '%s'", nm); res = RESULT_FAIL; }else{ - snprintf(buf, FILENAME_MAX, "Got image '%s'; w=%d, h=%d, type=%d (impix=%d)", nm, imagemask->width, imagemask->height, imagemask->type, imagemask->pixbytes); + if(imagemask->pixbytes != 1){ + snprintf(buf, FILENAME_MAX, "Image '%s' isn't a 8-bit image", nm); + res = RESULT_FAIL; + }else + snprintf(buf, FILENAME_MAX, "Got image '%s'; w=%d, h=%d, type=%d (impix=%d)", nm, imagemask->width, imagemask->height, imagemask->type, imagemask->pixbytes); + } + cc_charbufaddline(ans, buf); + FREE(nm); + return res; +} + +static cc_hresult loadbg(const char *str, cc_charbuff *ans){ + char buf[FILENAME_MAX+32], *bptr = buf; + strncpy(buf, str, FILENAME_MAX+31); + char *val = cc_get_keyval(&bptr); + if(strcmp(bptr, "bkg") != 0) return RESULT_BADKEY; + if(imagebg) il_Image_free(&imagebg); + imagebg = il_Image_read(val); + char *nm = strdup (val); + cc_hresult res = RESULT_OK; + if(!imagebg){ + snprintf(buf, FILENAME_MAX, "Can't read image '%s'", nm); + res = RESULT_FAIL; + }else{ + snprintf(buf, FILENAME_MAX, "Got image '%s'; w=%d, h=%d, type=%d (impix=%d)", nm, imagebg->width, imagebg->height, imagebg->type, imagebg->pixbytes); } cc_charbufaddline(ans, buf); FREE(nm); @@ -483,17 +542,20 @@ static cc_hresult loadmask(const char *str, cc_charbuff *ans){ static cc_parhandler_t handlers[] = { {"xc", "x center of field in array coordinates", NULL, (void*)&settings.x0, NULL, NULL, CC_PAR_INT}, {"yc", "y center of field in array coordinates", NULL, (void*)&settings.y0, NULL, NULL, CC_PAR_INT}, - {"x", "X coordinate of next star", setXYs, NULL, NULL, NULL, 0}, - {"y", "Y coordinate of next star", setXYs, NULL, NULL, NULL, 0}, + {"x", "X coordinate of next star (arcsec, in field coordinate system)", setXYs, NULL, NULL, NULL, CC_PAR_INT}, + {"y", "Y coordinate of next star (arcsec, in field coordinate system)", setXYs, NULL, NULL, NULL, CC_PAR_INT}, {"fwhm", "stars min FWHM, arcsec", NULL, (void*)&settings.fwhm, (void*)&fwhmmin, (void*)&fwhmmax, CC_PAR_DOUBLE}, {"scale", "CCD scale: arcsec/pix", NULL, (void*)&settings.scale, (void*)&scalemin, (void*)&scalemax, CC_PAR_DOUBLE}, - {"mag", "Next star magnitude: 0m is 0xffff/0xff (16/8 bit) ADUs per second", setmag, NULL, NULL, NULL, 0}, - {"mask", "load mask image (binary, ANDed)", loadmask, NULL, NULL, NULL, 0}, + {"mag", "Next star magnitude: 0m is 0xffff/0xff (16/8 bit) ADUs per second", setmag, NULL, (void*)&magmin, (void*)&magmax, CC_PAR_DOUBLE}, + {"mask", "load mask image (binary, ANDed)", loadmask, (void*)&maskfilename, NULL, NULL, CC_PAR_STRING}, + {"bkg", "load background image", loadbg, (void*)&bgfilename, NULL, NULL, CC_PAR_STRING}, {"vx", "X axe drift speed (arcsec/s)", NULL, (void*)&settings.vX, (void*)&vmin, (void*)&vmax, CC_PAR_DOUBLE}, {"vy", "Y axe drift speed (arcsec/s)", NULL, (void*)&settings.vY, (void*)&vmin, (void*)&vmax, CC_PAR_DOUBLE}, + {"vr", "rotation speed (arcsec/s)", NULL, (void*)&settings.vR, (void*)&vrotmin, (void*)&vrotmax, CC_PAR_DOUBLE}, {"fluct", "stars position fluctuations (arcsec per sec)", NULL, (void*)&settings.fluct, (void*)&fluctmin, (void*)&fluctmax, CC_PAR_DOUBLE}, {"beta", "Moffat `beta` parameter", NULL, (void*)&settings.beta, (void*)&betamin, NULL, CC_PAR_DOUBLE}, {"lambda", "Poisson noice lambda value (>1)", NULL, (void*)&settings.noiselambda, (void*)&noicelambdamin, NULL, CC_PAR_DOUBLE}, + {"rotangle", "Starting rotation angle (arcsec)", NULL, (void*)&settings.rotan0, (void*)&rotanmin, (void*)&rotanmax, CC_PAR_DOUBLE}, //{"", "", NULL, (void*)&settings., (void*)&, (void*)&, CC_PAR_DOUBLE}, CC_PARHANDLER_END }; diff --git a/Readme.md b/Readme.md index a5486cd..be7b228 100644 --- a/Readme.md +++ b/Readme.md @@ -11,12 +11,15 @@ To restart server (e.g. if hardware was off) kill it with SIGUSR1 cmake options: - `-DAPOGEE=ON` - compile Apogee plugin -- `-DDEBUG=ON` - make with a lot debugging info -- `-DIMAGEVIEW=ON` - compile with image viewer support (only for standalone) (OpenGL!!!) +- `-DASTAR=ON` - compile "artifical star" plugin - `-DBASLER=ON` - compile Basler support plugin +- `-DDEBUG=ON` - make with a lot debugging info +- `-DDUMMY=OFF` - compile without dummy camera plugin +- `-DEXAMPLES=ON` - compile also some exaples of libccdcapture use - `-DFLI=ON` - compile FLI support plugin -- `-DFLYCAPT=ON` - compile GrassHopper PointGrey plugin +- `-DFLYCAP=ON` - compile GrassHopper PointGrey plugin - `-DHIKROBOT=ON` - compile HikRobot support plugin +- `-DIMAGEVIEW=OFF` - compile without image viewer support (OpenGL!!!) - `-DZWO=ON` - compile ZWO support plugin @@ -36,6 +39,7 @@ Usage: ccd_capture [args] [output file prefix] -V, --verbose verbose level (-V - messages, -VV - debug, -VVV - all shit) -W, --wheeldev=arg wheel device plugin (e.g. devdummy.so) -Y, --objtype=arg object type (neon, object, flat etc) + -_, --plugincmd custom camera device plugin command -a, --addsteps=arg move focuser to relative position, mm (only for standalone) -c, --conf-ioport=arg configure I/O port pins to given value (decimal number, pin1 is LSB, 1 == output, 0 == input) -d, --dark not open shutter, when exposing ("dark frames") @@ -43,6 +47,7 @@ Usage: ccd_capture [args] [output file prefix] -g, --goto=arg move focuser to absolute position, mm -h, --hbin=arg horizontal binning to N pixels -i, --get-ioport get value of I/O port pins + -k, --shmkey=arg shared memory (with image data) key (default: 7777777) -l, --nflushes=arg N flushes before exposing (default: 1) -n, --nframes=arg make series of N frames -o, --outfile=arg output file name @@ -64,15 +69,16 @@ Usage: ccd_capture [args] [output file prefix] --client run as client --close-shutter close shutter --focdevno=arg focuser device number (if many: 0, 1, 2 etc) + --forceimsock force using image through socket transition even if can use SHM --gain=arg CMOS gain level --help show this help - --imageport=arg local INET socket port to send/receive images + --imageport=arg INET image socket port + --infty=arg start (!=0) or stop(==0) infinity capturing loop --logfile=arg logging file name (if run as server) --open-shutter open shutter - --path=arg UNIX socket name - --pidfile=arg PID file (default: /tmp/CCD_Capture.pid) + --path=arg UNIX socket name (command socket) --plugin=arg common device plugin (e.g devfli.so) - --port=arg local INET socket port + --port=arg local INET command socket port --restart restart image server --rewrite rewrite output file if exists --set-fan=arg set fan speed (0 - off, 1 - low, 2 - high) @@ -106,3 +112,44 @@ Mouse functions: - Wheel up - scroll up, or scroll left (with Shift), or zoom+ (with Ctrl). - Wheel down - scroll down, or scroll right (with Shift), or zoom- (with Ctrl). +## Plugins custom commands +Since version 1.2.0 introduced custom camera plugin commands system. Commonly to read help just +type `-_help`. You can point as much custom commands in one commandline as you need. They can be a +procedures/flags (like `-_cmd`) or a setters/getters (like `-_key` and `-_key=value`). + +### Dummy camera plugin custom commands +This plugin simply emulates image aqcuisition process where images are 2-D sinusoide with given periods. +Each next frame will be shifted by one pixel. + +Commands: + +- px = (double) [1, inf] - set/get sin period over X axis (pix) +- py = (double) [1, inf] - set/get sin period over Y axis (pix) + + +### Artifical star plugin custom commands +This plugin lets you to emulate star field with up to 32 stars. You can shift center of field emulating +telescope correction, also you can rotate field emulating derotation. +All stars (Moffat) have the same FWHM and scale parameters. Their coordinates are given by arrays `x` +and `y` with a hardware magnitude `mag`. You can emulate image drift and rotation. Also you can add +a little image position (full frame position) fluctuations. To emulate poisson noice just point its `lambda` +value (`lambda==1` means no noise). + +Commands: + +- xc = (int) - x center of field in array coordinates +- yc = (int) - y center of field in array coordinates +- x - X coordinate of next star +- y - Y coordinate of next star +- fwhm = (double) [0.1, 10] - stars min FWHM, arcsec +- scale = (double) [0.001, 3600] - CCD scale: arcsec/pix +- mag - Next star magnitude: 0m is 0xffff/0xff (16/8 bit) ADUs per second +- mask - load mask image (binary, ANDed) +- vx = (double) [-20, 20] - X axe drift speed (arcsec/s) +- vy = (double) [-20, 20] - Y axe drift speed (arcsec/s) +- vr = (double) [-36000, 36000] - rotation speed (arcsec/s) +- fluct = (double) [0, 3] - stars position fluctuations (arcsec per sec) +- beta = (double) [0.5, inf] - Moffat `beta` parameter +- lambda = (double) [1, inf] - Poisson noice lambda value (>1) +- rotangle = (double) [0, 1.296e+06] - Starting rotation angle (arcsec) + diff --git a/ccdcapture.c b/ccdcapture.c index 5dd39d8..378789d 100644 --- a/ccdcapture.c +++ b/ccdcapture.c @@ -745,8 +745,11 @@ static size_t print_val(cc_partype_t t, void *val, char *buf, size_t bufl){ case CC_PAR_DOUBLE: l = snprintf(buf, bufl, "%g", *(double*)val); break; + case CC_PAR_STRING: + l = snprintf(buf, bufl, "%s", *(char**)val); + break; default: - l = snprintf(buf, bufl, "hoojnya"); + l = snprintf(buf, bufl, "(undefined)"); break; } return l; @@ -795,6 +798,10 @@ cc_hresult cc_plugin_customcmd(const char *str, cc_parhandler_t *handlers, cc_ch dval = atof(val); UPDATE_VAL(double, dval, "%g"); break; + case CC_PAR_STRING: + if(*(char**)phptr->ptr) free(*(char**)phptr->ptr); + *(char**)phptr->ptr = strdup(val); + break; default: result = RESULT_FAIL; } @@ -817,7 +824,7 @@ cc_hresult cc_plugin_customcmd(const char *str, cc_parhandler_t *handlers, cc_ch while(phptr->cmd){ char *bptr = buf; size_t L = 511; ADDL("\t%s", phptr->cmd); - if(phptr->ptr){ + if(phptr->type != CC_PAR_NONE){ ADDL(" = ("); switch(phptr->type){ case CC_PAR_INT: @@ -829,6 +836,9 @@ cc_hresult cc_plugin_customcmd(const char *str, cc_parhandler_t *handlers, cc_ch case CC_PAR_DOUBLE: ADDL("double"); break; + case CC_PAR_STRING: + ADDL("string"); + break; default: ADDL("undefined"); } diff --git a/ccdcapture.h b/ccdcapture.h index 116c79b..85d3723 100644 --- a/ccdcapture.h +++ b/ccdcapture.h @@ -275,9 +275,11 @@ typedef enum{ #define CC_CMD_WPOS "wpos" typedef enum{ // parameter type + CC_PAR_NONE, // no parameter CC_PAR_INT, CC_PAR_FLOAT, CC_PAR_DOUBLE, + CC_PAR_STRING, } cc_partype_t; typedef struct{ // custom plugin parameters diff --git a/ccdfunc.c b/ccdfunc.c index 545702e..b1f7e0b 100644 --- a/ccdfunc.c +++ b/ccdfunc.c @@ -606,22 +606,27 @@ int prepare_ccds(){ // run plugincmd handler if available if(GP->plugincmd){ DBG("Plugincmd"); - if(!camera->plugincmd) WARNX(_("Camera plugin have no custom commands")); + if(!camera->plugincmd) ERRX(_("Camera plugin have no custom commands")); else{ char **p = GP->plugincmd; cc_charbuff *b = cc_charbufnew(); DBG("got %s", *p); + int stop = FALSE; while(p && *p){ cc_charbufclr(b); cc_hresult r = camera->plugincmd(*p, b); if(r == RESULT_OK || r == RESULT_SILENCE) green("Command '%s'", *p); - else red("Command '%s'", *p); + else{ + stop = TRUE; + red("Command '%s'", *p); + } if(r != RESULT_SILENCE) printf(" returns \"%s\"", cc_hresult2str(r)); if(b->buflen) printf("\n%s", b->buf); else printf("\n"); ++p; } cc_charbufdel(&b); + if(stop) signals(9); } } if(GP->fanspeed > -1){ diff --git a/locale/ru/messages.po b/locale/ru/messages.po index 4f37b79..6d5d9d7 100644 --- a/locale/ru/messages.po +++ b/locale/ru/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-19 11:54+0300\n" +"POT-Creation-Date: 2024-02-21 11:24+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -392,188 +392,188 @@ msgstr "" msgid "Camera plugin have no custom commands" msgstr "" -#: ccdfunc.c:629 +#: ccdfunc.c:634 msgid "Camera plugin have no fun speed setter" msgstr "" -#: ccdfunc.c:632 +#: ccdfunc.c:637 msgid "Can't set fan speed" msgstr "" -#: ccdfunc.c:633 +#: ccdfunc.c:638 #, c-format msgid "Set fan speed to %d" msgstr "" -#: ccdfunc.c:639 +#: ccdfunc.c:644 #, c-format msgid "Camera model: %s" msgstr "" -#: ccdfunc.c:640 +#: ccdfunc.c:645 #, c-format msgid "Pixel size: %g x %g" msgstr "" -#: ccdfunc.c:646 +#: ccdfunc.c:651 #, c-format msgid "Full array: %s" msgstr "" -#: ccdfunc.c:649 +#: ccdfunc.c:654 #, c-format msgid "Field of view: %s" msgstr "" -#: ccdfunc.c:652 +#: ccdfunc.c:657 #, c-format msgid "Current format: %s" msgstr "" -#: ccdfunc.c:654 +#: ccdfunc.c:659 msgid "Camera plugin have no temperature setter" msgstr "" -#: ccdfunc.c:655 +#: ccdfunc.c:660 #, c-format msgid "Can't set T to %g degC" msgstr "" -#: ccdfunc.c:664 +#: ccdfunc.c:669 #, c-format msgid "Shutter command: %s\n" msgstr "" -#: ccdfunc.c:666 +#: ccdfunc.c:671 #, c-format msgid "Can't run shutter command %s (unsupported?)" msgstr "" -#: ccdfunc.c:669 +#: ccdfunc.c:674 #, c-format msgid "Try to configure I/O port as %d" msgstr "" -#: ccdfunc.c:671 +#: ccdfunc.c:676 msgid "Can't configure (unsupported?)" msgstr "" -#: ccdfunc.c:678 +#: ccdfunc.c:683 msgid "Can't get IOport state (unsupported?)" msgstr "" -#: ccdfunc.c:681 +#: ccdfunc.c:686 #, c-format msgid "Try to write %d to I/O port" msgstr "" -#: ccdfunc.c:683 +#: ccdfunc.c:688 msgid "Can't set IOport" msgstr "" -#: ccdfunc.c:690 +#: ccdfunc.c:695 #, c-format msgid "Set gain to %g" msgstr "" -#: ccdfunc.c:691 +#: ccdfunc.c:696 #, c-format msgid "Can't set gain to %g" msgstr "" -#: ccdfunc.c:696 +#: ccdfunc.c:701 #, c-format msgid "Set brightness to %g" msgstr "" -#: ccdfunc.c:697 +#: ccdfunc.c:702 #, c-format msgid "Can't set brightness to %g" msgstr "" -#: ccdfunc.c:703 server.c:278 +#: ccdfunc.c:708 server.c:278 #, c-format msgid "Can't set binning %dx%d" msgstr "" -#: ccdfunc.c:715 server.c:279 +#: ccdfunc.c:720 server.c:279 msgid "Can't set given geometry" msgstr "" -#: ccdfunc.c:719 -#, c-format -msgid "Can't set %d flushes" -msgstr "" - -#: ccdfunc.c:722 -msgid "Camera plugin have no exposition setter" -msgstr "" - #: ccdfunc.c:724 #, c-format -msgid "Can't set exposure time to %f seconds" +msgid "Can't set %d flushes" msgstr "" #: ccdfunc.c:727 -msgid "Can't change frame type" +msgid "Camera plugin have no exposition setter" msgstr "" -#: ccdfunc.c:730 -msgid "Can't set bit depth" +#: ccdfunc.c:729 +#, c-format +msgid "Can't set exposure time to %f seconds" msgstr "" #: ccdfunc.c:732 +msgid "Can't change frame type" +msgstr "" + +#: ccdfunc.c:735 +msgid "Can't set bit depth" +msgstr "" + +#: ccdfunc.c:737 msgid "Can't set readout speed" msgstr "" -#: ccdfunc.c:733 +#: ccdfunc.c:738 #, c-format msgid "Readout mode: %s" msgstr "" -#: ccdfunc.c:734 +#: ccdfunc.c:739 msgid "Only show statistics" msgstr "" -#: ccdfunc.c:737 +#: ccdfunc.c:742 msgid "Can't get current binning" msgstr "" -#: ccdfunc.c:761 +#: ccdfunc.c:766 #, c-format msgid "Capture frame %d" msgstr "" -#: ccdfunc.c:762 ccdfunc.c:837 server.c:149 server.c:150 +#: ccdfunc.c:767 ccdfunc.c:842 server.c:149 server.c:150 msgid "Camera plugin have no function `start exposition`" msgstr "" -#: ccdfunc.c:764 ccdfunc.c:839 server.c:155 server.c:156 +#: ccdfunc.c:769 ccdfunc.c:844 server.c:155 server.c:156 msgid "Can't start exposition" msgstr "" -#: ccdfunc.c:769 +#: ccdfunc.c:774 msgid "Can't capture image" msgstr "" -#: ccdfunc.c:772 +#: ccdfunc.c:777 msgid "Read grabbed image" msgstr "" -#: ccdfunc.c:774 ccdfunc.c:852 server.c:173 server.c:174 +#: ccdfunc.c:779 ccdfunc.c:857 server.c:173 server.c:174 msgid "Camera plugin have no function `capture`" msgstr "" -#: ccdfunc.c:776 ccdfunc.c:853 +#: ccdfunc.c:781 ccdfunc.c:858 msgid "Can't grab image" msgstr "" -#: ccdfunc.c:788 client.c:270 +#: ccdfunc.c:793 client.c:270 #, c-format msgid "%d seconds till pause ends\n" msgstr "" -#: ccdfunc.c:850 +#: ccdfunc.c:855 msgid "Some error when capture" msgstr "" diff --git a/locale/ru/ru.po b/locale/ru/ru.po index 325c411..85e3713 100644 --- a/locale/ru/ru.po +++ b/locale/ru/ru.po @@ -7,7 +7,7 @@ msgid "" msgstr "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" - "POT-Creation-Date: 2024-02-15 16:32+0300\n" + "POT-Creation-Date: 2024-02-20 16:30+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -21,7 +21,7 @@ msgstr "Project-Id-Version: PACKAGE VERSION\n" msgid "%.1f seconds till exposition ends" msgstr "%.1f секунд до окончания экспозиции" -#: ccdfunc.c:788 client.c:270 +#: ccdfunc.c:793 client.c:270 #, c-format msgid "%d seconds till pause ends\n" msgstr "%d секунд до окончания паузы\n" @@ -46,7 +46,7 @@ msgstr " msgid "Camera device unknown" msgstr "Устройство свеоприемника не опознано" -#: ccdfunc.c:639 +#: ccdfunc.c:644 #, c-format msgid "Camera model: %s" msgstr "Модель светоприемника: %s" @@ -60,22 +60,22 @@ msgstr " msgid "Camera plugin have no custom commands" msgstr "У плагина камеры нет особых команд" -#: ccdfunc.c:722 +#: ccdfunc.c:727 #, fuzzy msgid "Camera plugin have no exposition setter" msgstr "У плагина камеры нет особых команд" -#: ccdfunc.c:629 +#: ccdfunc.c:634 #, fuzzy msgid "Camera plugin have no fun speed setter" msgstr "У плагина камеры нет особых команд" -#: ccdfunc.c:774 ccdfunc.c:852 server.c:173 server.c:174 +#: ccdfunc.c:779 ccdfunc.c:857 server.c:173 server.c:174 #, fuzzy msgid "Camera plugin have no function `capture`" msgstr "У плагина камеры нет особых команд" -#: ccdfunc.c:762 ccdfunc.c:837 server.c:149 server.c:150 +#: ccdfunc.c:767 ccdfunc.c:842 server.c:149 server.c:150 #, fuzzy msgid "Camera plugin have no function `start exposition`" msgstr "У плагина камеры нет особых команд" @@ -85,28 +85,28 @@ msgstr " msgid "Camera plugin have no model name getter" msgstr "У плагина камеры нет особых команд" -#: ccdfunc.c:654 +#: ccdfunc.c:659 #, fuzzy msgid "Camera plugin have no temperature setter" msgstr "У плагина камеры нет особых команд" -#: ccdfunc.c:769 +#: ccdfunc.c:774 msgid "Can't capture image" msgstr "Не могу захватить изображение" -#: ccdfunc.c:727 +#: ccdfunc.c:732 msgid "Can't change frame type" msgstr "Не могу изменить тип кадра" -#: ccdfunc.c:671 +#: ccdfunc.c:676 msgid "Can't configure (unsupported?)" msgstr "Не могу сконфигурировать (опция не поддерживается?)" -#: ccdfunc.c:678 +#: ccdfunc.c:683 msgid "Can't get IOport state (unsupported?)" msgstr "Не могу получить состояние порта I/O (не поддерживается?)" -#: ccdfunc.c:737 +#: ccdfunc.c:742 msgid "Can't get current binning" msgstr "Не могу получить текущее значение биннинга" @@ -122,7 +122,7 @@ msgstr " msgid "Can't get max wheel position" msgstr "Не могу определить предельную позицию колеса" -#: ccdfunc.c:776 ccdfunc.c:853 +#: ccdfunc.c:781 ccdfunc.c:858 msgid "Can't grab image" msgstr "Не могу захватить изображение" @@ -142,7 +142,7 @@ msgstr " msgid "Can't open OpenGL window, image preview will be inaccessible" msgstr "Не могу открыть окно OpenGL, отображение будет недоступно" -#: ccdfunc.c:666 +#: ccdfunc.c:671 #, c-format msgid "Can't run shutter command %s (unsupported?)" msgstr "Не могу выполнить команду затвора %s (не поддерживается?)" @@ -152,16 +152,16 @@ msgstr " msgid "Can't save file with prefix %s" msgstr "Не могу сохранить файл с префиксом %s" -#: ccdfunc.c:719 +#: ccdfunc.c:724 #, c-format msgid "Can't set %d flushes" msgstr "Не могу установить %d сбросов" -#: ccdfunc.c:683 +#: ccdfunc.c:688 msgid "Can't set IOport" msgstr "Не могу поменять значения порта I/O" -#: ccdfunc.c:655 +#: ccdfunc.c:660 #, c-format msgid "Can't set T to %g degC" msgstr "Не могу установить температуру в %g градЦ" @@ -178,35 +178,35 @@ msgstr " msgid "Can't set active wheel number" msgstr "Не могу установить номер активного колеса" -#: ccdfunc.c:703 server.c:278 +#: ccdfunc.c:708 server.c:278 #, c-format msgid "Can't set binning %dx%d" msgstr "Не могу установить биннинг %dx%d" -#: ccdfunc.c:730 +#: ccdfunc.c:735 msgid "Can't set bit depth" msgstr "Не могу установить разрядность АЦП" -#: ccdfunc.c:697 +#: ccdfunc.c:702 #, c-format msgid "Can't set brightness to %g" msgstr "Не могу установить яркость в %g" -#: ccdfunc.c:724 +#: ccdfunc.c:729 #, c-format msgid "Can't set exposure time to %f seconds" msgstr "Не могу установить экспозицию в %f секунд" -#: ccdfunc.c:632 +#: ccdfunc.c:637 msgid "Can't set fan speed" msgstr "Не могу установить скорость вентиляторов" -#: ccdfunc.c:691 +#: ccdfunc.c:696 #, c-format msgid "Can't set gain to %g" msgstr "Не могу установить Gain в %g" -#: ccdfunc.c:715 server.c:279 +#: ccdfunc.c:720 server.c:279 msgid "Can't set given geometry" msgstr "Не могу установить геометрию" @@ -220,7 +220,7 @@ msgstr " msgid "Can't set position %g: out of limits [%g, %g]" msgstr "Не могу установить позицию %g: вне пределов [%g, %g]" -#: ccdfunc.c:732 +#: ccdfunc.c:737 msgid "Can't set readout speed" msgstr "Не могу установить скорость считывания" @@ -229,16 +229,16 @@ msgstr " msgid "Can't set wheel position %d" msgstr "Не могу установить положение колеса %d" -#: ccdfunc.c:764 ccdfunc.c:839 server.c:155 server.c:156 +#: ccdfunc.c:769 ccdfunc.c:844 server.c:155 server.c:156 msgid "Can't start exposition" msgstr "Не могу начать экспозицию" -#: ccdfunc.c:761 +#: ccdfunc.c:766 #, c-format msgid "Capture frame %d" msgstr "Захват кадра %d" -#: ccdfunc.c:652 +#: ccdfunc.c:657 #, c-format msgid "Current format: %s" msgstr "Текущий формат: %s" @@ -256,7 +256,7 @@ msgstr " msgid "Error saving file" msgstr "Ошибка сохранения файла" -#: ccdfunc.c:649 +#: ccdfunc.c:654 #, c-format msgid "Field of view: %s" msgstr "Поле зрения: %s" @@ -285,7 +285,7 @@ msgstr " msgid "Found %d wheels, you point number %d" msgstr "Обнаружено %d колес, вы указали %d" -#: ccdfunc.c:646 +#: ccdfunc.c:651 #, c-format msgid "Full array: %s" msgstr "Полный формат: %s" @@ -324,20 +324,20 @@ msgstr " msgid "No wheels found" msgstr "Турелей не обнаружено" -#: ccdfunc.c:734 +#: ccdfunc.c:739 msgid "Only show statistics" msgstr "Только отобразить статистику" -#: ccdfunc.c:640 +#: ccdfunc.c:645 #, c-format msgid "Pixel size: %g x %g" msgstr "Размер пикселя: %g x %g" -#: ccdfunc.c:772 +#: ccdfunc.c:777 msgid "Read grabbed image" msgstr "Считывание изображения" -#: ccdfunc.c:733 +#: ccdfunc.c:738 #, c-format msgid "Readout mode: %s" msgstr "Режим считывания: %s" @@ -346,36 +346,36 @@ msgstr " msgid "Server timeout" msgstr "Таймаут сервера" -#: ccdfunc.c:696 +#: ccdfunc.c:701 #, c-format msgid "Set brightness to %g" msgstr "Установить яркость в %g" -#: ccdfunc.c:633 +#: ccdfunc.c:638 #, c-format msgid "Set fan speed to %d" msgstr "Не могу установить скорость вентиляторов в %d" -#: ccdfunc.c:690 +#: ccdfunc.c:695 #, c-format msgid "Set gain to %g" msgstr "Установить Gain в %g" -#: ccdfunc.c:664 +#: ccdfunc.c:669 #, c-format msgid "Shutter command: %s\n" msgstr "Команда затвора: %s\n" -#: ccdfunc.c:850 +#: ccdfunc.c:855 msgid "Some error when capture" msgstr "Ошибка при захвате" -#: ccdfunc.c:669 +#: ccdfunc.c:674 #, c-format msgid "Try to configure I/O port as %d" msgstr "Попытка сконфигурировать порт I/O как %d" -#: ccdfunc.c:681 +#: ccdfunc.c:686 #, c-format msgid "Try to write %d to I/O port" msgstr "Попытка записи %d в порт I/O"