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

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

package org.bidib.wizard.api.utils;

import org.bidib.wizard.model.status.BidibStatus;
import org.bidib.wizard.model.status.LightPortStatus;
import org.bidib.wizard.model.status.SoundPortStatus;
import org.bidib.wizard.model.status.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(PortRefType portType, Integer action) {
    // BidibStatus bidibStatus = null;
    // if (portType != null && action != null) {
    // if (portType instanceof LightPortRefType) {
    // LightPortEnum lightPortEnum = LightPortEnum.valueOf(ByteUtils.getLowByte(action));
    //
    // bidibStatus = LightPortStatus.valueOf(lightPortEnum);
    // }
    // else if (portType instanceof BacklightPortRefType) {
    // 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;
    // }

    @SuppressWarnings("unchecked")
    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:
                    LOGGER.warn("Unsupported SwitchPortStatus: {}", switchPortStatus);
                    // bidibStatus = bidibStatus;
                    break;
            }
        }
        else if (bidibStatus instanceof SoundPortStatus) {
            SoundPortStatus soundPortStatus = (SoundPortStatus) bidibStatus;
            switch (soundPortStatus) {
                case PLAY:
                    bidibStatus = (T) SoundPortStatus.STOP;
                    break;
                case STOP:
                    bidibStatus = (T) SoundPortStatus.PLAY;
                    break;
                default:
                    // bidibStatus = bidibStatus;
                    break;
            }
        }
        return bidibStatus;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy