Two implementation modes for CDMA Mobile Phones:
Device/card separation: User information is written in a separate uimcard
Integrated Device card: User information is written in mobile phone
This is related to the CDMA subtraffic mode. For us, we use an independent UIM card. The method used in the software is related to an Nv value, but this value cannot be changed using qxdm, to be exact, the value is written back after the instance is restarted,
Therefore, this Nv value should be inCodeIn the settings, Qualcomm has always said that it is in the network settings, but it has not been found. After reading the code, we can see that it is not displayed for some reason, and it doesn't matter, you can directly find the code set in the CDMA information reading mode and change it to the UIM mode.
The procedure of this setting is as follows:
Public Static Void Makedefaultphone (context ){ // Get cdmasubsponmode from settings. Secure Int Cdmasub.pdf; // Read the CDMA subdomains from the database. The default value is preferredcdmasub.pdf. Cdmasubtasks = Settings. Secure. getint (context. getcontentresolver (), settings. Secure. CDMA _subscription_mode, preferredcdmasub.pdf); log. I (log_tag, " CDMA sub‑set " +Cdmasubtasks ); // Create RIL by passing CDMA subdomains Scommandsinterface = New RIL (context, networkmode, cdmasubtasks );......}
The default preferredcdmasub.pdf is
Preferredcdmasubscription = cdmasubscriptionsourcemanager. preferred_cdma _subager;
Preferred_cdma _subpipeline = subscription_from_nv;
We can see that the user information is read from NV, that is, the user information is stored on the mobile phone, and the CDMA subhandler information is maintained in the cdmasubscriptionsourcemanager class.
But what does this have to do with this NV item?
Public RIL (context, Int Preferrednetworktype, Int Cdmasubtasks, integer instanceid) {mcdmasubtasks = Cdmasub.pdf ;} Private Void Processunsolicited (parcel p ){ Case Ril_unsol_ril_connected :{ // Initial Conditions Setradiopower ( False , Null ); Setpreferrednetworktype (mpreferrednetworktype, Null ); // After the RIL connection is started, the CDMA subpipeline will be set, which is passed when the Java layer RIL is created. // This should be passed to the modem, and related NV items are set, so using tools to change this NV does not work Setcdmasubscriptionsource (mcdmasub.pdf,Null ); Break ;}}
Therefore, we should pay attention to the setting of the CDMA subpipeline mode.
Cdmasubscriptionsourcemanager
This class is very simple, it is a handler, listening to maintain the CDMA subpipeline mode;
// Constructor Private Cdmasubscriptionsourcemanager (context, commandsinterface CI) {mcontext = Context; MCM =CI; // Listen to changes in CDMA subtraffic Mode MCM. registerforcdmasubscriptionchanged ( This , Event_cdma _subscription_source_changed, Null ); Mcm. registerforon ( This , Event_radio_on, Null ); // Set the current CDMA subregion to obtain the default Int Subscriptionsource =Getdefacdcdmasubscriptionsource ();Mcdmasubscriptionsource. Set (Subscriptionsource );}
Other modules obtain the current CDMA subtraffic Mode
Public IntGetcdmasubscriptionsource (){Return Mcdmasubscriptionsource.Get();}