71 lines
2.5 KiB
Python
71 lines
2.5 KiB
Python
class StdDaq(DeviceBase):
|
|
def __init__(self, name, url, simulated=False):
|
|
DeviceBase.__init__(self, name)
|
|
self.url=url
|
|
self.req_id = None
|
|
if simulated:
|
|
self.setSimulated()
|
|
self.simulated_id=1
|
|
self.simulated_config = {"detector_name": "eg","detector_type": "eiger","n_modules": 2,"bit_depth": 32,"image_pixel_height": 514,"image_pixel_width": 1030,"start_udp_port": 50000}
|
|
|
|
def doInitialize(self):
|
|
pass
|
|
|
|
def start(self, n_images, output_file):
|
|
self.state.assertIs(State.Ready)
|
|
self.n_images=n_images
|
|
self.output_file=output_file
|
|
if not self.simulated:
|
|
data = {"sources":"eiger", "n_images":10, "output_file":"/tmp/test.h5"}
|
|
headers = {'Content-type': 'application/json'}
|
|
r = requests.post(url = self.url + "/write_async", json=data, headers=headers)
|
|
self.req_id = int(str(r.json()["request_id"]))
|
|
|
|
else:
|
|
self.req_id = self.simulated_id
|
|
self.simulated_id=self.simulated_id+1
|
|
print "Started request: ", self.req_id
|
|
self.setCache(self.req_id, None)
|
|
self.setState(State.Busy)
|
|
fork (self.monitor)
|
|
|
|
def abort(self):
|
|
self.state.assertIs(State.Busy)
|
|
print "Aborting request: ", self.req_id
|
|
if not self.simulated:
|
|
data = {"request_id":self.req_id}
|
|
headers = {'Content-type': 'application/json'}
|
|
r = requests.post(url = self.url + "/write_kill", json=data, headers=headers)
|
|
self.setCache(None, None)
|
|
self.setState(State.Ready)
|
|
|
|
def monitor(self):
|
|
done = False
|
|
start=time.time()
|
|
timeout = 5 if self.simulated else -1
|
|
while self.getState()==State.Busy:
|
|
if (timeout >=0) and ((time.time()-start)>=timeout):
|
|
done = True
|
|
if not self.simulated:
|
|
pass #TODO: Check Status
|
|
if done:
|
|
print "Finished request: ", self.req_id
|
|
self.setCache(None, None)
|
|
self.setState(State.Ready)
|
|
time.sleep(0.2)
|
|
|
|
|
|
def get_config(self):
|
|
if self.simulated:
|
|
return self.simulated_config
|
|
#TODO
|
|
|
|
def set_config(self, config):
|
|
if type(config) == dict or isinstance(config, java.util.Map) :
|
|
if self.simulated:
|
|
self.simulated_config=config
|
|
#TODO
|
|
def doClose(self):
|
|
pass
|
|
|