fixed some bugs; need to make more refactoring

This commit is contained in:
2026-07-23 17:39:39 +03:00
parent 87bf7678b1
commit 6c704fcf9b
11 changed files with 870 additions and 598 deletions

View File

@@ -420,7 +420,7 @@ cc_IMG *cc_getshm(key_t key, size_t imsize){
// find plugin // find plugin
void *open_plugin(const char *name){ void *cc_open_plugin(const char *name){
DBG("try to open lib %s", name); DBG("try to open lib %s", name);
void* dlh = dlopen(name, RTLD_NOLOAD); // library may be already opened void* dlh = dlopen(name, RTLD_NOLOAD); // library may be already opened
if(!dlh){ if(!dlh){
@@ -434,9 +434,9 @@ void *open_plugin(const char *name){
return dlh; return dlh;
} }
cc_Focuser *open_focuser(const char *pluginname){ cc_Focuser *cc_open_focuser(const char *pluginname){
FNAME(); FNAME();
void* dlh = open_plugin(pluginname); void* dlh = cc_open_plugin(pluginname);
if(!dlh) return NULL; if(!dlh) return NULL;
cc_Focuser* f = (cc_Focuser*) dlsym(dlh, "focuser"); cc_Focuser* f = (cc_Focuser*) dlsym(dlh, "focuser");
if(!f){ if(!f){
@@ -445,9 +445,9 @@ cc_Focuser *open_focuser(const char *pluginname){
} }
return f; return f;
} }
cc_Camera *open_camera(const char *pluginname){ cc_Camera *cc_open_camera(const char *pluginname){
FNAME(); FNAME();
void* dlh = open_plugin(pluginname); void* dlh = cc_open_plugin(pluginname);
if(!dlh) return NULL; if(!dlh) return NULL;
cc_Camera *c = (cc_Camera*) dlsym(dlh, "camera"); cc_Camera *c = (cc_Camera*) dlsym(dlh, "camera");
if(!c){ if(!c){
@@ -456,9 +456,9 @@ cc_Camera *open_camera(const char *pluginname){
} }
return c; return c;
} }
cc_Wheel *open_wheel(const char *pluginname){ cc_Wheel *cc_open_wheel(const char *pluginname){
FNAME(); FNAME();
void* dlh = open_plugin(pluginname); void* dlh = cc_open_plugin(pluginname);
if(!dlh) return NULL; if(!dlh) return NULL;
cc_Wheel *w = (cc_Wheel*) dlsym(dlh, "wheel"); cc_Wheel *w = (cc_Wheel*) dlsym(dlh, "wheel");
if(!w){ if(!w){
@@ -768,6 +768,26 @@ cc_hresult cc_getfloat(int fd, cc_strbuff *cbuf, const char *cmd, float *val){
return r; return r;
} }
/**
* @brief cc_addrecord - add pre-formated record to FITS file
* @param fp - pointer to FITS file
* @param rec - record to add
* @return
*/
int cc_addrecord(fitsfile *fp, char *rec){
if(!fp || !rec) return -1;
char key[FLEN_KEYWORD];
char *eq = strchr(rec, '=');
int status = 0;
if(eq){ // found 'key = value / comment'
size_t l = eq - rec;
if(l > FLEN_KEYWORD-1) l = FLEN_KEYWORD-1;
memcpy(key, rec, l); key[l] = 0;
fits_update_card(fp, key, rec, &status);
}else fits_write_record(fp, rec, &status);
if(status) fits_report_error(stderr, status);
return status;
}
// get next record from external buffer, newlines==1 if every record ends with '\n' // get next record from external buffer, newlines==1 if every record ends with '\n'
char *cc_nextkw(char *buf, char record[FLEN_CARD], int newlines){ char *cc_nextkw(char *buf, char record[FLEN_CARD], int newlines){
@@ -787,12 +807,12 @@ char *cc_nextkw(char *buf, char record[FLEN_CARD], int newlines){
/** /**
* @brief cc_kwfromfile - add records from file * @brief cc_kwfromfile - add records from file
* @param img - buffer to add * @param fp - FITS file
* @param filename - file name with FITS headers ('\n'-terminated or by 80 chars) * @param filename - file name with FITS headers ('\n'-terminated or by 80 chars)
* @return amount of bytes added * @return amount of records added
*/ */
size_t cc_kwfromfile(cc_IMG *img, char *filename){ int cc_kwfromfile(fitsfile *fp, char *filename){
if(!img) return 0; if(!fp || !filename) return 0;
sl_mmapbuf_t *buf = sl_mmap(filename); sl_mmapbuf_t *buf = sl_mmap(filename);
if(!buf || buf->len < 1){ if(!buf || buf->len < 1){
WARNX(_("Can't add FITS records from file %s"), filename); WARNX(_("Can't add FITS records from file %s"), filename);
@@ -805,7 +825,7 @@ size_t cc_kwfromfile(cc_IMG *img, char *filename){
if(x && (x - data) < FLEN_CARD){ // we found newline -> this is a format with newlines if(x && (x - data) < FLEN_CARD){ // we found newline -> this is a format with newlines
newlines = 1; newlines = 1;
} }
size_t written = 0; int written = 0;
do{ do{
data = cc_nextkw(data, rec, newlines); data = cc_nextkw(data, rec, newlines);
if(data > eodata) break; if(data > eodata) break;
@@ -813,10 +833,7 @@ size_t cc_kwfromfile(cc_IMG *img, char *filename){
fits_parse_template(rec, card, &kt, &status); fits_parse_template(rec, card, &kt, &status);
if(status) fits_report_error(stderr, status); if(status) fits_report_error(stderr, status);
else{ else{
if(img->headerstrings < FITS_HEADER_STRINGS_MAX){ if(0 == cc_addrecord(fp, card)) ++written;
++written;
snprintf(img->fitsheader[img->headerstrings++], FLEN_CARD, "%s", card);
}else break;
} }
}while(data && *data); }while(data && *data);
sl_munmap(buf); sl_munmap(buf);
@@ -1059,6 +1076,7 @@ int cc_copyimage(cc_IMG *dest, cc_IMG *src, int isshm){
} }
DBG("Lock"); DBG("Lock");
pthread_mutex_lock(&dest->mutex); pthread_mutex_lock(&dest->mutex);
dest->MAGICK = CC_SHM_MAGIC;
if(!dest->data || dest->datasize < src->bytelen){ if(!dest->data || dest->datasize < src->bytelen){
size_t newsz = 1024 * (1 + src->bytelen / 1024); size_t newsz = 1024 * (1 + src->bytelen / 1024);
DBG("resize from %zd to %zd bytes", dest->datasize, newsz); DBG("resize from %zd to %zd bytes", dest->datasize, newsz);
@@ -1073,7 +1091,8 @@ int cc_copyimage(cc_IMG *dest, cc_IMG *src, int isshm){
dest->datasize = newsz; dest->datasize = newsz;
DBG("Success"); DBG("Success");
} }
DBG("Copy fields"); DBG("Copy %zd bytes of fields", offsetof(cc_IMG, end_of_copyable_data) - offsetof(cc_IMG, start_of_copyable_data));
#if 0
#define COPY(field) dest->field = src->field; #define COPY(field) dest->field = src->field;
COPY(timestamp); COPY(timestamp);
COPY(bitpix); COPY(bitpix);
@@ -1081,7 +1100,21 @@ int cc_copyimage(cc_IMG *dest, cc_IMG *src, int isshm){
COPY(h); COPY(h);
COPY(bytelen); COPY(bytelen);
COPY(imnumber); COPY(imnumber);
COPY(pixel_x);
COPY(pixel_y);
COPY(gain);
COPY(ccd_temp);
COPY(exposure_time);
COPY(bin_x);
COPY(bin_y);
#undef COPY #undef COPY
memcpy(dest->model, src->model, MODELNM_SZ);
#endif
uint8_t *tagaddr = (uint8_t*)dest + offsetof(cc_IMG, start_of_copyable_data);
uint8_t *srcaddr = (uint8_t*)src + offsetof(cc_IMG, start_of_copyable_data);
memcpy(tagaddr, srcaddr,
offsetof(cc_IMG, end_of_copyable_data) - offsetof(cc_IMG, start_of_copyable_data));
DBG("TS after copy: dest=%.5f, src=%.5f", dest->timestamp, src->timestamp);
DBG("Copy %zd bytes of data", src->bytelen); DBG("Copy %zd bytes of data", src->bytelen);
void *srcdata = src->data; void *srcdata = src->data;
if(isshm){ if(isshm){

View File

@@ -33,10 +33,28 @@
// semaphore for SHM protection // semaphore for SHM protection
#define SEM_NAME "ccdcapture" #define SEM_NAME "ccdcapture"
#define MODELNM_SZ 64
typedef union{
struct{
uint8_t dark : 1; // dark or light frame?
uint8_t havefocuser:1; // we have focuser device
uint8_t havewheel : 1; // have wheel device (TODO: what if we have more than one wheel?)
};
uint8_t all;
} camflags_t;
// format of single frame
typedef struct{
int w; int h; // width & height
int xoff; int yoff; // X and Y offset
} cc_frameformat;
// base image parameters - sent by socket and stored in shared memory // base image parameters - sent by socket and stored in shared memory
typedef struct{ // __attribute__((packed)) typedef struct { // __attribute__((packed))
uint32_t MAGICK; // magick (DEADBEEF) - to mark our shm uint32_t MAGICK; // magick (DEADBEEF) - to mark our shm
pthread_mutex_t mutex; // mutex for working with image data pthread_mutex_t mutex; // mutex for working with image data
uint8_t start_of_copyable_data; // service field - start of copyable data
double timestamp; // timestamp of image taken double timestamp; // timestamp of image taken
int w, h; // image size int w, h; // image size
int gotstat; // stat counted int gotstat; // stat counted
@@ -46,10 +64,27 @@ typedef struct{ // __attribute__((packed))
uint8_t bitpix; // bits per pixel (8 or 16) uint8_t bitpix; // bits per pixel (8 or 16)
uint16_t max, min; // min/max values uint16_t max, min; // min/max values
float avr, std; // statistics float avr, std; // statistics
size_t headerstrings; // amount of records in header // camera data (nan for float if camera have no such property)
camflags_t flags; // flags
float pixel_x, pixel_y; // pixel size, mkm
float gain, brightness; // current gain & brightness config
float ccd_temp; // cold side temperature
float tbody, thot; // camera body & hot Peltier temperatures
float exposure_time; // exposure time of given frame
uint16_t bin_x, bin_y; // binning
char model[MODELNM_SZ]; // camera model
cc_frameformat field, array, geometry; // copy of same `camera` fields
// focuser data
float focpos, focmin, focmax;// current, minimal and maximal F position
float foc_temp; // focuser temperature
char fmodel[MODELNM_SZ]; // focuser model
// wheel data
uint8_t wheelpos, wheelmax; // current and maximal wheel position
float wheel_temp; // wheel temperature
char wmodel[MODELNM_SZ]; // wheel model
uint8_t end_of_copyable_data; // service field - end of copyable data
/* `data` is uint8_t or uint16_t depending on `bitpix` */ /* `data` is uint8_t or uint16_t depending on `bitpix` */
void *data; // pointer to data (next byte after this struct) - only for server void *data; // pointer to data (next byte after this struct) - only for server
char fitsheader[FITS_HEADER_STRINGS_MAX][FLEN_CARD]; // FITS-header for given image
} cc_IMG; } cc_IMG;
typedef struct{ typedef struct{
@@ -72,12 +107,6 @@ typedef struct{
#define cc_buff_trylock(b) pthread_mutex_trylock(&((b)->mutex)) #define cc_buff_trylock(b) pthread_mutex_trylock(&((b)->mutex))
#define cc_buff_unlock(b) pthread_mutex_unlock(&((b)->mutex)) #define cc_buff_unlock(b) pthread_mutex_unlock(&((b)->mutex))
// format of single frame
typedef struct{
int w; int h; // width & height
int xoff; int yoff; // X and Y offset
} cc_frameformat;
typedef enum{ typedef enum{
SHUTTER_OPEN, // open shutter now SHUTTER_OPEN, // open shutter now
SHUTTER_CLOSE, // close shutter now SHUTTER_CLOSE, // close shutter now
@@ -264,6 +293,7 @@ typedef enum{
#define CC_CMD_FASTSPD "fastspeed" #define CC_CMD_FASTSPD "fastspeed"
#define CC_CMD_DARK "dark" #define CC_CMD_DARK "dark"
#define CC_CMD_INFTY "infty" #define CC_CMD_INFTY "infty"
#if 0
// FITS file keywords // FITS file keywords
#define CC_CMD_GETHEADERS "getheaders" #define CC_CMD_GETHEADERS "getheaders"
#define CC_CMD_AUTHOR "author" #define CC_CMD_AUTHOR "author"
@@ -272,6 +302,7 @@ typedef enum{
#define CC_CMD_OBJECT "object" #define CC_CMD_OBJECT "object"
#define CC_CMD_PROGRAM "program" #define CC_CMD_PROGRAM "program"
#define CC_CMD_OBJTYPE "objtype" #define CC_CMD_OBJTYPE "objtype"
#endif
// focuser // focuser
#define CC_CMD_FOCLIST "foclist" #define CC_CMD_FOCLIST "foclist"
@@ -311,10 +342,10 @@ typedef struct{ // custom plugin parameters
cc_hresult cc_plugin_customcmd(const char *str, cc_parhandler_t *handlers, cc_charbuff *ans); cc_hresult cc_plugin_customcmd(const char *str, cc_parhandler_t *handlers, cc_charbuff *ans);
void *open_plugin(const char *name); void *cc_open_plugin(const char *name);
cc_Focuser *open_focuser(const char *pluginname); cc_Focuser *cc_open_focuser(const char *pluginname);
cc_Camera *open_camera(const char *pluginname); cc_Camera *cc_open_camera(const char *pluginname);
cc_Wheel *open_wheel(const char *pluginname); cc_Wheel *cc_open_wheel(const char *pluginname);
cc_charbuff *cc_charbufnew(); cc_charbuff *cc_charbufnew();
int cc_charbuftest(cc_charbuff *b, size_t maxsize); int cc_charbuftest(cc_charbuff *b, size_t maxsize);
@@ -351,8 +382,9 @@ cc_hresult cc_getint(int fd, cc_strbuff *cbuf, const char *cmd, int *val);
cc_hresult cc_setfloat(int fd, cc_strbuff *cbuf, const char *cmd, float val); cc_hresult cc_setfloat(int fd, cc_strbuff *cbuf, const char *cmd, float val);
cc_hresult cc_getfloat(int fd, cc_strbuff *cbuf, const char *cmd, float *val); cc_hresult cc_getfloat(int fd, cc_strbuff *cbuf, const char *cmd, float *val);
int cc_addrecord(fitsfile *fp, char *rec);
char *cc_nextkw(char *buf, char record[FLEN_CARD], int newlines); char *cc_nextkw(char *buf, char record[FLEN_CARD], int newlines);
size_t cc_kwfromfile(cc_IMG *img, char *filename); int cc_kwfromfile(fitsfile *fp, char *filename);
//int cc_charbuf2kw(cc_charbuff *b, fitsfile *f); //int cc_charbuf2kw(cc_charbuff *b, fitsfile *f);
void cc_init_sem(int isserver); void cc_init_sem(int isserver);

302
ccdfunc.c
View File

@@ -37,6 +37,9 @@ cc_Camera *camera = NULL;
cc_Focuser *focuser = NULL; cc_Focuser *focuser = NULL;
cc_Wheel *wheel = NULL; cc_Wheel *wheel = NULL;
static float focmaxpos = 0.f, focminpos = 0.f; // focuser extremal positions
static int wmaxpos = 0; // wheel max pos
static int fitserror = 0; static int fitserror = 0;
#define TRYFITS(f, ...) \ #define TRYFITS(f, ...) \
@@ -63,8 +66,8 @@ static size_t curtime(char *s_time){ // current date/time
// check if I can create file prefix_XXXX.fits // check if I can create file prefix_XXXX.fits
static int check_filenameprefix(char *buff, int buflen){ static int check_filenameprefix(char *buff, int buflen){
for(int num = 1; num < 10000; num++){ for(int num = 1; num < 1000000; num++){
if(snprintf(buff, buflen-1, "%s_%04d.fits", GP->outfileprefix, num) < 1) if(snprintf(buff, buflen-1, "%s_%06d.fits", GP->outfileprefix, num) < 1)
return FALSE; return FALSE;
struct stat filestat; struct stat filestat;
if(stat(buff, &filestat)) // no such file or can't stat() if(stat(buff, &filestat)) // no such file or can't stat()
@@ -73,6 +76,7 @@ static int check_filenameprefix(char *buff, int buflen){
return FALSE; return FALSE;
} }
#if 0
/** /**
* @brief fillFITSheader (server-side only!) - update img->fitsheader by image data and additional headers * @brief fillFITSheader (server-side only!) - update img->fitsheader by image data and additional headers
* @param img (io) - image to update * @param img (io) - image to update
@@ -86,7 +90,7 @@ size_t fillFITSheader(cc_IMG *img){
do{ int status = 0, kt = 0; \ do{ int status = 0, kt = 0; \
fits_parse_template(in, card, &kt, &status); \ fits_parse_template(in, card, &kt, &status); \
if(status) fits_report_error(stderr, status);\ if(status) fits_report_error(stderr, status);\
else if(img->headerstrings < FITS_HEADER_STRINGS_MAX) snprintf(img->fitsheader[img->headerstrings++], FLEN_CARD, "%s", card); \ else addrecord(fp, card); \
}while(0) }while(0)
#define FORMINT(key, val, comment) do{ \ #define FORMINT(key, val, comment) do{ \
snprintf(templ, FLEN_CARD, "%s = %d / %s", key, val, comment); \ snprintf(templ, FLEN_CARD, "%s = %d / %s", key, val, comment); \
@@ -190,13 +194,17 @@ do{ int status = 0, kt = 0; \
if(GP->instrument) FORMSTR("INSTRUME", GP->instrument, "Instrument"); if(GP->instrument) FORMSTR("INSTRUME", GP->instrument, "Instrument");
return img->headerstrings; return img->headerstrings;
} }
#endif
// save FITS file `img` into GP->outfile or GP->outfileprefix_XXXX.fits // save FITS file `img` into GP->outfile or GP->outfileprefix_XXXX.fits
// if outp != NULL, put into it strdup() of last file name // if outp != NULL, put into it strdup() of last file name
// return FALSE if failed // return FALSE if failed
int saveFITS(cc_IMG *img, char **outp){ int saveFITS(cc_IMG *img, char **outp){
int ret = FALSE; int ret = FALSE;
if(!img || !img->data || !outp) return FALSE; if(!img || !img->data){
WARNX("Bad data");
return FALSE;
}
char fnam[PATH_MAX+1]; char fnam[PATH_MAX+1];
if(!GP->outfile && !GP->outfileprefix){ if(!GP->outfile && !GP->outfileprefix){
LOGWARN("Image not saved: neither filename nor filename prefix pointed"); LOGWARN("Image not saved: neither filename nor filename prefix pointed");
@@ -216,17 +224,19 @@ int saveFITS(cc_IMG *img, char **outp){
} }
snprintf(fnam, PATH_MAX, "!%s", GP->outfile); snprintf(fnam, PATH_MAX, "!%s", GP->outfile);
} }
DBG("Will save as %s", GP->outfile);
}else{ // user pointed output file prefix }else{ // user pointed output file prefix
if(!check_filenameprefix(fnam, PATH_MAX)){ if(!check_filenameprefix(fnam, PATH_MAX)){
WARNX(_("Can't save file with prefix %s"), GP->outfileprefix); WARNX(_("Can't save file with prefix %s"), GP->outfileprefix);
LOGERR("Can't save image with prefix %s", GP->outfileprefix); LOGERR("Can't save image with prefix %s", GP->outfileprefix);
return FALSE;
} }
DBG("Will save with prefix %s", GP->outfileprefix);
} }
pthread_mutex_lock(&img->mutex); pthread_mutex_lock(&img->mutex);
int width = img->w, height = img->h; int width = img->w, height = img->h;
long naxes[2] = {width, height}; long naxes[2] = {width, height};
struct tm *tm_time; struct tm *tm_time;
char bufc[FLEN_CARD];
double dsavetime = sl_dtime(); double dsavetime = sl_dtime();
time_t savetime = time(NULL); time_t savetime = time(NULL);
fitsfile *fp; fitsfile *fp;
@@ -238,19 +248,113 @@ int saveFITS(cc_IMG *img, char **outp){
else TRYFITS(fits_create_img, fp, USHORT_IMG, 2, naxes); else TRYFITS(fits_create_img, fp, USHORT_IMG, 2, naxes);
if(fitserror) goto cloerr; if(fitserror) goto cloerr;
// write header // write header
char key[FLEN_KEYWORD]; char card[FLEN_CARD], templ[2*FLEN_CARD], bufc[FLEN_CARD];
for(size_t i = 0; i < img->headerstrings; ++i){ calculate_stat(img);
char *rec = img->fitsheader[i]; #define FORMKW(in) \
char *eq = strchr(rec, '='); do{ int status = 0, kt = 0; \
int status = 0; fits_parse_template(in, card, &kt, &status); \
if(eq){ // found 'key = value / comment' if(status) fits_report_error(stderr, status);\
size_t l = eq - rec; else cc_addrecord(fp, card); \
if(l > FLEN_KEYWORD-1) l = FLEN_KEYWORD-1; }while(0)
memcpy(key, rec, l); key[l] = 0; #define FORMINT(key, val, comment) do{ \
fits_update_card(fp, key, rec, &status); snprintf(templ, FLEN_CARD, "%s = %d / %s", key, val, comment); \
}else fits_write_record(fp, rec, &status); FORMKW(templ); \
if(status) fits_report_error(stderr, status); }while(0)
#define FORMFLT(key, val, comment) do{ \
snprintf(templ, FLEN_CARD, "%s = %g / %s", key, val, comment); \
FORMKW(templ); \
}while(0)
#define FORMSTR(key, val, comment) do{ \
snprintf(templ, 2*FLEN_CARD, "%s = '%s' / %s", key, val, comment); \
FORMKW(templ); \
}while(0)
FORMKW("ORIGIN = 'SAO RAS' / Organization responsible for the data");
FORMKW("OBSERVAT = 'Special Astrophysical Observatory, Russia' / Observatory name");
if(img->model[0]) FORMSTR("DETECTOR", img->model, "Detector model");
if(GP->instrument) FORMSTR("INSTRUME", GP->instrument, "Instrument");
else FORMKW("INSTRUME = 'direct imaging' / Instrument");
FORMFLT("EXPTIME", img->exposure_time, "Actual exposition time (sec)");
// BINNING / Binning
snprintf(templ, FLEN_CARD, "BINNING = '%d x %d' / Binning (hbin x vbin)", img->bin_x, img->bin_y);
FORMKW(templ);
FORMINT("XBINNING", img->bin_x, "Binning factor used on X axis");
FORMINT("YBINNING", img->bin_y, "Binning factor used on Y axis");
// pixel size
if(!isnan(img->pixel_x)){
FORMFLT("PIXSIZEX", img->pixel_x, "Pixel size X (um)");
if(!isnan(img->pixel_y)){
FORMFLT("PIXSIZEY", img->pixel_y, "Pixel size Y (um)");
snprintf(templ, FLEN_CARD, "PIXSIZE = '%.1f x %.1f' / Pixel size (h x v), um", img->pixel_x, img->pixel_y);
FORMKW(templ);
}
} }
// imtype
if(img->flags.dark) sprintf(bufc, "dark");
else if(GP->objtype) strncpy(bufc, GP->objtype, FLEN_CARD);
else sprintf(bufc, "light");
FORMSTR("IMAGETYP", bufc, "Image type");
// geometry
snprintf(templ, FLEN_CARD, "VIEWFLD = '(%d, %d)(%d, %d)' / Camera maximal field of view", img->field.xoff, img->field.yoff,
img->field.xoff + img->field.w, img->field.yoff + img->field.h);
FORMKW(templ);
snprintf(templ, FLEN_CARD, "ARRAYFLD = '(%d, %d)(%d, %d)' / Camera full array size (with overscans)", img->array.xoff, img->array.yoff,
img->array.xoff + img->array.w, img->array.yoff + img->array.h);
FORMKW(templ);
snprintf(templ, FLEN_CARD, "GEOMETRY = '(%d, %d)(%d, %d)' / Camera current frame geometry", img->geometry.xoff, img->geometry.yoff,
img->geometry.xoff + img->geometry.w, img->geometry.yoff + img->geometry.h);
FORMKW(templ);
FORMINT("X0", img->geometry.xoff, "Subframe left border without binning");
FORMINT("Y0", img->geometry.yoff, "Subframe upper border without binning");
// stat
FORMINT("DATAMIN", 0, "Min pixel value");
FORMINT("DATAMAX", (1<<img->bitpix) - 1, "Max pixel value");
if(img->gotstat){
FORMINT("STATMIN", img->min, "Min data value");
FORMINT("STATMAX", img->max, "Max data value");
FORMFLT("STATAVR", img->avr, "Average data value");
FORMFLT("STATSTD", img->std, "Std. of data value");
}
// camera parameters
if(!isnan(img->gain)) FORMFLT("CAMGAIN", img->gain, "CMOS gain value");
if(!isnan(img->brightness)) FORMFLT("CAMBRIGH", img->brightness, "CMOS brightness value");
if(!isnan(img->ccd_temp)) FORMFLT("CAMTEMP", img->ccd_temp, "Camera temperature at exp. end, degr C");
if(!isnan(img->tbody)) FORMFLT("BODYTEMP", img->tbody, "Camera body temperature at exp. end, degr C");
if(!isnan(img->thot)) FORMFLT("HOTTEMP", img->thot, "Camera peltier hot side temperature at exp. end, degr C");
// wheel
if(img->flags.havewheel){
if(img->wmodel[0]) FORMSTR("WHEEL", img->wmodel, "Filter wheel model");
if(img->wheelmax > 0) FORMINT("FILTMAX", img->wheelmax, "Amount of filter positions");
FORMINT("FILTER", img->wheelpos, "Current filter position");
if(!isnan(img->wheel_temp)) FORMFLT("FILTTEMP", img->wheel_temp, "Filter wheel body temperature, degr C");
}
// focuser
if(img->flags.havefocuser){
if(img->fmodel[0]) FORMSTR("FOCUSER", img->fmodel, "Focuser model");
if(!isnan(img->focpos)) FORMFLT("FOCUS", img->focpos, "Current focuser position, mm");
if(!isnan(img->focmin)) FORMFLT("FOCMIN", img->focmin, "Minimal focuser position, mm");
if(!isnan(img->focmax)) FORMFLT("FOCMAX", img->focmax, "Maximal focuser position, mm");
if(!isnan(img->foc_temp)) FORMFLT("FOCTEMP", img->foc_temp, "Focuser body temperature, degr C");
}
snprintf(templ, 2*FLEN_CARD, "TIMESTAM = %.6f / Time of acquisition end (UNIX)", img->timestamp);
FORMKW(templ);
FORMINT("IMSEQNO", (int)img->imnumber, "Number of image in full sequence");
if(GP->addhdr){ // add records from server-side files
char **nxtfile = GP->addhdr;
while(*nxtfile){
int got = cc_kwfromfile(fp, *nxtfile);
if(got == 0) WARNX(_("Added 0 FITS records from %s"), *nxtfile);
else verbose(VERBOSE_SECONDARY, _("Added %d FITS records from %s"), got, *nxtfile);
++nxtfile;
}
}
// add these keywords after all to override records from files
if(GP->observers) FORMSTR("OBSERVER", GP->observers, "Observers");
if(GP->prog_id) FORMSTR("PROG-ID", GP->prog_id, "Observation program identifier");
if(GP->author) FORMSTR("AUTHOR", GP->author, "Author of the program");
if(GP->objname) FORMSTR("OBJECT", GP->objname, "Object name");
// creation date/time // creation date/time
int s = 0; int s = 0;
fits_write_date(fp, &s); fits_write_date(fp, &s);
@@ -274,9 +378,8 @@ fits_write_history(fp, bufhdr->buf, &s);
//WRITEKEY(fp, TSTRING, "FILE", n, "Input file original name"); //WRITEKEY(fp, TSTRING, "FILE", n, "Input file original name");
if(nbytes == 1) TRYFITS(fits_write_img, fp, TBYTE, 1, width * height, img->data); if(nbytes == 1) TRYFITS(fits_write_img, fp, TBYTE, 1, width * height, img->data);
else TRYFITS(fits_write_img, fp, TUSHORT, 1, width * height, img->data); else TRYFITS(fits_write_img, fp, TUSHORT, 1, width * height, img->data);
if(fitserror) goto cloerr;
TRYFITS(fits_close_file, fp);
cloerr: cloerr:
TRYFITS(fits_close_file, fp);
pthread_mutex_unlock(&img->mutex); pthread_mutex_unlock(&img->mutex);
if(fitserror == 0){ if(fitserror == 0){
LOGMSG("Save file '%s'", fnam); LOGMSG("Save file '%s'", fnam);
@@ -289,7 +392,7 @@ cloerr:
ret = TRUE; ret = TRUE;
}else{ }else{
LOGERR("Can't save %s", fnam); LOGERR("Can't save %s", fnam);
WARNX(_("Error saving file")); WARNX(_("Error saving file %s"), fnam);
fitserror = 0; fitserror = 0;
} }
return ret; return ret;
@@ -357,7 +460,7 @@ cc_Focuser *startFocuser(){
return NULL; return NULL;
}else{ }else{
char *plugin = GP->commondev ? GP->commondev : GP->focuserdev; char *plugin = GP->commondev ? GP->commondev : GP->focuserdev;
if(!(focuser = open_focuser(plugin))) return NULL; if(!(focuser = cc_open_focuser(plugin))) return NULL;
} }
if(!focuser->check()){ if(!focuser->check()){
verbose(VERBOSE_MESG, _("No focusers found")); verbose(VERBOSE_MESG, _("No focusers found"));
@@ -367,6 +470,38 @@ cc_Focuser *startFocuser(){
return focuser; return focuser;
} }
/**
* @brief setFocuserNo - set active focuser device number
* @param num - new number
* @param min (o) - minimal position
* @param max (o) - maximal position
* @return FALSE if failed
*/
int setFocuserNo(int num, float *min, float *max){
if(!focuser) return FALSE;
if(num < 0) num = 0;
if(num > focuser->Ndevices - 1){
WARNX(_("Found %d focusers, you point number %d"), focuser->Ndevices, num);
LOGERR("Found %d focusers, user pointed number %d", focuser->Ndevices, num);
return FALSE;
}
if(!focuser->setDevNo(num)){
WARNX(_("Can't set active focuser number"));
LOGERR("Can't set active focuser number");
return FALSE;
}
LOGMSG("Set focuser device number to %d", num);
if(!focuser->getMinPos || !focuser->getMinPos(&focminpos) ||
!focuser->getMaxPos || !focuser->getMaxPos(&focmaxpos)){
WARNX(_("Can't get focuser limit positions"));
LOGWARN("Can't get focuser limit positions");
}else{
if(min) *min = focminpos;
if(max) *max = focmaxpos;
}
return TRUE;
}
void focclose(){ void focclose(){
if(!focuser) return; if(!focuser) return;
focuser->close(); focuser->close();
@@ -387,16 +522,7 @@ void focusers(){
verbose(VERBOSE_PRIMARY, _("Found focuser #%d: %s\n"), i, modname); verbose(VERBOSE_PRIMARY, _("Found focuser #%d: %s\n"), i, modname);
} }
} }
int num = GP->focdevno; if(!setFocuserNo(GP->focdevno, NULL, NULL)) goto retn;
if(num < 0) num = 0;
if(num > focuser->Ndevices - 1){
WARNX(_("Found %d focusers, you point number %d"), focuser->Ndevices, num);
goto retn;
}
if(!focuser->setDevNo(num)){
WARNX(_("Can't set active focuser number"));
goto retn;
}
char buf[BUFSIZ]; char buf[BUFSIZ];
if(focuser->getModelName(buf, BUFSIZ)){ if(focuser->getModelName(buf, BUFSIZ)){
verbose(VERBOSE_SECONDARY, "Focuser model: %s", buf); verbose(VERBOSE_SECONDARY, "Focuser model: %s", buf);
@@ -406,14 +532,10 @@ void focusers(){
verbose(VERBOSE_PRIMARY, "FOCTEMP=%.1f", t); verbose(VERBOSE_PRIMARY, "FOCTEMP=%.1f", t);
DBG("FOCTEMP=%.1f", t); DBG("FOCTEMP=%.1f", t);
} }
float minpos, maxpos, curpos; verbose(VERBOSE_PRIMARY, "FOCMINPOS=%g", focminpos);
if(!focuser->getMinPos(&minpos) || !focuser->getMaxPos(&maxpos)){ verbose(VERBOSE_PRIMARY, "FOCMAXPOS=%g", focmaxpos);
WARNX(_("Can't get focuser limit positions")); float curpos;
goto retn; DBG("FOCMINPOS=%g, FOCMAXPOS=%g", focminpos, focmaxpos);
}
verbose(VERBOSE_PRIMARY, "FOCMINPOS=%g", minpos);
verbose(VERBOSE_PRIMARY, "FOCMAXPOS=%g", maxpos);
DBG("FOCMINPOS=%g, FOCMAXPOS=%g", minpos, maxpos);
if(!focuser->getPos(&curpos)){ if(!focuser->getPos(&curpos)){
WARNX(_("Can't get current focuser position")); WARNX(_("Can't get current focuser position"));
goto retn; goto retn;
@@ -428,11 +550,11 @@ void focusers(){
tagpos = curpos + GP->addsteps; tagpos = curpos + GP->addsteps;
} }
DBG("tagpos: %g", tagpos); DBG("tagpos: %g", tagpos);
if(tagpos < minpos || tagpos > maxpos){ if(tagpos < focminpos || tagpos > focmaxpos){
WARNX(_("Can't set position %g: out of limits [%g, %g]"), tagpos, minpos, maxpos); WARNX(_("Can't set position %g: out of limits [%g, %g]"), tagpos, focminpos, focmaxpos);
goto retn; goto retn;
} }
if(tagpos - minpos < __FLT_EPSILON__){ if(tagpos - focminpos < __FLT_EPSILON__){
if(!focuser->home(GP->async)) WARNX(_("Can't home focuser")); if(!focuser->home(GP->async)) WARNX(_("Can't home focuser"));
}else{ }else{
if(!focuser->setAbsPos(GP->async, tagpos)) WARNX(_("Can't set position %g"), tagpos); if(!focuser->setAbsPos(GP->async, tagpos)) WARNX(_("Can't set position %g"), tagpos);
@@ -447,7 +569,7 @@ cc_Wheel *startWheel(){
return NULL; return NULL;
}else{ }else{
char *plugin = GP->commondev ? GP->commondev : GP->wheeldev; char *plugin = GP->commondev ? GP->commondev : GP->wheeldev;
if(!(wheel = open_wheel(plugin))) return NULL; if(!(wheel = cc_open_wheel(plugin))) return NULL;
} }
if(!wheel->check()){ if(!wheel->check()){
verbose(VERBOSE_MESG, _("No wheels found")); verbose(VERBOSE_MESG, _("No wheels found"));
@@ -457,6 +579,35 @@ cc_Wheel *startWheel(){
return wheel; return wheel;
} }
/**
* @brief setWheelNo - set number of active wheel
* @param num - number
* @param max (o) - if !NULL - maxpos
* @return FALSE if failed
*/
int setWheelNo(int num, int *max){
if(!wheel) return FALSE;
if(num < 0) num = 0;
if(num > wheel->Ndevices - 1){
WARNX(_("Found %d wheels, you point number %d"), wheel->Ndevices, num);
LOGERR("Found %d wheels, user pointed number %d", wheel->Ndevices, num);
return FALSE;
}
if(!wheel->setDevNo(num)){
WARNX(_("Can't set active wheel number"));
LOGERR("Can't set active wheel number");
return FALSE;
}
LOGMSG("Set wheel device number to %d", num);
if(!wheel->getMaxPos || !wheel->getMaxPos(&wmaxpos)){
WARNX(_("Can't get max wheel position"));
LOGERR("Can't get max wheel position");
}else{
if(max) *max = wmaxpos;
}
return TRUE;
}
void closewheel(){ void closewheel(){
if(!wheel) return; if(!wheel) return;
wheel->close(); wheel->close();
@@ -477,16 +628,7 @@ void wheels(){
verbose(VERBOSE_PRIMARY, _("Found wheel #%d: %s\n"), i, modname); verbose(VERBOSE_PRIMARY, _("Found wheel #%d: %s\n"), i, modname);
} }
} }
int num = GP->whldevno; if(!setWheelNo(GP->whldevno, NULL)) goto retn;
if(num < 0) num = 0;
if(num > wheel->Ndevices - 1){
WARNX(_("Found %d wheels, you point number %d"), wheel->Ndevices, num);
goto retn;
}
if(!wheel->setDevNo(num)){
WARNX(_("Can't set active wheel number"));
goto retn;
}
char buf[BUFSIZ]; char buf[BUFSIZ];
if(wheel->getModelName(buf, BUFSIZ)){ if(wheel->getModelName(buf, BUFSIZ)){
verbose(VERBOSE_SECONDARY, _("Wheel model: %s"), buf); verbose(VERBOSE_SECONDARY, _("Wheel model: %s"), buf);
@@ -495,19 +637,15 @@ void wheels(){
if(wheel->getTbody(&t)){ if(wheel->getTbody(&t)){
verbose(VERBOSE_PRIMARY, "WHEELTEMP=%.1f", t); verbose(VERBOSE_PRIMARY, "WHEELTEMP=%.1f", t);
} }
int pos, maxpos; int pos;
if(wheel->getPos(&pos)){ if(wheel->getPos(&pos)){
verbose(VERBOSE_PRIMARY, "WHEELPOS=%d", pos); verbose(VERBOSE_PRIMARY, "WHEELPOS=%d", pos);
}else WARNX(_("Can't get current wheel position")); }else WARNX(_("Can't get current wheel position"));
if(!wheel->getMaxPos(&maxpos)){ verbose(VERBOSE_PRIMARY, "WHEELMAXPOS=%d", wmaxpos);
WARNX(_("Can't get max wheel position"));
goto retn;
}
verbose(VERBOSE_PRIMARY, "WHEELMAXPOS=%d", maxpos);
pos = GP->setwheel; pos = GP->setwheel;
if(pos == -1) goto retn; // no wheel commands if(pos == -1) goto retn; // no wheel commands
if(pos < 0 || pos > maxpos){ if(pos < 0 || pos > wmaxpos){
WARNX(_("Wheel position should be from 0 to %d"), maxpos); WARNX(_("Wheel position should be from 0 to %d"), wmaxpos);
goto retn; goto retn;
} }
if(!wheel->setPos(pos)) if(!wheel->setPos(pos))
@@ -551,7 +689,7 @@ cc_Camera *startCCD(){
return NULL; return NULL;
}else{ }else{
char *plugin = GP->commondev ? GP->commondev : GP->cameradev; char *plugin = GP->commondev ? GP->commondev : GP->cameradev;
if(!(camera = open_camera(plugin))) return NULL; if(!(camera = cc_open_camera(plugin))) return NULL;
} }
if(!camera->check()){ if(!camera->check()){
WARNX(_("No cameras found")); WARNX(_("No cameras found"));
@@ -753,6 +891,46 @@ retn:
return rtn; return rtn;
} }
void fill_image_fields(cc_IMG *ima){
if(!ima) return;
ima->gotstat = 0; // fresh image without statistics - recalculate when save
ima->timestamp = sl_dtime(); // set timestamp
if(!camera->getgain || !camera->getgain(&ima->gain)) ima->gain = NAN;
if(!camera->getbrightness || !camera->getbrightness(&ima->brightness)) ima->brightness = NAN;
if(!camera->getTcold || !camera->getTcold(&ima->ccd_temp)){
DBG("Can't get CCD temperature");
ima->ccd_temp = NAN;
}else DBG("CCD Temperature=%g", ima->ccd_temp);
if(!camera->getTbody || !camera->getTbody(&ima->tbody)){
DBG("Can't get body temperature");
ima->tbody = NAN;
}else DBG("Body Temperature=%g", ima->tbody);
if(!camera->getThot || !camera->getThot(&ima->thot)){
DBG("Can't get Thot");
ima->thot = NAN;
}else DBG("Hot Temperature=%g", ima->thot);
ima->flags.dark = GP->dark;
ima->field = camera->field;
ima->array = camera->array;
ima->geometry = camera->geometry;
DBG("Geom: off(%d, %d), size(%d, %d)", ima->geometry.xoff, ima->geometry.yoff,
ima->geometry.w, ima->geometry.h);
if(wheel){
int i;
ima->flags.havewheel = 1;
if(wheel->getPos(&i)) ima->wheelpos = (uint8_t) i;
ima->wheelmax = wmaxpos;
if(!wheel->getTbody || !wheel->getTbody(&ima->wheel_temp)) ima->wheel_temp = NAN;
}
if(focuser){
ima->flags.havefocuser = 1;
ima->focmin = focminpos;
ima->focmax = focmaxpos;
if(!focuser->getPos || !focuser->getPos(&ima->focpos)) ima->focpos = NAN;
if(!focuser->getTbody || !focuser->getTbody(&ima->foc_temp)) ima->foc_temp = NAN;
}
}
/* /*
* Main CCD process in standalone mode without viewer: get N images and save them * Main CCD process in standalone mode without viewer: get N images and save them
*/ */

View File

@@ -29,12 +29,15 @@ int saveFITS(cc_IMG *img, char **outp); // for imageview module
void focusers(); void focusers();
void wheels(); void wheels();
int prepare_ccds(); int prepare_ccds();
void fill_image_fields(cc_IMG *ima);
void ccds(); void ccds();
void camstop(); void camstop();
cc_Camera *startCCD(); cc_Camera *startCCD();
cc_Wheel *startWheel(); cc_Wheel *startWheel();
int setWheelNo(int num, int *max);
cc_Focuser *startFocuser(); cc_Focuser *startFocuser();
int setFocuserNo(int num, float *min, float *max);
void focclose(); void focclose();
void closewheel(); void closewheel();
void closecam(); void closecam();

View File

@@ -263,6 +263,7 @@ static void send_headers(int sock){
if(GP->dark) SENDMSGW(CC_CMD_DARK, "=1"); if(GP->dark) SENDMSGW(CC_CMD_DARK, "=1");
else SENDMSGW(CC_CMD_DARK, "=0"); else SENDMSGW(CC_CMD_DARK, "=0");
} }
#if 0
// FITS header keywords: // FITS header keywords:
#define CHKHDR(x, cmd) do{if(x) SENDMSG(cmd "=%s", x);}while(0) #define CHKHDR(x, cmd) do{if(x) SENDMSG(cmd "=%s", x);}while(0)
CHKHDR(GP->author, CC_CMD_AUTHOR); CHKHDR(GP->author, CC_CMD_AUTHOR);
@@ -272,6 +273,7 @@ static void send_headers(int sock){
CHKHDR(GP->prog_id, CC_CMD_PROGRAM); CHKHDR(GP->prog_id, CC_CMD_PROGRAM);
CHKHDR(GP->objtype, CC_CMD_OBJTYPE); CHKHDR(GP->objtype, CC_CMD_OBJTYPE);
#undef CHKHDR #undef CHKHDR
#endif
} }
/** /**
@@ -407,7 +409,7 @@ static int getsockimage(int *imsock){
* @param askheader == TRUE for storing FITS-header * @param askheader == TRUE for storing FITS-header
* @return FALSE if failed to catch image * @return FALSE if failed to catch image
*/ */
static int getimage(int askheader){ static int getimage(/*int askheader*/){
FNAME(); FNAME();
int imsock = -1, shmlocked = FALSE, ret = FALSE; int imsock = -1, shmlocked = FALSE, ret = FALSE;
static double oldtimestamp = -1.; static double oldtimestamp = -1.;
@@ -434,6 +436,7 @@ static int getimage(int askheader){
oldtimestamp = locima->timestamp; oldtimestamp = locima->timestamp;
atomic_store(&grabno, locima->imnumber); atomic_store(&grabno, locima->imnumber);
TIMESTAMP("Got image #%zd", locima->imnumber); TIMESTAMP("Got image #%zd", locima->imnumber);
#if 0
if(askheader){ // read FITS-header for later saving if(askheader){ // read FITS-header for later saving
if(shmima){ if(shmima){
if(locima->headerstrings > FITS_HEADER_STRINGS_MAX){ if(locima->headerstrings > FITS_HEADER_STRINGS_MAX){
@@ -463,6 +466,7 @@ static int getimage(int askheader){
} }
} }
}else locima->headerstrings = 0; }else locima->headerstrings = 0;
#endif
}else WARNX(_("Still got old image")); }else WARNX(_("Still got old image"));
eofg: eofg:
if(imsock > -1) close(imsock); // reopen in next time in case of error if(imsock > -1) close(imsock); // reopen in next time in case of error
@@ -549,7 +553,7 @@ void client(int sock){
if(lastImNo != cur){ if(lastImNo != cur){
lastImNo = cur; lastImNo = cur;
verbose(VERBOSE_SECONDARY, _("Frame ready, try to grab")); verbose(VERBOSE_SECONDARY, _("Frame ready, try to grab"));
if(!getimage(TRUE)){ if(!getimage(/*TRUE*/)){
WARNX(_("Can't get next image")); WARNX(_("Can't get next image"));
}else{ }else{
if(saveFITS(locima, &lastfilename)){ if(saveFITS(locima, &lastfilename)){
@@ -640,7 +644,7 @@ static void *grabnext(void _U_ *arg){
} }
lastImNo = cur; lastImNo = cur;
TIMESTAMP("Frame ready (%d from start)", cur); TIMESTAMP("Frame ready (%d from start)", cur);
getimage(FALSE); getimage(/*FALSE*/);
} }
return NULL; return NULL;
} }
@@ -667,7 +671,7 @@ static void *waitimage(void _U_ *arg){
lastImNo = cur; lastImNo = cur;
TIMESTAMP("End of cycle #%d, start new", cur); TIMESTAMP("End of cycle #%d, start new", cur);
TIMEINIT(); TIMEINIT();
getimage(FALSE); getimage(/*FALSE*/);
atomic_store(&expstate, CAMERA_IDLE); atomic_store(&expstate, CAMERA_IDLE);
DBG("Current state: %d", atomic_load(&expstate)); DBG("Current state: %d", atomic_load(&expstate));
} }

View File

@@ -1,4 +1,4 @@
/* /*
* This file is part of the CCD_Capture project. * This file is part of the CCD_Capture project.
* Copyright 2022 Edward V. Emelianov <edward.emelianoff@gmail.com>. * Copyright 2022 Edward V. Emelianov <edward.emelianoff@gmail.com>.
* *

Binary file not shown.

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-21 09:39+0300\n" "POT-Creation-Date: 2026-07-23 17:35+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"
@@ -17,57 +17,57 @@ msgstr ""
"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"
#: main.c:52 #: main.c:55
#, c-format #, c-format
msgid "Master killed with sig=%d" msgid "Master killed with sig=%d"
msgstr "" msgstr ""
#. slave: cancel exposition #. slave: cancel exposition
#: main.c:57 #: main.c:60
#, c-format #, c-format
msgid "Get signal %d - exit" msgid "Get signal %d - exit"
msgstr "" msgstr ""
#: main.c:88 #: main.c:91
msgid "Can't use outfile name and prefix together" msgid "Can't use outfile name and prefix together"
msgstr "" msgstr ""
#: main.c:91 ccdfunc.c:214 #: main.c:94 ccdfunc.c:222
#, c-format #, c-format
msgid "File %s exists!" msgid "File %s exists!"
msgstr "" msgstr ""
#: main.c:94 #: main.c:97
#, c-format #, c-format
msgid "Can't set answer timeout to %g" msgid "Can't set answer timeout to %g"
msgstr "" msgstr ""
#: main.c:98 #: main.c:101
msgid "" msgid ""
"Options `port` and `path` can't be used together! Point `port` for TCP " "Options `port` and `path` can't be used together! Point `port` for TCP "
"socket or `path` for UNIX." "socket or `path` for UNIX."
msgstr "" msgstr ""
#: main.c:103 #: main.c:106
#, c-format #, c-format
msgid "Wrong port value: %d" msgid "Wrong port value: %d"
msgstr "" msgstr ""
#: main.c:116 #: main.c:119
#, c-format #, c-format
msgid "Set image port to %s\n" msgid "Set image port to %s\n"
msgstr "" msgstr ""
#: main.c:119 #: main.c:122
msgid "Can't be client and standalone in same time!" msgid "Can't be client and standalone in same time!"
msgstr "" msgstr ""
#: main.c:124 #: main.c:127
#, c-format #, c-format
msgid "Log file %s @ level %d\n" msgid "Log file %s @ level %d\n"
msgstr "" msgstr ""
#: main.c:126 #: main.c:129
msgid "Can't create log file" msgid "Can't create log file"
msgstr "" msgstr ""
@@ -331,411 +331,422 @@ msgstr ""
msgid "%d unused parameters:\n" msgid "%d unused parameters:\n"
msgstr "" msgstr ""
#: ccdfunc.c:203 #: ccdfunc.c:211
msgid "Image not saved: neither filename nor filename prefix pointed" msgid "Image not saved: neither filename nor filename prefix pointed"
msgstr "" msgstr ""
#: ccdfunc.c:221 #: ccdfunc.c:230
#, c-format #, c-format
msgid "Can't save file with prefix %s" msgid "Can't save file with prefix %s"
msgstr "" msgstr ""
#: ccdfunc.c:283 #: ccdfunc.c:347
#, c-format
msgid "Added 0 FITS records from %s"
msgstr ""
#: ccdfunc.c:348
#, c-format
msgid "Added %d FITS records from %s"
msgstr ""
#: ccdfunc.c:386
#, c-format #, c-format
msgid "File saved as '%s'" msgid "File saved as '%s'"
msgstr "" msgstr ""
#: ccdfunc.c:292 #: ccdfunc.c:395
msgid "Error saving file" #, c-format
msgid "Error saving file %s"
msgstr "" msgstr ""
#: ccdfunc.c:347 #: ccdfunc.c:450
#, c-format #, c-format
msgid "Image stat:\n" msgid "Image stat:\n"
msgstr "" msgstr ""
#: ccdfunc.c:356 #: ccdfunc.c:459
msgid "Focuser device not pointed" msgid "Focuser device not pointed"
msgstr "" msgstr ""
#: ccdfunc.c:363 #: ccdfunc.c:466
msgid "No focusers found" msgid "No focusers found"
msgstr "" msgstr ""
#: ccdfunc.c:387 #: ccdfunc.c:484
#, c-format
msgid "Found focuser #%d: %s\n"
msgstr ""
#: ccdfunc.c:393
#, c-format #, c-format
msgid "Found %d focusers, you point number %d" msgid "Found %d focusers, you point number %d"
msgstr "" msgstr ""
#: ccdfunc.c:397 #: ccdfunc.c:489
msgid "Can't set active focuser number" msgid "Can't set active focuser number"
msgstr "" msgstr ""
#: ccdfunc.c:411 #: ccdfunc.c:496
msgid "Can't get focuser limit positions" msgid "Can't get focuser limit positions"
msgstr "" msgstr ""
#: ccdfunc.c:418 #: ccdfunc.c:522
#, c-format
msgid "Found focuser #%d: %s\n"
msgstr ""
#: ccdfunc.c:540
msgid "Can't get current focuser position" msgid "Can't get current focuser position"
msgstr "" msgstr ""
#: ccdfunc.c:432 #: ccdfunc.c:554
#, c-format #, c-format
msgid "Can't set position %g: out of limits [%g, %g]" msgid "Can't set position %g: out of limits [%g, %g]"
msgstr "" msgstr ""
#: ccdfunc.c:436 #: ccdfunc.c:558
msgid "Can't home focuser" msgid "Can't home focuser"
msgstr "" msgstr ""
#: ccdfunc.c:438 #: ccdfunc.c:560
#, c-format #, c-format
msgid "Can't set position %g" msgid "Can't set position %g"
msgstr "" msgstr ""
#: ccdfunc.c:446 #: ccdfunc.c:568
msgid "Wheel device not pointed" msgid "Wheel device not pointed"
msgstr "" msgstr ""
#: ccdfunc.c:453 #: ccdfunc.c:575
msgid "No wheels found" msgid "No wheels found"
msgstr "" msgstr ""
#: ccdfunc.c:477 #: ccdfunc.c:592
#, c-format
msgid "Found wheel #%d: %s\n"
msgstr ""
#: ccdfunc.c:483
#, c-format #, c-format
msgid "Found %d wheels, you point number %d" msgid "Found %d wheels, you point number %d"
msgstr "" msgstr ""
#: ccdfunc.c:487 #: ccdfunc.c:597
msgid "Can't set active wheel number" msgid "Can't set active wheel number"
msgstr "" msgstr ""
#: ccdfunc.c:492 #: ccdfunc.c:603
#, c-format
msgid "Wheel model: %s"
msgstr ""
#: ccdfunc.c:501
msgid "Can't get current wheel position"
msgstr ""
#: ccdfunc.c:503
msgid "Can't get max wheel position" msgid "Can't get max wheel position"
msgstr "" msgstr ""
#: ccdfunc.c:510
#, c-format
msgid "Wheel position should be from 0 to %d"
msgstr ""
#: ccdfunc.c:514
#, c-format
msgid "Can't set wheel position %d"
msgstr ""
#: ccdfunc.c:529
msgid "Camera plugin have no capture polling funtion."
msgstr ""
#: ccdfunc.c:535
#, c-format
msgid "%.1f seconds till exposition ends"
msgstr ""
#: ccdfunc.c:550
msgid "Camera device not pointed"
msgstr ""
#: ccdfunc.c:557 ccdfunc.c:558
msgid "No cameras found"
msgstr ""
#: ccdfunc.c:578
msgid "Camera plugin have no model name getter"
msgstr ""
#: ccdfunc.c:583
#, c-format
msgid "Found camera #%d: %s\n"
msgstr ""
#: ccdfunc.c:589
#, c-format
msgid "Found %d cameras, you point number %d"
msgstr ""
#: ccdfunc.c:593
msgid "Can't set active camera number"
msgstr ""
#: ccdfunc.c:599
msgid "Camera plugin have no custom commands"
msgstr ""
#: ccdfunc.c:608 ccdfunc.c:611
#, c-format
msgid "Command '%s'"
msgstr ""
#: ccdfunc.c:613
#, c-format
msgid " returns \"%s\""
msgstr ""
#: ccdfunc.c:624
msgid "Camera plugin have no fun speed setter"
msgstr ""
#: ccdfunc.c:627
msgid "Can't set fan speed"
msgstr ""
#: ccdfunc.c:628 #: ccdfunc.c:628
#, c-format #, c-format
msgid "Set fan speed to %d" msgid "Found wheel #%d: %s\n"
msgstr ""
#: ccdfunc.c:633
#, c-format
msgid "Camera model: %s"
msgstr "" msgstr ""
#: ccdfunc.c:634 #: ccdfunc.c:634
#, c-format #, c-format
msgid "Wheel model: %s"
msgstr ""
#: ccdfunc.c:643
msgid "Can't get current wheel position"
msgstr ""
#: ccdfunc.c:648
#, c-format
msgid "Wheel position should be from 0 to %d"
msgstr ""
#: ccdfunc.c:652
#, c-format
msgid "Can't set wheel position %d"
msgstr ""
#: ccdfunc.c:667
msgid "Camera plugin have no capture polling funtion."
msgstr ""
#: ccdfunc.c:673
#, c-format
msgid "%.1f seconds till exposition ends"
msgstr ""
#: ccdfunc.c:688
msgid "Camera device not pointed"
msgstr ""
#: ccdfunc.c:695 ccdfunc.c:696
msgid "No cameras found"
msgstr ""
#: ccdfunc.c:716
msgid "Camera plugin have no model name getter"
msgstr ""
#: ccdfunc.c:721
#, c-format
msgid "Found camera #%d: %s\n"
msgstr ""
#: ccdfunc.c:727
#, c-format
msgid "Found %d cameras, you point number %d"
msgstr ""
#: ccdfunc.c:731
msgid "Can't set active camera number"
msgstr ""
#: ccdfunc.c:737
msgid "Camera plugin have no custom commands"
msgstr ""
#: ccdfunc.c:746 ccdfunc.c:749
#, c-format
msgid "Command '%s'"
msgstr ""
#: ccdfunc.c:751
#, c-format
msgid " returns \"%s\""
msgstr ""
#: ccdfunc.c:762
msgid "Camera plugin have no fun speed setter"
msgstr ""
#: ccdfunc.c:765
msgid "Can't set fan speed"
msgstr ""
#: ccdfunc.c:766
#, c-format
msgid "Set fan speed to %d"
msgstr ""
#: ccdfunc.c:771
#, c-format
msgid "Camera model: %s"
msgstr ""
#: ccdfunc.c:772
#, c-format
msgid "Pixel size: %g x %g" msgid "Pixel size: %g x %g"
msgstr "" msgstr ""
#: ccdfunc.c:640 #: ccdfunc.c:778
#, c-format #, c-format
msgid "Full array: %s" msgid "Full array: %s"
msgstr "" msgstr ""
#: ccdfunc.c:643 #: ccdfunc.c:781
#, c-format #, c-format
msgid "Field of view: %s" msgid "Field of view: %s"
msgstr "" msgstr ""
#: ccdfunc.c:646 #: ccdfunc.c:784
#, c-format #, c-format
msgid "Current format: %s" msgid "Current format: %s"
msgstr "" msgstr ""
#: ccdfunc.c:649 #: ccdfunc.c:787
#, c-format #, c-format
msgid "Maximal geometry (WxH): %dx%d" msgid "Maximal geometry (WxH): %dx%d"
msgstr "" msgstr ""
#: ccdfunc.c:650 #: ccdfunc.c:788
#, c-format #, c-format
msgid "Minimal offset: %dx%d" msgid "Minimal offset: %dx%d"
msgstr "" msgstr ""
#: ccdfunc.c:651 #: ccdfunc.c:789
#, c-format #, c-format
msgid "Geometry steps: offset - %dx%d, size - %dx%d" msgid "Geometry steps: offset - %dx%d, size - %dx%d"
msgstr "" msgstr ""
#: ccdfunc.c:655 #: ccdfunc.c:793
#, c-format #, c-format
msgid "Current binning: %d x %d" msgid "Current binning: %d x %d"
msgstr "" msgstr ""
#: ccdfunc.c:658 #: ccdfunc.c:796
#, c-format #, c-format
msgid "Current settings: %d bits per pixel" msgid "Current settings: %d bits per pixel"
msgstr "" msgstr ""
#: ccdfunc.c:661 #: ccdfunc.c:799
#, c-format #, c-format
msgid "Current brightness: %g" msgid "Current brightness: %g"
msgstr "" msgstr ""
#: ccdfunc.c:663 #: ccdfunc.c:801
#, c-format #, c-format
msgid "Current gain: %g" msgid "Current gain: %g"
msgstr "" msgstr ""
#: ccdfunc.c:665 #: ccdfunc.c:803
#, c-format #, c-format
msgid "Maximal gain: %g" msgid "Maximal gain: %g"
msgstr "" msgstr ""
#: ccdfunc.c:667 #: ccdfunc.c:805
msgid "Camera plugin have no temperature setter" msgid "Camera plugin have no temperature setter"
msgstr "" msgstr ""
#: ccdfunc.c:668 #: ccdfunc.c:806
#, c-format #, c-format
msgid "Can't set T to %g degC" msgid "Can't set T to %g degC"
msgstr "" msgstr ""
#: ccdfunc.c:676 #: ccdfunc.c:814
#, c-format #, c-format
msgid "Shutter command: %s\n" msgid "Shutter command: %s\n"
msgstr "" msgstr ""
#: ccdfunc.c:678 #: ccdfunc.c:816
#, c-format #, c-format
msgid "Can't run shutter command %s (unsupported?)" msgid "Can't run shutter command %s (unsupported?)"
msgstr "" msgstr ""
#: ccdfunc.c:681 #: ccdfunc.c:819
#, 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:683 #: ccdfunc.c:821
msgid "Can't configure (unsupported?)" msgid "Can't configure (unsupported?)"
msgstr "" msgstr ""
#: ccdfunc.c:689 #: ccdfunc.c:827
msgid "Can't get IOport state (unsupported?)" msgid "Can't get IOport state (unsupported?)"
msgstr "" msgstr ""
#: ccdfunc.c:692 #: ccdfunc.c:830
#, c-format #, c-format
msgid "Try to write %d to I/O port" msgid "Try to write %d to I/O port"
msgstr "" msgstr ""
#: ccdfunc.c:694 #: ccdfunc.c:832
msgid "Can't set IOport" msgid "Can't set IOport"
msgstr "" msgstr ""
#: ccdfunc.c:701 #: ccdfunc.c:839
#, c-format #, c-format
msgid "Set gain to %g" msgid "Set gain to %g"
msgstr "" msgstr ""
#: ccdfunc.c:702 #: ccdfunc.c:840
#, c-format #, c-format
msgid "Can't set gain to %g" msgid "Can't set gain to %g"
msgstr "" msgstr ""
#: ccdfunc.c:707 #: ccdfunc.c:845
#, c-format #, c-format
msgid "Set brightness to %g" msgid "Set brightness to %g"
msgstr "" msgstr ""
#: ccdfunc.c:708 #: ccdfunc.c:846
#, c-format #, c-format
msgid "Can't set brightness to %g" msgid "Can't set brightness to %g"
msgstr "" msgstr ""
#: ccdfunc.c:714 server.c:353 #: ccdfunc.c:852 server.c:380
#, c-format #, c-format
msgid "Can't set binning %dx%d" msgid "Can't set binning %dx%d"
msgstr "" msgstr ""
#: ccdfunc.c:726 server.c:354 #: ccdfunc.c:864 server.c:381
msgid "Can't set given geometry" msgid "Can't set given geometry"
msgstr "" msgstr ""
#: ccdfunc.c:730 #: ccdfunc.c:868
#, c-format #, c-format
msgid "Can't set %d flushes" msgid "Can't set %d flushes"
msgstr "" msgstr ""
#: ccdfunc.c:733 #: ccdfunc.c:871
msgid "Camera plugin have no exposition setter" msgid "Camera plugin have no exposition setter"
msgstr "" msgstr ""
#: ccdfunc.c:735 #: ccdfunc.c:873
#, 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:738 #: ccdfunc.c:876
msgid "Can't change frame type" msgid "Can't change frame type"
msgstr "" msgstr ""
#: ccdfunc.c:741 #: ccdfunc.c:879
msgid "Can't set bit depth" msgid "Can't set bit depth"
msgstr "" msgstr ""
#: ccdfunc.c:743 #: ccdfunc.c:881
msgid "Can't set readout speed" msgid "Can't set readout speed"
msgstr "" msgstr ""
#: ccdfunc.c:744 #: ccdfunc.c:882
#, c-format #, c-format
msgid "Readout mode: %s" msgid "Readout mode: %s"
msgstr "" msgstr ""
#: ccdfunc.c:745 #: ccdfunc.c:883
msgid "Only show statistics" msgid "Only show statistics"
msgstr "" msgstr ""
#: ccdfunc.c:748 #: ccdfunc.c:886
msgid "Can't get current binning" msgid "Can't get current binning"
msgstr "" msgstr ""
#: ccdfunc.c:773 #: ccdfunc.c:951
#, c-format #, c-format
msgid "Capture frame %d" msgid "Capture frame %d"
msgstr "" msgstr ""
#: ccdfunc.c:774 ccdfunc.c:852 server.c:203 #: ccdfunc.c:952 ccdfunc.c:1030 server.c:230
msgid "Camera plugin have no function `start exposition`" msgid "Camera plugin have no function `start exposition`"
msgstr "" msgstr ""
#: ccdfunc.c:776 ccdfunc.c:854 server.c:208 #: ccdfunc.c:954 ccdfunc.c:1032 server.c:235
msgid "Can't start exposition" msgid "Can't start exposition"
msgstr "" msgstr ""
#: ccdfunc.c:781 #: ccdfunc.c:959
msgid "Can't capture image" msgid "Can't capture image"
msgstr "" msgstr ""
#: ccdfunc.c:784 #: ccdfunc.c:962
msgid "Read grabbed image" msgid "Read grabbed image"
msgstr "" msgstr ""
#: ccdfunc.c:786 ccdfunc.c:865 server.c:239 #: ccdfunc.c:964 ccdfunc.c:1043 server.c:269
msgid "Camera plugin have no function `capture`" msgid "Camera plugin have no function `capture`"
msgstr "" msgstr ""
#: ccdfunc.c:788 ccdfunc.c:866 #: ccdfunc.c:966 ccdfunc.c:1044
msgid "Can't grab image" msgid "Can't grab image"
msgstr "" msgstr ""
#: ccdfunc.c:802 client.c:573 #: ccdfunc.c:980 client.c:577
#, c-format #, c-format
msgid "%d seconds till pause ends\n" msgid "%d seconds till pause ends\n"
msgstr "" msgstr ""
#. for(int i = 0; i < NFRM; ++i) printf("last[%d]=%g\n", i, lastn[i]); #. for(int i = 0; i < NFRM; ++i) printf("last[%d]=%g\n", i, lastn[i]);
#: ccdfunc.c:837 #: ccdfunc.c:1015
#, c-format #, c-format
msgid "Framerate=%.2f (%g seconds for exp); mean framerate=%.2f" msgid "Framerate=%.2f (%g seconds for exp); mean framerate=%.2f"
msgstr "" msgstr ""
#: ccdfunc.c:863 #: ccdfunc.c:1041
msgid "Some error when capture" msgid "Some error when capture"
msgstr "" msgstr ""
#: ccdfunc.c:904 #: ccdfunc.c:1082
msgid "Can't create grabbing thread" msgid "Can't create grabbing thread"
msgstr "" msgstr ""
#: ccdfunc.c:935 #: ccdfunc.c:1113
msgid "Point network port or UNIX-socket path" msgid "Point network port or UNIX-socket path"
msgstr "" msgstr ""
#: ccdfunc.c:939 #: ccdfunc.c:1117
msgid "start_socket(): can't open socket" msgid "start_socket(): can't open socket"
msgstr "" msgstr ""
#: ccdfunc.c:948 #: ccdfunc.c:1126
msgid "Need exposition time!" msgid "Need exposition time!"
msgstr "" msgstr ""
@@ -747,51 +758,51 @@ msgstr ""
msgid "Can't allocate memory for image" msgid "Can't allocate memory for image"
msgstr "" msgstr ""
#: server.c:216 #: server.c:243
msgid "Camera disconnected" msgid "Camera disconnected"
msgstr "" msgstr ""
#: server.c:222 #: server.c:249
msgid "Something's wrong with camera" msgid "Something's wrong with camera"
msgstr "" msgstr ""
#: server.c:270 #: server.c:297
msgid "No camera device" msgid "No camera device"
msgstr "" msgstr ""
#: server.c:1092 #: server.c:1099
msgid "server(): need at least command socket fd" msgid "server(): need at least command socket fd"
msgstr "" msgstr ""
#: server.c:1093 #: server.c:1100
msgid "Server run without image transport socket" msgid "Server run without image transport socket"
msgstr "" msgstr ""
#: server.c:1115 #: server.c:1131
msgid "No devices found" msgid "No devices found"
msgstr "" msgstr ""
#: server.c:1160 #: server.c:1176
msgid "Client wants an image, but there's no data" msgid "Client wants an image, but there's no data"
msgstr "" msgstr ""
#: server.c:1189 #: server.c:1205
msgid "Limit of connections reached" msgid "Limit of connections reached"
msgstr "" msgstr ""
#: server.c:1258 #: server.c:1274
#, c-format #, c-format
msgid "Can't create %s" msgid "Can't create %s"
msgstr "" msgstr ""
#: server.c:1294 #: server.c:1310
msgid "Can't lock mutex" msgid "Can't lock mutex"
msgstr "" msgstr ""
#. send message and wait any answer #. send message and wait any answer
#. send message and wait answer starting with 'cmd' #. send message and wait answer starting with 'cmd'
#. send command and wait for answer on it #. send command and wait for answer on it
#: client.c:42 client.c:44 client.c:46 client.c:288 #: client.c:42 client.c:44 client.c:46 client.c:290
msgid "Server disconnected" msgid "Server disconnected"
msgstr "" msgstr ""
@@ -811,86 +822,87 @@ msgstr ""
msgid "Send custom plugin commands\n" msgid "Send custom plugin commands\n"
msgstr "" msgstr ""
#: client.c:340 #: client.c:342
msgid "Can't lock shared memory" msgid "Can't lock shared memory"
msgstr "" msgstr ""
#: client.c:359 #: client.c:361
msgid "Can't open image transport socket" msgid "Can't open image transport socket"
msgstr "" msgstr ""
#: client.c:365 #: client.c:367
msgid "Can't read image header over socket" msgid "Can't read image header over socket"
msgstr "" msgstr ""
#: client.c:398 client.c:428 #: client.c:400 client.c:430
msgid "Can't read image data" msgid "Can't read image data"
msgstr "" msgstr ""
#: client.c:440 #: client.c:443
msgid "Too many FITS headers, truncating" msgid "Too many FITS headers, truncating"
msgstr "" msgstr ""
#: client.c:451 #: client.c:454
#, c-format #, c-format
msgid "Can't read full header, got %zd records from %zd" msgid "Can't read full header, got %zd records from %zd"
msgstr "" msgstr ""
#: client.c:466 #: client.c:470
msgid "Still got old image" msgid "Still got old image"
msgstr "" msgstr ""
#: client.c:491 client.c:591 #: client.c:495 client.c:595
msgid "Can't run without command socket" msgid "Can't run without command socket"
msgstr "" msgstr ""
#: client.c:510 #: client.c:514
msgid "Exposing frame 1..." msgid "Exposing frame 1..."
msgstr "" msgstr ""
#: client.c:512 #: client.c:516
msgid "Wait for exposition end" msgid "Wait for exposition end"
msgstr "" msgstr ""
#: client.c:531 #: client.c:535
msgid "Can't make exposition" msgid "Can't make exposition"
msgstr "" msgstr ""
#. start next capture #. start next capture
#. last image -> should re-expose #. last image -> should re-expose
#: client.c:533 client.c:544 client.c:563 #: client.c:537 client.c:548 client.c:567
#, c-format #, c-format
msgid "Exposing frame %d..." msgid "Exposing frame %d..."
msgstr "" msgstr ""
#: client.c:551 #: client.c:555
msgid "Frame ready, try to grab" msgid "Frame ready, try to grab"
msgstr "" msgstr ""
#: client.c:553 #. TRUE
#: client.c:557
msgid "Can't get next image" msgid "Can't get next image"
msgstr "" msgstr ""
#: client.c:561 #: client.c:565
msgid "Got already saved image, wait next" msgid "Got already saved image, wait next"
msgstr "" msgstr ""
#: client.c:585 #: client.c:589
msgid "Server timeout" msgid "Server timeout"
msgstr "" msgstr ""
#: client.c:636 #: client.c:640
msgid "Camera in error state" msgid "Camera in error state"
msgstr "" msgstr ""
#: client.c:638 #: client.c:642
#, c-format #, c-format
msgid "" msgid ""
"Image wasn't received, state: %d, waiting: %g, lastNo: %d, curNo: %d " "Image wasn't received, state: %d, waiting: %g, lastNo: %d, curNo: %d "
"(timeout: %g)" "(timeout: %g)"
msgstr "" msgstr ""
#: client.c:698 client.c:705 #: client.c:702 client.c:709
msgid "Can't create capturing thread" msgid "Can't create capturing thread"
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: 2026-07-21 09:39+0300\n" "POT-Creation-Date: 2026-07-23 17:35+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,17 +16,17 @@ 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:613 #: ccdfunc.c:751
#, c-format #, c-format
msgid " returns \"%s\"" msgid " returns \"%s\""
msgstr "" msgstr " ×ÏÚ×ÒÁÝÁÅÔ \"%s\""
#: ccdfunc.c:535 #: ccdfunc.c:673
#, c-format #, c-format
msgid "%.1f seconds till exposition ends" msgid "%.1f seconds till exposition ends"
msgstr "%.1f ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÜËÓÐÏÚÉÃÉÉ" msgstr "%.1f ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÜËÓÐÏÚÉÃÉÉ"
#: ccdfunc.c:802 client.c:573 #: ccdfunc.c:980 client.c:577
#, c-format #, c-format
msgid "%d seconds till pause ends\n" msgid "%d seconds till pause ends\n"
msgstr "%d ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÐÁÕÚÙ\n" msgstr "%d ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÐÁÕÚÙ\n"
@@ -34,7 +34,17 @@ msgstr "%d
#: cmdlnopts.c:160 #: cmdlnopts.c:160
#, c-format #, c-format
msgid "%d unused parameters:\n" msgid "%d unused parameters:\n"
msgstr "" msgstr "%d ÎÅÉÓÐÏÌØÚÕÅÍÙÈ ÐÁÒÁÍÅÔÒÏ×:\n"
#: ccdfunc.c:348
#, c-format
msgid "Added %d FITS records from %s"
msgstr "äÏÂÁ×ÌÅÎÏ %d ÚÁÐÉÓÅÊ FITS ÉÚ %s"
#: ccdfunc.c:347
#, c-format
msgid "Added 0 FITS records from %s"
msgstr "äÏÂÁ×ÌÅÎÏ 0 ÚÁÐÉÓÅÊ FITS ÉÚ %s"
#: imageview.c:51 #: imageview.c:51
msgid "Already initialized!" msgid "Already initialized!"
@@ -48,144 +58,132 @@ msgstr "
msgid "CMOS gain level" msgid "CMOS gain level"
msgstr "ÕÒÏ×ÅÎØ Gain CMOS" msgstr "ÕÒÏ×ÅÎØ Gain CMOS"
#: ccdfunc.c:550 #: ccdfunc.c:688
msgid "Camera device not pointed" msgid "Camera device not pointed"
msgstr "õÓÔÒÏÊÓÔ×Ï Ó×ÅÏÐÒÉÅÍÎÉËÁ ÎÅ ÐÏÄËÌÀÞÅÎÏ" msgstr "õÓÔÒÏÊÓÔ×Ï Ó×ÅÏÐÒÉÅÍÎÉËÁ ÎÅ ÐÏÄËÌÀÞÅÎÏ"
#: server.c:216 #: server.c:243
#, fuzzy #, fuzzy
msgid "Camera disconnected" msgid "Camera disconnected"
msgstr "ôÁÊÍÁÕÔ ÓÅÒ×ÅÒÁ" msgstr "ôÁÊÍÁÕÔ ÓÅÒ×ÅÒÁ"
#: client.c:636 #: client.c:640
msgid "Camera in error state" msgid "Camera in error state"
msgstr "" msgstr "ëÁÍÅÒÁ × ÓÏÓÔÏÑÎÉÉ ÏÛÉÂËÉ"
#: ccdfunc.c:633 #: ccdfunc.c:771
#, c-format #, c-format
msgid "Camera model: %s" msgid "Camera model: %s"
msgstr "íÏÄÅÌØ Ó×ÅÔÏÐÒÉÅÍÎÉËÁ: %s" msgstr "íÏÄÅÌØ Ó×ÅÔÏÐÒÉÅÍÎÉËÁ: %s"
#: ccdfunc.c:529 #: ccdfunc.c:667
#, fuzzy
msgid "Camera plugin have no capture polling funtion." msgid "Camera plugin have no capture polling funtion."
msgstr "õ ÐÌÁÇÉÎÁ ËÁÍÅÒÙ ÎÅÔ ÏÓÏÂÙÈ ËÏÍÁÎÄ" msgstr "õ ÐÌÁÇÉÎÁ ËÁÍÅÒÙ ÎÅÔ ÆÕÎËÃÉÉ ÚÁÈ×ÁÔÁ ÉÚÏÂÒÁÖÅÎÉÊ"
#: ccdfunc.c:599 #: ccdfunc.c:737
msgid "Camera plugin have no custom commands" msgid "Camera plugin have no custom commands"
msgstr "õ ÐÌÁÇÉÎÁ ËÁÍÅÒÙ ÎÅÔ ÏÓÏÂÙÈ ËÏÍÁÎÄ" msgstr "õ ÐÌÁÇÉÎÁ ËÁÍÅÒÙ ÎÅÔ ÏÓÏÂÙÈ ËÏÍÁÎÄ"
#: ccdfunc.c:733 #: ccdfunc.c:871
#, fuzzy
msgid "Camera plugin have no exposition setter" msgid "Camera plugin have no exposition setter"
msgstr "õ ÐÌÁÇÉÎÁ ËÁÍÅÒÙ ÎÅÔ ÏÓÏÂÙÈ ËÏÍÁÎÄ" msgstr "õ ÐÌÁÇÉÎÁ ËÁÍÅÒÙ ÎÅÔ ÓÅÔÔÅÒÁ ÜËÓÐÏÚÉÃÉÉ"
#: ccdfunc.c:624 #: ccdfunc.c:762
#, fuzzy #, fuzzy
msgid "Camera plugin have no fun speed setter" msgid "Camera plugin have no fun speed setter"
msgstr "õ ÐÌÁÇÉÎÁ ËÁÍÅÒÙ ÎÅÔ ÏÓÏÂÙÈ ËÏÍÁÎÄ" msgstr "õ ÐÌÁÇÉÎÁ ËÁÍÅÒÙ ÎÅÔ ÓÅÔÔÅÒÁ ÓËÏÒÏÓÔÉ ×ÅÎÔÉÌÑÔÏÒÁ"
#: ccdfunc.c:786 ccdfunc.c:865 server.c:239 #: ccdfunc.c:964 ccdfunc.c:1043 server.c:269
#, fuzzy
msgid "Camera plugin have no function `capture`" msgid "Camera plugin have no function `capture`"
msgstr "õ ÐÌÁÇÉÎÁ ËÁÍÅÒÙ ÎÅÔ ÏÓÏÂÙÈ ËÏÍÁÎÄ" msgstr "õ ÐÌÁÇÉÎÁ ËÁÍÅÒÙ ÎÅÔ ÆÕÎËÃÉÉ `capture`"
#: ccdfunc.c:774 ccdfunc.c:852 server.c:203 #: ccdfunc.c:952 ccdfunc.c:1030 server.c:230
#, fuzzy
msgid "Camera plugin have no function `start exposition`" msgid "Camera plugin have no function `start exposition`"
msgstr "õ ÐÌÁÇÉÎÁ ËÁÍÅÒÙ ÎÅÔ ÏÓÏÂÙÈ ËÏÍÁÎÄ" msgstr "õ ÐÌÁÇÉÎÁ ËÁÍÅÒÙ ÎÅÔ ÆÕÎËÃÉÉ `start exposition`"
#: ccdfunc.c:578 #: ccdfunc.c:716
#, fuzzy
msgid "Camera plugin have no model name getter" msgid "Camera plugin have no model name getter"
msgstr "õ ÐÌÁÇÉÎÁ ËÁÍÅÒÙ ÎÅÔ ÏÓÏÂÙÈ ËÏÍÁÎÄ" msgstr "õ ÐÌÁÇÉÎÁ ËÁÍÅÒÙ ÎÅÔ ÇÅÔÔÅÒÁ ÎÁÚ×ÁÎÉÑ ÍÏÄÅÌÉ"
#: ccdfunc.c:667 #: ccdfunc.c:805
#, fuzzy
msgid "Camera plugin have no temperature setter" msgid "Camera plugin have no temperature setter"
msgstr "õ ÐÌÁÇÉÎÁ ËÁÍÅÒÙ ÎÅÔ ÏÓÏÂÙÈ ËÏÍÁÎÄ" msgstr "õ ÐÌÁÇÉÎÁ ËÁÍÅÒÙ ÎÅÔ ÓÅÔÔÅÒÁ ÔÅÍÐÅÒÁÔÕÒÙ"
#: client.c:124 #: client.c:124
#, fuzzy
msgid "Can't allocate buffer" msgid "Can't allocate buffer"
msgstr "îÅ ÍÏÇÕ ÚÁÈ×ÁÔÉÔØ ÉÚÏÂÒÁÖÅÎÉÅ" msgstr "îÅ ÍÏÇÕ ÚÁÈ×ÁÔÉÔØ ÉÚÏÂÒÁÖÅÎÉÅ"
#: server.c:167 #: server.c:167
#, fuzzy
msgid "Can't allocate memory for image" msgid "Can't allocate memory for image"
msgstr "îÅ ÍÏÇÕ ÚÁÈ×ÁÔÉÔØ ÉÚÏÂÒÁÖÅÎÉÅ" msgstr "îÅ ÍÏÇÕ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ ÄÌÑ ÉÚÏÂÒÁÖÅÎÉÑ"
#: main.c:119 #: main.c:122
msgid "Can't be client and standalone in same time!" msgid "Can't be client and standalone in same time!"
msgstr "" msgstr "îÅ ÍÏÇÕ ÏÄÎÏ×ÒÅÍÅÎÎÏ ÂÙÔØ ËÌÉÅÎÔÏÍ É ÓÁÍÏÓÔÏÑÔÅÌØÎÙÍ ÐÒÉÌÏÖÅÎÉÅÍ!"
#: ccdfunc.c:781 #: ccdfunc.c:959
msgid "Can't capture image" msgid "Can't capture image"
msgstr "îÅ ÍÏÇÕ ÚÁÈ×ÁÔÉÔØ ÉÚÏÂÒÁÖÅÎÉÅ" msgstr "îÅ ÍÏÇÕ ÚÁÈ×ÁÔÉÔØ ÉÚÏÂÒÁÖÅÎÉÅ"
#: ccdfunc.c:738 #: ccdfunc.c:876
msgid "Can't change frame type" msgid "Can't change frame type"
msgstr "îÅ ÍÏÇÕ ÉÚÍÅÎÉÔØ ÔÉÐ ËÁÄÒÁ" msgstr "îÅ ÍÏÇÕ ÉÚÍÅÎÉÔØ ÔÉÐ ËÁÄÒÁ"
#: ccdfunc.c:683 #: ccdfunc.c:821
msgid "Can't configure (unsupported?)" msgid "Can't configure (unsupported?)"
msgstr "îÅ ÍÏÇÕ ÓËÏÎÆÉÇÕÒÉÒÏ×ÁÔØ (ÏÐÃÉÑ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)" msgstr "îÅ ÍÏÇÕ ÓËÏÎÆÉÇÕÒÉÒÏ×ÁÔØ (ÏÐÃÉÑ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)"
#: server.c:1258 #: server.c:1274
#, fuzzy, c-format #, c-format
msgid "Can't create %s" msgid "Can't create %s"
msgstr "îÅ ÍÏÇÕ ÚÁÈ×ÁÔÉÔØ ÉÚÏÂÒÁÖÅÎÉÅ" msgstr "îÅ ÍÏÇÕ ÓÏÚÄÁÔØ %s"
#: client.c:698 client.c:705 #: client.c:702 client.c:709
#, fuzzy
msgid "Can't create capturing thread" msgid "Can't create capturing thread"
msgstr "îÅ ÍÏÇÕ ÚÁÈ×ÁÔÉÔØ ÉÚÏÂÒÁÖÅÎÉÅ" msgstr "îÅ ÍÏÇÕ ÓÏÚÄÁÔØ ÐÏÔÏË ÚÁÈ×ÁÔÁ ÉÚÏÂÒÁÖÅÎÉÊ"
#: ccdfunc.c:904 #: ccdfunc.c:1082
#, fuzzy
msgid "Can't create grabbing thread" msgid "Can't create grabbing thread"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ Gain × %g" msgstr "îÅ ÍÏÇÕ ÓÏÚÄÁÔØ ÐÏÔÏË ÚÁÈ×ÁÔÁ"
#: main.c:126 #: main.c:129
#, fuzzy
msgid "Can't create log file" msgid "Can't create log file"
msgstr "îÅ ÍÏÇÕ ÚÁÈ×ÁÔÉÔØ ÉÚÏÂÒÁÖÅÎÉÅ" msgstr "îÅ ÍÏÇÕ ÓÏÚÄÁÔØ ÌÏÇ-ÆÁÊÌ"
#: ccdfunc.c:689 #: ccdfunc.c:827
msgid "Can't get IOport state (unsupported?)" msgid "Can't get IOport state (unsupported?)"
msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÓÏÓÔÏÑÎÉÅ ÐÏÒÔÁ I/O (ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)" msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÓÏÓÔÏÑÎÉÅ ÐÏÒÔÁ I/O (ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)"
#: ccdfunc.c:748 #: ccdfunc.c:886
msgid "Can't get current binning" msgid "Can't get current binning"
msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÔÅËÕÝÅÅ ÚÎÁÞÅÎÉÅ ÂÉÎÎÉÎÇÁ" msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÔÅËÕÝÅÅ ÚÎÁÞÅÎÉÅ ÂÉÎÎÉÎÇÁ"
#: ccdfunc.c:418 #: ccdfunc.c:540
msgid "Can't get current focuser position" msgid "Can't get current focuser position"
msgstr "îÅ ÍÏÇÕ ÏÐÒÅÄÅÌÉÔØ ÔÅËÕÝÕÀ ÐÏÚÉÃÉÀ ÆÏËÕÓÅÒÁ" msgstr "îÅ ÍÏÇÕ ÏÐÒÅÄÅÌÉÔØ ÔÅËÕÝÕÀ ÐÏÚÉÃÉÀ ÆÏËÕÓÅÒÁ"
#: ccdfunc.c:501 #: ccdfunc.c:643
#, fuzzy
msgid "Can't get current wheel position" msgid "Can't get current wheel position"
msgstr "îÅ ÍÏÇÕ ÏÐÒÅÄÅÌÉÔØ ÔÅËÕÝÕÀ ÐÏÚÉÃÉÀ ÆÏËÕÓÅÒÁ" msgstr "îÅ ÍÏÇÕ ÏÐÒÅÄÅÌÉÔØ ÔÅËÕÝÕÀ ÐÏÚÉÃÉÀ ÔÕÒÅÌÉ"
#: ccdfunc.c:411 #: ccdfunc.c:496
msgid "Can't get focuser limit positions" msgid "Can't get focuser limit positions"
msgstr "îÅ ÍÏÇÕ ÏÐÒÅÄÅÌÉÔØ ÐÒÅÄÅÌØÎÕÀ ÐÏÚÉÃÉÀ ÆÏËÕÓÅÒÁ" msgstr "îÅ ÍÏÇÕ ÏÐÒÅÄÅÌÉÔØ ÐÒÅÄÅÌØÎÕÀ ÐÏÚÉÃÉÀ ÆÏËÕÓÅÒÁ"
#: ccdfunc.c:503 #: ccdfunc.c:603
msgid "Can't get max wheel position" msgid "Can't get max wheel position"
msgstr "îÅ ÍÏÇÕ ÏÐÒÅÄÅÌÉÔØ ÐÒÅÄÅÌØÎÕÀ ÐÏÚÉÃÉÀ ËÏÌÅÓÁ" msgstr "îÅ ÍÏÇÕ ÏÐÒÅÄÅÌÉÔØ ÐÒÅÄÅÌØÎÕÀ ÐÏÚÉÃÉÀ ÔÕÒÅÌÉ"
#: client.c:553 #. TRUE
#, fuzzy #: client.c:557
msgid "Can't get next image" msgid "Can't get next image"
msgstr "îÅ ÍÏÇÕ ÚÁÈ×ÁÔÉÔØ ÉÚÏÂÒÁÖÅÎÉÅ" msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÏÞÅÒÅÄÎÏÅ ÉÚÏÂÒÁÖÅÎÉÅ"
#: ccdfunc.c:788 ccdfunc.c:866 #: ccdfunc.c:966 ccdfunc.c:1044
msgid "Can't grab image" msgid "Can't grab image"
msgstr "îÅ ÍÏÇÕ ÚÁÈ×ÁÔÉÔØ ÉÚÏÂÒÁÖÅÎÉÅ" msgstr "îÅ ÍÏÇÕ ÚÁÈ×ÁÔÉÔØ ÉÚÏÂÒÁÖÅÎÉÅ"
#: ccdfunc.c:436 #: ccdfunc.c:558
msgid "Can't home focuser" msgid "Can't home focuser"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÆÏËÕÓÅÒ × ÎÕÌØ" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÆÏËÕÓÅÒ × ÎÕÌØ"
@@ -193,17 +191,15 @@ msgstr "
msgid "Can't init mutex!" msgid "Can't init mutex!"
msgstr "îÅ ÍÏÇÕ ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ÍØÀÔÅËÓ!" msgstr "îÅ ÍÏÇÕ ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ÍØÀÔÅËÓ!"
#: server.c:1294 #: server.c:1310
#, fuzzy
msgid "Can't lock mutex" msgid "Can't lock mutex"
msgstr "îÅ ÍÏÇÕ ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ÍØÀÔÅËÓ!" msgstr "îÅ ÍÏÇÕ ÚÁÂÌÏËÉÒÏ×ÁÔØ ÍØÀÔÅËÓ"
#: client.c:340 #: client.c:342
#, fuzzy
msgid "Can't lock shared memory" msgid "Can't lock shared memory"
msgstr "îÅ ÍÏÇÕ ÚÁÈ×ÁÔÉÔØ ÉÚÏÂÒÁÖÅÎÉÅ" msgstr "îÅ ÍÏÇÕ ÚÁÂÌÏËÉÒÏ×ÁÔØ ÒÁÚÄÅÌÑÅÍÕÀ ÐÁÍÑÔØ"
#: client.c:531 #: client.c:535
msgid "Can't make exposition" msgid "Can't make exposition"
msgstr "îÅ ÍÏÇÕ ×ÙÐÏÌÎÉÔØ ÜËÓÐÏÚÉÃÉÀ" msgstr "îÅ ÍÏÇÕ ×ÙÐÏÌÎÉÔØ ÜËÓÐÏÚÉÃÉÀ"
@@ -211,282 +207,278 @@ 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, ÏÔÏÂÒÁÖÅÎÉÅ ÂÕÄÅÔ ÎÅÄÏÓÔÕÐÎÏ"
#: client.c:359 #: client.c:361
#, fuzzy
msgid "Can't open image transport socket" msgid "Can't open image transport socket"
msgstr "îÅ ÍÏÇÕ ÓËÏÎÆÉÇÕÒÉÒÏ×ÁÔØ (ÏÐÃÉÑ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)" msgstr "îÅ ÍÏÇÕ ÏÔËÒÙÔØ ÔÒÁÎÓÐÏÒÔÎÙÊ ÓÏËÅÔ"
#: client.c:451 #: client.c:454
#, c-format #, c-format
msgid "Can't read full header, got %zd records from %zd" msgid "Can't read full header, got %zd records from %zd"
msgstr "" msgstr "îÅ ÍÏÇÕ ÓÞÉÔÁÔØ ×ÅÓØ ÚÁÌÏÇÏ×Ï, ÐÏÌÕÞÉÌ ÌÉÛØ %zd ÚÁÐÉÓÅÊ ÉÚ %zd"
#: client.c:398 client.c:428 #: client.c:400 client.c:430
#, fuzzy
msgid "Can't read image data" msgid "Can't read image data"
msgstr "îÅ ÍÏÇÕ ÚÁÈ×ÁÔÉÔØ ÉÚÏÂÒÁÖÅÎÉÅ" msgstr "îÅ ÍÏÇÕ ÓÞÉÔÁÔØ ÄÁÎÎÙÅ ÉÚÏÂÒÁÖÅÎÉÑ"
#: client.c:365 #: client.c:367
#, fuzzy
msgid "Can't read image header over socket" msgid "Can't read image header over socket"
msgstr "îÅ ÍÏÇÕ ÚÁÈ×ÁÔÉÔØ ÉÚÏÂÒÁÖÅÎÉÅ" msgstr "îÅ ÍÏÇÕ ÓÞÉÔÁÔØ ÚÁÇÏÌÏ×ÏË ÉÚÏÂÒÁÖÅÎÉÑ ÐÏ ÓÏËÅÔÕ"
#: ccdfunc.c:678 #: ccdfunc.c:816
#, c-format #, c-format
msgid "Can't run shutter command %s (unsupported?)" msgid "Can't run shutter command %s (unsupported?)"
msgstr "îÅ ÍÏÇÕ ×ÙÐÏÌÎÉÔØ ËÏÍÁÎÄÕ ÚÁÔ×ÏÒÁ %s (ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)" msgstr "îÅ ÍÏÇÕ ×ÙÐÏÌÎÉÔØ ËÏÍÁÎÄÕ ÚÁÔ×ÏÒÁ %s (ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)"
#: client.c:491 client.c:591 #: client.c:495 client.c:595
#, fuzzy
msgid "Can't run without command socket" msgid "Can't run without command socket"
msgstr "îÅ ÍÏÇÕ ×ÙÐÏÌÎÉÔØ ËÏÍÁÎÄÕ ÚÁÔ×ÏÒÁ %s (ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)" msgstr "îÅ ÍÏÇÕ ÒÁÂÏÔÁÔØ ÂÅÚ ËÏÍÁÎÄÎÏÇÏ ÓÏËÅÔÁ"
#: ccdfunc.c:221 #: ccdfunc.c:230
#, c-format #, c-format
msgid "Can't save file with prefix %s" msgid "Can't save file with prefix %s"
msgstr "îÅ ÍÏÇÕ ÓÏÈÒÁÎÉÔØ ÆÁÊÌ Ó ÐÒÅÆÉËÓÏÍ %s" msgstr "îÅ ÍÏÇÕ ÓÏÈÒÁÎÉÔØ ÆÁÊÌ Ó ÐÒÅÆÉËÓÏÍ %s"
#: ccdfunc.c:730 #: ccdfunc.c:868
#, c-format #, c-format
msgid "Can't set %d flushes" msgid "Can't set %d flushes"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ %d ÓÂÒÏÓÏ×" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ %d ÓÂÒÏÓÏ×"
#: ccdfunc.c:694 #: ccdfunc.c:832
msgid "Can't set IOport" msgid "Can't set IOport"
msgstr "îÅ ÍÏÇÕ ÐÏÍÅÎÑÔØ ÚÎÁÞÅÎÉÑ ÐÏÒÔÁ I/O" msgstr "îÅ ÍÏÇÕ ÐÏÍÅÎÑÔØ ÚÎÁÞÅÎÉÑ ÐÏÒÔÁ I/O"
#: ccdfunc.c:668 #: ccdfunc.c:806
#, 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:593 #: ccdfunc.c:731
msgid "Can't set active camera number" msgid "Can't set active camera number"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÎÏÍÅÒ ÁËÔÉ×ÎÏÊ ËÁÍÅÒÙ" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÎÏÍÅÒ ÁËÔÉ×ÎÏÊ ËÁÍÅÒÙ"
#: ccdfunc.c:397 #: ccdfunc.c:489
msgid "Can't set active focuser number" msgid "Can't set active focuser number"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÎÏÍÅÒ ÁËÔÉ×ÎÏÇÏ ÆÏËÕÓÅÒÁ" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÎÏÍÅÒ ÁËÔÉ×ÎÏÇÏ ÆÏËÕÓÅÒÁ"
#: ccdfunc.c:487 #: ccdfunc.c:597
msgid "Can't set active wheel number" msgid "Can't set active wheel number"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÎÏÍÅÒ ÁËÔÉ×ÎÏÇÏ ËÏÌÅÓÁ" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÎÏÍÅÒ ÁËÔÉ×ÎÏÇÏ ËÏÌÅÓÁ"
#: main.c:94 #: main.c:97
#, fuzzy, c-format #, c-format
msgid "Can't set answer timeout to %g" msgid "Can't set answer timeout to %g"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ Gain × %g" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÔÁÊÍÁÕÔ ÏÔ×ÅÔÁ × %g"
#: ccdfunc.c:714 server.c:353 #: ccdfunc.c:852 server.c:380
#, 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:741 #: ccdfunc.c:879
msgid "Can't set bit depth" msgid "Can't set bit depth"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÒÁÚÒÑÄÎÏÓÔØ áãð" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÒÁÚÒÑÄÎÏÓÔØ áãð"
#: ccdfunc.c:708 #: ccdfunc.c:846
#, c-format #, c-format
msgid "Can't set brightness to %g" msgid "Can't set brightness to %g"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÑÒËÏÓÔØ × %g" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÑÒËÏÓÔØ × %g"
#: ccdfunc.c:735 #: ccdfunc.c:873
#, 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:627 #: ccdfunc.c:765
msgid "Can't set fan speed" msgid "Can't set fan speed"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ×ÅÎÔÉÌÑÔÏÒÏ×" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ×ÅÎÔÉÌÑÔÏÒÏ×"
#: ccdfunc.c:702 #: ccdfunc.c:840
#, 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:726 server.c:354 #: ccdfunc.c:864 server.c:381
msgid "Can't set given geometry" msgid "Can't set given geometry"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÇÅÏÍÅÔÒÉÀ" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÇÅÏÍÅÔÒÉÀ"
#: ccdfunc.c:438 #: ccdfunc.c:560
#, c-format #, c-format
msgid "Can't set position %g" msgid "Can't set position %g"
msgstr "îÅ ÍÏÇÕ ÉÚÍÅÎÉÔØ ÐÏÚÉÃÉÀ ÎÁ %g" msgstr "îÅ ÍÏÇÕ ÉÚÍÅÎÉÔØ ÐÏÚÉÃÉÀ ÎÁ %g"
#: ccdfunc.c:432 #: ccdfunc.c:554
#, c-format #, c-format
msgid "Can't set position %g: out of limits [%g, %g]" msgid "Can't set position %g: out of limits [%g, %g]"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÐÏÚÉÃÉÀ %g: ×ÎÅ ÐÒÅÄÅÌÏ× [%g, %g]" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÐÏÚÉÃÉÀ %g: ×ÎÅ ÐÒÅÄÅÌÏ× [%g, %g]"
#: ccdfunc.c:743 #: ccdfunc.c:881
msgid "Can't set readout speed" msgid "Can't set readout speed"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ÓÞÉÔÙ×ÁÎÉÑ" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ÓÞÉÔÙ×ÁÎÉÑ"
#: ccdfunc.c:514 #: ccdfunc.c:652
#, c-format #, c-format
msgid "Can't set wheel position %d" msgid "Can't set wheel position %d"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÐÏÌÏÖÅÎÉÅ ËÏÌÅÓÁ %d" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÐÏÌÏÖÅÎÉÅ ËÏÌÅÓÁ %d"
#: ccdfunc.c:776 ccdfunc.c:854 server.c:208 #: ccdfunc.c:954 ccdfunc.c:1032 server.c:235
msgid "Can't start exposition" msgid "Can't start exposition"
msgstr "îÅ ÍÏÇÕ ÎÁÞÁÔØ ÜËÓÐÏÚÉÃÉÀ" msgstr "îÅ ÍÏÇÕ ÎÁÞÁÔØ ÜËÓÐÏÚÉÃÉÀ"
#: server.c:129 #: server.c:129
#, fuzzy
msgid "Can't unlock socket mutex" msgid "Can't unlock socket mutex"
msgstr "îÅ ÍÏÇÕ ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ÍØÀÔÅËÓ!" msgstr "îÅ ÍÏÇÕ ÒÁÚÂÌÏËÉÒÏ×ÁÔØ ÍØÀÔÅËÓ ÓÏËÅÔÁ"
#: main.c:88 #: main.c:91
#, fuzzy
msgid "Can't use outfile name and prefix together" msgid "Can't use outfile name and prefix together"
msgstr "îÅ ÍÏÇÕ ÓÏÈÒÁÎÉÔØ ÆÁÊÌ Ó ÐÒÅÆÉËÓÏÍ %s" msgstr "îÅ ÍÏÇÕ ÏÄÎÏ×ÒÅÍÅÎÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÉÍÑ ÆÁÊÌÁ É ÐÒÅÆÉËÓ"
#: ccdfunc.c:773 #: ccdfunc.c:951
#, c-format #, c-format
msgid "Capture frame %d" msgid "Capture frame %d"
msgstr "úÁÈ×ÁÔ ËÁÄÒÁ %d" msgstr "úÁÈ×ÁÔ ËÁÄÒÁ %d"
#: server.c:1160 #: server.c:1176
msgid "Client wants an image, but there's no data" msgid "Client wants an image, but there's no data"
msgstr "" msgstr "ëÌÉÅÎÔ ÖÄÅÔ ÉÚÏÂÒÁÖÅÎÉÑ, ÎÏ ÄÁÎÎÙÅ ÏÔÓÕÔÓÔ×ÕÀÔ"
#: ccdfunc.c:608 ccdfunc.c:611 #: ccdfunc.c:746 ccdfunc.c:749
#, c-format #, c-format
msgid "Command '%s'" msgid "Command '%s'"
msgstr "" msgstr "ëÏÍÁÎÄÁ '%s'"
#: ccdfunc.c:655 #: ccdfunc.c:793
#, fuzzy, c-format #, c-format
msgid "Current binning: %d x %d" msgid "Current binning: %d x %d"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÂÉÎÎÉÎÇ %dx%d" msgstr "ôÅËÕÝÉÊ ÂÉÎÎÉÎÇ: %d x %d"
#: ccdfunc.c:661 #: ccdfunc.c:799
#, fuzzy, c-format #, c-format
msgid "Current brightness: %g" msgid "Current brightness: %g"
msgstr "õÓÔÁÎÏ×ÉÔØ ÑÒËÏÓÔØ × %g" msgstr "ôÅËÕÝÁÑ ÑÒËÏÓÔØ: %g"
#: ccdfunc.c:646 #: ccdfunc.c:784
#, c-format #, c-format
msgid "Current format: %s" msgid "Current format: %s"
msgstr "ôÅËÕÝÉÊ ÆÏÒÍÁÔ: %s" msgstr "ôÅËÕÝÉÊ ÆÏÒÍÁÔ: %s"
#: ccdfunc.c:663 #: ccdfunc.c:801
#, fuzzy, c-format #, c-format
msgid "Current gain: %g" msgid "Current gain: %g"
msgstr "ôÅËÕÝÉÊ ÆÏÒÍÁÔ: %s" msgstr "ôÅËÕÝÉÊ gain: %s"
#: ccdfunc.c:658 #: ccdfunc.c:796
#, c-format #, c-format
msgid "Current settings: %d bits per pixel" msgid "Current settings: %d bits per pixel"
msgstr "" msgstr "ôÅËÕÝÉÅ ÎÁÓÔÒÏÊËÉ: %d ÂÉÔ ÎÁ ÐÉËÓÅÌØ"
#: cmdlnopts.c:136 #: cmdlnopts.c:136
msgid "Display image in OpenGL window" msgid "Display image in OpenGL window"
msgstr "ÏÔÏÂÒÁÖÅÎÉÅ ÉÚÏÂÒÁÖÅÎÉÑ × ÏËÎÅ OpenGL" msgstr "ïÔÏÂÒÁÖÅÎÉÅ ÉÚÏÂÒÁÖÅÎÉÑ × ÏËÎÅ OpenGL"
#: imageview.c:769 #: imageview.c:769
#, c-format #, c-format
msgid "Equalization of histogram: %s" msgid "Equalization of histogram: %s"
msgstr "üË×ÁÌÉÚÁÃÉÑ ÇÉÓÔÏÇÒÁÍÍÙ: %s" msgstr "üË×ÁÌÉÚÁÃÉÑ ÇÉÓÔÏÇÒÁÍÍÙ: %s"
#: ccdfunc.c:292 #: ccdfunc.c:395
msgid "Error saving file" #, c-format
msgstr "ïÛÉÂËÁ ÓÏÈÒÁÎÅÎÉÑ ÆÁÊÌÁ" msgid "Error saving file %s"
msgstr "ïÛÉÂËÁ ÓÏÈÒÁÎÅÎÉÑ ÆÁÊÌÁ %s"
#. start next capture #. start next capture
#. last image -> should re-expose #. last image -> should re-expose
#: client.c:533 client.c:544 client.c:563 #: client.c:537 client.c:548 client.c:567
#, c-format #, c-format
msgid "Exposing frame %d..." msgid "Exposing frame %d..."
msgstr "" msgstr "üËÓÐÏÎÉÒÕÀ ËÁÄÒ %d..."
#: client.c:510 #: client.c:514
msgid "Exposing frame 1..." msgid "Exposing frame 1..."
msgstr "" msgstr "üËÓÐÏÎÉÒÕÀ ËÁÄÒ 1..."
#: ccdfunc.c:643 #: ccdfunc.c:781
#, c-format #, c-format
msgid "Field of view: %s" msgid "Field of view: %s"
msgstr "ðÏÌÅ ÚÒÅÎÉÑ: %s" msgstr "ðÏÌÅ ÚÒÅÎÉÑ: %s"
#: main.c:91 ccdfunc.c:214 #: main.c:94 ccdfunc.c:222
#, c-format #, c-format
msgid "File %s exists!" msgid "File %s exists!"
msgstr "" msgstr "æÁÊÌ %s ÓÕÝÅÓÔ×ÕÅÔ!"
#: ccdfunc.c:283 #: ccdfunc.c:386
#, c-format #, c-format
msgid "File saved as '%s'" msgid "File saved as '%s'"
msgstr "æÁÊÌ ÓÏÈÒÁÎÅÎ ËÁË '%s'" msgstr "æÁÊÌ ÓÏÈÒÁÎÅÎ ËÁË '%s'"
#: ccdfunc.c:356 #: ccdfunc.c:459
msgid "Focuser device not pointed" msgid "Focuser device not pointed"
msgstr "õÓÔÒÏÊÓÔ×Ï ÆÏËÕÓÅÒÁ ÎÅ ÕËÁÚÁÎÏ" msgstr "õÓÔÒÏÊÓÔ×Ï ÆÏËÕÓÅÒÁ ÎÅ ÕËÁÚÁÎÏ"
#: ccdfunc.c:589 #: ccdfunc.c:727
#, c-format #, c-format
msgid "Found %d cameras, you point number %d" msgid "Found %d cameras, you point number %d"
msgstr "ïÂÎÁÒÕÖÅÎÏ %d ËÁÍÅÒ, ×Ù ÕËÁÚÁÌÉ %d" msgstr "ïÂÎÁÒÕÖÅÎÏ %d ËÁÍÅÒ, ×Ù ÕËÁÚÁÌÉ %d"
#: ccdfunc.c:393 #: ccdfunc.c:484
#, c-format #, c-format
msgid "Found %d focusers, you point number %d" msgid "Found %d focusers, you point number %d"
msgstr "ïÂÎÁÒÕÖÅÎÏ %d ÆÏËÕÓÅÒÏ×, ×Ù ÕËÁÚÁÌÉ %d" msgstr "ïÂÎÁÒÕÖÅÎÏ %d ÆÏËÕÓÅÒÏ×, ×Ù ÕËÁÚÁÌÉ %d"
#: ccdfunc.c:483 #: ccdfunc.c:592
#, c-format #, c-format
msgid "Found %d wheels, you point number %d" msgid "Found %d wheels, you point number %d"
msgstr "ïÂÎÁÒÕÖÅÎÏ %d ËÏÌÅÓ, ×Ù ÕËÁÚÁÌÉ %d" msgstr "ïÂÎÁÒÕÖÅÎÏ %d ËÏÌÅÓ, ×Ù ÕËÁÚÁÌÉ %d"
#: ccdfunc.c:583 #: ccdfunc.c:721
#, c-format #, c-format
msgid "Found camera #%d: %s\n" msgid "Found camera #%d: %s\n"
msgstr "" msgstr "ïÂÎÁÒÕÖÅÎÁ ËÁÍÅÒÁ ÎÏÍÅÒ %d: %s\n"
#: ccdfunc.c:387 #: ccdfunc.c:522
#, c-format #, c-format
msgid "Found focuser #%d: %s\n" msgid "Found focuser #%d: %s\n"
msgstr "" msgstr "ïÂÎÁÒÕÖÅÎ ÆÏËÕÓÅÒ ÎÏÍÅÒ %d: %s\n"
#: ccdfunc.c:477 #: ccdfunc.c:628
#, c-format #, c-format
msgid "Found wheel #%d: %s\n" msgid "Found wheel #%d: %s\n"
msgstr "" msgstr "ïÂÎÁÒÕÖÅÎÁ ÔÕÒÅÌØ ÎÏÍÅÒ %d: %s\n"
#: client.c:551 #: client.c:555
msgid "Frame ready, try to grab" msgid "Frame ready, try to grab"
msgstr "" msgstr "ëÁÄÒ ÇÏÔÏ×, ÐÙÔÁÀÓØ ÓÞÉÔÁÔØ"
#. for(int i = 0; i < NFRM; ++i) printf("last[%d]=%g\n", i, lastn[i]); #. for(int i = 0; i < NFRM; ++i) printf("last[%d]=%g\n", i, lastn[i]);
#: ccdfunc.c:837 #: ccdfunc.c:1015
#, c-format #, c-format
msgid "Framerate=%.2f (%g seconds for exp); mean framerate=%.2f" msgid "Framerate=%.2f (%g seconds for exp); mean framerate=%.2f"
msgstr "" msgstr "%.2f ËÁÄÒÏ× × ÓÅËÕÎÄÕ (%g ÓÅËÕÎÄ ÎÁ ÜËÓÐÏÚÉÃÉÀ); ÓÒÅÄÎÑÑ ÓËÏÒÏÓÔØ "
"%.2f"
#: ccdfunc.c:640 #: ccdfunc.c:778
#, c-format #, c-format
msgid "Full array: %s" msgid "Full array: %s"
msgstr "ðÏÌÎÙÊ ÆÏÒÍÁÔ: %s" msgstr "ðÏÌÎÙÊ ÆÏÒÍÁÔ: %s"
#: ccdfunc.c:651 #: ccdfunc.c:789
#, c-format #, c-format
msgid "Geometry steps: offset - %dx%d, size - %dx%d" msgid "Geometry steps: offset - %dx%d, size - %dx%d"
msgstr "" msgstr "ûÁÇ ÉÚÍÅÒÅÎÉÑ ÇÅÏÍÅÔÒÉÉ: ÓÍÅÝÅÎÉÑ - %dx%d, ÒÁÚÍÅÒÁ - %dx%d"
#. slave: cancel exposition #. slave: cancel exposition
#: main.c:57 #: main.c:60
#, c-format #, c-format
msgid "Get signal %d - exit" msgid "Get signal %d - exit"
msgstr "" msgstr "ðÏÌÕÅÎ ÓÉÇÎÁÌ %d - ×ÙÈÏÄ"
#: client.c:561 #: client.c:565
msgid "Got already saved image, wait next" msgid "Got already saved image, wait next"
msgstr "" msgstr "ðÏÌÕÞÉÌ ÕÖÅ ÓÏÈÒÁÎÅÎÎÏÅ ÉÚÏÂÒÁÖÅÎÉÅ, ÖÄÕ ÓÌÅÄÕÀÝÅÇÏ"
#: client.c:157 #: client.c:157
msgid "Got empty string" msgid "Got empty string"
msgstr "" msgstr "ðÏÌÕÞÉÌ ÐÕÓÔÕÀ ÓÔÒÏËÕ"
#: imageview.c:427 #: imageview.c:427
#, c-format #, c-format
@@ -497,198 +489,197 @@ msgstr "
msgid "INET image socket port" msgid "INET image socket port"
msgstr "ÐÏÒÔ ÌÏËÁÌØÎÏÇÏ ÓÅÔÅ×ÏÇÏ ÓÏËÅÔÁ ÐÅÒÅÄÁÞÉ ÉÚÏÂÒÁÖÅÎÉÑ" msgstr "ÐÏÒÔ ÌÏËÁÌØÎÏÇÏ ÓÅÔÅ×ÏÇÏ ÓÏËÅÔÁ ÐÅÒÅÄÁÞÉ ÉÚÏÂÒÁÖÅÎÉÑ"
#: ccdfunc.c:203 #: ccdfunc.c:211
msgid "Image not saved: neither filename nor filename prefix pointed" msgid "Image not saved: neither filename nor filename prefix pointed"
msgstr "" msgstr "éÚÏÂÒÁÖÅÎÉÅ ÎÅ ÓÏÈÒÁÎÅÎÏ: ÎÅ ÕËÁÚÁÎÏ ÎÉ ÉÍÅÎÉ ÆÁÊÌÁ, ÎÉ ÐÒÅÆÉËÓÁ"
#: ccdfunc.c:347 #: ccdfunc.c:450
#, c-format #, c-format
msgid "Image stat:\n" msgid "Image stat:\n"
msgstr "óÔÁÔÉÓÔÉËÁ ÐÏ ÉÚÏÂÒÁÖÅÎÉÀ: \n" msgstr "óÔÁÔÉÓÔÉËÁ ÐÏ ÉÚÏÂÒÁÖÅÎÉÀ: \n"
#: client.c:638 #: client.c:642
#, c-format #, c-format
msgid "Image wasn't received, state: %d, waiting: %g, lastNo: %d, curNo: %d " msgid "Image wasn't received, state: %d, waiting: %g, lastNo: %d, curNo: %d "
"(timeout: %g)" "(timeout: %g)"
msgstr "" msgstr "éÚÏÂÒÁÖÅÎÉÅ ÎÅ ÂÙÌÏ ÐÏÌÕÞÅÎÏ. óÏÓÔÏÑÎÉÅ: %d, ÏÖÉÄÁÎÉÅ: %g, ÐÏÓÌÅÄÎÉÊ "
"ÎÏÍÅÒ: %d, ÔÅËÕÝÉÊ ÎÏÍÅÒ: %d (ÔÁÊÍÁÕÔ: %g)"
#: server.c:1189 #: server.c:1205
msgid "Limit of connections reached" msgid "Limit of connections reached"
msgstr "" msgstr "äÏÓÔÉÇÎÕÔ ÐÒÅÄÅÌ ËÏÌÉÞÅÓÔ×Á ÐÏÄËÌÀÞÅÎÉÊ"
#: main.c:124 #: main.c:127
#, c-format #, c-format
msgid "Log file %s @ level %d\n" msgid "Log file %s @ level %d\n"
msgstr "" msgstr "ìÏÇ-ÆÁÊÌ %s Ó ÕÒÏ×ÎÅÍ %d\n"
#. save image #. save image
#: imageview.c:752 #: imageview.c:752
msgid "Make screenshot" msgid "Make screenshot"
msgstr "" msgstr "óÄÅÌÁÔØ ÓËÒÉÎÛÏÔ"
#: main.c:52 #: main.c:55
#, c-format #, c-format
msgid "Master killed with sig=%d" msgid "Master killed with sig=%d"
msgstr "" msgstr "èÏÚÑÉÎ ÕÂÉÔ Ó ÓÉÇÎÁÌÏÍ %d"
#: ccdfunc.c:665 #: ccdfunc.c:803
#, c-format #, c-format
msgid "Maximal gain: %g" msgid "Maximal gain: %g"
msgstr "" msgstr "îÁÉÂÏÌØÛÉÊ gain: %g"
#: ccdfunc.c:649 #: ccdfunc.c:787
#, c-format #, c-format
msgid "Maximal geometry (WxH): %dx%d" msgid "Maximal geometry (WxH): %dx%d"
msgstr "" msgstr "îÁÉÂÏÌØÛÁÑ ÇÅÏÍÅÔÒÉÑ (WxH): %dx%d"
#: ccdfunc.c:650 #: ccdfunc.c:788
#, c-format #, c-format
msgid "Minimal offset: %dx%d" msgid "Minimal offset: %dx%d"
msgstr "" msgstr "íÉÎÉÍÁÌØÎÏÅ ÓÍÅÝÅÎÉÅ: %dx%d"
#: imageview.c:616 #: imageview.c:616
#, c-format #, c-format
msgid "Missed %zd images" msgid "Missed %zd images"
msgstr "" msgstr "ðÒÏÐÕÝÅÎÏ %zd ÉÚÏÂÒÁÖÅÎÉÊ"
#: cmdlnopts.c:91 #: cmdlnopts.c:91
msgid "N flushes before exposing (default: 1)" msgid "N flushes before exposing (default: 1)"
msgstr "N ÚÁÓ×ÅÞÉ×ÁÎÉÊ ÐÅÒÅÄ ÜËÓÐÏÚÉÃÉÅÊ (ÐÏ ÕÍÏÌÞÁÎÉÀ: 1)" msgstr "N ÚÁÓ×ÅÞÉ×ÁÎÉÊ ÐÅÒÅÄ ÜËÓÐÏÚÉÃÉÅÊ (ÐÏ ÕÍÏÌÞÁÎÉÀ: 1)"
#: ccdfunc.c:948 #: ccdfunc.c:1126
msgid "Need exposition time!" msgid "Need exposition time!"
msgstr "" msgstr "õËÁÖÉÔÅ ×ÒÅÍÑ ÜËÓÐÏÚÉÃÉÉ!"
#: server.c:270 #: server.c:297
msgid "No camera device" msgid "No camera device"
msgstr "îÅ ÕËÁÚÁÎÏ ÕÓÔÒÏÊÓÔ×Ï ËÁÍÅÒÙ" msgstr "îÅ ÕËÁÚÁÎÏ ÕÓÔÒÏÊÓÔ×Ï ËÁÍÅÒÙ"
#: ccdfunc.c:557 ccdfunc.c:558 #: ccdfunc.c:695 ccdfunc.c:696
msgid "No cameras found" msgid "No cameras found"
msgstr "ëÁÍÅÒ ÎÅ ÏÂÎÁÒÕÖÅÎÏ" msgstr "ëÁÍÅÒ ÎÅ ÏÂÎÁÒÕÖÅÎÏ"
#: server.c:1115 #: server.c:1131
#, fuzzy #, fuzzy
msgid "No devices found" msgid "No devices found"
msgstr "ôÕÒÅÌÅÊ ÎÅ ÏÂÎÁÒÕÖÅÎÏ" msgstr "ôÕÒÅÌÅÊ ÎÅ ÏÂÎÁÒÕÖÅÎÏ"
#: ccdfunc.c:363 #: ccdfunc.c:466
msgid "No focusers found" msgid "No focusers found"
msgstr "æÏËÕÓÅÒÏ× ÎÅ ÏÂÎÁÒÕÖÅÎÏ" msgstr "æÏËÕÓÅÒÏ× ÎÅ ÏÂÎÁÒÕÖÅÎÏ"
#: imageview.c:711 #: imageview.c:711
msgid "No image changing function defined" msgid "No image changing function defined"
msgstr "" msgstr "îÅ ÏÐÒÅÄÅÌÅÎÁ ÆÕÎËÃÉÑ, ÏÔ×ÅÔÓÔ×ÅÎÎÁÑ ÚÁ ÓÍÅÎÕ ÉÚÏÂÒÁÖÅÎÉÊ"
#: ccdfunc.c:453 #: ccdfunc.c:575
msgid "No wheels found" msgid "No wheels found"
msgstr "ôÕÒÅÌÅÊ ÎÅ ÏÂÎÁÒÕÖÅÎÏ" msgstr "ôÕÒÅÌÅÊ ÎÅ ÏÂÎÁÒÕÖÅÎÏ"
#: ccdfunc.c:745 #: ccdfunc.c:883
msgid "Only show statistics" msgid "Only show statistics"
msgstr "ôÏÌØËÏ ÏÔÏÂÒÁÚÉÔØ ÓÔÁÔÉÓÔÉËÕ" msgstr "ôÏÌØËÏ ÏÔÏÂÒÁÚÉÔØ ÓÔÁÔÉÓÔÉËÕ"
#: main.c:98 #: main.c:101
msgid "Options `port` and `path` can't be used together! Point `port` for " msgid "Options `port` and `path` can't be used together! Point `port` for "
"TCP socket or `path` for UNIX." "TCP socket or `path` for UNIX."
msgstr "" msgstr "ïÐÃÉÉ `port` É `path` ÎÅ ÍÏÇÕÔ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ ÓÏ×ÍÅÓÔÎÏ! õËÁÖÉÔÅ "
"`port` ÄÌÑ TCP-ÓÏËÅÔÏ× ÉÌÉ `path` ÄÌÑ UNIX."
#: ccdfunc.c:634 #: ccdfunc.c:772
#, 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:935 #: ccdfunc.c:1113
msgid "Point network port or UNIX-socket path" msgid "Point network port or UNIX-socket path"
msgstr "" msgstr "õËÁÖÉÔÅ ÓÅÔÅ×ÏÊ ÐÏÒÔ ÉÌÉ ÐÕÔØ Ë UNIX-ÓÏËÅÔÕ"
#: ccdfunc.c:784 #: ccdfunc.c:962
msgid "Read grabbed image" msgid "Read grabbed image"
msgstr "óÞÉÔÙ×ÁÎÉÅ ÉÚÏÂÒÁÖÅÎÉÑ" msgstr "óÞÉÔÙ×ÁÎÉÅ ÉÚÏÂÒÁÖÅÎÉÑ"
#: ccdfunc.c:744 #: ccdfunc.c:882
#, c-format #, c-format
msgid "Readout mode: %s" msgid "Readout mode: %s"
msgstr "òÅÖÉÍ ÓÞÉÔÙ×ÁÎÉÑ: %s" msgstr "òÅÖÉÍ ÓÞÉÔÙ×ÁÎÉÑ: %s"
#: client.c:186 #: client.c:186
#, fuzzy
msgid "Send custom plugin commands\n" msgid "Send custom plugin commands\n"
msgstr "ÏÓÏÂÙÅ ËÏÍÁÎÄÙ ÐÌÁÇÉÎÁ ËÁÍÅÒÙ" msgstr "ïÔÐÒÁ×ÉÔØ ÏÓÏÂÙÅ ËÏÍÁÎÄÙ ÐÌÁÇÉÎÁ ËÁÍÅÒÙ\n"
#. send message and wait any answer #. send message and wait any answer
#. send message and wait answer starting with 'cmd' #. send message and wait answer starting with 'cmd'
#. send command and wait for answer on it #. send command and wait for answer on it
#: client.c:42 client.c:44 client.c:46 client.c:288 #: client.c:42 client.c:44 client.c:46 client.c:290
#, fuzzy
msgid "Server disconnected" msgid "Server disconnected"
msgstr "ôÁÊÍÁÕÔ ÓÅÒ×ÅÒÁ" msgstr "óÅÒ×ÅÒ ÏÔËÌÀÞÅÎ"
#: client.c:149 #: client.c:149
#, fuzzy
msgid "Server disconnected?" msgid "Server disconnected?"
msgstr "ôÁÊÍÁÕÔ ÓÅÒ×ÅÒÁ" msgstr "óÅÒ×ÅÒ ÏÔËÌÀÞÅÎ?"
#: server.c:1093 #: server.c:1100
msgid "Server run without image transport socket" msgid "Server run without image transport socket"
msgstr "" msgstr "óÅÒ×ÅÒ ÚÁÐÕÝÅÎ ÂÅÚ ÔÒÁÎÓÐÏÒÔÎÏÇÏ ÓÏËÅÔÁ (ÔÏÌØËÏ SHM)"
#: client.c:585 #: client.c:589
msgid "Server timeout" msgid "Server timeout"
msgstr "ôÁÊÍÁÕÔ ÓÅÒ×ÅÒÁ" msgstr "ôÁÊÍÁÕÔ ÓÅÒ×ÅÒÁ"
#: ccdfunc.c:707 #: ccdfunc.c:845
#, c-format #, c-format
msgid "Set brightness to %g" msgid "Set brightness to %g"
msgstr "õÓÔÁÎÏ×ÉÔØ ÑÒËÏÓÔØ × %g" msgstr "õÓÔÁÎÏ×ÉÔØ ÑÒËÏÓÔØ × %g"
#: ccdfunc.c:628 #: ccdfunc.c:766
#, c-format #, c-format
msgid "Set fan speed to %d" msgid "Set fan speed to %d"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ×ÅÎÔÉÌÑÔÏÒÏ× × %d" msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ×ÅÎÔÉÌÑÔÏÒÏ× × %d"
#: ccdfunc.c:701 #: ccdfunc.c:839
#, c-format #, c-format
msgid "Set gain to %g" msgid "Set gain to %g"
msgstr "õÓÔÁÎÏ×ÉÔØ Gain × %g" msgstr "õÓÔÁÎÏ×ÉÔØ Gain × %g"
#: main.c:116 #: main.c:119
#, fuzzy, c-format #, c-format
msgid "Set image port to %s\n" msgid "Set image port to %s\n"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ×ÅÎÔÉÌÑÔÏÒÏ× × %d" msgstr "õÓÔÁÎÁ×ÌÉ×ÁÀ ÎÏÍÅÒ ÔÒÁÎÓÐÏÒÔÎÏÇÏ ÐÏÒÔÁ × %d\n"
#: imageview.c:756 #: imageview.c:756
#, c-format #, c-format
msgid "Set output prefix to %s" msgid "Set output prefix to %s"
msgstr "" msgstr "õÓÔÁÎÁ×ÌÉ×ÁÀ ×ÙÈÏÄÎÏÊ ÐÒÅÆÉËÓ × %s"
#: ccdfunc.c:676 #: ccdfunc.c:814
#, c-format #, c-format
msgid "Shutter command: %s\n" msgid "Shutter command: %s\n"
msgstr "ëÏÍÁÎÄÁ ÚÁÔ×ÏÒÁ: %s\n" msgstr "ëÏÍÁÎÄÁ ÚÁÔ×ÏÒÁ: %s\n"
#: ccdfunc.c:863 #: ccdfunc.c:1041
msgid "Some error when capture" msgid "Some error when capture"
msgstr "ïÛÉÂËÁ ÐÒÉ ÚÁÈ×ÁÔÅ" msgstr "ïÛÉÂËÁ ÐÒÉ ÚÁÈ×ÁÔÅ"
#: server.c:222 #: server.c:249
msgid "Something's wrong with camera" msgid "Something's wrong with camera"
msgstr "" msgstr "þÔÏ-ÔÏ ËÁÍÅÒÅ ÐÏÐÌÏÈÅÌÏ"
#: client.c:466 #: client.c:470
msgid "Still got old image" msgid "Still got old image"
msgstr "" msgstr "÷ÓÅ ÅÝÅ ÐÏÌÕÞÁÀ ÓÔÁÒÙÅ ÉÚÏÂÒÁÖÅÎÉÑ"
#: client.c:440 #: client.c:443
msgid "Too many FITS headers, truncating" msgid "Too many FITS headers, truncating"
msgstr "" msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ÚÁÇÏÌÏ×ËÏ× FITS, ÏÂÒÅÚÁÀ"
#: ccdfunc.c:681 #: ccdfunc.c:819
#, 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:692 #: ccdfunc.c:830
#, 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"
@@ -697,29 +688,28 @@ msgstr "
msgid "UNIX socket name (command socket)" msgid "UNIX socket name (command socket)"
msgstr "ÉÍÑ UNIX-ÓÏËÅÔÁ" msgstr "ÉÍÑ UNIX-ÓÏËÅÔÁ"
#: client.c:512 #: client.c:516
#, fuzzy
msgid "Wait for exposition end" msgid "Wait for exposition end"
msgstr "ÖÄÁÔØ, ÐÏËÁ ÎÅ ËÏÎÞÉÔÓÑ ÜËÓÐÏÚÉÃÉÑ" msgstr "öÄÕ, ÐÏËÁ ÎÅ ËÏÎÞÉÔÓÑ ÜËÓÐÏÚÉÃÉÑ"
#: ccdfunc.c:446 #: ccdfunc.c:568
msgid "Wheel device not pointed" msgid "Wheel device not pointed"
msgstr "õÓÔÒÏÊÓÔ×Ï ÔÕÒÅÌÉ ÎÅ ÕËÁÚÁÎÏ" msgstr "õÓÔÒÏÊÓÔ×Ï ÔÕÒÅÌÉ ÎÅ ÕËÁÚÁÎÏ"
#: ccdfunc.c:492 #: ccdfunc.c:634
#, fuzzy, c-format #, fuzzy, c-format
msgid "Wheel model: %s" msgid "Wheel model: %s"
msgstr "íÏÄÅÌØ Ó×ÅÔÏÐÒÉÅÍÎÉËÁ: %s" msgstr "íÏÄÅÌØ Ó×ÅÔÏÐÒÉÅÍÎÉËÁ: %s"
#: ccdfunc.c:510 #: ccdfunc.c:648
#, c-format #, c-format
msgid "Wheel position should be from 0 to %d" msgid "Wheel position should be from 0 to %d"
msgstr "ðÏÚÉÃÉÑ ËÏÌÅÓÁ ÄÏÌÖÎÁ ÂÙÔØ ÏÔ 0 ÄÏ %d" msgstr "ðÏÚÉÃÉÑ ËÏÌÅÓÁ ÄÏÌÖÎÁ ÂÙÔØ ÏÔ 0 ÄÏ %d"
#: main.c:103 #: main.c:106
#, c-format #, c-format
msgid "Wrong port value: %d" msgid "Wrong port value: %d"
msgstr "" msgstr "îÅÐÒÁ×ÉÌØÎÙÊ ÎÏÍÅÒ ÐÏÒÔÁ: %d"
#: cmdlnopts.c:98 #: cmdlnopts.c:98
msgid "absolute (not divided by binning!) frame X0 coordinate (-1 - all " msgid "absolute (not divided by binning!) frame X0 coordinate (-1 - all "
@@ -797,7 +787,8 @@ msgstr "
#: cmdlnopts.c:129 #: cmdlnopts.c:129
msgid "get base information about connected hardware (also increasing text " msgid "get base information about connected hardware (also increasing text "
"messages level to 2)" "messages level to 2)"
msgstr "" msgstr "ÐÏÌÕÞÉÔØ ÂÁÚÏ×ÕÀ ÉÎÆÏÒÍÁÃÉÀ Ï ÐÏÄËÌÀÞÅÎÎÏÍ ÏÂÏÒÕÄÏ×ÁÎÉÉ (ÔÁËÖÅ "
"×ËÌÀÞÁÑ ÔÅËÓÔÏ×ÙÅ ÓÏÏÂÝÅÎÉÑ Ó ÕÒÏ×ÎÅÍÑ ÄÏ 2)"
#: cmdlnopts.c:107 #: cmdlnopts.c:107
msgid "get value of I/O port pins" msgid "get value of I/O port pins"
@@ -846,7 +837,7 @@ msgstr "
#: cmdlnopts.c:128 #: cmdlnopts.c:128
msgid "network answer timeout (default: 0.1s)" msgid "network answer timeout (default: 0.1s)"
msgstr "" msgstr "ÔÁÊÍÁÕÔ ÏÔ×ÅÔÁ ÐÏ ÓÅÔÉ (ÐÏ ÕÍÏÌÞÁÎÉÀ: 0.1Ó)"
#: cmdlnopts.c:76 #: cmdlnopts.c:76
msgid "not open shutter, when exposing (\"dark frames\")" msgid "not open shutter, when exposing (\"dark frames\")"
@@ -916,9 +907,9 @@ msgstr "
msgid "run in 8-bit mode" msgid "run in 8-bit mode"
msgstr "8-ÂÉÔÎÙÊ ÒÅÖÉÍ" msgstr "8-ÂÉÔÎÙÊ ÒÅÖÉÍ"
#: server.c:1092 #: server.c:1099
msgid "server(): need at least command socket fd" msgid "server(): need at least command socket fd"
msgstr "" msgstr "server(): ÎÕÖÅÎ ËÁË ÍÉÎÉÍÕÍ ÄÅÓËÒÉÐÔÏÒ ËÏÍÁÎÄÎÏÇÏ ÓÏËÅÔÁ"
#: cmdlnopts.c:79 #: cmdlnopts.c:79
msgid "set CCD temperature to given value (degr C)" msgid "set CCD temperature to given value (degr C)"
@@ -952,9 +943,9 @@ msgstr "
msgid "start (!=0) or stop(==0) infinity capturing loop" msgid "start (!=0) or stop(==0) infinity capturing loop"
msgstr "ÎÁÞÁÔØ (!=0) ÉÌÉ ÚÁËÏÎÞÉÔØ (==0) ÂÅÓËÏÎÅÞÎÙÊ ÃÉËÌ ÚÁÈ×ÁÔÁ ÉÚÏÂÒÁÖÅÎÉÊ" msgstr "ÎÁÞÁÔØ (!=0) ÉÌÉ ÚÁËÏÎÞÉÔØ (==0) ÂÅÓËÏÎÅÞÎÙÊ ÃÉËÌ ÚÁÈ×ÁÔÁ ÉÚÏÂÒÁÖÅÎÉÊ"
#: ccdfunc.c:939 #: ccdfunc.c:1117
msgid "start_socket(): can't open socket" msgid "start_socket(): can't open socket"
msgstr "" msgstr "start_socket(): ÎÅ ÍÏÇÕ ÏÔËÒÙÔØ ÓÏËÅÔ"
#: cmdlnopts.c:75 #: cmdlnopts.c:75
#, fuzzy #, fuzzy

3
main.c
View File

@@ -40,6 +40,9 @@
static int isserver = FALSE; static int isserver = FALSE;
static pid_t childpid = 0; static pid_t childpid = 0;
// get struct size
//char (*__dummy)[sizeof(cc_IMG)] = 1;
void signals(int signo){ void signals(int signo){
//if(signo) signal(signo, SIG_IGN); //if(signo) signal(signo, SIG_IGN);
DBG("signo=%d", signo); DBG("signo=%d", signo);

124
server.c
View File

@@ -46,9 +46,9 @@ static cc_frameformat frmformatmax = {0}, curformat = {0}; // maximal format
// image in shared memory // image in shared memory
static cc_IMG *ima = NULL; static cc_IMG *ima = NULL;
static float focmaxpos = 0., focminpos = 0.; // focuser extremal positions static float focmaxpos = 0.f, focminpos = 0.f; // focuser extremal positions
static int wmaxpos = 0.; // wheel max pos static int wmaxpos = 0; // wheel max pos
static float tremain = 0.; // time when capture done static float tremain = 0.f; // time when capture done
// IPC key for shared memory (for client's getter) // IPC key for shared memory (for client's getter)
static key_t shmkey = IPC_PRIVATE; static key_t shmkey = IPC_PRIVATE;
@@ -61,7 +61,7 @@ typedef struct{
// cat | awk '{print "{ " $3 ", \"\" }," }' | sort // cat | awk '{print "{ " $3 ", \"\" }," }' | sort
strpair allcommands[] = { strpair allcommands[] = {
{ CC_CMD_AUTHOR, "FITS 'AUTHOR' field" }, //{ CC_CMD_AUTHOR, "FITS 'AUTHOR' field" },
{ CC_CMD_BRIGHTNESS, "camera brightness" }, { CC_CMD_BRIGHTNESS, "camera brightness" },
{ CC_CMD_CAMDEVNO, "camera device number" }, { CC_CMD_CAMDEVNO, "camera device number" },
{ CC_CMD_CAMFLAGS, "get camflags (bits: 0-start capture, 1-cancel, 2-restart server"}, { CC_CMD_CAMFLAGS, "get camflags (bits: 0-start capture, 1-cancel, 2-restart server"},
@@ -81,23 +81,23 @@ strpair allcommands[] = {
{ CC_CMD_FTEMP, "get focuser body temperature"}, { CC_CMD_FTEMP, "get focuser body temperature"},
{ CC_CMD_FRAMEFORMAT, "camera frame format (X0,Y0,X1,Y1)" }, { CC_CMD_FRAMEFORMAT, "camera frame format (X0,Y0,X1,Y1)" },
{ CC_CMD_GAIN, "camera gain" }, { CC_CMD_GAIN, "camera gain" },
{ CC_CMD_GETHEADERS, "get last file FITS headers" }, //{ CC_CMD_GETHEADERS, "get last file FITS headers" },
{ CC_CMD_HBIN, "horizontal binning" }, { CC_CMD_HBIN, "horizontal binning" },
{ CC_CMD_HELP, "show this help" }, { CC_CMD_HELP, "show this help" },
{ CC_CMD_IMHEIGHT, "last image height" }, { CC_CMD_IMHEIGHT, "last image height" },
{ CC_CMD_IMNUMBER, "grabbed image number from server start"}, { CC_CMD_IMNUMBER, "grabbed image number from server start"},
{ CC_CMD_IMWIDTH, "last image width" }, { CC_CMD_IMWIDTH, "last image width" },
{ CC_CMD_INFTY, "an infinity loop taking images until there's connected clients" }, { CC_CMD_INFTY, "an infinity loop taking images until there's connected clients" },
{ CC_CMD_INSTRUMENT, "FITS 'INSTRUME' field" }, //{ CC_CMD_INSTRUMENT, "FITS 'INSTRUME' field" },
{ CC_CMD_IO, "get/set camera IO" }, { CC_CMD_IO, "get/set camera IO" },
{ CC_CMD_8BIT, "run in 8 bit mode instead of 16 bit" }, { CC_CMD_8BIT, "run in 8 bit mode instead of 16 bit" },
{ CC_CMD_FRAMEMAX, "camera maximal available format" }, { CC_CMD_FRAMEMAX, "camera maximal available format" },
{ CC_CMD_NFLUSHES, "camera number of preflushes" }, { CC_CMD_NFLUSHES, "camera number of preflushes" },
{ CC_CMD_OBJECT, "FITS 'OBJECT' field" }, //{ CC_CMD_OBJECT, "FITS 'OBJECT' field" },
{ CC_CMD_OBJTYPE, "FITS 'IMAGETYP' field" }, //{ CC_CMD_OBJTYPE, "FITS 'IMAGETYP' field" },
{ CC_CMD_OBSERVER, "FITS 'OBSERVER' field" }, //{ CC_CMD_OBSERVER, "FITS 'OBSERVER' field" },
{ CC_CMD_PLUGINCMD, "custom camera plugin command" }, { CC_CMD_PLUGINCMD, "custom camera plugin command" },
{ CC_CMD_PROGRAM, "FITS 'PROG-ID' field" }, //{ CC_CMD_PROGRAM, "FITS 'PROG-ID' field" },
{ CC_CMD_RESTART, "restart server" }, { CC_CMD_RESTART, "restart server" },
{ CC_CMD_SHMEMKEY, "get shared memory key" }, { CC_CMD_SHMEMKEY, "get shared memory key" },
{ CC_CMD_SHUTTER, "camera shutter's operations" }, { CC_CMD_SHUTTER, "camera shutter's operations" },
@@ -106,7 +106,7 @@ strpair allcommands[] = {
{ CC_CMD_VBIN, "vertical binning" }, { CC_CMD_VBIN, "vertical binning" },
{ CC_CMD_WDEVNO, "wheel device number" }, { CC_CMD_WDEVNO, "wheel device number" },
{ CC_CMD_WLIST, "list all connected wheels" }, { CC_CMD_WLIST, "list all connected wheels" },
{ CC_CMD_WMAXPOS, "get maximap wheel position"}, { CC_CMD_WMAXPOS, "get maximal wheel position"},
{ CC_CMD_WPOS, "wheel position" }, { CC_CMD_WPOS, "wheel position" },
{ CC_CMD_WTEMP, "get wheel body temperature"}, { CC_CMD_WTEMP, "get wheel body temperature"},
{NULL, NULL}, {NULL, NULL},
@@ -168,6 +168,30 @@ static void fixima(){
ima->datasize = ima->bytelen; ima->datasize = ima->bytelen;
// init shared semaphore // init shared semaphore
cc_init_sem(TRUE); cc_init_sem(TRUE);
if(camera->getModelName){
if(camera->getModelName(ima->model, MODELNM_SZ-1)) ima->model[MODELNM_SZ-1] = 0;
else ima->model[0] = 0;
}
ima->pixel_x = camera->pixX;
ima->pixel_y = camera->pixY;
// fill constant parameters
if(wheel){
int i;
if(wheel->getModelName){
if(wheel->getModelName(ima->wmodel, MODELNM_SZ-1)) ima->wmodel[MODELNM_SZ-1] = 0;
else ima->wmodel[0] = 0;
}
if(wheel->getMaxPos && wheel->getMaxPos(&i)) ima->wheelmax = i;
else ima->wheelmax = 0;
}
if(focuser){
if(focuser->getModelName){
if(focuser->getModelName(ima->fmodel, MODELNM_SZ-1)) ima->fmodel[MODELNM_SZ-1] = 0;
else ima->fmodel[0] = 0;
}
if(!focuser->getMinPos || !focuser->getMinPos(&ima->focmin)) ima->focmin = NAN;
if(!focuser->getMaxPos || !focuser->getMaxPos(&ima->focmax)) ima->focmax = NAN;
}
} }
TIMESTAMP("Lock SHM image"); TIMESTAMP("Lock SHM image");
cc_lock_shm(TRUE); cc_lock_shm(TRUE);
@@ -177,6 +201,9 @@ 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;
ima->bin_x = GP->hbin;
ima->bin_y = GP->vbin;
ima->exposure_time = GP->exptime;
if(!camera->getbitpix || !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
DBG("bitpix=%d", ima->bitpix); DBG("bitpix=%d", ima->bitpix);
@@ -232,8 +259,11 @@ static inline void cameracapturestate(){ // capturing - wait for exposition ends
TIMESTAMP("Capture ready"); TIMESTAMP("Capture ready");
tremain = 0.; tremain = 0.;
// now capture frame // now capture frame
if(!ima || !ima->data) LOGERR("Can't capture image: data not initialized"); if(!ima || !ima->data){
else{ LOGERR("Can't capture image: data not initialized");
camstate = CAMERA_ERROR;
return;
}else{
TIMESTAMP("start capture"); TIMESTAMP("start capture");
if(!camera->capture){ if(!camera->capture){
WARNX(_("Camera plugin have no function `capture`")); WARNX(_("Camera plugin have no function `capture`"));
@@ -247,13 +277,10 @@ static inline void cameracapturestate(){ // capturing - wait for exposition ends
LOGERR("Can't capture image"); LOGERR("Can't capture image");
camstate = CAMERA_ERROR; camstate = CAMERA_ERROR;
return; return;
}else{
TIMESTAMP("Fill FITS header");
ima->gotstat = 0; // fresh image without statistics - recalculate when save
ima->timestamp = sl_dtime(); // set timestamp
fillFITSheader(ima);
++ima->imnumber; // increment counter
} }
fill_image_fields(ima);
//fillFITSheader(ima);
++ima->imnumber; // increment counter
cc_unlock_shm(); cc_unlock_shm();
LOGDBG("cameracapturestate(): SHM UNlocked"); LOGDBG("cameracapturestate(): SHM UNlocked");
TIMESTAMP("Captured and unlocked"); TIMESTAMP("Captured and unlocked");
@@ -354,29 +381,7 @@ static int camdevini(int n){
if(!camera->setgeometry || !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){
if(!focuser) return FALSE;
if(!focuser->setDevNo(n)){
LOGERR("Can't set active focuser number");
return FALSE;
}
atomic_store(&focdevno, n);
LOGMSG("Set focuser device number to %d", n);
focuser->getMaxPos(&focmaxpos);
focuser->getMinPos(&focminpos);
return TRUE;
}
static int wheeldevini(int n){
if(!wheel) return FALSE;
if(!wheel->setDevNo(n)){
LOGERR("Can't set active wheel number");
return FALSE;
}
atomic_store(&wheeldevno, n);
LOGMSG("Set wheel device number to %d", n);
wheel->getMaxPos(&wmaxpos);
return TRUE;
}
/******************************************************************************* /*******************************************************************************
*************************** Service handlers ********************************** *************************** Service handlers **********************************
@@ -727,6 +732,7 @@ static cc_hresult darkhandler(int fd, _U_ const char *key, const char *val){
if(!cc_sendstrmessage(fd, buf)) return CC_RESULT_DISCONNECTED; if(!cc_sendstrmessage(fd, buf)) return CC_RESULT_DISCONNECTED;
return CC_RESULT_SILENCE; return CC_RESULT_SILENCE;
} }
#if 0
static cc_hresult FITSparhandler(int fd, const char *key, const char *val){ static cc_hresult FITSparhandler(int fd, const char *key, const char *val){
char buf[256], **fitskey = NULL; char buf[256], **fitskey = NULL;
if(0 == strcmp(key, CC_CMD_AUTHOR)){ if(0 == strcmp(key, CC_CMD_AUTHOR)){
@@ -750,6 +756,7 @@ static cc_hresult FITSparhandler(int fd, const char *key, const char *val){
if(!cc_sendstrmessage(fd, buf)) return CC_RESULT_DISCONNECTED; if(!cc_sendstrmessage(fd, buf)) return CC_RESULT_DISCONNECTED;
return CC_RESULT_SILENCE; return CC_RESULT_SILENCE;
} }
#endif
/* /*
static cc_hresult handler(_U_ int fd, _U_ const char *key, _U_ const char *val){ static cc_hresult handler(_U_ int fd, _U_ const char *key, _U_ const char *val){
char buf[64]; char buf[64];
@@ -795,7 +802,7 @@ static cc_hresult wsetNhandler(int fd, _U_ const char *key, const char *val){
if(num > wheel->Ndevices - 1 || num < 0){ if(num > wheel->Ndevices - 1 || num < 0){
return CC_RESULT_BADVAL; return CC_RESULT_BADVAL;
} }
if(!wheeldevini(num)) return CC_RESULT_FAIL; if(!setWheelNo(num, &wmaxpos)) return CC_RESULT_FAIL;
} }
snprintf(buf, 63, CC_CMD_WDEVNO "=%d", atomic_load(&wheeldevno)); snprintf(buf, 63, CC_CMD_WDEVNO "=%d", atomic_load(&wheeldevno));
if(!cc_sendstrmessage(fd, buf)) return CC_RESULT_DISCONNECTED; if(!cc_sendstrmessage(fd, buf)) return CC_RESULT_DISCONNECTED;
@@ -867,7 +874,7 @@ static cc_hresult fsetNhandler(int fd, _U_ const char *key, const char *val){
if(num > focuser->Ndevices - 1 || num < 0){ if(num > focuser->Ndevices - 1 || num < 0){
return CC_RESULT_BADVAL; return CC_RESULT_BADVAL;
} }
if(!focdevini(num)) return CC_RESULT_FAIL; if(!setFocuserNo(num, &focminpos, &focmaxpos)) return CC_RESULT_FAIL;
} }
snprintf(buf, 63, CC_CMD_FDEVNO "=%d", atomic_load(&focdevno)); snprintf(buf, 63, CC_CMD_FDEVNO "=%d", atomic_load(&focdevno));
if(!cc_sendstrmessage(fd, buf)) return CC_RESULT_DISCONNECTED; if(!cc_sendstrmessage(fd, buf)) return CC_RESULT_DISCONNECTED;
@@ -945,6 +952,7 @@ static cc_hresult pluginhandler(int fd, _U_ const char *key, const char *val){
return r; return r;
} }
#if 0
// get headers // get headers
static cc_hresult gethdrshandler(int fd, _U_ const char *key, _U_ const char *val){ static cc_hresult gethdrshandler(int fd, _U_ const char *key, _U_ const char *val){
if(!ima) return CC_RESULT_FAIL; if(!ima) return CC_RESULT_FAIL;
@@ -958,6 +966,7 @@ static cc_hresult gethdrshandler(int fd, _U_ const char *key, _U_ const char *va
} }
return CC_RESULT_SILENCE; return CC_RESULT_SILENCE;
} }
#endif
// for setters: do nothing when camera not in idle state // for setters: do nothing when camera not in idle state
static int CAMbusy(){ static int CAMbusy(){
@@ -1020,6 +1029,7 @@ static cc_handleritem items[] = {
{chkcc, inftyhandler, CC_CMD_INFTY}, {chkcc, inftyhandler, CC_CMD_INFTY},
{chkcc, pluginhandler, CC_CMD_PLUGINCMD}, {chkcc, pluginhandler, CC_CMD_PLUGINCMD},
{NULL, tremainhandler, CC_CMD_TREMAIN}, {NULL, tremainhandler, CC_CMD_TREMAIN},
#if 0
{chkcc, gethdrshandler, CC_CMD_GETHEADERS}, {chkcc, gethdrshandler, CC_CMD_GETHEADERS},
{NULL, FITSparhandler, CC_CMD_AUTHOR}, {NULL, FITSparhandler, CC_CMD_AUTHOR},
{NULL, FITSparhandler, CC_CMD_INSTRUMENT}, {NULL, FITSparhandler, CC_CMD_INSTRUMENT},
@@ -1027,6 +1037,7 @@ static cc_handleritem items[] = {
{NULL, FITSparhandler, CC_CMD_OBJECT}, {NULL, FITSparhandler, CC_CMD_OBJECT},
{NULL, FITSparhandler, CC_CMD_PROGRAM}, {NULL, FITSparhandler, CC_CMD_PROGRAM},
{NULL, FITSparhandler, CC_CMD_OBJTYPE}, {NULL, FITSparhandler, CC_CMD_OBJTYPE},
#endif
{chkfoc, foclisthandler, CC_CMD_FOCLIST}, {chkfoc, foclisthandler, CC_CMD_FOCLIST},
{chkfoc, fsetNhandler, CC_CMD_FDEVNO}, {chkfoc, fsetNhandler, CC_CMD_FDEVNO},
{chkfoc, fgotohandler, CC_CMD_FGOTO}, {chkfoc, fgotohandler, CC_CMD_FGOTO},
@@ -1073,10 +1084,6 @@ static void *sendimage(void *C){
if(!cc_senddata(client, locimage, sizeof(cc_IMG))) break; if(!cc_senddata(client, locimage, sizeof(cc_IMG))) break;
// send image itself (client can close socket if don't need image data) // send image itself (client can close socket if don't need image data)
if(!cc_senddata(client, locimage->data, locimage->bytelen)) break; if(!cc_senddata(client, locimage->data, locimage->bytelen)) break;
// send FITS header (client can close socket if don't need it)
for(size_t i = 0; i < locimage->headerstrings; ++i){ // send header
if(!cc_senddata(client, &locimage->fitsheader[i], FLEN_CARD)) break;
}
}while(0); }while(0);
shutdown(client, SHUT_WR); // tell client we are closing socket shutdown(client, SHUT_WR); // tell client we are closing socket
recv(client, locimage->data, locimage->bytelen, MSG_NOSIGNAL); // block until client close his side recv(client, locimage->data, locimage->bytelen, MSG_NOSIGNAL); // block until client close his side
@@ -1104,12 +1111,21 @@ void server(int sock, int imsock){
TIMEINIT(); TIMEINIT();
// init everything // init everything
int ctr = 3; int ctr = 3;
if(startFocuser()) --ctr; if(startFocuser()){
focdevini(0); --ctr;
if(startWheel()) --ctr; if(GP->focdevno < 0) GP->focdevno = 0;
wheeldevini(0); setFocuserNo(GP->focdevno, &focminpos, &focmaxpos);
if(startCCD()) --ctr; }
camdevini(0); if(startWheel()){
--ctr;
if(GP->whldevno < 0) GP->whldevno = 0;
setWheelNo(GP->whldevno, &wmaxpos);
}
if(startCCD()){
--ctr;
if(GP->camdevno < 0) GP->camdevno = 0;
camdevini(GP->camdevno);
}
if(ctr == 3){ if(ctr == 3){
LOGERR("server(): no devices found"); LOGERR("server(): no devices found");
ERRX(_("No devices found")); ERRX(_("No devices found"));