-manageDevices :: (MTaskDevice (Shared Channels) -> Task ()) [MTaskDevice] -> Task ()
-manageDevices processFun ds = anyTask [
- addDevice deviceStore processFun <<@ Title "Add new device" @! ():
- [viewDevice d <<@ Title d.deviceName\\d<-ds]]
- <<@ ArrangeWithTabs @! ()
+//connectDevice :: (MTaskDevice (Shared Channels) -> Task ()) MTaskDevice -> Task ()
+//connectDevice pf d = let ch = channels d in appendTopLevelTask 'DM'.newMap True
+// (pf d ch -||- catchAll (getSynFun d.deviceData ch) errorHandle)
+// >>= \tid->withDevices d (\d->{d&deviceTask=Just tid,deviceError=Nothing})
+// >>| upd (\(r,s,ss)->(r,s++[MTSpec],ss)) ch
+// @! ()
+// where
+// errorHandle e = withDevices d (\d->{d&deviceTask=Nothing,deviceError=Just e}) @! ()
+import StdDebug
+connectDevice :: (MTaskDevice (Shared Channels) -> Task ()) MTaskDevice -> Task Channels
+connectDevice procFun device = let ch = channels device
+ in traceValue "connectDevice" >>| appendTopLevelTask 'DM'.newMap True
+ ( procFun device ch -||- catchAll (getSynFun device.deviceData ch) errHdl)
+ >>= \tid->withDevices device (\d->{d&deviceTask=Just tid,deviceError=Nothing})
+ >>| upd (\(r,s,ss)->(r,s++[MTSpec],ss)) ch
+ where
+ errHdl e
+ | not (trace_tn "error") = undef
+ = withDevices device (\d->{d & deviceTask=Nothing, deviceError=Just e}) @! ()
+
+manageDevices :: (MTaskDevice (Shared Channels) -> Task ()) -> Task ()
+manageDevices processFun = get deviceStoreNP >>= \ds->anyTask [
+ addDevice processFun <<@ Title "Add new device" @! ()]//:
+// [viewDevice processFun d <<@ Title d.deviceName\\d<-ds]]
+ <<@ ArrangeWithTabs
+ @! ()