package com.uxxu.konashi.lib.action;
import android.bluetooth.BluetoothGattService;
import com.uxxu.konashi.lib.Konashi;
import com.uxxu.konashi.lib.KonashiErrorType;
import com.uxxu.konashi.lib.KonashiUUID;
import com.uxxu.konashi.lib.util.PioUtils;
import java.util.UUID;
import info.izumin.android.bletia.BletiaErrorType;
/**
* Created by izumin on 9/16/15.
*/
public class PioPinPullupAction extends KonashiWriteCharacteristicAction {
private static final UUID UUID = KonashiUUID.PIO_PULLUP_UUID;
private int mPin;
private int mPullup;
private int mPullups;
private final boolean mIsForAll;
public PioPinPullupAction(BluetoothGattService service, int pullups) {
super(service, UUID);
mIsForAll = true;
mPullups = pullups;
}
public PioPinPullupAction(BluetoothGattService service, int pin, int newPullup, int currentPullups) {
super(service, UUID);
mIsForAll = false;
mPin = pin;
mPullup = newPullup;
mPullups = currentPullups;
}
@Override
protected void setValue() {
if (!mIsForAll) {
if (mPullup == Konashi.PULLUP) {
mPullups |= (0x01 << mPin);
} else {
mPullups &= (~(0x01 << mPin) & 0xff);
}
}
getCharacteristic().setValue(new byte[]{(byte) mPullups});
}
@Override
protected BletiaErrorType validate() {
if (mIsForAll) {
return PioUtils.isValidPullups(mPullups) ? KonashiErrorType.NO_ERROR : KonashiErrorType.INVALID_PIN_NUMBER;
} else {
if (!PioUtils.isValidPin(mPin)) return KonashiErrorType.INVALID_PIN_NUMBER;
else if (!PioUtils.isValidPullup(mPullup)) return KonashiErrorType.INVALID_PULLUP_PARAM;
else return KonashiErrorType.NO_ERROR;
}
}
}