summaryrefslogtreecommitdiff
path: root/startscript.erl
diff options
context:
space:
mode:
Diffstat (limited to 'startscript.erl')
-rw-r--r--startscript.erl73
1 files changed, 73 insertions, 0 deletions
diff --git a/startscript.erl b/startscript.erl
new file mode 100644
index 0000000..a281211
--- /dev/null
+++ b/startscript.erl
@@ -0,0 +1,73 @@
+%%%-------------------------------------------------------------------
+%%% @author joe
+%%% @copyright (C) 2014, <COMPANY>
+%%% @doc
+%%%
+%%% @end
+%%% Created : 15. May 2014 下午2:29
+%%%-------------------------------------------------------------------
+-module(startscript).
+-author("joe").
+
+-compile([debug_info,export_all]).
+%% API
+%% -export([]).
+
+-include("devicemon.hrl").
+
+-define(HBPERIOD,500).
+-define(SCANPERIOD,2000).
+
+busbeater(Pid,Addr) ->
+ case devicemon:getStaus(Addr) of
+ error ->
+ spawnscanner(Addr),
+ Pid ! {self(),shutdown};
+ busy -> ok;
+ ready ->
+ case rsbusserv:rsbusreq(Addr,[]) of
+ {stat,Type,Stat} ->
+ devicemon ! {self(),reg,Addr,Type,Stat};
+ {error,Cause} ->
+ devicemon ! {self(),dereg,Addr},
+ spawnscanner(Addr),
+ Pid ! {self(),shutdown}
+ end
+ end.
+
+busscanner(Pid,Addr) ->
+ %% if devicemon:getStat(Addr)
+ %% Add device status multiplexer here
+ case devicemon:getStaus(Addr) of
+ error ->
+ case rsbusserv:rsbusreq(Addr,[]) of
+ {stat,Type,Stat} ->
+ devicemon ! {self(),reg,Addr,Type,Stat},
+ spawnbeater(Addr),
+ Pid ! {self(),shutdown};
+ {error,Cause} ->
+ devicemon ! {self(),dereg,Addr}
+ end;
+ _Else ->
+ spawnbeater(Addr),
+ Pid ! {self(),shutdown}
+ end.
+
+spawnscanner(Addr) ->
+ eventserv:reg_periodic("Scanner",fun (Pid) -> busscanner(Pid,Addr) end,?SCANPERIOD).
+spawnbeater(Addr) ->
+ eventserv:reg_periodic("Heartbeat",fun (Pid) -> busbeater(Pid,Addr) end,?HBPERIOD).
+
+runrange(Ed,Ed,Fun) ->
+ Fun(Ed);
+runrange(St,Ed,Fun) ->
+ Fun(St),
+ 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).
+