mirror of
https://github.com/eddyem/CCD_Capture.git
synced 2026-03-20 00:31:04 +03:00
add DUMMY model
This commit is contained in:
23
Dummy_cameras/CMakeLists.txt
Normal file
23
Dummy_cameras/CMakeLists.txt
Normal file
@@ -0,0 +1,23 @@
|
||||
cmake_minimum_required(VERSION 3.20)
|
||||
set(CCDLIB dummy_module)
|
||||
set(DUMMYLIB ${CCDLIB} PARENT_SCOPE)
|
||||
|
||||
find_package(PkgConfig REQUIRED)
|
||||
pkg_check_modules(${CCDLIB} REQUIRED usefull_macros)
|
||||
|
||||
set(CFLAGS -O3 -Wextra -Wall -W -std=gnu99)
|
||||
set(CMAKE_COLOR_MAKEFILE ON)
|
||||
|
||||
if(DEFINED DEBUG AND DEBUG STREQUAL "yes")
|
||||
set(CFLAGS ${CFLAGS} -Werror)
|
||||
add_definitions(-DEBUG)
|
||||
set(CMAKE_VERBOSE_MAKEFILE "ON")
|
||||
endif()
|
||||
|
||||
add_definitions(${CFLAGS})
|
||||
|
||||
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} SRC)
|
||||
add_library(${CCDLIB} ${SRC})
|
||||
target_link_libraries(${CCDLIB} ${${CCDLIB}_LIBRARIES})
|
||||
include_directories(${${CCDLIB}_INCLUDE_DIRS} ..)
|
||||
link_directories(${${CCDLIB}_LIBRARY_DIRS})
|
||||
285
Dummy_cameras/dummyfunc.c
Normal file
285
Dummy_cameras/dummyfunc.c
Normal file
@@ -0,0 +1,285 @@
|
||||
/*
|
||||
* This file is part of the CCD_Capture project.
|
||||
* Copyright 2022 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <limits.h>
|
||||
#include <math.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <usefull_macros.h>
|
||||
|
||||
#include "dummyfunc.h"
|
||||
|
||||
static const int filtermax = 5;
|
||||
static const float focmaxpos = 10.;
|
||||
static int curhbin = 1, curvbin = 1;
|
||||
static int filterpos = 0;
|
||||
static float focuserpos = 1., brightness = 1., gain = 0.;
|
||||
static float camtemp = -30.;
|
||||
static capture_status capstat = CAPTURE_NO;
|
||||
|
||||
static int campoll(capture_status *st, float *remain){
|
||||
if(capstat == CAPTURE_NO){
|
||||
if(st) *st = capstat = CAPTURE_PROCESS;
|
||||
if(remain) *remain = 0.5;
|
||||
}else{
|
||||
capstat = CAPTURE_NO;
|
||||
if(st) *st = CAPTURE_READY;
|
||||
if(remain) *remain = 0.;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int camcapt(IMG *ima){
|
||||
if(!ima || !ima->data) return FALSE;
|
||||
uint16_t *d = ima->data;
|
||||
for(int y = 0; y < ima->h; ++y)
|
||||
for(int x = 0; x < ima->w; ++x) // sinusoide 100x200
|
||||
*d++ = (uint16_t)(sin(x * 50/M_PI)*sin(y * 100/M_PI)*65535.);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void camcancel(){
|
||||
capstat = CAPTURE_NO;
|
||||
}
|
||||
|
||||
static int setdevno(int n){
|
||||
if(n) return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int camsetbrig(float b){
|
||||
brightness = b;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int camgetbrig(float *b){
|
||||
if(!b) return FALSE;
|
||||
*b = brightness;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int camsetexp(_U_ float t){
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int camsetgain(float g){
|
||||
gain = g;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int camgetgain(float *g){
|
||||
if(g) *g = gain;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int camsett(float t){
|
||||
camtemp = t;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int camgett(float *t){
|
||||
if(t) *t = camtemp;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int gett(float *t){
|
||||
if(t) *t = M_PI;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int camsetbin(int h, int v){
|
||||
curhbin = h; curvbin = v;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int camshutter(_U_ shutter_op s){
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int camsetgeom(frameformat *f){
|
||||
if(!f) return FALSE;
|
||||
DUMMYcam.geometry = *f;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int camgetnam(char *n, int l){
|
||||
strncpy(n, "Dummy camera", l);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int camgmg(float *mg){
|
||||
if(mg) *mg = 10.;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int camggl(frameformat *max, frameformat *step){
|
||||
if(max) *max = DUMMYcam.array;
|
||||
if(step) *step = (frameformat){1,1,1,1};
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int camgetbin(int *binh, int *binv){
|
||||
if(binh) *binh = curhbin;
|
||||
if(binv) *binv = curvbin;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int camgetio(int *io){
|
||||
if(io) *io = 0xDEADBEEF;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int camfan(_U_ fan_speed spd){return TRUE;}
|
||||
|
||||
static int focsetpos(_U_ int a, float n){
|
||||
if(n < 0. || n > focmaxpos) return FALSE;
|
||||
focuserpos = n;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int fochome(_U_ int a){
|
||||
focuserpos = 0.;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int focgetnam(char *n, int l){
|
||||
strncpy(n, "Dummy focuser", l);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int focpos(float *p){
|
||||
if(p) *p = focuserpos;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int focMp(float *p){
|
||||
if(p) *p = focmaxpos;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int focmp(float *p){
|
||||
if(p) *p = 0.;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int whlsetpos(int n){
|
||||
if(n > filtermax || n < 0) return FALSE;
|
||||
filterpos = n;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int whlgetpos(int *n){
|
||||
if(n) *n = filterpos;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int whlgmp(int *n){
|
||||
if(n) *n = filtermax;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int whlgetnam(char *n, int l){
|
||||
strncpy(n, "Dummy filter wheel", l);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int stub(){
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void vstub(){
|
||||
return;
|
||||
}
|
||||
static int istub(_U_ int N){return TRUE;}
|
||||
|
||||
/*
|
||||
* Global objects: camera, focuser and wheel
|
||||
*/
|
||||
Camera DUMMYcam = {
|
||||
.check = stub,
|
||||
.Ndevices = 1,
|
||||
.close = vstub,
|
||||
.pollcapture = campoll,
|
||||
.capture = camcapt,
|
||||
.cancel = camcancel,
|
||||
// setters:
|
||||
.setDevNo = setdevno,
|
||||
.setbrightness = camsetbrig,
|
||||
.setexp = camsetexp,
|
||||
.setgain = camsetgain,
|
||||
.setT = camsett,
|
||||
.setbin = camsetbin,
|
||||
.setnflushes = istub,
|
||||
.shuttercmd = camshutter,
|
||||
.confio = istub,
|
||||
.setio = istub,
|
||||
.setframetype = istub,
|
||||
.setbitdepth = istub,
|
||||
.setfastspeed = istub,
|
||||
.setgeometry = camsetgeom,
|
||||
.setfanspeed = camfan,
|
||||
// getters:
|
||||
.getbrightness = camgetbrig,
|
||||
.getModelName = camgetnam,
|
||||
.getgain = camgetgain,
|
||||
.getmaxgain = camgmg,
|
||||
.getgeomlimits = camggl,
|
||||
.getTcold = camgett,
|
||||
.getThot = camgett,
|
||||
.getTbody = gett,
|
||||
.getbin = camgetbin,
|
||||
.getio = camgetio,
|
||||
.pixX = 10.,
|
||||
.pixY = 10.,
|
||||
.field = (frameformat){.h = 1024, .w = 1024, .xoff = 10, .yoff = 10},
|
||||
.array = (frameformat){.h = 1050, .w = 1050, .xoff = 0, .yoff = 0},
|
||||
.geometry = {0},
|
||||
};
|
||||
|
||||
Focuser DUMMYfocus = {
|
||||
.check = stub,
|
||||
.Ndevices = 1,
|
||||
.close = vstub,
|
||||
// setters:
|
||||
.setDevNo = setdevno,
|
||||
.setAbsPos = focsetpos,
|
||||
.home = fochome,
|
||||
// getters:
|
||||
.getModelName = focgetnam,
|
||||
.getTbody = gett,
|
||||
.getPos = focpos,
|
||||
.getMaxPos = focMp,
|
||||
.getMinPos = focmp,
|
||||
};
|
||||
|
||||
Wheel DUMMYwheel = {
|
||||
.check = stub,
|
||||
.Ndevices = 1,
|
||||
.close = vstub,
|
||||
// setters
|
||||
.setDevNo = setdevno,
|
||||
.setPos = whlsetpos,
|
||||
// getters
|
||||
.getModelName = whlgetnam,
|
||||
.getTbody = gett,
|
||||
.getPos = whlgetpos,
|
||||
.getMaxPos = whlgmp,
|
||||
};
|
||||
29
Dummy_cameras/dummyfunc.h
Normal file
29
Dummy_cameras/dummyfunc.h
Normal file
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* This file is part of the CCD_Capture project.
|
||||
* Copyright 2022 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#ifndef DUMMYFUNC_H__
|
||||
#define DUMMYFUNC_H__
|
||||
|
||||
#include "ccdfunc.h"
|
||||
|
||||
extern Camera DUMMYcam;
|
||||
extern Focuser DUMMYfocus;
|
||||
extern Wheel DUMMYwheel;
|
||||
|
||||
#endif // DUMMYFUNC_H__
|
||||
Reference in New Issue
Block a user