sea: make sure status is error when reading main value failed
+ cosmetic changes using status codes Change-Id: Ice49a6d5494d2e2cba76d138f11dffeba9aa349d
This commit is contained in:
@ -39,6 +39,7 @@ from os.path import expanduser, join, exists
|
|||||||
from frappy.client import ProxyClient
|
from frappy.client import ProxyClient
|
||||||
from frappy.datatypes import ArrayOf, BoolType, \
|
from frappy.datatypes import ArrayOf, BoolType, \
|
||||||
EnumType, FloatRange, IntRange, StringType
|
EnumType, FloatRange, IntRange, StringType
|
||||||
|
from frappy.core import IDLE, BUSY, ERROR
|
||||||
from frappy.errors import ConfigError, HardwareError, secop_error, CommunicationFailedError
|
from frappy.errors import ConfigError, HardwareError, secop_error, CommunicationFailedError
|
||||||
from frappy.lib import generalConfig, mkthread
|
from frappy.lib import generalConfig, mkthread
|
||||||
from frappy.lib.asynconn import AsynConn, ConnectionClosed
|
from frappy.lib.asynconn import AsynConn, ConnectionClosed
|
||||||
@ -641,6 +642,10 @@ class SeaModule(Module):
|
|||||||
if upd:
|
if upd:
|
||||||
upd(value, timestamp, readerror)
|
upd(value, timestamp, readerror)
|
||||||
return
|
return
|
||||||
|
self.announceUpdate(parameter, value, readerror, timestamp)
|
||||||
|
# self._update(module, parameter, value, timestamp, readerror)
|
||||||
|
|
||||||
|
def _update(self, module, parameter, value, timestamp, readerror):
|
||||||
try:
|
try:
|
||||||
pobj = self.parameters[parameter]
|
pobj = self.parameters[parameter]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
@ -667,20 +672,36 @@ class SeaModule(Module):
|
|||||||
|
|
||||||
|
|
||||||
class SeaReadable(SeaModule, Readable):
|
class SeaReadable(SeaModule, Readable):
|
||||||
|
_readerror = None
|
||||||
|
_status = IDLE, ''
|
||||||
|
|
||||||
|
def update_value(self, value, timestamp, readerror):
|
||||||
|
# make sure status is always ERROR when reading value fails
|
||||||
|
self._readerror = readerror
|
||||||
|
if readerror:
|
||||||
|
self.read_status()
|
||||||
|
self.announceUpdate('value', value, readerror, timestamp)
|
||||||
|
# self._update(self.name, 'value', value, timestamp, readerror)
|
||||||
|
else: # order is important
|
||||||
|
self.value = value
|
||||||
|
self.read_status()
|
||||||
|
|
||||||
def update_status(self, value, timestamp, readerror):
|
def update_status(self, value, timestamp, readerror):
|
||||||
if readerror:
|
if readerror:
|
||||||
value = repr(readerror)
|
value = repr(readerror)
|
||||||
if value == '':
|
if value == '':
|
||||||
self.status = (self.Status.IDLE, '')
|
self._status = IDLE, ''
|
||||||
else:
|
else:
|
||||||
self.status = (self.Status.ERROR, value)
|
self._status = ERROR, value
|
||||||
|
self.read_status()
|
||||||
|
|
||||||
def read_status(self):
|
def read_status(self):
|
||||||
return self.status
|
if self._readerror:
|
||||||
|
return ERROR, repr(self._readerror)
|
||||||
|
return self._status
|
||||||
|
|
||||||
|
|
||||||
class SeaWritable(SeaModule, Writable):
|
class SeaWritable(SeaReadable, Writable):
|
||||||
def read_value(self):
|
def read_value(self):
|
||||||
return self.target
|
return self.target
|
||||||
|
|
||||||
@ -690,20 +711,13 @@ class SeaWritable(SeaModule, Writable):
|
|||||||
self.value = value
|
self.value = value
|
||||||
|
|
||||||
|
|
||||||
class SeaDrivable(SeaModule, Drivable):
|
class SeaDrivable(SeaReadable, Drivable):
|
||||||
_sea_status = ''
|
|
||||||
_is_running = 0
|
_is_running = 0
|
||||||
|
|
||||||
def earlyInit(self):
|
def earlyInit(self):
|
||||||
super().earlyInit()
|
super().earlyInit()
|
||||||
self._run_event = threading.Event()
|
self._run_event = threading.Event()
|
||||||
|
|
||||||
def read_status(self):
|
|
||||||
return self.status
|
|
||||||
|
|
||||||
# def read_target(self):
|
|
||||||
# return self.target
|
|
||||||
|
|
||||||
def write_target(self, value):
|
def write_target(self, value):
|
||||||
self._run_event.clear()
|
self._run_event.clear()
|
||||||
self.io.query(f'run {self.sea_object} {value}')
|
self.io.query(f'run {self.sea_object} {value}')
|
||||||
@ -711,25 +725,20 @@ class SeaDrivable(SeaModule, Drivable):
|
|||||||
self.log.warn('target changed but is_running stays 0')
|
self.log.warn('target changed but is_running stays 0')
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def update_status(self, value, timestamp, readerror):
|
|
||||||
if not readerror:
|
|
||||||
self._sea_status = value
|
|
||||||
self.updateStatus()
|
|
||||||
|
|
||||||
def update_is_running(self, value, timestamp, readerror):
|
def update_is_running(self, value, timestamp, readerror):
|
||||||
if not readerror:
|
if not readerror:
|
||||||
self._is_running = value
|
self._is_running = value
|
||||||
self.updateStatus()
|
self.read_status()
|
||||||
if value:
|
if value:
|
||||||
self._run_event.set()
|
self._run_event.set()
|
||||||
|
|
||||||
def updateStatus(self):
|
def read_status(self):
|
||||||
if self._sea_status:
|
status = super().read_status()
|
||||||
self.status = (self.Status.ERROR, self._sea_status)
|
if self._is_running:
|
||||||
elif self._is_running:
|
if status[0] >= ERROR:
|
||||||
self.status = (self.Status.BUSY, 'driving')
|
return ERROR, 'BUSY + ' + status[1]
|
||||||
else:
|
return BUSY, 'driving'
|
||||||
self.status = (self.Status.IDLE, '')
|
return status
|
||||||
|
|
||||||
def updateTarget(self, module, parameter, value, timestamp, readerror):
|
def updateTarget(self, module, parameter, value, timestamp, readerror):
|
||||||
if value is not None:
|
if value is not None:
|
||||||
|
Reference in New Issue
Block a user