導航:首頁 > 操作系統 > android開發協議

android開發協議

發布時間:2023-06-07 08:00:41

㈠ 什麼是安卓協議

安卓協議是 手機端和手機操作系統之間的一個運行,交換數據,對等的一個計算機內部程序稱作「協議」這個協議程序是系統和機器之間的一個重要對介面憑證和工式。其實就是安卓系統允許什麼樣的手機,什麼樣的程序,以什麼要求來運行這個程序的一個限定。

㈡ 安卓wifi開發,要使用modbus協議,請問該怎麼使用

"你好 想問你一個問題~如果我用wifi使用socket發送讀寫寄存器命令,wifi端用rtu能實現嗎?還是必須用modbus/tcp?"

可以. MODBUS其實可以從硬體層與軟體層來看 . 硬體層就是通訊的媒介, 一般就是CAT網線或者是RS485這兩種居多.

軟體層面則分為三個類別, 1: MODBUS TCP(可簡單理解為加了一個封包頭的MODBUS命令)
2. MODBUS RTU (簡單理解為具有CRC校驗機制的MODBUS令令) 3. MODBUS ASCII (與RTU相同, 只是命令改為ASCII明碼)

再回來看您的問題, WiFi是基於SCOKET也就是TCP方式通訊. 這只是一條道路, 只要MODBUS主機與MODBUS從機事先說好了, 兩者都用RTU(具有CRC校驗的方式)做通訊, 就可以正常的通訊.
這種方式, 一般俗稱為 "RTU OVER TCP" 的MODBUS協定. 即把RTU的格式直接透過SOCKET發送或接收, 就不像MODBUS TCP帶前特定的包頭了.

另外, 也有人利用UDP來傳遞MODBUS命令的. 也是OK的. 總之, 硬體層與軟體層只要主從機間一致了. 都能通訊上的. 唯一的差別是與其它MODBUS設備的兼容度問題了. 最通用也就是兼容性最高的, 就是 "MODBUS TCP" 與 "MODBUS RTU" 這兩種了.

android bluetooth hid協議的開發求助

Android Bluetooth HID實現詳解


Android 關於藍牙的部分使用的是BlueZ協議棧。但是直到目前2.3.3都沒有擴展HID的profile,只是實現了最基本的Handset和d2dp的profile,所以我們的工作涉及到從應用到jni三層的修改,具體修改文件如圖所示,綠色表示新建的類,橙色表示修改的類。

一. 本地層


路徑:framework/base/core/jni/

參照android_server_BluetoothA2dpService.cpp新建android_server_bluetoothHidServer.cpp。該類中主要是通過dbus對bluez協議棧的訪問,dbus 的通用方法都在android_bluetooth_common.cpp中實現,我們做的僅僅是通過dbus_func_args_async調用到bluez提供的input介面。

主要實現以下兩個方法函數:

static jboolean connectSinkNative(JNIEnv *env, jobject object, jstring path) {


#ifdef HAVE_BLUETOOTH


LOGV(__FUNCTION__);


if (nat) {


const char *c_path = env->GetStringUTFChars(path, NULL);



bool ret = dbus_func_args_async(env, nat->conn, -1, NULL, NULL, nat,


c_path, "org.bluez.Input", "Connect",


DBUS_TYPE_INVALID);



env->ReleaseStringUTFChars(path, c_path);


return ret ? JNI_TRUE : JNI_FALSE;


}


#endif


return JNI_FALSE;


}



static jboolean disconnectSinkNative(JNIEnv *env, jobject object,


jstring path) {


#ifdef HAVE_BLUETOOTH


LOGV(__FUNCTION__);


if (nat) {


const char *c_path = env->GetStringUTFChars(path, NULL);



bool ret = dbus_func_args_async(env, nat->conn, -1, NULL, NULL, nat,


c_path, "org.bluez.Input", "Disconnect",


DBUS_TYPE_INVALID);



env->ReleaseStringUTFChars(path, c_path);


return ret ? JNI_TRUE : JNI_FALSE;


}


#endif


return JNI_FALSE;


}

這里要注意將該文件添加到AndroidRuntime.cpp和Android.mk中,否則不會編譯到動態庫中。

此部分編譯後最終生成libandroid_runtime.so並替換到system/libs下

二.Framework的java部分

路徑framework/base/java/android/server/中添加BluetoothHidService.java文件

路徑framework/base/java/android/bluetooth/中添加BluetoothHid.java和IBluetoothHid.aidl文件。


interface IBluetoothHid {


boolean connect(in BluetoothDevice device);


boolean disconnect(in BluetoothDevice device);


int getState(in BluetoothDevice device);


boolean setPriority(in BluetoothDevice device, int priority);


int getPriority(in BluetoothDevice device);


}

BluetoothHid.java中主要的兩個方法connect和disconnect間接地通過aidl訪問BluetoothHidService。這里主要是實現跨進程並為上層提供可直接訪問的方法。

由此framework的主要部分打包生成framework.Jar並最終部署到system/framework里。

三.應用(Settings.apk)

最後需要修改應用部分,應用部分的修改點比較分散,不想框架層那樣整塊模仿A2DP的樣子那麼方便,但也不是說jni部分有多麼容易。反而對於我這種對C語言不熟悉的人來說,修改jni是最頭疼得事了。好在藍牙HID這部分框架層的修改都是整塊進行的,理解上還算比價容易。

總的來說在Settings.apk中要修改的文件主要是這么幾個:

LocalBluetoothProfileManager.java這里主要提供一個HID的profile以便應用層訪問。建一個HIDProfile的class調用framework中的BluetoothHID。實際上就是通過bender機制調用了BluetoothHidService。

CashedBluetoothDevice中添加顯示藍牙鍵盤的圖標,BluetoothPairingDialog中則需要添加一段藍牙配對驗證處理的代碼,我是參照i9000中先彈出一個隨機數,然後在鍵盤中敲入相同的隨機數即配對成功,具體實現如下:


// HID


if (isDeviceKeyboard(mDevice)) {


String pin = String.format("%06d", Long.valueOf(Math


.abs(new Random().nextLong() % 1000000L)));


mPairingView.setVisibility(View.GONE);


messageView.setText(getString(


R.string.bluetooth_enter_keyboard_pin_msg, pin, name));



byte[] bytePin = BluetoothDevice.convertPinToBytes(pin);


if (bytePin != null) {


mDevice.setPin(bytePin);


}


}


……


}

轉載

閱讀全文

與android開發協議相關的資料

熱點內容
36歲程序員近況 瀏覽:283
哪裡可以下載不加密的歌 瀏覽:934
隱藏文件夾是什麼梗 瀏覽:918
插件注冊命令 瀏覽:497
梁一端加密一端不加密規范 瀏覽:82
代碼行數統計命令 瀏覽:104
單片機中2K表示什麼 瀏覽:482
紫禁城為什麼會斷開伺服器 瀏覽:580
華為手機的方舟編譯器在哪呢 瀏覽:123
下載壓縮虐殺原形2 瀏覽:905
linux腳本cd 瀏覽:167
間架結構pdf 瀏覽:843
重慶農村商業銀行app怎麼老出問題 瀏覽:471
慧編程配置要求 瀏覽:673
數控機床編程與操作視頻 瀏覽:461
文件夾資料誤刪怎麼辦 瀏覽:87
手機app怎麼下載安裝 瀏覽:493
最新的java版本 瀏覽:994
萬卷小說緩存在哪個文件夾 瀏覽:687
st單片機怎樣燒 瀏覽:872