summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmdiface.erl7
-rw-r--r--devicemon.erl9
-rw-r--r--eventserv.erl2
-rw-r--r--portman.erl10
-rw-r--r--rsbusserv.erl29
-rw-r--r--startscript.erl21
-rw-r--r--tcpserv.erl4
7 files changed, 44 insertions, 38 deletions
diff --git a/cmdiface.erl b/cmdiface.erl
index 0b7e84c..3113c03 100644
--- a/cmdiface.erl
+++ b/cmdiface.erl
@@ -16,10 +16,10 @@
reg_feedbackOps(Addr,Name,T,MsgReq,MsgRes,To) ->
io:format("Logging new command: ~p ~n",[Name]),
- Init=fun () -> rsbusserv ! {devicemon,Addr,MsgReq} end,
+ Init=fun () -> rsbusserv ! {devicemon,comm,Addr,MsgReq} end,
Exit=
fun () ->
- rsbusserv ! {devicemon,Addr,[]}
+ rsbusserv ! {devicemon,comm,Addr,[]}
end,
Pid = spawn(?MODULE,res_manip,[Init,Exit,To]),
Call =
@@ -35,6 +35,7 @@ invoke_cmd(Addr,Name,MsgReq) ->
res_manip(Init,Exit,To) ->
Init(),
receive
- Res -> To ! Res
+ {stat,_Type,Stat} -> To ! {self(),comm,Stat};
+ {error,_Cause} -> ok
end,
Exit(). \ No newline at end of file
diff --git a/devicemon.erl b/devicemon.erl
index 84c2849..703dca5 100644
--- a/devicemon.erl
+++ b/devicemon.erl
@@ -86,9 +86,8 @@ deviceloop(Devices) ->
deviceloop(Devices)
end.
-devicemon() ->
+devmon() ->
register(?MODULE,self()),
- spawn(?MODULE,devicepool,[?ADDRANGE]),
deviceloop(orddict:new()).
getStat(Addr) ->
@@ -100,13 +99,13 @@ getStat(Addr) ->
error
end.
-getStaus(Addr) ->
+getStatus(Addr) ->
case getStat(Addr) of
error -> error;
- Val -> Val
+ Val -> ready
%% device status multiplexer
%% ready | busy
end.
start() ->
- spawn(?MODULE,devicemon,[]). \ No newline at end of file
+ spawn(?MODULE,devmon,[]). \ No newline at end of file
diff --git a/eventserv.erl b/eventserv.erl
index dc4dcde..85ee34d 100644
--- a/eventserv.erl
+++ b/eventserv.erl
@@ -26,7 +26,7 @@ event(Pid,S) ->
after S#event.period ->
Pid ! {self(),run,S},
if
- S#event.spawn -> spawn(S#event.call,[self()]);
+ %% S#event.spawn -> spawn(S#event.call,[self()]);
true -> (S#event.call)(self())
end,
case S#event.type of
diff --git a/portman.erl b/portman.erl
index 393a566..3076a39 100644
--- a/portman.erl
+++ b/portman.erl
@@ -10,11 +10,14 @@
-author("Tuowen").
%% API
--export([start/1,serv/1,send/2]).
+-export([start/1,serv/1]).
oploop(Sock) ->
receive
{Pid,shutdown} -> ok;
+ {tcp,Sock,Msg} ->
+ io:format("~p\n",[Msg]),
+ oploop(Sock);
{Pid,Msg} ->
gen_tcp:send(Sock,Msg),
oploop(Sock)
@@ -27,7 +30,4 @@ serv({Host,Port}) ->
ok = gen_tcp:close(Sock).
start(Config) ->
- spawn(?MODULE,serv,[Config]).
-
-send(Pid,Msg) ->
- Pid ! {self(),Msg}. \ No newline at end of file
+ spawn(?MODULE,serv,[Config]). \ No newline at end of file
diff --git a/rsbusserv.erl b/rsbusserv.erl
index 997e590..b9eec5b 100644
--- a/rsbusserv.erl
+++ b/rsbusserv.erl
@@ -17,14 +17,15 @@
%% API
%% -export([start/0]).
--define(DEVICE,"/dev/ttyUSB0").
--define(SPEED,19200).
--define(TIMEOUT,40). % Timeout in milisec
--define(REQTIMEOUT,200).
+-define(DEVICE,"/dev/ttyACM0").
+-define(SPEED,9600).
+-define(TIMEOUT,10). % Timeout in milisec
+-define(REQTIMEOUT,1000).
-define(STARTBIT,[16#5B,16#AD]).
-define(STOPBIT,[16#A4,16#52]).
-define(REP,16#FF).
+-define(ERR,16#F0).
rsbuslistener(Pid) ->
SerialPort = serial:start([{speed,?SPEED},{open,?DEVICE}]),
@@ -42,12 +43,12 @@ rsbus_rec([H1,H2,H3|Tail],read,Msg,Cmp) ->
rsbus_rec([H2,H3|Tail],read,[H1|Msg],Cmp);
rsbus_rec([H1,H2,H3,H4|Tail1],wait,[],[H1,H2,H3,H4]) ->
rsbus_rec(Tail1,read,[],?STOPBIT);
-rsbus_rec([H|Tail],wait,[],Cmp) ->
- rsbus_rec(Tail,wait,[],Cmp);
+rsbus_rec([H1,H2,H3,H4|Tail],wait,[],Cmp) ->
+ rsbus_rec([H2,H3,H4|Tail],wait,[],Cmp);
rsbus_rec(Rec,State,Msg,Cmp) ->
receive
{data, Bytes} ->
- erlang:display(binary_to_list(Bytes)),
+ %% io:format("~p\n",[Rec++binary_to_list(Bytes)]),
rsbus_rec(Rec++binary_to_list(Bytes),State,Msg,Cmp)
after ?TIMEOUT ->
{error,timeout}
@@ -62,14 +63,15 @@ rsbus_send(SerialPort,Addr,Msg) ->
P=rsbus_parity(Msg) bxor Addr,
SerialPort ! {send,[P]},
SerialPort ! {send,?STOPBIT},
- io:format("Send Complete!\n"),
+ %% io:format("Send Complete!\n"),
case rsbus_rec([],wait,[],?STARTBIT++[0,Addr]) of
{stat,[?REP],RP} -> rsbus_send(SerialPort,Addr,Msg); % Will resend no matter what
+ {stat,[?ERR],RP} -> {error,parse}; % State Reject
{stat,Stat,RP} ->
erlang:display(RP),
TestP =rsbus_parity([RP|Stat]),
if
- TestP /= Addr -> {err,parse};
+ TestP /= Addr -> {error,parse};
true -> {stat,hd(Stat),tl(Stat)}
end;
{error,timeout} -> {error,timeout}
@@ -78,14 +80,14 @@ rsbus_send(SerialPort,Addr,Msg) ->
%% This function can effectively serialize access
rsbus_listner(Pid,SerialPort) ->
- erlang:display(self()),
+ %% erlang:display(self()),
receive
{data, _Bytes} ->
%% This shouldn't happen, no process should initiate comm
%% Discard everything
rsbus_listner(Pid,SerialPort);
{PPid,comm,Addr,Msg} ->
- io:format("RSBus sending..."),
+ %% io:format("RSBus sending..."),
PPid ! {self(),device,Addr,rsbus_send(SerialPort,Addr,Msg)}, % Process and return
rsbus_listner(Pid,SerialPort);
{Pid,shutdown} ->
@@ -109,9 +111,10 @@ rsbusreq(Addr,Msg) ->
receive
{PPid,device,Addr,{error,Reason}} ->
{error,Reason};
- {PPid,device,Addr,{stat,Type,Msg}} ->
- {stat,Type,Msg}
+ {PPid,device,Addr,Stat} ->
+ Stat
after ?REQTIMEOUT ->
+ erlang:display("here"),
{error,timeout}
end.
diff --git a/startscript.erl b/startscript.erl
index a281211..2ac9ef7 100644
--- a/startscript.erl
+++ b/startscript.erl
@@ -15,11 +15,11 @@
-include("devicemon.hrl").
--define(HBPERIOD,500).
--define(SCANPERIOD,2000).
+-define(HBPERIOD,1000).
+-define(SCANPERIOD,3000).
busbeater(Pid,Addr) ->
- case devicemon:getStaus(Addr) of
+ case devicemon:getStatus(Addr) of
error ->
spawnscanner(Addr),
Pid ! {self(),shutdown};
@@ -38,7 +38,7 @@ busbeater(Pid,Addr) ->
busscanner(Pid,Addr) ->
%% if devicemon:getStat(Addr)
%% Add device status multiplexer here
- case devicemon:getStaus(Addr) of
+ case devicemon:getStatus(Addr) of
error ->
case rsbusserv:rsbusreq(Addr,[]) of
{stat,Type,Stat} ->
@@ -46,6 +46,7 @@ busscanner(Pid,Addr) ->
spawnbeater(Addr),
Pid ! {self(),shutdown};
{error,Cause} ->
+ erlang:display(Cause),
devicemon ! {self(),dereg,Addr}
end;
_Else ->
@@ -65,9 +66,11 @@ runrange(St,Ed,Fun) ->
runrange(St+1,Ed,Fun).
start() ->
- Tcp=tcpserv:start(5575),
- Rsbus=rsbusserv:start(),
- Evserv=eventserv:start(),
- Devmon=devicemon:start(),
- runrange(1,10,fun (Addr)->spawnscanner(Addr) end).
+ tcpserv:start(5575),
+ rsbusserv:start(),
+ eventserv:start(),
+ devicemon:start(),
+ runrange(1,1,fun (Addr)->spawnscanner(Addr) end).
+test() ->
+ portman:start({"127.0.0.1",5575}).
diff --git a/tcpserv.erl b/tcpserv.erl
index 91a25a6..808bcba 100644
--- a/tcpserv.erl
+++ b/tcpserv.erl
@@ -45,10 +45,10 @@ do_recv(Sock,Pid,To,Cnt) ->
%% Message manipulation & dispatch routine
manip_msg(Pid,To,[0,0,Addr,MsgReq,MsgRes|Name]) ->
%% Operation command dispatch -> Complex(devicemon + Message handler)
- cmdiface:reg_feedbackOps(Addr,Name,?DLYTIME,MsgReq,MsgRes,To);
+ cmdiface:reg_feedbackOps(Addr,Name,?DLYTIME,[MsgReq],[MsgRes],To);
manip_msg(Pid,To,[0|Tail]) ->
%% Seperation from the next part
- devicemon ! [0|Tail];
+ devicemon ! {To,comm,[0|Tail]};
manip_msg(Pid,To,[Addr,Cmd|Name]) when Addr<10 ->
%% Seperation from the next part
cmdiface:invoke_cmd(Addr,Name,[Cmd]);