#
# driver for the track controller
#
# on instatiation expects GPIO Pins for:
# ...track direction (output Pin)
# ...track enable (output Pin)
# ...track overload (input Pin)
# ...track overload reset (output Pin)
#
# functions (parameters in parenthesis):
# ...enable (True/False): switch power on
# ...direction ("forward" / "backward"): set direction of train engine
# ...OL_reset () : reset output overload condition, returns True if overload condition coul be reset, retuns False if overload condition prevails
#
#
# by wolf2018
# initial rev 19-Sep-2023
#
import time
import cfg

# set debug to 0 for no printout, 1 for debug output
debug = cfg.debug


class Track_control:

    def __init__(self, direction_pin, enable_pin, overload_pin, overload_reset_pin):

        self.track_dir = direction_pin
        self.track_en = enable_pin
        self.track_OL = overload_pin
        self.track_OL_reset = overload_reset_pin

    def enable(self, track_enable):
        if track_enable is True:
            self.track_en.value(1)
        else:
            self.track_en.value(0)

    def direction(self, t_dir="forward"):
        if t_dir == "forward":
            self.track_dir.value(0)
        else:
            self.track_dir.value(1)

    def OL_test(self):
        if self.track_OL.value():
            return(True)
        else:
            return(False)

    def OL_reset(self):
        self.track_OL_reset.value(1)
        time.sleep_ms(5)    # wait for reset to happen
        self.track_OL_reset.value(0)
        if not self.track_OL.value():
            # reset successful
            return(True)
        else:
            return(False)
