summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Zhao <ztuowen@gmail.com>2014-06-09 20:24:43 +0800
committerJoe Zhao <ztuowen@gmail.com>2014-06-09 20:24:43 +0800
commit9adcb32af31d22a046881f5d690d068e232be773 (patch)
treecb18e4a25e1313946326cfbfe23b6f2d6aed288b
parent6b768801841204ad2a173470201dbcc98bbd9aa6 (diff)
downloadlocal-9adcb32af31d22a046881f5d690d068e232be773.tar.gz
local-9adcb32af31d22a046881f5d690d068e232be773.tar.bz2
local-9adcb32af31d22a046881f5d690d068e232be773.zip
Comments & maintenance
-rw-r--r--cmdiface.erl8
-rw-r--r--devicemon.erl9
-rw-r--r--rsbusserv.erl2
3 files changed, 12 insertions, 7 deletions
diff --git a/cmdiface.erl b/cmdiface.erl
index 3113c03..b44e0f4 100644
--- a/cmdiface.erl
+++ b/cmdiface.erl
@@ -21,7 +21,7 @@ reg_feedbackOps(Addr,Name,T,MsgReq,MsgRes,To) ->
fun () ->
rsbusserv ! {devicemon,comm,Addr,[]}
end,
- Pid = spawn(?MODULE,res_manip,[Init,Exit,To]),
+ Pid = spawn(?MODULE,res_manip,[Init,Exit,To,[0,Addr,MsgReq]]),
Call =
fun () ->
Pid ! rsbusserv:rsbusreq(Addr,MsgRes)
@@ -32,10 +32,10 @@ invoke_cmd(Addr,Name,MsgReq) ->
io:format("Command: ~p ~n",[Name]),
rsbusserv! {devicemon,comm,Addr,MsgReq}.
-res_manip(Init,Exit,To) ->
+res_manip(Init,Exit,To,Pre) ->
Init(),
receive
- {stat,_Type,Stat} -> To ! {self(),comm,Stat};
- {error,_Cause} -> ok
+ {stat,Type,Msg} -> To ! {self(),comm,Pre++[Type]++Msg};
+ {error,_Reason} -> ok
end,
Exit(). \ No newline at end of file
diff --git a/devicemon.erl b/devicemon.erl
index 703dca5..d56043b 100644
--- a/devicemon.erl
+++ b/devicemon.erl
@@ -18,7 +18,10 @@
%% API
%% -export([]).
+%% @todo This module is not fault-safe, abrupt death will halt all operations
+
-define(QTOUT,100).
+-define(STNULL,[0,255,0,0,0]).
cleanloop() ->
%% Cleanup the message queue -> Don't call it
@@ -56,8 +59,10 @@ deviceloop(Devices) ->
Pid ! {self(),comm,orddict:fold(fun(Key,Val,Acc) -> [Key,Val#device.type]++Val#device.state++Acc end, [],Devices)},
deviceloop(Devices);
{Pid,comm,[0,Addr]} -> % Specific query, this also shouldn't happen.
- Dev=orddict:fetch(Addr,Devices),
- Pid ! {self(),comm,[Dev#device.type]++Dev#device.state},
+ case orddict:find(Addr,Devices) of
+ error -> Pid ! {self(),comm,[Addr]++?STNULL};
+ {ok,Value} -> Pid ! {self(),comm,[Addr,Value#device.type]++Value#device.state}
+ end,
deviceloop(Devices);
%% Messages received from rsbus
diff --git a/rsbusserv.erl b/rsbusserv.erl
index b9eec5b..2753bb0 100644
--- a/rsbusserv.erl
+++ b/rsbusserv.erl
@@ -19,7 +19,7 @@
-define(DEVICE,"/dev/ttyACM0").
-define(SPEED,9600).
--define(TIMEOUT,10). % Timeout in milisec
+-define(TIMEOUT,10). % Timeout in milisec -> Also affect slaves' timeslice
-define(REQTIMEOUT,1000).
-define(STARTBIT,[16#5B,16#AD]).