mirror of
https://github.com/eddyem/CCD_Capture.git
synced 2025-12-06 02:35:13 +03:00
add custom plugin commands; start developing 'artifical star' plugin to generate 'vagrant stars'
This commit is contained in:
parent
869421d52f
commit
0f4fcf5015
15
Astar_cameras/CMakeLists.txt
Normal file
15
Astar_cameras/CMakeLists.txt
Normal 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})
|
||||
385
Astar_cameras/artifical_star.c
Normal file
385
Astar_cameras/artifical_star.c
Normal 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,
|
||||
};
|
||||
@ -15,7 +15,8 @@ message("VER: ${VERSION}")
|
||||
|
||||
# list of options
|
||||
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(FLI "Add support of FLI 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(APOGEE "Add support of Apogee cameras" OFF)
|
||||
option(EXAMPLES "Some examples" OFF)
|
||||
option(ASTAR "Artifical star plugin" OFF)
|
||||
|
||||
# default flags
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -W -Wextra -fno-builtin-strlen")
|
||||
@ -75,6 +77,7 @@ if(OPENMP_FOUND)
|
||||
add_definitions(-DOMP_FOUND)
|
||||
endif()
|
||||
|
||||
# view image in OpenGL window
|
||||
if(IMAGEVIEW)
|
||||
list(APPEND SOURCES events.c imageview.c)
|
||||
find_package(OpenGL REQUIRED)
|
||||
@ -84,9 +87,13 @@ if(IMAGEVIEW)
|
||||
list(APPEND ${PROJ}_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
|
||||
add_definitions(-DIMAGEVIEW)
|
||||
endif()
|
||||
|
||||
add_subdirectory(Dummy_cameras)
|
||||
|
||||
# Dummy and artifical star plugins
|
||||
if(DUMMY)
|
||||
add_subdirectory(Dummy_cameras)
|
||||
endif()
|
||||
if(ASTAR)
|
||||
add_subdirectory(Astar_cameras)
|
||||
endif()
|
||||
# additional modules with CCD/CMOS support
|
||||
if(ZWO)
|
||||
add_subdirectory(ZWO_cameras)
|
||||
|
||||
@ -43,6 +43,7 @@ static double texpstart = 0.;
|
||||
static uint8_t bitpix = 16; // bit depth: 8 or 16
|
||||
// sinusoide periods
|
||||
static double sinPx = 100., sinPy = 200.;
|
||||
static const double sinmin = 1.;
|
||||
|
||||
static int campoll(cc_capture_status *st, float *remain){
|
||||
if(capstat != CAPTURE_PROCESS){
|
||||
@ -256,35 +257,27 @@ static int whlgetnam(char *n, int l){
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static const char* const helpmsg =
|
||||
"Dummy camera custom plugin commands:\n"
|
||||
"\tpx - set/get sin period over X axis (pix)\n"
|
||||
"\tpy - -//- over Y axis\n"
|
||||
;
|
||||
static const char* const pmust = "Period must be not less than 1";
|
||||
static const char *plugincmd(const char *str){
|
||||
static char ans[BUFSIZ+1];
|
||||
snprintf(ans, BUFSIZ, "%s", str);
|
||||
char *val = cc_get_keyval(ans);
|
||||
if(val){ // setters
|
||||
if(0 == strcmp("px", ans)){
|
||||
double f = atof(val);
|
||||
if(f < 1.) return pmust;
|
||||
sinPx = f;
|
||||
}else if(0 == strcmp("py", ans)){
|
||||
double f = atof(val);
|
||||
if(f < 1.) return pmust;
|
||||
sinPy = f;
|
||||
}
|
||||
} // getters/return
|
||||
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 checker(const char *str, cc_charbuff *ans){
|
||||
char *eq = strchr(str, '=');
|
||||
if(eq){
|
||||
float x = (float)atof(eq+1);
|
||||
if(x < 1.){if(ans) cc_charbufaddline(ans, "Value must be >= 1.");}
|
||||
else return TRUE;
|
||||
}else return TRUE; // getter
|
||||
return FALSE;
|
||||
}*/
|
||||
|
||||
|
||||
// cmd, help, handler, ptr, type
|
||||
static cc_parhandler_t handlers[] = {
|
||||
{"px", "set/get sin period over X axis (pix)", NULL, (void*)&sinPx, (void*)&sinmin, NULL, CC_PAR_DOUBLE},
|
||||
{"py", "set/get sin period over Y axis (pix)", NULL, (void*)&sinPy, (void*)&sinmin, NULL, 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(){
|
||||
|
||||
122
ccdcapture.c
122
ccdcapture.c
@ -189,8 +189,6 @@ static const char *resmessages[RESULT_NUM] = {
|
||||
[RESULT_FAIL] = "FAIL",
|
||||
[RESULT_BADVAL] = "BADVAL",
|
||||
[RESULT_BADKEY] = "BADKEY",
|
||||
// [RESULT_SILENCE] = NULL, // nothing to send
|
||||
// [RESULT_DISCONNECTED] = NULL, // not to send
|
||||
};
|
||||
|
||||
const char *cc_hresult2str(cc_hresult r){
|
||||
@ -732,3 +730,123 @@ int cc_charbuf2kw(cc_charbuff *b, fitsfile *f){
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
83
ccdcapture.h
83
ccdcapture.h
@ -41,6 +41,26 @@ typedef struct __attribute__((packed, aligned(4))){
|
||||
/* `data` is uint8_t or uint16_t depending on `bitpix` */
|
||||
} 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
|
||||
typedef struct{
|
||||
int w; int h; // width & height
|
||||
@ -70,6 +90,17 @@ typedef enum{
|
||||
FAN_HIGH,
|
||||
} 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
|
||||
// camera
|
||||
typedef struct{
|
||||
@ -110,10 +141,10 @@ typedef struct{
|
||||
int (*getTbody)(float *t); // body T
|
||||
int (*getbin)(int *binh, int *binv);
|
||||
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
|
||||
cc_frameformat field; // max field of view
|
||||
cc_frameformat array; // array format
|
||||
cc_frameformat field; // max field of view (full CCD field without overscans)
|
||||
cc_frameformat array; // array format (with overscans)
|
||||
cc_frameformat geometry; // current geometry settings (as in setgeometry)
|
||||
} cc_Camera;
|
||||
|
||||
@ -165,17 +196,6 @@ typedef struct{
|
||||
// client will disconnect after this time from last server message
|
||||
#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
|
||||
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_WPOS "wpos"
|
||||
|
||||
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 enum{ // parameter type
|
||||
CC_PAR_INT,
|
||||
CC_PAR_FLOAT,
|
||||
CC_PAR_DOUBLE,
|
||||
} cc_partype_t;
|
||||
|
||||
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;
|
||||
typedef struct{ // custom plugin parameters
|
||||
const char *cmd; // text parameter/command
|
||||
const char *helpstring; // help string for this parameter
|
||||
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`
|
||||
void *ptr; // pointer to variable (if exists)
|
||||
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)
|
||||
#define cc_buff_trylock(b) pthread_mutex_trylock(&b->mutex)
|
||||
#define cc_buff_unlock(b) pthread_mutex_unlock(&b->mutex)
|
||||
// this record should be last in cc_parhandler_t array for `cc_plugin_customcmd`
|
||||
#define CC_PARHANDLER_END {0}
|
||||
|
||||
cc_hresult cc_plugin_customcmd(const char *str, cc_parhandler_t *handlers, cc_charbuff *ans);
|
||||
|
||||
cc_Focuser *open_focuser(const char *pluginname);
|
||||
cc_Camera *open_camera(const char *pluginname);
|
||||
|
||||
22
ccdfunc.c
22
ccdfunc.c
@ -217,7 +217,6 @@ int saveFITS(cc_IMG *img, char **outp){
|
||||
}
|
||||
}else{ // user pointed output file prefix
|
||||
if(!check_filenameprefix(fnam, PATH_MAX)){
|
||||
// îÅ ÍÏÇÕ ÓÏÈÒÁÎÉÔØ ÆÁÊÌ
|
||||
WARNX(_("Can't save file with prefix %s"), GP->outfileprefix);
|
||||
LOGERR("Can't save image with prefix %s", GP->outfileprefix);
|
||||
}
|
||||
@ -453,7 +452,7 @@ retn:
|
||||
|
||||
cc_Wheel *startWheel(){
|
||||
if(!GP->wheeldev && !GP->commondev){
|
||||
verbose(3, _("cc_Wheel device not pointed"));
|
||||
verbose(3, _("Wheel device not pointed"));
|
||||
return NULL;
|
||||
}else{
|
||||
char *plugin = GP->commondev ? GP->commondev : GP->wheeldev;
|
||||
@ -518,7 +517,7 @@ void wheels(){
|
||||
pos = GP->setwheel;
|
||||
if(pos == -1) goto retn; // no wheel commands
|
||||
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;
|
||||
}
|
||||
if(!wheel->setPos(pos))
|
||||
@ -605,11 +604,19 @@ int prepare_ccds(){
|
||||
if(!camera->plugincmd) WARNX(_("Camera plugin have no custom commands"));
|
||||
else{
|
||||
char **p = GP->plugincmd;
|
||||
cc_charbuff *b = cc_charbufnew();
|
||||
DBG("got %s", *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;
|
||||
}
|
||||
cc_charbufdel(&b);
|
||||
}
|
||||
}
|
||||
if(GP->fanspeed > -1){
|
||||
@ -650,7 +657,6 @@ int prepare_ccds(){
|
||||
WARNX(_("Can't run shutter command %s (unsupported?)"), str[GP->shtr_cmd]);
|
||||
}
|
||||
if(GP->confio > -1){
|
||||
// "ðÏÐÙÔËÁ ÓËÏÎÆÉÇÕÒÉÒÏ×ÁÔØ ÐÏÒÔ I/O ËÁË %d\n"
|
||||
verbose(1, _("Try to configure I/O port as %d"), GP->confio);
|
||||
if(!camera->confio(GP->confio))
|
||||
WARNX(_("Can't configure (unsupported?)"));
|
||||
@ -663,7 +669,6 @@ int prepare_ccds(){
|
||||
WARNX(_("Can't get IOport state (unsupported?)"));
|
||||
}
|
||||
if(GP->setio > -1){
|
||||
// "ðÏÐÙÔËÁ ÚÁÐÉÓÉ %d × ÐÏÒÔ I/O\n"
|
||||
verbose(1, _("Try to write %d to I/O port"), GP->setio);
|
||||
if(!camera->setio(GP->setio))
|
||||
WARNX(_("Can't set IOport"));
|
||||
@ -717,7 +722,8 @@ int prepare_ccds(){
|
||||
WARNX(_("Can't set readout speed"));
|
||||
else verbose(1, _("Readout mode: %s"), GP->fast ? "fast" : "normal");
|
||||
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"));
|
||||
verbose(2, "Binning: %d x %d", GP->hbin, GP->vbin);
|
||||
rtn = TRUE;
|
||||
@ -742,7 +748,6 @@ DBG("w=%d, h=%d", raw_width, raw_height);
|
||||
for(int j = 0; j < GP->nframes; ++j){
|
||||
TIMESTAMP("Start next cycle");
|
||||
TIMEINIT();
|
||||
// úÁÈ×ÁÔ ËÁÄÒÁ %d\n
|
||||
verbose(1, _("Capture frame %d"), j);
|
||||
if(!camera->startexposition()){
|
||||
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)){
|
||||
double delta, time1 = dtime() + GP->pause_len;
|
||||
while((delta = time1 - dtime()) > 0.){
|
||||
// %d ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÐÁÕÚÙ\n
|
||||
verbose(1, _("%d seconds till pause ends\n"), (int)delta);
|
||||
float tmpf;
|
||||
if(camera->getTcold(&tmpf)) verbose(1, "CCDTEMP=%.1f\n", tmpf);
|
||||
|
||||
1
client.c
1
client.c
@ -267,7 +267,6 @@ void client(int sock){
|
||||
while(1){
|
||||
SENDCMDW(CC_CMD_CAMTEMPER);
|
||||
if((delta = time1 - dtime()) < __FLT_EPSILON__) break;
|
||||
// %d секунд до окончания паузы\n
|
||||
if(delta > 1.) verbose(1, _("%d seconds till pause ends\n"), (int)delta);
|
||||
if(delta > 6.) sleep(5);
|
||||
else if(delta > 1.) sleep((int)delta);
|
||||
|
||||
@ -111,7 +111,7 @@ myoption cmdlnopts[] = {
|
||||
{"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)")},
|
||||
{"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")},
|
||||
|
||||
#ifdef IMAGEVIEW
|
||||
|
||||
Binary file not shown.
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\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"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@ -254,7 +254,7 @@ msgid "shared memory (with image data) key (default: 7777777)"
|
||||
msgstr ""
|
||||
|
||||
#: 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 ""
|
||||
|
||||
#: cmdlnopts.c:115
|
||||
@ -269,289 +269,283 @@ msgstr ""
|
||||
msgid "Camera device unknown"
|
||||
msgstr ""
|
||||
|
||||
#. Не могу сохранить файл
|
||||
#: ccdfunc.c:221
|
||||
#: ccdfunc.c:220
|
||||
#, c-format
|
||||
msgid "Can't save file with prefix %s"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:269
|
||||
#: ccdfunc.c:268
|
||||
#, c-format
|
||||
msgid "File saved as '%s'"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:278
|
||||
#: ccdfunc.c:277
|
||||
msgid "Error saving file"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:356
|
||||
#: ccdfunc.c:355
|
||||
#, c-format
|
||||
msgid "Image stat:\n"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:365
|
||||
#: ccdfunc.c:364
|
||||
msgid "Focuser device not pointed"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:372
|
||||
#: ccdfunc.c:371
|
||||
msgid "No focusers found"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:403
|
||||
#: ccdfunc.c:402
|
||||
#, c-format
|
||||
msgid "Found %d focusers, you point number %d"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:407
|
||||
#: ccdfunc.c:406
|
||||
msgid "Can't set active focuser number"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:421
|
||||
#: ccdfunc.c:420
|
||||
msgid "Can't get focuser limit positions"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:428
|
||||
#: ccdfunc.c:427
|
||||
msgid "Can't get current focuser position"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:442
|
||||
#: ccdfunc.c:441
|
||||
#, c-format
|
||||
msgid "Can't set position %g: out of limits [%g, %g]"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:446
|
||||
#: ccdfunc.c:445
|
||||
msgid "Can't home focuser"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:448
|
||||
#: ccdfunc.c:447
|
||||
#, c-format
|
||||
msgid "Can't set position %g"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:456
|
||||
msgid "cc_Wheel device not pointed"
|
||||
#: ccdfunc.c:455
|
||||
msgid "Wheel device not pointed"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:463
|
||||
#: ccdfunc.c:462
|
||||
msgid "No wheels found"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:494
|
||||
#: ccdfunc.c:493
|
||||
#, c-format
|
||||
msgid "Found %d wheels, you point number %d"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:498
|
||||
#: ccdfunc.c:497
|
||||
msgid "Can't set active wheel number"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:514
|
||||
#: ccdfunc.c:513
|
||||
msgid "Can't get max wheel position"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:521
|
||||
#: ccdfunc.c:520
|
||||
#, c-format
|
||||
msgid "cc_Wheel position should be from 0 to %d"
|
||||
msgid "Wheel position should be from 0 to %d"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:525
|
||||
#: ccdfunc.c:524
|
||||
#, c-format
|
||||
msgid "Can't set wheel position %d"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:542
|
||||
#: ccdfunc.c:541
|
||||
#, c-format
|
||||
msgid "%.1f seconds till exposition ends"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:557
|
||||
#: ccdfunc.c:556
|
||||
msgid "Camera device not pointed"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:564 ccdfunc.c:565
|
||||
#: ccdfunc.c:563 ccdfunc.c:564
|
||||
msgid "No cameras found"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:595
|
||||
#: ccdfunc.c:594
|
||||
#, c-format
|
||||
msgid "Found %d cameras, you point number %d"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:599
|
||||
#: ccdfunc.c:598
|
||||
msgid "Can't set active camera number"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:605
|
||||
#: ccdfunc.c:604
|
||||
msgid "Camera plugin have no custom commands"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:618
|
||||
#: ccdfunc.c:625
|
||||
msgid "Can't set fan speed"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:619
|
||||
#: ccdfunc.c:626
|
||||
#, c-format
|
||||
msgid "Set fan speed to %d"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:624
|
||||
#: ccdfunc.c:631
|
||||
#, c-format
|
||||
msgid "Camera model: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:625
|
||||
#: ccdfunc.c:632
|
||||
#, c-format
|
||||
msgid "Pixel size: %g x %g"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:631
|
||||
#: ccdfunc.c:638
|
||||
#, c-format
|
||||
msgid "Full array: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:634
|
||||
#: ccdfunc.c:641
|
||||
#, c-format
|
||||
msgid "Field of view: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:637
|
||||
#: ccdfunc.c:644
|
||||
#, c-format
|
||||
msgid "Current format: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:640
|
||||
#: ccdfunc.c:647
|
||||
#, c-format
|
||||
msgid "Can't set T to %g degC"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:648
|
||||
#: ccdfunc.c:655
|
||||
#, c-format
|
||||
msgid "Shutter command: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:650
|
||||
#: ccdfunc.c:657
|
||||
#, c-format
|
||||
msgid "Can't run shutter command %s (unsupported?)"
|
||||
msgstr ""
|
||||
|
||||
#. "Попытка сконфигурировать порт I/O как %d\n"
|
||||
#: ccdfunc.c:654
|
||||
#: ccdfunc.c:660
|
||||
#, c-format
|
||||
msgid "Try to configure I/O port as %d"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:656
|
||||
#: ccdfunc.c:662
|
||||
msgid "Can't configure (unsupported?)"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:663
|
||||
#: ccdfunc.c:669
|
||||
msgid "Can't get IOport state (unsupported?)"
|
||||
msgstr ""
|
||||
|
||||
#. "Попытка записи %d в порт I/O\n"
|
||||
#: ccdfunc.c:667
|
||||
#: ccdfunc.c:672
|
||||
#, c-format
|
||||
msgid "Try to write %d to I/O port"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:669
|
||||
#: ccdfunc.c:674
|
||||
msgid "Can't set IOport"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:676
|
||||
#: ccdfunc.c:681
|
||||
#, c-format
|
||||
msgid "Set gain to %g"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:677
|
||||
#: ccdfunc.c:682
|
||||
#, c-format
|
||||
msgid "Can't set gain to %g"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:682
|
||||
#: ccdfunc.c:687
|
||||
#, c-format
|
||||
msgid "Set brightness to %g"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:683
|
||||
#: ccdfunc.c:688
|
||||
#, c-format
|
||||
msgid "Can't set brightness to %g"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:689 server.c:265
|
||||
#: ccdfunc.c:694 server.c:265
|
||||
#, c-format
|
||||
msgid "Can't set binning %dx%d"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:701 server.c:266
|
||||
#: ccdfunc.c:706 server.c:266
|
||||
msgid "Can't set given geometry"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:705
|
||||
#: ccdfunc.c:710
|
||||
#, c-format
|
||||
msgid "Can't set %d flushes"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:709
|
||||
#: ccdfunc.c:714
|
||||
#, c-format
|
||||
msgid "Can't set exposure time to %f seconds"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:712
|
||||
#: ccdfunc.c:717
|
||||
msgid "Can't change frame type"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:715
|
||||
#: ccdfunc.c:720
|
||||
msgid "Can't set bit depth"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:717
|
||||
#: ccdfunc.c:722
|
||||
msgid "Can't set readout speed"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:718
|
||||
#: ccdfunc.c:723
|
||||
#, c-format
|
||||
msgid "Readout mode: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:719
|
||||
#: ccdfunc.c:724
|
||||
msgid "Only show statistics"
|
||||
msgstr ""
|
||||
|
||||
#. GET binning should be AFTER setgeometry!
|
||||
#: ccdfunc.c:721
|
||||
#: ccdfunc.c:727
|
||||
msgid "Can't get current binning"
|
||||
msgstr ""
|
||||
|
||||
#. Захват кадра %d\n
|
||||
#: ccdfunc.c:746
|
||||
#: ccdfunc.c:751
|
||||
#, c-format
|
||||
msgid "Capture frame %d"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:748 ccdfunc.c:823 server.c:150
|
||||
#: ccdfunc.c:753 ccdfunc.c:827 server.c:150
|
||||
msgid "Can't start exposition"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:753
|
||||
#: ccdfunc.c:758
|
||||
msgid "Can't capture image"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:756
|
||||
#: ccdfunc.c:761
|
||||
msgid "Read grabbed image"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:760 ccdfunc.c:836
|
||||
#: ccdfunc.c:765 ccdfunc.c:840
|
||||
msgid "Can't grab image"
|
||||
msgstr ""
|
||||
|
||||
#. %d секунд до окончания паузы\n
|
||||
#: ccdfunc.c:773 client.c:271
|
||||
#: ccdfunc.c:777 client.c:270
|
||||
#, c-format
|
||||
msgid "%d seconds till pause ends\n"
|
||||
msgstr ""
|
||||
|
||||
#: ccdfunc.c:834
|
||||
#: ccdfunc.c:838
|
||||
msgid "Some error when capture"
|
||||
msgstr ""
|
||||
|
||||
@ -563,7 +557,7 @@ msgstr ""
|
||||
msgid "Can't make exposition"
|
||||
msgstr ""
|
||||
|
||||
#: client.c:287
|
||||
#: client.c:286
|
||||
msgid "Server timeout"
|
||||
msgstr ""
|
||||
|
||||
|
||||
208
locale/ru/ru.po
208
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-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"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: ccdfunc.c:542
|
||||
#: ccdfunc.c:541
|
||||
#, c-format
|
||||
msgid "%.1f seconds till exposition ends"
|
||||
msgstr "%.1f ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÜËÓÐÏÚÉÃÉÉ"
|
||||
|
||||
#. %d Ñ<>екунд до окончаниÑ<C2B8> паузы\n
|
||||
#: ccdfunc.c:773 client.c:271
|
||||
#: ccdfunc.c:777 client.c:270
|
||||
#, c-format
|
||||
msgid "%d seconds till pause ends\n"
|
||||
msgstr "%d ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÐÁÕÚÙ\n"
|
||||
@ -39,7 +38,7 @@ msgstr "
|
||||
msgid "CMOS gain level"
|
||||
msgstr "ÕÒÏ×ÅÎØ Gain CMOS"
|
||||
|
||||
#: ccdfunc.c:557
|
||||
#: ccdfunc.c:556
|
||||
msgid "Camera device not pointed"
|
||||
msgstr "õÓÔÒÏÊÓÔ×Ï Ó×ÅÏÐÒÉÅÍÎÉËÁ ÎÅ ÐÏÄËÌÀÞÅÎÏ"
|
||||
|
||||
@ -47,53 +46,52 @@ msgstr "
|
||||
msgid "Camera device unknown"
|
||||
msgstr "õÓÔÒÏÊÓÔ×Ï Ó×ÅÏÐÒÉÅÍÎÉËÁ ÎÅ ÏÐÏÚÎÁÎÏ"
|
||||
|
||||
#: ccdfunc.c:624
|
||||
#: ccdfunc.c:631
|
||||
#, c-format
|
||||
msgid "Camera model: %s"
|
||||
msgstr "íÏÄÅÌØ Ó×ÅÔÏÐÒÉÅÍÎÉËÁ: %s"
|
||||
|
||||
#: ccdfunc.c:605
|
||||
#: ccdfunc.c:604
|
||||
msgid "Camera plugin have no custom commands"
|
||||
msgstr ""
|
||||
msgstr "У плагина камеры нет особых команд"
|
||||
|
||||
#: ccdfunc.c:753
|
||||
#: ccdfunc.c:758
|
||||
msgid "Can't capture image"
|
||||
msgstr "îÅ ÍÏÇÕ ÚÁÈ×ÁÔÉÔØ ÉÚÏÂÒÁÖÅÎÉÅ"
|
||||
|
||||
#: ccdfunc.c:712
|
||||
#: ccdfunc.c:717
|
||||
msgid "Can't change frame type"
|
||||
msgstr "îÅ ÍÏÇÕ ÉÚÍÅÎÉÔØ ÔÉÐ ËÁÄÒÁ"
|
||||
|
||||
#: ccdfunc.c:656
|
||||
#: ccdfunc.c:662
|
||||
msgid "Can't configure (unsupported?)"
|
||||
msgstr "îÅ ÍÏÇÕ ÓËÏÎÆÉÇÕÒÉÒÏ×ÁÔØ (ÏÐÃÉÑ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)"
|
||||
|
||||
#: ccdfunc.c:663
|
||||
#: ccdfunc.c:669
|
||||
msgid "Can't get IOport state (unsupported?)"
|
||||
msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÓÏÓÔÏÑÎÉÅ ÐÏÒÔÁ I/O (ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)"
|
||||
|
||||
#. GET binning should be AFTER setgeometry!
|
||||
#: ccdfunc.c:721
|
||||
#: ccdfunc.c:727
|
||||
msgid "Can't get current binning"
|
||||
msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÔÅËÕÝÅÅ ÚÎÁÞÅÎÉÅ ÂÉÎÎÉÎÇÁ"
|
||||
|
||||
#: ccdfunc.c:428
|
||||
#: ccdfunc.c:427
|
||||
msgid "Can't get current focuser position"
|
||||
msgstr "îÅ ÍÏÇÕ ÏÐÒÅÄÅÌÉÔØ ÔÅËÕÝÕÀ ÐÏÚÉÃÉÀ ÆÏËÕÓÅÒÁ"
|
||||
|
||||
#: ccdfunc.c:421
|
||||
#: ccdfunc.c:420
|
||||
msgid "Can't get focuser limit positions"
|
||||
msgstr "îÅ ÍÏÇÕ ÏÐÒÅÄÅÌÉÔØ ÐÒÅÄÅÌØÎÕÀ ÐÏÚÉÃÉÀ ÆÏËÕÓÅÒÁ"
|
||||
|
||||
#: ccdfunc.c:514
|
||||
#: ccdfunc.c:513
|
||||
msgid "Can't get max wheel position"
|
||||
msgstr "îÅ ÍÏÇÕ ÏÐÒÅÄÅÌÉÔØ ÐÒÅÄÅÌØÎÕÀ ÐÏÚÉÃÉÀ ËÏÌÅÓÁ"
|
||||
|
||||
#: ccdfunc.c:760 ccdfunc.c:836
|
||||
#: ccdfunc.c:765 ccdfunc.c:840
|
||||
msgid "Can't grab image"
|
||||
msgstr "îÅ ÍÏÇÕ ÚÁÈ×ÁÔÉÔØ ÉÚÏÂÒÁÖÅÎÉÅ"
|
||||
|
||||
#: ccdfunc.c:446
|
||||
#: ccdfunc.c:445
|
||||
msgid "Can't home focuser"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÆÏËÕÓÅÒ × ÎÕÌØ"
|
||||
|
||||
@ -109,152 +107,150 @@ msgstr "
|
||||
msgid "Can't open OpenGL window, image preview will be inaccessible"
|
||||
msgstr "îÅ ÍÏÇÕ ÏÔËÒÙÔØ ÏËÎÏ OpenGL, ÏÔÏÂÒÁÖÅÎÉÅ ÂÕÄÅÔ ÎÅÄÏÓÔÕÐÎÏ"
|
||||
|
||||
#: ccdfunc.c:650
|
||||
#: ccdfunc.c:657
|
||||
#, c-format
|
||||
msgid "Can't run shutter command %s (unsupported?)"
|
||||
msgstr "îÅ ÍÏÇÕ ×ÙÐÏÌÎÉÔØ ËÏÍÁÎÄÕ ÚÁÔ×ÏÒÁ %s (ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)"
|
||||
|
||||
#. Ð<>е могу Ñ<>охранить файл
|
||||
#: ccdfunc.c:221
|
||||
#: ccdfunc.c:220
|
||||
#, c-format
|
||||
msgid "Can't save file with prefix %s"
|
||||
msgstr "îÅ ÍÏÇÕ ÓÏÈÒÁÎÉÔØ ÆÁÊÌ Ó ÐÒÅÆÉËÓÏÍ %s"
|
||||
|
||||
#: ccdfunc.c:705
|
||||
#: ccdfunc.c:710
|
||||
#, c-format
|
||||
msgid "Can't set %d flushes"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ %d ÓÂÒÏÓÏ×"
|
||||
|
||||
#: ccdfunc.c:669
|
||||
#: ccdfunc.c:674
|
||||
msgid "Can't set IOport"
|
||||
msgstr "îÅ ÍÏÇÕ ÐÏÍÅÎÑÔØ ÚÎÁÞÅÎÉÑ ÐÏÒÔÁ I/O"
|
||||
|
||||
#: ccdfunc.c:640
|
||||
#: ccdfunc.c:647
|
||||
#, c-format
|
||||
msgid "Can't set T to %g degC"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÔÅÍÐÅÒÁÔÕÒÕ × %g ÇÒÁÄã"
|
||||
|
||||
#: ccdfunc.c:599
|
||||
#: ccdfunc.c:598
|
||||
msgid "Can't set active camera number"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÎÏÍÅÒ ÁËÔÉ×ÎÏÊ ËÁÍÅÒÙ"
|
||||
|
||||
#: ccdfunc.c:407
|
||||
#: ccdfunc.c:406
|
||||
msgid "Can't set active focuser number"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÎÏÍÅÒ ÁËÔÉ×ÎÏÇÏ ÆÏËÕÓÅÒÁ"
|
||||
|
||||
#: ccdfunc.c:498
|
||||
#: ccdfunc.c:497
|
||||
msgid "Can't set active wheel number"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÎÏÍÅÒ ÁËÔÉ×ÎÏÇÏ ËÏÌÅÓÁ"
|
||||
|
||||
#: ccdfunc.c:689 server.c:265
|
||||
#: ccdfunc.c:694 server.c:265
|
||||
#, c-format
|
||||
msgid "Can't set binning %dx%d"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÂÉÎÎÉÎÇ %dx%d"
|
||||
|
||||
#: ccdfunc.c:715
|
||||
#: ccdfunc.c:720
|
||||
msgid "Can't set bit depth"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÒÁÚÒÑÄÎÏÓÔØ áãð"
|
||||
|
||||
#: ccdfunc.c:683
|
||||
#: ccdfunc.c:688
|
||||
#, c-format
|
||||
msgid "Can't set brightness to %g"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÑÒËÏÓÔØ × %g"
|
||||
|
||||
#: ccdfunc.c:709
|
||||
#: ccdfunc.c:714
|
||||
#, c-format
|
||||
msgid "Can't set exposure time to %f seconds"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÜËÓÐÏÚÉÃÉÀ × %f ÓÅËÕÎÄ"
|
||||
|
||||
#: ccdfunc.c:618
|
||||
#: ccdfunc.c:625
|
||||
msgid "Can't set fan speed"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ×ÅÎÔÉÌÑÔÏÒÏ×"
|
||||
|
||||
#: ccdfunc.c:677
|
||||
#: ccdfunc.c:682
|
||||
#, c-format
|
||||
msgid "Can't set gain to %g"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ Gain × %g"
|
||||
|
||||
#: ccdfunc.c:701 server.c:266
|
||||
#: ccdfunc.c:706 server.c:266
|
||||
msgid "Can't set given geometry"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÇÅÏÍÅÔÒÉÀ"
|
||||
|
||||
#: ccdfunc.c:448
|
||||
#: ccdfunc.c:447
|
||||
#, c-format
|
||||
msgid "Can't set position %g"
|
||||
msgstr "îÅ ÍÏÇÕ ÉÚÍÅÎÉÔØ ÐÏÚÉÃÉÀ ÎÁ %g"
|
||||
|
||||
#: ccdfunc.c:442
|
||||
#: ccdfunc.c:441
|
||||
#, c-format
|
||||
msgid "Can't set position %g: out of limits [%g, %g]"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÐÏÚÉÃÉÀ %g: ×ÎÅ ÐÒÅÄÅÌÏ× [%g, %g]"
|
||||
|
||||
#: ccdfunc.c:717
|
||||
#: ccdfunc.c:722
|
||||
msgid "Can't set readout speed"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ÓÞÉÔÙ×ÁÎÉÑ"
|
||||
|
||||
#: ccdfunc.c:525
|
||||
#: ccdfunc.c:524
|
||||
#, c-format
|
||||
msgid "Can't set wheel position %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"
|
||||
msgstr "îÅ ÍÏÇÕ ÎÁÞÁÔØ ÜËÓÐÏÚÉÃÉÀ"
|
||||
|
||||
#. Захват кадра %d\n
|
||||
#: ccdfunc.c:746
|
||||
#: ccdfunc.c:751
|
||||
#, c-format
|
||||
msgid "Capture frame %d"
|
||||
msgstr "úÁÈ×ÁÔ ËÁÄÒÁ %d"
|
||||
|
||||
#: ccdfunc.c:637
|
||||
#: ccdfunc.c:644
|
||||
#, c-format
|
||||
msgid "Current format: %s"
|
||||
msgstr ""
|
||||
msgstr "Текущий формат: %s"
|
||||
|
||||
#: cmdlnopts.c:118
|
||||
msgid "Display image in OpenGL window"
|
||||
msgstr "ïÔÏÂÒÁÖÅÎÉÅ ÉÚÏÂÒÁÖÅÎÉÑ × ÏËÎÅ OpenGL"
|
||||
msgstr "отображение изображения в окне OpenGL"
|
||||
|
||||
#: imageview.c:746
|
||||
#, c-format
|
||||
msgid "Equalization of histogram: %s"
|
||||
msgstr "üË×ÁÌÉÚÁÃÉÑ ÇÉÓÔÏÇÒÁÍÍÙ: %s"
|
||||
|
||||
#: ccdfunc.c:278
|
||||
#: ccdfunc.c:277
|
||||
msgid "Error saving file"
|
||||
msgstr "ïÛÉÂËÁ ÓÏÈÒÁÎÅÎÉÑ ÆÁÊÌÁ"
|
||||
|
||||
#: ccdfunc.c:634
|
||||
#: ccdfunc.c:641
|
||||
#, c-format
|
||||
msgid "Field of view: %s"
|
||||
msgstr "ðÏÌÅ ÚÒÅÎÉÑ: %s"
|
||||
|
||||
#: ccdfunc.c:269
|
||||
#: ccdfunc.c:268
|
||||
#, c-format
|
||||
msgid "File saved as '%s'"
|
||||
msgstr "æÁÊÌ ÓÏÈÒÁÎÅÎ ËÁË '%s'"
|
||||
|
||||
#: ccdfunc.c:365
|
||||
#: ccdfunc.c:364
|
||||
msgid "Focuser device not pointed"
|
||||
msgstr "õÓÔÒÏÊÓÔ×Ï ÆÏËÕÓÅÒÁ ÎÅ ÕËÁÚÁÎÏ"
|
||||
|
||||
#: ccdfunc.c:595
|
||||
#: ccdfunc.c:594
|
||||
#, c-format
|
||||
msgid "Found %d cameras, you point number %d"
|
||||
msgstr "ïÂÎÁÒÕÖÅÎÏ %d ËÁÍÅÒ, ×Ù ÕËÁÚÁÌÉ %d"
|
||||
|
||||
#: ccdfunc.c:403
|
||||
#: ccdfunc.c:402
|
||||
#, c-format
|
||||
msgid "Found %d focusers, you point number %d"
|
||||
msgstr "ïÂÎÁÒÕÖÅÎÏ %d ÆÏËÕÓÅÒÏ×, ×Ù ÕËÁÚÁÌÉ %d"
|
||||
|
||||
#: ccdfunc.c:494
|
||||
#: ccdfunc.c:493
|
||||
#, c-format
|
||||
msgid "Found %d wheels, you point number %d"
|
||||
msgstr "ïÂÎÁÒÕÖÅÎÏ %d ËÏÌÅÓ, ×Ù ÕËÁÚÁÌÉ %d"
|
||||
|
||||
#: ccdfunc.c:631
|
||||
#: ccdfunc.c:638
|
||||
#, c-format
|
||||
msgid "Full array: %s"
|
||||
msgstr "ðÏÌÎÙÊ ÆÏÒÍÁÔ: %s"
|
||||
@ -265,11 +261,10 @@ msgid "Histogram conversion: %s"
|
||||
msgstr "ðÒÅÏÂÒÁÚÏ×ÁÎÉÅ ÇÉÓÔÏÇÒÁÍÍÙ: %s"
|
||||
|
||||
#: cmdlnopts.c:108
|
||||
#, fuzzy
|
||||
msgid "INET image socket port"
|
||||
msgstr "ÐÏÒÔ ÌÏËÁÌØÎÏÇÏ ÓÅÔÅ×ÏÇÏ ÓÏËÅÔÁ"
|
||||
msgstr "порт локального сетевого сокета передачи изображения"
|
||||
|
||||
#: ccdfunc.c:356
|
||||
#: ccdfunc.c:355
|
||||
#, c-format
|
||||
msgid "Image stat:\n"
|
||||
msgstr "óÔÁÔÉÓÔÉËÁ ÐÏ ÉÚÏÂÒÁÖÅÎÉÀ: \n"
|
||||
@ -282,80 +277,86 @@ msgstr "N
|
||||
msgid "No camera device"
|
||||
msgstr "îÅ ÕËÁÚÁÎÏ ÕÓÔÒÏÊÓÔ×Ï ËÁÍÅÒÙ"
|
||||
|
||||
#: ccdfunc.c:564 ccdfunc.c:565
|
||||
#: ccdfunc.c:563 ccdfunc.c:564
|
||||
msgid "No cameras found"
|
||||
msgstr "ëÁÍÅÒ ÎÅ ÏÂÎÁÒÕÖÅÎÏ"
|
||||
|
||||
#: ccdfunc.c:372
|
||||
#: ccdfunc.c:371
|
||||
msgid "No focusers found"
|
||||
msgstr "æÏËÕÓÅÒÏ× ÎÅ ÏÂÎÁÒÕÖÅÎÏ"
|
||||
|
||||
#: ccdfunc.c:463
|
||||
#: ccdfunc.c:462
|
||||
msgid "No wheels found"
|
||||
msgstr "ôÕÒÅÌÅÊ ÎÅ ÏÂÎÁÒÕÖÅÎÏ"
|
||||
|
||||
#: ccdfunc.c:719
|
||||
#: ccdfunc.c:724
|
||||
msgid "Only show statistics"
|
||||
msgstr "ôÏÌØËÏ ÏÔÏÂÒÁÚÉÔØ ÓÔÁÔÉÓÔÉËÕ"
|
||||
|
||||
#: ccdfunc.c:625
|
||||
#: ccdfunc.c:632
|
||||
#, c-format
|
||||
msgid "Pixel size: %g x %g"
|
||||
msgstr "òÁÚÍÅÒ ÐÉËÓÅÌÑ: %g x %g"
|
||||
|
||||
#: ccdfunc.c:756
|
||||
#: ccdfunc.c:761
|
||||
msgid "Read grabbed image"
|
||||
msgstr "óÞÉÔÙ×ÁÎÉÅ ÉÚÏÂÒÁÖÅÎÉÑ"
|
||||
|
||||
#: ccdfunc.c:718
|
||||
#: ccdfunc.c:723
|
||||
#, c-format
|
||||
msgid "Readout mode: %s"
|
||||
msgstr "òÅÖÉÍ ÓÞÉÔÙ×ÁÎÉÑ: %s"
|
||||
|
||||
#: client.c:287
|
||||
#: client.c:286
|
||||
msgid "Server timeout"
|
||||
msgstr "ôÁÊÍÁÕÔ ÓÅÒ×ÅÒÁ"
|
||||
|
||||
#: ccdfunc.c:682
|
||||
#: ccdfunc.c:687
|
||||
#, c-format
|
||||
msgid "Set brightness to %g"
|
||||
msgstr "õÓÔÁÎÏ×ÉÔØ ÑÒËÏÓÔØ × %g"
|
||||
|
||||
#: ccdfunc.c:619
|
||||
#: ccdfunc.c:626
|
||||
#, c-format
|
||||
msgid "Set fan speed to %d"
|
||||
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ×ÅÎÔÉÌÑÔÏÒÏ× × %d"
|
||||
|
||||
#: ccdfunc.c:676
|
||||
#: ccdfunc.c:681
|
||||
#, c-format
|
||||
msgid "Set gain to %g"
|
||||
msgstr "õÓÔÁÎÏ×ÉÔØ Gain × %g"
|
||||
|
||||
#: ccdfunc.c:648
|
||||
#: ccdfunc.c:655
|
||||
#, c-format
|
||||
msgid "Shutter command: %s\n"
|
||||
msgstr "ëÏÍÁÎÄÁ ÚÁÔ×ÏÒÁ: %s\n"
|
||||
|
||||
#: ccdfunc.c:834
|
||||
#: ccdfunc.c:838
|
||||
msgid "Some error when capture"
|
||||
msgstr ""
|
||||
msgstr "Ошибка при захвате"
|
||||
|
||||
#. "Попытка Ñ<>конфигурировать порт I/O как %d\n"
|
||||
#: ccdfunc.c:654
|
||||
#: ccdfunc.c:660
|
||||
#, c-format
|
||||
msgid "Try to configure I/O port as %d"
|
||||
msgstr "ðÏÐÙÔËÁ ÓËÏÎÆÉÇÕÒÉÒÏ×ÁÔØ ÐÏÒÔ I/O ËÁË %d"
|
||||
|
||||
#. "Попытка запиÑ<C2B8>и %d в порт I/O\n"
|
||||
#: ccdfunc.c:667
|
||||
#: ccdfunc.c:672
|
||||
#, c-format
|
||||
msgid "Try to write %d to I/O port"
|
||||
msgstr "ðÏÐÙÔËÁ ÚÁÐÉÓÉ %d × ÐÏÒÔ I/O"
|
||||
|
||||
#: cmdlnopts.c:106
|
||||
#, fuzzy
|
||||
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
|
||||
msgid "absolute (not divided by binning!) frame X0 coordinate (-1 - all "
|
||||
@ -391,16 +392,6 @@ msgstr "
|
||||
msgid "cancel current exposition"
|
||||
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
|
||||
msgid "close shutter"
|
||||
msgstr "ÚÁËÒÙÔØ ÚÁÔ×ÏÒ"
|
||||
@ -416,9 +407,8 @@ msgstr "
|
||||
"pin1 - ÍÌÁÄÛÉÊ ÂÉÔ, 1 - ×ÙÈÏÄ, 0 - ×ÈÏÄ)"
|
||||
|
||||
#: cmdlnopts.c:48
|
||||
#, fuzzy
|
||||
msgid "custom camera device plugin command"
|
||||
msgstr "ÐÌÁÇÉÎ ËÁÍÅÒÙ (ÎÁÐÒÉÍÅÒ, devfli.so)"
|
||||
msgstr "особые команды плагина камеры"
|
||||
|
||||
#: cmdlnopts.c:61
|
||||
msgid "fast readout mode"
|
||||
@ -437,8 +427,9 @@ msgid "focuser device plugin (e.g. devzwo.so)"
|
||||
msgstr "ÐÌÁÇÉÎ ÆÏËÕÓÅÒÁ (ÎÁÐÒÉÍÅÒ, devzwo.so)"
|
||||
|
||||
#: cmdlnopts.c:114
|
||||
msgid "force using image through socket transition even if can use SHM)"
|
||||
msgstr ""
|
||||
msgid "force using image through socket transition even if can use SHM"
|
||||
msgstr "принудительно брать изображения из сокета даже если возможно "
|
||||
"пользоваться разделяемой памятью"
|
||||
|
||||
#: cmdlnopts.c:91
|
||||
msgid "get value of I/O port pins"
|
||||
@ -457,7 +448,6 @@ msgid "list connected devices"
|
||||
msgstr "ÓÐÉÓÏË ÐÏÄËÌÀÞÅÎÎÙÈ ÕÓÔÒÏÊÓÔ×"
|
||||
|
||||
#: cmdlnopts.c:107
|
||||
#, fuzzy
|
||||
msgid "local INET command socket port"
|
||||
msgstr "ÐÏÒÔ ÌÏËÁÌØÎÏÇÏ ÓÅÔÅ×ÏÇÏ ÓÏËÅÔÁ"
|
||||
|
||||
@ -524,7 +514,7 @@ msgstr "
|
||||
|
||||
#: cmdlnopts.c:110
|
||||
msgid "passive viewer (only get last images)"
|
||||
msgstr ""
|
||||
msgstr "пассивный просмотр (только последние кадры)"
|
||||
|
||||
#: cmdlnopts.c:65
|
||||
msgid "program author"
|
||||
@ -544,11 +534,11 @@ msgstr "
|
||||
|
||||
#: cmdlnopts.c:90
|
||||
msgid "run exposition on HIGH @ pin5 I/O port"
|
||||
msgstr ""
|
||||
msgstr "запуск экспозиции по ВЫСОКОМУ сигналу на контакте 5 порта I/O"
|
||||
|
||||
#: cmdlnopts.c:89
|
||||
msgid "run exposition on LOW @ pin5 I/O port"
|
||||
msgstr ""
|
||||
msgstr "запуск экспозиции по НИЗКОМУ сигналу на контакте 5 порта I/O"
|
||||
|
||||
#: cmdlnopts.c:60
|
||||
msgid "run in 8-bit mode"
|
||||
@ -576,7 +566,7 @@ msgstr "
|
||||
|
||||
#: cmdlnopts.c:113
|
||||
msgid "shared memory (with image data) key (default: 7777777)"
|
||||
msgstr ""
|
||||
msgstr "ключ разделяемой памяти с данными изображения (по умолчанию: 7777777)"
|
||||
|
||||
#: cmdlnopts.c:56
|
||||
msgid "show this help"
|
||||
@ -584,7 +574,7 @@ msgstr "
|
||||
|
||||
#: cmdlnopts.c:115
|
||||
msgid "start (!=0) or stop(==0) infinity capturing loop"
|
||||
msgstr ""
|
||||
msgstr "начать (!=0) или закончить (==0) бесконечный цикл захвата изображений"
|
||||
|
||||
#: cmdlnopts.c:58
|
||||
msgid "verbose level (-V - messages, -VV - debug, -VVV - all shit)"
|
||||
@ -601,29 +591,3 @@ msgstr "
|
||||
#: cmdlnopts.c:51
|
||||
msgid "wheel device plugin (e.g. 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 "ÐÏÒÔ ÌÏËÁÌØÎÏÇÏ ÓÅÔÅ×ÏÇÏ ÓÏËÅÔÁ"
|
||||
|
||||
13
server.c
13
server.c
@ -958,11 +958,14 @@ static cc_hresult inftyhandler(int fd, _U_ const char *key, const char *val){
|
||||
// custom camera plugin command
|
||||
static cc_hresult pluginhandler(int fd, _U_ const char *key, const char *val){
|
||||
if(!camera->plugincmd) return RESULT_BADKEY;
|
||||
const char *r = camera->plugincmd(val);
|
||||
if(!r) return RESULT_FAIL;
|
||||
if(*r == 0) return RESULT_OK;
|
||||
if(!cc_sendstrmessage(fd, r)) return RESULT_DISCONNECTED;
|
||||
return RESULT_SILENCE;
|
||||
static cc_charbuff *ans = NULL;
|
||||
if(!ans) ans = cc_charbufnew();
|
||||
cc_buff_lock(ans);
|
||||
cc_charbufclr(ans);
|
||||
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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user