All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bidib.wizard.utils.PortUtils Maven / Gradle / Ivy

There is a newer version: 2.0.0-M1
Show newest version
package org.bidib.wizard.utils;

import org.bidib.jbidibc.core.enumeration.BacklightPortEnum;
import org.bidib.jbidibc.core.enumeration.LightPortEnum;
import org.bidib.jbidibc.core.utils.ByteUtils;
import org.bidib.jbidibc.exchange.dmxscenery.BacklightPortType;
import org.bidib.jbidibc.exchange.dmxscenery.LightPortType;
import org.bidib.jbidibc.exchange.dmxscenery.PortType;
import org.bidib.wizard.comm.BacklightPortStatus;
import org.bidib.wizard.comm.BidibStatus;
import org.bidib.wizard.comm.LightPortStatus;
import org.bidib.wizard.comm.SwitchPortStatus;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class PortUtils {
    private static final Logger LOGGER = LoggerFactory.getLogger(PortUtils.class);

    /**
     * Calculate the dimm duration in ms from a volumeFrom to a new volumeTo.
     * 
     * @param volumeFrom
     *            the start volume value
     * @param volumeTo
     *            the end volume value
     * @param delta
     *            the delta value (dimmUp, dimmDown)
     * @return the dimm duration in ms
     */
    public static int calculateDimmDuration(int volumeFrom, int volumeTo, int delta) {
        int volumeDelta = volumeTo - volumeFrom;

        return calculateDimmDuration((volumeDelta < 0 ? -volumeDelta : volumeDelta), delta);
    }

    /**
     * Calculate the dimm duration in ms for the volumeDelta value.
     * 
     * @param volumeDelta
     *            the volume delta value
     * @param delta
     *            the delta value (dimmUp, dimmDown)
     * @return the dimm duration in ms
     */
    public static int calculateDimmDuration(double volumeDelta, int delta) {
        LOGGER.debug("Calculate dimm duration, volumeDelta: {}", volumeDelta);
        if (delta < 1) {
            return 0;
        }

        int t = (int) ((volumeDelta * 256) * 10 /* ms *// delta);

        return t;
    }

    public static int calculateDelayTicks(int timeDelta, int macroParaSlowdown) {
        LOGGER.debug("Calculate the delay, timeDelta: {}, macroParaSlowdown: {}", timeDelta, macroParaSlowdown);
        if (macroParaSlowdown < 1) {
            return 0;
        }
        int ticks = timeDelta / (macroParaSlowdown * 20 /* ms */);

        return ticks;
    }

    /**
     * @param portType
     *            the port type
     * @param action
     *            the action number
     * @return the action as BidibStatus
     */
    public static BidibStatus actionFromPortType(PortType portType, Integer action) {
        BidibStatus bidibStatus = null;
        if (portType != null && action != null) {
            if (portType instanceof LightPortType) {
                LightPortEnum lightPortEnum = LightPortEnum.valueOf(ByteUtils.getLowByte(action));

                bidibStatus = LightPortStatus.valueOf(lightPortEnum);
            }
            else if (portType instanceof BacklightPortType) {
                BacklightPortEnum backlightPortEnum = BacklightPortEnum.valueOf(ByteUtils.getLowByte(action));

                bidibStatus = BacklightPortStatus.valueOf(backlightPortEnum);
            }
            else {
                LOGGER.warn("Unsupported port type detected: {}", portType);
            }

            LOGGER.info("Return bidibStatus: {}", bidibStatus);
        }

        return bidibStatus;
    }

    public static  T getOppositeStatus(T bidibStatus) {

        if (bidibStatus instanceof LightPortStatus) {
            LightPortStatus lightPortStatus = (LightPortStatus) bidibStatus;
            switch (lightPortStatus) {
                case DOWN:
                    bidibStatus = (T) LightPortStatus.UP;
                    break;
                case UP:
                    bidibStatus = (T) LightPortStatus.DOWN;
                    break;
                case ON:
                    bidibStatus = (T) LightPortStatus.OFF;
                    break;
                case OFF:
                    bidibStatus = (T) LightPortStatus.ON;
                    break;
                default:
                    break;
            }
        }
        else if (bidibStatus instanceof SwitchPortStatus) {
            SwitchPortStatus switchPortStatus = (SwitchPortStatus) bidibStatus;
            switch (switchPortStatus) {
                case ON:
                    bidibStatus = (T) SwitchPortStatus.OFF;
                    break;
                case OFF:
                    bidibStatus = (T) SwitchPortStatus.ON;
                    break;
                default:
                    break;
            }
        }
        return bidibStatus;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy