• After 15+ years, we've made a big change: Android Forums is now Early Bird Club. Learn more here.

Root [ROM]{BETA.#3} Unofficial CyanogenMod 10

Just curious, has anybody tried the get.cm installer? It says your device isn't officially supported but you could try anyways. I doubt it would work, but if somebody has an old Optimus f7 they don't mind being turned into a paperweight go ahead. Do it for science!

No. Don't. do. it. Stupid. idea.
 
  • Like
Reactions: Techlord
Upvote 0
Can some one post the buildprop file. Im looking for anything having to do with bluetooth. I was going to install the room. To grab it my self but the captcha. Shows a error on mediafire using dolphin firefox and. Chrome. Using android and desktop mode

Not sure but it showed an error for me at first but when I disabled adblocker, it worked.
 
Upvote 0
Hmm i did. Install a xposed. Adblocker thing to stop ads in apps. That. I forgot about. Which explains why when i click amy google ads in browser. I get a weppage not availble screen. Just got to figure out how to uninstall. It since i dont have xposed installed. Im not sure why the captcha wont work tho. This is the first time. Mediafire hasent worked. In desktop mode which is how. I have been getting mediafire to work
 
Upvote 0
Hmm i did. Install a xposed. Adblocker thing to stop ads in apps. That. I forgot about. Which explains why when i click amy google ads in browser. I get a weppage not availble screen. Just got to figure out how to uninstall. It since i dont have xposed installed. Im not sure why the captcha wont work tho. This is the first time. Mediafire hasent worked. In desktop mode which is how. I have been getting mediafire to work

Yes the captcha won't work if any sort of ad blocker is enabled. Even on my desktop PC it won't show the captcha if adblocker is enabled. So yes gotta find a way to disable it. That it the most likely solution.
 
Upvote 0
Well lookie what I found while sifting through the stock rom... managed to decompile the qcrilhook.jar file... this might bring us a step closer to a good ril... theres alot more... qcrilhook.jar has 12 classes

Java:
package com.android.qualcomm.qcrilhook;

import android.content.Context;
import android.os.AsyncResult;
import android.os.Handler;
import android.os.Message;
import android.os.Registrant;
import android.os.RegistrantList;
import android.util.Log;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.HashMap;

public class EmbmsOemHook extends Handler
{
  private static final short EMBMSHOOK_MSG_ID_ACTIVATE = 2;
  private static final short EMBMSHOOK_MSG_ID_DEACTIVATE = 3;
  private static final short EMBMSHOOK_MSG_ID_DISABLE = 1;
  private static final short EMBMSHOOK_MSG_ID_ENABLE = 0;
  private static final short EMBMSHOOK_MSG_ID_GET_ACTIVE = 5;
  private static final short EMBMSHOOK_MSG_ID_GET_AVAILABLE = 4;
  private static final short EMBMSHOOK_MSG_ID_GET_COVERAGE = 8;
  private static final short EMBMSHOOK_MSG_ID_UNSOL_ACTIVE_TMGI_LIST = 12;
  private static final short EMBMSHOOK_MSG_ID_UNSOL_AVAILABLE_TMGI_LIST = 15;
  private static final short EMBMSHOOK_MSG_ID_UNSOL_COVERAGE_STATE = 13;
  private static final short EMBMSHOOK_MSG_ID_UNSOL_OOS_STATE = 16;
  private static final short EMBMSHOOK_MSG_ID_UNSOL_STATE_CHANGE = 11;
  private static final short EMBMS_SERVICE_ID = 2;
  private static final int FAILURE = -1;
  private static String LOG_TAG = "EmbmsOemHook";
  private static final int OEM_HOOK_RESPONSE = 1;
  private static final int SIZE_OF_TMGI = 6;
  private static final int SUCCESS = 0;
  private static final byte TLV_TYPE_ACTIVATE_REQ_ALL_SESSIONS = 3;
  private static final byte TLV_TYPE_ACTIVATE_REQ_CALL_ID = 4;
  private static final byte TLV_TYPE_ACTIVATE_REQ_SESSION_ID = 2;
  private static final byte TLV_TYPE_ACTIVATE_REQ_TMGI = 1;
  private static final byte TLV_TYPE_ACTIVATE_RESP_CALL_ID = 16;
  private static final byte TLV_TYPE_ACTIVATE_RESP_TMGI = 17;
  private static final byte TLV_TYPE_DEACTIVATE_REQ_CALL_ID = 1;
  private static final byte TLV_TYPE_DEACTIVATE_REQ_TMGI = 2;
  private static final byte TLV_TYPE_DEACTIVATE_RESP_CALL_ID = 16;
  private static final byte TLV_TYPE_DEACTIVATE_RESP_TMGI = 17;
  private static final byte TLV_TYPE_DISABLE_REQ_CALL_ID = 1;
  private static final byte TLV_TYPE_DISABLE_RESP_CALL_ID = 16;
  private static final byte TLV_TYPE_ENABLE_RESP_CALL_ID = 16;
  private static final byte TLV_TYPE_ENABLE_RESP_IFNAME = 17;
  private static final byte TLV_TYPE_ENABLE_RESP_IF_INDEX = 18;
  private static final byte TLV_TYPE_GET_ACTIVE_REQ_CALL_ID = 1;
  private static final byte TLV_TYPE_GET_ACTIVE_RESP_TMGI_ARRAY = 16;
  private static final byte TLV_TYPE_GET_AVAILABLE_REQ_CALL_ID = 1;
  private static final byte TLV_TYPE_GET_AVAILABLE_RESP_TMGI_ARRAY = 16;
  private static final byte TLV_TYPE_GET_COVERAGE_STATE_RESP_STATE = 16;
  private static final short TLV_TYPE_UNSOL_ACTIVE_IND_TMGI_ARRAY = 1;
  private static final short TLV_TYPE_UNSOL_AVAILABLE_IND_SESSION_ID_ARRAY = 2;
  private static final short TLV_TYPE_UNSOL_AVAILABLE_IND_TMGI_ARRAY = 1;
  private static final short TLV_TYPE_UNSOL_COVERAGE_IND_STATE = 1;
  private static final short TLV_TYPE_UNSOL_OOS_IND_STATE = 1;
  private static final short TLV_TYPE_UNSOL_OOS_IND_TMGI_ARRAY = 2;
  private static final short TLV_TYPE_UNSOL_STATE_IND_IF_INDEX = 3;
  private static final short TLV_TYPE_UNSOL_STATE_IND_IP_ADDRESS = 2;
  private static final short TLV_TYPE_UNSOL_STATE_IND_STATE = 1;
  public static final int UNSOL_TYPE_ACTIVE_TMGI_LIST = 2;
  public static final int UNSOL_TYPE_AVAILABLE_TMGI_LIST = 4;
  public static final int UNSOL_TYPE_BROADCAST_COVERAGE = 3;
  public static final int UNSOL_TYPE_OOS_STATE = 5;
  public static final int UNSOL_TYPE_STATE_CHANGE = 1;
  private static int mRefCount = 0;
  private static EmbmsOemHook sInstance;
  private QmiOemHook mQmiOemHook;
  private RegistrantList mRegistrants;

  private EmbmsOemHook(Context paramContext)
  {
    Log.v(LOG_TAG, "EmbmsOemHook ()");
    this.mQmiOemHook = QmiOemHook.getInstance(paramContext);
    this.mRegistrants = new RegistrantList();
  }

  private static String bytesToHexString(byte[] paramArrayOfByte)
  {
    if (paramArrayOfByte == null)
      return null;
    StringBuilder localStringBuilder = new StringBuilder(2 * paramArrayOfByte.length);
    for (int i = 0; i < paramArrayOfByte.length; i++)
    {
      localStringBuilder.append("0123456789abcdef".charAt(0xF & paramArrayOfByte[i] >> 4));
      localStringBuilder.append("0123456789abcdef".charAt(0xF & paramArrayOfByte[i]));
    }
    return localStringBuilder.toString();
  }

  public static EmbmsOemHook getInstance(Context paramContext)
  {
    try
    {
      if (sInstance == null)
      {
        sInstance = new EmbmsOemHook(paramContext);
        Log.d(LOG_TAG, "Singleton Instance of Embms created.");
        QmiOemHook.registerService((short)2, sInstance, 1);
      }
      mRefCount = 1 + mRefCount;
      EmbmsOemHook localEmbmsOemHook = sInstance;
      return localEmbmsOemHook;
    }
    finally
    {
    }
  }

  private void handleResponse(HashMap<Integer, Object> paramHashMap)
  {
    int i = ((Short)paramHashMap.get(Integer.valueOf(8))).shortValue();
    int j = ((Integer)paramHashMap.get(Integer.valueOf(2))).intValue();
    int k = ((Integer)paramHashMap.get(Integer.valueOf(3))).intValue();
    Message localMessage = (Message)paramHashMap.get(Integer.valueOf(4));
    ByteBuffer localByteBuffer = (ByteBuffer)paramHashMap.get(Integer.valueOf(6));
    Log.v(LOG_TAG, " responseSize=" + j + " successStatus=" + k);
    switch (i)
    {
    case 6:
    case 7:
    case 9:
    case 10:
    case 14:
    default:
      Log.e(LOG_TAG, "received unexpected msgId " + i);
      return;
    case 0:
      localMessage.obj = new EnableResponse(k, localByteBuffer);
      localMessage.sendToTarget();
      return;
    case 1:
      localMessage.obj = new DisableResponse(k, localByteBuffer);
      localMessage.sendToTarget();
      return;
    case 2:
    case 3:
      localMessage.obj = new TmgiResponse(k, localByteBuffer);
      localMessage.sendToTarget();
      return;
    case 11:
      notifyUnsol(1, new StateChangeInfo(localByteBuffer));
      return;
    case 4:
    case 15:
      if ((i == 4) && (k != 0))
      {
        Log.e(LOG_TAG, "Error received in EMBMSHOOK_MSG_ID_GET_AVAILABLE: " + k);
        return;
      }
      notifyUnsol(4, new TmgiListIndication(localByteBuffer));
      return;
    case 5:
    case 12:
      if ((i == 5) && (k != 0))
      {
        Log.e(LOG_TAG, "Error received in EMBMSHOOK_MSG_ID_GET_ACTIVE: " + k);
        return;
      }
      notifyUnsol(2, new TmgiListIndication(localByteBuffer));
      return;
    case 8:
    case 13:
      if ((i == 8) && (k != 0))
      {
        Log.e(LOG_TAG, "Error received in EMBMSHOOK_MSG_ID_GET_COVERAGE: " + k);
        return;
      }
      notifyUnsol(3, new CoverageState(localByteBuffer));
      return;
    case 16:
    }
    notifyUnsol(5, new OosState(localByteBuffer));
  }

  private void notifyUnsol(int paramInt, Object paramObject)
  {
    AsyncResult localAsyncResult = new AsyncResult(null, new UnsolObject(paramInt, paramObject), null);
    Log.i(LOG_TAG, "Notifying registrants type = " + paramInt);
    this.mRegistrants.notifyRegistrants(localAsyncResult);
  }

  private byte[] parseTmgi(ByteBuffer paramByteBuffer)
  {
    int i = 0;
    int j = paramByteBuffer.get();
    byte[] arrayOfByte = new byte[j * 6];
    int k = 0;
    while (k < j)
    {
      int m = paramByteBuffer.get();
      int n = 0;
      int i2;
      for (int i1 = i; n < m; i1 = i2)
      {
        i2 = i1 + 1;
        arrayOfByte[i1] = paramByteBuffer.get();
        n++;
      }
      k++;
      i = i1;
    }
    return arrayOfByte;
  }

  public int activateTmgi(byte[] paramArrayOfByte, byte paramByte1, byte paramByte2, boolean paramBoolean, String[] paramArrayOfString, int[] paramArrayOfInt, Message paramMessage)
  {
    TmgiActivateRequest localTmgiActivateRequest = new TmgiActivateRequest(paramArrayOfByte, paramByte1, paramByte2, paramBoolean);
    try
    {
      this.mQmiOemHook.sendQmiMessageAsync((short)2, (short)2, localTmgiActivateRequest.getTypes(), localTmgiActivateRequest.getItems(), paramMessage);
      return 0;
    }
    catch (IOException localIOException)
    {
      Log.e(LOG_TAG, "IOException occurred during activate !!!!!!");
    }
    return -1;
  }

  public int deactivateTmgi(byte[] paramArrayOfByte, byte paramByte, Message paramMessage)
  {
    TmgiDeActivateRequest localTmgiDeActivateRequest = new TmgiDeActivateRequest(paramArrayOfByte, paramByte);
    try
    {
      this.mQmiOemHook.sendQmiMessageAsync((short)2, (short)3, localTmgiDeActivateRequest.getTypes(), localTmgiDeActivateRequest.getItems(), paramMessage);
      return 0;
    }
    catch (IOException localIOException)
    {
      Log.e(LOG_TAG, "IOException occurred during deactivate !!!!!!");
    }
    return -1;
  }

  public int disable(byte paramByte, Message paramMessage)
  {
    GenericRequest localGenericRequest = new GenericRequest(paramByte);
    try
    {
      this.mQmiOemHook.sendQmiMessageAsync((short)2, (short)1, localGenericRequest.getTypes(), localGenericRequest.getItems(), paramMessage);
      return 0;
    }
    catch (IOException localIOException)
    {
      Log.e(LOG_TAG, "IOException occurred during disable !!!!!!");
    }
    return -1;
  }

  public void dispose()
  {
    try
    {
      int i = -1 + mRefCount;
      mRefCount = i;
      if (i == 0)
      {
        Log.d(LOG_TAG, "dispose(): Unregistering receiver");
        QmiOemHook.unregisterService(2);
        this.mQmiOemHook.dispose();
        sInstance = null;
      }
      while (true)
      {
        return;
        Log.v(LOG_TAG, "dispose mRefCount = " + mRefCount);
      }
    }
    finally
    {
    }
  }

  public int enable(Message paramMessage)
  {
    try
    {
      this.mQmiOemHook.sendQmiMessageAsync((short)2, (short)0, paramMessage);
      return 0;
    }
    catch (IOException localIOException)
    {
      Log.e(LOG_TAG, "IOException occurred during enable !!!!!!");
    }
    return -1;
  }

  public int getActiveTMGIList(byte paramByte)
  {
    GenericRequest localGenericRequest = new GenericRequest(paramByte);
    try
    {
      this.mQmiOemHook.sendQmiMessageAsync((short)2, (short)5, localGenericRequest.getTypes(), localGenericRequest.getItems(), null);
      return 0;
    }
    catch (IOException localIOException)
    {
      Log.e(LOG_TAG, "IOException occurred during getActiveTMGIList !!!!!!");
    }
    return -1;
  }

  public int getAvailableTMGIList(byte paramByte)
  {
    GenericRequest localGenericRequest = new GenericRequest(paramByte);
    try
    {
      this.mQmiOemHook.sendQmiMessageAsync((short)2, (short)4, localGenericRequest.getTypes(), localGenericRequest.getItems(), null);
      return 0;
    }
    catch (IOException localIOException)
    {
      Log.e(LOG_TAG, "IOException occurred during getAvailableTMGIList !!!!!!");
    }
    return -1;
  }

  public int getCoverageState()
  {
    try
    {
      this.mQmiOemHook.sendQmiMessageAsync((short)2, (short)8, null);
      return 0;
    }
    catch (IOException localIOException)
    {
      Log.e(LOG_TAG, "IOException occurred during getActiveTMGIList !!!!!!");
    }
    return -1;
  }

  public void handleMessage(Message paramMessage)
  {
    Log.i(LOG_TAG, "received message : " + paramMessage.what);
    switch (paramMessage.what)
    {
    default:
      Log.e(LOG_TAG, "Unexpected message received from QmiOemHook what = " + paramMessage.what);
      return;
    case 1:
    }
    HashMap localHashMap = (HashMap)((AsyncResult)paramMessage.obj).result;
    if (localHashMap == null)
    {
      Log.e(LOG_TAG, "Hashmap async userobj is NULL");
      return;
    }
    handleResponse(localHashMap);
  }

  public void registerForNotifications(Handler paramHandler, int paramInt, Object paramObject)
  {
    Registrant localRegistrant = new Registrant(paramHandler, paramInt, paramObject);
    synchronized (this.mRegistrants)
    {
      Log.i(LOG_TAG, "Adding a registrant");
      this.mRegistrants.add(localRegistrant);
      return;
    }
  }

  public void unregisterForNotifications(Handler paramHandler)
  {
    synchronized (this.mRegistrants)
    {
      Log.i(LOG_TAG, "Removing a registrant");
      this.mRegistrants.remove(paramHandler);
      return;
    }
  }

  public class CoverageState
  {
    public int state;
    public int status;

    public CoverageState(ByteBuffer arg2)
    {
      Object localObject;
      while (localObject.hasRemaining())
      {
        int i = PrimitiveParser.toUnsigned(localObject.get());
        PrimitiveParser.toUnsigned(localObject.getShort());
        switch (i)
        {
        default:
          Log.e(EmbmsOemHook.LOG_TAG, "CoverageState: Unexpected Type " + i);
          break;
        case 1:
        case 16:
          this.state = localObject.getInt();
          Log.i(EmbmsOemHook.LOG_TAG, "Coverage State = " + this.state);
        }
      }
    }
  }

  public class DisableResponse
  {
    public byte callId;
    public int error;

    public DisableResponse(int paramByteBuffer, ByteBuffer arg3)
    {
      if (paramByteBuffer != 0)
      {
        this.error = paramByteBuffer;
        this.callId = 0;
      }
      while (true)
      {
        return;
        Object localObject;
        this.callId = localObject.get();
        Log.i(EmbmsOemHook.LOG_TAG, "callid = " + this.callId);
        while (localObject.hasRemaining())
        {
          int i = PrimitiveParser.toUnsigned(localObject.get());
          PrimitiveParser.toUnsigned(localObject.getShort());
          switch (i)
          {
          case 16:
          }
          Log.e(EmbmsOemHook.LOG_TAG, "DisableResponse: Unexpected Type " + i);
        }
      }
    }
  }

  public class EnableResponse
  {
    public byte callId;
    public int error;
    public int ifIndex;
    public String interfaceName;

    public EnableResponse(int paramByteBuffer, ByteBuffer arg3)
    {
      if (paramByteBuffer != 0)
      {
        this.error = paramByteBuffer;
        this.callId = 0;
        this.interfaceName = null;
        this.ifIndex = 0;
      }
      while (true)
      {
        return;
        Object localObject;
        this.callId = localObject.get();
        Log.i(EmbmsOemHook.LOG_TAG, "callid = " + this.callId);
        while (localObject.hasRemaining())
        {
          int i = PrimitiveParser.toUnsigned(localObject.get());
          int j = PrimitiveParser.toUnsigned(localObject.getShort());
          switch (i)
          {
          case 16:
          default:
            Log.e(EmbmsOemHook.LOG_TAG, "EnableResponse: Unexpected Type " + i);
            break;
          case 17:
            byte[] arrayOfByte = new byte[j];
            for (int k = 0; k < j; k++)
              arrayOfByte[k] = localObject.get();
            this.interfaceName = new QmiPrimitiveTypes.QmiString(arrayOfByte).toStringValue();
            Log.i(EmbmsOemHook.LOG_TAG, "ifName = " + this.interfaceName);
            break;
          case 18:
            this.ifIndex = localObject.getInt();
            Log.i(EmbmsOemHook.LOG_TAG, "ifIndex = " + this.ifIndex);
          }
        }
      }
    }
  }

  public class GenericRequest extends BaseQmiTypes.BaseQmiStructType
  {
    public QmiPrimitiveTypes.QmiByte callId;

    public GenericRequest(byte arg2)
    {
      byte b;
      this.callId = new QmiPrimitiveTypes.QmiByte(b);
    }

    public BaseQmiTypes.BaseQmiItemType[] getItems()
    {
      BaseQmiTypes.BaseQmiItemType[] arrayOfBaseQmiItemType = new BaseQmiTypes.BaseQmiItemType[1];
      arrayOfBaseQmiItemType[0] = this.callId;
      return arrayOfBaseQmiItemType;
    }

    public short[] getTypes()
    {
      return new short[] { 1 };
    }
  }

  public class OosState
  {
    public byte[] list = null;
    public int state;

    public OosState(ByteBuffer arg2)
    {
      ByteBuffer localByteBuffer;
      while (localByteBuffer.hasRemaining())
      {
        int i = PrimitiveParser.toUnsigned(localByteBuffer.get());
        PrimitiveParser.toUnsigned(localByteBuffer.getShort());
        switch (i)
        {
        default:
          Log.e(EmbmsOemHook.LOG_TAG, "OosState: Unexpected Type " + i);
          break;
        case 1:
          this.state = localByteBuffer.getInt();
          Log.i(EmbmsOemHook.LOG_TAG, "OOs State = " + this.state);
          break;
        case 2:
          this.list = EmbmsOemHook.this.parseTmgi(localByteBuffer);
          Log.i(EmbmsOemHook.LOG_TAG, "tmgiArray = " + EmbmsOemHook.bytesToHexString(this.list));
        }
      }
    }
  }

  public class StateChangeInfo
  {
    public int ifIndex;
    public String ipAddress;
    public int state;

    public StateChangeInfo(int paramString, String paramInt1, int arg4)
    {
      this.state = paramString;
      this.ipAddress = paramInt1;
      int i;
      this.ifIndex = i;
    }

    public StateChangeInfo(ByteBuffer arg2)
    {
      Object localObject;
      while (localObject.hasRemaining())
      {
        int i = PrimitiveParser.toUnsigned(localObject.get());
        int j = PrimitiveParser.toUnsigned(localObject.getShort());
        switch (i)
        {
        default:
          Log.e(EmbmsOemHook.LOG_TAG, "StateChangeInfo: Unexpected Type " + i);
          break;
        case 1:
          this.state = localObject.getInt();
          Log.i(EmbmsOemHook.LOG_TAG, "State = " + this.state);
          break;
        case 2:
          byte[] arrayOfByte = new byte[j];
          for (int k = 0; k < j; k++)
            arrayOfByte[k] = localObject.get();
          this.ipAddress = new QmiPrimitiveTypes.QmiString(arrayOfByte).toString();
          Log.i(EmbmsOemHook.LOG_TAG, "ip Address = " + this.ipAddress);
          break;
        case 3:
          this.ifIndex = localObject.getInt();
          Log.i(EmbmsOemHook.LOG_TAG, "index = " + this.ifIndex);
        }
      }
    }
  }

  public class TmgiActivateRequest extends BaseQmiTypes.BaseQmiStructType
  {
    public QmiPrimitiveTypes.QmiByte allSessions;
    public QmiPrimitiveTypes.QmiByte callId;
    public QmiPrimitiveTypes.QmiByte sessionId;
    public QmiPrimitiveTypes.QmiArray<QmiPrimitiveTypes.QmiByte> tmgi;

    public TmgiActivateRequest(byte[] paramByte1, byte paramByte2, byte paramBoolean, boolean arg5)
    {
      QmiPrimitiveTypes.QmiByte[] arrayOfQmiByte = new QmiPrimitiveTypes.QmiByte[paramByte1.length];
      for (int j = 0; j < paramByte1.length; j++)
        arrayOfQmiByte[j] = new QmiPrimitiveTypes.QmiByte(paramByte1[j]);
      this.tmgi = new QmiPrimitiveTypes.QmiArray(arrayOfQmiByte, (short)6, QmiPrimitiveTypes.QmiByte.class);
      this.callId = new QmiPrimitiveTypes.QmiByte(paramByte2);
      this.sessionId = new QmiPrimitiveTypes.QmiByte(paramBoolean);
      byte b = 0;
      int i;
      if (i != 0)
        b = 1;
      this.allSessions = new QmiPrimitiveTypes.QmiByte(b);
    }

    public BaseQmiTypes.BaseQmiItemType[] getItems()
    {
      BaseQmiTypes.BaseQmiItemType[] arrayOfBaseQmiItemType = new BaseQmiTypes.BaseQmiItemType[4];
      arrayOfBaseQmiItemType[0] = this.tmgi;
      arrayOfBaseQmiItemType[1] = this.sessionId;
      arrayOfBaseQmiItemType[2] = this.allSessions;
      arrayOfBaseQmiItemType[3] = this.callId;
      return arrayOfBaseQmiItemType;
    }

    public short[] getTypes()
    {
      return new short[] { 1, 2, 3, 4 };
    }
  }

  public class TmgiDeActivateRequest extends BaseQmiTypes.BaseQmiStructType
  {
    public QmiPrimitiveTypes.QmiByte callId;
    public QmiPrimitiveTypes.QmiArray<QmiPrimitiveTypes.QmiByte> tmgi;

    public TmgiDeActivateRequest(byte[] paramByte, byte arg3)
    {
      QmiPrimitiveTypes.QmiByte[] arrayOfQmiByte = new QmiPrimitiveTypes.QmiByte[paramByte.length];
      for (int i = 0; i < paramByte.length; i++)
        arrayOfQmiByte[i] = new QmiPrimitiveTypes.QmiByte(paramByte[i]);
      this.tmgi = new QmiPrimitiveTypes.QmiArray(arrayOfQmiByte, (short)6, QmiPrimitiveTypes.QmiByte.class);
      byte b;
      this.callId = new QmiPrimitiveTypes.QmiByte(b);
    }

    public BaseQmiTypes.BaseQmiItemType[] getItems()
    {
      BaseQmiTypes.BaseQmiItemType[] arrayOfBaseQmiItemType = new BaseQmiTypes.BaseQmiItemType[2];
      arrayOfBaseQmiItemType[0] = this.tmgi;
      arrayOfBaseQmiItemType[1] = this.callId;
      return arrayOfBaseQmiItemType;
    }

    public short[] getTypes()
    {
      return new short[] { 2, 1 };
    }
  }

  public class TmgiListIndication
  {
    public byte[] list = null;
    public byte[] sessions = null;

    public TmgiListIndication(ByteBuffer arg2)
    {
      ByteBuffer localByteBuffer;
      while (localByteBuffer.hasRemaining())
      {
        int i = PrimitiveParser.toUnsigned(localByteBuffer.get());
        PrimitiveParser.toUnsigned(localByteBuffer.getShort());
        switch (i)
        {
        default:
          Log.e(EmbmsOemHook.LOG_TAG, "TmgiListIndication: Unexpected Type " + i);
          break;
        case 1:
        case 16:
          this.list = EmbmsOemHook.this.parseTmgi(localByteBuffer);
          Log.i(EmbmsOemHook.LOG_TAG, "tmgiArray = " + EmbmsOemHook.bytesToHexString(this.list));
          break;
        case 2:
          int j = 0;
          int k = localByteBuffer.get();
          byte[] arrayOfByte = new byte[k * 6];
          int m = 0;
          while (m < k)
          {
            int n = localByteBuffer.get();
            int i1 = 0;
            int i3;
            for (int i2 = j; i1 < n; i2 = i3)
            {
              i3 = i2 + 1;
              arrayOfByte[i2] = localByteBuffer.get();
              i1++;
            }
            m++;
            j = i2;
          }
          this.sessions = arrayOfByte;
          Log.i(EmbmsOemHook.LOG_TAG, "session array = " + EmbmsOemHook.bytesToHexString(this.sessions));
        }
      }
    }
  }

  public class TmgiResponse
  {
    public int status;
    public byte[] tmgi = null;

    public TmgiResponse(int paramByteBuffer, ByteBuffer arg3)
    {
      this.status = paramByteBuffer;
      Object localObject;
      while (localObject.hasRemaining())
      {
        int i = PrimitiveParser.toUnsigned(localObject.get());
        PrimitiveParser.toUnsigned(localObject.getShort());
        switch (i)
        {
        default:
          Log.e(EmbmsOemHook.LOG_TAG, "TmgiResponse: Unexpected Type " + i);
          break;
        case 17:
          int k = localObject.get();
          byte[] arrayOfByte = new byte[k];
          for (int m = 0; m < k; m++)
            arrayOfByte[m] = localObject.get();
          this.tmgi = arrayOfByte;
          Log.i(EmbmsOemHook.LOG_TAG, "tmgi = " + EmbmsOemHook.bytesToHexString(this.tmgi));
          break;
        case 16:
          int j = localObject.get();
          Log.i(EmbmsOemHook.LOG_TAG, "callid = " + j);
        }
      }
    }
  }

  public class UnsolObject
  {
    public Object obj;
    public int unsolId;

    public UnsolObject(int paramObject, Object arg3)
    {
      this.unsolId = paramObject;
      Object localObject;
      this.obj = localObject;
    }
  }
}

Java:
package com.android.qualcomm.qcrilhook;

import android.os.AsyncResult;
import android.os.Handler;

public abstract interface IQcRilHook
{
  public static final int QCRILHOOK_BASE = 524288;
  public static final int QCRILHOOK_DMS_GET_DEVICE_SERIAL_NUMBERS = 528394;
  public static final int QCRILHOOK_DMS_GET_FTM_MODE = 528391;
  public static final int QCRILHOOK_DMS_GET_SPC_CHANGE_ENABLED = 528395;
  public static final int QCRILHOOK_DMS_GET_SW_VERSION = 528392;
  public static final int QCRILHOOK_DMS_SET_SPC_CHANGE_ENABLED = 528396;
  public static final int QCRILHOOK_DMS_UPDATE_SERVICE_PROGRAMING_CODE = 528393;
  public static final int QCRILHOOK_GO_DORMANT = 524291;
  public static final int QCRILHOOK_ME_DEPERSONALIZATION = 524292;
  public static final int QCRILHOOK_NAS_GET_3GPP2_SUBSCRIPTION_INFO = 528385;
  public static final int QCRILHOOK_NAS_GET_MOB_CAI_REV = 528387;
  public static final int QCRILHOOK_NAS_GET_RTRE_CONFIG = 528389;
  public static final int QCRILHOOK_NAS_SET_3GPP2_SUBSCRIPTION_INFO = 528386;
  public static final int QCRILHOOK_NAS_SET_MOB_CAI_REV = 528388;
  public static final int QCRILHOOK_NAS_SET_RTRE_CONFIG = 528390;
  public static final int QCRILHOOK_NAS_UPDATE_AKEY = 528384;
  public static final int QCRILHOOK_NV_READ = 524289;
  public static final int QCRILHOOK_NV_WRITE = 524290;
  public static final int QCRILHOOK_QMI_OEMHOOK_REQUEST_ID = 524388;
  public static final int QCRILHOOK_UNSOL_CDMA_BURST_DTMF = 525289;
  public static final int QCRILHOOK_UNSOL_CDMA_CONT_DTMF_START = 525290;
  public static final int QCRILHOOK_UNSOL_CDMA_CONT_DTMF_STOP = 525291;
  public static final int QCRILHOOK_UNSOL_EXTENDED_DBM_INTL = 525288;
  public static final int QCRILHOOK_UNSOL_LOCAL_RINGBACK_START = 525292;
  public static final int QCRILHOOK_UNSOL_LOCAL_RINGBACK_STOP = 525293;
  public static final int QCRILHOOK_UNSOL_OEMHOOK = 525388;
  public static final int QCRILHOOK_VOICE_GET_CONFIG = 528398;
  public static final int QCRILHOOK_VOICE_SET_CONFIG = 528397;
  public static final int QCRIL_EVT_HOOK_GET_PAGING_PRIORITY = 524296;
  public static final int QCRIL_EVT_HOOK_GET_TUNEAWAY = 524294;
  public static final int QCRIL_EVT_HOOK_INFORM_SHUTDOWN = 524298;
  public static final int QCRIL_EVT_HOOK_SET_PAGING_PRIORITY = 524295;
  public static final int QCRIL_EVT_HOOK_SET_TUNEAWAY = 524293;
  public static final int SERVICE_PROGRAMMING_BASE = 4096;

  public abstract int qcRilGetPrioritySub();

  public abstract boolean qcRilGetTuneAway();

  public abstract boolean qcRilGoDormant(String paramString);

  public abstract boolean qcRilSetPrioritySub(int paramInt);

  public abstract boolean qcRilSetTuneAway(boolean paramBoolean);

  public abstract void registerForExtendedDbmIntl(Handler paramHandler, int paramInt, Object paramObject);

  public abstract void registerForFieldTestData(Handler paramHandler, int paramInt, Object paramObject);

  public abstract AsyncResult sendQcRilHookMsg(int paramInt);

  public abstract AsyncResult sendQcRilHookMsg(int paramInt, byte paramByte);

  public abstract AsyncResult sendQcRilHookMsg(int paramInt1, int paramInt2);

  public abstract AsyncResult sendQcRilHookMsg(int paramInt, String paramString);

  public abstract AsyncResult sendQcRilHookMsg(int paramInt, byte[] paramArrayOfByte);

  public abstract void unregisterForExtendedDbmIntl(Handler paramHandler);

  public abstract void unregisterForFieldTestData(Handler paramHandler);

  public static class QcRilExtendedDbmIntlKddiAocr
  {
    public byte chg_ind;
    public byte db_subtype;
    public short mcc;
    public byte sub_unit;
    public byte unit;
  }
}

Java:
package com.android.qualcomm.qcrilhook;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.AsyncResult;
import android.os.Handler;
import android.os.Registrant;
import android.os.RegistrantList;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.util.Log;
import com.android.internal.telephony.CommandException;
import com.android.internal.telephony.IOemHookCallback;
import com.android.internal.telephony.ITelephony;
import com.android.internal.telephony.ITelephony.Stub;
import com.android.internal.telephony.uicc.IccUtils;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;

public class QcRilHook
  implements IQcRilHook
{
  private static final int BYTE_SIZE = 1;
  private static final int INT_SIZE = 4;
  private static final String LOG_TAG = "QC_RIL_OEM_HOOK";
  private static final int RESPONSE_BUFFER_SIZE = 2048;
  private static RegistrantList mRegistrants;
  private Context mContext;
  private final int mHeaderSize = 8 + "QUALCOMM".length();
  private BroadcastReceiver mIntentReceiver = new BroadcastReceiver()
  {
    public void onReceive(Context paramAnonymousContext, Intent paramAnonymousIntent)
    {
      String str1 = paramAnonymousIntent.getAction();
      if (str1.equals("android.intent.action.ACTION_UNSOL_RESPONSE_OEM_HOOK_RAW"))
      {
        Log.d("QC_RIL_OEM_HOOK", "Received Broadcast Intent ACTION_UNSOL_RESPONSE_OEM_HOOK_RAW");
        byte[] arrayOfByte1 = paramAnonymousIntent.getByteArrayExtra("payload");
        if (arrayOfByte1 != null)
        {
          if (arrayOfByte1.length >= QcRilHook.this.mHeaderSize)
            break label104;
          Log.e("QC_RIL_OEM_HOOK", "UNSOL_RESPONSE_OEM_HOOK_RAW incomplete header");
          Log.e("QC_RIL_OEM_HOOK", "Expected " + QcRilHook.this.mHeaderSize + " bytes. Received " + arrayOfByte1.length + " bytes.");
        }
        label104: ByteBuffer localByteBuffer;
        int i;
        do
        {
          return;
          localByteBuffer = QcRilHook.createBufferWithNativeByteOrder(arrayOfByte1);
          byte[] arrayOfByte2 = new byte["QUALCOMM".length()];
          localByteBuffer.get(arrayOfByte2);
          String str2 = new String(arrayOfByte2);
          Log.d("QC_RIL_OEM_HOOK", "Oem ID in QCRILHOOK UNSOL RESP is " + str2);
          if (!str2.equals("QUALCOMM"))
          {
            Log.w("QC_RIL_OEM_HOOK", "Incorrect Oem ID in QCRILHOOK UNSOL RESP. Expected QUALCOMM. Received " + str2);
            return;
          }
          i = arrayOfByte1.length - "QUALCOMM".length();
        }
        while (i <= 0);
        byte[] arrayOfByte3 = new byte[i];
        localByteBuffer.get(arrayOfByte3);
        QcRilHook.notifyRegistrants(new AsyncResult(null, arrayOfByte3, null));
        return;
      }
      Log.w("QC_RIL_OEM_HOOK", "Received Unknown Intent: action = " + str1);
    }
  };
  private final String mOemIdentifier = "QUALCOMM";
  private ITelephony mPhoneService = ITelephony.Stub.asInterface(ServiceManager.getService("phone"));

  public QcRilHook()
  {
    mRegistrants = new RegistrantList();
    if (this.mPhoneService == null)
    {
      Log.e("QC_RIL_OEM_HOOK", "QcRilOemHook Service Failed");
      return;
    }
    Log.i("QC_RIL_OEM_HOOK", "QcRilOemHook Service Created Successfully");
  }

  public QcRilHook(Context paramContext)
  {
    this();
    this.mContext = paramContext;
    IntentFilter localIntentFilter = new IntentFilter();
    localIntentFilter.addAction("android.intent.action.ACTION_UNSOL_RESPONSE_OEM_HOOK_RAW");
    paramContext.registerReceiver(this.mIntentReceiver, localIntentFilter);
    Log.d("QC_RIL_OEM_HOOK", "Registering for intent ACTION_UNSOL_RESPONSE_OEM_HOOK_RAW");
  }

  private void addQcRilHookHeader(ByteBuffer paramByteBuffer, int paramInt1, int paramInt2)
  {
    paramByteBuffer.put("QUALCOMM".getBytes());
    paramByteBuffer.putInt(paramInt1);
    paramByteBuffer.putInt(paramInt2);
  }

  public static ByteBuffer createBufferWithNativeByteOrder(byte[] paramArrayOfByte)
  {
    ByteBuffer localByteBuffer = ByteBuffer.wrap(paramArrayOfByte);
    localByteBuffer.order(ByteOrder.nativeOrder());
    return localByteBuffer;
  }

  public static void notifyRegistrants(AsyncResult paramAsyncResult)
  {
    if (mRegistrants != null)
    {
      mRegistrants.notifyRegistrants(paramAsyncResult);
      return;
    }
    Log.e("QC_RIL_OEM_HOOK", "QcRilOemHook notifyRegistrants Failed");
  }

  public static void register(Handler paramHandler, int paramInt, Object paramObject)
  {
    Registrant localRegistrant = new Registrant(paramHandler, paramInt, paramObject);
    synchronized (mRegistrants)
    {
      mRegistrants.add(localRegistrant);
      return;
    }
  }

  private AsyncResult sendRilOemHookMsg(int paramInt, byte[] paramArrayOfByte)
  {
    byte[] arrayOfByte1 = new byte[2048];
    Log.v("QC_RIL_OEM_HOOK", "sendQcRilOemHookMsg: Outgoing Data is " + IccUtils.bytesToHexString(paramArrayOfByte));
    try
    {
      int i = this.mPhoneService.sendOemRilRequestRaw(paramArrayOfByte, arrayOfByte1);
      if (i >= 0)
      {
        byte[] arrayOfByte2 = null;
        if (i > 0)
        {
          arrayOfByte2 = new byte[i];
          System.arraycopy(arrayOfByte1, 0, arrayOfByte2, 0, i);
        }
        return new AsyncResult(Integer.valueOf(i), arrayOfByte2, null);
      }
      AsyncResult localAsyncResult = new AsyncResult(paramArrayOfByte, null, CommandException.fromRilErrno(i * -1));
      return localAsyncResult;
    }
    catch (RemoteException localRemoteException)
    {
      Log.w("QC_RIL_OEM_HOOK", "sendQcRilOemHook RequestID = " + paramInt + " exception, unable to send RIL request from this application", localRemoteException);
      return new AsyncResult(Integer.valueOf(paramInt), null, localRemoteException);
    }
  }

  private void sendRilOemHookMsgAsync(int paramInt, byte[] paramArrayOfByte, IOemHookCallback paramIOemHookCallback)
  {
    Log.v("QC_RIL_OEM_HOOK", "sendQcRilOemHookMsgAsync: Outgoing Data is " + IccUtils.bytesToHexString(paramArrayOfByte));
    try
    {
      this.mPhoneService.sendOemRilRequestRawAsync(paramArrayOfByte, paramIOemHookCallback);
      return;
    }
    catch (RemoteException localRemoteException)
    {
      Log.w("QC_RIL_OEM_HOOK", "sendQcRilOemHookAsync RequestID = " + paramInt + " exception, unable to send RIL request from this application", localRemoteException);
    }
  }

  public static void unregister(Handler paramHandler)
  {
    synchronized (mRegistrants)
    {
      mRegistrants.remove(paramHandler);
      return;
    }
  }

  protected void dispose()
  {
    if (this.mContext != null)
    {
      Log.v("QC_RIL_OEM_HOOK", "dispose(): Unregistering receiver");
      this.mContext.unregisterReceiver(this.mIntentReceiver);
    }
  }

  protected void finalize()
  {
    Log.v("QC_RIL_OEM_HOOK", "is destroyed");
  }

  public int qcRilGetPrioritySub()
  {
    AsyncResult localAsyncResult = sendQcRilHookMsg(524296);
    if (localAsyncResult.exception != null)
    {
      Log.e("QC_RIL_OEM_HOOK", "QCRIL  get priority sub Command returned Exception: " + localAsyncResult.exception);
      return 0;
    }
    if (localAsyncResult.result != null)
    {
      int i = ByteBuffer.wrap((byte[])localAsyncResult.result).get();
      Log.v("QC_RIL_OEM_HOOK", "qcRilGetPrioritySub: priority subscription is :: " + i);
      return i;
    }
    Log.e("QC_RIL_OEM_HOOK", "QCRIL get priority sub Command returned null response ");
    return 0;
  }

  public boolean qcRilGetTuneAway()
  {
    AsyncResult localAsyncResult = sendQcRilHookMsg(524294);
    if (localAsyncResult.exception != null)
    {
      Log.e("QC_RIL_OEM_HOOK", "QCRIL Get Tune Away Command returned Exception: " + localAsyncResult.exception);
      return false;
    }
    if (localAsyncResult.result != null)
    {
      int i = ByteBuffer.wrap((byte[])localAsyncResult.result).get();
      Log.v("QC_RIL_OEM_HOOK", "qcRilGetTuneAway: TuneAway flag is :: " + i);
      return i == 1;
    }
    Log.e("QC_RIL_OEM_HOOK", "QCRIL Get Tune Away Command returned null response ");
    return false;
  }

  public boolean qcRilGoDormant(String paramString)
  {
    AsyncResult localAsyncResult = sendQcRilHookMsg(524291, paramString);
    if (localAsyncResult.exception == null)
      return true;
    Log.w("QC_RIL_OEM_HOOK", "Go Dormant Command returned Exception: " + localAsyncResult.exception);
    return false;
  }

  public boolean qcRilInformShutDown()
  {
    AsyncResult localAsyncResult = sendQcRilHookMsg(524298);
    if (localAsyncResult.exception == null)
    {
      Log.d("QC_RIL_OEM_HOOK", "QCRIL Inform shutdown success");
      return true;
    }
    Log.e("QC_RIL_OEM_HOOK", "QCRIL Inform shutdown failed: " + localAsyncResult.exception);
    return false;
  }

  public boolean qcRilSetPrioritySub(int paramInt)
  {
    byte b = (byte)paramInt;
    Log.v("QC_RIL_OEM_HOOK", "qcRilSetPrioritySub: Outgoing priority subscription is:" + paramInt);
    AsyncResult localAsyncResult = sendQcRilHookMsg(524295, b);
    if (localAsyncResult.exception == null)
      return true;
    Log.e("QC_RIL_OEM_HOOK", "QCRIL set priority sub Command returned Exception: " + localAsyncResult.exception);
    return false;
  }

  public boolean qcRilSetTuneAway(boolean paramBoolean)
  {
    StringBuilder localStringBuilder = new StringBuilder().append("qcRilSetTuneAway: Outgoing TuneAway flag is ");
    int i;
    if (paramBoolean)
    {
      i = 1;
      Log.v("QC_RIL_OEM_HOOK", i);
      if (!paramBoolean)
        break label67;
    }
    AsyncResult localAsyncResult;
    label67: for (byte b = 1; ; b = 0)
    {
      localAsyncResult = sendQcRilHookMsg(524293, b);
      if (localAsyncResult.exception != null)
        break label73;
      return true;
      i = 0;
      break;
    }
    label73: Log.e("QC_RIL_OEM_HOOK", "QCRIL Set Tune Away Command returned Exception: " + localAsyncResult.exception);
    return false;
  }

  public void registerForExtendedDbmIntl(Handler paramHandler, int paramInt, Object paramObject)
  {
  }

  public void registerForFieldTestData(Handler paramHandler, int paramInt, Object paramObject)
  {
  }

  public AsyncResult sendQcRilHookMsg(int paramInt)
  {
    byte[] arrayOfByte = new byte[this.mHeaderSize];
    addQcRilHookHeader(createBufferWithNativeByteOrder(arrayOfByte), paramInt, 0);
    return sendRilOemHookMsg(paramInt, arrayOfByte);
  }

  public AsyncResult sendQcRilHookMsg(int paramInt, byte paramByte)
  {
    byte[] arrayOfByte = new byte[1 + this.mHeaderSize];
    ByteBuffer localByteBuffer = createBufferWithNativeByteOrder(arrayOfByte);
    addQcRilHookHeader(localByteBuffer, paramInt, 1);
    localByteBuffer.put(paramByte);
    return sendRilOemHookMsg(paramInt, arrayOfByte);
  }

  public AsyncResult sendQcRilHookMsg(int paramInt1, int paramInt2)
  {
    byte[] arrayOfByte = new byte[4 + this.mHeaderSize];
    ByteBuffer localByteBuffer = createBufferWithNativeByteOrder(arrayOfByte);
    addQcRilHookHeader(localByteBuffer, paramInt1, 4);
    localByteBuffer.putInt(paramInt2);
    return sendRilOemHookMsg(paramInt1, arrayOfByte);
  }

  public AsyncResult sendQcRilHookMsg(int paramInt, String paramString)
  {
    byte[] arrayOfByte = new byte[this.mHeaderSize + paramString.length()];
    ByteBuffer localByteBuffer = createBufferWithNativeByteOrder(arrayOfByte);
    addQcRilHookHeader(localByteBuffer, paramInt, paramString.length());
    localByteBuffer.put(paramString.getBytes());
    return sendRilOemHookMsg(paramInt, arrayOfByte);
  }

  public AsyncResult sendQcRilHookMsg(int paramInt, byte[] paramArrayOfByte)
  {
    byte[] arrayOfByte = new byte[this.mHeaderSize + paramArrayOfByte.length];
    ByteBuffer localByteBuffer = createBufferWithNativeByteOrder(arrayOfByte);
    addQcRilHookHeader(localByteBuffer, paramInt, paramArrayOfByte.length);
    localByteBuffer.put(paramArrayOfByte);
    return sendRilOemHookMsg(paramInt, arrayOfByte);
  }

  public void sendQcRilHookMsgAsync(int paramInt, byte[] paramArrayOfByte, OemHookCallback paramOemHookCallback)
  {
    int i = 0;
    if (paramArrayOfByte != null)
      i = paramArrayOfByte.length;
    byte[] arrayOfByte = new byte[i + this.mHeaderSize];
    ByteBuffer localByteBuffer = createBufferWithNativeByteOrder(arrayOfByte);
    addQcRilHookHeader(localByteBuffer, paramInt, i);
    if (paramArrayOfByte != null)
      localByteBuffer.put(paramArrayOfByte);
    sendRilOemHookMsgAsync(paramInt, arrayOfByte, paramOemHookCallback);
  }

  public void unregisterForExtendedDbmIntl(Handler paramHandler)
  {
  }

  public void unregisterForFieldTestData(Handler paramHandler)
  {
  }
}



Heres a link to what I found. Use it how you wish, Im going to keep digging and see what I find. Im going to try to use camera stuff from samsung d2lte, since it's using the same msm8960 we are... might work, who knows.... I forget how we got the camera to work on cm for zte warp... was so long ago...

https://www.dropbox.com/s/2hogdmmzkehwrci/qcrilhook.zip?dl=0



EDIT: Half hour later...

Well sh!#.... dug deeper, decompiled the framework, and found the camera shiz too....
Java:
package com.qualcomm.camera;

import android.hardware.Camera.Face;
import android.os.Bundle;
import android.os.SystemProperties;
import com.qualcomm.snapdragon.util.QCCapabilitiesInterface;
import java.util.ArrayList;

public class QCFace extends Camera.Face
  implements QCCapabilitiesInterface
{
  private static final String BUNDLE_KEY_BLINK_DETECTED = "blinkDetected";
  private static final String BUNDLE_KEY_FACE_PITCH_DEGREE = "facePitchDegree";
  private static final String BUNDLE_KEY_FACE_RECOGNIZED = "faceRecognized";
  private static final String BUNDLE_KEY_FACE_ROLL_DEGREE = "faceRollDegree";
  private static final String BUNDLE_KEY_FACE_YAW_DEGREE = "faceYawDegree";
  private static final String BUNDLE_KEY_GAZE_LEFT_RIGHT_DEGREE = "gazeLeftRightDegree";
  private static final String BUNDLE_KEY_GAZE_UP_DOWN_DEGREE = "gazeUpDownDegree";
  private static final String BUNDLE_KEY_LEFT_EYE_CLOSED_VALUE = "leftEyeClosedValue";
  private static final String BUNDLE_KEY_RIGHT_EYE_CLOSED_VALUE = "rightEyeClosedValue";
  private static final String BUNDLE_KEY_SMILE_SCORE = "smileScore";
  private static final String BUNDLE_KEY_SMILE_VALUE = "smileValue";
  private static final String STR_FACIAL_PROCESSING = "ro.qc.sdk.camera.facialproc";
  private static final String STR_FALSE = "false";
  private static final String STR_TRUE = "true";
  private int blinkDetected = 0;
  private int faceRecognized = 0;
  private int gazeAngle = 0;
  private int leftrightDir = 0;
  private int leftrightGaze = 0;
  private int leyeBlink = 0;
  private int reyeBlink = 0;
  private int rollDir = 0;
  private int smileDegree = 0;
  private int smileScore = 0;
  private int topbottomGaze = 0;
  private int updownDir = 0;

  public int getBlinkDetected()
  {
    return this.blinkDetected;
  }

  public Bundle getCapabilities()
  {
    boolean bool = SystemProperties.get("ro.qc.sdk.camera.facialproc").equalsIgnoreCase("true");
    ArrayList localArrayList = null;
    if (bool)
    {
      localArrayList = new ArrayList();
      localArrayList.add("getSmileDegree");
      localArrayList.add("getSmileScore");
      localArrayList.add("getBlinkDetected");
      localArrayList.add("getFaceRecognized");
      localArrayList.add("getGazeAngle");
      localArrayList.add("getUpDownDirection");
      localArrayList.add("getLeftRightDirection");
      localArrayList.add("getRollDirection");
      localArrayList.add("getLeftRightGazeDegree");
      localArrayList.add("getTopBottomGazeDegree");
      localArrayList.add("getLeftEyeBlinkDegree");
      localArrayList.add("getRightEyeBlinkDegree");
      localArrayList.add("getQCFaceInfo");
    }
    Bundle localBundle = new Bundle();
    localBundle.putStringArrayList("key_active_method_names", localArrayList);
    return localBundle;
  }

  public int getFaceRecognized()
  {
    return this.faceRecognized;
  }

  public int getGazeAngle()
  {
    return this.gazeAngle;
  }

  public int getLeftEyeBlinkDegree()
  {
    return this.leyeBlink;
  }

  public int getLeftRightDirection()
  {
    return this.leftrightDir;
  }

  public int getLeftRightGazeDegree()
  {
    return this.leftrightGaze;
  }

  public Bundle getQCFaceInfo()
  {
    Bundle localBundle = new Bundle();
    localBundle.putInt("smileValue", this.smileDegree);
    localBundle.putInt("leftEyeClosedValue", this.leyeBlink);
    localBundle.putInt("rightEyeClosedValue", this.reyeBlink);
    localBundle.putInt("facePitchDegree", this.updownDir);
    localBundle.putInt("faceYawDegree", this.leftrightDir);
    localBundle.putInt("faceRollDegree", this.rollDir);
    localBundle.putInt("gazeUpDownDegree", this.topbottomGaze);
    localBundle.putInt("gazeLeftRightDegree", this.leftrightGaze);
    localBundle.putInt("blinkDetected", this.blinkDetected);
    localBundle.putInt("smileScore", this.smileScore);
    localBundle.putInt("faceRecognized", this.faceRecognized);
    return localBundle;
  }

  public int getRightEyeBlinkDegree()
  {
    return this.reyeBlink;
  }

  public int getRollDirection()
  {
    return this.rollDir;
  }

  public int getSmileDegree()
  {
    return this.smileDegree;
  }

  public int getSmileScore()
  {
    return this.smileScore;
  }

  public int getTopBottomGazeDegree()
  {
    return this.topbottomGaze;
  }

  public int getUpDownDirection()
  {
    return this.updownDir;
  }
}
Java:
package com.qualcomm.camera;

import android.os.Bundle;
import com.qualcomm.snapdragon.util.QCCapabilitiesInterface;
import java.util.ArrayList;

public class QCParameters
  implements QCCapabilitiesInterface
{
  private static String KEY_FRAME_CAPTURE_KEYS = "key_frame_capture_keys";
  public static final String KEY_NUM_SNAPS_PER_SHUTTER = "num-snaps-per-shutter";
  public static final String KEY_ZSL_CAMERA_MODE = "camera-mode";
  public static final String KEY_ZSL_PREFERENCE_KEY = "pref_camera_zsl_key";

  public Bundle getCapabilities()
  {
    Bundle localBundle1 = new Bundle();
    ArrayList localArrayList = new ArrayList();
    localArrayList.add("KEY_ZSL_CAMERA_MODE");
    localArrayList.add("KEY_ZSL_PREFERENCE_KEY");
    localArrayList.add("KEY_NUM_SNAPS_PER_SHUTTER");
    localBundle1.putStringArrayList(KEY_FRAME_CAPTURE_KEYS, localArrayList);
    Bundle localBundle2 = new Bundle();
    localBundle2.putBundle("key_constant_field_values", localBundle1);
    return localBundle2;
  }
}

Bwahahaha, hit a gold mine in decompiling framework.jar... for example:

Java:
package android.telephony;

import android.content.res.Resources;
import android.util.SparseIntArray;
import com.android.internal.telephony.cdma.sms.UserData;
import com.android.internal.telephony.lgeAutoProfiling;
import java.util.HashMap;

public class SprintSegmentProcess
{
  public static final char SEG_DASH = '-';
  public static final char SEG_SPACE = ' ';
  private int EmailLen;
  public int codeUnitSize;
  private StringBuilder mSegmentedString = new StringBuilder();
  private final String[] mSmileyTexts;
  private HashMap<Integer, Integer> msegmentPosInfo;
  private int segInsertPos = 0;
  private int textLen;

  SprintSegmentProcess(int paramInt1, int paramInt2)
  {
    this.textLen = paramInt1;
    this.EmailLen = paramInt2;
    this.msegmentPosInfo = new HashMap();
    this.mSmileyTexts = Resources.getSystem().getStringArray(17235977);
  }

  private int checkBoundSmiley(int paramInt)
  {
    for (int i = -1 + this.mSmileyTexts.length; i >= 0; i--)
    {
      int j = this.mSmileyTexts[i].length();
      for (int k = 1; k < j; k++)
      {
        int m = paramInt - k;
        if ((this.mSegmentedString.length() >= m + j) && (this.mSegmentedString.subSequence(m, m + j).equals(this.mSmileyTexts[i])))
          return paramInt - k;
      }
    }
    return paramInt;
  }

  public static int countAsciiSeptets(CharSequence paramCharSequence)
  {
    int i = paramCharSequence.length();
    for (int j = 0; ; j++)
      if (j < i)
      {
        if (UserData.charToAscii.get(paramCharSequence.charAt(j), -1) == -1)
          i = -1;
      }
      else
        return i;
  }

  private boolean findSegmentIndPosition(int paramInt)
  {
    if (paramInt == 0)
    {
      this.segInsertPos = 0;
      this.msegmentPosInfo.put(Integer.valueOf(paramInt), Integer.valueOf(this.segInsertPos));
      return true;
    }
    int i = this.segInsertPos + getMaxCharacterSegment() - getMaxSegment();
    int j = this.segInsertPos;
    if (this.mSegmentedString.charAt(i) == ' ')
      this.segInsertPos = i;
    while (true)
    {
      this.msegmentPosInfo.put(Integer.valueOf(paramInt), Integer.valueOf(this.segInsertPos));
      if (this.textLen - this.segInsertPos > getMaxCharacterSegment())
        break;
      return false;
      for (int k = i - 1; ; k--)
      {
        if (k > j)
        {
          if (this.mSegmentedString.charAt(k) != ' ')
            continue;
          if (paramInt != 1)
            break label178;
          if (this.mSegmentedString.charAt(k - 1) != '-')
            break label172;
          k = j;
        }
        while (true)
        {
          if (k != j)
            break label190;
          this.segInsertPos = checkBoundSmiley(i);
          break;
          label172: k++;
          continue;
          label178: k++;
        }
      }
      label190: this.segInsertPos = k;
    }
  }

  private void removeSegmentInfoAll()
  {
    if (this.msegmentPosInfo == null)
      throw new NullPointerException();
    for (int i = -1 + this.msegmentPosInfo.size(); i >= 0; i--)
      this.msegmentPosInfo.remove(Integer.valueOf(i));
  }

  public int calcNeedTotalSegment(String paramString)
  {
    this.segInsertPos = 0;
    this.mSegmentedString.delete(0, this.mSegmentedString.length());
    this.mSegmentedString.append(paramString);
    for (int i = 0; ; i++)
    {
      if (i > -1 + getMaxSegment());
      while (!findSegmentIndPosition(i))
      {
        if (i != getMaxSegment())
          break;
        return i;
      }
    }
    return i + 1;
  }

  public int getMaxCharacterCountPaginationIndicator()
  {
    if (lgeAutoProfiling.isSupportFeature(null, "remove_pagination_indicator"))
      return 0;
    return 8;
  }

  public int getMaxCharacterSegment()
  {
    if (this.EmailLen > 0)
      return segmentLimitLen() - (1 + this.EmailLen);
    return segmentLimitLen();
  }

  public int getMaxSegment()
  {
    return 10;
  }

  public String makeSegmentString(int paramInt1, int paramInt2)
  {
    return "(" + String.valueOf(paramInt1) + "/" + String.valueOf(paramInt2) + ") ";
  }

  public int msegmentPosInfoGet(int paramInt)
  {
    return ((Integer)this.msegmentPosInfo.get(Integer.valueOf(paramInt))).intValue();
  }

  public int msegmentPosInfoSize()
  {
    return this.msegmentPosInfo.size();
  }

  public boolean needSprintSegmentProcess()
  {
    int i = segmentLimitLen();
    if (this.textLen == 0);
    while (true)
    {
      return false;
      int j = this.textLen;
      if (this.EmailLen > 0);
      for (int k = 1 + this.EmailLen; k + j > i; k = 0)
        return true;
    }
  }

  public int segmentLimitLen()
  {
    if (this.codeUnitSize == 1)
      return 160;
    return 70;
  }
}




BIGEDIT:

Framework2.jar is the one with the LG RIL information. This should help big time with the telephony issues we have been having. Might be able to implement in much the same way CM team did with samsung RIL and HTC RIL. Heres a snippet of what I found:

Java:
package com.android.internal.telephony;

import android.content.Context;
import android.os.Message;
import android.os.Parcel;
import android.os.SystemProperties;
import android.util.Log;

public final class LgeRIL extends RIL
{
  private static final boolean DBG = false;
  public static final boolean FEATURE_LGRIL_API = false;
  static final String LOG_TAG = "RILJLge";

  public LgeRIL(Context paramContext, int paramInt1, int paramInt2, String paramString)
  {
    super(paramContext, paramInt1, paramInt2, null, paramString);
  }

  private void dLogD(String paramString)
  {
    if (DBG == true)
      Log.d("LGSmartcard", "[RILJLge] " + paramString);
  }

  public static LgeRIL getLgeRIL(CommandsInterface paramCommandsInterface)
  {
    if ((paramCommandsInterface instanceof LgeRIL))
      return (LgeRIL)paramCommandsInterface;
    return null;
  }

  static String requestToStringEx(int paramInt)
  {
    switch (paramInt)
    {
    default:
      return null;
    case 356:
      return "SC_IS_AVAILABLE_SC_ON_SIM";
    case 351:
      return "RIL_REQUEST_SIM_APDU";
    case 352:
      return "RIL_REQUEST_SIM_OPEN_CHANNEL";
    case 353:
      return "RIL_REQUEST_SIM_CLOSE_CHANNEL";
    case 354:
      return "RIL_REQUEST_SIM_TRANSMIT_CHANNEL";
    case 355:
    }
    return "RIL_REQUEST_SIM_GET_ATR";
  }

  private Object responseLGSmartcardIccIo(Parcel paramParcel)
  {
    String[] arrayOfString = new String[3];
    int i = paramParcel.readInt();
    int j = paramParcel.readInt();
    String str = paramParcel.readString();
    dLogD("< responseLGSmartcardIccIo:  0x" + Integer.toHexString(i) + " 0x" + Integer.toHexString(j) + " " + str);
    arrayOfString[0] = Integer.toString(i);
    arrayOfString[1] = Integer.toString(j);
    arrayOfString[2] = str;
    return arrayOfString;
  }

  static String responseToStringEx(int paramInt)
  {
    return null;
  }

  protected boolean enableSmartcardLog(RILRequest paramRILRequest)
  {
    if ((paramRILRequest.mRequest < 351) || (paramRILRequest.mRequest > 352));
    while (DBG)
      return true;
    return false;
  }

  public void iccCloseChannel(int paramInt, Message paramMessage)
  {
    if (FEATURE_LGRIL_API == true)
    {
      lgeCloseLogicalChannel(paramInt, paramMessage);
      return;
    }
    RILRequest localRILRequest = RILRequest.obtain(353, paramMessage);
    localRILRequest.mp.writeInt(1);
    localRILRequest.mp.writeInt(paramInt);
    dLogD(localRILRequest.serialString() + "> iccCloseChannel: " + RIL.requestToString(localRILRequest.mRequest) + " " + paramInt);
    sendEx(localRILRequest);
  }

  public void iccExchangeAPDU(int paramInt1, int paramInt2, int paramInt3, int paramInt4, int paramInt5, int paramInt6, String paramString, Message paramMessage)
  {
    if (FEATURE_LGRIL_API == true)
    {
      if (paramInt3 == 0)
      {
        lgeSCTransmitBasic(paramInt1, paramInt2, paramInt4, paramInt5, paramInt6, paramString, paramMessage);
        return;
      }
      lgeSCTransmitChannel(paramInt1, paramInt2, paramInt3, paramInt4, paramInt5, paramInt6, paramString, paramMessage);
      return;
    }
    if (paramInt3 == 0);
    for (RILRequest localRILRequest = RILRequest.obtain(351, paramMessage); ; localRILRequest = RILRequest.obtain(354, paramMessage))
    {
      localRILRequest.mp.writeInt(paramInt1);
      localRILRequest.mp.writeInt(paramInt2);
      localRILRequest.mp.writeInt(paramInt3);
      localRILRequest.mp.writeString(null);
      localRILRequest.mp.writeInt(paramInt4);
      localRILRequest.mp.writeInt(paramInt5);
      localRILRequest.mp.writeInt(paramInt6);
      localRILRequest.mp.writeString(paramString);
      localRILRequest.mp.writeString(null);
      dLogD(localRILRequest.serialString() + "> iccExchangeAPDU: " + RIL.requestToString(localRILRequest.mRequest) + " 0x" + Integer.toHexString(paramInt1) + " 0x" + Integer.toHexString(paramInt2) + " 0x" + Integer.toHexString(paramInt3) + " " + paramInt4 + "," + paramInt5 + "," + paramInt6);
      sendEx(localRILRequest);
      return;
    }
  }

  public void iccGetATR(Message paramMessage)
  {
    if (FEATURE_LGRIL_API == true)
    {
      lgeSCGetATR(paramMessage);
      return;
    }
    RILRequest localRILRequest = RILRequest.obtain(355, paramMessage);
    localRILRequest.mp.writeInt(1);
    localRILRequest.mp.writeInt(0);
    dLogD(localRILRequest.serialString() + "> iccGetATR: " + RIL.requestToString(localRILRequest.mRequest));
    sendEx(localRILRequest);
  }

  public void iccOpenChannel(String paramString, Message paramMessage)
  {
    if (FEATURE_LGRIL_API == true)
    {
      lgeSCOpenLogicalChannel(paramString, paramMessage);
      return;
    }
    RILRequest localRILRequest = RILRequest.obtain(352, paramMessage);
    localRILRequest.mp.writeString(paramString);
    dLogD(localRILRequest.serialString() + "> iccOpenChannel: " + RIL.requestToString(localRILRequest.mRequest) + " " + paramString);
    sendEx(localRILRequest);
  }

  public void iccisAvailableSCOnSIM(Message paramMessage)
  {
    RILRequest localRILRequest = RILRequest.obtain(356, paramMessage);
    dLogD(localRILRequest.serialString() + "> iccisAvailableSCOnSIM: " + RIL.requestToString(localRILRequest.mRequest));
    sendEx(localRILRequest);
  }

  public void lgeCloseLogicalChannel(int paramInt, Message paramMessage)
  {
    RILRequest localRILRequest = RILRequest.obtain(353, paramMessage);
    if (DBG)
      riljLog(localRILRequest.serialString() + "> lgeCloseLogicalChannel: " + RIL.requestToString(localRILRequest.mRequest) + paramInt);
    localRILRequest.mp.writeInt(1);
    localRILRequest.mp.writeInt(paramInt);
    sendEx(localRILRequest);
  }

  public void lgeSCGetATR(Message paramMessage)
  {
    RILRequest localRILRequest = RILRequest.obtain(355, paramMessage);
    localRILRequest.mp.writeInt(1);
    localRILRequest.mp.writeInt(0);
    if (DBG)
      riljLog(localRILRequest.serialString() + "> lgeSCGetATR: " + requestToString(localRILRequest.mRequest));
    sendEx(localRILRequest);
  }

  public void lgeSCOpenLogicalChannel(String paramString, Message paramMessage)
  {
    RILRequest localRILRequest = RILRequest.obtain(352, paramMessage);
    localRILRequest.mp.writeInt(1);
    localRILRequest.mp.writeString(paramString);
    if (DBG)
      riljLog(localRILRequest.serialString() + "> lgeSCOpenLogicalChannel: " + RIL.requestToString(localRILRequest.mRequest) + paramString);
    sendEx(localRILRequest);
  }

  public void lgeSCTransmitBasic(int paramInt1, int paramInt2, int paramInt3, int paramInt4, int paramInt5, String paramString, Message paramMessage)
  {
    RILRequest localRILRequest = RILRequest.obtain(351, paramMessage);
    if (DBG)
      riljLog(localRILRequest.serialString() + "> lgeSCTransmitBasic: " + requestToString(localRILRequest.mRequest) + " 0x" + Integer.toHexString(paramInt1) + " 0x" + Integer.toHexString(paramInt2) + " " + paramInt3 + "," + paramInt4 + "," + paramInt5);
    localRILRequest.mp.writeInt(paramInt1);
    localRILRequest.mp.writeInt(paramInt2);
    localRILRequest.mp.writeInt(paramInt3);
    localRILRequest.mp.writeInt(paramInt4);
    localRILRequest.mp.writeInt(paramInt5);
    localRILRequest.mp.writeString(paramString);
    sendEx(localRILRequest);
  }

  public void lgeSCTransmitChannel(int paramInt1, int paramInt2, int paramInt3, int paramInt4, int paramInt5, int paramInt6, String paramString, Message paramMessage)
  {
    RILRequest localRILRequest = RILRequest.obtain(354, paramMessage);
    if (DBG)
      riljLog(localRILRequest.serialString() + "> lgeSCTransmitChannel: " + requestToString(localRILRequest.mRequest) + " 0x" + Integer.toHexString(paramInt1) + " 0x" + Integer.toHexString(paramInt2) + " 0x" + Integer.toHexString(paramInt3) + " " + paramInt4 + "," + paramInt5 + "," + paramInt6);
    localRILRequest.mp.writeInt(paramInt1);
    localRILRequest.mp.writeInt(paramInt2);
    localRILRequest.mp.writeInt(paramInt3);
    localRILRequest.mp.writeInt(paramInt4);
    localRILRequest.mp.writeInt(paramInt5);
    localRILRequest.mp.writeInt(paramInt6);
    localRILRequest.mp.writeString(paramString);
    sendEx(localRILRequest);
  }

  protected Object processSolicitedEx(RILRequest paramRILRequest, Parcel paramParcel)
  {
    switch (paramRILRequest.mRequest)
    {
    default:
      riljLog("calling processsolicited of RIL from LgeRIL");
      return super.processSolicitedEx(paramRILRequest, paramParcel);
    case 353:
      return responseVoidEx(paramParcel);
    case 352:
      return responseLGSmartcardResult(paramParcel);
    case 351:
      return responseLGSmartcardIccIo(paramParcel);
    case 354:
      return responseLGSmartcardIccIo(paramParcel);
    case 355:
      return responseStringEx(paramParcel);
    case 356:
    }
    return responseIntsEx(paramParcel);
  }

  protected void processUnsolicitedEx(Parcel paramParcel, int paramInt)
  {
    super.processUnsolicitedEx(paramParcel, paramInt);
  }

  public Object responseLGSmartcardResult(Parcel paramParcel)
  {
    String[] arrayOfString = new String[2];
    int i = paramParcel.readInt();
    arrayOfString[0] = Integer.toString(paramParcel.readInt());
    if (paramParcel.dataAvail() > 0);
    for (String str = paramParcel.readString(); ; str = null)
    {
      arrayOfString[1] = str;
      dLogD("responseLGSmartcardResult::Type(1-int[])(2-int,String)::" + i);
      dLogD("responseLGSmartcardResult::channel id::" + arrayOfString[0]);
      dLogD("responseLGSmartcardResult::response::" + arrayOfString[1]);
      return arrayOfString;
    }
  }
}

Java:
package com.android.internal.telephony;

public abstract interface LgeRILConstants
{
  public static final int INVALID_PARAMETER = 29;
  public static final int MISSING_RESOURCE = 27;
  public static final int NO_SUCH_ELEMENT = 28;
  public static final int RELB = 16;
  public static final int RIL_ERRNO_LGE_BASE = 16;
  public static final int RIL_ERRNO_SMARTCARD_BASE = 27;
  public static final int RIL_REQUEST_LGE_BASE = 109;
  public static final int RIL_REQUEST_LGE_CLOSE_LOGICAL_CHANNEL = 353;
  public static final int RIL_REQUEST_LGE_IS_AVAILABLE_SC_ON_SIM = 356;
  public static final int RIL_REQUEST_LGE_SC_SIM_GET_ATR = 355;
  public static final int RIL_REQUEST_LGE_SC_SIM_OPEN_LOGICAL_CHANNEL = 352;
  public static final int RIL_REQUEST_LGE_SC_SIM_TRANSMIT_BASIC = 351;
  public static final int RIL_REQUEST_LGE_SC_SIM_TRANSMIT_CHANNEL = 354;
  public static final int RIL_UNSOL_LGE_BASE = 1036;
  public static final int RRLB = 109;
  public static final int RULB = 1036;
}





Heres a link to my dropbox, has some other framework jars decompiled in there. All in java format, you can use eclipse ide to check em out, or just use gedit in linux:

https://www.dropbox.com/sh/1927yzqsh0lshh7/AABFS625Ir3_dySw9DEM0PE2a?dl=0


Hopefully this helps in getting cm off the ground....
 
Last edited:
  • Like
Reactions: chevanlol360
Upvote 0
Well lookie what I found while sifting through the stock rom... managed to decompile the qcrilhook.jar file... this might bring us a step closer to a good ril... theres alot more... qcrilhook.jar has 12 classes

Java:
package com.android.qualcomm.qcrilhook;

import android.content.Context;
import android.os.AsyncResult;
import android.os.Handler;
import android.os.Message;
import android.os.Registrant;
import android.os.RegistrantList;
import android.util.Log;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.HashMap;

public class EmbmsOemHook extends Handler
{
  private static final short EMBMSHOOK_MSG_ID_ACTIVATE = 2;
  private static final short EMBMSHOOK_MSG_ID_DEACTIVATE = 3;
  private static final short EMBMSHOOK_MSG_ID_DISABLE = 1;
  private static final short EMBMSHOOK_MSG_ID_ENABLE = 0;
  private static final short EMBMSHOOK_MSG_ID_GET_ACTIVE = 5;
  private static final short EMBMSHOOK_MSG_ID_GET_AVAILABLE = 4;
  private static final short EMBMSHOOK_MSG_ID_GET_COVERAGE = 8;
  private static final short EMBMSHOOK_MSG_ID_UNSOL_ACTIVE_TMGI_LIST = 12;
  private static final short EMBMSHOOK_MSG_ID_UNSOL_AVAILABLE_TMGI_LIST = 15;
  private static final short EMBMSHOOK_MSG_ID_UNSOL_COVERAGE_STATE = 13;
  private static final short EMBMSHOOK_MSG_ID_UNSOL_OOS_STATE = 16;
  private static final short EMBMSHOOK_MSG_ID_UNSOL_STATE_CHANGE = 11;
  private static final short EMBMS_SERVICE_ID = 2;
  private static final int FAILURE = -1;
  private static String LOG_TAG = "EmbmsOemHook";
  private static final int OEM_HOOK_RESPONSE = 1;
  private static final int SIZE_OF_TMGI = 6;
  private static final int SUCCESS = 0;
  private static final byte TLV_TYPE_ACTIVATE_REQ_ALL_SESSIONS = 3;
  private static final byte TLV_TYPE_ACTIVATE_REQ_CALL_ID = 4;
  private static final byte TLV_TYPE_ACTIVATE_REQ_SESSION_ID = 2;
  private static final byte TLV_TYPE_ACTIVATE_REQ_TMGI = 1;
  private static final byte TLV_TYPE_ACTIVATE_RESP_CALL_ID = 16;
  private static final byte TLV_TYPE_ACTIVATE_RESP_TMGI = 17;
  private static final byte TLV_TYPE_DEACTIVATE_REQ_CALL_ID = 1;
  private static final byte TLV_TYPE_DEACTIVATE_REQ_TMGI = 2;
  private static final byte TLV_TYPE_DEACTIVATE_RESP_CALL_ID = 16;
  private static final byte TLV_TYPE_DEACTIVATE_RESP_TMGI = 17;
  private static final byte TLV_TYPE_DISABLE_REQ_CALL_ID = 1;
  private static final byte TLV_TYPE_DISABLE_RESP_CALL_ID = 16;
  private static final byte TLV_TYPE_ENABLE_RESP_CALL_ID = 16;
  private static final byte TLV_TYPE_ENABLE_RESP_IFNAME = 17;
  private static final byte TLV_TYPE_ENABLE_RESP_IF_INDEX = 18;
  private static final byte TLV_TYPE_GET_ACTIVE_REQ_CALL_ID = 1;
  private static final byte TLV_TYPE_GET_ACTIVE_RESP_TMGI_ARRAY = 16;
  private static final byte TLV_TYPE_GET_AVAILABLE_REQ_CALL_ID = 1;
  private static final byte TLV_TYPE_GET_AVAILABLE_RESP_TMGI_ARRAY = 16;
  private static final byte TLV_TYPE_GET_COVERAGE_STATE_RESP_STATE = 16;
  private static final short TLV_TYPE_UNSOL_ACTIVE_IND_TMGI_ARRAY = 1;
  private static final short TLV_TYPE_UNSOL_AVAILABLE_IND_SESSION_ID_ARRAY = 2;
  private static final short TLV_TYPE_UNSOL_AVAILABLE_IND_TMGI_ARRAY = 1;
  private static final short TLV_TYPE_UNSOL_COVERAGE_IND_STATE = 1;
  private static final short TLV_TYPE_UNSOL_OOS_IND_STATE = 1;
  private static final short TLV_TYPE_UNSOL_OOS_IND_TMGI_ARRAY = 2;
  private static final short TLV_TYPE_UNSOL_STATE_IND_IF_INDEX = 3;
  private static final short TLV_TYPE_UNSOL_STATE_IND_IP_ADDRESS = 2;
  private static final short TLV_TYPE_UNSOL_STATE_IND_STATE = 1;
  public static final int UNSOL_TYPE_ACTIVE_TMGI_LIST = 2;
  public static final int UNSOL_TYPE_AVAILABLE_TMGI_LIST = 4;
  public static final int UNSOL_TYPE_BROADCAST_COVERAGE = 3;
  public static final int UNSOL_TYPE_OOS_STATE = 5;
  public static final int UNSOL_TYPE_STATE_CHANGE = 1;
  private static int mRefCount = 0;
  private static EmbmsOemHook sInstance;
  private QmiOemHook mQmiOemHook;
  private RegistrantList mRegistrants;

  private EmbmsOemHook(Context paramContext)
  {
    Log.v(LOG_TAG, "EmbmsOemHook ()");
    this.mQmiOemHook = QmiOemHook.getInstance(paramContext);
    this.mRegistrants = new RegistrantList();
  }

  private static String bytesToHexString(byte[] paramArrayOfByte)
  {
    if (paramArrayOfByte == null)
      return null;
    StringBuilder localStringBuilder = new StringBuilder(2 * paramArrayOfByte.length);
    for (int i = 0; i < paramArrayOfByte.length; i++)
    {
      localStringBuilder.append("0123456789abcdef".charAt(0xF & paramArrayOfByte[i] >> 4));
      localStringBuilder.append("0123456789abcdef".charAt(0xF & paramArrayOfByte[i]));
    }
    return localStringBuilder.toString();
  }

  public static EmbmsOemHook getInstance(Context paramContext)
  {
    try
    {
      if (sInstance == null)
      {
        sInstance = new EmbmsOemHook(paramContext);
        Log.d(LOG_TAG, "Singleton Instance of Embms created.");
        QmiOemHook.registerService((short)2, sInstance, 1);
      }
      mRefCount = 1 + mRefCount;
      EmbmsOemHook localEmbmsOemHook = sInstance;
      return localEmbmsOemHook;
    }
    finally
    {
    }
  }

  private void handleResponse(HashMap<Integer, Object> paramHashMap)
  {
    int i = ((Short)paramHashMap.get(Integer.valueOf(8))).shortValue();
    int j = ((Integer)paramHashMap.get(Integer.valueOf(2))).intValue();
    int k = ((Integer)paramHashMap.get(Integer.valueOf(3))).intValue();
    Message localMessage = (Message)paramHashMap.get(Integer.valueOf(4));
    ByteBuffer localByteBuffer = (ByteBuffer)paramHashMap.get(Integer.valueOf(6));
    Log.v(LOG_TAG, " responseSize=" + j + " successStatus=" + k);
    switch (i)
    {
    case 6:
    case 7:
    case 9:
    case 10:
    case 14:
    default:
      Log.e(LOG_TAG, "received unexpected msgId " + i);
      return;
    case 0:
      localMessage.obj = new EnableResponse(k, localByteBuffer);
      localMessage.sendToTarget();
      return;
    case 1:
      localMessage.obj = new DisableResponse(k, localByteBuffer);
      localMessage.sendToTarget();
      return;
    case 2:
    case 3:
      localMessage.obj = new TmgiResponse(k, localByteBuffer);
      localMessage.sendToTarget();
      return;
    case 11:
      notifyUnsol(1, new StateChangeInfo(localByteBuffer));
      return;
    case 4:
    case 15:
      if ((i == 4) && (k != 0))
      {
        Log.e(LOG_TAG, "Error received in EMBMSHOOK_MSG_ID_GET_AVAILABLE: " + k);
        return;
      }
      notifyUnsol(4, new TmgiListIndication(localByteBuffer));
      return;
    case 5:
    case 12:
      if ((i == 5) && (k != 0))
      {
        Log.e(LOG_TAG, "Error received in EMBMSHOOK_MSG_ID_GET_ACTIVE: " + k);
        return;
      }
      notifyUnsol(2, new TmgiListIndication(localByteBuffer));
      return;
    case 8:
    case 13:
      if ((i == 8) && (k != 0))
      {
        Log.e(LOG_TAG, "Error received in EMBMSHOOK_MSG_ID_GET_COVERAGE: " + k);
        return;
      }
      notifyUnsol(3, new CoverageState(localByteBuffer));
      return;
    case 16:
    }
    notifyUnsol(5, new OosState(localByteBuffer));
  }

  private void notifyUnsol(int paramInt, Object paramObject)
  {
    AsyncResult localAsyncResult = new AsyncResult(null, new UnsolObject(paramInt, paramObject), null);
    Log.i(LOG_TAG, "Notifying registrants type = " + paramInt);
    this.mRegistrants.notifyRegistrants(localAsyncResult);
  }

  private byte[] parseTmgi(ByteBuffer paramByteBuffer)
  {
    int i = 0;
    int j = paramByteBuffer.get();
    byte[] arrayOfByte = new byte[j * 6];
    int k = 0;
    while (k < j)
    {
      int m = paramByteBuffer.get();
      int n = 0;
      int i2;
      for (int i1 = i; n < m; i1 = i2)
      {
        i2 = i1 + 1;
        arrayOfByte[i1] = paramByteBuffer.get();
        n++;
      }
      k++;
      i = i1;
    }
    return arrayOfByte;
  }

  public int activateTmgi(byte[] paramArrayOfByte, byte paramByte1, byte paramByte2, boolean paramBoolean, String[] paramArrayOfString, int[] paramArrayOfInt, Message paramMessage)
  {
    TmgiActivateRequest localTmgiActivateRequest = new TmgiActivateRequest(paramArrayOfByte, paramByte1, paramByte2, paramBoolean);
    try
    {
      this.mQmiOemHook.sendQmiMessageAsync((short)2, (short)2, localTmgiActivateRequest.getTypes(), localTmgiActivateRequest.getItems(), paramMessage);
      return 0;
    }
    catch (IOException localIOException)
    {
      Log.e(LOG_TAG, "IOException occurred during activate !!!!!!");
    }
    return -1;
  }

  public int deactivateTmgi(byte[] paramArrayOfByte, byte paramByte, Message paramMessage)
  {
    TmgiDeActivateRequest localTmgiDeActivateRequest = new TmgiDeActivateRequest(paramArrayOfByte, paramByte);
    try
    {
      this.mQmiOemHook.sendQmiMessageAsync((short)2, (short)3, localTmgiDeActivateRequest.getTypes(), localTmgiDeActivateRequest.getItems(), paramMessage);
      return 0;
    }
    catch (IOException localIOException)
    {
      Log.e(LOG_TAG, "IOException occurred during deactivate !!!!!!");
    }
    return -1;
  }

  public int disable(byte paramByte, Message paramMessage)
  {
    GenericRequest localGenericRequest = new GenericRequest(paramByte);
    try
    {
      this.mQmiOemHook.sendQmiMessageAsync((short)2, (short)1, localGenericRequest.getTypes(), localGenericRequest.getItems(), paramMessage);
      return 0;
    }
    catch (IOException localIOException)
    {
      Log.e(LOG_TAG, "IOException occurred during disable !!!!!!");
    }
    return -1;
  }

  public void dispose()
  {
    try
    {
      int i = -1 + mRefCount;
      mRefCount = i;
      if (i == 0)
      {
        Log.d(LOG_TAG, "dispose(): Unregistering receiver");
        QmiOemHook.unregisterService(2);
        this.mQmiOemHook.dispose();
        sInstance = null;
      }
      while (true)
      {
        return;
        Log.v(LOG_TAG, "dispose mRefCount = " + mRefCount);
      }
    }
    finally
    {
    }
  }

  public int enable(Message paramMessage)
  {
    try
    {
      this.mQmiOemHook.sendQmiMessageAsync((short)2, (short)0, paramMessage);
      return 0;
    }
    catch (IOException localIOException)
    {
      Log.e(LOG_TAG, "IOException occurred during enable !!!!!!");
    }
    return -1;
  }

  public int getActiveTMGIList(byte paramByte)
  {
    GenericRequest localGenericRequest = new GenericRequest(paramByte);
    try
    {
      this.mQmiOemHook.sendQmiMessageAsync((short)2, (short)5, localGenericRequest.getTypes(), localGenericRequest.getItems(), null);
      return 0;
    }
    catch (IOException localIOException)
    {
      Log.e(LOG_TAG, "IOException occurred during getActiveTMGIList !!!!!!");
    }
    return -1;
  }

  public int getAvailableTMGIList(byte paramByte)
  {
    GenericRequest localGenericRequest = new GenericRequest(paramByte);
    try
    {
      this.mQmiOemHook.sendQmiMessageAsync((short)2, (short)4, localGenericRequest.getTypes(), localGenericRequest.getItems(), null);
      return 0;
    }
    catch (IOException localIOException)
    {
      Log.e(LOG_TAG, "IOException occurred during getAvailableTMGIList !!!!!!");
    }
    return -1;
  }

  public int getCoverageState()
  {
    try
    {
      this.mQmiOemHook.sendQmiMessageAsync((short)2, (short)8, null);
      return 0;
    }
    catch (IOException localIOException)
    {
      Log.e(LOG_TAG, "IOException occurred during getActiveTMGIList !!!!!!");
    }
    return -1;
  }

  public void handleMessage(Message paramMessage)
  {
    Log.i(LOG_TAG, "received message : " + paramMessage.what);
    switch (paramMessage.what)
    {
    default:
      Log.e(LOG_TAG, "Unexpected message received from QmiOemHook what = " + paramMessage.what);
      return;
    case 1:
    }
    HashMap localHashMap = (HashMap)((AsyncResult)paramMessage.obj).result;
    if (localHashMap == null)
    {
      Log.e(LOG_TAG, "Hashmap async userobj is NULL");
      return;
    }
    handleResponse(localHashMap);
  }

  public void registerForNotifications(Handler paramHandler, int paramInt, Object paramObject)
  {
    Registrant localRegistrant = new Registrant(paramHandler, paramInt, paramObject);
    synchronized (this.mRegistrants)
    {
      Log.i(LOG_TAG, "Adding a registrant");
      this.mRegistrants.add(localRegistrant);
      return;
    }
  }

  public void unregisterForNotifications(Handler paramHandler)
  {
    synchronized (this.mRegistrants)
    {
      Log.i(LOG_TAG, "Removing a registrant");
      this.mRegistrants.remove(paramHandler);
      return;
    }
  }

  public class CoverageState
  {
    public int state;
    public int status;

    public CoverageState(ByteBuffer arg2)
    {
      Object localObject;
      while (localObject.hasRemaining())
      {
        int i = PrimitiveParser.toUnsigned(localObject.get());
        PrimitiveParser.toUnsigned(localObject.getShort());
        switch (i)
        {
        default:
          Log.e(EmbmsOemHook.LOG_TAG, "CoverageState: Unexpected Type " + i);
          break;
        case 1:
        case 16:
          this.state = localObject.getInt();
          Log.i(EmbmsOemHook.LOG_TAG, "Coverage State = " + this.state);
        }
      }
    }
  }

  public class DisableResponse
  {
    public byte callId;
    public int error;

    public DisableResponse(int paramByteBuffer, ByteBuffer arg3)
    {
      if (paramByteBuffer != 0)
      {
        this.error = paramByteBuffer;
        this.callId = 0;
      }
      while (true)
      {
        return;
        Object localObject;
        this.callId = localObject.get();
        Log.i(EmbmsOemHook.LOG_TAG, "callid = " + this.callId);
        while (localObject.hasRemaining())
        {
          int i = PrimitiveParser.toUnsigned(localObject.get());
          PrimitiveParser.toUnsigned(localObject.getShort());
          switch (i)
          {
          case 16:
          }
          Log.e(EmbmsOemHook.LOG_TAG, "DisableResponse: Unexpected Type " + i);
        }
      }
    }
  }

  public class EnableResponse
  {
    public byte callId;
    public int error;
    public int ifIndex;
    public String interfaceName;

    public EnableResponse(int paramByteBuffer, ByteBuffer arg3)
    {
      if (paramByteBuffer != 0)
      {
        this.error = paramByteBuffer;
        this.callId = 0;
        this.interfaceName = null;
        this.ifIndex = 0;
      }
      while (true)
      {
        return;
        Object localObject;
        this.callId = localObject.get();
        Log.i(EmbmsOemHook.LOG_TAG, "callid = " + this.callId);
        while (localObject.hasRemaining())
        {
          int i = PrimitiveParser.toUnsigned(localObject.get());
          int j = PrimitiveParser.toUnsigned(localObject.getShort());
          switch (i)
          {
          case 16:
          default:
            Log.e(EmbmsOemHook.LOG_TAG, "EnableResponse: Unexpected Type " + i);
            break;
          case 17:
            byte[] arrayOfByte = new byte[j];
            for (int k = 0; k < j; k++)
              arrayOfByte[k] = localObject.get();
            this.interfaceName = new QmiPrimitiveTypes.QmiString(arrayOfByte).toStringValue();
            Log.i(EmbmsOemHook.LOG_TAG, "ifName = " + this.interfaceName);
            break;
          case 18:
            this.ifIndex = localObject.getInt();
            Log.i(EmbmsOemHook.LOG_TAG, "ifIndex = " + this.ifIndex);
          }
        }
      }
    }
  }

  public class GenericRequest extends BaseQmiTypes.BaseQmiStructType
  {
    public QmiPrimitiveTypes.QmiByte callId;

    public GenericRequest(byte arg2)
    {
      byte b;
      this.callId = new QmiPrimitiveTypes.QmiByte(b);
    }

    public BaseQmiTypes.BaseQmiItemType[] getItems()
    {
      BaseQmiTypes.BaseQmiItemType[] arrayOfBaseQmiItemType = new BaseQmiTypes.BaseQmiItemType[1];
      arrayOfBaseQmiItemType[0] = this.callId;
      return arrayOfBaseQmiItemType;
    }

    public short[] getTypes()
    {
      return new short[] { 1 };
    }
  }

  public class OosState
  {
    public byte[] list = null;
    public int state;

    public OosState(ByteBuffer arg2)
    {
      ByteBuffer localByteBuffer;
      while (localByteBuffer.hasRemaining())
      {
        int i = PrimitiveParser.toUnsigned(localByteBuffer.get());
        PrimitiveParser.toUnsigned(localByteBuffer.getShort());
        switch (i)
        {
        default:
          Log.e(EmbmsOemHook.LOG_TAG, "OosState: Unexpected Type " + i);
          break;
        case 1:
          this.state = localByteBuffer.getInt();
          Log.i(EmbmsOemHook.LOG_TAG, "OOs State = " + this.state);
          break;
        case 2:
          this.list = EmbmsOemHook.this.parseTmgi(localByteBuffer);
          Log.i(EmbmsOemHook.LOG_TAG, "tmgiArray = " + EmbmsOemHook.bytesToHexString(this.list));
        }
      }
    }
  }

  public class StateChangeInfo
  {
    public int ifIndex;
    public String ipAddress;
    public int state;

    public StateChangeInfo(int paramString, String paramInt1, int arg4)
    {
      this.state = paramString;
      this.ipAddress = paramInt1;
      int i;
      this.ifIndex = i;
    }

    public StateChangeInfo(ByteBuffer arg2)
    {
      Object localObject;
      while (localObject.hasRemaining())
      {
        int i = PrimitiveParser.toUnsigned(localObject.get());
        int j = PrimitiveParser.toUnsigned(localObject.getShort());
        switch (i)
        {
        default:
          Log.e(EmbmsOemHook.LOG_TAG, "StateChangeInfo: Unexpected Type " + i);
          break;
        case 1:
          this.state = localObject.getInt();
          Log.i(EmbmsOemHook.LOG_TAG, "State = " + this.state);
          break;
        case 2:
          byte[] arrayOfByte = new byte[j];
          for (int k = 0; k < j; k++)
            arrayOfByte[k] = localObject.get();
          this.ipAddress = new QmiPrimitiveTypes.QmiString(arrayOfByte).toString();
          Log.i(EmbmsOemHook.LOG_TAG, "ip Address = " + this.ipAddress);
          break;
        case 3:
          this.ifIndex = localObject.getInt();
          Log.i(EmbmsOemHook.LOG_TAG, "index = " + this.ifIndex);
        }
      }
    }
  }

  public class TmgiActivateRequest extends BaseQmiTypes.BaseQmiStructType
  {
    public QmiPrimitiveTypes.QmiByte allSessions;
    public QmiPrimitiveTypes.QmiByte callId;
    public QmiPrimitiveTypes.QmiByte sessionId;
    public QmiPrimitiveTypes.QmiArray<QmiPrimitiveTypes.QmiByte> tmgi;

    public TmgiActivateRequest(byte[] paramByte1, byte paramByte2, byte paramBoolean, boolean arg5)
    {
      QmiPrimitiveTypes.QmiByte[] arrayOfQmiByte = new QmiPrimitiveTypes.QmiByte[paramByte1.length];
      for (int j = 0; j < paramByte1.length; j++)
        arrayOfQmiByte[j] = new QmiPrimitiveTypes.QmiByte(paramByte1[j]);
      this.tmgi = new QmiPrimitiveTypes.QmiArray(arrayOfQmiByte, (short)6, QmiPrimitiveTypes.QmiByte.class);
      this.callId = new QmiPrimitiveTypes.QmiByte(paramByte2);
      this.sessionId = new QmiPrimitiveTypes.QmiByte(paramBoolean);
      byte b = 0;
      int i;
      if (i != 0)
        b = 1;
      this.allSessions = new QmiPrimitiveTypes.QmiByte(b);
    }

    public BaseQmiTypes.BaseQmiItemType[] getItems()
    {
      BaseQmiTypes.BaseQmiItemType[] arrayOfBaseQmiItemType = new BaseQmiTypes.BaseQmiItemType[4];
      arrayOfBaseQmiItemType[0] = this.tmgi;
      arrayOfBaseQmiItemType[1] = this.sessionId;
      arrayOfBaseQmiItemType[2] = this.allSessions;
      arrayOfBaseQmiItemType[3] = this.callId;
      return arrayOfBaseQmiItemType;
    }

    public short[] getTypes()
    {
      return new short[] { 1, 2, 3, 4 };
    }
  }

  public class TmgiDeActivateRequest extends BaseQmiTypes.BaseQmiStructType
  {
    public QmiPrimitiveTypes.QmiByte callId;
    public QmiPrimitiveTypes.QmiArray<QmiPrimitiveTypes.QmiByte> tmgi;

    public TmgiDeActivateRequest(byte[] paramByte, byte arg3)
    {
      QmiPrimitiveTypes.QmiByte[] arrayOfQmiByte = new QmiPrimitiveTypes.QmiByte[paramByte.length];
      for (int i = 0; i < paramByte.length; i++)
        arrayOfQmiByte[i] = new QmiPrimitiveTypes.QmiByte(paramByte[i]);
      this.tmgi = new QmiPrimitiveTypes.QmiArray(arrayOfQmiByte, (short)6, QmiPrimitiveTypes.QmiByte.class);
      byte b;
      this.callId = new QmiPrimitiveTypes.QmiByte(b);
    }

    public BaseQmiTypes.BaseQmiItemType[] getItems()
    {
      BaseQmiTypes.BaseQmiItemType[] arrayOfBaseQmiItemType = new BaseQmiTypes.BaseQmiItemType[2];
      arrayOfBaseQmiItemType[0] = this.tmgi;
      arrayOfBaseQmiItemType[1] = this.callId;
      return arrayOfBaseQmiItemType;
    }

    public short[] getTypes()
    {
      return new short[] { 2, 1 };
    }
  }

  public class TmgiListIndication
  {
    public byte[] list = null;
    public byte[] sessions = null;

    public TmgiListIndication(ByteBuffer arg2)
    {
      ByteBuffer localByteBuffer;
      while (localByteBuffer.hasRemaining())
      {
        int i = PrimitiveParser.toUnsigned(localByteBuffer.get());
        PrimitiveParser.toUnsigned(localByteBuffer.getShort());
        switch (i)
        {
        default:
          Log.e(EmbmsOemHook.LOG_TAG, "TmgiListIndication: Unexpected Type " + i);
          break;
        case 1:
        case 16:
          this.list = EmbmsOemHook.this.parseTmgi(localByteBuffer);
          Log.i(EmbmsOemHook.LOG_TAG, "tmgiArray = " + EmbmsOemHook.bytesToHexString(this.list));
          break;
        case 2:
          int j = 0;
          int k = localByteBuffer.get();
          byte[] arrayOfByte = new byte[k * 6];
          int m = 0;
          while (m < k)
          {
            int n = localByteBuffer.get();
            int i1 = 0;
            int i3;
            for (int i2 = j; i1 < n; i2 = i3)
            {
              i3 = i2 + 1;
              arrayOfByte[i2] = localByteBuffer.get();
              i1++;
            }
            m++;
            j = i2;
          }
          this.sessions = arrayOfByte;
          Log.i(EmbmsOemHook.LOG_TAG, "session array = " + EmbmsOemHook.bytesToHexString(this.sessions));
        }
      }
    }
  }

  public class TmgiResponse
  {
    public int status;
    public byte[] tmgi = null;

    public TmgiResponse(int paramByteBuffer, ByteBuffer arg3)
    {
      this.status = paramByteBuffer;
      Object localObject;
      while (localObject.hasRemaining())
      {
        int i = PrimitiveParser.toUnsigned(localObject.get());
        PrimitiveParser.toUnsigned(localObject.getShort());
        switch (i)
        {
        default:
          Log.e(EmbmsOemHook.LOG_TAG, "TmgiResponse: Unexpected Type " + i);
          break;
        case 17:
          int k = localObject.get();
          byte[] arrayOfByte = new byte[k];
          for (int m = 0; m < k; m++)
            arrayOfByte[m] = localObject.get();
          this.tmgi = arrayOfByte;
          Log.i(EmbmsOemHook.LOG_TAG, "tmgi = " + EmbmsOemHook.bytesToHexString(this.tmgi));
          break;
        case 16:
          int j = localObject.get();
          Log.i(EmbmsOemHook.LOG_TAG, "callid = " + j);
        }
      }
    }
  }

  public class UnsolObject
  {
    public Object obj;
    public int unsolId;

    public UnsolObject(int paramObject, Object arg3)
    {
      this.unsolId = paramObject;
      Object localObject;
      this.obj = localObject;
    }
  }
}

Java:
package com.android.qualcomm.qcrilhook;

import android.os.AsyncResult;
import android.os.Handler;

public abstract interface IQcRilHook
{
  public static final int QCRILHOOK_BASE = 524288;
  public static final int QCRILHOOK_DMS_GET_DEVICE_SERIAL_NUMBERS = 528394;
  public static final int QCRILHOOK_DMS_GET_FTM_MODE = 528391;
  public static final int QCRILHOOK_DMS_GET_SPC_CHANGE_ENABLED = 528395;
  public static final int QCRILHOOK_DMS_GET_SW_VERSION = 528392;
  public static final int QCRILHOOK_DMS_SET_SPC_CHANGE_ENABLED = 528396;
  public static final int QCRILHOOK_DMS_UPDATE_SERVICE_PROGRAMING_CODE = 528393;
  public static final int QCRILHOOK_GO_DORMANT = 524291;
  public static final int QCRILHOOK_ME_DEPERSONALIZATION = 524292;
  public static final int QCRILHOOK_NAS_GET_3GPP2_SUBSCRIPTION_INFO = 528385;
  public static final int QCRILHOOK_NAS_GET_MOB_CAI_REV = 528387;
  public static final int QCRILHOOK_NAS_GET_RTRE_CONFIG = 528389;
  public static final int QCRILHOOK_NAS_SET_3GPP2_SUBSCRIPTION_INFO = 528386;
  public static final int QCRILHOOK_NAS_SET_MOB_CAI_REV = 528388;
  public static final int QCRILHOOK_NAS_SET_RTRE_CONFIG = 528390;
  public static final int QCRILHOOK_NAS_UPDATE_AKEY = 528384;
  public static final int QCRILHOOK_NV_READ = 524289;
  public static final int QCRILHOOK_NV_WRITE = 524290;
  public static final int QCRILHOOK_QMI_OEMHOOK_REQUEST_ID = 524388;
  public static final int QCRILHOOK_UNSOL_CDMA_BURST_DTMF = 525289;
  public static final int QCRILHOOK_UNSOL_CDMA_CONT_DTMF_START = 525290;
  public static final int QCRILHOOK_UNSOL_CDMA_CONT_DTMF_STOP = 525291;
  public static final int QCRILHOOK_UNSOL_EXTENDED_DBM_INTL = 525288;
  public static final int QCRILHOOK_UNSOL_LOCAL_RINGBACK_START = 525292;
  public static final int QCRILHOOK_UNSOL_LOCAL_RINGBACK_STOP = 525293;
  public static final int QCRILHOOK_UNSOL_OEMHOOK = 525388;
  public static final int QCRILHOOK_VOICE_GET_CONFIG = 528398;
  public static final int QCRILHOOK_VOICE_SET_CONFIG = 528397;
  public static final int QCRIL_EVT_HOOK_GET_PAGING_PRIORITY = 524296;
  public static final int QCRIL_EVT_HOOK_GET_TUNEAWAY = 524294;
  public static final int QCRIL_EVT_HOOK_INFORM_SHUTDOWN = 524298;
  public static final int QCRIL_EVT_HOOK_SET_PAGING_PRIORITY = 524295;
  public static final int QCRIL_EVT_HOOK_SET_TUNEAWAY = 524293;
  public static final int SERVICE_PROGRAMMING_BASE = 4096;

  public abstract int qcRilGetPrioritySub();

  public abstract boolean qcRilGetTuneAway();

  public abstract boolean qcRilGoDormant(String paramString);

  public abstract boolean qcRilSetPrioritySub(int paramInt);

  public abstract boolean qcRilSetTuneAway(boolean paramBoolean);

  public abstract void registerForExtendedDbmIntl(Handler paramHandler, int paramInt, Object paramObject);

  public abstract void registerForFieldTestData(Handler paramHandler, int paramInt, Object paramObject);

  public abstract AsyncResult sendQcRilHookMsg(int paramInt);

  public abstract AsyncResult sendQcRilHookMsg(int paramInt, byte paramByte);

  public abstract AsyncResult sendQcRilHookMsg(int paramInt1, int paramInt2);

  public abstract AsyncResult sendQcRilHookMsg(int paramInt, String paramString);

  public abstract AsyncResult sendQcRilHookMsg(int paramInt, byte[] paramArrayOfByte);

  public abstract void unregisterForExtendedDbmIntl(Handler paramHandler);

  public abstract void unregisterForFieldTestData(Handler paramHandler);

  public static class QcRilExtendedDbmIntlKddiAocr
  {
    public byte chg_ind;
    public byte db_subtype;
    public short mcc;
    public byte sub_unit;
    public byte unit;
  }
}

Java:
package com.android.qualcomm.qcrilhook;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.AsyncResult;
import android.os.Handler;
import android.os.Registrant;
import android.os.RegistrantList;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.util.Log;
import com.android.internal.telephony.CommandException;
import com.android.internal.telephony.IOemHookCallback;
import com.android.internal.telephony.ITelephony;
import com.android.internal.telephony.ITelephony.Stub;
import com.android.internal.telephony.uicc.IccUtils;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;

public class QcRilHook
  implements IQcRilHook
{
  private static final int BYTE_SIZE = 1;
  private static final int INT_SIZE = 4;
  private static final String LOG_TAG = "QC_RIL_OEM_HOOK";
  private static final int RESPONSE_BUFFER_SIZE = 2048;
  private static RegistrantList mRegistrants;
  private Context mContext;
  private final int mHeaderSize = 8 + "QUALCOMM".length();
  private BroadcastReceiver mIntentReceiver = new BroadcastReceiver()
  {
    public void onReceive(Context paramAnonymousContext, Intent paramAnonymousIntent)
    {
      String str1 = paramAnonymousIntent.getAction();
      if (str1.equals("android.intent.action.ACTION_UNSOL_RESPONSE_OEM_HOOK_RAW"))
      {
        Log.d("QC_RIL_OEM_HOOK", "Received Broadcast Intent ACTION_UNSOL_RESPONSE_OEM_HOOK_RAW");
        byte[] arrayOfByte1 = paramAnonymousIntent.getByteArrayExtra("payload");
        if (arrayOfByte1 != null)
        {
          if (arrayOfByte1.length >= QcRilHook.this.mHeaderSize)
            break label104;
          Log.e("QC_RIL_OEM_HOOK", "UNSOL_RESPONSE_OEM_HOOK_RAW incomplete header");
          Log.e("QC_RIL_OEM_HOOK", "Expected " + QcRilHook.this.mHeaderSize + " bytes. Received " + arrayOfByte1.length + " bytes.");
        }
        label104: ByteBuffer localByteBuffer;
        int i;
        do
        {
          return;
          localByteBuffer = QcRilHook.createBufferWithNativeByteOrder(arrayOfByte1);
          byte[] arrayOfByte2 = new byte["QUALCOMM".length()];
          localByteBuffer.get(arrayOfByte2);
          String str2 = new String(arrayOfByte2);
          Log.d("QC_RIL_OEM_HOOK", "Oem ID in QCRILHOOK UNSOL RESP is " + str2);
          if (!str2.equals("QUALCOMM"))
          {
            Log.w("QC_RIL_OEM_HOOK", "Incorrect Oem ID in QCRILHOOK UNSOL RESP. Expected QUALCOMM. Received " + str2);
            return;
          }
          i = arrayOfByte1.length - "QUALCOMM".length();
        }
        while (i <= 0);
        byte[] arrayOfByte3 = new byte[i];
        localByteBuffer.get(arrayOfByte3);
        QcRilHook.notifyRegistrants(new AsyncResult(null, arrayOfByte3, null));
        return;
      }
      Log.w("QC_RIL_OEM_HOOK", "Received Unknown Intent: action = " + str1);
    }
  };
  private final String mOemIdentifier = "QUALCOMM";
  private ITelephony mPhoneService = ITelephony.Stub.asInterface(ServiceManager.getService("phone"));

  public QcRilHook()
  {
    mRegistrants = new RegistrantList();
    if (this.mPhoneService == null)
    {
      Log.e("QC_RIL_OEM_HOOK", "QcRilOemHook Service Failed");
      return;
    }
    Log.i("QC_RIL_OEM_HOOK", "QcRilOemHook Service Created Successfully");
  }

  public QcRilHook(Context paramContext)
  {
    this();
    this.mContext = paramContext;
    IntentFilter localIntentFilter = new IntentFilter();
    localIntentFilter.addAction("android.intent.action.ACTION_UNSOL_RESPONSE_OEM_HOOK_RAW");
    paramContext.registerReceiver(this.mIntentReceiver, localIntentFilter);
    Log.d("QC_RIL_OEM_HOOK", "Registering for intent ACTION_UNSOL_RESPONSE_OEM_HOOK_RAW");
  }

  private void addQcRilHookHeader(ByteBuffer paramByteBuffer, int paramInt1, int paramInt2)
  {
    paramByteBuffer.put("QUALCOMM".getBytes());
    paramByteBuffer.putInt(paramInt1);
    paramByteBuffer.putInt(paramInt2);
  }

  public static ByteBuffer createBufferWithNativeByteOrder(byte[] paramArrayOfByte)
  {
    ByteBuffer localByteBuffer = ByteBuffer.wrap(paramArrayOfByte);
    localByteBuffer.order(ByteOrder.nativeOrder());
    return localByteBuffer;
  }

  public static void notifyRegistrants(AsyncResult paramAsyncResult)
  {
    if (mRegistrants != null)
    {
      mRegistrants.notifyRegistrants(paramAsyncResult);
      return;
    }
    Log.e("QC_RIL_OEM_HOOK", "QcRilOemHook notifyRegistrants Failed");
  }

  public static void register(Handler paramHandler, int paramInt, Object paramObject)
  {
    Registrant localRegistrant = new Registrant(paramHandler, paramInt, paramObject);
    synchronized (mRegistrants)
    {
      mRegistrants.add(localRegistrant);
      return;
    }
  }

  private AsyncResult sendRilOemHookMsg(int paramInt, byte[] paramArrayOfByte)
  {
    byte[] arrayOfByte1 = new byte[2048];
    Log.v("QC_RIL_OEM_HOOK", "sendQcRilOemHookMsg: Outgoing Data is " + IccUtils.bytesToHexString(paramArrayOfByte));
    try
    {
      int i = this.mPhoneService.sendOemRilRequestRaw(paramArrayOfByte, arrayOfByte1);
      if (i >= 0)
      {
        byte[] arrayOfByte2 = null;
        if (i > 0)
        {
          arrayOfByte2 = new byte[i];
          System.arraycopy(arrayOfByte1, 0, arrayOfByte2, 0, i);
        }
        return new AsyncResult(Integer.valueOf(i), arrayOfByte2, null);
      }
      AsyncResult localAsyncResult = new AsyncResult(paramArrayOfByte, null, CommandException.fromRilErrno(i * -1));
      return localAsyncResult;
    }
    catch (RemoteException localRemoteException)
    {
      Log.w("QC_RIL_OEM_HOOK", "sendQcRilOemHook RequestID = " + paramInt + " exception, unable to send RIL request from this application", localRemoteException);
      return new AsyncResult(Integer.valueOf(paramInt), null, localRemoteException);
    }
  }

  private void sendRilOemHookMsgAsync(int paramInt, byte[] paramArrayOfByte, IOemHookCallback paramIOemHookCallback)
  {
    Log.v("QC_RIL_OEM_HOOK", "sendQcRilOemHookMsgAsync: Outgoing Data is " + IccUtils.bytesToHexString(paramArrayOfByte));
    try
    {
      this.mPhoneService.sendOemRilRequestRawAsync(paramArrayOfByte, paramIOemHookCallback);
      return;
    }
    catch (RemoteException localRemoteException)
    {
      Log.w("QC_RIL_OEM_HOOK", "sendQcRilOemHookAsync RequestID = " + paramInt + " exception, unable to send RIL request from this application", localRemoteException);
    }
  }

  public static void unregister(Handler paramHandler)
  {
    synchronized (mRegistrants)
    {
      mRegistrants.remove(paramHandler);
      return;
    }
  }

  protected void dispose()
  {
    if (this.mContext != null)
    {
      Log.v("QC_RIL_OEM_HOOK", "dispose(): Unregistering receiver");
      this.mContext.unregisterReceiver(this.mIntentReceiver);
    }
  }

  protected void finalize()
  {
    Log.v("QC_RIL_OEM_HOOK", "is destroyed");
  }

  public int qcRilGetPrioritySub()
  {
    AsyncResult localAsyncResult = sendQcRilHookMsg(524296);
    if (localAsyncResult.exception != null)
    {
      Log.e("QC_RIL_OEM_HOOK", "QCRIL  get priority sub Command returned Exception: " + localAsyncResult.exception);
      return 0;
    }
    if (localAsyncResult.result != null)
    {
      int i = ByteBuffer.wrap((byte[])localAsyncResult.result).get();
      Log.v("QC_RIL_OEM_HOOK", "qcRilGetPrioritySub: priority subscription is :: " + i);
      return i;
    }
    Log.e("QC_RIL_OEM_HOOK", "QCRIL get priority sub Command returned null response ");
    return 0;
  }

  public boolean qcRilGetTuneAway()
  {
    AsyncResult localAsyncResult = sendQcRilHookMsg(524294);
    if (localAsyncResult.exception != null)
    {
      Log.e("QC_RIL_OEM_HOOK", "QCRIL Get Tune Away Command returned Exception: " + localAsyncResult.exception);
      return false;
    }
    if (localAsyncResult.result != null)
    {
      int i = ByteBuffer.wrap((byte[])localAsyncResult.result).get();
      Log.v("QC_RIL_OEM_HOOK", "qcRilGetTuneAway: TuneAway flag is :: " + i);
      return i == 1;
    }
    Log.e("QC_RIL_OEM_HOOK", "QCRIL Get Tune Away Command returned null response ");
    return false;
  }

  public boolean qcRilGoDormant(String paramString)
  {
    AsyncResult localAsyncResult = sendQcRilHookMsg(524291, paramString);
    if (localAsyncResult.exception == null)
      return true;
    Log.w("QC_RIL_OEM_HOOK", "Go Dormant Command returned Exception: " + localAsyncResult.exception);
    return false;
  }

  public boolean qcRilInformShutDown()
  {
    AsyncResult localAsyncResult = sendQcRilHookMsg(524298);
    if (localAsyncResult.exception == null)
    {
      Log.d("QC_RIL_OEM_HOOK", "QCRIL Inform shutdown success");
      return true;
    }
    Log.e("QC_RIL_OEM_HOOK", "QCRIL Inform shutdown failed: " + localAsyncResult.exception);
    return false;
  }

  public boolean qcRilSetPrioritySub(int paramInt)
  {
    byte b = (byte)paramInt;
    Log.v("QC_RIL_OEM_HOOK", "qcRilSetPrioritySub: Outgoing priority subscription is:" + paramInt);
    AsyncResult localAsyncResult = sendQcRilHookMsg(524295, b);
    if (localAsyncResult.exception == null)
      return true;
    Log.e("QC_RIL_OEM_HOOK", "QCRIL set priority sub Command returned Exception: " + localAsyncResult.exception);
    return false;
  }

  public boolean qcRilSetTuneAway(boolean paramBoolean)
  {
    StringBuilder localStringBuilder = new StringBuilder().append("qcRilSetTuneAway: Outgoing TuneAway flag is ");
    int i;
    if (paramBoolean)
    {
      i = 1;
      Log.v("QC_RIL_OEM_HOOK", i);
      if (!paramBoolean)
        break label67;
    }
    AsyncResult localAsyncResult;
    label67: for (byte b = 1; ; b = 0)
    {
      localAsyncResult = sendQcRilHookMsg(524293, b);
      if (localAsyncResult.exception != null)
        break label73;
      return true;
      i = 0;
      break;
    }
    label73: Log.e("QC_RIL_OEM_HOOK", "QCRIL Set Tune Away Command returned Exception: " + localAsyncResult.exception);
    return false;
  }

  public void registerForExtendedDbmIntl(Handler paramHandler, int paramInt, Object paramObject)
  {
  }

  public void registerForFieldTestData(Handler paramHandler, int paramInt, Object paramObject)
  {
  }

  public AsyncResult sendQcRilHookMsg(int paramInt)
  {
    byte[] arrayOfByte = new byte[this.mHeaderSize];
    addQcRilHookHeader(createBufferWithNativeByteOrder(arrayOfByte), paramInt, 0);
    return sendRilOemHookMsg(paramInt, arrayOfByte);
  }

  public AsyncResult sendQcRilHookMsg(int paramInt, byte paramByte)
  {
    byte[] arrayOfByte = new byte[1 + this.mHeaderSize];
    ByteBuffer localByteBuffer = createBufferWithNativeByteOrder(arrayOfByte);
    addQcRilHookHeader(localByteBuffer, paramInt, 1);
    localByteBuffer.put(paramByte);
    return sendRilOemHookMsg(paramInt, arrayOfByte);
  }

  public AsyncResult sendQcRilHookMsg(int paramInt1, int paramInt2)
  {
    byte[] arrayOfByte = new byte[4 + this.mHeaderSize];
    ByteBuffer localByteBuffer = createBufferWithNativeByteOrder(arrayOfByte);
    addQcRilHookHeader(localByteBuffer, paramInt1, 4);
    localByteBuffer.putInt(paramInt2);
    return sendRilOemHookMsg(paramInt1, arrayOfByte);
  }

  public AsyncResult sendQcRilHookMsg(int paramInt, String paramString)
  {
    byte[] arrayOfByte = new byte[this.mHeaderSize + paramString.length()];
    ByteBuffer localByteBuffer = createBufferWithNativeByteOrder(arrayOfByte);
    addQcRilHookHeader(localByteBuffer, paramInt, paramString.length());
    localByteBuffer.put(paramString.getBytes());
    return sendRilOemHookMsg(paramInt, arrayOfByte);
  }

  public AsyncResult sendQcRilHookMsg(int paramInt, byte[] paramArrayOfByte)
  {
    byte[] arrayOfByte = new byte[this.mHeaderSize + paramArrayOfByte.length];
    ByteBuffer localByteBuffer = createBufferWithNativeByteOrder(arrayOfByte);
    addQcRilHookHeader(localByteBuffer, paramInt, paramArrayOfByte.length);
    localByteBuffer.put(paramArrayOfByte);
    return sendRilOemHookMsg(paramInt, arrayOfByte);
  }

  public void sendQcRilHookMsgAsync(int paramInt, byte[] paramArrayOfByte, OemHookCallback paramOemHookCallback)
  {
    int i = 0;
    if (paramArrayOfByte != null)
      i = paramArrayOfByte.length;
    byte[] arrayOfByte = new byte[i + this.mHeaderSize];
    ByteBuffer localByteBuffer = createBufferWithNativeByteOrder(arrayOfByte);
    addQcRilHookHeader(localByteBuffer, paramInt, i);
    if (paramArrayOfByte != null)
      localByteBuffer.put(paramArrayOfByte);
    sendRilOemHookMsgAsync(paramInt, arrayOfByte, paramOemHookCallback);
  }

  public void unregisterForExtendedDbmIntl(Handler paramHandler)
  {
  }

  public void unregisterForFieldTestData(Handler paramHandler)
  {
  }
}



Heres a link to what I found. Use it how you wish, Im going to keep digging and see what I find. Im going to try to use camera stuff from samsung d2lte, since it's using the same msm8960 we are... might work, who knows.... I forget how we got the camera to work on cm for zte warp... was so long ago...

https://www.dropbox.com/s/2hogdmmzkehwrci/qcrilhook.zip?dl=0



EDIT: Half hour later...

Well sh!#.... dug deeper, decompiled the framework, and found the camera shiz too....
Java:
package com.qualcomm.camera;

import android.hardware.Camera.Face;
import android.os.Bundle;
import android.os.SystemProperties;
import com.qualcomm.snapdragon.util.QCCapabilitiesInterface;
import java.util.ArrayList;

public class QCFace extends Camera.Face
  implements QCCapabilitiesInterface
{
  private static final String BUNDLE_KEY_BLINK_DETECTED = "blinkDetected";
  private static final String BUNDLE_KEY_FACE_PITCH_DEGREE = "facePitchDegree";
  private static final String BUNDLE_KEY_FACE_RECOGNIZED = "faceRecognized";
  private static final String BUNDLE_KEY_FACE_ROLL_DEGREE = "faceRollDegree";
  private static final String BUNDLE_KEY_FACE_YAW_DEGREE = "faceYawDegree";
  private static final String BUNDLE_KEY_GAZE_LEFT_RIGHT_DEGREE = "gazeLeftRightDegree";
  private static final String BUNDLE_KEY_GAZE_UP_DOWN_DEGREE = "gazeUpDownDegree";
  private static final String BUNDLE_KEY_LEFT_EYE_CLOSED_VALUE = "leftEyeClosedValue";
  private static final String BUNDLE_KEY_RIGHT_EYE_CLOSED_VALUE = "rightEyeClosedValue";
  private static final String BUNDLE_KEY_SMILE_SCORE = "smileScore";
  private static final String BUNDLE_KEY_SMILE_VALUE = "smileValue";
  private static final String STR_FACIAL_PROCESSING = "ro.qc.sdk.camera.facialproc";
  private static final String STR_FALSE = "false";
  private static final String STR_TRUE = "true";
  private int blinkDetected = 0;
  private int faceRecognized = 0;
  private int gazeAngle = 0;
  private int leftrightDir = 0;
  private int leftrightGaze = 0;
  private int leyeBlink = 0;
  private int reyeBlink = 0;
  private int rollDir = 0;
  private int smileDegree = 0;
  private int smileScore = 0;
  private int topbottomGaze = 0;
  private int updownDir = 0;

  public int getBlinkDetected()
  {
    return this.blinkDetected;
  }

  public Bundle getCapabilities()
  {
    boolean bool = SystemProperties.get("ro.qc.sdk.camera.facialproc").equalsIgnoreCase("true");
    ArrayList localArrayList = null;
    if (bool)
    {
      localArrayList = new ArrayList();
      localArrayList.add("getSmileDegree");
      localArrayList.add("getSmileScore");
      localArrayList.add("getBlinkDetected");
      localArrayList.add("getFaceRecognized");
      localArrayList.add("getGazeAngle");
      localArrayList.add("getUpDownDirection");
      localArrayList.add("getLeftRightDirection");
      localArrayList.add("getRollDirection");
      localArrayList.add("getLeftRightGazeDegree");
      localArrayList.add("getTopBottomGazeDegree");
      localArrayList.add("getLeftEyeBlinkDegree");
      localArrayList.add("getRightEyeBlinkDegree");
      localArrayList.add("getQCFaceInfo");
    }
    Bundle localBundle = new Bundle();
    localBundle.putStringArrayList("key_active_method_names", localArrayList);
    return localBundle;
  }

  public int getFaceRecognized()
  {
    return this.faceRecognized;
  }

  public int getGazeAngle()
  {
    return this.gazeAngle;
  }

  public int getLeftEyeBlinkDegree()
  {
    return this.leyeBlink;
  }

  public int getLeftRightDirection()
  {
    return this.leftrightDir;
  }

  public int getLeftRightGazeDegree()
  {
    return this.leftrightGaze;
  }

  public Bundle getQCFaceInfo()
  {
    Bundle localBundle = new Bundle();
    localBundle.putInt("smileValue", this.smileDegree);
    localBundle.putInt("leftEyeClosedValue", this.leyeBlink);
    localBundle.putInt("rightEyeClosedValue", this.reyeBlink);
    localBundle.putInt("facePitchDegree", this.updownDir);
    localBundle.putInt("faceYawDegree", this.leftrightDir);
    localBundle.putInt("faceRollDegree", this.rollDir);
    localBundle.putInt("gazeUpDownDegree", this.topbottomGaze);
    localBundle.putInt("gazeLeftRightDegree", this.leftrightGaze);
    localBundle.putInt("blinkDetected", this.blinkDetected);
    localBundle.putInt("smileScore", this.smileScore);
    localBundle.putInt("faceRecognized", this.faceRecognized);
    return localBundle;
  }

  public int getRightEyeBlinkDegree()
  {
    return this.reyeBlink;
  }

  public int getRollDirection()
  {
    return this.rollDir;
  }

  public int getSmileDegree()
  {
    return this.smileDegree;
  }

  public int getSmileScore()
  {
    return this.smileScore;
  }

  public int getTopBottomGazeDegree()
  {
    return this.topbottomGaze;
  }

  public int getUpDownDirection()
  {
    return this.updownDir;
  }
}
Java:
package com.qualcomm.camera;

import android.os.Bundle;
import com.qualcomm.snapdragon.util.QCCapabilitiesInterface;
import java.util.ArrayList;

public class QCParameters
  implements QCCapabilitiesInterface
{
  private static String KEY_FRAME_CAPTURE_KEYS = "key_frame_capture_keys";
  public static final String KEY_NUM_SNAPS_PER_SHUTTER = "num-snaps-per-shutter";
  public static final String KEY_ZSL_CAMERA_MODE = "camera-mode";
  public static final String KEY_ZSL_PREFERENCE_KEY = "pref_camera_zsl_key";

  public Bundle getCapabilities()
  {
    Bundle localBundle1 = new Bundle();
    ArrayList localArrayList = new ArrayList();
    localArrayList.add("KEY_ZSL_CAMERA_MODE");
    localArrayList.add("KEY_ZSL_PREFERENCE_KEY");
    localArrayList.add("KEY_NUM_SNAPS_PER_SHUTTER");
    localBundle1.putStringArrayList(KEY_FRAME_CAPTURE_KEYS, localArrayList);
    Bundle localBundle2 = new Bundle();
    localBundle2.putBundle("key_constant_field_values", localBundle1);
    return localBundle2;
  }
}

Bwahahaha, hit a gold mine in decompiling framework.jar... for example:

Java:
package android.telephony;

import android.content.res.Resources;
import android.util.SparseIntArray;
import com.android.internal.telephony.cdma.sms.UserData;
import com.android.internal.telephony.lgeAutoProfiling;
import java.util.HashMap;

public class SprintSegmentProcess
{
  public static final char SEG_DASH = '-';
  public static final char SEG_SPACE = ' ';
  private int EmailLen;
  public int codeUnitSize;
  private StringBuilder mSegmentedString = new StringBuilder();
  private final String[] mSmileyTexts;
  private HashMap<Integer, Integer> msegmentPosInfo;
  private int segInsertPos = 0;
  private int textLen;

  SprintSegmentProcess(int paramInt1, int paramInt2)
  {
    this.textLen = paramInt1;
    this.EmailLen = paramInt2;
    this.msegmentPosInfo = new HashMap();
    this.mSmileyTexts = Resources.getSystem().getStringArray(17235977);
  }

  private int checkBoundSmiley(int paramInt)
  {
    for (int i = -1 + this.mSmileyTexts.length; i >= 0; i--)
    {
      int j = this.mSmileyTexts[i].length();
      for (int k = 1; k < j; k++)
      {
        int m = paramInt - k;
        if ((this.mSegmentedString.length() >= m + j) && (this.mSegmentedString.subSequence(m, m + j).equals(this.mSmileyTexts[i])))
          return paramInt - k;
      }
    }
    return paramInt;
  }

  public static int countAsciiSeptets(CharSequence paramCharSequence)
  {
    int i = paramCharSequence.length();
    for (int j = 0; ; j++)
      if (j < i)
      {
        if (UserData.charToAscii.get(paramCharSequence.charAt(j), -1) == -1)
          i = -1;
      }
      else
        return i;
  }

  private boolean findSegmentIndPosition(int paramInt)
  {
    if (paramInt == 0)
    {
      this.segInsertPos = 0;
      this.msegmentPosInfo.put(Integer.valueOf(paramInt), Integer.valueOf(this.segInsertPos));
      return true;
    }
    int i = this.segInsertPos + getMaxCharacterSegment() - getMaxSegment();
    int j = this.segInsertPos;
    if (this.mSegmentedString.charAt(i) == ' ')
      this.segInsertPos = i;
    while (true)
    {
      this.msegmentPosInfo.put(Integer.valueOf(paramInt), Integer.valueOf(this.segInsertPos));
      if (this.textLen - this.segInsertPos > getMaxCharacterSegment())
        break;
      return false;
      for (int k = i - 1; ; k--)
      {
        if (k > j)
        {
          if (this.mSegmentedString.charAt(k) != ' ')
            continue;
          if (paramInt != 1)
            break label178;
          if (this.mSegmentedString.charAt(k - 1) != '-')
            break label172;
          k = j;
        }
        while (true)
        {
          if (k != j)
            break label190;
          this.segInsertPos = checkBoundSmiley(i);
          break;
          label172: k++;
          continue;
          label178: k++;
        }
      }
      label190: this.segInsertPos = k;
    }
  }

  private void removeSegmentInfoAll()
  {
    if (this.msegmentPosInfo == null)
      throw new NullPointerException();
    for (int i = -1 + this.msegmentPosInfo.size(); i >= 0; i--)
      this.msegmentPosInfo.remove(Integer.valueOf(i));
  }

  public int calcNeedTotalSegment(String paramString)
  {
    this.segInsertPos = 0;
    this.mSegmentedString.delete(0, this.mSegmentedString.length());
    this.mSegmentedString.append(paramString);
    for (int i = 0; ; i++)
    {
      if (i > -1 + getMaxSegment());
      while (!findSegmentIndPosition(i))
      {
        if (i != getMaxSegment())
          break;
        return i;
      }
    }
    return i + 1;
  }

  public int getMaxCharacterCountPaginationIndicator()
  {
    if (lgeAutoProfiling.isSupportFeature(null, "remove_pagination_indicator"))
      return 0;
    return 8;
  }

  public int getMaxCharacterSegment()
  {
    if (this.EmailLen > 0)
      return segmentLimitLen() - (1 + this.EmailLen);
    return segmentLimitLen();
  }

  public int getMaxSegment()
  {
    return 10;
  }

  public String makeSegmentString(int paramInt1, int paramInt2)
  {
    return "(" + String.valueOf(paramInt1) + "/" + String.valueOf(paramInt2) + ") ";
  }

  public int msegmentPosInfoGet(int paramInt)
  {
    return ((Integer)this.msegmentPosInfo.get(Integer.valueOf(paramInt))).intValue();
  }

  public int msegmentPosInfoSize()
  {
    return this.msegmentPosInfo.size();
  }

  public boolean needSprintSegmentProcess()
  {
    int i = segmentLimitLen();
    if (this.textLen == 0);
    while (true)
    {
      return false;
      int j = this.textLen;
      if (this.EmailLen > 0);
      for (int k = 1 + this.EmailLen; k + j > i; k = 0)
        return true;
    }
  }

  public int segmentLimitLen()
  {
    if (this.codeUnitSize == 1)
      return 160;
    return 70;
  }
}




BIGEDIT:

Framework2.jar is the one with the LG RIL information. This should help big time with the telephony issues we have been having. Might be able to implement in much the same way CM team did with samsung RIL and HTC RIL. Heres a snippet of what I found:

Java:
package com.android.internal.telephony;

import android.content.Context;
import android.os.Message;
import android.os.Parcel;
import android.os.SystemProperties;
import android.util.Log;

public final class LgeRIL extends RIL
{
  private static final boolean DBG = false;
  public static final boolean FEATURE_LGRIL_API = false;
  static final String LOG_TAG = "RILJLge";

  public LgeRIL(Context paramContext, int paramInt1, int paramInt2, String paramString)
  {
    super(paramContext, paramInt1, paramInt2, null, paramString);
  }

  private void dLogD(String paramString)
  {
    if (DBG == true)
      Log.d("LGSmartcard", "[RILJLge] " + paramString);
  }

  public static LgeRIL getLgeRIL(CommandsInterface paramCommandsInterface)
  {
    if ((paramCommandsInterface instanceof LgeRIL))
      return (LgeRIL)paramCommandsInterface;
    return null;
  }

  static String requestToStringEx(int paramInt)
  {
    switch (paramInt)
    {
    default:
      return null;
    case 356:
      return "SC_IS_AVAILABLE_SC_ON_SIM";
    case 351:
      return "RIL_REQUEST_SIM_APDU";
    case 352:
      return "RIL_REQUEST_SIM_OPEN_CHANNEL";
    case 353:
      return "RIL_REQUEST_SIM_CLOSE_CHANNEL";
    case 354:
      return "RIL_REQUEST_SIM_TRANSMIT_CHANNEL";
    case 355:
    }
    return "RIL_REQUEST_SIM_GET_ATR";
  }

  private Object responseLGSmartcardIccIo(Parcel paramParcel)
  {
    String[] arrayOfString = new String[3];
    int i = paramParcel.readInt();
    int j = paramParcel.readInt();
    String str = paramParcel.readString();
    dLogD("< responseLGSmartcardIccIo:  0x" + Integer.toHexString(i) + " 0x" + Integer.toHexString(j) + " " + str);
    arrayOfString[0] = Integer.toString(i);
    arrayOfString[1] = Integer.toString(j);
    arrayOfString[2] = str;
    return arrayOfString;
  }

  static String responseToStringEx(int paramInt)
  {
    return null;
  }

  protected boolean enableSmartcardLog(RILRequest paramRILRequest)
  {
    if ((paramRILRequest.mRequest < 351) || (paramRILRequest.mRequest > 352));
    while (DBG)
      return true;
    return false;
  }

  public void iccCloseChannel(int paramInt, Message paramMessage)
  {
    if (FEATURE_LGRIL_API == true)
    {
      lgeCloseLogicalChannel(paramInt, paramMessage);
      return;
    }
    RILRequest localRILRequest = RILRequest.obtain(353, paramMessage);
    localRILRequest.mp.writeInt(1);
    localRILRequest.mp.writeInt(paramInt);
    dLogD(localRILRequest.serialString() + "> iccCloseChannel: " + RIL.requestToString(localRILRequest.mRequest) + " " + paramInt);
    sendEx(localRILRequest);
  }

  public void iccExchangeAPDU(int paramInt1, int paramInt2, int paramInt3, int paramInt4, int paramInt5, int paramInt6, String paramString, Message paramMessage)
  {
    if (FEATURE_LGRIL_API == true)
    {
      if (paramInt3 == 0)
      {
        lgeSCTransmitBasic(paramInt1, paramInt2, paramInt4, paramInt5, paramInt6, paramString, paramMessage);
        return;
      }
      lgeSCTransmitChannel(paramInt1, paramInt2, paramInt3, paramInt4, paramInt5, paramInt6, paramString, paramMessage);
      return;
    }
    if (paramInt3 == 0);
    for (RILRequest localRILRequest = RILRequest.obtain(351, paramMessage); ; localRILRequest = RILRequest.obtain(354, paramMessage))
    {
      localRILRequest.mp.writeInt(paramInt1);
      localRILRequest.mp.writeInt(paramInt2);
      localRILRequest.mp.writeInt(paramInt3);
      localRILRequest.mp.writeString(null);
      localRILRequest.mp.writeInt(paramInt4);
      localRILRequest.mp.writeInt(paramInt5);
      localRILRequest.mp.writeInt(paramInt6);
      localRILRequest.mp.writeString(paramString);
      localRILRequest.mp.writeString(null);
      dLogD(localRILRequest.serialString() + "> iccExchangeAPDU: " + RIL.requestToString(localRILRequest.mRequest) + " 0x" + Integer.toHexString(paramInt1) + " 0x" + Integer.toHexString(paramInt2) + " 0x" + Integer.toHexString(paramInt3) + " " + paramInt4 + "," + paramInt5 + "," + paramInt6);
      sendEx(localRILRequest);
      return;
    }
  }

  public void iccGetATR(Message paramMessage)
  {
    if (FEATURE_LGRIL_API == true)
    {
      lgeSCGetATR(paramMessage);
      return;
    }
    RILRequest localRILRequest = RILRequest.obtain(355, paramMessage);
    localRILRequest.mp.writeInt(1);
    localRILRequest.mp.writeInt(0);
    dLogD(localRILRequest.serialString() + "> iccGetATR: " + RIL.requestToString(localRILRequest.mRequest));
    sendEx(localRILRequest);
  }

  public void iccOpenChannel(String paramString, Message paramMessage)
  {
    if (FEATURE_LGRIL_API == true)
    {
      lgeSCOpenLogicalChannel(paramString, paramMessage);
      return;
    }
    RILRequest localRILRequest = RILRequest.obtain(352, paramMessage);
    localRILRequest.mp.writeString(paramString);
    dLogD(localRILRequest.serialString() + "> iccOpenChannel: " + RIL.requestToString(localRILRequest.mRequest) + " " + paramString);
    sendEx(localRILRequest);
  }

  public void iccisAvailableSCOnSIM(Message paramMessage)
  {
    RILRequest localRILRequest = RILRequest.obtain(356, paramMessage);
    dLogD(localRILRequest.serialString() + "> iccisAvailableSCOnSIM: " + RIL.requestToString(localRILRequest.mRequest));
    sendEx(localRILRequest);
  }

  public void lgeCloseLogicalChannel(int paramInt, Message paramMessage)
  {
    RILRequest localRILRequest = RILRequest.obtain(353, paramMessage);
    if (DBG)
      riljLog(localRILRequest.serialString() + "> lgeCloseLogicalChannel: " + RIL.requestToString(localRILRequest.mRequest) + paramInt);
    localRILRequest.mp.writeInt(1);
    localRILRequest.mp.writeInt(paramInt);
    sendEx(localRILRequest);
  }

  public void lgeSCGetATR(Message paramMessage)
  {
    RILRequest localRILRequest = RILRequest.obtain(355, paramMessage);
    localRILRequest.mp.writeInt(1);
    localRILRequest.mp.writeInt(0);
    if (DBG)
      riljLog(localRILRequest.serialString() + "> lgeSCGetATR: " + requestToString(localRILRequest.mRequest));
    sendEx(localRILRequest);
  }

  public void lgeSCOpenLogicalChannel(String paramString, Message paramMessage)
  {
    RILRequest localRILRequest = RILRequest.obtain(352, paramMessage);
    localRILRequest.mp.writeInt(1);
    localRILRequest.mp.writeString(paramString);
    if (DBG)
      riljLog(localRILRequest.serialString() + "> lgeSCOpenLogicalChannel: " + RIL.requestToString(localRILRequest.mRequest) + paramString);
    sendEx(localRILRequest);
  }

  public void lgeSCTransmitBasic(int paramInt1, int paramInt2, int paramInt3, int paramInt4, int paramInt5, String paramString, Message paramMessage)
  {
    RILRequest localRILRequest = RILRequest.obtain(351, paramMessage);
    if (DBG)
      riljLog(localRILRequest.serialString() + "> lgeSCTransmitBasic: " + requestToString(localRILRequest.mRequest) + " 0x" + Integer.toHexString(paramInt1) + " 0x" + Integer.toHexString(paramInt2) + " " + paramInt3 + "," + paramInt4 + "," + paramInt5);
    localRILRequest.mp.writeInt(paramInt1);
    localRILRequest.mp.writeInt(paramInt2);
    localRILRequest.mp.writeInt(paramInt3);
    localRILRequest.mp.writeInt(paramInt4);
    localRILRequest.mp.writeInt(paramInt5);
    localRILRequest.mp.writeString(paramString);
    sendEx(localRILRequest);
  }

  public void lgeSCTransmitChannel(int paramInt1, int paramInt2, int paramInt3, int paramInt4, int paramInt5, int paramInt6, String paramString, Message paramMessage)
  {
    RILRequest localRILRequest = RILRequest.obtain(354, paramMessage);
    if (DBG)
      riljLog(localRILRequest.serialString() + "> lgeSCTransmitChannel: " + requestToString(localRILRequest.mRequest) + " 0x" + Integer.toHexString(paramInt1) + " 0x" + Integer.toHexString(paramInt2) + " 0x" + Integer.toHexString(paramInt3) + " " + paramInt4 + "," + paramInt5 + "," + paramInt6);
    localRILRequest.mp.writeInt(paramInt1);
    localRILRequest.mp.writeInt(paramInt2);
    localRILRequest.mp.writeInt(paramInt3);
    localRILRequest.mp.writeInt(paramInt4);
    localRILRequest.mp.writeInt(paramInt5);
    localRILRequest.mp.writeInt(paramInt6);
    localRILRequest.mp.writeString(paramString);
    sendEx(localRILRequest);
  }

  protected Object processSolicitedEx(RILRequest paramRILRequest, Parcel paramParcel)
  {
    switch (paramRILRequest.mRequest)
    {
    default:
      riljLog("calling processsolicited of RIL from LgeRIL");
      return super.processSolicitedEx(paramRILRequest, paramParcel);
    case 353:
      return responseVoidEx(paramParcel);
    case 352:
      return responseLGSmartcardResult(paramParcel);
    case 351:
      return responseLGSmartcardIccIo(paramParcel);
    case 354:
      return responseLGSmartcardIccIo(paramParcel);
    case 355:
      return responseStringEx(paramParcel);
    case 356:
    }
    return responseIntsEx(paramParcel);
  }

  protected void processUnsolicitedEx(Parcel paramParcel, int paramInt)
  {
    super.processUnsolicitedEx(paramParcel, paramInt);
  }

  public Object responseLGSmartcardResult(Parcel paramParcel)
  {
    String[] arrayOfString = new String[2];
    int i = paramParcel.readInt();
    arrayOfString[0] = Integer.toString(paramParcel.readInt());
    if (paramParcel.dataAvail() > 0);
    for (String str = paramParcel.readString(); ; str = null)
    {
      arrayOfString[1] = str;
      dLogD("responseLGSmartcardResult::Type(1-int[])(2-int,String)::" + i);
      dLogD("responseLGSmartcardResult::channel id::" + arrayOfString[0]);
      dLogD("responseLGSmartcardResult::response::" + arrayOfString[1]);
      return arrayOfString;
    }
  }
}

Java:
package com.android.internal.telephony;

public abstract interface LgeRILConstants
{
  public static final int INVALID_PARAMETER = 29;
  public static final int MISSING_RESOURCE = 27;
  public static final int NO_SUCH_ELEMENT = 28;
  public static final int RELB = 16;
  public static final int RIL_ERRNO_LGE_BASE = 16;
  public static final int RIL_ERRNO_SMARTCARD_BASE = 27;
  public static final int RIL_REQUEST_LGE_BASE = 109;
  public static final int RIL_REQUEST_LGE_CLOSE_LOGICAL_CHANNEL = 353;
  public static final int RIL_REQUEST_LGE_IS_AVAILABLE_SC_ON_SIM = 356;
  public static final int RIL_REQUEST_LGE_SC_SIM_GET_ATR = 355;
  public static final int RIL_REQUEST_LGE_SC_SIM_OPEN_LOGICAL_CHANNEL = 352;
  public static final int RIL_REQUEST_LGE_SC_SIM_TRANSMIT_BASIC = 351;
  public static final int RIL_REQUEST_LGE_SC_SIM_TRANSMIT_CHANNEL = 354;
  public static final int RIL_UNSOL_LGE_BASE = 1036;
  public static final int RRLB = 109;
  public static final int RULB = 1036;
}





Heres a link to my dropbox, has some other framework jars decompiled in there. All in java format, you can use eclipse ide to check em out, or just use gedit in linux:

https://www.dropbox.com/sh/1927yzqsh0lshh7/AABFS625Ir3_dySw9DEM0PE2a?dl=0


Hopefully this helps in getting cm off the ground....


Damn........... nice work dude. Great findings, not really good on working with radio as you can tell lol:p
 
Upvote 0
Damn........... nice work dude. Great findings, not really good on working with radio as you can tell lol:p
Its a bitch, im good at decompiling stuff and slapping them together and somehow by the grace of god coming up with something new, speaking of which... I got something special for everyone that Im trying to finish before the New Year... :cool:
 
Upvote 0
Its a bitch, im good at decompiling stuff and slapping them together and somehow by the grace of god coming up with something new, speaking of which... I got something special for everyone that Im trying to finish before the New Year... :cool:

I can't wait to see what you come up with! Any development for this phone is a plus.
 
  • Like
Reactions: QuietStorm1785
Upvote 0
yea, i noticed. I can decompile the frameworks for miui also, I think I already have, idk... have to check within the crapton of files I have on my computer. I did quite a bit of work on the prevail with shabby and a few other devs, and some work on the zte warp too. I attempted to port miui over to the zte warp, but was too difficult for me at the time... didnt know how to play with smali files then. Currently working on a build of cm11 for our phone.... stuck in a bootloop at the moment, trying to debug the issue. Had a ton of issues with the ramdisk, but managed to get it to boot to logo...
 
  • Like
Reactions: yastroa
Upvote 0
yea, i noticed. I can decompile the frameworks for miui also, I think I already have, idk... have to check within the crapton of files I have on my computer. I did quite a bit of work on the prevail with shabby and a few other devs, and some work on the zte warp too. I attempted to port miui over to the zte warp, but was too difficult for me at the time... didnt know how to play with smali files then. Currently working on a build of cm11 for our phone.... stuck in a bootloop at the moment, trying to debug the issue. Had a ton of issues with the ramdisk, but managed to get it to boot to logo...


hello QuietStorm
i had found that someone let the F7 can flash CM12 for f200
http://tieba.baidu.com/p/3500832378
then i had tried to flash the rom。
bugs:
1 No Usb Mass Storage and otg
2 when you set the screenbrightness to minimum then open safe power mod,then when the the phone next supend on ,it would not open screenbrightness
3 camera color issue
4 there is cm privacy gruad,so when you click that on setting。it will FC

5 it boot before see the cyanogenmod that looks like it was shundown,but not
 
Upvote 0
hello QuietStorm
i had found that someone let the F7 can flash CM12 for f200
http://tieba.baidu.com/p/3500832378
then i had tried to flash the rom。
bugs:
1 No Usb Mass Storage and otg
2 when you set the screenbrightness to minimum then open safe power mod,then when the the phone next supend on ,it would not open screenbrightness
3 camera color issue
4 there is cm privacy gruad,so when you click that on setting。it will FC

5 it boot before see the cyanogenmod that looks like it was shundown,but not

I want to try this, but I don't want to brick my phone. Any confirmation that it works?
 
Upvote 0
yea, i noticed. I can decompile the frameworks for miui also, I think I already have, idk... have to check within the crapton of files I have on my computer. I did quite a bit of work on the prevail with shabby and a few other devs, and some work on the zte warp too. I attempted to port miui over to the zte warp, but was too difficult for me at the time... didnt know how to play with smali files then. Currently working on a build of cm11 for our phone.... stuck in a bootloop at the moment, trying to debug the issue. Had a ton of issues with the ramdisk, but managed to get it to boot to logo...

Any Breakthru here.
 
Upvote 0

BEST TECH IN 2023

We've been tracking upcoming products and ranking the best tech since 2007. Thanks for trusting our opinion: we get rewarded through affiliate links that earn us a commission and we invite you to learn more about us.

Smartphones