1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
%%%-------------------------------------------------------------------
%%% @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,1000).
-define(SCANPERIOD,3000).
busbeater(Pid,Addr) ->
case devicemon:getStatus(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:getStatus(Addr) of
error ->
case rsbusserv:rsbusreq(Addr,[]) of
{stat,Type,Stat} ->
devicemon ! {self(),reg,Addr,Type,Stat},
spawnbeater(Addr),
Pid ! {self(),shutdown};
{error,Cause} ->
erlang:display(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() ->
tcpserv:start(5576),
rsbusserv:start(),
eventserv:start(),
devicemon:start(),
runrange(1,1,fun (Addr)->spawnscanner(Addr) end).
test() ->
portman:start({"127.0.0.1",5575}).
|