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 @@ "鲜亮 RGB SRGB 颜色 自然 标准" "滑动 密码 图案 PIN码" "设置WLAN NFC标签" +"Diag和调制解调器" + "让您使用ACAT工具调试通信功能,以及將手机作为调制解调器或以太网链接使用" "写入" "点按标签即可写入…" "密码无效,请重试。" 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 @@ Details - + Diag and Modem %1$s avg memory used in last 3 hours @@ -6971,7 +6971,7 @@ The app will be able to turn on/off Do Not Disturb and make changes to related settings. - + Lets you debug telephony functions with ACAT, and use the device as a modem or Ethernet link Don\u2019t optimize 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 @@ "卫星图像提供商:\n©2014 CNES / Astrium, DigitalGlobe, Bluesky" "手册" + "Diag和调制解调器" + "让您使用ACAT工具调试通信功能,以及將手机作为调制解调器或以太网链接使用" "加载手册时出现问题。"




本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部