Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
331 commits
Select commit Hold shift + click to select a range
9b46239
added trigger polarity parameter
subindev-d Nov 24, 2020
6f27bcf
added trigger polarity feature
subindev-d Nov 25, 2020
d4c127e
removed debug print lines
subindev-d Nov 27, 2020
048a9ee
formated and commented
subindev-d Nov 27, 2020
50c34d9
added arraycallbacks
subindev-d Dec 1, 2020
859f83d
Merge pull request #22 from CentralLaserFacility/21-add-trigger-param…
TineZata Dec 9, 2020
3acab26
paramque working iwht int32
subindev-d Dec 11, 2020
c7a4e5d
float que is using for int and float messages
subindev-d Dec 15, 2020
7516ae3
uchar to long, long to uchar are implemented
subindev-d Dec 15, 2020
a6484ef
implemented acquire time
subindev-d Dec 16, 2020
ed4695a
added comments
subindev-d Dec 16, 2020
f3d8148
frame rate is moved under acquire period
subindev-d Dec 17, 2020
c837219
added comments
subindev-d Dec 18, 2020
9ce4d5e
Implemented Temperature Actual
subindev-d Dec 21, 2020
bfdcadf
implemented the updating of Temperature Actual
subindev-d Dec 21, 2020
0ee0d12
testing for exposure ettings
subindev-d Dec 22, 2020
c4f7f4a
small change
Sarat-Raj-S Dec 22, 2020
6bc0ef8
Test Check-in with comment
aoun-muhammad Dec 22, 2020
4672824
implemented the PCB temperature feature and refactored the code
aoun-muhammad Dec 22, 2020
6973528
Implemented set and get for the TEC temperature, and enabling and dis…
aoun-muhammad Dec 22, 2020
6f07baf
updating pvs at the startup
subindev-d Dec 23, 2020
070bf01
added methods for ROI feature
subindev-d Dec 23, 2020
bdd4871
Refactored the code with proper naming conventions
aoun-muhammad Dec 23, 2020
abb2c22
Implemented pre-amp gain toggling feature
aoun-muhammad Dec 23, 2020
a3e97b4
reloading video settings after roi settings
subindev-d Dec 24, 2020
0e65928
added scan field for input dbs, fixed RBV pvs
subindev-d Dec 24, 2020
4bbab7d
sizeX and sizeY implemented
subindev-d Dec 24, 2020
befa871
eod
subindev-d Dec 24, 2020
071de69
fixed the toggling of TEC
aoun-muhammad Dec 24, 2020
c979d89
Implemented the basic skeleton for FPGA EEPROM comms toggling
aoun-muhammad Dec 24, 2020
bf61534
implemented all ROI features
subindev-d Dec 29, 2020
8d686ed
moved trigger polarity to que
subindev-d Dec 29, 2020
f68fc0d
implemented AcquireTime and tested it
Sarat-Raj-S Dec 30, 2020
d3f98cb
fixed trigger polarity
subindev-d Dec 31, 2020
587ca4d
Implemented setting of system status and toggling of FPGA Comms
aoun-muhammad Jan 4, 2021
50dac3f
Implemented the serial number reading
aoun-muhammad Jan 4, 2021
75f49f7
Implemented all the PVs related to manufacturers data, also refactore…
aoun-muhammad Jan 5, 2021
3e3ccdf
Merge pull request #32 from CentralLaserFacility/30-implement-gain-ma…
subindev-d Jan 6, 2021
083a17b
Merge pull request #26 from CentralLaserFacility/25-implement-frame-rate
subindev-d Jan 6, 2021
4eabf8a
Merge pull request #33 from CentralLaserFacility/27-implement-tempera…
subindev-d Jan 6, 2021
77d6d46
Merge branch '29-add-exposure-settings' into First-phase-development
aoun-muhammad Jan 6, 2021
50f0d4d
Resolved the merge conflicts
aoun-muhammad Jan 6, 2021
212517f
Merge branch '28-add-ROI-feature' into First-phase-development
aoun-muhammad Jan 6, 2021
b48ce47
fixed merger request error
subindev-d Jan 7, 2021
b4a933c
replaced hard coded number with macro
subindev-d Jan 7, 2021
931cf5d
made alphabet small for local variables.
subindev-d Jan 7, 2021
873b243
Merge pull request #37 from CentralLaserFacility/25-implement-frame-rate
subindev-d Jan 7, 2021
22e5356
Merge pull request #38 from CentralLaserFacility/28-add-ROI-feature
subindev-d Jan 7, 2021
3891b27
made all local variable starts with small letter
subindev-d Jan 7, 2021
c31f076
Merge pull request #39 from CentralLaserFacility/28-add-ROI-feature
subindev-d Jan 7, 2021
f12c586
added phoebus files
subindev-d Jan 8, 2021
8fe043b
testing image widget
subindev-d Jan 8, 2021
73388c0
code review changes
subindev-d Jan 12, 2021
f496b2c
eod
subindev-d Jan 12, 2021
f0899f8
added scaling option to image
subindev-d Jan 13, 2021
9a548ab
fixed autoscaling error
subindev-d Jan 13, 2021
c5ab04a
algined settings window and acquire options
subindev-d Jan 13, 2021
90657ea
Merge pull request #41 from CentralLaserFacility/40-add-settings-feat…
subindev-d Jan 13, 2021
74ff96b
fixed ROI offset y
subindev-d Jan 13, 2021
38da00a
Merge pull request #43 from CentralLaserFacility/42--fix-ROI-offset-y…
subindev-d Jan 13, 2021
a360aa0
modified according to code review changes
Sarat-Raj-S Jan 14, 2021
82cb133
renamed variable from exposure_frequency to exposure_count_to_time
Sarat-Raj-S Jan 14, 2021
8bdf64e
Merge branch '29-add-exposure-settings' into First-phase-development
subindev-d Jan 14, 2021
f2900fc
fixed merge conflict First-phase-development <-- 29-add-exposure-sett…
subindev-d Jan 14, 2021
60343ed
updating pv ac the starting
subindev-d Jan 19, 2021
34080af
implemented auto ratio mode
subindev-d Jan 20, 2021
1079056
code review changes
subindev-d Jan 20, 2021
1d19a07
Merge pull request #47 from CentralLaserFacility/46-update-pvs-at-the…
subindev-d Jan 20, 2021
2c62275
Merge pull request #48 from CentralLaserFacility/44-update-the-origin…
subindev-d Jan 20, 2021
c044964
resetting video settings after sizex changes
subindev-d Jan 21, 2021
ee2450b
set binning after changing sizeX.
subindev-d Jan 22, 2021
242687a
combined reset video settings and binning
subindev-d Jan 25, 2021
a4a8f98
Merge pull request #51 from CentralLaserFacility/49-fix-roi-sizex-off…
subindev-d Jan 25, 2021
df69825
ui modified and added units
subindev-d Jan 28, 2021
a9cb1ef
fixed erros in the tmeplate and resettoing for y axis also
subindev-d Jan 28, 2021
7230591
Merge pull request #54 from CentralLaserFacility/53-modify-ui-and-add…
subindev-d Jan 28, 2021
47cc449
Merge pull request #52 from CentralLaserFacility/First-phase-development
TineZata Jan 28, 2021
3fc3520
changes made for the export
Sarat-Raj-S Jan 28, 2021
940e276
save image in css is implemented, code needs few fixes and cleaning
subindev-d Jan 29, 2021
01d0c54
flawless working export button
Sarat-Raj-S Feb 3, 2021
88cf448
finished working on export
Sarat-Raj-S Feb 3, 2021
20f25ff
ready for review
Sarat-Raj-S Feb 3, 2021
67a6f9f
Merge pull request #56 from CentralLaserFacility/50-Feature-Capture-I…
subindev-d Feb 3, 2021
26a2d3d
fixed and finalized code for exporting the image
Sarat-Raj-S Feb 3, 2021
aa8937c
css changes after demo
subindev-d Feb 12, 2021
fa510db
added print message for the debugging
subindev-d Feb 15, 2021
e22e495
fixed the bug, code clean up to be done
subindev-d Feb 15, 2021
87d00c8
cleaned debug print statements
subindev-d Feb 15, 2021
d0b2916
Merge pull request #62 from CentralLaserFacility/61-test-TEC-setting
subindev-d Feb 19, 2021
46356b1
added autoscale option to image window
subindev-d Feb 22, 2021
edc83a2
added the demo changes
subindev-d Feb 22, 2021
6d1570b
cleaned the display
subindev-d Feb 22, 2021
91d7790
included image widget settings in tab window
subindev-d Mar 2, 2021
5dfa03f
ui changes
subindev-d Mar 5, 2021
1c2561c
recreated settings window in image window
subindev-d Mar 5, 2021
be1f70d
code review changes
subindev-d Mar 5, 2021
370b1ac
Merge pull request #63 from CentralLaserFacility/59-First-phase-dem0-…
subindev-d Mar 5, 2021
ced1230
disabled alarm border
subindev-d Mar 9, 2021
e3fe2b7
attribute is reading successfully
subindev-d Mar 10, 2021
5bc3306
added manufacturer name
subindev-d Mar 10, 2021
44b8268
Merge branch 'First-phase-development' of https://github.com/CentralL…
subindev-d Mar 12, 2021
df1f4ae
acquire task wont start if the connection failed
subindev-d May 4, 2021
3373b96
acqurring starts only if serial communication is successfull
subindev-d May 5, 2021
53c8de5
implemeted pxd_readushort
subindev-d May 20, 2021
e6ae2c7
added autosave
subindev-d Jun 3, 2021
eef067c
fixed autosave for pixci_settings
subindev-d Jun 4, 2021
76d0dd2
Merge pull request #70 from CentralLaserFacility/69-acquire-image-dat…
subindev-d Jun 11, 2021
ac904d1
added camera model
subindev-d Sep 8, 2021
ed380fa
added 4240 format files
subindev-d Sep 14, 2021
6ab0972
added 4240 binning macros
subindev-d Sep 14, 2021
c8a5c57
added binning settings file for 4240
subindev-d Sep 15, 2021
5e3a9a9
updated the comments
subindev-d Sep 16, 2021
2bfb4c3
updated format file name and st.cmd
subindev-d Sep 20, 2021
8686e63
Merge pull request #73 from CentralLaserFacility/72-test-camera-model…
subindev-d Sep 29, 2021
c75dfcf
updating the format structure
subindev-d Nov 12, 2021
97b7909
fixed roi issue
subindev-d Nov 16, 2021
a3000df
corrected the order of commands
subindev-d Nov 16, 2021
cc88504
removed unnecessary variables
subindev-d Nov 16, 2021
3d9182e
added binning factor to set resolution
subindev-d Nov 17, 2021
426248d
fixed binning images
subindev-d Nov 17, 2021
ba7fe2e
removed commented codes
subindev-d Nov 17, 2021
52d826d
Merge pull request #76 from CentralLaserFacility/75-wrong-pixel-readi…
sandeepmalu Nov 17, 2021
3612b0a
Insert EPICS compatible LICENSE
tim-speight Aug 11, 2023
19b5555
Merge pull request #57 from CentralLaserFacility/First-phase-development
irierr Oct 8, 2024
36e56fe
format pixi header and cpp files for better readability using vscode …
irierr Oct 14, 2024
0cc4dd5
implement a getTriggerMode() method, replacing an empty getTriggerSta…
irierr Oct 24, 2024
995bc9c
handle asynStatus in getTriggerMode properly
irierr Oct 25, 2024
9f55630
add updateTriggerMode function and add it to the updateStatus functio…
irierr Nov 4, 2024
84b23a4
add some test prints
irierr Nov 4, 2024
2976c1c
messing around
irierr Nov 4, 2024
ec8972f
add more debug prints
irierr Nov 5, 2024
98da835
fix autosave for trigger polarity,
irierr Nov 6, 2024
b2032d0
fix include issue
irierr Nov 6, 2024
e7a6311
remove getting trigger mode from updateInitialPVs method
irierr Nov 6, 2024
32582ce
Add a WriteEnabler record that enables writing of PVs:
irierr Nov 6, 2024
3aef378
added todo
irierr Nov 6, 2024
85a801c
Moved records in Pixci.template into sections with descriptions
irierr Nov 6, 2024
3f57270
remove unnecessary fields in update functions and add a descriptor
irierr Nov 7, 2024
db7b8a5
Remove getTriggerMode() as it is not used anywhere
irierr Nov 20, 2024
b50d1fc
Merge branch '79-fix-issue-with-trigger-mode-not-persisting-properly-…
irierr Nov 20, 2024
e14e7ff
Merge pull request #84 from CentralLaserFacility/79-fix-issue-with-tr…
paul-richardson-clf Nov 20, 2024
ec04cdb
add definitions for END_OF_TRANSMISSION_BYTE and TRIGGER_MODE_BYTE, B…
irierr Nov 20, 2024
56235db
Merge branch 'development' into 85-disable-pv-write-access-when-ioc-i…
irierr Nov 20, 2024
7c7009d
Merge pull request #86 from CentralLaserFacility/85-disable-pv-write-…
paul-richardson-clf Nov 20, 2024
c506e93
move definitions to using constexpr and move them into pixci.h, fix s…
irierr Nov 20, 2024
df917f8
Merge branch 'development' into 88-make-global-variables-for-register…
irierr Nov 20, 2024
0cbe7fb
more register definitions
irierr Nov 21, 2024
9bfcec1
change more define statements to constexpr statements and move all bu…
irierr Nov 21, 2024
bb88726
make some type conversion more explicit to remove compiler warnings
irierr Nov 21, 2024
36ecfca
remove sendSoftTrigger() - feature creep
irierr Nov 21, 2024
cd0a8f0
some changes for the PR
irierr Nov 22, 2024
3c1f070
initialise arrays, and remove some unnecessary ones. handle type conv…
irierr Nov 26, 2024
48b8c1d
initialized every var now
irierr Nov 26, 2024
1987ffb
init some more vars
irierr Nov 28, 2024
b70eb6d
moved event handler to be a attribute of the class
irierr Nov 28, 2024
ac8065c
Merge pull request #89 from CentralLaserFacility/88-make-global-varia…
amazstfc Nov 29, 2024
0a1f22f
add curly brackets to control scope for PR_EXTERNAL case in setTrigge…
irierr Dec 3, 2024
d4bf5ee
Merge pull request #92 from CentralLaserFacility/91-compilation-error…
adam-clf Dec 3, 2024
a9a98bc
change defintions of DETECTOR_1024 and DETECTOR_2048 to DETECTOR_1K &…
irierr Dec 10, 2024
a669f63
tid up errors and initialisation
irierr Dec 10, 2024
39140fc
convert types in setupAcquisition and paramTask
irierr Dec 10, 2024
01421b8
move commits into correct branch
irierr Dec 10, 2024
34492c8
Tidy up updateStatus function
irierr Dec 10, 2024
9f2200b
finish converting types
irierr Dec 10, 2024
39624d9
fix type compilation error
irierr Dec 10, 2024
3302d66
fix compilation warnings
irierr Dec 10, 2024
10114a7
remove redundant static declaration
irierr Dec 10, 2024
3d3f727
fix wrong boolean
irierr Dec 12, 2024
5166ba2
fix inconsistencies with unsigned types
irierr Dec 12, 2024
34fd5a7
Merge pull request #93 from CentralLaserFacility/90-convert-all-types…
hussam-stfc Dec 12, 2024
9d5c33c
recreate and reorganise format files
irierr Dec 16, 2024
eb325f2
add fvb, refactor reloadVideoSettings into changeVideoFormatConfig wi…
irierr Dec 18, 2024
062c103
fix paths
irierr Dec 18, 2024
27c470a
add binning options PVs
irierr Dec 18, 2024
222887c
remove format file from config
irierr Dec 18, 2024
9b0a340
Revert "remove format file from config"
irierr Dec 19, 2024
7e30ac5
add format files back
irierr Dec 19, 2024
b9ea0ae
remove bin options db
irierr Dec 19, 2024
9852370
add camera model pv
irierr Dec 19, 2024
0f9fbb5
fix config call in example ioc
irierr Dec 19, 2024
9919b93
change CameraModel record type to longin
irierr Dec 19, 2024
6e554c7
change to ai
irierr Dec 19, 2024
7d20ed3
Merge pull request #99 from CentralLaserFacility/95-investigate-issue…
adam-clf Jan 29, 2025
218c4cc
stop autosaving temperature
irierr Feb 13, 2025
30443ae
override temperature record in pixci template to init temp to 20 not …
irierr Feb 13, 2025
98eb115
add getting tectemp to update temp button
irierr Feb 13, 2025
9a2b4e5
revert last change
irierr Feb 13, 2025
c10ad5b
remove unnecessary records from autosave
irierr Feb 13, 2025
fabf85d
add comment to req file
irierr Feb 13, 2025
6035f84
add more specific commente
irierr Feb 13, 2025
c92d451
Merge pull request #104 from CentralLaserFacility/102-temperature-aut…
paul-richardson-clf Feb 13, 2025
98a52e8
add skeleton for shutter open & close delay
irierr Feb 13, 2025
57c173c
add logic for shutter delay
irierr Feb 14, 2025
0b3c366
Add EGU to shutter delay records
irierr Feb 14, 2025
debfd2d
move adshutter open and close delay function writing to float 64 as t…
irierr Feb 18, 2025
2e14c59
fix shutter open and close delay
irierr Feb 18, 2025
1df34fa
remove unnecessary comment
irierr Feb 18, 2025
0b6b10e
fix function helper comments
irierr Feb 18, 2025
af9635b
add MILLISECOND_PER_COUNT back to conversion functions
irierr Feb 18, 2025
ef9ade5
add limits to shutter open/close delay based on conversion to 8 bit val
irierr Feb 18, 2025
2780583
add saving trigger mode and polarity before changing video format con…
irierr Feb 18, 2025
f350faa
add conversion between signed and unsigned to fix error with setting …
irierr Feb 18, 2025
1524949
correct limit
irierr Feb 18, 2025
174ef07
Merge pull request #105 from CentralLaserFacility/103-shutter-control…
hussam-stfc Feb 18, 2025
ca4494b
Merge branch 'development' into 101-issue-when-changing-bin-value-whi…
irierr Feb 18, 2025
3f4000e
fix issue with FVB not working for 2k cam
irierr Feb 18, 2025
05c59e9
add check for cam model and coordinate
irierr Feb 18, 2025
66f05fb
Merge pull request #107 from CentralLaserFacility/106-fvb-option-does…
tim-speight Feb 18, 2025
09c894a
potentially fix issue
irierr Feb 19, 2025
ecaaee6
Change to static cast and make it in line
irierr Feb 19, 2025
6d3b04b
noticed that gain wasn't working so added it in properly
irierr Feb 19, 2025
d487a94
Merge pull request #109 from CentralLaserFacility/108-compilation-war…
amazstfc Feb 20, 2025
e4ab54b
Merge branch 'development' into 101-issue-when-changing-bin-value-whi…
irierr Feb 20, 2025
e762d2b
fix bug with trigger mode being changed to live mode when changing bi…
irierr Feb 21, 2025
049480d
add records to disable settings when acquiring
irierr Feb 21, 2025
af628f5
remove adstatus
irierr Feb 21, 2025
899e35a
remove unncessary line
irierr Feb 21, 2025
5658978
Merge pull request #111 from CentralLaserFacility/101-issue-when-chan…
amazstfc Feb 21, 2025
a729dd7
change top level video settings folder to fmt, add more generic db ma…
irierr Mar 3, 2025
a56b55c
Merge pull request #113 from CentralLaserFacility/112-prepare-adpixci…
sandeepmalu Mar 4, 2025
33b5341
improve build process for fmt files,
irierr Mar 6, 2025
aaedecd
fix issue with fmt file building always running for every fmt file ev…
irierr Mar 6, 2025
6ad9e57
Merge pull request #114 from CentralLaserFacility/112-prepare-adpixci…
sandeepmalu Mar 12, 2025
5bc890b
move to using ADModel instead of PR_CameraModel
irierr Mar 12, 2025
7e3bf6e
change camera model to string type in line with ADModel
irierr Mar 12, 2025
9a7c103
Merge pull request #116 from CentralLaserFacility/110-move-pr_cameram…
hussam-stfc Mar 13, 2025
aac898f
bring example ioc make system in line with raptor ioc
irierr Mar 13, 2025
e7a832a
update example ioc st.cmd to be like raptor ioc
irierr Mar 13, 2025
d75709f
add prod_ioc back in
irierr Mar 13, 2025
0119fd9
clean up makefile a bit
irierr Mar 13, 2025
86cff5f
add #RULES_FMT lines
irierr Mar 13, 2025
ebdc3f8
cleean up pixci code
irierr Mar 14, 2025
3b34603
move include statements around
irierr Mar 14, 2025
a858ea6
move them all around again
irierr Mar 14, 2025
47a1708
and again
irierr Mar 14, 2025
efe0b13
final move of include files
irierr Mar 14, 2025
a95d728
add copyright
irierr Mar 14, 2025
f08beed
replace using std::string with just calling std::string
irierr Mar 14, 2025
8a86930
change NULL to nullptr in some places
irierr Mar 18, 2025
94e7155
Merge pull request #119 from CentralLaserFacility/118-run-a-cpp-stati…
amazstfc Mar 18, 2025
c4dc57c
Merge pull request #117 from CentralLaserFacility/115-fix-issues-with…
tim-speight Mar 19, 2025
aca303f
Separate out camera and frame grabber code (#128)
irierr Jun 4, 2025
6890363
Improve README (#130)
irierr Jun 5, 2025
1ff8bcc
remove unused, uncompiled code in pxd_setVideoResolution func in ADPi…
irierr Jul 2, 2025
8e42c16
Standardise error handling (#129)
irierr Jul 3, 2025
ef8a0c8
remove todo regarding linux implementation (#134)
irierr Jul 3, 2025
c25898c
add pixel readout clock and readout mode settings (#135)
irierr Jul 4, 2025
ab0e669
Get repo ready for release as open source software (#141)
irierr Aug 1, 2025
55c75d4
Merge remote-tracking branch 'origin/main' into development
irierr Aug 1, 2025
caa38e9
Add acquire one frame and cancel acquire functionality (#138)
irierr Aug 4, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
name: Release areaDetector Driver on PR merged into main

on:
pull_request:
types: [closed]
branches:
- main

jobs:
release-ioc:
if: github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'main'
uses: CentralLaserFacility/CLF-github-actions/.github/workflows/release-on-github-workflow.yml@main
with:
runner: ubuntu-latest
custom_version: ${{ github.event.pull_request.title }}
21 changes: 21 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
bin
lib
include
db
!pixciApp/Db
dbd
*_BAK.adl
documentation.html
envPaths*
cdCommands
dllPath.bat
auto_settings.sav*
configure/*.local
cfg
fmt
!pixciApp/src/fmt
O.*/
*~
*.swp
.vs*
/devTools
31 changes: 9 additions & 22 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -1,28 +1,15 @@
BSD 3-Clause License
3 Clause BSD licence

Copyright (c) 2023, UKRI STFC Central Laser Facility
© Copyright 2025 UK Research and Innovation, Science and Technology Facilities Council

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
[Authors: Irie Railton, Subindev Devadasan, Aoun Muhammad, Sidharth Sarat Raj Batchu, Timothy Speight]

1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23 changes: 23 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#Makefile at top of application tree
TOP = .
include $(TOP)/configure/CONFIG
DIRS := $(DIRS) configure
DIRS := $(DIRS) pixciSupport
DIRS := $(DIRS) pixciApp
pixciApp_DEPEND_DIRS += pixciSupport
ifeq ($(BUILD_IOCS), YES)
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocs))
iocs_DEPEND_DIRS += pixciApp
endif
include $(TOP)/configure/RULES_TOP

uninstall: uninstall_iocs
uninstall_iocs:
$(MAKE) -C iocs uninstall
.PHONY: uninstall uninstall_iocs

realuninstall: realuninstall_iocs
realuninstall_iocs:
$(MAKE) -C iocs realuninstall
.PHONY: realuninstall realuninstall_iocs

71 changes: 70 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,71 @@
# ADPixci
AreaDetector driver for Raptor Eagle-XV camera using Pixci frame grabber
[AreaDetector](https://areadetector.github.io/areaDetector/) driver for integrating [PIXCI&reg;](https://www.epixinc.com/products/framegrabbers.htm) camera link frame grabbers with supported cameras into [EPICS](https://epics-controls.org/). \
Uses the [XCLIB&trade; Library](https://www.epixinc.com/products/xclib.htm) to interface with frame grabbers.

### Supported Hardware
#### Cameras
- [Raptor Photonics Eagle XV](https://www.raptorphotonics.com/products/eagle-xv/) 4240
- [Raptor Photonics Eagle XV](https://www.raptorphotonics.com/products/eagle-xv/) 4710

#### Frame Grabbers
- PIXCI&reg; EB1
- PIXCI&reg; E8

This software has only been tested on the above camera link frame grabbers but *should* work for other similar ones too.

#### Manuals

[The PIXCI® E8 User's Manual](https://www.epixinc.com/manuals/pixci_e14el/index.htm) and [PIXCI® EB1 User's Manual](https://www.epixinc.com/manuals/pixci_eb1/index.htm) from [EPIX, Inc](https://www.epixinc.com) were used to inform the development of ADPixci. \
The Eagle XV II Instruction Manual from [Raptor Photonics](https://www.raptorphotonics.com/) was used to inform the development of ADRaptorEagleXV, but it is only available upon request from their support team.

### Architecture
The high level architecture of this driver is shown in the below diagram. \
*Note: this does not show all methods and attributes.*

The abstract class ADPixci inherits from the base areaDetector driver and provides generic code for using PIXCI&reg; frame grabbers with areaDetector. \
ADRaptorEagleXV inherits from ADPixci, providing camera specific code and serial commands.

```mermaid
classDiagram
direction LR
ADDriver <|-- ADPixci
ADPixci <|-- ADRaptorEagleXV
class ADDriver{
- deviceIsReachable: bool
+ writeInt32()
+ connect()
+ getShutter()
}
class ADPixci["*ADPixci*"]{
# driverName: string
- paramMsgQue: Queue
+ acquireTask()
+ paramTask()
# addtoParamQueue()
# writeReadSerial() int
# writeInt32() asynStatus
# writeFloat64() asynStatus
# acquireStart() asynStatus
# acquireStop() asynStatus
# changeVideoFormatConfig() asynStatus
}
class ADRaptorEagleXV{
- writeSerialRegister() asynStatus
- readSerialRegister() asynStatus
- writeInt32() asynStatus
- changeVideoFormatConfig() asynStatus
}
click ADDriver href "https://areadetector.github.io/areaDetector/ADCore/ADDriver.html" "ADDriver documentation"
```

## Contributing

To contribute to this repository please fork it, develop your code in your fork, and then create a pull request back into this repository. \
Please use cpplint to check your source code matches the code conventions of the repository with the config file `pixciApp/src/CPPLINT.cfg` before opening a PR.
From there, two CLF developers will review and merge your feature or fix.

### Adding a new detector
If you encounter a new detector that recommends the use of the PIXCI&reg; frame grabber and XCLIB&trade; software, you can create a new detector class that inherits from ADPixci, in a similar manner to ADRaptorEagleXV. \
The `changeVideoFormatConfig` method **must** be implemented for loading format files for different binning values. \
If the `writeInt32`, `writeFloat64`, `updateInitialPVs`, or `handleParamTask` methods are overloaded, make sure to call their ADPixci implementation too. \
There are a few pure virtual functions for camera attributes you might want to use in ADPixci.h that can be implemented if needed too.
29 changes: 29 additions & 0 deletions configure/CONFIG
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# CONFIG - Load build configuration data
#
# Do not make changes to this file!

# Allow user to override where the build rules come from
RULES = $(EPICS_BASE)

# RELEASE files point to other application tops
include $(TOP)/configure/RELEASE
-include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).Common
ifdef T_A
-include $(TOP)/configure/RELEASE.Common.$(T_A)
-include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A)
endif

CONFIG = $(RULES)/configure
include $(CONFIG)/CONFIG

# Override the Base definition:
INSTALL_LOCATION = $(TOP)

# CONFIG_SITE files contain other build configuration settings
include $(TOP)/configure/CONFIG_SITE
-include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).Common
ifdef T_A
-include $(TOP)/configure/CONFIG_SITE.Common.$(T_A)
-include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)
endif

4 changes: 4 additions & 0 deletions configure/CONFIG_FMT
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#CONFIG_FMT

FILE_TYPE += FMT
INSTALL_FMT = $(INSTALL_LOCATION)/fmt
42 changes: 42 additions & 0 deletions configure/CONFIG_SITE
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# CONFIG_SITE

# Make any application-specific changes to the EPICS build
# configuration variables in this file.
#
# Host/target specific settings can be specified in files named
# CONFIG_SITE.$(EPICS_HOST_ARCH).Common
# CONFIG_SITE.Common.$(T_A)
# CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)

# CHECK_RELEASE controls the consistency checking of the support
# applications pointed to by the RELEASE* files.
# Normally CHECK_RELEASE should be set to YES.
# Set CHECK_RELEASE to NO to disable checking completely.
# Set CHECK_RELEASE to WARN to perform consistency checking but
# continue building anyway if conflicts are found.
CHECK_RELEASE = YES

# Set this when you only want to compile this application
# for a subset of the cross-compiled target architectures
# that Base is built for.
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040

# To install files into a location other than $(TOP) define
# INSTALL_LOCATION here.
#INSTALL_LOCATION=</path/name/to/install/top>

# Set this when your IOC and the host use different paths
# to access the application. This will be needed to boot
# from a Microsoft FTP server or with some NFS mounts.
# You must rebuild in the iocBoot directory for this to
# take effect.
#IOCS_APPL_TOP = </IOC/path/to/application/top>

# Get settings from AREA_DETECTOR, so we only have to configure once for all detectors if we want to
-include $(AREA_DETECTOR)/configure/CONFIG_SITE
-include $(AREA_DETECTOR)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH)
-include $(AREA_DETECTOR)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).Common
ifdef T_A
-include $(AREA_DETECTOR)/configure/CONFIG_SITE.Common.$(T_A)
-include $(AREA_DETECTOR)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)
endif
9 changes: 9 additions & 0 deletions configure/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
TOP=..

include $(TOP)/configure/CONFIG

TARGETS = $(CONFIG_TARGETS)
CONFIGS += $(subst ../,,$(wildcard $(CONFIG_INSTALLS)))
CFG += CONFIG_FMT RULES_FMT

include $(TOP)/configure/RULES
8 changes: 8 additions & 0 deletions configure/RELEASE
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#RELEASE Location of external products
# Run "gnumake clean uninstall install" in the application
# top directory each time this file is changed.

-include $(TOP)/../configure/RELEASE_LIBS_INCLUDE
-include $(TOP)/RELEASE.local
-include $(TOP)/configure/RELEASE.local

6 changes: 6 additions & 0 deletions configure/RULES
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# RULES

include $(CONFIG)/RULES

# Library should be rebuilt because LIBOBJS may have changed.
$(LIBNAME): ../Makefile
2 changes: 2 additions & 0 deletions configure/RULES.ioc
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#RULES.ioc
include $(CONFIG)/RULES.ioc
2 changes: 2 additions & 0 deletions configure/RULES_DIRS
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#RULES_DIRS
include $(CONFIG)/RULES_DIRS
8 changes: 8 additions & 0 deletions configure/RULES_FMT
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#RULES_FMT

override INSTALLS_FMT := $(FMT:%=$(INSTALL_FMT)/%)

$(INSTALL_FMT)/%.fmt: ../fmt/%/bin_1x1.fmt
@echo "Installing FMT file: $@"
@if not exist "$(dir $@)" mkdir "$(dir $@)"
@if exist "$<" ( copy /Y $(subst /,\,$<) $(subst /,\,$@) ) else ( echo "Error: Source file $< not found!" && exit 1 )
3 changes: 3 additions & 0 deletions configure/RULES_TOP
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#RULES_TOP
include $(CONFIG)/RULES_TOP

24 changes: 24 additions & 0 deletions iocs/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
TOP = ..
include $(TOP)/configure/CONFIG

DIRS := $(wildcard *IOC)

include $(TOP)/configure/RULES_TOP

uninstallTargets = $(foreach dir, $(DIRS), $(dir)$(DIVIDER)uninstall)
uninstall: $(uninstallTargets)
define UNINSTALL_template
$(1)$(DIVIDER)uninstall:
$(MAKE) -C $(1) uninstall
endef
$(foreach dir, $(DIRS), $(eval $(call UNINSTALL_template,$(dir))))
.PHONY: uninstall $(uninstallTargets)

realuninstallTargets = $(foreach dir, $(DIRS), $(dir)$(DIVIDER)realuninstall)
realuninstall: $(realuninstallTargets)
define REALUNINSTALL_template
$(1)$(DIVIDER)realuninstall:
$(MAKE) -C $(1) realuninstall
endef
$(foreach dir, $(DIRS), $(eval $(call REALUNINSTALL_template,$(dir))))
.PHONY: realuninstall $(realuninstallTargets)
31 changes: 31 additions & 0 deletions iocs/pixciIOC/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Makefile at top of application tree
TOP = .
include $(TOP)/configure/CONFIG

# Directories to build, any order
DIRS += configure
DIRS += $(wildcard *Sup)
DIRS += $(wildcard *App)
DIRS += $(wildcard *Top)
DIRS += $(wildcard iocBoot)

# The build order is controlled by these dependency rules:

# All dirs except configure depend on configure
$(foreach dir, $(filter-out configure, $(DIRS)), \
$(eval $(dir)_DEPEND_DIRS += configure))

# Any *App dirs depend on all *Sup dirs
$(foreach dir, $(filter %App, $(DIRS)), \
$(eval $(dir)_DEPEND_DIRS += $(filter %Sup, $(DIRS))))

# Any *Top dirs depend on all *Sup and *App dirs
$(foreach dir, $(filter %Top, $(DIRS)), \
$(eval $(dir)_DEPEND_DIRS += $(filter %Sup %App, $(DIRS))))

# iocBoot depends on all *App dirs
iocBoot_DEPEND_DIRS += $(filter %App,$(DIRS))

# Add any additional dependency rules here:

include $(TOP)/configure/RULES_TOP
29 changes: 29 additions & 0 deletions iocs/pixciIOC/configure/CONFIG
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# CONFIG - Load build configuration data
#
# Do not make changes to this file!

# Allow user to override where the build rules come from
RULES = $(EPICS_BASE)

# RELEASE files point to other application tops
include $(TOP)/configure/RELEASE
-include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).Common
ifdef T_A
-include $(TOP)/configure/RELEASE.Common.$(T_A)
-include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A)
endif

CONFIG = $(RULES)/configure
include $(CONFIG)/CONFIG

# Override the Base definition:
INSTALL_LOCATION = $(TOP)

# CONFIG_SITE files contain other build configuration settings
include $(TOP)/configure/CONFIG_SITE
-include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).Common
ifdef T_A
-include $(TOP)/configure/CONFIG_SITE.Common.$(T_A)
-include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)
endif

Loading