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

Commit e337d651 authored by johnwang's avatar johnwang
Browse files

Support SMS cell broadcasting for GSM in RIL.java

enable gsm related cell broadcast requests in RIL.java and add SmsBraodcastConfigInfo class.

The gsm related cell broadcast requests include

RIL_REQUEST_GET_BROADCAST_CONFIG
RIL_REQUEST_GET_BROADCAST_CONFIG
RIL_REQUEST_BROADCAST_ACTIVATION
RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS

	modified:   BaseCommands.java
	modified:   CommandsInterface.java
	modified:   RIL.java
	modified:   RILConstants.java
	modified:   cdma/CdmaSMSDispatcher.java
	new file:   gsm/SmsBroadcastConfigInfo.java
	modified:   test/SimulatedCommands.java
parent 174231d8
Loading
Loading
Loading
Loading
+9 −0
Original line number Original line Diff line number Diff line
@@ -81,6 +81,7 @@ public abstract class BaseCommands implements CommandsInterface {
    protected Registrant mIccRefreshRegistrant;
    protected Registrant mIccRefreshRegistrant;
    protected Registrant mRingRegistrant;
    protected Registrant mRingRegistrant;
    protected Registrant mRestrictedStateRegistrant;
    protected Registrant mRestrictedStateRegistrant;
    protected Registrant mGsmBroadcastSmsRegistrant;


    // Network Mode received from PhoneFactory
    // Network Mode received from PhoneFactory
    protected int mNetworkMode;
    protected int mNetworkMode;
@@ -337,6 +338,14 @@ public abstract class BaseCommands implements CommandsInterface {
        mSMSRegistrant.clear();
        mSMSRegistrant.clear();
    }
    }


    public void setOnNewGsmBroadcastSms(Handler h, int what, Object obj) {
        mGsmBroadcastSmsRegistrant = new Registrant (h, what, obj);
    }

    public void unSetOnNewGsmBroadcastSms(Handler h) {
        mGsmBroadcastSmsRegistrant.clear();
    }

    public void setOnSmsOnSim(Handler h, int what, Object obj) {
    public void setOnSmsOnSim(Handler h, int what, Object obj) {
        mSmsOnSimRegistrant = new Registrant (h, what, obj);
        mSmsOnSimRegistrant = new Registrant (h, what, obj);
    }
    }
+30 −3
Original line number Original line Diff line number Diff line
@@ -16,6 +16,8 @@


package com.android.internal.telephony;
package com.android.internal.telephony;


import com.android.internal.telephony.gsm.SmsBroadcastConfigInfo;

import android.os.Message;
import android.os.Message;
import android.os.Handler;
import android.os.Handler;


