%%%------------------------------------------------------------------- %%% @author joe %%% @copyright (C) 2014, %%% @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}).