package com.uxxu.konashi.lib.action;

import android.bluetooth.BluetoothGattService;

import com.uxxu.konashi.lib.KonashiUUID;
import com.uxxu.konashi.lib.store.I2cStore;
import com.uxxu.konashi.lib.util.I2cUtils;

import java.util.UUID;

/**
 * Created by izumin on 9/21/15.
 */
public class I2cWriteAction extends I2cAction {

    private static final UUID UUID = KonashiUUID.I2C_WRITE_UUID;

    private final byte mAddress;
    private final byte[] mData;

    public I2cWriteAction(BluetoothGattService service, byte address, byte[] data, I2cStore store) {
        super(service, UUID, store, false);
        mAddress = address;
        mData = data;
    }

    @Override
    protected void setValue() {
        byte[] value = new byte[20];
        if(mData.length < 20) value = new byte[mData.length + 2];
        value[0] = (byte) (mData.length + 1);
        value[1] = (byte) ((mAddress << 1) & 0xfe);
        System.arraycopy(mData, 0, value, 2, mData.length);
        getCharacteristic().setValue(value);
    }

    @Override
    protected boolean hasValidParams() {
        return I2cUtils.isValidDataLength(mData.length);
    }
}

@@ -79,16 +79,53 @@
 rvice;%0A%0A
+import com.uxxu.konashi.lib.Konashi;%0A
 import c
@@ -157,16 +157,16 @@
 hiUUID;%0A
-
 import c
@@ -424,16 +424,67 @@
 E_UUID;%0A
+    private static final int MAX_VALUE_SIZE = 20;%0A%0A
 %0A    pri
@@ -814,89 +814,128 @@
 alue
- = new byte%5B20%5D;%0A        if(mData.length %3C 20) value = new byte%5BmData.length + 2%5D
+;%0A        value = ((mData.length %3C Konashi.I2C_DATA_MAX_LENGTH) ? new byte%5BmData.length + 2%5D : new byte%5BMAX_VALUE_SIZE%5D)
 ;%0A  

Fix run constructor twice