android 6.0 USB添加调制解调模式

 1.什么是调制解调器

        调制解调器(MODEM)是为了解决利用模拟信道传输数字信号而研制的一种通信设备。计算机只能处理数字信号,而现有的一些信道又只能传输模拟信号,为了利用模拟信道传输数字信号,发送端就必须将数字信号转换成模拟信号,将欲发送的数字信号调制到载波上去,而载波信号是模拟信号,可以在模拟信道上传输。然后,接收端再进行相应的处理,恢复传输的数字信号,这一过程就是解调。这样就实现了在模拟信道上传输数字信号的目的,如图1所示。在实际应用中,一般都采用双工通信,所以将调制器(MOdulator)和解调器(DEModulator)装配在一起,就是我们常用的调制解调器(MODEM)。


2.调制解调模式在android开发中有很多用处,但是android原生代码里面没有这种模式,怎么办?那就自己添加吧。接下来就说说怎么添加..........


3.概述

usb的模式选择属于“设置”里面的内容,如果要添加、删除USB的模式,需要修改两部分代码,第一部分UI,属于设置里面的,第二部分是framework,usb服务部分。
4.代码路径
4.1 UI部分:
packages\apps\Settings\src\com\android\settings\deviceinfo\UsbBackend.java
packages\apps\Settings\src\com\android\settings\deviceinfo\UsbModeChooserActivity.java
参考其他模式添加相应的模式。
4.2 framework部分:
frameworks\base\core\java\android\hardware\usb\UsbManager.java
frameworks/base/services/usb/java/com/android/server/usb/UsbDeviceManager.java
frameworks/base/services/usb/java/com/android/server/usb/UsbService.java
USB的各种模式在device\qcom\common\rootdir\etc\init.qcom.usb.rc中都有定义。
5.
framework:
diff --git a/frameworks/base/core/java/android/hardware/usb/UsbManager.java b/frameworks/base/core/java/android/hardware/usb/UsbManager.java
index c2afe3e..7e21a8c 100755
--- a/frameworks/base/core/java/android/hardware/usb/UsbManager.java
+++ b/frameworks/base/core/java/android/hardware/usb/UsbManager.java
@@ -198,7 +198,13 @@ public class UsbManager {
* {@hide}
*/
public static final String USB_FUNCTION_MTP = "mtp";
-
+ /**
+ * Name of the DIAG USB function.
+ * Used in extras for the {@link #ACTION_USB_STATE} broadcast
+ *
+ * {@hide}
+ */
+ public static final String USB_FUNCTION_DIAG = "diag,serial_smd,rmnet_bam";
/**
* Name of the PTP USB function.
* Used in extras for the {@link #ACTION_USB_STATE} broadcast
diff --git a/frameworks/base/services/usb/java/com/android/server/usb/UsbDeviceManager.java b/frameworks/base/services/usb/java/com/android/server/usb/UsbDeviceManager.java
index 0ad1f60..c5d0c50 100755
--- a/frameworks/base/services/usb/java/com/android/server/usb/UsbDeviceManager.java
+++ b/frameworks/base/services/usb/java/com/android/server/usb/UsbDeviceManager.java
@@ -345,7 +345,9 @@ public class UsbDeviceManager {
UsbManager.USB_FUNCTION_MTP);
boolean ptpEnable = UsbManager.containsFunction(getDefaultFunctions(),
UsbManager.USB_FUNCTION_PTP);
- if (mtpEnable || ptpEnable) mUsbDataUnlocked = true;
+ boolean diagEnable = UsbManager.containsFunction(getDefaultFunctions(),
+ UsbManager.USB_FUNCTION_DIAG);
+ if (mtpEnable || ptpEnable || diagEnable) mUsbDataUnlocked = true;
}
String state = FileUtils.readTextFile(new File(STATE_PATH), 0, null).trim();
updateState(state);
@@ -468,6 +470,7 @@ public class UsbDeviceManager {
+ "forceRestart=" + forceRestart);
// Try to set the enabled functions.
+ Slog.d(TAG, "zli########### setEnabledFunctions ok");
final String oldFunctions = mCurrentFunctions;
final boolean oldFunctionsApplied = mCurrentFunctionsApplied;
if (trySetEnabledFunctions(functions, forceRestart)) {
diff --git a/frameworks/base/services/usb/java/com/android/server/usb/UsbService.java b/frameworks/base/services/usb/java/com/android/server/usb/UsbService.java
index ccf9c66..b6c01f6 100755
--- a/frameworks/base/services/usb/java/com/android/server/usb/UsbService.java
+++ b/frameworks/base/services/usb/java/com/android/server/usb/UsbService.java
@@ -312,6 +312,7 @@ public class UsbService extends IUsbManager.Stub {
case UsbManager.USB_FUNCTION_MIDI:
case UsbManager.USB_FUNCTION_MTP:
case UsbManager.USB_FUNCTION_PTP:
+ case UsbManager.USB_FUNCTION_DIAG:
case UsbManager.USB_FUNCTION_RNDIS:
case UsbManager.USB_FUNCTION_CHARGING:
return true;


package:
diff --git a/packages/apps/Settings/res/values-zh-rCN/strings.xml b/packages/apps/Settings/res/values-zh-rCN/strings.xml
index 98221eb..9c2aae6 100755
--- a/packages/apps/Settings/res/values-zh-rCN/strings.xml
+++ b/packages/apps/Settings/res/values-zh-rCN/strings.xml
@@ -2530,6 +2530,8 @@
<string name="keywords_color_mode" msgid="4670570451841540200">"鲜亮 RGB SRGB 颜色 自然 标准"</string>
<string name="keywords_lockscreen" msgid="4806191868723291541">"滑动 密码 图案 PIN码"</string>
<string name="setup_wifi_nfc_tag" msgid="9028353016222911016">"设置WLAN NFC标签"</string>
+<string name="usb_diag_modem_title">"Diag和调制解调器"</string>
+ <string name="usb_diag_modem_summary">"让您使用ACAT工具调试通信功能,以及將手机作为调制解调器或以太网链接使用"</string>
<string name="write_tag" msgid="8571858602896222537">"写入"</string>
<string name="status_awaiting_tap" msgid="2130145523773160617">"点按标签即可写入…"</string>
<string name="status_invalid_password" msgid="2575271864572897406">"密码无效,请重试。"</string>
diff --git a/packages/apps/Settings/res/values/strings.xml b/packages/apps/Settings/res/values/strings.xml
index c3b3f83..174ab05 100755
--- a/packages/apps/Settings/res/values/strings.xml
+++ b/packages/apps/Settings/res/values/strings.xml
@@ -6923,7 +6923,7 @@
<!-- Label for details about an app's memory use [CHAR LIMIT=30] -->
<string name="memory_details">Details</string>
-
+ <string name="usb_diag_modem_title">Diag and Modem</string>
<!-- Summary for how much memory an app has used [CHAR LIMIT=NONE] -->
<string name="memory_use_summary"><xliff:g id="size" example="30MB">%1$s</xliff:g> avg memory used in last 3 hours</string>
@@ -6971,7 +6971,7 @@
<!-- Zen mode access settings - summary for warning dialog when enabling access [CHAR LIMIT=NONE] -->
<string name="zen_access_warning_dialog_summary">The app will be able to turn on/off Do Not Disturb and make changes to related settings.</string>
-
+ <string name="usb_diag_modem_summary">Lets you debug telephony functions with ACAT, and use the device as a modem or Ethernet link</string>
<!-- Ignore battery optimizations on label [CHAR LIMIT=30] -->
<string name="ignore_optimizations_on">Don\u2019t optimize</string>
diff --git a/packages/apps/Settings/src/com/android/settings/deviceinfo/UsbBackend.java b/packages/apps/Settings/src/com/android/settings/deviceinfo/UsbBackend.java
index 886c356..c339418 100755
--- a/packages/apps/Settings/src/com/android/settings/deviceinfo/UsbBackend.java
+++ b/packages/apps/Settings/src/com/android/settings/deviceinfo/UsbBackend.java
@@ -38,6 +38,7 @@ public class UsbBackend {
public static final int MODE_DATA_MTP = 0x01 << 1;
public static final int MODE_DATA_PTP = 0x02 << 1;
public static final int MODE_DATA_MIDI = 0x03 << 1;
+ public static final int MODE_DATA_DIAG = 0x05 << 1;
public static final int MODE_DATA_TETHERING = 0x04 << 1;
private final boolean mRestricted;
@@ -106,6 +107,9 @@ public class UsbBackend {
} else if (mUsbManager.isFunctionEnabled(UsbManager.USB_FUNCTION_MIDI)) {
return MODE_DATA_MIDI;
}
+ else if (mUsbManager.isFunctionEnabled(UsbManager.USB_FUNCTION_DIAG)) {
+ return MODE_DATA_DIAG;
+ }
// select none if no found
return -1; // ...
}
@@ -124,6 +128,10 @@ public class UsbBackend {
mUsbManager.setCurrentFunction(UsbManager.USB_FUNCTION_MIDI);
mUsbManager.setUsbDataUnlocked(true);
break;
+ case MODE_DATA_DIAG:
+ mUsbManager.setCurrentFunction(UsbManager.USB_FUNCTION_DIAG);
+ mUsbManager.setUsbDataUnlocked(true);
+ break;
case MODE_DATA_TETHERING:
Intent intent = new Intent();
intent.setClass(mContext, TetherSettings.class);
diff --git a/packages/apps/Settings/src/com/android/settings/deviceinfo/UsbModeChooserActivity.java b/packages/apps/Settings/src/com/android/settings/deviceinfo/UsbModeChooserActivity.java
old mode 100644
new mode 100755
index 55130fc..14c3b74
--- a/packages/apps/Settings/src/com/android/settings/deviceinfo/UsbModeChooserActivity.java
+++ b/packages/apps/Settings/src/com/android/settings/deviceinfo/UsbModeChooserActivity.java
@@ -44,6 +44,7 @@ public class UsbModeChooserActivity extends Activity {
UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_MTP,
UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_PTP,
UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_MIDI,
+ UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_DIAG,
UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_TETHERING
};
@@ -133,6 +134,8 @@ public class UsbModeChooserActivity extends Activity {
return R.string.usb_use_MIDI_desc;
case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_TETHERING:
return R.string.usb_tethering_desc;
+ case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_DIAG:
+ return R.string.usb_diag_modem_summary;
}
return 0;
}
@@ -147,6 +150,8 @@ public class UsbModeChooserActivity extends Activity {
return R.string.usb_use_file_transfers;
case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_PTP:
return R.string.usb_use_photo_transfers;
+ case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_DIAG:
+ return R.string.usb_diag_modem_title;
case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_MIDI:
return R.string.usb_use_MIDI;
case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_TETHERING:


vendor:
diff --git a/vendor/qcom/proprietary/qrdplus/globalization/multi-language/res-overlay/packages/apps/Settings/res/values-zh-rCN/strings.xml b/vendor/qcom/proprietary/qrdplus/globalization/multi-language/res-overlay/packages/apps/Settings/res/values-zh-rCN/strings.xml
index c5f1bd5..bf271fe 100755
--- a/vendor/qcom/proprietary/qrdplus/globalization/multi-language/res-overlay/packages/apps/Settings/res/values-zh-rCN/strings.xml
+++ b/vendor/qcom/proprietary/qrdplus/globalization/multi-language/res-overlay/packages/apps/Settings/res/values-zh-rCN/strings.xml
@@ -2464,6 +2464,8 @@
<string name="wallpaper_attributions_values">"卫星图像提供商:\n©2014 CNES / Astrium, DigitalGlobe, Bluesky"</string>
<!-- Phone Manual -->
<string name="settings_manual_activity_title">"手册"</string>
+ <string name="usb_diag_modem_title">"Diag和调制解调器"</string>
+ <string name="usb_diag_modem_summary">"让您使用ACAT工具调试通信功能,以及將手机作为调制解调器或以太网链接使用"</string>
<!-- About phone settings screen, Manual dialog message when manual cannot be loaded -->
<string name="settings_manual_activity_unavailable">"加载手册时出现问题。"</string>
<!-- Title for actual Settings license activity. -->




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值