目錄
- 問題現象
- 解決方法
- 1、查找SDK中系統預設配置檔案
- 2、查找包含關鍵字的檔案
- 3、修改
問題現象
RK3399Pro闆子USB接口預設為
Host
模式,在開發調試時需要用到ADB,即
Peripheral
模式。在修改前,系統預設配置如下:
解決方法
1、查找SDK中系統預設配置檔案
通常Android系統的預設配置檔案在
U:\Code\RK3399PRO_HDMI_ANDROID8\frameworks\base\packages\SettingsProvider\res\values\defaults.xml
檔案内,裡面包含了WIFI,BT等的預設開關配置。但此檔案下并沒有我們所需要的
Connect to PC
關鍵字。
2、查找包含關鍵字的檔案
在
U:\Code\RK3399PRO_HDMI_ANDROID8\packages\apps\Settings\src\com\android\settings\connecteddevice
下包含了
Connect to PC
的源碼檔案,在其中的
ConnectToPcPreferenceController.java
檔案内有如下代碼:
public class ConnectToPcPreferenceController extends AbstractPreferenceController implements
PreferenceControllerMixin, Preference.OnPreferenceChangeListener {
private static final String TAG = "ConnectToPcPreferenceController";
private final String mConnectToPcKey;
private static final String SYS_FILE = "/sys/devices/platform/usb0/dwc3_mode";
//private static final String SYS_FILE = "/sys/kernel/debug/usb0/rk_usb_force_mode";
private File mFile = null;
private String mMode = null;
private static final String OTG_MODE = "0";
private static final String HOST_MODE = new String("1");
private static final String SLAVE_MODE = new String("2");
private static final String OTG_MODE_STR = "otg";
private static final String HOST_MODE_STR = "host";
private static final String SLAVE_MODE_STR = "peripheral";
public static final String PERSIST_PRO = "persist.usb.mode";
private Handler mHandler;
private SwitchPreference mConnectToPc;
public ConnectToPcPreferenceController(Context context, String key) {
super(context);
mConnectToPcKey = key;
mFile =new File(SYS_FILE);
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == sysFileOperation.SWITCH_FINISH) {
String mode = (String) msg.obj;
if(HOST_MODE.equals(mode)) {
mConnectToPc.setChecked(false);
} else if(SLAVE_MODE.equals(mode)) {
mConnectToPc.setChecked(true);
}
SystemProperties.set(PERSIST_PRO, mode);
} else {
Log.e(TAG, "unexpect msg:"+ msg.what);
}
mConnectToPc.setEnabled(true);
}
};
}
//剩下的代碼省略
}
從此處代碼可知,配置檔案是從
/sys/devices/platform/usb0/dwc3_mode
檔案中讀取,繼續查找該檔案在哪裡生成
最終在
U:\Code\RK3399PRO_HDMI_ANDROID8\vendor\firefly\usb_mode_switch
檔案夾下發現了一個名為
usb_mode_switch.sh
的腳本,其内容如下:
FILE_USB_MODE="/sys/devices/platform/usb0/dwc3_mode"
MODE=$(getprop persist.usb.mode)
if [ -z "$MODE" ];then
MODE="host"
fi
if [ -e "$FILE_USB_MODE" ];then
echo "$MODE" > "$FILE_USB_MODE"
fi
3、修改
哦,從上面腳本可以看出,USB的預設配置由此處而來,是以隻需根據那個
ConnectToPcPreferenceController.java
,修改為:
MODE="peripheral"
或
MODE="otg"
即可實作連接配接電腦後識别為
Peripheral
裝置
最終結果如下圖所示:
注:因闆子電路原因即使設定為OTG模式,也無法在
Host
和
Peripheral
間切換,因為電路中少了USB-ID管腳,使用的為USB-A接口