summaryrefslogtreecommitdiff
path: root/startscript.erl
blob: 2ac9ef755bb9b4b4bc336b4788607fcea6576efb (plain)
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(5575),
  rsbusserv:start(),
  eventserv:start(),
  devicemon:start(),
  runrange(1,1,fun (Addr)->spawnscanner(Addr) end).

test() ->
  portman:start({"127.0.0.1",5575}).