package com.uxxu.konashi.lib.action;

import android.bluetooth.BluetoothGattService;

import com.uxxu.konashi.lib.KonashiErrorType;
import com.uxxu.konashi.lib.KonashiUUID;
import com.uxxu.konashi.lib.util.PwmUtils;

import java.util.UUID;

import info.izumin.android.bletia.BletiaErrorType;

/**
 * Created by izumin on 9/18/15.
 */
public class PwmDutyAction extends KonashiWriteCharacteristicAction {

    private static final UUID UUID = KonashiUUID.PWM_DUTY_UUID;

    private int mPin;
    private int mDuty;
    private int mPeriod;

    public PwmDutyAction(BluetoothGattService service, int pin, int duty, int period) {
        super(service, UUID);
        mPin = pin;
        mDuty = duty;
        mPeriod = period;
    }

    @Override
    protected void setValue() {
        byte[] value = new byte[5];
        value[0] = (byte) mPin;
        value[1] = (byte) ((mDuty >> 24) & 0xff);
        value[2] = (byte) ((mDuty >> 16) & 0xff);
        value[3] = (byte) ((mDuty >> 8) & 0xff);
        value[4] = (byte) (mDuty & 0xff);
        getCharacteristic().setValue(value);
    }

    @Override
    protected BletiaErrorType validate() {
        if (!PwmUtils.isValidPin(mPin)) return KonashiErrorType.INVALID_PIN_NUMBER;
        else if (!PwmUtils.isValidDuty(mDuty, mPeriod)) return KonashiErrorType.INVALID_DUTY_RATIO;
        else return KonashiErrorType.NO_ERROR;
    }
}

package com.uxxu.konashi.lib.action;

import android.bluetooth.BluetoothGattService;

import com.uxxu.konashi.lib.KonashiErrorType;
import com.uxxu.konashi.lib.KonashiUUID;
import com.uxxu.konashi.lib.util.PwmUtils;

import java.util.UUID;

import info.izumin.android.bletia.BletiaErrorType;

/**
 * Created by izumin on 9/18/15.
 */
public class PwmDutyAction extends KonashiWriteCharacteristicAction {

    private static final UUID UUID = KonashiUUID.PWM_DUTY_UUID;

    private int mPin;
    private int mDuty;
    private int mPeriod;

    public PwmDutyAction(BluetoothGattService service, int pin, int duty, int period) {
        super(service, UUID);
        mPin = pin;
        mDuty = duty;
        mPeriod = period;
    }

    @Override
    protected void setValue() {
        byte[] value = new byte[5];
        value[0] = (byte) mPin;
        value[1] = (byte) ((mDuty >> 24) & 0xff);
        value[2] = (byte) ((mDuty >> 16) & 0xff);
        value[3] = (byte) ((mDuty >> 8) & 0xff);
        value[4] = (byte) (mDuty & 0xff);
        getCharacteristic().setValue(value);
    }

    @Override
    protected BletiaErrorType validate() {
        if (!PwmUtils.isValidPin(mPin)) return KonashiErrorType.INVALID_PIN_NUMBER;
        else if (!PwmUtils.isValidDuty(mDuty, mPeriod)) return KonashiErrorType.INVALID_MODE;
        else return KonashiErrorType.NO_ERROR;
    }
}

Fix PwmDutyAction