Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • cs/drv/mods/pesp
  • alessio.bogani/pesp
2 results
Show changes
Commits on Source (9)
......@@ -43,6 +43,7 @@ endif
#
##----------------------------------------------------------------------------
$(MAKE) = make
TARGET = pesp
......@@ -51,19 +52,21 @@ FILE_KERNEL = pesp
INST_INC_KERNEL = pesp_ioctl.h
D ?= 0
EXTRA_CFLAGS += -D__D=$(D) -I$(INCLUDE) -D_HAVE_GC_ -DGC_VER=2
EXTRA_CFLAGS += -D_WRBUFF_
EXTRA_CFLAGS += -D_WQMEMCPY_
EXTRA_CFLAGS += -D_WQWQ_
ccflags-y += -D__D=$(D) -I$(INCLUDE) -D_HAVE_GC_ -DGC_VER=2
ccflags-y += -D_WRBUFF_
ccflags-y += -D_WQMEMCPY_
ccflags-y += -D_WQWQ_
EXTRA_CFLAGS += -D_PROCFS_
ccflags-y += -D_PROCFS_
EXTRA_CFLAGS += -Wno-unused-variable
ccflags-y += -Wno-unused-variable
ccflags-y += -Wno-declaration-after-statement
######## Kernel
ifneq ($(KERNELRELEASE),)
obj-m := $(TARGET).o
$(TARGET)-objs := pesp_main.o pesp_readproc.o \
pesp_ioctl.o pesp_open.o \
......@@ -73,12 +76,15 @@ ifneq ($(KERNELRELEASE),)
pesp_writeproc.o
else
RELEASE := GIT:: $(shell git describe --dirty)
REPO := GIT:: $(shell git config --get remote.origin.url)
LOC_REPO := GIT:: $(shell git rev-parse --show-toplevel)
KDIR ?= /lib/modules/$(KERNEL)/build
all: clean
@echo " Building Kernel Module..."
$(MAKE) -C $(KDIR) M=$(PWD) modules
KCPPFLAGS="-DRELEASE='$(RELEASE)' -DREPO='$(LOC_REPO)'" $(MAKE) -C $(KDIR) M=$(PWD) modules
install:
@if [ $(DO_LOCAL) = yes ]; then \
......@@ -102,3 +108,4 @@ debug: all
dump:
echo $(realpath $(firstword $(MAKEFILE_LIST)))
#include "pesp.h"
static const char VNOTU *RcsId = "$Header: /home/cvsadm/cvsroot/fermi/modules/apps/pesp/module/pesp_ioctl.c,v 1.6 2020-04-16 12:05:33 abrami Exp $";
//---------------------------------------------------------------------------
extern h_virt_ccd_t pesp;
extern struct _pespImg pespDark;
......@@ -224,7 +222,160 @@ extern char rclibuf[CLIBUFFSIZE];
case PESP_IOCS_CEO:
retval = __get_user(pespCCD.ceo, (unsigned short int __user *)arg);
break;
case PESP_IOCG_CSTATUS:
switch (pespCCD.ccdtype){
case A_IKONM934:
retval = __put_user(pespCCD.priv_data.andor.cstatus, (unsigned long __user *)arg);
break;
default:
retval = -EINVAL;
break;
}
break;
case PESP_IOCS_CSTATUS:
switch (pespCCD.ccdtype){
case A_IKONM934:
retval = __get_user(pespCCD.priv_data.andor.cstatus, (unsigned long __user *)arg);
break;
default:
retval = -EINVAL;
break;
}
break;
case PESP_IOCG_TEMP:
switch (pespCCD.ccdtype){
case A_IKONM934:
size = sizeof(float);
v = copy_to_user((float __user *)arg, &(pespCCD.priv_data.andor.temp), size);
if ( v == 0 ) retval = 0;
else retval = -EFAULT;
break;
default:
retval = -EINVAL;
break;
}
break;
case PESP_IOCS_TEMP:
switch (pespCCD.ccdtype){
case A_IKONM934:
size = sizeof(float);
v = copy_from_user(&(pespCCD.priv_data.andor.temp), (float __user *)arg, size);
if ( v == 0 ) retval = 0;
else retval = -EFAULT;
break;
default:
retval = -EINVAL;
break;
}
break;
case PESP_IOCG_DOEXTRA:
retval = __put_user(pespCCD.do_extra, (short int __user *)arg);
break;
case PESP_IOCS_DOEXTRA:
retval = __get_user(pespCCD.do_extra, (short int __user *)arg);
break;
case PESP_IOCG_WTEMP:
switch (pespCCD.ccdtype){
case A_IKONM934:
retval = __put_user(pespCCD.priv_data.andor.target_temp, (int __user *)arg);
break;
default:
retval = -EINVAL;
break;
}
break;
case PESP_IOCS_WTEMP:
switch (pespCCD.ccdtype){
case A_IKONM934:
retval = __get_user(pespCCD.priv_data.andor.target_temp, (int __user *)arg);
break;
default:
retval = -EINVAL;
break;
}
break;
case PESP_IOCG_FASTTRIGGER:
switch (pespCCD.ccdtype){
case A_IKONM934:
retval = __put_user(pespCCD.priv_data.andor.fast_trigger, (bool __user *)arg);
break;
default:
retval = -EINVAL;
break;
}
break;
case PESP_IOCS_FASTTRIGGER:
switch (pespCCD.ccdtype){
case A_IKONM934:
retval = __get_user(pespCCD.priv_data.andor.fast_trigger, (int __user *)arg);
break;
default:
retval = -EINVAL;
break;
}
break;
case PESP_IOCG_VSSPEED:
switch (pespCCD.ccdtype){
case A_IKONM934:
retval = __put_user(pespCCD.priv_data.andor.vsspeed, (unsigned short int __user *)arg);
break;
default:
retval = -EINVAL;
break;
}
break;
case PESP_IOCS_VSSPEED:
switch (pespCCD.ccdtype){
case A_IKONM934:
retval = __get_user(pespCCD.priv_data.andor.vsspeed, (unsigned short int __user *)arg);
break;
default:
retval = -EINVAL;
break;
}
break;
case PESP_IOCG_READOUTTIME:
switch (pespCCD.ccdtype){
case A_IKONM934:
size = sizeof(float);
v = copy_to_user((float __user *)arg, &(pespCCD.priv_data.andor.readouttime), size);
if ( v == 0 ) retval = 0;
else retval = -EFAULT;
break;
default:
retval = -EINVAL;
break;
}
break;
case PESP_IOCS_READOUTTIME:
switch (pespCCD.ccdtype){
case A_IKONM934:
size = sizeof(float);
v = copy_from_user(&(pespCCD.priv_data.andor.readouttime), (float __user *)arg, size);
if ( v == 0 ) retval = 0;
else retval = -EFAULT;
break;
default:
retval = -EINVAL;
break;
}
break;
/***************************
......
/*
* $Header: /home/cvsadm/cvsroot/fermi/modules/apps/pesp/module/pesp_ioctl.h,v 1.4 2019-07-24 07:30:34 abrami Exp $
*
* TagName = $Name: $
*
* $Source: /home/cvsadm/cvsroot/fermi/modules/apps/pesp/module/pesp_ioctl.h,v $
*
* $Log: pesp_ioctl.h,v $
* Revision 1.4 2019-07-24 07:30:34 abrami
*
* 24/07/19:
* CLI anche per linux 2.6
*
* Revision 1.3 2019-04-01 09:02:09 abrami
*
* 2019 aprile:
* Modifiche precedenti:
* introduzione di h_metaimg_t
* aggiornamento di ioctl
* aggiornamento prgs di test.
*
* Revision 1.2 2018-04-13 06:24:21 abrami
*
* 13/04/2018:
* Aggiornata la gestione del dark
* Passati a h_types_2
*
* Revision 1.1 2018-04-03 09:37:29 abrami
*
* 2018/04/03:
* Deposito in pesp.
* Per ora da HAMAC8800 a PESP
*
*
*
*/
/*
* Ioctl definitions
*/
/* _start_deploy_ */
#ifndef __PESP_IOTCL_H__
#define __PESP_IOTCL_H__
......@@ -68,7 +30,6 @@ typedef struct {
struct timeval t;
} ptimer_t;
/* _end_deploy_ */
/* Use '8' as magic number */
#define PESP_IOC_MAGIC '8'
......@@ -136,8 +97,29 @@ typedef struct {
#define PESP_IOCS_WANTUPDATE _IOW(PESP_IOC_MAGIC, 51, int)
#define PESP_IOCG_PTIMERS _IOR(PESP_IOC_MAGIC, 52, ptimer_t)
#define PESP_IOCS_PTIMERS _IOW(PESP_IOC_MAGIC, 53, ptimer_t)
#define PESP_IOCG_SPY _IOR(PESP_IOC_MAGIC, 54, unsigned short int)
#define PESP_IOCS_SPY _IOW(PESP_IOC_MAGIC, 55, unsigned short int)
// Andor
#define PESP_IOCG_CSTATUS _IOR(PESP_IOC_MAGIC, 56, unsigned long)
#define PESP_IOCS_CSTATUS _IOW(PESP_IOC_MAGIC, 57, unsigned long)
#define PESP_IOCG_WTEMP _IOR(PESP_IOC_MAGIC, 58, unsigned long)
#define PESP_IOCS_WTEMP _IOW(PESP_IOC_MAGIC, 59, unsigned long)
#define PESP_IOCG_TEMP _IOR(PESP_IOC_MAGIC, 60, float)
#define PESP_IOCS_TEMP _IOW(PESP_IOC_MAGIC, 61, float)
#define PESP_IOCG_FASTTRIGGER _IOR(PESP_IOC_MAGIC, 62, bool)
#define PESP_IOCS_FASTTRIGGER _IOW(PESP_IOC_MAGIC, 63, bool)
#define PESP_IOCG_VSSPEED _IOR(PESP_IOC_MAGIC, 64, unsigned short int)
#define PESP_IOCS_VSSPEED _IOW(PESP_IOC_MAGIC, 65, unsigned short int)
#define PESP_IOCG_READOUTTIME _IOR(PESP_IOC_MAGIC, 66, float)
#define PESP_IOCS_READOUTTIME _IOW(PESP_IOC_MAGIC, 67, float)
//
#define PESP_IOCG_DOEXTRA _IOR(PESP_IOC_MAGIC, 68, short int)
#define PESP_IOCS_DOEXTRA _IOW(PESP_IOC_MAGIC, 69, short int)
#define PESP_IOC_END 53
#define PESP_IOC_END 69
#ifndef _HAVE_GC_
......@@ -181,6 +163,4 @@ typedef struct {
#undef PESP_IOC_MAXNR
#define PESP_IOC_MAXNR PESP_IOC_CLI_START+2
/* _start_deploy_ */
#endif //__PESP_IOTCL_H__
/* _end_deploy_ */
#include "pesp.h"
static const char VNOTU *RcsId = "$Header: /home/cvsadm/cvsroot/fermi/modules/apps/pesp/module/pesp_main.c,v 1.14 2020-04-16 12:05:33 abrami Exp $";
static const char VNOTU *FileName = "$Source: /home/cvsadm/cvsroot/fermi/modules/apps/pesp/module/pesp_main.c,v $";
static const char *TagName = "$Name: $";
static const char *Revision = "$Revision: 1.14 $";
/*
*
* $Log: pesp_main.c,v $
* Revision 1.14 2020-04-16 12:05:33 abrami
* 2020/04/07:
* Aggiunto il device pespDt0 per poter
* fare una select quando e'scritta una
* img nel buffer principale: per debug del bn
*
* Revision 1.13 2019-09-02 13:57:16 abrami
*
* 2019:
* .addendum....
*
* Revision 1.12 2019-07-24 08:39:45 abrami
*
* 24/07/2019:
* Ripristinato /proc/pesp/ tasks e gc
* anche per linux 3.xx
*
* Revision 1.11 2019-07-24 07:30:34 abrami
*
* 24/07/19:
* CLI anche per linux 2.6
*
* Revision 1.10 2019-04-01 09:02:09 abrami
*
* 2019 aprile:
* Modifiche precedenti:
* introduzione di h_metaimg_t
* aggiornamento di ioctl
* aggiornamento prgs di test.
*
* Revision 1.9 2018-04-13 06:24:21 abrami
*
* 13/04/2018:
* Aggiornata la gestione del dark
* Passati a h_types_2
*
* Revision 1.8 2018-04-12 13:47:44 abrami
*
* 12/04/2018:
* Migliorata l'inizializzazione.
* Introdotto il controllo sulle dimensioni
* in scrittura ed in lettura
* Aggiunto buf_size in proc
*
* Revision 1.7 2018-04-11 11:38:38 abrami
*
* 11/04/2018:
* Da gestire quando il writer e' piu' veloce
* della funz di copia ca.20ms per 4 memcpy.:
* -- versione che esce con 0 byte scritti se
* il work e' ancora pending.
*
* Revision 1.6 2018-04-11 06:07:12 abrami
*
* 10/04/2018:
* Versione che non crash!
* Sembra funzionare!
* Da gestire quando il writer e' piu' veloce
* della funz di copia ca.20ms per 4 memcpy.
*
* Revision 1.5 2018-04-09 11:48:10 abrami
*
* 09/04/2018:
* Aggiunto _WRBUFF_ / buffer in scrittura
* al posto di N copy_from_user, N memcpy.
* A 8Mb e' piu' rapido...
*
* Revision 1.4 2018-04-05 13:06:13 abrami
*
* 2018/04/05:
* Buffer dinamici, prime prove.
* Da mettere a posto ioctl(dark)
*
* Revision 1.3 2018-04-05 06:40:54 abrami
*
* 2018/04/05:
* Alcuni spostamenti in .h
* Aggiunta di pesp_poll.c
*
* Revision 1.2 2018-04-05 06:28:55 abrami
*
* 2018/04/05:
* gc in /proc poteva creare leak, ora rimosso al module_exit..
*
* Revision 1.1 2018-04-03 09:37:29 abrami
*
* 2018/04/03:
* Deposito in pesp.
* Per ora da HAMAC8800 a PESP
*
*
*/
#define stringify( x ) stringify_literal( x )
#define stringify_literal( x ) # x
const char *Release = stringify( RELEASE );
const char *Repo = stringify( REPO );
#include "h_types_2.h"
#include "h_image_2.h"
......@@ -379,6 +283,8 @@ int __init pesp_init(void) {
wr_nr = 0;
wr_no_ptr_sw = 0;
memset(&pespCCD, 0, sizeof(pespCCD));
#ifdef _DBG
printk(KERN_DEBUG "\n ... pesp_init():\n");
printk(KERN_DEBUG "pesp_init(): buf_size= %ld\n", buf_size);
......@@ -492,7 +398,7 @@ int __init pesp_init(void) {
dev_maj_min = MKDEV(dev_major, baseminor + 1);
device_create(pesp_class, NULL, dev_maj_min, NULL, "pespDt%d", 0);
printk(KERN_ALERT "pesp_init(): module inserted, CVS %s, Tag %s\n", Revision, TagName);
printk(KERN_ALERT "pesp_init(): module inserted, Release: %s from Repo: %s\n", Release, Repo);
/************************************
*
......
......@@ -6,7 +6,7 @@ extern buff_Dt_t buff_Dt[MAX_FD_NR];
//---------------------------------------------------------------------------
unsigned int pesp_poll(struct file *filp, poll_table *pt){
unsigned int mask;
int x;
int x = 0;
unsigned int dev_minor = iminor(filp->f_path.dentry->d_inode);
......
#include "pesp.h"
extern const char *Release;
extern const char *Repo;
extern unsigned long wr_nr;
extern unsigned long wr_usecs;
......@@ -35,6 +38,40 @@ extern char rclibuf[CLIBUFFSIZE];
extern long int buf_size;
//============================================================================================
typedef struct {
int integer;
int decimal;
} k_float_t;
k_float_t float2int2(u32 kf32){
k_float_t v;
int s = (kf32 >> 31);
int e = ((kf32 >> 23) & 0xff);
int m = (kf32 & 0x7fffff);
if ((e==0)&&(m==0)) {
v.integer = 0;
v.decimal = 0;
return v;
}
u32 m32 = (0x800000 | m);
// Moltiplico per 100, per poter visualizzare con 2 cifre decimali.
// 100 = circa 7bit, quindi 24 bit di m32 + 7 = 31 bit < 32bit di m32, quindi no overflow!
//
long int k100 = (long int)((m32*100)>>(23 - (e-127))); // k100 = (int)(abs((float)kf32 * 100))
v.integer = k100 / 100;
v.decimal = k100 - (v.integer * 100);
v.integer *= (s?-1:1);
return v;
}
//============================================================================================
#ifdef _PROCFS_
#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,32)
......@@ -66,6 +103,12 @@ extern long int buf_size;
len += sprintf(buf+len,"\nDevice: pesp\n");
pesp_proc_offset (buf, start, &offset, &len);
len += sprintf(buf+len,"Release: %s\n", Release);
pesp_proc_offset (buf, start, &offset, &len);
len += sprintf(buf+len,"Repo: %s\n", Repo);
pesp_proc_offset (buf, start, &offset, &len);
len += sprintf(buf+len,"\tbuf_size: %lu\n", buf_size);
pesp_proc_offset (buf, start, &offset, &len);
......@@ -279,8 +322,13 @@ extern long int buf_size;
int pesp_rproc_dev(struct seq_file *m, void *v) {
int i,j;
struct timeval btv, etv;
k_float_t kfloat;
seq_printf(m, "\nDevice: pesp\n");
seq_printf(m, "\n");
seq_printf(m, "Device : pesp\n");
seq_printf(m, "Release: %s\n", Release);
seq_printf(m, "Repo : %s\n", Repo);
seq_printf(m, "\n");
seq_printf(m,"\tbuf_size: %lu\n", buf_size);
seq_printf(m,"\tNumber of writes: %lu\n", wr_nr);
......@@ -353,23 +401,51 @@ extern long int buf_size;
seq_printf(m,"\tvirt_ccd.darksubtract= [%d] %s\n", pesp.darksubtract, (pesp.darksubtract?"yes":"no"));
//---------------------------------------------=
seq_printf(m,"\n\t ccd.width= %d\n", pespCCD.width);
seq_printf(m,"\t ccd.height= %d\n", pespCCD.height);
seq_printf(m,"\t ccd.depth= %d\n", pespCCD.depth);
seq_printf(m,"\t ccd.aet= %d [s] %d [us]\n", pespCCD.aet.tv_sec, pespCCD.aet.tv_usec);
seq_printf(m,"\t ccd.smd= %c\n", pespCCD.smd);
seq_printf(m,"\t ccd.amd= %c\n", pespCCD.amd);
seq_printf(m,"\t ccd.emd= %c\n", pespCCD.emd);
seq_printf(m,"\t ccd.ads= %d\n", pespCCD.ads);
seq_printf(m,"\t ccd.atp= %c\n", pespCCD.atp);
seq_printf(m,"\t ccd.spx= %d\n", pespCCD.spx);
seq_printf(m,"\t ccd.svo= %d\n", pespCCD.svo);
seq_printf(m,"\t ccd.svw= %d\n", pespCCD.svw);
seq_printf(m,"\t ccd.sho= %d\n", pespCCD.sho);
seq_printf(m,"\t ccd.shw= %d\n", pespCCD.shw);
seq_printf(m,"\t ccd.ceg= %d\n", pespCCD.ceg);
seq_printf(m,"\t ccd.ceo= %d\n", pespCCD.ceo);
seq_printf(m,"\t ccd.res= %c\n", pespCCD.res);
seq_printf(m,"\n\t ccd.width = %d\n", pespCCD.width);
seq_printf(m,"\t ccd.height = %d\n", pespCCD.height);
seq_printf(m,"\t ccd.depth = %d\n", pespCCD.depth);
seq_printf(m,"\t ccd.aet = %d [s] %d [us]\n", pespCCD.aet.tv_sec, pespCCD.aet.tv_usec);
seq_printf(m,"\t ccd.smd = %c\n", pespCCD.smd);
seq_printf(m,"\t ccd.amd = %c\n", pespCCD.amd);
seq_printf(m,"\t ccd.emd = %c\n", pespCCD.emd);
seq_printf(m,"\t ccd.ads = %d\n", pespCCD.ads);
seq_printf(m,"\t ccd.atp = %c\n", pespCCD.atp);
seq_printf(m,"\t ccd.spx = %d\n", pespCCD.spx);
seq_printf(m,"\t ccd.spy = %d\n", pespCCD.spy);
seq_printf(m,"\t ccd.svo = %d\n", pespCCD.svo);
seq_printf(m,"\t ccd.svw = %d\n", pespCCD.svw);
seq_printf(m,"\t ccd.sho = %d\n", pespCCD.sho);
seq_printf(m,"\t ccd.shw = %d\n", pespCCD.shw);
seq_printf(m,"\t ccd.ceg = %d\n", pespCCD.ceg);
seq_printf(m,"\t ccd.ceo = %d\n", pespCCD.ceo);
seq_printf(m,"\t ccd.res = %c\n", pespCCD.res);
if ( (pespCCD.ccdtype>=CCD_UNKNOWN) && (pespCCD.ccdtype<=A_IKONM934) )
seq_printf(m,"\t ccd.ccdtype = %s\n", CCDTypeName[pespCCD.ccdtype]);
else
seq_printf(m,"\t ccd.ccdtype = %d\n", pespCCD.ccdtype);
//...............................................=
seq_printf(m,"\t ccd.do_extra = %d\n", pespCCD.do_extra);
if (pespCCD.do_extra != 0) {
switch (pespCCD.ccdtype){
case A_IKONM934:
{
u32 kf = 0;
seq_printf(m,"\t ccd...cooling = %d\n", pespCCD.priv_data.andor.cooling);
seq_printf(m,"\t ccd...target_temp = %d\n", pespCCD.priv_data.andor.target_temp);
seq_printf(m,"\t ccd...cstatus = %lu\n", pespCCD.priv_data.andor.cstatus);
memcpy(&kf, &pespCCD.priv_data.andor.temp, sizeof(u32));
kfloat = float2int2(kf);
seq_printf(m,"\t ccd...temp = %d.%02d\n", kfloat.integer, kfloat.decimal);
seq_printf(m,"\t ccd...fast_trigger = %s\n", (pespCCD.priv_data.andor.fast_trigger?"ON":"OFF"));
seq_printf(m,"\t ccd...vsspeed = %d\n", pespCCD.priv_data.andor.vsspeed);
memcpy(&kf, &pespCCD.priv_data.andor.readouttime, sizeof(u32));
kfloat = float2int2(kf);
seq_printf(m,"\t ccd...readouttime = %d.%02d\n", kfloat.integer, kfloat.decimal);
}
break;
default: break;
}
}
return 0;
}
......
......@@ -17,7 +17,7 @@ int pesp_release(struct inode *inode, struct file *filp)
pespBuff.buff[ch].want_update = WANT_UPDATE_DFLT;
pespBuff.buff[ch].pid=0;
strncpy(pespBuff.buff[ch].comm, "-", sizeof(1));
printk(KERN_ALERT "pesp_open(): close file on minor 0 by PID: %d : %s\n", current->pid, current->comm);
printk(KERN_ALERT "pesp_release(): close file on minor 0 by PID: %d : %s\n", current->pid, current->comm);
/* Success */
return 0;
} else
......@@ -25,7 +25,7 @@ int pesp_release(struct inode *inode, struct file *filp)
int ch = (uintptr_t)filp->private_data;
printk(KERN_ALERT "pesp_release(): closed file descr. %d\n", ch);
buff_Dt[ch-100].opened=-1;
printk(KERN_ALERT "pesp_open(): close file on minor 1 by PID: %d : %s\n", current->pid, current->comm);
printk(KERN_ALERT "pesp_release(): close file on minor 1 by PID: %d : %s\n", current->pid, current->comm);
return 0; /* Success */
}
return -ENXIO; /* No such device or address */
......
......@@ -40,7 +40,7 @@ LOCAL_BASE = $(shell echo $$HOME)/my_runtime
LOCAL_INC = $(LOCAL_BASE)/include/libhimage
LOCAL_LIB = $(LOCAL_BASE)/site/$(SITE)/lib
LOCAL_BIN = $(LOCAL_BASE)/site/$(SITE)/bin
LOCAL_BIN = $(LOCAL_BASE)/site/$(SITE)/bin/tools
ifeq ($(DO_LOCAL), yes)
CFLAGS += -I $(LOCAL_INC)
......@@ -79,7 +79,12 @@ all:: $(BINS)
-include .nse_depinfo
install:
@if [ $(DO_LOCAL) = yes ]; then \
cp $(BINS) $(LOCAL_BIN); \
fi
clean:
@rm -rf $(BINS)
@rm -rf *.o
@rm -rf *.o .nse_depinfo
......@@ -62,6 +62,7 @@ struct _pespccd {
printf("ccd.ads = %d\n", ccd.ads);
printf("ccd.atp = '%c'\n", ccd.atp);
printf("ccd.spx = %d\n", ccd.spx);
printf("ccd.spy = %d\n", ccd.spy);
printf("ccd.svo = %d\n", ccd.svo);
printf("ccd.svw = %d\n", ccd.svw);
printf("ccd.sho = %d\n", ccd.sho);
......@@ -70,8 +71,25 @@ struct _pespccd {
printf("ccd.ceg = %d\n", ccd.ceg);
printf("ccd.ceo = %d\n", ccd.ceo);
printf("ccd.res = '%c'\n", ccd.res);
if ( (ccd.ccdtype>=CCD_UNKNOWN) && (ccd.ccdtype<=A_IKONM934) )
printf("ccd.ccdtype = %s\n", CCDTypeName[ccd.ccdtype]);
else
printf("ccd.ccdtype = %d\n", ccd.ccdtype);
printf("ccd.do_extra = %d\n", ccd.do_extra);
if (ccd.do_extra != 0) {
switch (ccd.ccdtype){
case A_IKONM934:
printf("ccd...cooling = %d\n", ccd.priv_data.andor.cooling);
printf("ccd...target_temp = %d\n", ccd.priv_data.andor.target_temp);
printf("ccd...cstatus = %lu\n", ccd.priv_data.andor.cstatus);
printf("ccd...temp = %f\n", ccd.priv_data.andor.temp);
printf("ccd...fast_trigger = %d\n", ccd.priv_data.andor.fast_trigger);
printf("ccd...vsspeed = %d\n", ccd.priv_data.andor.vsspeed);
printf("ccd...readouttime = %f\n", ccd.priv_data.andor.readouttime);
break;
default: break;
}
}
close(hamaBuf_fd);
}
......
......@@ -20,10 +20,18 @@ void usage(){
printf(" char smd, amd, emd\n");
printf(" unsigned short int ads\n");
printf(" char atp\n");
printf(" unsigned short int spx\n");
printf(" unsigned short int spx, spy\n");
printf(" int svo, svw, sho, shw\n");
printf(" char esc, res\n");
printf(" unsigned short int ceg, ceo\n");
printf(" unsigned short int ccdtype\n");
printf(" unsigned short int do_extra\n");
printf(" unsigned short int cooling\n");
printf(" float temp\n");
printf(" int target_temp\n");
printf(" int fast_trigger\n");
printf(" unsigned short int vsspeed\n");
printf(" float readouttime\n");
printf("\n");
exit(-1);
}
......@@ -114,6 +122,17 @@ struct _pespccd {
retval = ioctl(hamaBuf_fd, PESP_IOCS_CCD, &ccd);
printf("retval = %d\n", retval);
} else
if ( strcmp(argv[1], "spy") == 0 ) {
unsigned short int spy;
printf("Read & Write\n");
retval = ioctl(hamaBuf_fd,PESP_IOCG_CCD, &ccd);
printf("Read retval = %d\n", retval);
sscanf(argv[2], "%hud", &spy);
ccd.spy = spy;
printf("Writing %s %d\n", argv[1], spy);
retval = ioctl(hamaBuf_fd, PESP_IOCS_CCD, &ccd);
printf("retval = %d\n", retval);
} else
if ( strcmp(argv[1], "svo") == 0 ) {
int svo;
printf("Read & Write\n");
......@@ -220,7 +239,96 @@ struct _pespccd {
printf("Writing %s %d\n", argv[1], depth);
retval = ioctl(hamaBuf_fd, PESP_IOCS_CCD, &ccd);
printf("retval = %d\n", retval);
}
} else
if ( strcmp(argv[1], "ccdtype") == 0 ) {
unsigned short int ccdtype;
sscanf(argv[2], "%hud", &ccdtype);
printf("Read & Write\n");
retval = ioctl(hamaBuf_fd,PESP_IOCG_CCD, &ccd);
printf("Read retval = %d\n", retval);
printf("Writing %s %d\n", argv[1], ccdtype);
ccd.ccdtype = ccdtype;
retval = ioctl(hamaBuf_fd, PESP_IOCS_CCD, &ccd);
printf("retval = %d\n", retval);
} else
if ( strcmp(argv[1], "temp") == 0 ) {
float temp;
sscanf(argv[2], "%f", &temp);
#if 0
printf("Read & Write\n");
retval = ioctl(hamaBuf_fd,PESP_IOCG_CCD, &ccd);
printf("Read retval = %d\n", retval);
printf("Writing %s %f\n", argv[1], temp);
ccd.priv_data.andor.temp = temp;
retval = ioctl(hamaBuf_fd, PESP_IOCS_CCD, &ccd);
#else
printf("Writing %s %f\n", argv[1], temp);
retval = ioctl(hamaBuf_fd, PESP_IOCS_TEMP, &temp);
printf("retval = %d\n", retval);
#endif
printf("retval = %d\n", retval);
} else
if ( strcmp(argv[1], "do_extra") == 0 ) {
unsigned short int do_extra;
sscanf(argv[2], "%hud", &do_extra);
#if 0
printf("Read & Write\n");
retval = ioctl(hamaBuf_fd,PESP_IOCG_CCD, &ccd);
printf("Read retval = %d\n", retval);
ccd.do_extra = do_extra;
printf("Writing %s %d\n", argv[1], do_extra);
retval = ioctl(hamaBuf_fd, PESP_IOCS_CCD, &ccd);
#else
printf("Writing %s %u\n", argv[1], do_extra);
retval = ioctl(hamaBuf_fd, PESP_IOCS_DOEXTRA, &do_extra);
printf("retval = %d\n", retval);
#endif
printf("retval = %d\n", retval);
} else
if ( strcmp(argv[1], "cooling") == 0 ) {
unsigned short int cooling;
printf("Read & Write\n");
retval = ioctl(hamaBuf_fd,PESP_IOCG_CCD, &ccd);
printf("Read retval = %d\n", retval);
sscanf(argv[2], "%hud", &cooling);
ccd.priv_data.andor.cooling = cooling;
printf("Writing %s %d\n", argv[1], cooling);
retval = ioctl(hamaBuf_fd, PESP_IOCS_CCD, &ccd);
printf("retval = %d\n", retval);
} else
if ( strcmp(argv[1], "target_temp") == 0 ) {
int temp;
sscanf(argv[2], "%d", &temp);
printf("Writing %s %d\n", argv[1], temp);
retval = ioctl(hamaBuf_fd, PESP_IOCS_WTEMP, &temp);
printf("retval = %d\n", retval);
} else
if ( strcmp(argv[1], "fast_trigger") == 0 ) {
int fast_trigger;
bool ft;
sscanf(argv[2], "%d", &fast_trigger);
ft = (bool)fast_trigger;
printf("Writing %s %d %d\n", argv[1], fast_trigger, ft);
retval = ioctl(hamaBuf_fd, PESP_IOCS_FASTTRIGGER, &ft);
printf("retval = %d\n", retval);
} else
if ( strcmp(argv[1], "vsspeed") == 0 ) {
int vsspeed;
unsigned short int ft;
sscanf(argv[2], "%d", &vsspeed);
ft = (unsigned short int)vsspeed;
printf("Writing %s %d %d\n", argv[1], vsspeed, ft);
retval = ioctl(hamaBuf_fd, PESP_IOCS_VSSPEED, &ft);
printf("retval = %d\n", retval);
} else
if ( strcmp(argv[1], "readouttime") == 0 ) {
float rt;
sscanf(argv[2], "%f", &rt);
printf("Writing %s %f\n", argv[1], rt);
retval = ioctl(hamaBuf_fd, PESP_IOCS_READOUTTIME, &rt);
printf("retval = %d\n", retval);
} else
{}
......