fixed some serious bugs

This commit is contained in:
Edward Emelianov 2024-02-15 17:00:01 +03:00
parent 0f4fcf5015
commit 24276ab9ce
13 changed files with 448 additions and 223 deletions

View File

@ -193,6 +193,12 @@ static int setbitdepth(int i){
return TRUE; return TRUE;
} }
static int getbitdepth(uint8_t *d){
if(!d) return TRUE;
*d = (is16bit) ? 16 : 12;
return TRUE;
}
static int setfastspeed(int fast){ static int setfastspeed(int fast){
DBG("set fast speed %d", fast); DBG("set fast speed %d", fast);
unsigned short spd = (fast) ? AdcSpeed_Fast : AdcSpeed_Normal; unsigned short spd = (fast) ? AdcSpeed_Fast : AdcSpeed_Normal;
@ -359,6 +365,7 @@ cc_Camera camera = {
.setfanspeed = setfanspd, .setfanspeed = setfanspd,
// getters: // getters:
.getbrightness = fpfalse, .getbrightness = fpfalse,
.getbitpix = getbitdepth,
.getModelName = modelname, .getModelName = modelname,
.getgain = fpfalse, .getgain = fpfalse,
.getmaxgain = fpfalse, .getmaxgain = fpfalse,

View File

@ -33,32 +33,128 @@ extern cc_Camera camera;
extern cc_Focuser focuser; extern cc_Focuser focuser;
extern cc_Wheel wheel; extern cc_Wheel wheel;
// array size
#define ARRAYH (1050)
#define ARRAYW (1050)
static const int filtermax = 5; static const int filtermax = 5;
static const float focmaxpos = 10.; static const float focmaxpos = 10.;
static int curhbin = 1, curvbin = 1;
static int filterpos = 0; static int filterpos = 0;
static float focuserpos = 1., brightness = 1., gain = 0.; static float focuserpos = 1., brightness = 1., gain = 0.;
static float camtemp = -30., exptime = 0.; static float camtemp = -30., exptime = 0.1;
static cc_capture_status capstat = CAPTURE_NO; static cc_capture_status capstat = CAPTURE_NO;
static double texpstart = 0.; static double texpstart = 0.;
static uint8_t bitpix = 16; // bit depth: 8 or 16 static uint8_t bitpix = 16; // bit depth: 8 or 16
typedef struct{ 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 int x0; int y0; // center of star field in array coordinates
double fwhm; // stars FWHM, arcsec double fwhm; // stars min FWHM, arcsec
double beta; // Moffat `beta` parameter
double theta; // start theta, arcsec
double scale; // CCD scale: arcsec/pix double scale; // CCD scale: arcsec/pix
double mag; // star magnitude: 0m is 16384 ADUs per second per arcsec^2 double mag; // star magnitude: 0m is 0xffff/0xff ADUs per second
double vX; // X axe drift speed (arcsec/s)
double vY; // Y -//-
double fluct; // stars position fluctuations (arcsec/sec)
} settings_t; } settings_t;
static settings_t settings = { static settings_t settings = {
.width = 500, .height = 500,
.x0 = 512, .y0 = 512, .x0 = 512, .y0 = 512,
.fwhm = 1.5, .scale = 0.03, .mag = 10. .fwhm = 1.5, .beta = 1., .scale = 0.03, .mag = 0.,
.fluct = 0.5
}; };
// min/max for parameters // 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 const double fwhmmin = 0.1, fwhmmax = 10., scalemin = 0.001, scalemax = 3600., magmin = -30., magmax = 30.;
static const double vmin = -20., vmax = 20., fluctmin = 0., fluctmax = 3., betamin = 0.5;
static double dX = 0., dY = 0.; // current "sky" coordinates (arcsec) relative to field center (according vdrift)
static int Xc = 0, Yc = 0; // current pixel coordinates of "sky" center (due to current image size, clip and scale) + fluctuations
static double Tstart = -1.; // global acquisition start
static double Xfluct = 0., Yfluct = 0.; // fluctuation additions in arcsec
static il_Image *star = NULL; // template of star 0m
static double FWHM0 = 0., scale0 = 0.; // template fwhm/scale
static int templ_wh = 0; // template width/height in pixels
/**
* @brief test_template - test star template and recalculate new if need
*/
static void test_template(){
if(star && FWHM0 == settings.fwhm && scale0 == settings.scale) return;
templ_wh = (1 + 6*settings.fwhm/settings.scale); // +1 for center
FWHM0 = settings.fwhm;
scale0 = settings.scale;
il_Image_free(&star);
star = il_Image_star(IMTYPE_D, templ_wh, templ_wh, settings.fwhm, settings.beta);
//il_Image_minmax(star);
//DBG("STAR: %dx%d, max=%g, min=%g, %d bytes per pix, type %d; templ_wh=%d", star->height, star->width, star->maxval, star->minval, star->pixbytes, star->type, templ_wh);
double sum = 0., *ptr = (double*)star->data;
int l = templ_wh * templ_wh;
for(int i = 0; i < l; ++i) sum += ptr[i];
//green("sum=%g\n", sum);
OMP_FOR()
for(int i = 0; i < l; ++i) ptr[i] /= sum;
}
/*
* About star[s] model
* Star magnitude 0m is approximately full signal level over square second.
* Star image generates in circle with raduis 3FWHM'' (3FWHM/scale pix), so amplitude
* of star (max value) will be calculated as
* 0xffff (0xff for 8bit image) / sum(I1(x,y)), where I1 is generated star image with amplitude 1.
* Flux for magnutude `mag`: Im = I0 * 10^(-0.4mag)
* 1. Generate `star` with ampl=1 in radius 3FWHM/scale pixels for image in `double`.
* 2. Calculate amplitude I = 1/sum(I1(x,y)).
* 3. Multiply all template values by I.
* 4. Fill every `star` from this template with factor 0xffff[0xff]*10^(-0.4mag).
* 5. Add background and noice.
*/
static void gen16(cc_IMG *ima){
static int n = 0;
register int w = ima->w;
int h = ima->h, tw2 = templ_wh/2, X0,Y0, X1,Y1, x0,y0;
if(Xc - tw2 < 0){
X0 = tw2 - Xc;
x0 = 0;
}else{
X0 = 0; x0 = Xc - tw2;
}
if(Yc - tw2 < 0){
Y0 = tw2 - Yc;
y0 = 0;
}else{
Y0 = 0; y0 = Yc - tw2;
}
if(Xc + tw2 > w-1){
X1 = templ_wh - Xc + tw2 - w - 1; // templ_wh - (Xc + tw2 - (w - 1))
}else X1 = templ_wh;
if(Yc + tw2 > h-1){
Y1 = templ_wh - Yc + tw2 - h - 1;
}else Y1 = templ_wh;
double mul = exptime * 0xffff * pow(10, -0.4*settings.mag); // multiplier due to "star" magnitude
// check if the 'star' out of frame
DBG("X0=%d, X1=%d, Y0=%d, Y1=%d, x0=%d, y0=%d, mul=%g", X0,X1,Y0,Y1,x0,y0, mul);
if(X0 < 0 || X0 > templ_wh - 1 || Y0 < 0 || Y0 > templ_wh - 1) return;
if(x0 < 0 || x0 > w-1 || y0 < 0 || y0 > h-1) return;
if(X1 < 0 || X1 > templ_wh || Y1 < 0 || Y1 > templ_wh) return;
if(X0 > X1 || Y0 > Y1) return;
OMP_FOR()
for(int y = Y0; y < Y1; ++y){
uint16_t *out = &((uint16_t*)ima->data)[(y+y0)*w + x0];
double *in = &((double*)star->data)[y*templ_wh + X0];
for(int x = X0; x < X1; ++x, ++in, ++out){
double val = *in * mul;
*out = (val > 0xffff) ? 0xffff : (uint16_t)val;
}
}
++n;
}
/*
static void gen8(cc_IMG *ima){
static int n = 0;
OMP_FOR()
;
++n;
}*/
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){
@ -80,46 +176,45 @@ static int campoll(cc_capture_status *st, float *remain){
static int startexp(){ static int startexp(){
if(capstat == CAPTURE_PROCESS) return FALSE; if(capstat == CAPTURE_PROCESS) return FALSE;
capstat = CAPTURE_PROCESS; capstat = CAPTURE_PROCESS;
texpstart = dtime(); double Tnow = dtime(), dT = Tnow - texpstart;
if(dT < 0.) dT = 0.;
else if(dT > 1.) dT = 1.; // dT for fluctuations amplitude
if(Tstart < 0.) Tstart = Tnow;
texpstart = Tnow;
// recalculate center of field coordinates at moment of exp start
dX += (dtime() - Tstart) * settings.vX;
dY += (dtime() - Tstart) * settings.vY;
Xc = dX/settings.scale + settings.x0 - camera.array.xoff;
Yc = dY/settings.scale + settings.y0 - camera.array.yoff;
DBG("dX=%g, dY=%g; Xc=%d, Yc=%d", dX, dY, Xc, Yc);
// add fluctuations
double fx = settings.fluct * dT * (2.*drand48() - 1.); // [-fluct*dT, +fluct*dT]
double fy = settings.fluct * dT * (2.*drand48() - 1.);
DBG("fx=%g, fy=%g, Xfluct=%g, Yfluct=%g", fx,fy,Xfluct,Yfluct);
if(Xfluct + fx < -settings.fluct || Xfluct + fx > settings.fluct) Xfluct -= fx;
else Xfluct += fx;
if(Yfluct + fy < -settings.fluct || Yfluct + fy > settings.fluct) Yfluct -= fy;
else Yfluct += fy;
DBG("Xfluct=%g, Yfluct=%g, pix: %g/%g\n\n", Xfluct, Yfluct, Xfluct/settings.scale, Yfluct/settings.scale);
Xc += Xfluct/settings.scale; Yc += Yfluct/settings.scale;
test_template();
return TRUE; 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){ static int camcapt(cc_IMG *ima){
DBG("Prepare, xc=%d, yc=%d, bitpix=%d", Xc, Yc, bitpix);
if(!ima || !ima->data) return FALSE; if(!ima || !ima->data) return FALSE;
#ifdef EBUG #ifdef EBUG
double t0 = dtime(); double t0 = dtime();
#endif #endif
ima->bitpix = bitpix; ima->bitpix = bitpix;
ima->w = camera.geometry.w;
ima->h = camera.geometry.h;
ima->bytelen = ima->w*ima->h*cc_getNbytes(ima);
bzero(ima->data, ima->h*ima->w*cc_getNbytes(ima)); bzero(ima->data, ima->h*ima->w*cc_getNbytes(ima));
if(bitpix == 16) gen16(ima); if(bitpix == 16) gen16(ima);
else gen8(ima); // else gen8(ima);
DBG("Time of capture: %g", dtime() - t0); DBG("Time of capture: %g", dtime() - t0);
return TRUE; return TRUE;
} }
@ -183,10 +278,9 @@ static int gett(float *t){
return TRUE; return TRUE;
} }
static int camsetbin(int h, int v){ // Binning not supported, change scale instead!
DBG("set bin %dx%d", h, v); static int camsetbin(int _U_ h, int _U_ v){
curhbin = h; curvbin = v; return FALSE;
return TRUE;
} }
static int camshutter(_U_ cc_shutter_op s){ static int camshutter(_U_ cc_shutter_op s){
@ -195,12 +289,15 @@ static int camshutter(_U_ cc_shutter_op s){
static int camsetgeom(cc_frameformat *f){ static int camsetgeom(cc_frameformat *f){
if(!f) return FALSE; if(!f) return FALSE;
if(f->xoff > ARRAYW-2 || f->yoff > ARRAYH-2) return FALSE;
if(f->xoff < 0 || f->yoff < 0 || f->h < 0 || f->w < 0) return FALSE;
if(f->h + f->yoff > ARRAYH || f->w + f->xoff > ARRAYW) return FALSE;
camera.geometry = *f; camera.geometry = *f;
return TRUE; return TRUE;
} }
static int camgetnam(char *n, int l){ static int camgetnam(char *n, int l){
strncpy(n, "Dummy camera", l); strncpy(n, "Star generator", l);
return TRUE; return TRUE;
} }
@ -216,8 +313,8 @@ static int camggl(cc_frameformat *max, cc_frameformat *step){
} }
static int camgetbin(int *binh, int *binv){ static int camgetbin(int *binh, int *binv){
if(binh) *binh = curhbin; if(binh) *binh = 1;
if(binv) *binv = curvbin; if(binv) *binv = 1;
return TRUE; return TRUE;
} }
@ -282,14 +379,16 @@ static int whlgetnam(char *n, int l){
// cmd, help, handler, ptr, min, max, type // cmd, help, handler, ptr, min, max, type
static cc_parhandler_t handlers[] = { 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}, {"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}, {"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}, {"fwhm", "stars min FWHM, arcsec", NULL, (void*)&settings.fwhm, (void*)&fwhmmin, (void*)&fwhmmax, CC_PAR_DOUBLE},
{"scale", "CCD scale: arcsec/pix", NULL, (void*)&settings.scale, (void*)&scalemin, (void*)&scalemax, CC_PAR_DOUBLE}, {"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}, {"mag", "star magnitude: 0m is 0xffff/0xff (16/8 bit) ADUs per second", NULL, (void*)&settings.mag, (void*)&magmin, (void*)&magmax, CC_PAR_DOUBLE},
//{"", "", NULL, (void*)&, (void*)&, (void*)&settings., CC_PAR_DOUBLE}, {"vx", "X axe drift speed (arcsec/s)", NULL, (void*)&settings.vX, (void*)&vmin, (void*)&vmax, CC_PAR_DOUBLE},
{"vy", "Y axe drift speed (arcsec/s)", NULL, (void*)&settings.vY, (void*)&vmin, (void*)&vmax, CC_PAR_DOUBLE},
{"fluct", "stars position fluctuations (arcsec per sec)", NULL, (void*)&settings.fluct, (void*)&fluctmin, (void*)&fluctmax, CC_PAR_DOUBLE},
{"beta", "Moffat `beta` parameter", NULL, (void*)&settings.beta, (void*)&betamin, NULL, CC_PAR_DOUBLE},
//{"", "", NULL, (void*)&settings., (void*)&, (void*)&, CC_PAR_DOUBLE},
CC_PARHANDLER_END CC_PARHANDLER_END
}; };
@ -350,8 +449,8 @@ __attribute__ ((visibility("default"))) cc_Camera camera = {
.pixX = 10., .pixX = 10.,
.pixY = 10., .pixY = 10.,
.field = (cc_frameformat){.h = 1024, .w = 1024, .xoff = 10, .yoff = 10}, .field = (cc_frameformat){.h = 1024, .w = 1024, .xoff = 10, .yoff = 10},
.array = (cc_frameformat){.h = 1050, .w = 1050, .xoff = 0, .yoff = 0}, .array = (cc_frameformat){.h = ARRAYH, .w = ARRAYW, .xoff = 0, .yoff = 0},
.geometry = {0}, .geometry = {.xoff = 10, .yoff = 10, .h = 1024, .w = 1024},
}; };
__attribute__ ((visibility("default"))) cc_Focuser focuser = { __attribute__ ((visibility("default"))) cc_Focuser focuser = {

View File

@ -29,7 +29,7 @@
extern cc_Camera camera; extern cc_Camera camera;
static PYLON_DEVICE_HANDLE hDev; static PYLON_DEVICE_HANDLE hDev;
static int isopened = FALSE, is16bit = FALSE; static int isopened = FALSE, bitdepth = 16;
static char camname[BUFSIZ] = {0}; static char camname[BUFSIZ] = {0};
static size_t payloadsize = 0; // size of imgBuf static size_t payloadsize = 0; // size of imgBuf
static unsigned char *imgBuf = NULL; static unsigned char *imgBuf = NULL;
@ -296,11 +296,12 @@ static int setdevno(int N){
static int setbitdepth(int depth){ static int setbitdepth(int depth){
#define MONON 4 #define MONON 4
const char *fmts[MONON] = {"Mono16", "Mono14", "Mono12", "Mono10"}; const char *fmts[MONON] = {"Mono16", "Mono14", "Mono12", "Mono10"};
const int depths[MONON] = {16, 14, 12, 10};
if(depth == 0){ // 8 bit if(depth == 0){ // 8 bit
if(!PylonDeviceFeatureIsAvailable( hDev, "EnumEntry_PixelFormat_Mono8" )) return FALSE; if(!PylonDeviceFeatureIsAvailable( hDev, "EnumEntry_PixelFormat_Mono8" )) return FALSE;
PYLONFN(PylonDeviceFeatureFromString, hDev, "PixelFormat", "Mono8"); PYLONFN(PylonDeviceFeatureFromString, hDev, "PixelFormat", "Mono8");
green("Pixel format: Mono8\n"); green("Pixel format: Mono8\n");
is16bit = FALSE; bitdepth = 8;
DBG("8 bit"); DBG("8 bit");
}else{ // 16 bit }else{ // 16 bit
char buf[128]; char buf[128];
@ -310,12 +311,12 @@ static int setbitdepth(int depth){
if(!PylonDeviceFeatureIsAvailable( hDev, buf)) continue; if(!PylonDeviceFeatureIsAvailable( hDev, buf)) continue;
green("Pixel format: %s\n", fmts[i]); green("Pixel format: %s\n", fmts[i]);
PYLONFN(PylonDeviceFeatureFromString, hDev, "PixelFormat", fmts[i]); PYLONFN(PylonDeviceFeatureFromString, hDev, "PixelFormat", fmts[i]);
bitdepth = depths[i];
break; break;
} }
if(i == MONON) return FALSE; if(i == MONON) return FALSE;
#undef MONON #undef MONON
is16bit = TRUE; DBG("other bits");
DBG("16 bit");
} }
PYLON_STREAMGRABBER_HANDLE hGrabber; PYLON_STREAMGRABBER_HANDLE hGrabber;
PYLONFN(PylonDeviceGetStreamGrabber, hDev, 0, &hGrabber); PYLONFN(PylonDeviceGetStreamGrabber, hDev, 0, &hGrabber);
@ -328,6 +329,12 @@ static int setbitdepth(int depth){
return TRUE; return TRUE;
} }
static int getbitdepth(uint8_t *d){
if(!d) return TRUE;
*d = bitdepth;
return TRUE;
}
// stub function: the capture process is blocking // stub function: the capture process is blocking
static int pollcapt(cc_capture_status *st, float *remain){ static int pollcapt(cc_capture_status *st, float *remain){
if(st) *st = CAPTURE_READY; if(st) *st = CAPTURE_READY;
@ -369,7 +376,7 @@ static int capture(cc_IMG *ima){
} }
int width = grabResult.SizeX, height = grabResult.SizeY, stride = grabResult.SizeX + grabResult.PaddingX; int width = grabResult.SizeX, height = grabResult.SizeY, stride = grabResult.SizeX + grabResult.PaddingX;
//TIMESTAMP("start converting"); //TIMESTAMP("start converting");
if(is16bit){ if(bitdepth > 8){
int s2 = stride<<1; int s2 = stride<<1;
OMP_FOR() OMP_FOR()
for(int y = 0; y < height; ++y){ for(int y = 0; y < height; ++y){
@ -388,7 +395,7 @@ static int capture(cc_IMG *ima){
} }
} }
//TIMESTAMP("image ready"); //TIMESTAMP("image ready");
ima->bitpix = (is16bit) ? 16 : 8; ima->bitpix = bitdepth;
return TRUE; return TRUE;
} }
@ -526,6 +533,7 @@ cc_Camera camera = {
.setfanspeed = setfanspd, .setfanspeed = setfanspd,
// getters: // getters:
.getbrightness = fpfalse, .getbrightness = fpfalse,
.getbitpix = getbitdepth,
.getModelName = modelname, .getModelName = modelname,
.getgain = getgain, .getgain = getgain,
.getmaxgain = gainmax, .getmaxgain = gainmax,

View File

@ -29,11 +29,6 @@ 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")
# change wrong behaviour with install prefix
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND CMAKE_INSTALL_PREFIX MATCHES "/usr/local")
message("Change default install path to /usr")
set(CMAKE_INSTALL_PREFIX "/usr")
endif()
message("Install dir prefix: ${CMAKE_INSTALL_PREFIX}") message("Install dir prefix: ${CMAKE_INSTALL_PREFIX}")
if(NOT DEFINED LOCALEDIR) if(NOT DEFINED LOCALEDIR)
if(DEBUG) if(DEBUG)
@ -87,6 +82,7 @@ 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 # Dummy and artifical star plugins
if(DUMMY) if(DUMMY)
add_subdirectory(Dummy_cameras) add_subdirectory(Dummy_cameras)

View File

@ -1,6 +1,7 @@
cmake_minimum_required(VERSION 3.20) cmake_minimum_required(VERSION 3.20)
set(CCDLIB devfli) set(CCDLIB devfli)
SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
find_package(PkgConfig REQUIRED) find_package(PkgConfig REQUIRED)
pkg_check_modules(${CCDLIB} REQUIRED fli>=1.71 usefull_macros) pkg_check_modules(${CCDLIB} REQUIRED fli>=1.71 usefull_macros)

View File

@ -58,7 +58,7 @@ else (CFITSIO_INCLUDE_DIR AND CFITSIO_LIBRARIES)
endif (NOT CFITSIO_FIND_QUIETLY) endif (NOT CFITSIO_FIND_QUIETLY)
else (CFITSIO_FOUND) else (CFITSIO_FOUND)
if (CFITSIO_FIND_REQUIRED) if (CFITSIO_FIND_REQUIRED)
message(STATUS "CFITSIO not found.") message(FATAL_ERROR "CFITSIO not found.")
endif (CFITSIO_FIND_REQUIRED) endif (CFITSIO_FIND_REQUIRED)
endif (CFITSIO_FOUND) endif (CFITSIO_FOUND)

View File

@ -1,6 +1,7 @@
cmake_minimum_required(VERSION 3.20) cmake_minimum_required(VERSION 3.20)
set(CCDLIB devhikrobot) set(CCDLIB devhikrobot)
SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
find_package(PkgConfig REQUIRED) find_package(PkgConfig REQUIRED)
pkg_check_modules(${CCDLIB} REQUIRED mvs>=2.1 usefull_macros) pkg_check_modules(${CCDLIB} REQUIRED mvs>=2.1 usefull_macros)

View File

@ -1,6 +1,7 @@
cmake_minimum_required(VERSION 3.20) cmake_minimum_required(VERSION 3.20)
set(CCDLIB devzwo) set(CCDLIB devzwo)
SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
find_package(PkgConfig REQUIRED) find_package(PkgConfig REQUIRED)
pkg_check_modules(${CCDLIB} REQUIRED usefull_macros) pkg_check_modules(${CCDLIB} REQUIRED usefull_macros)

View File

@ -101,8 +101,8 @@ typedef enum{
RESULT_NUM RESULT_NUM
} cc_hresult; } 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 // each camera plugin must have functions check, startexposition, setexp, pollcapture and capture
typedef struct{ typedef struct{
int (*check)(); // check if the device is available, connect and init int (*check)(); // check if the device is available, connect and init
int Ndevices; // amount of devices found int Ndevices; // amount of devices found
@ -123,7 +123,7 @@ typedef struct{
int (*confio)(int s); // configure IO-port int (*confio)(int s); // configure IO-port
int (*setio)(int s); // set IO-port to given state int (*setio)(int s); // set IO-port to given state
int (*setframetype)(int l); // set frametype: 1 - light, 0 - dark int (*setframetype)(int l); // set frametype: 1 - light, 0 - dark
int (*setbitdepth)(int h); // set bit depth : 1 - high (16 bit), 0 - low (8 bit) int (*setbitdepth)(int h); // set bit depth : 1 - high (16 bit), 0 - low (8 or other bit)
int (*setfastspeed)(int s); // set readout speed: 1 - fast, 0 - low int (*setfastspeed)(int s); // set readout speed: 1 - fast, 0 - low
// geometry (if TRUE, all args are changed to suitable values) // geometry (if TRUE, all args are changed to suitable values)
int (*setgeometry)(cc_frameformat *fmt); // set geometry in UNBINNED coordinates int (*setgeometry)(cc_frameformat *fmt); // set geometry in UNBINNED coordinates

View File

@ -535,12 +535,16 @@ static void closeall(){
static cc_capture_status capt(){ static cc_capture_status capt(){
cc_capture_status cs; cc_capture_status cs;
float tremain, tmpf; float tremain, tmpf;
if(!camera->pollcapture){
WARNX(_("Camera plugin have no capture polling funtion."));
return CAPTURE_ABORTED;
}
while(camera->pollcapture(&cs, &tremain)){ while(camera->pollcapture(&cs, &tremain)){
if(cs != CAPTURE_PROCESS) break; if(cs != CAPTURE_PROCESS) break;
if(tremain > 0.1){ if(tremain > 0.1){
verbose(2, _("%.1f seconds till exposition ends"), tremain); verbose(2, _("%.1f seconds till exposition ends"), tremain);
if(camera->getTcold(&tmpf)) verbose(1, "CCDTEMP=%.1f", tmpf); if(camera->getTcold && camera->getTcold(&tmpf)) verbose(1, "CCDTEMP=%.1f", tmpf);
if(camera->getTbody(&tmpf)) verbose(1, "BODYTEMP=%.1f", tmpf); if(camera->getTbody && camera->getTbody(&tmpf)) verbose(1, "BODYTEMP=%.1f", tmpf);
} }
if(tremain > 6.) sleep(5); if(tremain > 6.) sleep(5);
else if(tremain > 0.9) sleep((int)(tremain+0.99)); else if(tremain > 0.9) sleep((int)(tremain+0.99));
@ -570,7 +574,7 @@ cc_Camera *startCCD(){
void closecam(){ void closecam(){
if(!camera) return; if(!camera) return;
DBG("Close cam"); DBG("Close cam");
camera->close(); if(camera->close) camera->close();
camera = NULL; camera = NULL;
} }
@ -581,8 +585,9 @@ int prepare_ccds(){
void *dlh = NULL; void *dlh = NULL;
if(!startCCD(&dlh)) return FALSE; if(!startCCD(&dlh)) return FALSE;
if(GP->listdevices){ if(GP->listdevices){
for(int i = 0; i < camera->Ndevices; ++i){ if(!camera->getModelName) WARNX(_("Camera plugin have no model name getter"));
if(!camera->setDevNo(i)) continue; else for(int i = 0; i < camera->Ndevices; ++i){
if(camera->setDevNo && !camera->setDevNo(i)) continue;
char modname[256]; char modname[256];
camera->getModelName(modname, 255); camera->getModelName(modname, 255);
printf("Found camera #%d: %s\n", i, modname); printf("Found camera #%d: %s\n", i, modname);
@ -594,7 +599,7 @@ int prepare_ccds(){
WARNX(_("Found %d cameras, you point number %d"), camera->Ndevices, num); WARNX(_("Found %d cameras, you point number %d"), camera->Ndevices, num);
goto retn; goto retn;
} }
if(!camera->setDevNo(num)){ if(camera->setDevNo && !camera->setDevNo(num)){
WARNX(_("Can't set active camera number")); WARNX(_("Can't set active camera number"));
goto retn; goto retn;
} }
@ -621,13 +626,16 @@ int prepare_ccds(){
} }
if(GP->fanspeed > -1){ if(GP->fanspeed > -1){
if(GP->fanspeed > FAN_HIGH) GP->fanspeed = FAN_HIGH; if(GP->fanspeed > FAN_HIGH) GP->fanspeed = FAN_HIGH;
if(!camera->setfanspeed((cc_fan_speed)GP->fanspeed)) if(!camera->setfanspeed) WARNX(_("Camera plugin have no fun speed setter"));
WARNX(_("Can't set fan speed")); else{
else verbose(0, _("Set fan speed to %d"), GP->fanspeed); if(!camera->setfanspeed((cc_fan_speed)GP->fanspeed))
WARNX(_("Can't set fan speed"));
else verbose(0, _("Set fan speed to %d"), GP->fanspeed);
}
} }
int x0,x1, y0,y1; int x0,x1, y0,y1;
char buf[BUFSIZ]; char buf[BUFSIZ];
if(camera->getModelName(buf, BUFSIZ)) if(camera->getModelName && camera->getModelName(buf, BUFSIZ))
verbose(2, _("Camera model: %s"), buf); verbose(2, _("Camera model: %s"), buf);
verbose(2, _("Pixel size: %g x %g"), camera->pixX, camera->pixY); verbose(2, _("Pixel size: %g x %g"), camera->pixX, camera->pixY);
x0 = camera->array.xoff; x0 = camera->array.xoff;
@ -643,56 +651,57 @@ int prepare_ccds(){
camera->geometry.xoff + camera->geometry.w, camera->geometry.yoff + camera->geometry.h); camera->geometry.xoff + camera->geometry.w, camera->geometry.yoff + camera->geometry.h);
verbose(2, _("Current format: %s"), buf); verbose(2, _("Current format: %s"), buf);
if(!isnan(GP->temperature)){ if(!isnan(GP->temperature)){
if(!camera->setT((float)GP->temperature)) if(!camera->setT)WARNX(_("Camera plugin have no temperature setter"));
WARNX(_("Can't set T to %g degC"), GP->temperature); else{if(!camera->setT((float)GP->temperature)) WARNX(_("Can't set T to %g degC"), GP->temperature);
verbose(3, "SetT=%.1f", GP->temperature); else verbose(3, "SetT=%.1f", GP->temperature);
}
} }
float tmpf; float tmpf;
if(camera->getTcold(&tmpf)) verbose(1, "CCDTEMP=%.1f", tmpf); if(camera->getTcold && camera->getTcold(&tmpf)) verbose(1, "CCDTEMP=%.1f", tmpf);
if(camera->getTbody(&tmpf)) verbose(1, "BODYTEMP=%.1f", tmpf); if(camera->getTbody && camera->getTbody(&tmpf)) verbose(1, "BODYTEMP=%.1f", tmpf);
if(GP->shtr_cmd > -1 && GP->shtr_cmd < SHUTTER_AMOUNT){ if(GP->shtr_cmd > -1 && GP->shtr_cmd < SHUTTER_AMOUNT){
const char *str[] = {"open", "close", "expose @high", "expose @low"}; const char *str[] = {"open", "close", "expose @high", "expose @low"};
verbose(1, _("Shutter command: %s\n"), str[GP->shtr_cmd]); verbose(1, _("Shutter command: %s\n"), str[GP->shtr_cmd]);
if(!camera->shuttercmd((cc_shutter_op)GP->shtr_cmd)) if(!camera->shuttercmd || !camera->shuttercmd((cc_shutter_op)GP->shtr_cmd))
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){
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 || !camera->confio(GP->confio))
WARNX(_("Can't configure (unsupported?)")); WARNX(_("Can't configure (unsupported?)"));
} }
int tmpi; int tmpi;
if(GP->getio){ if(GP->getio){
if(camera->getio(&tmpi)) if(camera->getio && camera->getio(&tmpi))
verbose(0, "CCDIOPORT=0x%02X\n", tmpi); verbose(0, "CCDIOPORT=0x%02X\n", tmpi);
else else
WARNX(_("Can't get IOport state (unsupported?)")); WARNX(_("Can't get IOport state (unsupported?)"));
} }
if(GP->setio > -1){ if(GP->setio > -1){
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 || !camera->setio(GP->setio))
WARNX(_("Can't set IOport")); WARNX(_("Can't set IOport"));
} }
if(GP->exptime < 0.) goto retn; if(GP->exptime < 0.) goto retn;
if(!isnan(GP->gain)){ if(!isnan(GP->gain)){
DBG("Change gain to %g", GP->gain); DBG("Change gain to %g", GP->gain);
if(camera->setgain(GP->gain)){ if(camera->setgain && camera->setgain(GP->gain)){
camera->getgain(&GP->gain); if(camera->getgain) camera->getgain(&GP->gain);
verbose(1, _("Set gain to %g"), GP->gain); verbose(1, _("Set gain to %g"), GP->gain);
}else WARNX(_("Can't set gain to %g"), GP->gain); }else WARNX(_("Can't set gain to %g"), GP->gain);
} }
if(!isnan(GP->brightness)){ if(!isnan(GP->brightness)){
if(camera->setbrightness(GP->brightness)){ if(camera->setbrightness && camera->setbrightness(GP->brightness)){
camera->getbrightness(&GP->brightness); if(camera->getbrightness) camera->getbrightness(&GP->brightness);
verbose(1, _("Set brightness to %g"), GP->brightness); verbose(1, _("Set brightness to %g"), GP->brightness);
}else WARNX(_("Can't set brightness to %g"), GP->brightness); }else WARNX(_("Can't set brightness to %g"), GP->brightness);
} }
/*********************** expose control ***********************/ /*********************** expose control ***********************/
if(GP->hbin < 1) GP->hbin = 1; if(GP->hbin < 1) GP->hbin = 1;
if(GP->vbin < 1) GP->vbin = 1; if(GP->vbin < 1) GP->vbin = 1;
if(!camera->setbin(GP->hbin, GP->vbin)){ if(!camera->setbin || !camera->setbin(GP->hbin, GP->vbin)){
WARNX(_("Can't set binning %dx%d"), GP->hbin, GP->vbin); WARNX(_("Can't set binning %dx%d"), GP->hbin, GP->vbin);
camera->getbin(&GP->hbin, &GP->vbin); if(camera->getbin) camera->getbin(&GP->hbin, &GP->vbin);
} }
if(GP->X0 < 0) GP->X0 = x0; // default values if(GP->X0 < 0) GP->X0 = x0; // default values
else if(GP->X0 > x1-1) GP->X0 = x1-1; else if(GP->X0 > x1-1) GP->X0 = x1-1;
@ -702,28 +711,29 @@ int prepare_ccds(){
if(GP->Y1 < GP->Y0+1 || GP->Y1 > y1) GP->Y1 = y1; if(GP->Y1 < GP->Y0+1 || GP->Y1 > y1) GP->Y1 = y1;
DBG("x1/x0: %d/%d", GP->X1, GP->X0); DBG("x1/x0: %d/%d", GP->X1, GP->X0);
cc_frameformat fmt = {.w = GP->X1 - GP->X0, .h = GP->Y1 - GP->Y0, .xoff = GP->X0, .yoff = GP->Y0}; cc_frameformat fmt = {.w = GP->X1 - GP->X0, .h = GP->Y1 - GP->Y0, .xoff = GP->X0, .yoff = GP->Y0};
if(!camera->setgeometry(&fmt)) if(!camera->setgeometry || !camera->setgeometry(&fmt))
WARNX(_("Can't set given geometry")); WARNX(_("Can't set given geometry"));
verbose(3, "Geometry: off=%d/%d, wh=%d/%d", fmt.xoff, fmt.yoff, fmt.w, fmt.h); verbose(3, "Geometry: off=%d/%d, wh=%d/%d", fmt.xoff, fmt.yoff, fmt.w, fmt.h);
if(GP->nflushes > 0){ if(GP->nflushes > 0){
if(!camera->setnflushes(GP->nflushes)) if(!camera->setnflushes || !camera->setnflushes(GP->nflushes))
WARNX(_("Can't set %d flushes"), GP->nflushes); WARNX(_("Can't set %d flushes"), GP->nflushes);
else verbose(3, "Nflushes=%d", GP->nflushes); else verbose(3, "Nflushes=%d", GP->nflushes);
} }
if(!camera->setexp) ERRX(_("Camera plugin have no exposition setter"));
if(!camera->setexp(GP->exptime)) if(!camera->setexp(GP->exptime))
WARNX(_("Can't set exposure time to %f seconds"), GP->exptime); WARNX(_("Can't set exposure time to %f seconds"), GP->exptime);
tmpi = (GP->dark) ? 0 : 1; tmpi = (GP->dark) ? 0 : 1;
if(!camera->setframetype(tmpi)) if(!camera->setframetype || !camera->setframetype(tmpi))
WARNX(_("Can't change frame type")); WARNX(_("Can't change frame type"));
tmpi = (GP->_8bit) ? 0 : 1; tmpi = (GP->_8bit) ? 0 : 1;
if(!camera->setbitdepth(tmpi)) if(!camera->setbitdepth || !camera->setbitdepth(tmpi))
WARNX(_("Can't set bit depth")); WARNX(_("Can't set bit depth"));
if(!camera->setfastspeed(GP->fast)) if(!camera->setfastspeed || !camera->setfastspeed(GP->fast))
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"));
// GET binning should be AFTER setgeometry! // GET binning should be AFTER setgeometry!
if(!camera->getbin(&GP->hbin, &GP->vbin)) if(!camera->getbin || !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;
@ -749,6 +759,7 @@ DBG("w=%d, h=%d", raw_width, raw_height);
TIMESTAMP("Start next cycle"); TIMESTAMP("Start next cycle");
TIMEINIT(); TIMEINIT();
verbose(1, _("Capture frame %d"), j); verbose(1, _("Capture frame %d"), j);
if(!camera->startexposition) ERRX(_("Camera plugin have no function `start exposition`"));
if(!camera->startexposition()){ if(!camera->startexposition()){
WARNX(_("Can't start exposition")); WARNX(_("Can't start exposition"));
break; break;
@ -760,7 +771,7 @@ DBG("w=%d, h=%d", raw_width, raw_height);
} }
verbose(2, _("Read grabbed image")); verbose(2, _("Read grabbed image"));
TIMESTAMP("Read grabbed"); TIMESTAMP("Read grabbed");
//if(!camera) return; if(!camera->capture) ERRX(_("Camera plugin have no function `capture`"));
if(!camera->capture(&ima)){ if(!camera->capture(&ima)){
WARNX(_("Can't grab image")); WARNX(_("Can't grab image"));
break; break;
@ -776,8 +787,8 @@ DBG("w=%d, h=%d", raw_width, raw_height);
while((delta = time1 - dtime()) > 0.){ while((delta = time1 - dtime()) > 0.){
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 && camera->getTcold(&tmpf)) verbose(1, "CCDTEMP=%.1f\n", tmpf);
if(camera->getTbody(&tmpf)) verbose(1, "BODYTEMP=%.1f\n", tmpf); if(camera->getTbody && camera->getTbody(&tmpf)) verbose(1, "BODYTEMP=%.1f\n", tmpf);
if(delta > 6.) sleep(5); if(delta > 6.) sleep(5);
else if(delta > 0.9) sleep((int)(delta+0.99)); else if(delta > 0.9) sleep((int)(delta+0.99));
else usleep((int)(delta*1e6 + 1)); else usleep((int)(delta*1e6 + 1));
@ -792,8 +803,8 @@ DBG("w=%d, h=%d", raw_width, raw_height);
// cancel expositions and close camera devise // cancel expositions and close camera devise
void camstop(){ void camstop(){
if(camera){ if(camera){
camera->cancel(); if(camera->cancel) camera->cancel();
camera->close(); if(camera->close) camera->close();
} }
} }
@ -823,6 +834,7 @@ static void *grabnext(void *arg){
TIMESTAMP("Start next exp"); TIMESTAMP("Start next exp");
TIMEINIT(); TIMEINIT();
if(!ima || !camera) return NULL; if(!ima || !camera) return NULL;
if(!camera->startexposition) ERRX(_("Camera plugin have no function `start exposition`"));
if(!camera->startexposition()){ if(!camera->startexposition()){
WARNX(_("Can't start exposition")); WARNX(_("Can't start exposition"));
usleep(10000); usleep(10000);
@ -830,13 +842,14 @@ static void *grabnext(void *arg){
} }
cc_capture_status cs = CAPTURE_ABORTED; cc_capture_status cs = CAPTURE_ABORTED;
TIMESTAMP("Poll"); TIMESTAMP("Poll");
while(camera->pollcapture(&cs, NULL)){ while(camera->pollcapture && camera->pollcapture(&cs, NULL)){
if(cs != CAPTURE_PROCESS) break; if(cs != CAPTURE_PROCESS) break;
usleep(10000); usleep(10000);
if(!camera) return NULL; if(!camera) return NULL;
} }
if(cs != CAPTURE_READY){ WARNX(_("Some error when capture")); return NULL;} if(cs != CAPTURE_READY){ WARNX(_("Some error when capture")); return NULL;}
TIMESTAMP("get"); TIMESTAMP("get");
if(!camera->capture) ERRX(_("Camera plugin have no function `capture`"));
if(!camera->capture(ima)){ WARNX(_("Can't grab image")); continue; } if(!camera->capture(ima)){ WARNX(_("Can't grab image")); continue; }
++ima->imnumber; ++ima->imnumber;
//calculate_stat(ima); //calculate_stat(ima);

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-07 17:00+0300\n" "POT-Creation-Date: 2024-02-15 16:32+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"
@ -358,198 +358,226 @@ msgstr ""
msgid "Can't set wheel position %d" msgid "Can't set wheel position %d"
msgstr "" msgstr ""
#: ccdfunc.c:541 #: ccdfunc.c:539
msgid "Camera plugin have no capture polling funtion."
msgstr ""
#: ccdfunc.c:545
#, c-format #, c-format
msgid "%.1f seconds till exposition ends" msgid "%.1f seconds till exposition ends"
msgstr "" msgstr ""
#: ccdfunc.c:556 #: ccdfunc.c:560
msgid "Camera device not pointed" msgid "Camera device not pointed"
msgstr "" msgstr ""
#: ccdfunc.c:563 ccdfunc.c:564 #: ccdfunc.c:567 ccdfunc.c:568
msgid "No cameras found" msgid "No cameras found"
msgstr "" msgstr ""
#: ccdfunc.c:594 #: ccdfunc.c:588
msgid "Camera plugin have no model name getter"
msgstr ""
#: ccdfunc.c:599
#, c-format #, c-format
msgid "Found %d cameras, you point number %d" msgid "Found %d cameras, you point number %d"
msgstr "" msgstr ""
#: ccdfunc.c:598 #: ccdfunc.c:603
msgid "Can't set active camera number" msgid "Can't set active camera number"
msgstr "" msgstr ""
#: ccdfunc.c:604 #: ccdfunc.c:609
msgid "Camera plugin have no custom commands" msgid "Camera plugin have no custom commands"
msgstr "" msgstr ""
#: ccdfunc.c:625 #: ccdfunc.c:629
msgid "Camera plugin have no fun speed setter"
msgstr ""
#: ccdfunc.c:632
msgid "Can't set fan speed" msgid "Can't set fan speed"
msgstr "" msgstr ""
#: ccdfunc.c:626 #: ccdfunc.c:633
#, c-format #, c-format
msgid "Set fan speed to %d" msgid "Set fan speed to %d"
msgstr "" msgstr ""
#: ccdfunc.c:631 #: ccdfunc.c:639
#, c-format #, c-format
msgid "Camera model: %s" msgid "Camera model: %s"
msgstr "" msgstr ""
#: ccdfunc.c:632 #: ccdfunc.c:640
#, c-format #, c-format
msgid "Pixel size: %g x %g" msgid "Pixel size: %g x %g"
msgstr "" msgstr ""
#: ccdfunc.c:638 #: ccdfunc.c:646
#, c-format #, c-format
msgid "Full array: %s" msgid "Full array: %s"
msgstr "" msgstr ""
#: ccdfunc.c:641 #: ccdfunc.c:649
#, c-format #, c-format
msgid "Field of view: %s" msgid "Field of view: %s"
msgstr "" msgstr ""
#: ccdfunc.c:644 #: ccdfunc.c:652
#, c-format #, c-format
msgid "Current format: %s" msgid "Current format: %s"
msgstr "" msgstr ""
#: ccdfunc.c:647 #: ccdfunc.c:654
#, c-format msgid "Camera plugin have no temperature setter"
msgid "Can't set T to %g degC"
msgstr "" msgstr ""
#: ccdfunc.c:655 #: ccdfunc.c:655
#, c-format #, c-format
msgid "Can't set T to %g degC"
msgstr ""
#: ccdfunc.c:664
#, c-format
msgid "Shutter command: %s\n" msgid "Shutter command: %s\n"
msgstr "" msgstr ""
#: ccdfunc.c:657 #: ccdfunc.c:666
#, c-format #, c-format
msgid "Can't run shutter command %s (unsupported?)" msgid "Can't run shutter command %s (unsupported?)"
msgstr "" msgstr ""
#: ccdfunc.c:660 #: ccdfunc.c:669
#, 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:662 #: ccdfunc.c:671
msgid "Can't configure (unsupported?)" msgid "Can't configure (unsupported?)"
msgstr "" msgstr ""
#: ccdfunc.c:669 #: ccdfunc.c:678
msgid "Can't get IOport state (unsupported?)" msgid "Can't get IOport state (unsupported?)"
msgstr "" msgstr ""
#: ccdfunc.c:672
#, c-format
msgid "Try to write %d to I/O port"
msgstr ""
#: ccdfunc.c:674
msgid "Can't set IOport"
msgstr ""
#: ccdfunc.c:681 #: ccdfunc.c:681
#, c-format #, c-format
msgid "Try to write %d to I/O port"
msgstr ""
#: ccdfunc.c:683
msgid "Can't set IOport"
msgstr ""
#: ccdfunc.c:690
#, c-format
msgid "Set gain to %g" msgid "Set gain to %g"
msgstr "" msgstr ""
#: ccdfunc.c:682 #: ccdfunc.c:691
#, c-format #, c-format
msgid "Can't set gain to %g" msgid "Can't set gain to %g"
msgstr "" msgstr ""
#: ccdfunc.c:687 #: ccdfunc.c:696
#, c-format #, c-format
msgid "Set brightness to %g" msgid "Set brightness to %g"
msgstr "" msgstr ""
#: ccdfunc.c:688 #: ccdfunc.c:697
#, c-format #, c-format
msgid "Can't set brightness to %g" msgid "Can't set brightness to %g"
msgstr "" msgstr ""
#: ccdfunc.c:694 server.c:265 #: ccdfunc.c:703 server.c:278
#, c-format #, c-format
msgid "Can't set binning %dx%d" msgid "Can't set binning %dx%d"
msgstr "" msgstr ""
#: ccdfunc.c:706 server.c:266 #: ccdfunc.c:715 server.c:279
msgid "Can't set given geometry" msgid "Can't set given geometry"
msgstr "" msgstr ""
#: ccdfunc.c:710 #: ccdfunc.c:719
#, c-format #, c-format
msgid "Can't set %d flushes" msgid "Can't set %d flushes"
msgstr "" msgstr ""
#: ccdfunc.c:714 #: ccdfunc.c:722
msgid "Camera plugin have no exposition setter"
msgstr ""
#: ccdfunc.c:724
#, 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:717 #: ccdfunc.c:727
msgid "Can't change frame type" msgid "Can't change frame type"
msgstr "" msgstr ""
#: ccdfunc.c:720 #: ccdfunc.c:730
msgid "Can't set bit depth" msgid "Can't set bit depth"
msgstr "" msgstr ""
#: ccdfunc.c:722 #: ccdfunc.c:732
msgid "Can't set readout speed" msgid "Can't set readout speed"
msgstr "" msgstr ""
#: ccdfunc.c:723 #: ccdfunc.c:733
#, c-format #, c-format
msgid "Readout mode: %s" msgid "Readout mode: %s"
msgstr "" msgstr ""
#: ccdfunc.c:724 #: ccdfunc.c:734
msgid "Only show statistics" msgid "Only show statistics"
msgstr "" msgstr ""
#: ccdfunc.c:727 #: ccdfunc.c:737
msgid "Can't get current binning" msgid "Can't get current binning"
msgstr "" msgstr ""
#: ccdfunc.c:751 #: ccdfunc.c:761
#, c-format #, c-format
msgid "Capture frame %d" msgid "Capture frame %d"
msgstr "" msgstr ""
#: ccdfunc.c:753 ccdfunc.c:827 server.c:150 #: ccdfunc.c:762 ccdfunc.c:837 server.c:149 server.c:150
msgid "Camera plugin have no function `start exposition`"
msgstr ""
#: ccdfunc.c:764 ccdfunc.c:839 server.c:155 server.c:156
msgid "Can't start exposition" msgid "Can't start exposition"
msgstr "" msgstr ""
#: ccdfunc.c:758 #: ccdfunc.c:769
msgid "Can't capture image" msgid "Can't capture image"
msgstr "" msgstr ""
#: ccdfunc.c:761 #: ccdfunc.c:772
msgid "Read grabbed image" msgid "Read grabbed image"
msgstr "" msgstr ""
#: ccdfunc.c:765 ccdfunc.c:840 #: ccdfunc.c:774 ccdfunc.c:852 server.c:173 server.c:174
msgid "Camera plugin have no function `capture`"
msgstr ""
#: ccdfunc.c:776 ccdfunc.c:853
msgid "Can't grab image" msgid "Can't grab image"
msgstr "" msgstr ""
#: ccdfunc.c:777 client.c:270 #: ccdfunc.c:788 client.c:270
#, c-format #, c-format
msgid "%d seconds till pause ends\n" msgid "%d seconds till pause ends\n"
msgstr "" msgstr ""
#: ccdfunc.c:838 #: ccdfunc.c:850
msgid "Some error when capture" msgid "Some error when capture"
msgstr "" msgstr ""
#: server.c:189 #: server.c:201
msgid "No camera device" msgid "No camera device"
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-07 17:00+0300\n" "POT-Creation-Date: 2024-02-15 16:32+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,12 +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:541 #: ccdfunc.c:545
#, c-format #, c-format
msgid "%.1f seconds till exposition ends" msgid "%.1f seconds till exposition ends"
msgstr "%.1f ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÜËÓÐÏÚÉÃÉÉ" msgstr "%.1f ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÜËÓÐÏÚÉÃÉÉ"
#: ccdfunc.c:777 client.c:270 #: ccdfunc.c:788 client.c:270
#, c-format #, c-format
msgid "%d seconds till pause ends\n" msgid "%d seconds till pause ends\n"
msgstr "%d ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÐÁÕÚÙ\n" msgstr "%d ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÐÁÕÚÙ\n"
@ -38,7 +38,7 @@ msgstr "
msgid "CMOS gain level" msgid "CMOS gain level"
msgstr "ÕÒÏ×ÅÎØ Gain CMOS" msgstr "ÕÒÏ×ÅÎØ Gain CMOS"
#: ccdfunc.c:556 #: ccdfunc.c:560
msgid "Camera device not pointed" msgid "Camera device not pointed"
msgstr "õÓÔÒÏÊÓÔ×Ï Ó×ÅÏÐÒÉÅÍÎÉËÁ ÎÅ ÐÏÄËÌÀÞÅÎÏ" msgstr "õÓÔÒÏÊÓÔ×Ï Ó×ÅÏÐÒÉÅÍÎÉËÁ ÎÅ ÐÏÄËÌÀÞÅÎÏ"
@ -46,32 +46,67 @@ msgstr "
msgid "Camera device unknown" msgid "Camera device unknown"
msgstr "õÓÔÒÏÊÓÔ×Ï Ó×ÅÏÐÒÉÅÍÎÉËÁ ÎÅ ÏÐÏÚÎÁÎÏ" msgstr "õÓÔÒÏÊÓÔ×Ï Ó×ÅÏÐÒÉÅÍÎÉËÁ ÎÅ ÏÐÏÚÎÁÎÏ"
#: ccdfunc.c:631 #: ccdfunc.c:639
#, c-format #, c-format
msgid "Camera model: %s" msgid "Camera model: %s"
msgstr "íÏÄÅÌØ Ó×ÅÔÏÐÒÉÅÍÎÉËÁ: %s" msgstr "íÏÄÅÌØ Ó×ÅÔÏÐÒÉÅÍÎÉËÁ: %s"
#: ccdfunc.c:604 #: ccdfunc.c:539
#, fuzzy
msgid "Camera plugin have no capture polling funtion."
msgstr "õ ÐÌÁÇÉÎÁ ËÁÍÅÒÙ ÎÅÔ ÏÓÏÂÙÈ ËÏÍÁÎÄ"
#: ccdfunc.c:609
msgid "Camera plugin have no custom commands" msgid "Camera plugin have no custom commands"
msgstr "õ ÐÌÁÇÉÎÁ ËÁÍÅÒÙ ÎÅÔ ÏÓÏÂÙÈ ËÏÍÁÎÄ" msgstr "õ ÐÌÁÇÉÎÁ ËÁÍÅÒÙ ÎÅÔ ÏÓÏÂÙÈ ËÏÍÁÎÄ"
#: ccdfunc.c:758 #: ccdfunc.c:722
#, fuzzy
msgid "Camera plugin have no exposition setter"
msgstr "õ ÐÌÁÇÉÎÁ ËÁÍÅÒÙ ÎÅÔ ÏÓÏÂÙÈ ËÏÍÁÎÄ"
#: ccdfunc.c:629
#, fuzzy
msgid "Camera plugin have no fun speed setter"
msgstr "õ ÐÌÁÇÉÎÁ ËÁÍÅÒÙ ÎÅÔ ÏÓÏÂÙÈ ËÏÍÁÎÄ"
#: ccdfunc.c:774 ccdfunc.c:852 server.c:173 server.c:174
#, fuzzy
msgid "Camera plugin have no function `capture`"
msgstr "õ ÐÌÁÇÉÎÁ ËÁÍÅÒÙ ÎÅÔ ÏÓÏÂÙÈ ËÏÍÁÎÄ"
#: ccdfunc.c:762 ccdfunc.c:837 server.c:149 server.c:150
#, fuzzy
msgid "Camera plugin have no function `start exposition`"
msgstr "õ ÐÌÁÇÉÎÁ ËÁÍÅÒÙ ÎÅÔ ÏÓÏÂÙÈ ËÏÍÁÎÄ"
#: ccdfunc.c:588
#, fuzzy
msgid "Camera plugin have no model name getter"
msgstr "õ ÐÌÁÇÉÎÁ ËÁÍÅÒÙ ÎÅÔ ÏÓÏÂÙÈ ËÏÍÁÎÄ"
#: ccdfunc.c:654
#, fuzzy
msgid "Camera plugin have no temperature setter"
msgstr "õ ÐÌÁÇÉÎÁ ËÁÍÅÒÙ ÎÅÔ ÏÓÏÂÙÈ ËÏÍÁÎÄ"
#: ccdfunc.c:769
msgid "Can't capture image" msgid "Can't capture image"
msgstr "îÅ ÍÏÇÕ ÚÁÈ×ÁÔÉÔØ ÉÚÏÂÒÁÖÅÎÉÅ" msgstr "îÅ ÍÏÇÕ ÚÁÈ×ÁÔÉÔØ ÉÚÏÂÒÁÖÅÎÉÅ"
#: ccdfunc.c:717 #: ccdfunc.c:727
msgid "Can't change frame type" msgid "Can't change frame type"
msgstr "îÅ ÍÏÇÕ ÉÚÍÅÎÉÔØ ÔÉÐ ËÁÄÒÁ" msgstr "îÅ ÍÏÇÕ ÉÚÍÅÎÉÔØ ÔÉÐ ËÁÄÒÁ"
#: ccdfunc.c:662 #: ccdfunc.c:671
msgid "Can't configure (unsupported?)" msgid "Can't configure (unsupported?)"
msgstr "îÅ ÍÏÇÕ ÓËÏÎÆÉÇÕÒÉÒÏ×ÁÔØ (ÏÐÃÉÑ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)" msgstr "îÅ ÍÏÇÕ ÓËÏÎÆÉÇÕÒÉÒÏ×ÁÔØ (ÏÐÃÉÑ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)"
#: ccdfunc.c:669 #: ccdfunc.c:678
msgid "Can't get IOport state (unsupported?)" msgid "Can't get IOport state (unsupported?)"
msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÓÏÓÔÏÑÎÉÅ ÐÏÒÔÁ I/O (ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)" msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÓÏÓÔÏÑÎÉÅ ÐÏÒÔÁ I/O (ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)"
#: ccdfunc.c:727 #: ccdfunc.c:737
msgid "Can't get current binning" msgid "Can't get current binning"
msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÔÅËÕÝÅÅ ÚÎÁÞÅÎÉÅ ÂÉÎÎÉÎÇÁ" msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÔÅËÕÝÅÅ ÚÎÁÞÅÎÉÅ ÂÉÎÎÉÎÇÁ"
@ -87,7 +122,7 @@ msgstr "
msgid "Can't get max wheel position" msgid "Can't get max wheel position"
msgstr "îÅ ÍÏÇÕ ÏÐÒÅÄÅÌÉÔØ ÐÒÅÄÅÌØÎÕÀ ÐÏÚÉÃÉÀ ËÏÌÅÓÁ" msgstr "îÅ ÍÏÇÕ ÏÐÒÅÄÅÌÉÔØ ÐÒÅÄÅÌØÎÕÀ ÐÏÚÉÃÉÀ ËÏÌÅÓÁ"
#: ccdfunc.c:765 ccdfunc.c:840 #: ccdfunc.c:776 ccdfunc.c:853
msgid "Can't grab image" msgid "Can't grab image"
msgstr "îÅ ÍÏÇÕ ÚÁÈ×ÁÔÉÔØ ÉÚÏÂÒÁÖÅÎÉÅ" msgstr "îÅ ÍÏÇÕ ÚÁÈ×ÁÔÉÔØ ÉÚÏÂÒÁÖÅÎÉÅ"
@ -107,7 +142,7 @@ 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:657 #: ccdfunc.c:666
#, c-format #, c-format
msgid "Can't run shutter command %s (unsupported?)" msgid "Can't run shutter command %s (unsupported?)"
msgstr "îÅ ÍÏÇÕ ×ÙÐÏÌÎÉÔØ ËÏÍÁÎÄÕ ÚÁÔ×ÏÒÁ %s (ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)" msgstr "îÅ ÍÏÇÕ ×ÙÐÏÌÎÉÔØ ËÏÍÁÎÄÕ ÚÁÔ×ÏÒÁ %s (ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)"
@ -117,21 +152,21 @@ msgstr "
msgid "Can't save file with prefix %s" msgid "Can't save file with prefix %s"
msgstr "îÅ ÍÏÇÕ ÓÏÈÒÁÎÉÔØ ÆÁÊÌ Ó ÐÒÅÆÉËÓÏÍ %s" msgstr "îÅ ÍÏÇÕ ÓÏÈÒÁÎÉÔØ ÆÁÊÌ Ó ÐÒÅÆÉËÓÏÍ %s"
#: ccdfunc.c:710 #: ccdfunc.c:719
#, c-format #, c-format
msgid "Can't set %d flushes" msgid "Can't set %d flushes"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ %d ÓÂÒÏÓÏ×" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ %d ÓÂÒÏÓÏ×"
#: ccdfunc.c:674 #: ccdfunc.c:683
msgid "Can't set IOport" msgid "Can't set IOport"
msgstr "îÅ ÍÏÇÕ ÐÏÍÅÎÑÔØ ÚÎÁÞÅÎÉÑ ÐÏÒÔÁ I/O" msgstr "îÅ ÍÏÇÕ ÐÏÍÅÎÑÔØ ÚÎÁÞÅÎÉÑ ÐÏÒÔÁ I/O"
#: ccdfunc.c:647 #: ccdfunc.c:655
#, 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:598 #: ccdfunc.c:603
msgid "Can't set active camera number" msgid "Can't set active camera number"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÎÏÍÅÒ ÁËÔÉ×ÎÏÊ ËÁÍÅÒÙ" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÎÏÍÅÒ ÁËÔÉ×ÎÏÊ ËÁÍÅÒÙ"
@ -143,35 +178,35 @@ msgstr "
msgid "Can't set active wheel number" msgid "Can't set active wheel number"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÎÏÍÅÒ ÁËÔÉ×ÎÏÇÏ ËÏÌÅÓÁ" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÎÏÍÅÒ ÁËÔÉ×ÎÏÇÏ ËÏÌÅÓÁ"
#: ccdfunc.c:694 server.c:265 #: ccdfunc.c:703 server.c:278
#, 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:720 #: ccdfunc.c:730
msgid "Can't set bit depth" msgid "Can't set bit depth"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÒÁÚÒÑÄÎÏÓÔØ áãð" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÒÁÚÒÑÄÎÏÓÔØ áãð"
#: ccdfunc.c:688 #: ccdfunc.c:697
#, c-format #, c-format
msgid "Can't set brightness to %g" msgid "Can't set brightness to %g"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÑÒËÏÓÔØ × %g" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÑÒËÏÓÔØ × %g"
#: ccdfunc.c:714 #: ccdfunc.c:724
#, 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:625 #: ccdfunc.c:632
msgid "Can't set fan speed" msgid "Can't set fan speed"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ×ÅÎÔÉÌÑÔÏÒÏ×" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ×ÅÎÔÉÌÑÔÏÒÏ×"
#: ccdfunc.c:682 #: ccdfunc.c:691
#, 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:706 server.c:266 #: ccdfunc.c:715 server.c:279
msgid "Can't set given geometry" msgid "Can't set given geometry"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÇÅÏÍÅÔÒÉÀ" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÇÅÏÍÅÔÒÉÀ"
@ -185,7 +220,7 @@ msgstr "
msgid "Can't set position %g: out of limits [%g, %g]" msgid "Can't set position %g: out of limits [%g, %g]"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÐÏÚÉÃÉÀ %g: ×ÎÅ ÐÒÅÄÅÌÏ× [%g, %g]" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÐÏÚÉÃÉÀ %g: ×ÎÅ ÐÒÅÄÅÌÏ× [%g, %g]"
#: ccdfunc.c:722 #: ccdfunc.c:732
msgid "Can't set readout speed" msgid "Can't set readout speed"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ÓÞÉÔÙ×ÁÎÉÑ" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ÓÞÉÔÙ×ÁÎÉÑ"
@ -194,16 +229,16 @@ msgstr "
msgid "Can't set wheel position %d" msgid "Can't set wheel position %d"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÐÏÌÏÖÅÎÉÅ ËÏÌÅÓÁ %d" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÐÏÌÏÖÅÎÉÅ ËÏÌÅÓÁ %d"
#: ccdfunc.c:753 ccdfunc.c:827 server.c:150 #: ccdfunc.c:764 ccdfunc.c:839 server.c:155 server.c:156
msgid "Can't start exposition" msgid "Can't start exposition"
msgstr "îÅ ÍÏÇÕ ÎÁÞÁÔØ ÜËÓÐÏÚÉÃÉÀ" msgstr "îÅ ÍÏÇÕ ÎÁÞÁÔØ ÜËÓÐÏÚÉÃÉÀ"
#: ccdfunc.c:751 #: ccdfunc.c:761
#, c-format #, c-format
msgid "Capture frame %d" msgid "Capture frame %d"
msgstr "úÁÈ×ÁÔ ËÁÄÒÁ %d" msgstr "úÁÈ×ÁÔ ËÁÄÒÁ %d"
#: ccdfunc.c:644 #: ccdfunc.c:652
#, c-format #, c-format
msgid "Current format: %s" msgid "Current format: %s"
msgstr "ôÅËÕÝÉÊ ÆÏÒÍÁÔ: %s" msgstr "ôÅËÕÝÉÊ ÆÏÒÍÁÔ: %s"
@ -221,7 +256,7 @@ msgstr "
msgid "Error saving file" msgid "Error saving file"
msgstr "ïÛÉÂËÁ ÓÏÈÒÁÎÅÎÉÑ ÆÁÊÌÁ" msgstr "ïÛÉÂËÁ ÓÏÈÒÁÎÅÎÉÑ ÆÁÊÌÁ"
#: ccdfunc.c:641 #: ccdfunc.c:649
#, c-format #, c-format
msgid "Field of view: %s" msgid "Field of view: %s"
msgstr "ðÏÌÅ ÚÒÅÎÉÑ: %s" msgstr "ðÏÌÅ ÚÒÅÎÉÑ: %s"
@ -235,7 +270,7 @@ msgstr "
msgid "Focuser device not pointed" msgid "Focuser device not pointed"
msgstr "õÓÔÒÏÊÓÔ×Ï ÆÏËÕÓÅÒÁ ÎÅ ÕËÁÚÁÎÏ" msgstr "õÓÔÒÏÊÓÔ×Ï ÆÏËÕÓÅÒÁ ÎÅ ÕËÁÚÁÎÏ"
#: ccdfunc.c:594 #: ccdfunc.c:599
#, 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"
@ -250,7 +285,7 @@ msgstr "
msgid "Found %d wheels, you point number %d" msgid "Found %d wheels, you point number %d"
msgstr "ïÂÎÁÒÕÖÅÎÏ %d ËÏÌÅÓ, ×Ù ÕËÁÚÁÌÉ %d" msgstr "ïÂÎÁÒÕÖÅÎÏ %d ËÏÌÅÓ, ×Ù ÕËÁÚÁÌÉ %d"
#: ccdfunc.c:638 #: ccdfunc.c:646
#, c-format #, c-format
msgid "Full array: %s" msgid "Full array: %s"
msgstr "ðÏÌÎÙÊ ÆÏÒÍÁÔ: %s" msgstr "ðÏÌÎÙÊ ÆÏÒÍÁÔ: %s"
@ -273,11 +308,11 @@ msgstr "
msgid "N flushes before exposing (default: 1)" msgid "N flushes before exposing (default: 1)"
msgstr "N ÚÁÓ×ÅÞÉ×ÁÎÉÊ ÐÅÒÅÄ ÜËÓÐÏÚÉÃÉÅÊ (ÐÏ ÕÍÏÌÞÁÎÉÀ: 1)" msgstr "N ÚÁÓ×ÅÞÉ×ÁÎÉÊ ÐÅÒÅÄ ÜËÓÐÏÚÉÃÉÅÊ (ÐÏ ÕÍÏÌÞÁÎÉÀ: 1)"
#: server.c:189 #: server.c:201
msgid "No camera device" msgid "No camera device"
msgstr "îÅ ÕËÁÚÁÎÏ ÕÓÔÒÏÊÓÔ×Ï ËÁÍÅÒÙ" msgstr "îÅ ÕËÁÚÁÎÏ ÕÓÔÒÏÊÓÔ×Ï ËÁÍÅÒÙ"
#: ccdfunc.c:563 ccdfunc.c:564 #: ccdfunc.c:567 ccdfunc.c:568
msgid "No cameras found" msgid "No cameras found"
msgstr "ëÁÍÅÒ ÎÅ ÏÂÎÁÒÕÖÅÎÏ" msgstr "ëÁÍÅÒ ÎÅ ÏÂÎÁÒÕÖÅÎÏ"
@ -289,20 +324,20 @@ msgstr "
msgid "No wheels found" msgid "No wheels found"
msgstr "ôÕÒÅÌÅÊ ÎÅ ÏÂÎÁÒÕÖÅÎÏ" msgstr "ôÕÒÅÌÅÊ ÎÅ ÏÂÎÁÒÕÖÅÎÏ"
#: ccdfunc.c:724 #: ccdfunc.c:734
msgid "Only show statistics" msgid "Only show statistics"
msgstr "ôÏÌØËÏ ÏÔÏÂÒÁÚÉÔØ ÓÔÁÔÉÓÔÉËÕ" msgstr "ôÏÌØËÏ ÏÔÏÂÒÁÚÉÔØ ÓÔÁÔÉÓÔÉËÕ"
#: ccdfunc.c:632 #: ccdfunc.c:640
#, 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:761 #: ccdfunc.c:772
msgid "Read grabbed image" msgid "Read grabbed image"
msgstr "óÞÉÔÙ×ÁÎÉÅ ÉÚÏÂÒÁÖÅÎÉÑ" msgstr "óÞÉÔÙ×ÁÎÉÅ ÉÚÏÂÒÁÖÅÎÉÑ"
#: ccdfunc.c:723 #: ccdfunc.c:733
#, c-format #, c-format
msgid "Readout mode: %s" msgid "Readout mode: %s"
msgstr "òÅÖÉÍ ÓÞÉÔÙ×ÁÎÉÑ: %s" msgstr "òÅÖÉÍ ÓÞÉÔÙ×ÁÎÉÑ: %s"
@ -311,36 +346,36 @@ msgstr "
msgid "Server timeout" msgid "Server timeout"
msgstr "ôÁÊÍÁÕÔ ÓÅÒ×ÅÒÁ" msgstr "ôÁÊÍÁÕÔ ÓÅÒ×ÅÒÁ"
#: ccdfunc.c:687 #: ccdfunc.c:696
#, c-format #, c-format
msgid "Set brightness to %g" msgid "Set brightness to %g"
msgstr "õÓÔÁÎÏ×ÉÔØ ÑÒËÏÓÔØ × %g" msgstr "õÓÔÁÎÏ×ÉÔØ ÑÒËÏÓÔØ × %g"
#: ccdfunc.c:626 #: ccdfunc.c:633
#, c-format #, c-format
msgid "Set fan speed to %d" msgid "Set fan speed to %d"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ×ÅÎÔÉÌÑÔÏÒÏ× × %d" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ×ÅÎÔÉÌÑÔÏÒÏ× × %d"
#: ccdfunc.c:681 #: ccdfunc.c:690
#, c-format #, c-format
msgid "Set gain to %g" msgid "Set gain to %g"
msgstr "õÓÔÁÎÏ×ÉÔØ Gain × %g" msgstr "õÓÔÁÎÏ×ÉÔØ Gain × %g"
#: ccdfunc.c:655 #: ccdfunc.c:664
#, c-format #, c-format
msgid "Shutter command: %s\n" msgid "Shutter command: %s\n"
msgstr "ëÏÍÁÎÄÁ ÚÁÔ×ÏÒÁ: %s\n" msgstr "ëÏÍÁÎÄÁ ÚÁÔ×ÏÒÁ: %s\n"
#: ccdfunc.c:838 #: ccdfunc.c:850
msgid "Some error when capture" msgid "Some error when capture"
msgstr "ïÛÉÂËÁ ÐÒÉ ÚÁÈ×ÁÔÅ" msgstr "ïÛÉÂËÁ ÐÒÉ ÚÁÈ×ÁÔÅ"
#: ccdfunc.c:660 #: ccdfunc.c:669
#, 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"
#: ccdfunc.c:672 #: ccdfunc.c:681
#, 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"

View File

@ -132,7 +132,7 @@ static void fixima(){
DBG("curformat: %dx%d", curformat.w, curformat.h); DBG("curformat: %dx%d", curformat.w, curformat.h);
ima->h = raw_height; ima->h = raw_height;
ima->w = raw_width; ima->w = raw_width;
if(!camera->getbitpix(&ima->bitpix)) ima->bitpix = 16; if(!camera->getbitpix || !camera->getbitpix(&ima->bitpix)) ima->bitpix = 16;
if(ima->bitpix < 8 || ima->bitpix > 16) ima->bitpix = 16; // use maximum in any strange cases if(ima->bitpix < 8 || ima->bitpix > 16) ima->bitpix = 16; // use maximum in any strange cases
ima->bytelen = raw_height * raw_width * cc_getNbytes(ima); ima->bytelen = raw_height * raw_width * cc_getNbytes(ima);
DBG("new image: %dx%d", raw_width, raw_height); DBG("new image: %dx%d", raw_width, raw_height);
@ -145,8 +145,14 @@ static inline void cameraidlestate(){ // idle - wait for capture commands
camflags &= ~(FLAG_STARTCAPTURE | FLAG_CANCEL); camflags &= ~(FLAG_STARTCAPTURE | FLAG_CANCEL);
camstate = CAMERA_CAPTURE; camstate = CAMERA_CAPTURE;
fixima(); fixima();
if(!camera->startexposition){
LOGERR(_("Camera plugin have no function `start exposition`"));
WARNX(_("Camera plugin have no function `start exposition`"));
camstate = CAMERA_ERROR;
return;
}
if(!camera->startexposition()){ if(!camera->startexposition()){
LOGERR("Can't start exposition"); LOGERR(_("Can't start exposition"));
WARNX(_("Can't start exposition")); WARNX(_("Can't start exposition"));
camstate = CAMERA_ERROR; camstate = CAMERA_ERROR;
return; return;
@ -155,7 +161,7 @@ static inline void cameraidlestate(){ // idle - wait for capture commands
} }
static inline void cameracapturestate(){ // capturing - wait for exposition ends static inline void cameracapturestate(){ // capturing - wait for exposition ends
cc_capture_status cs; cc_capture_status cs;
if(camera->pollcapture(&cs, &tremain)){ if(camera->pollcapture && camera->pollcapture(&cs, &tremain)){
if(cs != CAPTURE_PROCESS){ if(cs != CAPTURE_PROCESS){
TIMESTAMP("Capture ready"); TIMESTAMP("Capture ready");
tremain = 0.; tremain = 0.;
@ -163,6 +169,12 @@ static inline void cameracapturestate(){ // capturing - wait for exposition ends
if(!ima->data) LOGERR("Can't save image: not initialized"); if(!ima->data) LOGERR("Can't save image: not initialized");
else{ else{
TIMESTAMP("start capture"); TIMESTAMP("start capture");
if(!camera->capture){
WARNX(_("Camera plugin have no function `capture`"));
LOGERR(_("Camera plugin have no function `capture`"));
camstate = CAMERA_ERROR;
return;
}
if(!camera->capture(ima)){ if(!camera->capture(ima)){
LOGERR("Can't capture image"); LOGERR("Can't capture image");
camstate = CAMERA_ERROR; camstate = CAMERA_ERROR;
@ -195,18 +207,19 @@ static void* processCAM(_U_ void *d){
signals(1); signals(1);
} }
usleep(100); usleep(100);
if(tremain < 0.5 && tremain > 0.) usleep(tremain*1e6);
if(lock()){ if(lock()){
// log // log
if(dtime() - logt > TLOG_PAUSE){ if(dtime() - logt > TLOG_PAUSE){
logt = dtime(); logt = dtime();
float t; float t;
if(camera->getTcold(&t)){ if(camera->getTcold && camera->getTcold(&t)){
LOGMSG("CCDTEMP=%.1f", t); LOGMSG("CCDTEMP=%.1f", t);
} }
if(camera->getThot(&t)){ if(camera->getThot && camera->getThot(&t)){
LOGMSG("HOTTEMP=%.1f", t); LOGMSG("HOTTEMP=%.1f", t);
} }
if(camera->getTbody(&t)){ if(camera->getTbody && camera->getTbody(&t)){
LOGMSG("BODYTEMP=%.1f", t); LOGMSG("BODYTEMP=%.1f", t);
} }
} }
@ -214,7 +227,7 @@ static void* processCAM(_U_ void *d){
DBG("Cancel exposition"); DBG("Cancel exposition");
LOGMSG("User canceled exposition"); LOGMSG("User canceled exposition");
camflags &= ~(FLAG_STARTCAPTURE | FLAG_CANCEL); camflags &= ~(FLAG_STARTCAPTURE | FLAG_CANCEL);
camera->cancel(); if(camera->cancel) camera->cancel();
camstate = CAMERA_IDLE; camstate = CAMERA_IDLE;
infty = 0; // also cancel infinity loop infty = 0; // also cancel infinity loop
unlock(); unlock();
@ -244,14 +257,14 @@ static void* processCAM(_U_ void *d){
// functions running @ each devno change // functions running @ each devno change
static int camdevini(int n){ static int camdevini(int n){
if(!camera) return FALSE; if(!camera) return FALSE;
if(!camera->setDevNo(n)){ if(camera->setDevNo && !camera->setDevNo(n)){
LOGERR("Can't set active camera number"); LOGERR("Can't set active camera number");
return FALSE; return FALSE;
} }
camdevno = n; camdevno = n;
LOGMSG("Set camera device number to %d", camdevno); LOGMSG("Set camera device number to %d", camdevno);
cc_frameformat step; cc_frameformat step;
camera->getgeomlimits(&frmformatmax, &step); if(camera->getgeomlimits) camera->getgeomlimits(&frmformatmax, &step);
curformat = frmformatmax; curformat = frmformatmax;
DBG("\n\nGeometry format max (offx/offy) w/h: (%d/%d) %d/%d", curformat.xoff, curformat.yoff, DBG("\n\nGeometry format max (offx/offy) w/h: (%d/%d) %d/%d", curformat.xoff, curformat.yoff,
curformat.w, curformat.h); curformat.w, curformat.h);
@ -262,8 +275,8 @@ static int camdevini(int n){
if(GP->hbin < 1) GP->hbin = 1; if(GP->hbin < 1) GP->hbin = 1;
if(GP->vbin < 1) GP->vbin = 1; if(GP->vbin < 1) GP->vbin = 1;
fixima(); fixima();
if(!camera->setbin(GP->hbin, GP->vbin)) WARNX(_("Can't set binning %dx%d"), GP->hbin, GP->vbin); if(!camera->setbin || !camera->setbin(GP->hbin, GP->vbin)) WARNX(_("Can't set binning %dx%d"), GP->hbin, GP->vbin);
if(!camera->setgeometry(&curformat)) WARNX(_("Can't set given geometry")); if(!camera->setgeometry || !camera->setgeometry(&curformat)) WARNX(_("Can't set given geometry"));
return TRUE; return TRUE;
} }
static int focdevini(int n){ static int focdevini(int n){
@ -312,13 +325,14 @@ static cc_hresult imsizehandler(int fd, const char *key, _U_ const char *val){
} }
static cc_hresult camlisthandler(int fd, _U_ const char *key, _U_ const char *val){ static cc_hresult camlisthandler(int fd, _U_ const char *key, _U_ const char *val){
char buf[BUFSIZ], modname[256]; char buf[BUFSIZ], modname[256];
if(!camera->getModelName) return RESULT_FAIL;
for(int i = 0; i < camera->Ndevices; ++i){ for(int i = 0; i < camera->Ndevices; ++i){
if(!camera->setDevNo(i)) continue; if(camera->setDevNo && !camera->setDevNo(i)) continue;
camera->getModelName(modname, 255); camera->getModelName(modname, 255);
snprintf(buf, BUFSIZ-1, CC_CMD_CAMLIST "='%s'", modname); snprintf(buf, BUFSIZ-1, CC_CMD_CAMLIST "='%s'", modname);
if(!cc_sendstrmessage(fd, buf)) return RESULT_DISCONNECTED; if(!cc_sendstrmessage(fd, buf)) return RESULT_DISCONNECTED;
} }
if(camdevno > -1) camera->setDevNo(camdevno); if(camdevno > -1 && camera->setDevNo) camera->setDevNo(camdevno);
return RESULT_SILENCE; return RESULT_SILENCE;
} }
static cc_hresult camsetNhandler(_U_ int fd, _U_ const char *key, _U_ const char *val){ static cc_hresult camsetNhandler(_U_ int fd, _U_ const char *key, _U_ const char *val){
@ -341,6 +355,7 @@ static cc_hresult exphandler(int fd, _U_ const char *key, const char *val){
DBG("setexp to %s", val); DBG("setexp to %s", val);
double v = atof(val); double v = atof(val);
if(v < DBL_EPSILON) return RESULT_BADVAL; if(v < DBL_EPSILON) return RESULT_BADVAL;
if(!camera->setexp) return RESULT_FAIL;
if(camera->setexp(v)){ if(camera->setexp(v)){
GP->exptime = v; GP->exptime = v;
}else LOGWARN("Can't set exptime to %g", v); }else LOGWARN("Can't set exptime to %g", v);
@ -427,10 +442,12 @@ static cc_hresult binhandler(_U_ int fd, const char *key, const char *val){
if(b < 1) return RESULT_BADVAL; if(b < 1) return RESULT_BADVAL;
if(0 == strcmp(key, CC_CMD_HBIN)) GP->hbin = b; if(0 == strcmp(key, CC_CMD_HBIN)) GP->hbin = b;
else GP->vbin = b; else GP->vbin = b;
if(!camera->setbin) return RESULT_FAIL;
if(!camera->setbin(GP->hbin, GP->vbin)){ if(!camera->setbin(GP->hbin, GP->vbin)){
return RESULT_BADVAL; return RESULT_BADVAL;
} }
} }
if(!camera->getbin) return RESULT_SILENCE;
int r = camera->getbin(&GP->hbin, &GP->vbin); int r = camera->getbin(&GP->hbin, &GP->vbin);
if(r){ if(r){
if(0 == strcmp(key, CC_CMD_HBIN)) snprintf(buf, 63, "%s=%d", key, GP->hbin); if(0 == strcmp(key, CC_CMD_HBIN)) snprintf(buf, 63, "%s=%d", key, GP->hbin);
@ -445,6 +462,7 @@ static cc_hresult temphandler(int fd, _U_ const char *key, const char *val){
float f; float f;
char buf[64]; char buf[64];
int r; int r;
if(!camera->setT) return RESULT_FAIL;
if(val){ if(val){
f = atof(val); f = atof(val);
r = camera->setT((float)f); r = camera->setT((float)f);
@ -454,25 +472,31 @@ static cc_hresult temphandler(int fd, _U_ const char *key, const char *val){
} }
LOGMSG("Set camera T to %.1f", f); LOGMSG("Set camera T to %.1f", f);
} }
if(!camera->getTcold) return RESULT_SILENCE;
r = camera->getTcold(&f); r = camera->getTcold(&f);
if(r){ if(r){
snprintf(buf, 63, CC_CMD_CAMTEMPER "=%.1f", f); snprintf(buf, 63, CC_CMD_CAMTEMPER "=%.1f", f);
if(!cc_sendstrmessage(fd, buf)) return RESULT_DISCONNECTED; if(!cc_sendstrmessage(fd, buf)) return RESULT_DISCONNECTED;
r = camera->getTbody(&f); if(camera->getTbody){
if(r){ r = camera->getTbody(&f);
snprintf(buf, 63, "tbody=%.1f", f); if(r){
if(!cc_sendstrmessage(fd, buf)) return RESULT_DISCONNECTED; snprintf(buf, 63, "tbody=%.1f", f);
if(!cc_sendstrmessage(fd, buf)) return RESULT_DISCONNECTED;
}
} }
r = camera->getThot(&f); if(camera->getThot){
if(r){ r = camera->getThot(&f);
snprintf(buf, 63, "thot=%.1f", f); if(r){
if(!cc_sendstrmessage(fd, buf)) return RESULT_DISCONNECTED; snprintf(buf, 63, "thot=%.1f", f);
if(!cc_sendstrmessage(fd, buf)) return RESULT_DISCONNECTED;
}
} }
return RESULT_SILENCE; return RESULT_SILENCE;
}else return RESULT_FAIL; }else return RESULT_FAIL;
} }
static cc_hresult camfanhandler(int fd, _U_ const char *key, _U_ const char *val){ static cc_hresult camfanhandler(int fd, _U_ const char *key, _U_ const char *val){
char buf[64]; char buf[64];
if(!camera->setfanspeed) return RESULT_FAIL;
if(val){ if(val){
int spd = atoi(val); int spd = atoi(val);
if(spd < 0) return RESULT_BADVAL; if(spd < 0) return RESULT_BADVAL;
@ -487,6 +511,7 @@ static cc_hresult camfanhandler(int fd, _U_ const char *key, _U_ const char *val
} }
const char *shutterstr[] = {"open", "close", "expose @high", "expose @low"}; const char *shutterstr[] = {"open", "close", "expose @high", "expose @low"};
static cc_hresult shutterhandler(_U_ int fd, _U_ const char *key, const char *val){ static cc_hresult shutterhandler(_U_ int fd, _U_ const char *key, const char *val){
if(!camera->shuttercmd) return RESULT_FAIL;
if(val){ if(val){
int x = atoi(val); int x = atoi(val);
if(x < 0 || x >= SHUTTER_AMOUNT) return RESULT_BADVAL; if(x < 0 || x >= SHUTTER_AMOUNT) return RESULT_BADVAL;
@ -502,6 +527,7 @@ static cc_hresult shutterhandler(_U_ int fd, _U_ const char *key, const char *va
} }
static cc_hresult confiohandler(_U_ int fd, _U_ const char *key, _U_ const char *val){ static cc_hresult confiohandler(_U_ int fd, _U_ const char *key, _U_ const char *val){
char buf[64]; char buf[64];
if(!camera->confio) return RESULT_FAIL;
if(val){ if(val){
int io = atoi(val); int io = atoi(val);
int r = camera->confio(io); int r = camera->confio(io);
@ -515,6 +541,7 @@ static cc_hresult confiohandler(_U_ int fd, _U_ const char *key, _U_ const char
static cc_hresult iohandler(_U_ int fd, _U_ const char *key, _U_ const char *val){ static cc_hresult iohandler(_U_ int fd, _U_ const char *key, _U_ const char *val){
char buf[64]; char buf[64];
int io; int io;
if(!camera->setio) return RESULT_FAIL;
if(val){ if(val){
io = atoi(val); io = atoi(val);
int r = camera->setio(io); int r = camera->setio(io);
@ -529,11 +556,13 @@ static cc_hresult iohandler(_U_ int fd, _U_ const char *key, _U_ const char *val
static cc_hresult gainhandler(_U_ int fd, _U_ const char *key, _U_ const char *val){ static cc_hresult gainhandler(_U_ int fd, _U_ const char *key, _U_ const char *val){
char buf[64]; char buf[64];
float f; float f;
if(!camera->setgain) return RESULT_FAIL;
if(val){ if(val){
f = atof(val); f = atof(val);
int r = camera->setgain(f); int r = camera->setgain(f);
if(!r) return RESULT_FAIL; if(!r) return RESULT_FAIL;
} }
if(!camera->getgain) return RESULT_SILENCE;
int r = camera->getgain(&f); int r = camera->getgain(&f);
if(!r) return RESULT_FAIL; if(!r) return RESULT_FAIL;
snprintf(buf, 63, CC_CMD_GAIN "=%.1f", f); snprintf(buf, 63, CC_CMD_GAIN "=%.1f", f);
@ -543,11 +572,13 @@ static cc_hresult gainhandler(_U_ int fd, _U_ const char *key, _U_ const char *v
static cc_hresult brightnesshandler(_U_ int fd, _U_ const char *key, _U_ const char *val){ static cc_hresult brightnesshandler(_U_ int fd, _U_ const char *key, _U_ const char *val){
char buf[64]; char buf[64];
float b; float b;
if(!camera->setbrightness) return RESULT_FAIL;
if(val){ if(val){
b = atof(val); b = atof(val);
int r = camera->setbrightness(b); int r = camera->setbrightness(b);
if(!r) return RESULT_FAIL; if(!r) return RESULT_FAIL;
} }
if(!camera->getbrightness) return RESULT_SILENCE;
int r = camera->getbrightness(&b); int r = camera->getbrightness(&b);
if(!r) return RESULT_FAIL; if(!r) return RESULT_FAIL;
snprintf(buf, 63, CC_CMD_BRIGHTNESS "=%.1f", b); snprintf(buf, 63, CC_CMD_BRIGHTNESS "=%.1f", b);
@ -561,6 +592,7 @@ static cc_hresult formathandler(int fd, const char *key, const char *val){
cc_frameformat fmt; cc_frameformat fmt;
DBG("key=%s, val=%s", key, val); DBG("key=%s, val=%s", key, val);
if(val){ if(val){
if(!camera->setgeometry) return RESULT_FAIL;
if(0 == strcmp(key, CC_CMD_FRAMEMAX)){ if(0 == strcmp(key, CC_CMD_FRAMEMAX)){
DBG("CANT SET MAXFORMAT"); DBG("CANT SET MAXFORMAT");
return RESULT_BADKEY; // can't set maxformat return RESULT_BADKEY; // can't set maxformat
@ -585,6 +617,7 @@ static cc_hresult formathandler(int fd, const char *key, const char *val){
} }
static cc_hresult nflusheshandler(_U_ int fd, _U_ const char *key, _U_ const char *val){ static cc_hresult nflusheshandler(_U_ int fd, _U_ const char *key, _U_ const char *val){
char buf[64]; char buf[64];
if(!camera->setnflushes) return RESULT_FAIL;
if(val){ if(val){
int n = atoi(val); int n = atoi(val);
if(n < 1) return RESULT_BADVAL; if(n < 1) return RESULT_BADVAL;
@ -627,6 +660,7 @@ static cc_hresult tremainhandler(_U_ int fd, _U_ const char *key, _U_ const char
} }
static cc_hresult _8bithandler(int fd, _U_ const char *key, const char *val){ static cc_hresult _8bithandler(int fd, _U_ const char *key, const char *val){
char buf[64]; char buf[64];
if(!camera->setbitdepth) return RESULT_FAIL;
if(val){ if(val){
int s = atoi(val); int s = atoi(val);
if(s != 0 && s != 1) return RESULT_BADVAL; if(s != 0 && s != 1) return RESULT_BADVAL;
@ -640,6 +674,7 @@ static cc_hresult _8bithandler(int fd, _U_ const char *key, const char *val){
} }
static cc_hresult fastspdhandler(int fd, _U_ const char *key, const char *val){ static cc_hresult fastspdhandler(int fd, _U_ const char *key, const char *val){
char buf[64]; char buf[64];
if(!camera->setfastspeed) return RESULT_FAIL;
if(val){ if(val){
int b = atoi(val); int b = atoi(val);
if(b != 0 && b != 1) return RESULT_BADVAL; if(b != 0 && b != 1) return RESULT_BADVAL;
@ -652,6 +687,7 @@ static cc_hresult fastspdhandler(int fd, _U_ const char *key, const char *val){
} }
static cc_hresult darkhandler(int fd, _U_ const char *key, const char *val){ static cc_hresult darkhandler(int fd, _U_ const char *key, const char *val){
char buf[64]; char buf[64];
if(!camera->setframetype) return RESULT_FAIL;
if(val){ if(val){
int d = atoi(val); int d = atoi(val);
if(d != 0 && d != 1) return RESULT_BADVAL; if(d != 0 && d != 1) return RESULT_BADVAL;
@ -869,7 +905,7 @@ static cc_hresult infohandler(int fd, _U_ const char *key, _U_ const char *val){
float f; float f;
int i; int i;
if(camera){ if(camera){
if(camera->getModelName(buf1, 255)){ if(camera->getModelName && camera->getModelName(buf1, 255)){
snprintf(buf, BUFSIZ-1, CC_CMD_CAMLIST "='%s'", buf1); snprintf(buf, BUFSIZ-1, CC_CMD_CAMLIST "='%s'", buf1);
if(!cc_sendstrmessage(fd, buf)) return RESULT_DISCONNECTED; if(!cc_sendstrmessage(fd, buf)) return RESULT_DISCONNECTED;
} }
@ -1027,7 +1063,7 @@ static cc_handleritem items[] = {
{chkcc, formathandler, CC_CMD_FRAMEFORMAT}, {chkcc, formathandler, CC_CMD_FRAMEFORMAT},
{chkcc, formathandler, CC_CMD_FRAMEMAX}, {chkcc, formathandler, CC_CMD_FRAMEMAX},
{chkcc, nflusheshandler, CC_CMD_NFLUSHES}, {chkcc, nflusheshandler, CC_CMD_NFLUSHES},
{chkcam, expstatehandler, CC_CMD_EXPSTATE}, {NULL, expstatehandler, CC_CMD_EXPSTATE},
{chktrue,shmemkeyhandler, CC_CMD_SHMEMKEY}, {chktrue,shmemkeyhandler, CC_CMD_SHMEMKEY},
{chktrue,imsizehandler, CC_CMD_IMWIDTH}, {chktrue,imsizehandler, CC_CMD_IMWIDTH},
{chktrue,imsizehandler, CC_CMD_IMHEIGHT}, {chktrue,imsizehandler, CC_CMD_IMHEIGHT},