Current section
Files
Jump to
Current section
Files
src/samples/processes/butler_functions.erl
-module(butler_functions).
-export([
butler_nav_pid/1,
rack_loc_pid/1,
get_rack_location/1,
get_butler_location/1,
get_butler_status/1,
set_butler_lift_down/1,
set_butler_lift_up/1,
teleport_butler/2,
lift_already_up/1,
lift_already_down/1,
rack_already_at_location/2,
rack_already_at_pps/2,
butler_already_at_location/2,
gen_random_barcode/0
]).
butler_nav_pid(BId) ->
gproc:lookup_local_name({dummy_navigator, BId}).
rack_loc_pid(RId) ->
gproc:lookup_local_name({dummy_rack_location_service, RId}).
%% helpers for getting/modifying butler/rack state
get_rack_location(RId) ->
dummy_rack_location_service:get_rack_location(rack_loc_pid(RId)).
get_butler_location(BId) ->
dummy_navigator:get_location(butler_nav_pid(BId)).
get_butler_status(BId) ->
Pid = butler_nav_pid(BId),
{dummy_navigator:get_location(Pid), dummy_navigator:get_lift_state(Pid)}.
set_butler_lift_down(BId) ->
dummy_navigator:lift(butler_nav_pid(BId), down).
set_butler_lift_up(BId) ->
dummy_navigator:lift(butler_nav_pid(BId), up).
teleport_butler(BId, Location) ->
dummy_navigator:teleport_butler(butler_nav_pid(BId), Location).
lift_state(BId) ->
dummy_navigator:get_lift_state(butler_nav_pid(BId)).
lift_already_up(BId) ->
lift_state(BId) =:= up.
lift_already_down(BId) ->
lift_state(BId) =:= down.
rack_already_at_location(RId, RackDestination) ->
get_rack_location(RId) =:= RackDestination.
rack_already_at_pps(RId, _PPSId) ->
%% just assume pps is at 003.002...
rack_already_at_location(RId, "003.002").
butler_already_at_location(BId, Location) ->
get_butler_location(BId) =:= Location.
%% private
%% eg 050, 021 etc. min is 050
gen_random_3_digit_string() ->
"0" ++ erlang:float_to_list(rand:uniform()*50+20, [{decimals, 0}]).
%% public
gen_random_barcode() ->
gen_random_3_digit_string() ++ "." ++ gen_random_3_digit_string().