package vendor.samsung.hardware.radio@1.2;

import android.hardware.radio@1.0::ImsSmsMessage;
import android.hardware.radio@1.0::GsmSmsMessage;
import android.hardware.radio@1.0::CdmaSmsMessage;
import android.hardware.radio@1.2::IRadio;

interface IRadio extends android.hardware.radio@1.2::IRadio {
    oneway secGetIccCardStatus(int32_t serial);
    oneway secSupplyNetworkDepersonalization(int32_t serial, string netPin, int32_t lockState);
    oneway secAcceptCall(int32_t serial, OemCallType callType);
    oneway secDial(int32_t serial, SecDial dialInfo);
    oneway secGetCurrentCalls(int32_t serial);
    oneway secGetSignalStrength(int32_t serial);
    oneway secGetVoiceRegistrationState(int32_t serial);
    oneway secGetDataRegistrationState(int32_t serial);
    oneway secExplicitCallTransfer(int32_t serial, string number);
    oneway secGetOperator(int32_t serial);
    oneway secSetBarringPassworD(int32_t serial, string facility, string oldPassword, string newPassword, string newPasswordAgain);
    oneway secGetImsRegistrationState(int32_t serial);
    oneway secGetAvailableNetworks(int32_t serial);
    oneway oemDialEmergencyCall(int32_t serial, SecDial dialInfo);
    oneway oemCallDeflection(int32_t serial, string address);
    oneway oemModifyCallInitiate(int32_t serial, OemCallModify callInfo);
    oneway oemSetImsCallList(int32_t serial, vec<OemImsCall> imsCalls);
    oneway oemGetPreferredNetworkList(int32_t serial);
    oneway oemSetPreferredNetworkList(int32_t serial, OemPreferredNetworkInfo info);
    oneway oemSendEncodedUSSD(int32_t serial, OemEncodedUSSD encodedUSSD);
    oneway oemHoldCall(int32_t serial);
    oneway oemGetAcbInfo(int32_t serial);
    oneway oemSetTransferCall(int32_t serial, vec<string> data);
    oneway oemGetDisable2g(int32_t serial);
    oneway oemSetDisable2g(int32_t serial, int32_t state);
    oneway oemGetICBarring(int32_t serial, string facility, string password, string serviceClass, string aid);
    oneway oemSetICBarring(int32_t serial, string facility, string iCBNumber, string serviceClass, string aid);
    oneway oemQueryCnap(int32_t serial);
    oneway oemRefreshNitzTime(int32_t serial);
    oneway oemEnableUnsolResponse(int32_t serial);
    oneway oemCancelTransferCall(int32_t serial, int32_t index);
    oneway oemAcknowledgeRilConnected(int32_t serial);
    oneway oemGetPhoneBookStorageInfo(int32_t serial, int32_t fileid);
    oneway oemGetUsimPBCapa(int32_t serial);
    oneway oemSetSimPower(int32_t serial, int32_t on);
    oneway oemSetSimOnOff(int32_t serial, int32_t mode);
    oneway oemSetSimInitEvent(int32_t serial);
    oneway oemGetSimLockInfo(int32_t serial, int32_t numLockType, int32_t lockType);
    oneway oemSupplyIccPerso(int32_t serial, string pin);
    oneway oemChangeIccPerso(int32_t serial, string oldPass, string newPass); //182
    oneway oemSendCdmaSmsExpectMore(int32_t serial, CdmaSmsMessage sms);
    oneway oemGetPhoneBookEntry(int32_t serial, int32_t fileid, int32_t p1);
    oneway oemAccessPhoneBookEntry(int32_t serial, int32_t command, int32_t fileid, int32_t index, OemAdnRecord adnRecord, string pin2);
    oneway oemGetCellBroadcastConfig(int32_t serial);
    oneway oemEmergencySearch(int32_t serial);
    oneway oemEmergencyControl(int32_t serial, int32_t command);
    oneway oemGetAtr(int32_t serial);
    oneway oemSendSms(int32_t serial, GsmSmsMessage message);
    oneway secSendSMSExpectMore(int32_t serial, GsmSmsMessage message);
    oneway secSendCdmaSms(int32_t serial, CdmaSmsMessage sms);
    oneway secSendImsSms(int32_t serial, ImsSmsMessage message);

    oneway secGetCdmaRomaingPreference(int32_t serial);
    oneway secEnable5g(int32_t serial);
    oneway secEnable5gOnly(int32_t serial);
    oneway secDisable5g(int32_t serial);
    oneway secQuery5gStatus(int32_t serial);
    oneway secQueryNrDcParam(int32_t serial);
    oneway secQueryNrBearerAllocation(int32_t serial);
    oneway secQueryNrSignalStrength(int32_t serial);
    oneway oemQueryCsgList(int32_t serial);
    oneway oemSelectCsgManual(int32_t serial, OemCsgInfo csgInfo);
    oneway secSetDataAllowed(int32_t serial, bool allow, SecAllowDataParam param);
};
