-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().