@@ -1200,6 +1202,31 @@ public interface CommandsInterface {
     */
     */
    public void handleCallSetupRequestFromSim(boolean accept, Message response);
    public void handleCallSetupRequestFromSim(boolean accept, Message response);


    /**
     * Activate or deactivate cell broadcast SMS for GSM.
     *
     * @param activate
     *            true = activate, false = deactivate
     * @param result Callback message is empty on completion
     */
    public void setGsmBroadcastActivation(boolean activate, Message result);

    /**
     * Configure cell broadcast SMS for GSM.
     *
     * @param response Callback message is empty on completion
     */
    public void setGsmBroadcastConfig(SmsBroadcastConfigInfo[] config, Message response);

    /**
     * Query the current configuration of cell broadcast SMS of GSM.
     *
     * @param response
     *        Callback message contains the configuration from the modem
     *        on completion
     */
    public void getGsmBroadcastConfig(Message response);

    //***** new Methods for CDMA support
    //***** new Methods for CDMA support


    /**
    /**
@@ -1306,14 +1333,14 @@ public interface CommandsInterface {
    public void deactivateDataCall(int cid, Message result);
    public void deactivateDataCall(int cid, Message result);


    /**
    /**
     * Activate or deactivate cell broadcast SMS.
     * Activate or deactivate cell broadcast SMS for CDMA.
     *
     *
     * @param activate
     * @param activate
     *            0 = activate, 1 = deactivate
     *            true = activate, false = deactivate
     * @param result
     * @param result
     *            Callback message is empty on completion
     *            Callback message is empty on completion
     */
     */
    public void activateCdmaBroadcastSms(int activate, Message result);
    public void setCdmaBroadcastActivation(boolean activate, Message result);


    /**
    /**
     * Configure cdma cell broadcast SMS.
     * Configure cdma cell broadcast SMS.
+100 −26
Original line number Original line Diff line number Diff line
@@ -42,6 +42,7 @@ import com.android.internal.telephony.CallForwardInfo;
import com.android.internal.telephony.CommandException;
import com.android.internal.telephony.CommandException;
import com.android.internal.telephony.DataCallState;
import com.android.internal.telephony.DataCallState;
import com.android.internal.telephony.gsm.NetworkInfo;
import com.android.internal.telephony.gsm.NetworkInfo;
import com.android.internal.telephony.gsm.SmsBroadcastConfigInfo;
import com.android.internal.telephony.gsm.SuppServiceNotification;
import com.android.internal.telephony.gsm.SuppServiceNotification;
import com.android.internal.telephony.IccCardApplication;
import com.android.internal.telephony.IccCardApplication;
import com.android.internal.telephony.IccCardStatus;
import com.android.internal.telephony.IccCardStatus;
@@ -1842,6 +1843,59 @@ public final class RIL extends BaseCommands implements CommandsInterface {
        send(rr);
        send(rr);
    }
    }


    /**
     * {@inheritDoc}
     */
    public void getGsmBroadcastConfig(Message response) {
        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GSM_GET_BROADCAST_CONFIG, response);

        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));

        send(rr);
    }

    /**
     * {@inheritDoc}
     */
    public void setGsmBroadcastConfig(SmsBroadcastConfigInfo[] config, Message response) {
        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GSM_SET_BROADCAST_CONFIG, response);

        int numOfConfig = config.length;
        rr.mp.writeInt(numOfConfig);

        for(int i = 0; i < numOfConfig; i++) {
            rr.mp.writeInt(config[i].getFromServiceId());
            rr.mp.writeInt(config[i].getToServiceId());
            rr.mp.writeInt(config[i].getFromCodeScheme());
            rr.mp.writeInt(config[i].getToCodeScheme());
            rr.mp.writeInt(config[i].isSelected() ? 1 : 0);
        }

        if (RILJ_LOGD) {
            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
                    + " with " + numOfConfig + "configs : ");
            for (int i = 0; i < numOfConfig; i++) {
                riljLog(config[i].toString());
            }
        }

        send(rr);
    }

    /**
     * {@inheritDoc}
     */
    public void setGsmBroadcastActivation(boolean activate, Message response) {
        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GSM_BROADCAST_ACTIVATION, response);

        rr.mp.writeInt(1);
        rr.mp.writeInt(activate ? 0 : 1);

        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));

        send(rr);
    }

    //***** Private Methods
    //***** Private Methods


    private void sendScreenState(boolean on) {
    private void sendScreenState(boolean on) {
@@ -2095,13 +2149,13 @@ public final class RIL extends BaseCommands implements CommandsInterface {
            case RIL_REQUEST_CDMA_BURST_DTMF: ret =  responseVoid(p); break;
            case RIL_REQUEST_CDMA_BURST_DTMF: ret =  responseVoid(p); break;
            case RIL_REQUEST_CDMA_SEND_SMS: ret =  responseSMS(p); break;
            case RIL_REQUEST_CDMA_SEND_SMS: ret =  responseSMS(p); break;
            case RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE: ret =  responseVoid(p); break;
            case RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE: ret =  responseVoid(p); break;
            case RIL_REQUEST_GET_BROADCAST_CONFIG: ret =  responseBR_SMS_CNF(p); break;
            case RIL_REQUEST_GSM_GET_BROADCAST_CONFIG: ret =  responseGmsBroadcastConfig(p); break;
            case RIL_REQUEST_SET_BROADCAST_CONFIG: ret =  responseVoid(p); break;
            case RIL_REQUEST_GSM_SET_BROADCAST_CONFIG: ret =  responseVoid(p); break;
            case RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG: ret =  responseCDMA_BR_CNF(p); break;
            case RIL_REQUEST_GSM_BROADCAST_ACTIVATION: ret =  responseVoid(p); break;
            case RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG: ret =  responseCdmaBroadcastConfig(p); break;
            case RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG: ret =  responseVoid(p); break;
            case RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG: ret =  responseVoid(p); break;
            case RIL_REQUEST_BROADCAST_ACTIVATION: ret =  responseVoid(p); break;
            case RIL_REQUEST_CDMA_VALIDATE_AKEY: ret =  responseVoid(p); break;
            case RIL_REQUEST_CDMA_BROADCAST_ACTIVATION: ret =  responseVoid(p); break;
            case RIL_REQUEST_CDMA_BROADCAST_ACTIVATION: ret =  responseVoid(p); break;
            case RIL_REQUEST_CDMA_VALIDATE_AKEY: ret =  responseVoid(p); break;
            case RIL_REQUEST_CDMA_SUBSCRIPTION: ret =  responseStrings(p); break;
            case RIL_REQUEST_CDMA_SUBSCRIPTION: ret =  responseStrings(p); break;
            case RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM: ret =  responseInts(p); break;
            case RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM: ret =  responseInts(p); break;
            case RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM: ret =  responseVoid(p); break;
            case RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM: ret =  responseVoid(p); break;
@@ -2449,12 +2503,16 @@ public final class RIL extends BaseCommands implements CommandsInterface {
                }
                }


            case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED:
            case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED:
                if (RILJ_LOGD) unsljLog(response);

                if (mIccStatusChangedRegistrants != null) {
                if (mIccStatusChangedRegistrants != null) {
                    mIccStatusChangedRegistrants.notifyRegistrants();
                    mIccStatusChangedRegistrants.notifyRegistrants();
                }
                }
                break;
                break;


            case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS:
            case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS:
                if (RILJ_LOGD) unsljLog(response);

                SmsMessage sms = (SmsMessage) ret;
                SmsMessage sms = (SmsMessage) ret;


                if (mSMSRegistrant != null) {
                if (mSMSRegistrant != null) {
@@ -2464,13 +2522,16 @@ public final class RIL extends BaseCommands implements CommandsInterface {
                break;
                break;


            case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS:
            case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS:
                // TODO T: waiting for SMS BC feature
                if (RILJ_LOGD) unsljLog(response);

                if (mGsmBroadcastSmsRegistrant != null) {
                    mGsmBroadcastSmsRegistrant
                        .notifyRegistrant(new AsyncResult(null, ret, null));
                }
                break;
                break;


            case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL:
            case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL:
                if (Config.LOGD) {
                if (RILJ_LOGD) unsljLog(response);
                    if (RILJ_LOGD) riljLog("[UNSL]< RUIM_SMS_STORAGE_FULL");
                }


                if (mIccSmsFullRegistrant != null) {
                if (mIccSmsFullRegistrant != null) {
                    mIccSmsFullRegistrant.notifyRegistrant();
                    mIccSmsFullRegistrant.notifyRegistrant();
@@ -2858,26 +2919,39 @@ public final class RIL extends BaseCommands implements CommandsInterface {
       response = new ArrayList<NeighboringCellInfo>(num);
       response = new ArrayList<NeighboringCellInfo>(num);


       for (int i = 0 ; i < num ; i++) {
       for (int i = 0 ; i < num ; i++) {
           try {
           int rssi = p.readInt();
           int rssi = p.readInt();
           int cid = Integer.valueOf(p.readString(), 16);
           int cid = Integer.valueOf(p.readString(), 16);
           cell = new NeighboringCellInfo(rssi, cid);
           cell = new NeighboringCellInfo(rssi, cid);
           response.add(cell);
           response.add(cell);
           } catch ( Exception e) {
           }
       }
       }


    return response;
    return response;
    }
    }


    private Object
    private Object responseGmsBroadcastConfig(Parcel p) {
    responseBR_SMS_CNF(Parcel p) {
        int num;
        // TODO
        ArrayList<SmsBroadcastConfigInfo> response;
        return null;
        SmsBroadcastConfigInfo info;

        num = p.readInt();
        response = new ArrayList<SmsBroadcastConfigInfo>(num);

        for (int i = 0; i < num; i++) {
            int fromId = p.readInt();
            int toId = p.readInt();
            int fromScheme = p.readInt();
            int toScheme = p.readInt();
            boolean selected = (p.readInt() == 1);

            info = new SmsBroadcastConfigInfo(fromId, toId, fromScheme,
                    toScheme, selected);
            response.add(info);
        }
        return response;
    }
    }


    private Object
    private Object
    responseCDMA_BR_CNF(Parcel p) {
    responseCdmaBroadcastConfig(Parcel p) {
        int numServiceCategories;
        int numServiceCategories;
        int response[];
        int response[];


@@ -3121,11 +3195,11 @@ public final class RIL extends BaseCommands implements CommandsInterface {
            case RIL_REQUEST_CDMA_BURST_DTMF: return "RIL_REQUEST_CDMA_BURST_DTMF";
            case RIL_REQUEST_CDMA_BURST_DTMF: return "RIL_REQUEST_CDMA_BURST_DTMF";
            case RIL_REQUEST_CDMA_SEND_SMS: return "RIL_REQUEST_CDMA_SEND_SMS";
            case RIL_REQUEST_CDMA_SEND_SMS: return "RIL_REQUEST_CDMA_SEND_SMS";
            case RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE: return "RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE";
            case RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE: return "RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE";
            case RIL_REQUEST_GET_BROADCAST_CONFIG: return "RIL_REQUEST_GET_BROADCAST_CONFIG";
            case RIL_REQUEST_GSM_GET_BROADCAST_CONFIG: return "RIL_REQUEST_GSM_GET_BROADCAST_CONFIG";
            case RIL_REQUEST_SET_BROADCAST_CONFIG: return "RIL_REQUEST_SET_BROADCAST_CONFIG";
            case RIL_REQUEST_GSM_SET_BROADCAST_CONFIG: return "RIL_REQUEST_GSM_SET_BROADCAST_CONFIG";
            case RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG: return "RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG";
            case RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG: return "RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG";
            case RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG: return "RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG";
            case RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG: return "RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG";
            case RIL_REQUEST_BROADCAST_ACTIVATION: return "RIL_REQUEST_BROADCAST_ACTIVATION";
            case RIL_REQUEST_GSM_BROADCAST_ACTIVATION: return "RIL_REQUEST_GSM_BROADCAST_ACTIVATION";
            case RIL_REQUEST_CDMA_VALIDATE_AKEY: return "RIL_REQUEST_CDMA_VALIDATE_AKEY";
            case RIL_REQUEST_CDMA_VALIDATE_AKEY: return "RIL_REQUEST_CDMA_VALIDATE_AKEY";
            case RIL_REQUEST_CDMA_BROADCAST_ACTIVATION: return "RIL_REQUEST_CDMA_BROADCAST_ACTIVATION";
            case RIL_REQUEST_CDMA_BROADCAST_ACTIVATION: return "RIL_REQUEST_CDMA_BROADCAST_ACTIVATION";
            case RIL_REQUEST_CDMA_SUBSCRIPTION: return "RIL_REQUEST_CDMA_SUBSCRIPTION";
            case RIL_REQUEST_CDMA_SUBSCRIPTION: return "RIL_REQUEST_CDMA_SUBSCRIPTION";
@@ -3332,11 +3406,11 @@ public final class RIL extends BaseCommands implements CommandsInterface {
        send(rr);
        send(rr);
    }
    }


    public void activateCdmaBroadcastSms(int activate, Message response) {
    public void setCdmaBroadcastActivation(boolean activate, Message response) {
        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_BROADCAST_ACTIVATION, response);
        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_BROADCAST_ACTIVATION, response);


        rr.mp.writeInt(1);
        rr.mp.writeInt(1);
        rr.mp.writeInt(activate);
        rr.mp.writeInt(activate ? 0 :1);


        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));


+3 −3
Original line number Original line Diff line number Diff line
@@ -206,9 +206,9 @@ cat include/telephony/ril.h | \
    int RIL_REQUEST_CDMA_VALIDATE_AKEY = 86;
    int RIL_REQUEST_CDMA_VALIDATE_AKEY = 86;
    int RIL_REQUEST_CDMA_SEND_SMS = 87;
    int RIL_REQUEST_CDMA_SEND_SMS = 87;
    int RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE = 88;
    int RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE = 88;
    int RIL_REQUEST_GET_BROADCAST_CONFIG = 89;
    int RIL_REQUEST_GSM_GET_BROADCAST_CONFIG = 89;
    int RIL_REQUEST_SET_BROADCAST_CONFIG = 90;
    int RIL_REQUEST_GSM_SET_BROADCAST_CONFIG = 90;
    int RIL_REQUEST_BROADCAST_ACTIVATION = 91;
    int RIL_REQUEST_GSM_BROADCAST_ACTIVATION = 91;
    int RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG = 92;
    int RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG = 92;
    int RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG = 93;
    int RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG = 93;
    int RIL_REQUEST_CDMA_BROADCAST_ACTIVATION = 94;
    int RIL_REQUEST_CDMA_BROADCAST_ACTIVATION = 94;
+1 −1
Original line number Original line Diff line number Diff line
@@ -342,7 +342,7 @@ final class CdmaSMSDispatcher extends SMSDispatcher {


    /** {@inheritDoc} */
    /** {@inheritDoc} */
    protected void activateCellBroadcastSms(int activate, Message response) {
    protected void activateCellBroadcastSms(int activate, Message response) {
        mCm.activateCdmaBroadcastSms(activate, response);
        mCm.setCdmaBroadcastActivation((activate == 0), response);
    }
    }


    /** {@inheritDoc} */
    /** {@inheritDoc} */
Loading