add custom plugin commands; start developing 'artifical star' plugin to generate 'vagrant stars'

This commit is contained in:
Edward Emelianov 2024-02-07 17:01:58 +03:00
parent 869421d52f
commit 0f4fcf5015
13 changed files with 780 additions and 277 deletions

View File

@ -0,0 +1,15 @@
cmake_minimum_required(VERSION 3.20)
set(CCDLIB devastar)
SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
find_package(PkgConfig REQUIRED)
pkg_check_modules(${CCDLIB} REQUIRED usefull_macros improc)
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} SRC)
include_directories(${${CCDLIB}_INCLUDE_DIRS} ..)
link_directories(${${CCDLIB}_LIBRARY_DIRS})
add_library(${CCDLIB} SHARED ${SRC})
target_link_libraries(${CCDLIB} ${${CCDLIB}_LIBRARIES} -fPIC)
install(TARGETS ${CCDLIB} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})

View File

@ -0,0 +1,385 @@
/*
* This file is part of the CCD_Capture project.
* Copyright 2022 Edward V. Emelianov <edward.emelianoff@gmail.com>.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <fcntl.h>
#include <improclib.h>
#include <limits.h>
#include <math.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <usefull_macros.h>
#include "ccdcapture.h"
#include "omp.h"
extern cc_Camera camera;
extern cc_Focuser focuser;
extern cc_Wheel wheel;
static const int filtermax = 5;
static const float focmaxpos = 10.;
static int curhbin = 1, curvbin = 1;
static int filterpos = 0;
static float focuserpos = 1., brightness = 1., gain = 0.;
static float camtemp = -30., exptime = 0.;
static cc_capture_status capstat = CAPTURE_NO;
static double texpstart = 0.;
static uint8_t bitpix = 16; // bit depth: 8 or 16
typedef struct{
int width; int height; // size of field where the 'star' can move
int x0; int y0; // center of star field in array coordinates
double fwhm; // stars FWHM, arcsec
double scale; // CCD scale: arcsec/pix
double mag; // star magnitude: 0m is 16384 ADUs per second per arcsec^2
} settings_t;
static settings_t settings = {
.width = 500, .height = 500,
.x0 = 512, .y0 = 512,
.fwhm = 1.5, .scale = 0.03, .mag = 10.
};
// min/max for parameters
static const int wmin = 100, hmin = 100;
static const double fwhmmin = 0.1, fwhmmax = 10., scalemin = 0.001, scalemax = 3600., magmin = -30., magmax = 30.;
static int campoll(cc_capture_status *st, float *remain){
if(capstat != CAPTURE_PROCESS){
if(st) *st = capstat;
if(remain) *remain = 0.;
return TRUE;
}
if(dtime() - texpstart > exptime){
if(st) *st = CAPTURE_READY;
if(remain) *remain = 0.;
capstat = CAPTURE_NO;
return TRUE;
}
if(st) *st = capstat;
if(remain) *remain = exptime + texpstart - dtime();
return TRUE;
}
static int startexp(){
if(capstat == CAPTURE_PROCESS) return FALSE;
capstat = CAPTURE_PROCESS;
texpstart = dtime();
return TRUE;
}
static void gen16(cc_IMG *ima){
static int n = 0;
int y1 = ima->h * curvbin, x1 = ima->w * curhbin;
OMP_FOR()
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) * (2.*M_PI)/11.)*sin((n+y) * (2.*M_PI)/22.))*32767.);
}
}
++n;
}
static void gen8(cc_IMG *ima){
static int n = 0;
int y1 = ima->h * curvbin, x1 = ima->w * curhbin;
OMP_FOR()
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) * (2.*M_PI)/11.)*sin((n+y) * (2.*M_PI)/22.))*127.);
}
}
++n;
}
static int camcapt(cc_IMG *ima){
if(!ima || !ima->data) return FALSE;
#ifdef EBUG
double t0 = dtime();
#endif
ima->bitpix = bitpix;
bzero(ima->data, ima->h*ima->w*cc_getNbytes(ima));
if(bitpix == 16) gen16(ima);
else gen8(ima);
DBG("Time of capture: %g", dtime() - t0);
return TRUE;
}
static int camsetbit(int b){
bitpix = (b) ? 16 : 8;
return TRUE;
}
static int camgetbp(uint8_t *bp){
if(bp) *bp = bitpix;
return TRUE;
}
static void camcancel(){
capstat = CAPTURE_NO;
}
static int setdevno(int n){
if(n) return FALSE;
return TRUE;
}
static int camsetbrig(float b){
brightness = b;
return TRUE;
}
static int camgetbrig(float *b){
if(!b) return FALSE;
*b = brightness;
return TRUE;
}
static int camsetexp(float t){
exptime = t;
return TRUE;
}
static int camsetgain(float g){
gain = g;
return TRUE;
}
static int camgetgain(float *g){
if(g) *g = gain;
return TRUE;
}
static int camsett(float t){
camtemp = t;
return TRUE;
}
static int camgett(float *t){
if(t) *t = camtemp;
return TRUE;
}
static int gett(float *t){
if(t) *t = M_PI;
return TRUE;
}
static int camsetbin(int h, int v){
DBG("set bin %dx%d", h, v);
curhbin = h; curvbin = v;
return TRUE;
}
static int camshutter(_U_ cc_shutter_op s){
return TRUE;
}
static int camsetgeom(cc_frameformat *f){
if(!f) return FALSE;
camera.geometry = *f;
return TRUE;
}
static int camgetnam(char *n, int l){
strncpy(n, "Dummy camera", l);
return TRUE;
}
static int camgmg(float *mg){
if(mg) *mg = 10.;
return TRUE;
}
static int camggl(cc_frameformat *max, cc_frameformat *step){
if(max) *max = camera.array;
if(step) *step = (cc_frameformat){1,1,1,1};
return TRUE;
}
static int camgetbin(int *binh, int *binv){
if(binh) *binh = curhbin;
if(binv) *binv = curvbin;
return TRUE;
}
static int camgetio(int *io){
if(io) *io = 0xDEADBEEF;
return TRUE;
}
static int camfan(_U_ cc_fan_speed spd){return TRUE;}
static int focsetpos(_U_ int a, float n){
if(n < 0. || n > focmaxpos) return FALSE;
focuserpos = n;
return TRUE;
}
static int fochome(_U_ int a){
focuserpos = 0.;
return TRUE;
}
static int focgetnam(char *n, int l){
strncpy(n, "Dummy focuser", l);
return TRUE;
}
static int focpos(float *p){
if(p) *p = focuserpos;
return TRUE;
}
static int focMp(float *p){
if(p) *p = focmaxpos;
return TRUE;
}
static int focmp(float *p){
if(p) *p = 0.;
return TRUE;
}
static int whlsetpos(int n){
if(n >= filtermax || n < 0) return FALSE;
filterpos = n;
return TRUE;
}
static int whlgetpos(int *n){
if(n) *n = filterpos;
return TRUE;
}
static int whlgmp(int *n){
if(n) *n = filtermax;
return TRUE;
}
static int whlgetnam(char *n, int l){
strncpy(n, "Dummy filter wheel", l);
return TRUE;
}
// cmd, help, handler, ptr, min, max, type
static cc_parhandler_t handlers[] = {
{"width", "width of star moving field", NULL, (void*)&settings.width, (void*)&wmin, NULL, CC_PAR_INT},
{"height", "height of star moving field", NULL, (void*)&settings.height, (void*)&hmin, NULL, CC_PAR_INT},
{"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},
{"fwhm", "star 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", "star magnitude: 0m is 16384 ADUs per second per arcsec^2", NULL, (void*)&settings.mag, (void*)&magmin, (void*)&magmax, CC_PAR_DOUBLE},
//{"", "", NULL, (void*)&, (void*)&, (void*)&settings., CC_PAR_DOUBLE},
CC_PARHANDLER_END
};
static cc_hresult plugincmd(const char *str, cc_charbuff *buf){
return cc_plugin_customcmd(str, handlers, buf);
}
static int stub(){
return TRUE;
}
static void vstub(){
FNAME();
return;
}
static int istub(_U_ int N){return TRUE;}
/*
* Global objects: camera, focuser and wheel
*/
__attribute__ ((visibility("default"))) cc_Camera camera = {
.check = stub,
.Ndevices = 1,
.close = vstub,
.pollcapture = campoll,
.capture = camcapt,
.cancel = camcancel,
.startexposition = startexp,
.plugincmd = plugincmd,
// setters:
.setDevNo = setdevno,
.setbrightness = camsetbrig,
.setexp = camsetexp,
.setgain = camsetgain,
.setT = camsett,
.setbin = camsetbin,
.setnflushes = istub,
.shuttercmd = camshutter,
.confio = istub,
.setio = istub,
.setframetype = istub,
.setbitdepth = camsetbit,
.setfastspeed = istub,
.setgeometry = camsetgeom,
.setfanspeed = camfan,
// getters:
.getbitpix = camgetbp,
.getbrightness = camgetbrig,
.getModelName = camgetnam,
.getgain = camgetgain,
.getmaxgain = camgmg,
.getgeomlimits = camggl,
.getTcold = camgett,
.getThot = camgett,
.getTbody = gett,
.getbin = camgetbin,
.getio = camgetio,
.pixX = 10.,
.pixY = 10.,
.field = (cc_frameformat){.h = 1024, .w = 1024, .xoff = 10, .yoff = 10},
.array = (cc_frameformat){.h = 1050, .w = 1050, .xoff = 0, .yoff = 0},
.geometry = {0},
};
__attribute__ ((visibility("default"))) cc_Focuser focuser = {
.check = stub,
.Ndevices = 1,
.close = vstub,
// setters:
.setDevNo = setdevno,
.setAbsPos = focsetpos,
.home = fochome,
// getters:
.getModelName = focgetnam,
.getTbody = gett,
.getPos = focpos,
.getMaxPos = focMp,
.getMinPos = focmp,
};
__attribute__ ((visibility("default"))) cc_Wheel wheel = {
.check = stub,
.Ndevices = 1,
.close = vstub,
// setters
.setDevNo = setdevno,
.setPos = whlsetpos,
// getters
.getModelName = whlgetnam,
.getTbody = gett,
.getPos = whlgetpos,
.getMaxPos = whlgmp,
};

View File

