Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f4f33e48 authored by Kiran Kelageri's avatar Kiran Kelageri Committed by Steve Kondik
Browse files

Bluetooth: Add Power apply enable event handling

Add Wipower Power apply enable related event handling
in frameworks

CRs-fixed: 612628

Change-Id: Iceb0cf8297ad0ab7080c0c494c1404127ff0258a
parent cdf3ce50
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -41,4 +41,6 @@ interface IWipowerManagerCallback
    void onWipowerAlert(byte alert);

    void onWipowerData(in byte[] value);

    void onPowerApply(byte value);
}
+128 −38
Original line number Diff line number Diff line
@@ -53,26 +53,30 @@ public class WipowerDynamicParam {
        private byte mReserved2;

        private static final String LOGTAG = "WipowerDynamicParam";
        private static final boolean VDBG = false;

        private static final int MSB_MASK = 0xFF00;
        private static final int LSB_MASK = 0x00FF;

        /* ADC conversions for voaltag and current */
        private static final float VREG_ADC_TO_mV_RATIO = ((float)(2.44/256)*10000);
        private static final float IREG_ADC_TO_mA_RATIO = ((float)(2.44/256)*500);

        /**
        * Default Constructor
        * {@hide}
        */
        public WipowerDynamicParam() {
            mOptValidity = 0;
            mRectVoltage = 0;
            mRectCurrent = 0;
            mOutputVoltage = 0;
            mOutputCurrent = 0;
            mTemperature = 0;
            mMinRectVoltageDyn = 0;
            mMaxRectVoltageDyn = 0;
            mSetRectVoltageDyn = 0;
            mAlert = 0;
            mOptValidity = 0x00;
            mRectVoltage = 0x00;
            mRectCurrent = 0x00;
            mOutputVoltage = 0x00;
            mOutputCurrent = 0x00;
            mTemperature = 0x00;
            mMinRectVoltageDyn = 0x00;
            mMaxRectVoltageDyn = 0x00;
            mSetRectVoltageDyn = 0x00;
            mAlert = 0x00;
            mReserved1 = 0;
            mReserved2 = 0;
        }
@@ -90,9 +94,15 @@ public class WipowerDynamicParam {
        * {@hide}
        */
        void print() {
            Log.v(LOGTAG, "mOptValidity" +  toHex(mOptValidity) + "mRectVoltage" +  toHex(mRectVoltage) +  "mRectCurrent" +  toHex(mRectCurrent) + "mOutputVoltage" +  toHex(mOutputVoltage));
            Log.v(LOGTAG, "mOutputCurrent" +  toHex(mOutputCurrent) + "mTemperature" +  toHex(mTemperature) + "mMinRectVoltageDyn" +  toHex(mMinRectVoltageDyn) + "mMaxRectVoltageDyn" +  toHex(mMaxRectVoltageDyn));
            Log.v(LOGTAG, "mSetRectVoltageDyn" +  toHex(mSetRectVoltageDyn) + "mAlert" +  toHex(mAlert) + "mReserved1" +  toHex(mReserved1) + "mReserved2" +  toHex(mReserved2));
            if (VDBG) Log.v(LOGTAG, "mOptValidity " +  toHex(mOptValidity) +
              "mRectVoltage " +  toHex(mRectVoltage) +  "mRectCurrent " +
              toHex(mRectCurrent) + "mOutputVoltage " +  toHex(mOutputVoltage));
            if (VDBG) Log.v(LOGTAG, "mOutputCurrent " +  toHex(mOutputCurrent) +
               "mTemperature " +  toHex(mTemperature) + "mMinRectVoltageDyn " +
               toHex(mMinRectVoltageDyn) + "mMaxRectVoltageDyn " +  toHex(mMaxRectVoltageDyn));
            if (VDBG) Log.v(LOGTAG, "mSetRectVoltageDyn " +
               toHex(mSetRectVoltageDyn) + "mAlert " +  toHex(mAlert) +
               "mReserved1 " +  toHex(mReserved1) + "mReserved2 " +  toHex(mReserved2));
        }

       /**
@@ -104,29 +114,61 @@ public class WipowerDynamicParam {
        */
        public byte[] getValue() {
            byte[] res = new byte[20];
            print();
            res[0] = mOptValidity;
            res[1] = (byte)(LSB_MASK & mRectVoltage);
            res[2] = (byte)(MSB_MASK & mRectVoltage);
            res[2] = (byte)((MSB_MASK & mRectVoltage) >> 8);
            res[3] = (byte)(LSB_MASK & mRectCurrent);
            res[4] = (byte)(MSB_MASK & mRectCurrent);
            res[4] = (byte)((MSB_MASK & mRectCurrent) >> 8);
            res[5] = (byte)(LSB_MASK & mOutputVoltage);
            res[6] = (byte)(MSB_MASK & mOutputVoltage);
            res[6] = (byte)((MSB_MASK & mOutputVoltage) >> 8);
            res[7] = (byte)(LSB_MASK & mOutputCurrent);
            res[8] = (byte)(MSB_MASK & mOutputCurrent);
            res[8] = (byte)((MSB_MASK & mOutputCurrent) >> 8);
            res[9] =  mTemperature;
            res[10] = (byte)(LSB_MASK & mMinRectVoltageDyn);
            res[11] = (byte)(MSB_MASK & mMinRectVoltageDyn);
            res[12] = (byte)(LSB_MASK & mMaxRectVoltageDyn);
            res[13] = (byte)(MSB_MASK & mMaxRectVoltageDyn);
            res[14] = (byte)(LSB_MASK & mSetRectVoltageDyn);
            res[15] = (byte)(MSB_MASK & mSetRectVoltageDyn);

            res[11] = (byte)((MSB_MASK & mMinRectVoltageDyn) >> 8);
            res[12] = (byte)(LSB_MASK & mSetRectVoltageDyn);
            res[13] = (byte)((MSB_MASK & mSetRectVoltageDyn) >> 8);
            res[14] = (byte)(LSB_MASK & mMaxRectVoltageDyn);
            res[15] = (byte)((MSB_MASK & mMaxRectVoltageDyn) >> 8);

            if((mAlert & 0x40) == 0x40) {
                res[16] = (byte)(mAlert ^ 0x40);
            } else {
            res[16] = mAlert;
            }

            Log.i(LOGTAG, "mPruDynamicParam.getValue" + res);
            Log.i(LOGTAG, "mPruDynamicParam.getValue");
            return res;
        }

        void resetValues() {
            mOptValidity = 0x00;
            mRectVoltage = 0x00;
            mRectCurrent = 0x00;
            mOutputVoltage = 0x00;
            mOutputCurrent = 0x00;
            mTemperature = 0x00;
            mMinRectVoltageDyn = 0x00;
            mMaxRectVoltageDyn = 0x00;
            mSetRectVoltageDyn = 0x00;
            mAlert = 0x00;
            mReserved1 = 0x00;
            mReserved2 = 0x00;
        }

        public static short toUnsigned(byte b) {
           return (short)(b & 0xff);
        }

        public static short VREG_ADC_TO_mV(short adc){
           return (short)((adc)*(VREG_ADC_TO_mV_RATIO));
        }

        public static short IREG_ADC_TO_mA(short adc) {
           return (short)((adc)*(IREG_ADC_TO_mA_RATIO));
        }

       /**
        * {@hide}
        * Sets the PRU dynamic parameter values in bytes
@@ -134,24 +176,72 @@ public class WipowerDynamicParam {
        * @return none
        */
        public void setValue(byte[] value) {
            short tempmRectVoltage = 0x0000;
            short tempmRectCurrent = 0x0000;
            tempmRectVoltage = (short)toUnsigned(value[1]);
            tempmRectVoltage |= (short)(toUnsigned(value[2]) << 8);
            tempmRectCurrent = (short)toUnsigned(value[3]);
            tempmRectCurrent |= (short)(toUnsigned(value[4]) << 8);

            Log.i(LOGTAG, "tempmRectVoltage: " + tempmRectVoltage + "tempmRectCurrent: " + tempmRectCurrent);
            resetValues();

            mOptValidity = value[0];

            mRectVoltage = (short)(VREG_ADC_TO_mV(tempmRectVoltage));
            mRectCurrent = (short)(IREG_ADC_TO_mA(tempmRectCurrent));
            mOutputVoltage = (short)toUnsigned(value[5]);
            mOutputVoltage |= (short)(toUnsigned(value[6]) << 8);
            mOutputCurrent = (short)toUnsigned(value[7]);
            mOutputCurrent |= (short)(toUnsigned(value[8]) << 8);
            mTemperature = value[9];
            mMinRectVoltageDyn = (short)toUnsigned(value[10]);
            mMinRectVoltageDyn |= (short)(toUnsigned(value[11]) << 8);
            mSetRectVoltageDyn = (short)toUnsigned(value[12]);
            mSetRectVoltageDyn |= (short)(toUnsigned(value[13]) << 8);
            mMaxRectVoltageDyn = (short)toUnsigned(value[14]);
            mMaxRectVoltageDyn |= (short)(toUnsigned(value[15]) << 8);

            mAlert = value[16];
            mReserved1 = (short)(toUnsigned(value[17]));
            mReserved1 = (short)(toUnsigned(value[18]) << 8);
            mReserved2 = value[19];
            Log.i(LOGTAG, "mPruDynamicParam.setValue");
            print();
            return;
        }
       /**
        * {@hide}
        * Sets the PRU dynamic parameter values for A4WP App in bytes
        *
        * @return none
        */
        public void setAppValue(byte[] value) {

            resetValues();
            mOptValidity = value[0];
            mRectVoltage = value[1];
            mRectVoltage |= (short)(8<<value[2]);
            mRectCurrent = value[3];
            mRectCurrent |= (short)(8<<value[4]);
            mOutputVoltage = value[5];
            mOutputVoltage |= (short)(8<<value[6]);
            mOutputCurrent = value[7];
            mOutputCurrent |= (short)(8<<value[8]);
            mRectVoltage = (short)toUnsigned(value[1]);
            mRectVoltage |= (short)(toUnsigned(value[2]) << 8);
            mRectCurrent = (short)toUnsigned(value[3]);
            mRectCurrent |= (short)(toUnsigned(value[4]) << 8);
            mOutputVoltage = (short)toUnsigned(value[5]);
            mOutputVoltage |= (short)(toUnsigned(value[6]) << 8);
            mOutputCurrent = (short)toUnsigned(value[7]);
            mOutputCurrent |= (short)(toUnsigned(value[8]) << 8);
            mTemperature = value[9];
            mMinRectVoltageDyn = value[10];
            mMinRectVoltageDyn = (short)(8<<value[11]);
            mMaxRectVoltageDyn = value[12];
            mMaxRectVoltageDyn |= (short)(8<<value[13]);
            mSetRectVoltageDyn = value[14];
            mSetRectVoltageDyn |= (short)(8<<value[15]);
            mMinRectVoltageDyn = (short)toUnsigned(value[10]);
            mMinRectVoltageDyn |= (short)(toUnsigned(value[11]) << 8);
            mSetRectVoltageDyn = (short)toUnsigned(value[12]);
            mSetRectVoltageDyn |= (short)(toUnsigned(value[13]) << 8);
            mMaxRectVoltageDyn = (short)toUnsigned(value[14]);
            mMaxRectVoltageDyn |= (short)(toUnsigned(value[15]) << 8);

            mAlert = value[16];
            mReserved1 = (short)(toUnsigned(value[17]));
            mReserved1 = (short)(toUnsigned(value[18]) << 8);
            mReserved2 = value[19];
            Log.i(LOGTAG, "mPruDynamicParam.setAppValue");
            print();
            return;
        }
    }
+40 −7
Original line number Diff line number Diff line
@@ -54,7 +54,7 @@ import android.os.SystemProperties;
public final class WipowerManager {
    private static final String TAG = "WipowerManager";
    private static final boolean DBG = true;
    private static final boolean VDBG = true;
    private static final boolean VDBG = false;

    private static IWipower mService;
    private static ArrayList<WipowerManagerCallback> mCallbacks;
@@ -100,6 +100,15 @@ public final class WipowerManager {
        ON
    };

   /**
    * Wipower power applied event
    * {@hide}
    */
    public enum PowerApplyEvent {
        OFF,
        ON
    };

    /* helper function to invoke callbacks to application layer*/
    void updateWipowerState(WipowerState state){
       if (mCallbacks != null) {
@@ -133,11 +142,22 @@ public final class WipowerManager {
        }
    }

    void updatePowerApplyAlert(PowerApplyEvent alert){
       if (mCallbacks != null) {
           int n = mCallbacks.size();
           if (VDBG) Log.v(TAG,"Broadcasting updatePowerApplyAlert() to " + n + " receivers.");
           for (int i = 0; i < n; i++) {
                  mCallbacks.get(i).onPowerApply(alert);
           }
        }
    }


    /* helper function to invoke callbacks to application layer*/
    void updateWipowerReady(){
       if (mCallbacks != null) {
           int n = mCallbacks.size();
           Log.v(TAG,"Broadcasting updateWipowerReady " + n + " receivers.");
           if (VDBG) Log.v(TAG,"Broadcasting updateWipowerReady " + n + " receivers.");
           for (int i = 0; i < n; i++) {
                  mCallbacks.get(i).onWipowerReady();
           }
@@ -169,11 +189,24 @@ public final class WipowerManager {

        }

        public void onPowerApply(byte alert) {
            PowerApplyEvent s;

            if (alert == 0x1) {
                s = PowerApplyEvent.ON;
            } else {
                s = PowerApplyEvent.OFF;
            }

            if (VDBG) Log.v(TAG, "onPowerApply: alert" + alert);
            updatePowerApplyAlert(s);

        }

        public void onWipowerData(byte[] value) {
            Log.v(TAG, "onWipowerData: " + value);
            if (mPruData != null) {
                 mPruData.setValue(value);
                 mPruData.print();
                 updateWipowerData(mPruData);
            } else {
                 Log.e(TAG, "mPruData is null");
@@ -241,7 +274,6 @@ public final class WipowerManager {
       Log.v(TAG, "Bound to Wipower Service");
       mPruData = new WipowerDynamicParam();
       mCallbacks = new ArrayList<WipowerManagerCallback>();
       mCallbacks.add(callback);
    }

    static boolean isWipowerSupported() {
@@ -340,9 +372,9 @@ public final class WipowerManager {
            Log.e(TAG, " Wipower Service not available");
        } else {
            byte level = 0;
            if( powerlevel == PowerLevel.POWER_LEVEL_MINIMUM) level = 0;
            else if(  powerlevel == PowerLevel.POWER_LEVEL_MEDIUM) level = 1;
            else if(  powerlevel == PowerLevel.POWER_LEVEL_MAXIMUM) level = 2;
            if( powerlevel == PowerLevel.POWER_LEVEL_MINIMUM) level = (31/3);
            else if(  powerlevel == PowerLevel.POWER_LEVEL_MEDIUM) level = ((31/3) * 2);
            else if(  powerlevel == PowerLevel.POWER_LEVEL_MAXIMUM) level = 31;
            try {
                ret = mService.setCurrentLimit(level);
            } catch (android.os.RemoteException e) {
@@ -451,6 +483,7 @@ public final class WipowerManager {
    * {@hide}
    */
    public void registerCallback(WipowerManagerCallback callback) {
        if (VDBG) Log.v(TAG, "registerCallback:Service called");
        if (mService == null) {
            Log.e(TAG, "registerCallback:Service  not available");
        }
+11 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ package android.wipower;

import android.wipower.WipowerManager.WipowerState;
import android.wipower.WipowerManager.WipowerAlert;
import android.wipower.WipowerManager.PowerApplyEvent;

/**
 * Application level callback for Wipower manager APIs.
@@ -76,4 +77,14 @@ public interface WipowerManagerCallback
    * {@hide}
    */
    void onWipowerData(WipowerDynamicParam value);

    /**
    * Indicates the Wipower Alert
    *
    * @param {@link WipowerAlert}
    *
    * {@hide}
    */
    void onPowerApply(PowerApplyEvent alert);

}