areaDetector  3-13
EPICS areaDetector framework
pco.h
Go to the documentation of this file.
1 
25 #ifndef PCO_H_
26 #define PCO_H_
27 
28 #include <epicsEvent.h>
29 #include <epicsTypes.h>
30 #include "ADCameralink.h"
31 #include "pco_structures.h"
32 #include "stopWatch.h"
33 
38 // putIntParam\‍((?<param>[a-z_]*).*
39 // createParam\‍("$+{param}",asynInt32,$+{param}\‍)
40 
41 class epicsShareClass pco : public ADCameralink {
42  public:
43  pco(const char *portName, const char *pcoPort, int maxBuffers,
44  size_t maxMemory, int priority, int stackSize);
45 
46  /* These are the methods that we override from ADDriver */
47  virtual asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value);
48  virtual asynStatus writeFloat64(asynUser *pasynUser, epicsFloat64 value);
49 
50  virtual void report(FILE *fp, int details);
51  void
52  pcoTask();
53  void pcoTask2();
56  epicsEventId
60  protected:
61  int pco_first;
62 #define FIRST_pco_PARAM pco_first
63 
65 
72  int open_com;
73 
74  int close_com;
83  int pco_doub_img_mode; // on or off
84 
90  int pco_dly_timebase; // double
91  int pco_fps_mode; // int
92  int pco_busy;
95 
106 
117 
128 
139 
150 
161 
170 
174  int pco_dbg_serprint; // set to int value of serial code to pco- then
175  // printing turns on for that code pnly
176 
177  int pco_ser_waitms; // wait between read and write in serial transaction.
178  // coreco need none. sisw need a few ms
179  int pco_do_camcontrol; // 1 to run camera contol loop- so we can turn it off
180  // in debigg
182 
184 
185  // pco grabber paramers
186 
193  int pco_setallparams; // for setting a large group of settings in one pass
194 
196 
199 
201 
205 
206  // dimax needs extra mem for images. if we need 1 img, we need mem for 3
207  // according
208  // to manual. this adds to num images when we declar mem. in dimax
210  int pco_last;
211 #define LAST_pco_PARAM pco_last
212 
213  enum { pco_paramint, pco_paramdoub };
214 
215  virtual void setDebuggingMessage(int level);
216 
217  volatile int dbg_msg_level;
218 
219  // true to kill dimax dump
220  volatile bool is_cancel_dump;
221 
222  // this is included in the pco.h file
223 
224  stopWatch time1;
225  stopWatch time2;
226  stopWatch grab_delay;
227 
228  void reconfigGrabber(void);
229  void checkEdgeDescramble(NDArray *img_ptr);
230 
231  // after we get image from card, we call this. It does nothing, but can be
232  // overridden
233  virtual void processNewImage(void *img_ptr);
234  virtual void keepHouse(void);
235  int updateParameters(asynUser *pasynUser, epicsInt32 ivalue,
236  epicsFloat64 dvalue, int paramtype);
237 
238  virtual int doSerialTransactions(int function, int ivalue, double dvalue,
239  int paramtype);
240 
241  virtual void clearPipe(FILE *fp);
242 
243  // load PCO DLL
244  int getlib(void);
245  int OpenCamera(void);
246  int Disconnected(int code, char *usrmsg);
247  void resetDimaxMemory(void);
248 
249  int checkCameraMessages(void);
250  int setPcoBaudrate(int function);
251  int ReportError(int code, char *usrmsg);
252  int doSerialCommand(pco_command &cmd, pco_response &rsp, unsigned char *obj,
253  int len);
254 
255  int getPcoStatusParams(void);
256 
257  int setPcoCameraLinkParams(int function);
258  int getPcoCameraLinkParams(void);
259 
260  int getPcoGeneralParams(void);
261  int setPcoGeneralParams(int function);
262 
263  int getPcoSensorParams(void);
264  int setPcoSensorParams(int function);
265 
266  int getPcoTimingParams(void);
267  int setPcoTimingParams(int function);
268 
269  int getPcoStorageParams(void);
270  int setPcoStorageParams(int function);
271 
272  int getPcoRecordingParams(void);
273  int setPcoRecordingParams(int function);
274 
275  int setPcoImageReadParams(int function);
276  int getPcoImageReadParams(void);
277 
278  int dumpOneFrame(int k);
279 
280  void dumpCameraMemory(void);
281 
282  int doHighLevelParams(int function);
283  static char dll_name[];
284 
285 #ifndef USEASYNSERIAL
286  comportInterface *serial_port;
287 #endif
288 
289  void dbgSerial(void);
290 
292 
296 
297  // avoids race condition- allows camera stats to shut down ADACquire setting
298  // to 0, if no recording is happening.
299  // user turns on acquire, camera turns it off when acq is done.
301 
302  // if trye then dump[ counters get set to 1 and num of imgs in memory.
304 
305  // true to reset mem on acquire.
307 
308  // how may written to port
309  size_t mynwrite;
310  size_t mynread;
312  // asyn user for the serial port
313  asynUser *pasynUserSerial;
314 
315  // interface to serial port octet
316  asynInterface *paynOctet;
317  asynInterface *paynOption;
318 
319  char myServerPort[255];
320  //
321  // camera grabber stuff
322  //
323 
324  // enums to choose which camera we are using...
325  enum whichPCOCam {
329  pco_undef
330 
331  };
332 
333  // we have one overridden function. it is called when we get a frame
334 
335  stopWatch image_timer;
336  // space for 128 pixels- we test image to see if its same as last..
337  unsigned short test_line[128];
338 
339  // enough for 1 edge imgae. pco imges are smaller...
340  unsigned short *temp_image;
341 
342  // for debugging....
343 
344  int lastxsize, lastysize;
345 
346  void checkEdgeDescramble(void *img_ptr);
347 
348  int intFlEndian(unsigned int in);
349 
350  private:
351  // int function;
352 
353  char cpstr[256];
354  /* Our data */
355  epicsEventId startEventId;
356  epicsEventId imageEventId;
357  epicsTimeStamp acqStartTime;
358  epicsTimeStamp acqEndTime;
359  epicsTimerId timerId;
360  NDArray *pData;
361  asynUser *pasynUserServer;
362  NDArrayPool *array_pool;
363 };
364 #endif
365 
366 #define NUM_pco_PARAMS (&LAST_pco_PARAM - &FIRST_pco_PARAM + 1)
N-dimensional array class; each array has a set of dimensions, a data type, pointer to data,...
Definition: NDArray.h:99
The NDArrayPool class manages a free list (pool) of NDArray objects.
Definition: NDArray.h:168
Inline class to create a binary command to be sent to pco cameras over serial port.
Definition: pco_structures.h:36
Class to define a single binary response from pco cameras, received over serial port.
Definition: pco_structures.h:180
pco.cpp Area Detector Driver for PCO cameras that use Camera Link Inherite ADCameraLink to provide Im...
Definition: pco.h:41
int pco_cancel_img
Definition: pco.h:122
int pco_rec_submode
Definition: pco.h:105
int pco_image_rate
Definition: pco.h:188
int pco_read_st_img
Definition: pco.h:116
int pco_init_selftest
!
Definition: pco.h:80
int pco_read_which_seg
Definition: pco.h:115
int pco_rec_stop_event_mode
Definition: pco.h:112
int pco_dump_camera_memory
Definition: pco.h:143
int pco_adc_mode
Definition: pco.h:85
int pco_num_imgs_seg3
Definition: pco.h:131
bool is_reset_dump_counters
Definition: pco.h:303
int pco_ser_waitms
Definition: pco.h:177
int pco_temp_setpt
Definition: pco.h:86
int close_com
Definition: pco.h:74
int last_which_camera
Definition: pco.h:294
int pco_hotpix_corr
Definition: pco.h:165
int pco_trigger_mode
Definition: pco.h:140
int pco_camlink_cont
Definition: pco.h:138
int pco_camlink_pixperclk
Definition: pco.h:137
int pco_last
Definition: pco.h:210
int pco_comport_number
Definition: pco.h:168
int pco_reconfig_grabber
Definition: pco.h:159
int pco_edge_fastscan
Definition: pco.h:167
int pco_1612_lookup
Definition: pco.h:166
int pco_play_slow
Definition: pco.h:148
int pco_acqen_sig_stat
Definition: pco.h:109
int pco_globshut_mcfname
Definition: pco.h:203
int pco_setallparams
Definition: pco.h:193
int pco_rpt_img
Definition: pco.h:121
int pco_health_status
Definition: pco.h:78
int pco_camera_seg_size1
Definition: pco.h:99
xPCO_Description pco_desc
Definition: pco.h:293
int pco_set_frame_rate
Definition: pco.h:160
int pco_camera_seg_size0
Definition: pco.h:98
int pco_do_camcontrol
Definition: pco.h:179
size_t mynwrite
Definition: pco.h:309
int pco_fps_mode
Definition: pco.h:91
int pco_dly_timebase
! need to put into cpp- double
Definition: pco.h:90
int pco_imgs2dump
Definition: pco.h:144
stopWatch image_timer
Definition: pco.h:335
int pco_memreq_cnt
Definition: pco.h:145
int pco_reset_default_settings
Definition: pco.h:79
int com_port_name
Definition: pco.h:71
int pco_com_err_max
Definition: pco.h:195
void checkEdgeDescramble(void *img_ptr)
int pco_max_imgs_seg3
Definition: pco.h:132
int pco_cclines
Definition: pco.h:136
int pco_dbg_serstr
Definition: pco.h:173
int pco_is_sleep
Definition: pco.h:69
int pco_max_imgs_seg0
Definition: pco.h:125
comportInterface * serial_port
Definition: pco.h:286
size_t mynread
Definition: pco.h:310
int pco_first
Definition: pco.h:61
int pco_timestamp_mode
Definition: pco.h:110
int pco_num_imgs_seg1
Definition: pco.h:126
int com_error_counter
Definition: pco.h:291
int pco_clear_ram_seg
Definition: pco.h:102
stopWatch time2
Definition: pco.h:225
int pco_read_end_img
Definition: pco.h:118
int pco_health_error
Definition: pco.h:77
stopWatch time1
Definition: pco.h:224
int pco_noise_filt_mode
Definition: pco.h:88
int pco_doub_img_mode
Definition: pco.h:83
int pco_ready2acquire
Definition: pco.h:183
int pco_arm_camera
Definition: pco.h:111
int pco_camlink_pixfreq
Definition: pco.h:135
int pco_which_camera
Definition: pco.h:191
unsigned short * temp_image
Definition: pco.h:340
int pco_reset_memory
Definition: pco.h:142
int pco_grab_waittime
Definition: pco.h:181
bool is_allow_kill_acquire
Definition: pco.h:300
int pco_do_read_imgs
Definition: pco.h:119
int pco_camera_tot_ram_size
Definition: pco.h:94
epicsEventId stopEventId
This should be private but is accessed from C, must be public.
Definition: pco.h:57
volatile bool is_cancel_dump
Definition: pco.h:220
int is_com_open
Definition: pco.h:75
int pco_cdi_mode
Definition: pco.h:156
int pco_check_time2
Definition: pco.h:154
int pco_test_pixels
Definition: pco.h:189
int pco_camera_seg_size2
Definition: pco.h:100
int pco_rollshut_mcfname
Definition: pco.h:202
int pco_dump_counter
Definition: pco.h:152
int pco_max_imgs_seg2
Definition: pco.h:130
int open_com
Definition: pco.h:72
int pco_conv_12to16
Definition: pco.h:204
int pco_max_imgs_seg1
Definition: pco.h:127
int pco_array_counter
Definition: pco.h:187
bool is_reset_memory
Definition: pco.h:306
int pco_storage_mode
Definition: pco.h:104
int lastxsize
Definition: pco.h:344
int pco_pixelrate
! need to put into cpp- int
Definition: pco.h:82
int pco_dimax_nimgs_fudge
Definition: pco.h:209
int pco_dbg_serprint
Definition: pco.h:174
int pco_sleep_ms
Definition: pco.h:68
int myeomreason
Definition: pco.h:311
int pco_force_trigger
Definition: pco.h:146
int pco_favor_dlytime
Definition: pco.h:164
int pco_dump_waitms
Definition: pco.h:153
int pco_sensor_format
!
Definition: pco.h:81
volatile int dbg_msg_level
Definition: pco.h:217
int pco_bit_alignment
Definition: pco.h:123
int pco_camera_ram_page_size
Definition: pco.h:97
int pco_camera_ram_npages
Definition: pco.h:96
int pco_dbg_serread
Definition: pco.h:172
int pco_baudrate
Definition: pco.h:141
int pco_dump_maxdatarate
Definition: pco.h:163
int pco_exp_timebase
Definition: pco.h:89
int pco_num_imgs_seg2
Definition: pco.h:129
int pco_is_frame_rate_mode
Definition: pco.h:169
int pco_rec_status
Definition: pco.h:107
int pco_kill_ioc
Definition: pco.h:197
int pco_double_image_error
Definition: pco.h:190
int pco_frame_rate
Definition: pco.h:155
int pco_global_shutter
Definition: pco.h:200
int pco_delay_time
Definition: pco.h:162
int pco_stop_record
Definition: pco.h:114
int pco_dbg_serwrite
Definition: pco.h:171
int pco_check_time
Definition: pco.h:133
stopWatch grab_delay
Definition: pco.h:226
int pco_is_log
Definition: pco.h:70
int pco_offset_mode
Definition: pco.h:87
whichPCOCam
Definition: pco.h:325
@ pco_other
Definition: pco.h:328
@ pco_edge
Definition: pco.h:327
@ pco_dimax
Definition: pco.h:326
int pco_play_stop
Definition: pco.h:149
int pco_active_seg
Definition: pco.h:103
int pco_run_counter
Definition: pco.h:67
int pco_req_img
Definition: pco.h:120
int pco_camera_seg_size3
Definition: pco.h:101
int pco_is_running
Definition: pco.h:64
int pco_rec_stop_event_nimgs
Definition: pco.h:113
int pco_dnsu_init_mode
Definition: pco.h:158
int pco_cancel_dump
Definition: pco.h:147
asynUser * pasynUserSerial
Definition: pco.h:313
asynInterface * paynOctet
Definition: pco.h:316
int pco_descramble
Definition: pco.h:192
int pco_acq_mode
Definition: pco.h:108
bool is_enable_which_camera
Definition: pco.h:295
int pco_disable_descramble
Definition: pco.h:198
asynInterface * paynOption
Definition: pco.h:317
int pco_busy
Definition: pco.h:92
int pco_dnsu_mode
Definition: pco.h:157
int pco_exp_trig_stat
Definition: pco.h:93
int pco_force_check
Definition: pco.h:134
int serial_callback
Definition: pco.h:66
int pco_live_view
Definition: pco.h:151
int pco_health_warning
Definition: pco.h:76
int pco_num_imgs_seg0
Definition: pco.h:124
list value
Definition: makeDbAndEdl.py:234
aps designed struct based on PCO SDK.
Definition: pco_structures.h:451