@ -15,7 +15,8 @@ message("VER: ${VERSION}")
# list of options # list of options
option(DEBUG "Compile in debug mode" OFF) option(DEBUG "Compile in debug mode" OFF)
option(IMAGEVIEW "Build with imageview module" OFF) option(DUMMY "Dummy camera plugin" ON)
option(IMAGEVIEW "Build with imageview module" ON)
option(ZWO "Add support of ZWO cameras" OFF) option(ZWO "Add support of ZWO cameras" OFF)
option(FLI "Add support of FLI cameras" OFF) option(FLI "Add support of FLI cameras" OFF)
option(BASLER "Add support of BASLER cameras" OFF) option(BASLER "Add support of BASLER cameras" OFF)
@ -23,6 +24,7 @@ option(HIKROBOT "Add support of HIKROBOT cameras" OFF)
option(FLYCAP "Add support of Grasshopper FlyCap cameras" OFF) option(FLYCAP "Add support of Grasshopper FlyCap cameras" OFF)
option(APOGEE "Add support of Apogee cameras" OFF) option(APOGEE "Add support of Apogee cameras" OFF)
option(EXAMPLES "Some examples" OFF) option(EXAMPLES "Some examples" OFF)
option(ASTAR "Artifical star plugin" OFF)
# default flags # default flags
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -W -Wextra -fno-builtin-strlen") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -W -Wextra -fno-builtin-strlen")
@ -75,6 +77,7 @@ if(OPENMP_FOUND)
add_definitions(-DOMP_FOUND) add_definitions(-DOMP_FOUND)
endif() endif()
# view image in OpenGL window
if(IMAGEVIEW) if(IMAGEVIEW)
list(APPEND SOURCES events.c imageview.c) list(APPEND SOURCES events.c imageview.c)
find_package(OpenGL REQUIRED) find_package(OpenGL REQUIRED)
@ -84,9 +87,13 @@ if(IMAGEVIEW)
list(APPEND ${PROJ}_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) list(APPEND ${PROJ}_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
add_definitions(-DIMAGEVIEW) add_definitions(-DIMAGEVIEW)
endif() endif()
# Dummy and artifical star plugins
add_subdirectory(Dummy_cameras) if(DUMMY)
add_subdirectory(Dummy_cameras)
endif()
if(ASTAR)
add_subdirectory(Astar_cameras)
endif()
# additional modules with CCD/CMOS support # additional modules with CCD/CMOS support
if(ZWO) if(ZWO)
add_subdirectory(ZWO_cameras) add_subdirectory(ZWO_cameras)

View File

@ -43,6 +43,7 @@ static double texpstart = 0.;
static uint8_t bitpix = 16; // bit depth: 8 or 16 static uint8_t bitpix = 16; // bit depth: 8 or 16
// sinusoide periods // sinusoide periods
static double sinPx = 100., sinPy = 200.; static double sinPx = 100., sinPy = 200.;
static const double sinmin = 1.;
static int campoll(cc_capture_status *st, float *remain){ static int campoll(cc_capture_status *st, float *remain){
if(capstat != CAPTURE_PROCESS){ if(capstat != CAPTURE_PROCESS){
@ -256,35 +257,27 @@ static int whlgetnam(char *n, int l){
return TRUE; return TRUE;
} }
static const char* const helpmsg = /*
"Dummy camera custom plugin commands:\n" static int checker(const char *str, cc_charbuff *ans){
"\tpx - set/get sin period over X axis (pix)\n" char *eq = strchr(str, '=');
"\tpy - -//- over Y axis\n" if(eq){
; float x = (float)atof(eq+1);
static const char* const pmust = "Period must be not less than 1"; if(x < 1.){if(ans) cc_charbufaddline(ans, "Value must be >= 1.");}
static const char *plugincmd(const char *str){ else return TRUE;
static char ans[BUFSIZ+1]; }else return TRUE; // getter
snprintf(ans, BUFSIZ, "%s", str); return FALSE;
char *val = cc_get_keyval(ans); }*/
if(val){ // setters
if(0 == strcmp("px", ans)){
double f = atof(val); // cmd, help, handler, ptr, type
if(f < 1.) return pmust; static cc_parhandler_t handlers[] = {
sinPx = f; {"px", "set/get sin period over X axis (pix)", NULL, (void*)&sinPx, (void*)&sinmin, NULL, CC_PAR_DOUBLE},
}else if(0 == strcmp("py", ans)){ {"py", "set/get sin period over Y axis (pix)", NULL, (void*)&sinPy, (void*)&sinmin, NULL, CC_PAR_DOUBLE},
double f = atof(val); CC_PARHANDLER_END
if(f < 1.) return pmust; };
sinPy = f;
} static cc_hresult plugincmd(const char *str, cc_charbuff *buf){
} // getters/return return cc_plugin_customcmd(str, handlers, buf);
if(0 == strcmp("px", ans)){
snprintf(ans, BUFSIZ, "px=%g", sinPx);
return (const char*) ans;
}else if(0 == strcmp("py", ans)){
snprintf(ans, BUFSIZ, "yx=%g", sinPy);
return (const char*) ans;
}
return helpmsg;
} }
static int stub(){ static int stub(){

View File

@ -189,8 +189,6 @@ static const char *resmessages[RESULT_NUM] = {
[RESULT_FAIL] = "FAIL", [RESULT_FAIL] = "FAIL",
[RESULT_BADVAL] = "BADVAL", [RESULT_BADVAL] = "BADVAL",
[RESULT_BADKEY] = "BADKEY", [RESULT_BADKEY] = "BADKEY",
// [RESULT_SILENCE] = NULL, // nothing to send
// [RESULT_DISCONNECTED] = NULL, // not to send
}; };
const char *cc_hresult2str(cc_hresult r){ const char *cc_hresult2str(cc_hresult r){
@ -732,3 +730,123 @@ int cc_charbuf2kw(cc_charbuff *b, fitsfile *f){
} }
return TRUE; return TRUE;
} }
static size_t print_val(cc_partype_t t, void *val, char *buf, size_t bufl){
size_t l = 0;
switch(t){
case CC_PAR_INT:
l = snprintf(buf, bufl, "%d", *(int*)val);
break;
case CC_PAR_FLOAT:
l = snprintf(buf, bufl, "%g", *(float*)val);
break;
case CC_PAR_DOUBLE:
l = snprintf(buf, bufl, "%g", *(double*)val);
break;
default:
l = snprintf(buf, bufl, "hoojnya");
break;
}
return l;
}
/**
* @brief cc_plugin_customcmd - common handler for custom plugin commands
* @param str - string like "par" (getter/cmd) or "par=val" (setter)
* @param handlers - NULL-terminated array of handlers for custom commands
* @param ans - buffer for output string
* @return RESULT_OK if all OK or error code
*/
cc_hresult cc_plugin_customcmd(const char *str, cc_parhandler_t *handlers, cc_charbuff *ans){
if(!str || !handlers) return RESULT_FAIL;
char key[256];
snprintf(key, 255, "%s", str);
char *val = cc_get_keyval(key);
cc_parhandler_t *phptr = handlers;
cc_hresult result = RESULT_BADKEY;
char buf[512];
#define ADDL(...) do{if(ans){size_t l = snprintf(bptr, L, __VA_ARGS__); bptr += l; L -= l;}}while(0)
#define PRINTVAL(v) do{if(ans){size_t l = print_val(phptr->type, phptr->v, bptr, L); bptr += l; L -= l;}}while(0)
while(phptr->cmd){
if(0 == strcmp(key, phptr->cmd)){
char *bptr = buf; size_t L = 511;
result = RESULT_OK;
if(phptr->checker) result = phptr->checker(str, ans);
if(phptr->ptr){ // setter/getter
if(val){if(result == RESULT_OK){// setter: change value only if [handler] returns OK (`handler` could be value checker)
int ival; float fval; double dval;
#define UPDATE_VAL(type, val, pr) do{ \
if(phptr->max && val > *(type*)phptr->max){ADDL("max=" pr, *(type*)phptr->max); result = RESULT_BADVAL;} \
if(phptr->min && val < *(type*)phptr->min){ADDL("min=" pr, *(type*)phptr->min); result = RESULT_BADVAL;} \
if(result == RESULT_OK) *(type*)phptr->ptr = val; \
}while(0)
switch(phptr->type){
case CC_PAR_INT:
ival = atoi(val);
UPDATE_VAL(int, ival, "%d");
break;
case CC_PAR_FLOAT:
fval = (float)atof(val);
UPDATE_VAL(float, fval, "%g");
break;
case CC_PAR_DOUBLE:
dval = atof(val);
UPDATE_VAL(double, dval, "%g");
break;
default:
result = RESULT_FAIL;
}
#undef UPDATE_VAL
}}else result = RESULT_SILENCE; // getter - don't show "OK"
DBG("res=%d", result);
if(result == RESULT_SILENCE || result == RESULT_OK){
ADDL("%s=", phptr->cmd);
PRINTVAL(ptr);
}
if(ans) cc_charbufaddline(ans, buf);
}
break;
}
++phptr;
}
if(ans && result == RESULT_BADKEY){ // cmd not found - display full help
cc_charbufaddline(ans, "Custom plugin commands:\n");
phptr = handlers;
while(phptr->cmd){
char *bptr = buf; size_t L = 511;
ADDL("\t%s", phptr->cmd);
if(phptr->ptr){
ADDL(" = (");
switch(phptr->type){
case CC_PAR_INT:
ADDL("int");
break;
case CC_PAR_FLOAT:
ADDL("float");
break;
case CC_PAR_DOUBLE:
ADDL("double");
break;
default:
ADDL("undefined");
}
ADDL(")");
if(phptr->min || phptr->max){
ADDL(" [");
if(phptr->min) PRINTVAL(min);
else ADDL("-inf");
ADDL(", ");
if(phptr->max) PRINTVAL(max);
else ADDL("inf");
ADDL("]");
}
}
ADDL(" - ");
ADDL("%s\n", phptr->helpstring);
cc_charbufaddline(ans, buf);
++phptr;
}
}
#undef ADDL
return result;
}

View File

@ -41,6 +41,26 @@ typedef struct __attribute__((packed, aligned(4))){
/* `data` is uint8_t or uint16_t depending on `bitpix` */ /* `data` is uint8_t or uint16_t depending on `bitpix` */
} cc_IMG; } cc_IMG;
typedef struct{
char* buf; // databuffer
size_t bufsize; // size of `buf`
size_t buflen; // current buffer length
char *string; // last \n-ended string from `buf`
size_t strlen; // max length of `string`
pthread_mutex_t mutex; // mutex for atomic data access
} cc_strbuff;
typedef struct{
char* buf; // databuffer
size_t bufsize; // size of `buf`
size_t buflen; // current buffer length
pthread_mutex_t mutex; // mutex for atomic data access
} cc_charbuff;
#define cc_buff_lock(b) pthread_mutex_lock(&((b)->mutex))
#define cc_buff_trylock(b) pthread_mutex_trylock(&((b)->mutex))
#define cc_buff_unlock(b) pthread_mutex_unlock(&((b)->mutex))
// format of single frame // format of single frame
typedef struct{ typedef struct{
int w; int h; // width & height int w; int h; // width & height
@ -70,6 +90,17 @@ typedef enum{
FAN_HIGH, FAN_HIGH,
} cc_fan_speed; } cc_fan_speed;
typedef enum{
RESULT_OK, // 0: all OK
RESULT_BUSY, // 1: camera busy and no setters can be done
RESULT_FAIL, // 2: failed running command
RESULT_BADVAL, // 3: bad key's value
RESULT_BADKEY, // 4: bad key
RESULT_SILENCE, // 5: send nothing to client
RESULT_DISCONNECTED,// 6: client disconnected
RESULT_NUM
} cc_hresult;
// all setters and getters of Camera, Focuser and cc_Wheel should return TRUE if success or FALSE if failed or unsupported // all setters and getters of Camera, Focuser and cc_Wheel should return TRUE if success or FALSE if failed or unsupported
// camera // camera
typedef struct{ typedef struct{
@ -110,10 +141,10 @@ typedef struct{
int (*getTbody)(float *t); // body T int (*getTbody)(float *t); // body T
int (*getbin)(int *binh, int *binv); int (*getbin)(int *binh, int *binv);
int (*getio)(int *s); // get IO-port state int (*getio)(int *s); // get IO-port state
const char* (*plugincmd)(const char *str); // custom camera plugin command (get string as input, send string as output or NULL if failed) cc_hresult (*plugincmd)(const char *str, cc_charbuff *ans); // custom camera plugin command (get string as input, send string as output or NULL if failed)
float pixX, pixY; // pixel size in um float pixX, pixY; // pixel size in um
cc_frameformat field; // max field of view cc_frameformat field; // max field of view (full CCD field without overscans)
cc_frameformat array; // array format cc_frameformat array; // array format (with overscans)
cc_frameformat geometry; // current geometry settings (as in setgeometry) cc_frameformat geometry; // current geometry settings (as in setgeometry)
} cc_Camera; } cc_Camera;
@ -165,17 +196,6 @@ typedef struct{
// client will disconnect after this time from last server message // client will disconnect after this time from last server message
#define CC_CLIENT_TIMEOUT (3.0) #define CC_CLIENT_TIMEOUT (3.0)
typedef enum{
RESULT_OK, // 0: all OK
RESULT_BUSY, // 1: camera busy and no setters can be done
RESULT_FAIL, // 2: failed running command
RESULT_BADVAL, // 3: bad key's value
RESULT_BADKEY, // 4: bad key
RESULT_SILENCE, // 5: send nothing to client
RESULT_DISCONNECTED,// 6: client disconnected
RESULT_NUM
} cc_hresult;
// fd - socket fd to send private messages, key, val - key and its value // fd - socket fd to send private messages, key, val - key and its value
typedef cc_hresult (*cc_mesghandler)(int fd, const char *key, const char *val); typedef cc_hresult (*cc_mesghandler)(int fd, const char *key, const char *val);
@ -254,25 +274,26 @@ typedef enum{
#define CC_CMD_WDEVNO "wdevno" #define CC_CMD_WDEVNO "wdevno"
#define CC_CMD_WPOS "wpos" #define CC_CMD_WPOS "wpos"
typedef struct{ typedef enum{ // parameter type
char* buf; // databuffer CC_PAR_INT,
size_t bufsize; // size of `buf` CC_PAR_FLOAT,
size_t buflen; // current buffer length CC_PAR_DOUBLE,
char *string; // last \n-ended string from `buf` } cc_partype_t;
size_t strlen; // max length of `string`
pthread_mutex_t mutex; // mutex for atomic data access
} cc_strbuff;
typedef struct{ typedef struct{ // custom plugin parameters
char* buf; // databuffer const char *cmd; // text parameter/command
size_t bufsize; // size of `buf` const char *helpstring; // help string for this parameter
size_t buflen; // current buffer length cc_hresult (*checker)(const char *str, cc_charbuff *ans); // value checker or custom handler (if don't satisfy common getter/setter); return possible answer in `ans`
pthread_mutex_t mutex; // mutex for atomic data access void *ptr; // pointer to variable (if exists)
} cc_charbuff; void *min; // min/max values of `ptr` (or NULL if don't need to check)
void *max;
cc_partype_t type; // argument type
} cc_parhandler_t;
#define cc_buff_lock(b) pthread_mutex_lock(&b->mutex) // this record should be last in cc_parhandler_t array for `cc_plugin_customcmd`
#define cc_buff_trylock(b) pthread_mutex_trylock(&b->mutex) #define CC_PARHANDLER_END {0}
#define cc_buff_unlock(b) pthread_mutex_unlock(&b->mutex)
cc_hresult cc_plugin_customcmd(const char *str, cc_parhandler_t *handlers, cc_charbuff *ans);
cc_Focuser *open_focuser(const char *pluginname); cc_Focuser *open_focuser(const char *pluginname);
cc_Camera *open_camera(const char *pluginname); cc_Camera *open_camera(const char *pluginname);

View File

@ -217,7 +217,6 @@ int saveFITS(cc_IMG *img, char **outp){
} }
}else{ // user pointed output file prefix }else{ // user pointed output file prefix
if(!check_filenameprefix(fnam, PATH_MAX)){ if(!check_filenameprefix(fnam, PATH_MAX)){
// îÅ ÍÏÇÕ ÓÏÈÒÁÎÉÔØ ÆÁÊÌ
WARNX(_("Can't save file with prefix %s"), GP->outfileprefix); WARNX(_("Can't save file with prefix %s"), GP->outfileprefix);
LOGERR("Can't save image with prefix %s", GP->outfileprefix); LOGERR("Can't save image with prefix %s", GP->outfileprefix);
} }
@ -453,7 +452,7 @@ retn:
cc_Wheel *startWheel(){ cc_Wheel *startWheel(){
if(!GP->wheeldev && !GP->commondev){ if(!GP->wheeldev && !GP->commondev){
verbose(3, _("cc_Wheel device not pointed")); verbose(3, _("Wheel device not pointed"));
return NULL; return NULL;
}else{ }else{
char *plugin = GP->commondev ? GP->commondev : GP->wheeldev; char *plugin = GP->commondev ? GP->commondev : GP->wheeldev;
@ -518,7 +517,7 @@ void wheels(){
pos = GP->setwheel; pos = GP->setwheel;
if(pos == -1) goto retn; // no wheel commands if(pos == -1) goto retn; // no wheel commands
if(pos < 0 || pos > maxpos){ if(pos < 0 || pos > maxpos){
WARNX(_("cc_Wheel position should be from 0 to %d"), maxpos); WARNX(_("Wheel position should be from 0 to %d"), maxpos);
goto retn; goto retn;
} }
if(!wheel->setPos(pos)) if(!wheel->setPos(pos))
@ -605,11 +604,19 @@ int prepare_ccds(){
if(!camera->plugincmd) WARNX(_("Camera plugin have no custom commands")); if(!camera->plugincmd) WARNX(_("Camera plugin have no custom commands"));
else{ else{
char **p = GP->plugincmd; char **p = GP->plugincmd;
cc_charbuff *b = cc_charbufnew();
DBG("got %s", *p); DBG("got %s", *p);
while(p && *p){ while(p && *p){
printf("Command: %s\nAnswer: %s\n", *p, camera->plugincmd(*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);
if(r != RESULT_SILENCE) printf(" returns \"%s\"", cc_hresult2str(r));
if(b->buflen) printf("\n%s", b->buf);
else printf("\n");
++p; ++p;
} }
cc_charbufdel(&b);
} }
} }
if(GP->fanspeed > -1){ if(GP->fanspeed > -1){
@ -650,7 +657,6 @@ int prepare_ccds(){
WARNX(_("Can't run shutter command %s (unsupported?)"), str[GP->shtr_cmd]); WARNX(_("Can't run shutter command %s (unsupported?)"), str[GP->shtr_cmd]);
} }
if(GP->confio > -1){ if(GP->confio > -1){
// "ðÏÐÙÔËÁ ÓËÏÎÆÉÇÕÒÉÒÏ×ÁÔØ ÐÏÒÔ I/O ËÁË %d\n"
verbose(1, _("Try to configure I/O port as %d"), GP->confio); verbose(1, _("Try to configure I/O port as %d"), GP->confio);
if(!camera->confio(GP->confio)) if(!camera->confio(GP->confio))
WARNX(_("Can't configure (unsupported?)")); WARNX(_("Can't configure (unsupported?)"));
@ -663,7 +669,6 @@ int prepare_ccds(){
WARNX(_("Can't get IOport state (unsupported?)")); WARNX(_("Can't get IOport state (unsupported?)"));
} }
if(GP->setio > -1){ if(GP->setio > -1){
// "ðÏÐÙÔËÁ ÚÁÐÉÓÉ %d × ÐÏÒÔ I/O\n"
verbose(1, _("Try to write %d to I/O port"), GP->setio); verbose(1, _("Try to write %d to I/O port"), GP->setio);
if(!camera->setio(GP->setio)) if(!camera->setio(GP->setio))
WARNX(_("Can't set IOport")); WARNX(_("Can't set IOport"));
@ -717,7 +722,8 @@ int prepare_ccds(){
WARNX(_("Can't set readout speed")); WARNX(_("Can't set readout speed"));
else verbose(1, _("Readout mode: %s"), GP->fast ? "fast" : "normal"); else verbose(1, _("Readout mode: %s"), GP->fast ? "fast" : "normal");
if(!GP->outfile) verbose(1, _("Only show statistics")); if(!GP->outfile) verbose(1, _("Only show statistics"));
if(!camera->getbin(&GP->hbin, &GP->vbin)) // GET binning should be AFTER setgeometry! // GET binning should be AFTER setgeometry!
if(!camera->getbin(&GP->hbin, &GP->vbin))
WARNX(_("Can't get current binning")); WARNX(_("Can't get current binning"));
verbose(2, "Binning: %d x %d", GP->hbin, GP->vbin); verbose(2, "Binning: %d x %d", GP->hbin, GP->vbin);
rtn = TRUE; rtn = TRUE;
@ -742,7 +748,6 @@ DBG("w=%d, h=%d", raw_width, raw_height);
for(int j = 0; j < GP->nframes; ++j){ for(int j = 0; j < GP->nframes; ++j){
TIMESTAMP("Start next cycle"); TIMESTAMP("Start next cycle");
TIMEINIT(); TIMEINIT();
// úÁÈ×ÁÔ ËÁÄÒÁ %d\n
verbose(1, _("Capture frame %d"), j); verbose(1, _("Capture frame %d"), j);
if(!camera->startexposition()){ if(!camera->startexposition()){
WARNX(_("Can't start exposition")); WARNX(_("Can't start exposition"));
@ -769,7 +774,6 @@ DBG("w=%d, h=%d", raw_width, raw_height);
if(GP->pause_len && j != (GP->nframes - 1)){ if(GP->pause_len && j != (GP->nframes - 1)){
double delta, time1 = dtime() + GP->pause_len; double delta, time1 = dtime() + GP->pause_len;
while((delta = time1 - dtime()) > 0.){ while((delta = time1 - dtime()) > 0.){
// %d ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÐÁÕÚÙ\n
verbose(1, _("%d seconds till pause ends\n"), (int)delta); verbose(1, _("%d seconds till pause ends\n"), (int)delta);
float tmpf; float tmpf;
if(camera->getTcold(&tmpf)) verbose(1, "CCDTEMP=%.1f\n", tmpf); if(camera->getTcold(&tmpf)) verbose(1, "CCDTEMP=%.1f\n", tmpf);

View File

@ -267,7 +267,6 @@ void client(int sock){
while(1){ while(1){
SENDCMDW(CC_CMD_CAMTEMPER); SENDCMDW(CC_CMD_CAMTEMPER);
if((delta = time1 - dtime()) < __FLT_EPSILON__) break; if((delta = time1 - dtime()) < __FLT_EPSILON__) break;
// %d секунд до окончания паузы\n
if(delta > 1.) verbose(1, _("%d seconds till pause ends\n"), (int)delta); if(delta > 1.) verbose(1, _("%d seconds till pause ends\n"), (int)delta);
if(delta > 6.) sleep(5); if(delta > 6.) sleep(5);
else if(delta > 1.) sleep((int)delta); else if(delta > 1.) sleep((int)delta);

View File

@ -111,7 +111,7 @@ myoption cmdlnopts[] = {
{"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")},
{"shmkey", NEED_ARG, NULL, 'k', arg_int, APTR(&G.shmkey), N_("shared memory (with image data) key (default: 7777777)")}, {"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)")}, {"forceimsock",NO_ARGS, &G.forceimsock,1, arg_none, NULL, N_("force using image through socket transition even if can use SHM")},
{"infty", NEED_ARG, NULL, NA, arg_int, APTR(&G.infty), N_("start (!=0) or stop(==0) infinity capturing loop")}, {"infty", NEED_ARG, NULL, NA, arg_int, APTR(&G.infty), N_("start (!=0) or stop(==0) infinity capturing loop")},
#ifdef IMAGEVIEW #ifdef IMAGEVIEW

Binary file not shown.

View File

@ -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: 2024-02-01 14:36+0300\n" "POT-Creation-Date: 2024-02-07 17:00+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"
@ -254,7 +254,7 @@ msgid "shared memory (with image data) key (default: 7777777)"
msgstr "" msgstr ""
#: cmdlnopts.c:114 #: cmdlnopts.c:114
msgid "force using image through socket transition even if can use SHM)" msgid "force using image through socket transition even if can use SHM"
msgstr "" msgstr ""
#: cmdlnopts.c:115 #: cmdlnopts.c:115
@ -269,289 +269,283 @@ msgstr ""
msgid "Camera device unknown" msgid "Camera device unknown"
msgstr "" msgstr ""
#. Не могу сохранить файл #: ccdfunc.c:220
#: ccdfunc.c:221
#, c-format #, c-format
msgid "Can't save file with prefix %s" msgid "Can't save file with prefix %s"
msgstr "" msgstr ""
#: ccdfunc.c:269 #: ccdfunc.c:268
#, c-format #, c-format
msgid "File saved as '%s'" msgid "File saved as '%s'"
msgstr "" msgstr ""
#: ccdfunc.c:278 #: ccdfunc.c:277
msgid "Error saving file" msgid "Error saving file"
msgstr "" msgstr ""
#: ccdfunc.c:356 #: ccdfunc.c:355
#, c-format #, c-format
msgid "Image stat:\n" msgid "Image stat:\n"
msgstr "" msgstr ""
#: ccdfunc.c:365 #: ccdfunc.c:364
msgid "Focuser device not pointed" msgid "Focuser device not pointed"
msgstr "" msgstr ""
#: ccdfunc.c:372 #: ccdfunc.c:371
msgid "No focusers found" msgid "No focusers found"
msgstr "" msgstr ""
#: ccdfunc.c:403 #: ccdfunc.c:402
#, c-format #, c-format
msgid "Found %d focusers, you point number %d" msgid "Found %d focusers, you point number %d"
msgstr "" msgstr ""
#: ccdfunc.c:407 #: ccdfunc.c:406
msgid "Can't set active focuser number" msgid "Can't set active focuser number"
msgstr "" msgstr ""
#: ccdfunc.c:421 #: ccdfunc.c:420
msgid "Can't get focuser limit positions" msgid "Can't get focuser limit positions"
msgstr "" msgstr ""
#: ccdfunc.c:428 #: ccdfunc.c:427
msgid "Can't get current focuser position" msgid "Can't get current focuser position"
msgstr "" msgstr ""
#: ccdfunc.c:442 #: ccdfunc.c:441
#, c-format #, c-format
msgid "Can't set position %g: out of limits [%g, %g]" msgid "Can't set position %g: out of limits [%g, %g]"
msgstr "" msgstr ""
#: ccdfunc.c:446 #: ccdfunc.c:445
msgid "Can't home focuser" msgid "Can't home focuser"
msgstr "" msgstr ""
#: ccdfunc.c:448 #: ccdfunc.c:447
#, c-format #, c-format
msgid "Can't set position %g" msgid "Can't set position %g"
msgstr "" msgstr ""
#: ccdfunc.c:456 #: ccdfunc.c:455
msgid "cc_Wheel device not pointed" msgid "Wheel device not pointed"
msgstr "" msgstr ""
#: ccdfunc.c:463 #: ccdfunc.c:462
msgid "No wheels found" msgid "No wheels found"
msgstr "" msgstr ""
#: ccdfunc.c:494 #: ccdfunc.c:493
#, c-format #, c-format
msgid "Found %d wheels, you point number %d" msgid "Found %d wheels, you point number %d"
msgstr "" msgstr ""
#: ccdfunc.c:498 #: ccdfunc.c:497
msgid "Can't set active wheel number" msgid "Can't set active wheel number"
msgstr "" msgstr ""
#: ccdfunc.c:514 #: ccdfunc.c:513
msgid "Can't get max wheel position" msgid "Can't get max wheel position"
msgstr "" msgstr ""
#: ccdfunc.c:521 #: ccdfunc.c:520
#, c-format #, c-format
msgid "cc_Wheel position should be from 0 to %d" msgid "Wheel position should be from 0 to %d"
msgstr "" msgstr ""
#: ccdfunc.c:525 #: ccdfunc.c:524
#, c-format #, c-format
msgid "Can't set wheel position %d" msgid "Can't set wheel position %d"
msgstr "" msgstr ""
#: ccdfunc.c:542 #: ccdfunc.c:541
#, c-format #, c-format
msgid "%.1f seconds till exposition ends" msgid "%.1f seconds till exposition ends"
msgstr "" msgstr ""
#: ccdfunc.c:557 #: ccdfunc.c:556
msgid "Camera device not pointed" msgid "Camera device not pointed"
msgstr "" msgstr ""
#: ccdfunc.c:564 ccdfunc.c:565 #: ccdfunc.c:563 ccdfunc.c:564
msgid "No cameras found" msgid "No cameras found"
msgstr "" msgstr ""
#: ccdfunc.c:595 #: ccdfunc.c:594
#, c-format #, c-format
msgid "Found %d cameras, you point number %d" msgid "Found %d cameras, you point number %d"
msgstr "" msgstr ""
#: ccdfunc.c:599 #: ccdfunc.c:598
msgid "Can't set active camera number" msgid "Can't set active camera number"
msgstr "" msgstr ""
#: ccdfunc.c:605 #: ccdfunc.c:604
msgid "Camera plugin have no custom commands" msgid "Camera plugin have no custom commands"
msgstr "" msgstr ""
#: ccdfunc.c:618 #: ccdfunc.c:625
msgid "Can't set fan speed" msgid "Can't set fan speed"
msgstr "" msgstr ""
#: ccdfunc.c:619 #: ccdfunc.c:626
#, c-format #, c-format
msgid "Set fan speed to %d" msgid "Set fan speed to %d"
msgstr "" msgstr ""
#: ccdfunc.c:624 #: ccdfunc.c:631
#, c-format #, c-format
msgid "Camera model: %s" msgid "Camera model: %s"
msgstr "" msgstr ""
#: ccdfunc.c:625 #: ccdfunc.c:632
#, c-format #, c-format
msgid "Pixel size: %g x %g" msgid "Pixel size: %g x %g"
msgstr "" msgstr ""
#: ccdfunc.c:631 #: ccdfunc.c:638
#, c-format #, c-format
msgid "Full array: %s" msgid "Full array: %s"
msgstr "" msgstr ""
#: ccdfunc.c:634 #: ccdfunc.c:641
#, c-format #, c-format
msgid "Field of view: %s" msgid "Field of view: %s"
msgstr "" msgstr ""
#: ccdfunc.c:637 #: ccdfunc.c:644
#, c-format #, c-format
msgid "Current format: %s" msgid "Current format: %s"
msgstr "" msgstr ""
#: ccdfunc.c:640 #: ccdfunc.c:647
#, c-format #, c-format
msgid "Can't set T to %g degC" msgid "Can't set T to %g degC"
msgstr "" msgstr ""
#: ccdfunc.c:648 #: ccdfunc.c:655
#, c-format #, c-format
msgid "Shutter command: %s\n" msgid "Shutter command: %s\n"
msgstr "" msgstr ""
#: ccdfunc.c:650 #: ccdfunc.c:657
#, c-format #, c-format
msgid "Can't run shutter command %s (unsupported?)" msgid "Can't run shutter command %s (unsupported?)"
msgstr "" msgstr ""
#. "Попытка сконфигурировать порт I/O как %d\n" #: ccdfunc.c:660
#: ccdfunc.c:654
#, c-format #, c-format
msgid "Try to configure I/O port as %d" msgid "Try to configure I/O port as %d"
msgstr "" msgstr ""
#: ccdfunc.c:656 #: ccdfunc.c:662
msgid "Can't configure (unsupported?)" msgid "Can't configure (unsupported?)"
msgstr "" msgstr ""
#: ccdfunc.c:663 #: ccdfunc.c:669
msgid "Can't get IOport state (unsupported?)" msgid "Can't get IOport state (unsupported?)"
msgstr "" msgstr ""
#. "Попытка записи %d в порт I/O\n" #: ccdfunc.c:672
#: ccdfunc.c:667
#, c-format #, c-format
msgid "Try to write %d to I/O port" msgid "Try to write %d to I/O port"
msgstr "" msgstr ""
#: ccdfunc.c:669 #: ccdfunc.c:674
msgid "Can't set IOport" msgid "Can't set IOport"
msgstr "" msgstr ""
#: ccdfunc.c:676 #: ccdfunc.c:681
#, c-format #, c-format
msgid "Set gain to %g" msgid "Set gain to %g"
msgstr "" msgstr ""
#: ccdfunc.c:677 #: ccdfunc.c:682
#, c-format #, c-format
msgid "Can't set gain to %g" msgid "Can't set gain to %g"
msgstr "" msgstr ""
#: ccdfunc.c:682 #: ccdfunc.c:687
#, c-format #, c-format
msgid "Set brightness to %g" msgid "Set brightness to %g"
msgstr "" msgstr ""
#: ccdfunc.c:683 #: ccdfunc.c:688
#, c-format #, c-format
msgid "Can't set brightness to %g" msgid "Can't set brightness to %g"
msgstr "" msgstr ""
#: ccdfunc.c:689 server.c:265 #: ccdfunc.c:694 server.c:265
#, c-format #, c-format
msgid "Can't set binning %dx%d" msgid "Can't set binning %dx%d"
msgstr "" msgstr ""
#: ccdfunc.c:701 server.c:266 #: ccdfunc.c:706 server.c:266
msgid "Can't set given geometry" msgid "Can't set given geometry"
msgstr "" msgstr ""
#: ccdfunc.c:705 #: ccdfunc.c:710
#, c-format #, c-format
msgid "Can't set %d flushes" msgid "Can't set %d flushes"
msgstr "" msgstr ""
#: ccdfunc.c:709 #: ccdfunc.c:714
#, 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:712 #: ccdfunc.c:717
msgid "Can't change frame type" msgid "Can't change frame type"
msgstr "" msgstr ""
#: ccdfunc.c:715 #: ccdfunc.c:720
msgid "Can't set bit depth" msgid "Can't set bit depth"
msgstr "" msgstr ""
#: ccdfunc.c:717 #: ccdfunc.c:722
msgid "Can't set readout speed" msgid "Can't set readout speed"
msgstr "" msgstr ""
#: ccdfunc.c:718 #: ccdfunc.c:723
#, c-format #, c-format
msgid "Readout mode: %s" msgid "Readout mode: %s"
msgstr "" msgstr ""
#: ccdfunc.c:719 #: ccdfunc.c:724
msgid "Only show statistics" msgid "Only show statistics"
msgstr "" msgstr ""
#. GET binning should be AFTER setgeometry! #: ccdfunc.c:727
#: ccdfunc.c:721
msgid "Can't get current binning" msgid "Can't get current binning"
msgstr "" msgstr ""
#. Захват кадра %d\n #: ccdfunc.c:751
#: ccdfunc.c:746
#, c-format #, c-format
msgid "Capture frame %d" msgid "Capture frame %d"
msgstr "" msgstr ""
#: ccdfunc.c:748 ccdfunc.c:823 server.c:150 #: ccdfunc.c:753 ccdfunc.c:827 server.c:150
msgid "Can't start exposition" msgid "Can't start exposition"
msgstr "" msgstr ""
#: ccdfunc.c:753 #: ccdfunc.c:758
msgid "Can't capture image" msgid "Can't capture image"
msgstr "" msgstr ""
#: ccdfunc.c:756 #: ccdfunc.c:761
msgid "Read grabbed image" msgid "Read grabbed image"
msgstr "" msgstr ""
#: ccdfunc.c:760 ccdfunc.c:836 #: ccdfunc.c:765 ccdfunc.c:840
msgid "Can't grab image" msgid "Can't grab image"
msgstr "" msgstr ""
#. %d секунд до окончания паузы\n #: ccdfunc.c:777 client.c:270
#: ccdfunc.c:773 client.c:271
#, c-format #, c-format
msgid "%d seconds till pause ends\n" msgid "%d seconds till pause ends\n"
msgstr "" msgstr ""
#: ccdfunc.c:834 #: ccdfunc.c:838
msgid "Some error when capture" msgid "Some error when capture"
msgstr "" msgstr ""
@ -563,7 +557,7 @@ msgstr ""
msgid "Can't make exposition" msgid "Can't make exposition"
msgstr "" msgstr ""
#: client.c:287 #: client.c:286
msgid "Server timeout" msgid "Server timeout"
msgstr "" msgstr ""

View File

@ -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: 2024-02-01 14:35+0300\n" "POT-Creation-Date: 2024-02-07 17:00+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"
@ -16,13 +16,12 @@ msgstr "Project-Id-Version: PACKAGE VERSION\n"
"Content-Type: text/plain; charset=koi8-r\n" "Content-Type: text/plain; charset=koi8-r\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
#: ccdfunc.c:542 #: ccdfunc.c:541
#, c-format #, c-format
msgid "%.1f seconds till exposition ends" msgid "%.1f seconds till exposition ends"
msgstr "%.1f ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÜËÓÐÏÚÉÃÉÉ" msgstr "%.1f ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÜËÓÐÏÚÉÃÉÉ"
#. %d Ñ<>екунд до окончаниÑ<C2B8> паузы\n #: ccdfunc.c:777 client.c:270
#: ccdfunc.c:773 client.c:271
#, c-format #, c-format
msgid "%d seconds till pause ends\n" msgid "%d seconds till pause ends\n"
msgstr "%d ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÐÁÕÚÙ\n" msgstr "%d ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÐÁÕÚÙ\n"
@ -39,7 +38,7 @@ msgstr "
msgid "CMOS gain level" msgid "CMOS gain level"
msgstr "ÕÒÏ×ÅÎØ Gain CMOS" msgstr "ÕÒÏ×ÅÎØ Gain CMOS"
#: ccdfunc.c:557 #: ccdfunc.c:556
msgid "Camera device not pointed" msgid "Camera device not pointed"
msgstr "õÓÔÒÏÊÓÔ×Ï Ó×ÅÏÐÒÉÅÍÎÉËÁ ÎÅ ÐÏÄËÌÀÞÅÎÏ" msgstr "õÓÔÒÏÊÓÔ×Ï Ó×ÅÏÐÒÉÅÍÎÉËÁ ÎÅ ÐÏÄËÌÀÞÅÎÏ"
@ -47,53 +46,52 @@ msgstr "
msgid "Camera device unknown" msgid "Camera device unknown"
msgstr "õÓÔÒÏÊÓÔ×Ï Ó×ÅÏÐÒÉÅÍÎÉËÁ ÎÅ ÏÐÏÚÎÁÎÏ" msgstr "õÓÔÒÏÊÓÔ×Ï Ó×ÅÏÐÒÉÅÍÎÉËÁ ÎÅ ÏÐÏÚÎÁÎÏ"
#: ccdfunc.c:624 #: ccdfunc.c:631
#, c-format #, c-format
msgid "Camera model: %s" msgid "Camera model: %s"
msgstr "íÏÄÅÌØ Ó×ÅÔÏÐÒÉÅÍÎÉËÁ: %s" msgstr "íÏÄÅÌØ Ó×ÅÔÏÐÒÉÅÍÎÉËÁ: %s"
#: ccdfunc.c:605 #: ccdfunc.c:604
msgid "Camera plugin have no custom commands" msgid "Camera plugin have no custom commands"
msgstr "" msgstr "У плагина камеры нет особых команд"
#: ccdfunc.c:753 #: ccdfunc.c:758
msgid "Can't capture image" msgid "Can't capture image"
msgstr "îÅ ÍÏÇÕ ÚÁÈ×ÁÔÉÔØ ÉÚÏÂÒÁÖÅÎÉÅ" msgstr "îÅ ÍÏÇÕ ÚÁÈ×ÁÔÉÔØ ÉÚÏÂÒÁÖÅÎÉÅ"
#: ccdfunc.c:712 #: ccdfunc.c:717
msgid "Can't change frame type" msgid "Can't change frame type"
msgstr "îÅ ÍÏÇÕ ÉÚÍÅÎÉÔØ ÔÉÐ ËÁÄÒÁ" msgstr "îÅ ÍÏÇÕ ÉÚÍÅÎÉÔØ ÔÉÐ ËÁÄÒÁ"
#: ccdfunc.c:656 #: ccdfunc.c:662
msgid "Can't configure (unsupported?)" msgid "Can't configure (unsupported?)"
msgstr "îÅ ÍÏÇÕ ÓËÏÎÆÉÇÕÒÉÒÏ×ÁÔØ (ÏÐÃÉÑ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)" msgstr "îÅ ÍÏÇÕ ÓËÏÎÆÉÇÕÒÉÒÏ×ÁÔØ (ÏÐÃÉÑ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)"
#: ccdfunc.c:663 #: ccdfunc.c:669
msgid "Can't get IOport state (unsupported?)" msgid "Can't get IOport state (unsupported?)"
msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÓÏÓÔÏÑÎÉÅ ÐÏÒÔÁ I/O (ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)" msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÓÏÓÔÏÑÎÉÅ ÐÏÒÔÁ I/O (ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)"
#. GET binning should be AFTER setgeometry! #: ccdfunc.c:727
#: ccdfunc.c:721
msgid "Can't get current binning" msgid "Can't get current binning"
msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÔÅËÕÝÅÅ ÚÎÁÞÅÎÉÅ ÂÉÎÎÉÎÇÁ" msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÔÅËÕÝÅÅ ÚÎÁÞÅÎÉÅ ÂÉÎÎÉÎÇÁ"
#: ccdfunc.c:428 #: ccdfunc.c:427
msgid "Can't get current focuser position" msgid "Can't get current focuser position"
msgstr "îÅ ÍÏÇÕ ÏÐÒÅÄÅÌÉÔØ ÔÅËÕÝÕÀ ÐÏÚÉÃÉÀ ÆÏËÕÓÅÒÁ" msgstr "îÅ ÍÏÇÕ ÏÐÒÅÄÅÌÉÔØ ÔÅËÕÝÕÀ ÐÏÚÉÃÉÀ ÆÏËÕÓÅÒÁ"
#: ccdfunc.c:421 #: ccdfunc.c:420
msgid "Can't get focuser limit positions" msgid "Can't get focuser limit positions"
msgstr "îÅ ÍÏÇÕ ÏÐÒÅÄÅÌÉÔØ ÐÒÅÄÅÌØÎÕÀ ÐÏÚÉÃÉÀ ÆÏËÕÓÅÒÁ" msgstr "îÅ ÍÏÇÕ ÏÐÒÅÄÅÌÉÔØ ÐÒÅÄÅÌØÎÕÀ ÐÏÚÉÃÉÀ ÆÏËÕÓÅÒÁ"
#: ccdfunc.c:514 #: ccdfunc.c:513
msgid "Can't get max wheel position" msgid "Can't get max wheel position"
msgstr "îÅ ÍÏÇÕ ÏÐÒÅÄÅÌÉÔØ ÐÒÅÄÅÌØÎÕÀ ÐÏÚÉÃÉÀ ËÏÌÅÓÁ" msgstr "îÅ ÍÏÇÕ ÏÐÒÅÄÅÌÉÔØ ÐÒÅÄÅÌØÎÕÀ ÐÏÚÉÃÉÀ ËÏÌÅÓÁ"
#: ccdfunc.c:760 ccdfunc.c:836 #: ccdfunc.c:765 ccdfunc.c:840
msgid "Can't grab image" msgid "Can't grab image"
msgstr "îÅ ÍÏÇÕ ÚÁÈ×ÁÔÉÔØ ÉÚÏÂÒÁÖÅÎÉÅ" msgstr "îÅ ÍÏÇÕ ÚÁÈ×ÁÔÉÔØ ÉÚÏÂÒÁÖÅÎÉÅ"
#: ccdfunc.c:446 #: ccdfunc.c:445
msgid "Can't home focuser" msgid "Can't home focuser"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÆÏËÕÓÅÒ × ÎÕÌØ" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÆÏËÕÓÅÒ × ÎÕÌØ"
@ -109,152 +107,150 @@ msgstr "
msgid "Can't open OpenGL window, image preview will be inaccessible" msgid "Can't open OpenGL window, image preview will be inaccessible"
msgstr "îÅ ÍÏÇÕ ÏÔËÒÙÔØ ÏËÎÏ OpenGL, ÏÔÏÂÒÁÖÅÎÉÅ ÂÕÄÅÔ ÎÅÄÏÓÔÕÐÎÏ" msgstr "îÅ ÍÏÇÕ ÏÔËÒÙÔØ ÏËÎÏ OpenGL, ÏÔÏÂÒÁÖÅÎÉÅ ÂÕÄÅÔ ÎÅÄÏÓÔÕÐÎÏ"
#: ccdfunc.c:650 #: ccdfunc.c:657
#, c-format #, c-format
msgid "Can't run shutter command %s (unsupported?)" msgid "Can't run shutter command %s (unsupported?)"
msgstr "îÅ ÍÏÇÕ ×ÙÐÏÌÎÉÔØ ËÏÍÁÎÄÕ ÚÁÔ×ÏÒÁ %s (ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)" msgstr "îÅ ÍÏÇÕ ×ÙÐÏÌÎÉÔØ ËÏÍÁÎÄÕ ÚÁÔ×ÏÒÁ %s (ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)"
#. Ð<>е могу Ñ<>охраниÑÑŒ файл #: ccdfunc.c:220
#: ccdfunc.c:221
#, c-format #, c-format
msgid "Can't save file with prefix %s" msgid "Can't save file with prefix %s"
msgstr "îÅ ÍÏÇÕ ÓÏÈÒÁÎÉÔØ ÆÁÊÌ Ó ÐÒÅÆÉËÓÏÍ %s" msgstr "îÅ ÍÏÇÕ ÓÏÈÒÁÎÉÔØ ÆÁÊÌ Ó ÐÒÅÆÉËÓÏÍ %s"
#: ccdfunc.c:705 #: ccdfunc.c:710
#, c-format #, c-format
msgid "Can't set %d flushes" msgid "Can't set %d flushes"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ %d ÓÂÒÏÓÏ×" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ %d ÓÂÒÏÓÏ×"
#: ccdfunc.c:669 #: ccdfunc.c:674
msgid "Can't set IOport" msgid "Can't set IOport"
msgstr "îÅ ÍÏÇÕ ÐÏÍÅÎÑÔØ ÚÎÁÞÅÎÉÑ ÐÏÒÔÁ I/O" msgstr "îÅ ÍÏÇÕ ÐÏÍÅÎÑÔØ ÚÎÁÞÅÎÉÑ ÐÏÒÔÁ I/O"
#: ccdfunc.c:640 #: ccdfunc.c:647
#, c-format #, c-format
msgid "Can't set T to %g degC" msgid "Can't set T to %g degC"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÔÅÍÐÅÒÁÔÕÒÕ × %g ÇÒÁÄã" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÔÅÍÐÅÒÁÔÕÒÕ × %g ÇÒÁÄã"
#: ccdfunc.c:599 #: ccdfunc.c:598
msgid "Can't set active camera number" msgid "Can't set active camera number"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÎÏÍÅÒ ÁËÔÉ×ÎÏÊ ËÁÍÅÒÙ" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÎÏÍÅÒ ÁËÔÉ×ÎÏÊ ËÁÍÅÒÙ"
#: ccdfunc.c:407 #: ccdfunc.c:406
msgid "Can't set active focuser number" msgid "Can't set active focuser number"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÎÏÍÅÒ ÁËÔÉ×ÎÏÇÏ ÆÏËÕÓÅÒÁ" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÎÏÍÅÒ ÁËÔÉ×ÎÏÇÏ ÆÏËÕÓÅÒÁ"
#: ccdfunc.c:498 #: ccdfunc.c:497
msgid "Can't set active wheel number" msgid "Can't set active wheel number"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÎÏÍÅÒ ÁËÔÉ×ÎÏÇÏ ËÏÌÅÓÁ" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÎÏÍÅÒ ÁËÔÉ×ÎÏÇÏ ËÏÌÅÓÁ"
#: ccdfunc.c:689 server.c:265 #: ccdfunc.c:694 server.c:265
#, 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:715 #: ccdfunc.c:720
msgid "Can't set bit depth" msgid "Can't set bit depth"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÒÁÚÒÑÄÎÏÓÔØ áãð" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÒÁÚÒÑÄÎÏÓÔØ áãð"
#: ccdfunc.c:683 #: ccdfunc.c:688
#, c-format #, c-format
msgid "Can't set brightness to %g" msgid "Can't set brightness to %g"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÑÒËÏÓÔØ × %g" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÑÒËÏÓÔØ × %g"
#: ccdfunc.c:709 #: ccdfunc.c:714
#, 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 ÓÅËÕÎÄ"
#: ccdfunc.c:618 #: ccdfunc.c:625
msgid "Can't set fan speed" msgid "Can't set fan speed"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ×ÅÎÔÉÌÑÔÏÒÏ×" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ×ÅÎÔÉÌÑÔÏÒÏ×"
#: ccdfunc.c:677 #: ccdfunc.c:682
#, c-format #, c-format
msgid "Can't set gain to %g" msgid "Can't set gain to %g"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ Gain × %g" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ Gain × %g"
#: ccdfunc.c:701 server.c:266 #: ccdfunc.c:706 server.c:266
msgid "Can't set given geometry" msgid "Can't set given geometry"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÇÅÏÍÅÔÒÉÀ" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÇÅÏÍÅÔÒÉÀ"
#: ccdfunc.c:448 #: ccdfunc.c:447
#, c-format #, c-format
msgid "Can't set position %g" msgid "Can't set position %g"
msgstr "îÅ ÍÏÇÕ ÉÚÍÅÎÉÔØ ÐÏÚÉÃÉÀ ÎÁ %g" msgstr "îÅ ÍÏÇÕ ÉÚÍÅÎÉÔØ ÐÏÚÉÃÉÀ ÎÁ %g"
#: ccdfunc.c:442 #: ccdfunc.c:441
#, c-format #, c-format
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:717 #: ccdfunc.c:722
msgid "Can't set readout speed" msgid "Can't set readout speed"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ÓÞÉÔÙ×ÁÎÉÑ" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ÓÞÉÔÙ×ÁÎÉÑ"
#: ccdfunc.c:525 #: ccdfunc.c:524
#, c-format #, c-format
msgid "Can't set wheel position %d" msgid "Can't set wheel position %d"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÐÏÌÏÖÅÎÉÅ ËÏÌÅÓÁ %d" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÐÏÌÏÖÅÎÉÅ ËÏÌÅÓÁ %d"
#: ccdfunc.c:748 ccdfunc.c:823 server.c:150 #: ccdfunc.c:753 ccdfunc.c:827 server.c:150
msgid "Can't start exposition" msgid "Can't start exposition"
msgstr "îÅ ÍÏÇÕ ÎÁÞÁÔØ ÜËÓÐÏÚÉÃÉÀ" msgstr "îÅ ÍÏÇÕ ÎÁÞÁÔØ ÜËÓÐÏÚÉÃÉÀ"
#. Захват кадра %d\n #: ccdfunc.c:751
#: ccdfunc.c:746
#, c-format #, c-format
msgid "Capture frame %d" msgid "Capture frame %d"
msgstr "úÁÈ×ÁÔ ËÁÄÒÁ %d" msgstr "úÁÈ×ÁÔ ËÁÄÒÁ %d"
#: ccdfunc.c:637 #: ccdfunc.c:644
#, c-format #, c-format
msgid "Current format: %s" msgid "Current format: %s"
msgstr "" msgstr "Текущий формат: %s"
#: cmdlnopts.c:118 #: cmdlnopts.c:118
msgid "Display image in OpenGL window" msgid "Display image in OpenGL window"
msgstr "ïÔÏÂÒÁÖÅÎÉÅ ÉÚÏÂÒÁÖÅÎÉÑ × ÏËÎÅ OpenGL" msgstr "отображение изображения в окне OpenGL"
#: imageview.c:746 #: imageview.c:746
#, c-format #, c-format
msgid "Equalization of histogram: %s" msgid "Equalization of histogram: %s"
msgstr "üË×ÁÌÉÚÁÃÉÑ ÇÉÓÔÏÇÒÁÍÍÙ: %s" msgstr "üË×ÁÌÉÚÁÃÉÑ ÇÉÓÔÏÇÒÁÍÍÙ: %s"
#: ccdfunc.c:278 #: ccdfunc.c:277
msgid "Error saving file" msgid "Error saving file"
msgstr "ïÛÉÂËÁ ÓÏÈÒÁÎÅÎÉÑ ÆÁÊÌÁ" msgstr "ïÛÉÂËÁ ÓÏÈÒÁÎÅÎÉÑ ÆÁÊÌÁ"
#: ccdfunc.c:634 #: ccdfunc.c:641
#, c-format #, c-format
msgid "Field of view: %s" msgid "Field of view: %s"
msgstr "ðÏÌÅ ÚÒÅÎÉÑ: %s" msgstr "ðÏÌÅ ÚÒÅÎÉÑ: %s"
#: ccdfunc.c:269 #: ccdfunc.c:268
#, c-format #, c-format
msgid "File saved as '%s'" msgid "File saved as '%s'"
msgstr "æÁÊÌ ÓÏÈÒÁÎÅÎ ËÁË '%s'" msgstr "æÁÊÌ ÓÏÈÒÁÎÅÎ ËÁË '%s'"
#: ccdfunc.c:365 #: ccdfunc.c:364
msgid "Focuser device not pointed" msgid "Focuser device not pointed"
msgstr "õÓÔÒÏÊÓÔ×Ï ÆÏËÕÓÅÒÁ ÎÅ ÕËÁÚÁÎÏ" msgstr "õÓÔÒÏÊÓÔ×Ï ÆÏËÕÓÅÒÁ ÎÅ ÕËÁÚÁÎÏ"
#: ccdfunc.c:595 #: ccdfunc.c:594
#, c-format #, c-format
msgid "Found %d cameras, you point number %d" msgid "Found %d cameras, you point number %d"
msgstr "ïÂÎÁÒÕÖÅÎÏ %d ËÁÍÅÒ, ×Ù ÕËÁÚÁÌÉ %d" msgstr "ïÂÎÁÒÕÖÅÎÏ %d ËÁÍÅÒ, ×Ù ÕËÁÚÁÌÉ %d"
#: ccdfunc.c:403 #: ccdfunc.c:402
#, c-format #, c-format
msgid "Found %d focusers, you point number %d" msgid "Found %d focusers, you point number %d"
msgstr "ïÂÎÁÒÕÖÅÎÏ %d ÆÏËÕÓÅÒÏ×, ×Ù ÕËÁÚÁÌÉ %d" msgstr "ïÂÎÁÒÕÖÅÎÏ %d ÆÏËÕÓÅÒÏ×, ×Ù ÕËÁÚÁÌÉ %d"
#: ccdfunc.c:494 #: ccdfunc.c:493
#, c-format #, c-format
msgid "Found %d wheels, you point number %d" msgid "Found %d wheels, you point number %d"
msgstr "ïÂÎÁÒÕÖÅÎÏ %d ËÏÌÅÓ, ×Ù ÕËÁÚÁÌÉ %d" msgstr "ïÂÎÁÒÕÖÅÎÏ %d ËÏÌÅÓ, ×Ù ÕËÁÚÁÌÉ %d"
#: ccdfunc.c:631 #: ccdfunc.c:638
#, c-format #, c-format
msgid "Full array: %s" msgid "Full array: %s"
msgstr "ðÏÌÎÙÊ ÆÏÒÍÁÔ: %s" msgstr "ðÏÌÎÙÊ ÆÏÒÍÁÔ: %s"
@ -265,11 +261,10 @@ msgid "Histogram conversion: %s"
msgstr "ðÒÅÏÂÒÁÚÏ×ÁÎÉÅ ÇÉÓÔÏÇÒÁÍÍÙ: %s" msgstr "ðÒÅÏÂÒÁÚÏ×ÁÎÉÅ ÇÉÓÔÏÇÒÁÍÍÙ: %s"
#: cmdlnopts.c:108 #: cmdlnopts.c:108
#, fuzzy
msgid "INET image socket port" msgid "INET image socket port"
msgstr "ÐÏÒÔ ÌÏËÁÌØÎÏÇÏ ÓÅÔÅ×ÏÇÏ ÓÏËÅÔÁ" msgstr "порт локального сетевого сокета передачи изображения"
#: ccdfunc.c:356 #: ccdfunc.c:355
#, c-format #, c-format
msgid "Image stat:\n" msgid "Image stat:\n"
msgstr "óÔÁÔÉÓÔÉËÁ ÐÏ ÉÚÏÂÒÁÖÅÎÉÀ: \n" msgstr "óÔÁÔÉÓÔÉËÁ ÐÏ ÉÚÏÂÒÁÖÅÎÉÀ: \n"
@ -282,80 +277,86 @@ msgstr "N
msgid "No camera device" msgid "No camera device"
msgstr "îÅ ÕËÁÚÁÎÏ ÕÓÔÒÏÊÓÔ×Ï ËÁÍÅÒÙ" msgstr "îÅ ÕËÁÚÁÎÏ ÕÓÔÒÏÊÓÔ×Ï ËÁÍÅÒÙ"
#: ccdfunc.c:564 ccdfunc.c:565 #: ccdfunc.c:563 ccdfunc.c:564
msgid "No cameras found" msgid "No cameras found"
msgstr "ëÁÍÅÒ ÎÅ ÏÂÎÁÒÕÖÅÎÏ" msgstr "ëÁÍÅÒ ÎÅ ÏÂÎÁÒÕÖÅÎÏ"
#: ccdfunc.c:372 #: ccdfunc.c:371
msgid "No focusers found" msgid "No focusers found"
msgstr "æÏËÕÓÅÒÏ× ÎÅ ÏÂÎÁÒÕÖÅÎÏ" msgstr "æÏËÕÓÅÒÏ× ÎÅ ÏÂÎÁÒÕÖÅÎÏ"
#: ccdfunc.c:463 #: ccdfunc.c:462
msgid "No wheels found" msgid "No wheels found"
msgstr "ôÕÒÅÌÅÊ ÎÅ ÏÂÎÁÒÕÖÅÎÏ" msgstr "ôÕÒÅÌÅÊ ÎÅ ÏÂÎÁÒÕÖÅÎÏ"
#: ccdfunc.c:719 #: ccdfunc.c:724
msgid "Only show statistics" msgid "Only show statistics"
msgstr "ôÏÌØËÏ ÏÔÏÂÒÁÚÉÔØ ÓÔÁÔÉÓÔÉËÕ" msgstr "ôÏÌØËÏ ÏÔÏÂÒÁÚÉÔØ ÓÔÁÔÉÓÔÉËÕ"
#: ccdfunc.c:625 #: ccdfunc.c:632
#, c-format #, c-format
msgid "Pixel size: %g x %g" msgid "Pixel size: %g x %g"
msgstr "òÁÚÍÅÒ ÐÉËÓÅÌÑ: %g x %g" msgstr "òÁÚÍÅÒ ÐÉËÓÅÌÑ: %g x %g"
#: ccdfunc.c:756 #: ccdfunc.c:761
msgid "Read grabbed image" msgid "Read grabbed image"
msgstr "óÞÉÔÙ×ÁÎÉÅ ÉÚÏÂÒÁÖÅÎÉÑ" msgstr "óÞÉÔÙ×ÁÎÉÅ ÉÚÏÂÒÁÖÅÎÉÑ"
#: ccdfunc.c:718 #: ccdfunc.c:723
#, c-format #, c-format
msgid "Readout mode: %s" msgid "Readout mode: %s"
msgstr "òÅÖÉÍ ÓÞÉÔÙ×ÁÎÉÑ: %s" msgstr "òÅÖÉÍ ÓÞÉÔÙ×ÁÎÉÑ: %s"
#: client.c:287 #: client.c:286
msgid "Server timeout" msgid "Server timeout"
msgstr "ôÁÊÍÁÕÔ ÓÅÒ×ÅÒÁ" msgstr "ôÁÊÍÁÕÔ ÓÅÒ×ÅÒÁ"
#: ccdfunc.c:682 #: ccdfunc.c:687
#, c-format #, c-format
msgid "Set brightness to %g" msgid "Set brightness to %g"
msgstr "õÓÔÁÎÏ×ÉÔØ ÑÒËÏÓÔØ × %g" msgstr "õÓÔÁÎÏ×ÉÔØ ÑÒËÏÓÔØ × %g"
#: ccdfunc.c:619 #: ccdfunc.c:626
#, c-format #, c-format
msgid "Set fan speed to %d" msgid "Set fan speed to %d"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ×ÅÎÔÉÌÑÔÏÒÏ× × %d" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ×ÅÎÔÉÌÑÔÏÒÏ× × %d"
#: ccdfunc.c:676 #: ccdfunc.c:681
#, c-format #, c-format
msgid "Set gain to %g" msgid "Set gain to %g"
msgstr "õÓÔÁÎÏ×ÉÔØ Gain × %g" msgstr "õÓÔÁÎÏ×ÉÔØ Gain × %g"
#: ccdfunc.c:648 #: ccdfunc.c:655
#, c-format #, c-format
msgid "Shutter command: %s\n" msgid "Shutter command: %s\n"
msgstr "ëÏÍÁÎÄÁ ÚÁÔ×ÏÒÁ: %s\n" msgstr "ëÏÍÁÎÄÁ ÚÁÔ×ÏÒÁ: %s\n"
#: ccdfunc.c:834 #: ccdfunc.c:838
msgid "Some error when capture" msgid "Some error when capture"
msgstr "" msgstr "Ошибка при захвате"
#. "Попытка Ñ<>конфигурироваÑÑŒ порт I/O как %d\n" #: ccdfunc.c:660
#: ccdfunc.c:654
#, c-format #, c-format
msgid "Try to configure I/O port as %d" msgid "Try to configure I/O port as %d"
msgstr "ðÏÐÙÔËÁ ÓËÏÎÆÉÇÕÒÉÒÏ×ÁÔØ ÐÏÒÔ I/O ËÁË %d" msgstr "ðÏÐÙÔËÁ ÓËÏÎÆÉÇÕÒÉÒÏ×ÁÔØ ÐÏÒÔ I/O ËÁË %d"
#. "Попытка запиÑ<C2B8>и %d в порт I/O\n" #: ccdfunc.c:672
#: ccdfunc.c:667
#, c-format #, c-format
msgid "Try to write %d to I/O port" msgid "Try to write %d to I/O port"
msgstr "ðÏÐÙÔËÁ ÚÁÐÉÓÉ %d × ÐÏÒÔ I/O" msgstr "ðÏÐÙÔËÁ ÚÁÐÉÓÉ %d × ÐÏÒÔ I/O"
#: cmdlnopts.c:106 #: cmdlnopts.c:106
#, fuzzy
msgid "UNIX socket name (command socket)" msgid "UNIX socket name (command socket)"
msgstr "éÍÑ UNIX-ÓÏËÅÔÁ" msgstr "имя UNIX-сокета"
#: ccdfunc.c:455
msgid "Wheel device not pointed"
msgstr "Устройство турели не указано"
#: ccdfunc.c:520
#, c-format
msgid "Wheel position should be from 0 to %d"
msgstr "Позиция колеса должна быть от 0 до %d"
#: cmdlnopts.c:82 #: cmdlnopts.c:82
msgid "absolute (not divided by binning!) frame X0 coordinate (-1 - all " msgid "absolute (not divided by binning!) frame X0 coordinate (-1 - all "
@ -391,16 +392,6 @@ msgstr "
msgid "cancel current exposition" msgid "cancel current exposition"
msgstr "ÏÔÍÅÎÁ ÔÅËÕÝÅÊ ÜËÓÐÏÚÉÃÉÉ" msgstr "ÏÔÍÅÎÁ ÔÅËÕÝÅÊ ÜËÓÐÏÚÉÃÉÉ"
#: ccdfunc.c:456
#, fuzzy
msgid "cc_Wheel device not pointed"
msgstr "õÓÔÒÏÊÓÔ×Ï ÔÕÒÅÌÉ ÎÅ ÕËÁÚÁÎÏ"
#: ccdfunc.c:521
#, fuzzy, c-format
msgid "cc_Wheel position should be from 0 to %d"
msgstr "ðÏÚÉÃÉÑ ËÏÌÅÓÁ ÄÏÌÖÎÁ ÂÙÔØ ÏÔ 0 ÄÏ %d"
#: cmdlnopts.c:88 #: cmdlnopts.c:88
msgid "close shutter" msgid "close shutter"
msgstr "ÚÁËÒÙÔØ ÚÁÔ×ÏÒ" msgstr "ÚÁËÒÙÔØ ÚÁÔ×ÏÒ"
@ -416,9 +407,8 @@ msgstr "
"pin1 - ÍÌÁÄÛÉÊ ÂÉÔ, 1 - ×ÙÈÏÄ, 0 - ×ÈÏÄ)" "pin1 - ÍÌÁÄÛÉÊ ÂÉÔ, 1 - ×ÙÈÏÄ, 0 - ×ÈÏÄ)"
#: cmdlnopts.c:48 #: cmdlnopts.c:48
#, fuzzy
msgid "custom camera device plugin command" msgid "custom camera device plugin command"
msgstr "ÐÌÁÇÉÎ ËÁÍÅÒÙ (ÎÁÐÒÉÍÅÒ, devfli.so)" msgstr "особые команды плагина камеры"
#: cmdlnopts.c:61 #: cmdlnopts.c:61
msgid "fast readout mode" msgid "fast readout mode"
@ -437,8 +427,9 @@ msgid "focuser device plugin (e.g. devzwo.so)"
msgstr "ÐÌÁÇÉÎ ÆÏËÕÓÅÒÁ (ÎÁÐÒÉÍÅÒ, devzwo.so)" msgstr "ÐÌÁÇÉÎ ÆÏËÕÓÅÒÁ (ÎÁÐÒÉÍÅÒ, devzwo.so)"
#: cmdlnopts.c:114 #: cmdlnopts.c:114
msgid "force using image through socket transition even if can use SHM)" msgid "force using image through socket transition even if can use SHM"
msgstr "" msgstr "принудительно брать изображения из сокета даже если возможно "
"пользоваться разделяемой памятью"
#: cmdlnopts.c:91 #: cmdlnopts.c:91
msgid "get value of I/O port pins" msgid "get value of I/O port pins"
@ -457,7 +448,6 @@ msgid "list connected devices"
msgstr "ÓÐÉÓÏË ÐÏÄËÌÀÞÅÎÎÙÈ ÕÓÔÒÏÊÓÔ×" msgstr "ÓÐÉÓÏË ÐÏÄËÌÀÞÅÎÎÙÈ ÕÓÔÒÏÊÓÔ×"
#: cmdlnopts.c:107 #: cmdlnopts.c:107
#, fuzzy
msgid "local INET command socket port" msgid "local INET command socket port"
msgstr "ÐÏÒÔ ÌÏËÁÌØÎÏÇÏ ÓÅÔÅ×ÏÇÏ ÓÏËÅÔÁ" msgstr "ÐÏÒÔ ÌÏËÁÌØÎÏÇÏ ÓÅÔÅ×ÏÇÏ ÓÏËÅÔÁ"
@ -524,7 +514,7 @@ msgstr "
#: cmdlnopts.c:110 #: cmdlnopts.c:110
msgid "passive viewer (only get last images)" msgid "passive viewer (only get last images)"
msgstr "" msgstr "пассивный просмотр (только последние кадры)"
#: cmdlnopts.c:65 #: cmdlnopts.c:65
msgid "program author" msgid "program author"
@ -544,11 +534,11 @@ msgstr "
#: cmdlnopts.c:90 #: cmdlnopts.c:90
msgid "run exposition on HIGH @ pin5 I/O port" msgid "run exposition on HIGH @ pin5 I/O port"
msgstr "" msgstr "запуск экспозиции по ВЫСОКОМУ сигналу на контакте 5 порта I/O"
#: cmdlnopts.c:89 #: cmdlnopts.c:89
msgid "run exposition on LOW @ pin5 I/O port" msgid "run exposition on LOW @ pin5 I/O port"
msgstr "" msgstr "запуск экспозиции по НИЗКОМУ сигналу на контакте 5 порта I/O"
#: cmdlnopts.c:60 #: cmdlnopts.c:60
msgid "run in 8-bit mode" msgid "run in 8-bit mode"
@ -576,7 +566,7 @@ msgstr "
#: cmdlnopts.c:113 #: cmdlnopts.c:113
msgid "shared memory (with image data) key (default: 7777777)" msgid "shared memory (with image data) key (default: 7777777)"
msgstr "" msgstr "ключ разделяемой памяти с данными изображения (по умолчанию: 7777777)"
#: cmdlnopts.c:56 #: cmdlnopts.c:56
msgid "show this help" msgid "show this help"
@ -584,7 +574,7 @@ msgstr "
#: cmdlnopts.c:115 #: cmdlnopts.c:115
msgid "start (!=0) or stop(==0) infinity capturing loop" msgid "start (!=0) or stop(==0) infinity capturing loop"
msgstr "" msgstr "начать (!=0) или закончить (==0) бесконечный цикл захвата изображений"
#: cmdlnopts.c:58 #: cmdlnopts.c:58
msgid "verbose level (-V - messages, -VV - debug, -VVV - all shit)" msgid "verbose level (-V - messages, -VV - debug, -VVV - all shit)"
@ -601,29 +591,3 @@ msgstr "
#: cmdlnopts.c:51 #: cmdlnopts.c:51
msgid "wheel device plugin (e.g. devdummy.so)" msgid "wheel device plugin (e.g. devdummy.so)"
msgstr "ÐÌÁÇÉÎ ÕÓÔÒÏÊÓÔ×Á ÔÕÒÅÌÉ (ÎÁÐÒÉÍÅÒ, devdummy.so)" msgstr "ÐÌÁÇÉÎ ÕÓÔÒÏÊÓÔ×Á ÔÕÒÅÌÉ (ÎÁÐÒÉÍÅÒ, devdummy.so)"
#, c-format
#~ msgid "Can't find camera in plugin %s: %s"
#~ msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ ÐÌÁÇÉÎ ËÁÍÅÒÙ %s: %s"
#, c-format
#~ msgid "Can't find focuser in plugin %s: %s"
#~ msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ ÐÌÁÇÉÎ ÆÏËÕÓÅÒÁ %s: %s"
#, c-format
#~ msgid "Can't find plugin %s: %s"
#~ msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ ÐÌÁÇÉÎ %s: %s"
#, c-format
#~ msgid "Can't find wheel in plugin %s: %s"
#~ msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ ÐÌÁÇÉÎ ÔÕÒÅÌÉ %s: %s"
#~ msgid "Neither filename nor filename prefix pointed!"
#~ msgstr "îÉ ÉÍÑ ÆÁÊÌÁ, ÎÉ ÐÒÅÆÉËÓ ÎÅ ÕËÁÚÁÎÙ!"
#~ msgid "PID file (default: "
#~ msgstr "PID-ÆÁÊÌ (ÐÏ ÕÍÏÌÞÁÎÉÀ: "
#, fuzzy
#~ msgid "local INET socket port to send/receive images"
#~ msgstr "ÐÏÒÔ ÌÏËÁÌØÎÏÇÏ ÓÅÔÅ×ÏÇÏ ÓÏËÅÔÁ"

View File

@ -958,11 +958,14 @@ static cc_hresult inftyhandler(int fd, _U_ const char *key, const char *val){
// custom camera plugin command // custom camera plugin command
static cc_hresult pluginhandler(int fd, _U_ const char *key, const char *val){ static cc_hresult pluginhandler(int fd, _U_ const char *key, const char *val){
if(!camera->plugincmd) return RESULT_BADKEY; if(!camera->plugincmd) return RESULT_BADKEY;
const char *r = camera->plugincmd(val); static cc_charbuff *ans = NULL;
if(!r) return RESULT_FAIL; if(!ans) ans = cc_charbufnew();
if(*r == 0) return RESULT_OK; cc_buff_lock(ans);
if(!cc_sendstrmessage(fd, r)) return RESULT_DISCONNECTED; cc_charbufclr(ans);
return RESULT_SILENCE; cc_hresult r = camera->plugincmd(val, ans);
cc_buff_unlock(ans);
if(ans->buflen && !cc_sendstrmessage(fd, ans->buf)) r = RESULT_DISCONNECTED;
return r;
} }
// get headers // get headers