




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】自制應(yīng)用層協(xié)議的編寫
近日編寫了一個手機的燈控系統(tǒng):
因為添加了許多以前不具備的功能,并且為了數(shù)據(jù)傳輸更加穩(wěn)定,格式更加規(guī)范,并且為了以后再進行同類項目的格式統(tǒng)一,本次特地根據(jù)計算機網(wǎng)絡(luò),在已有的協(xié)議HipulseU基礎(chǔ)上進一步改造,自制了一套應(yīng)用層的協(xié)議。首先本套協(xié)議的格式定義如下:協(xié)議格式:SOI
7EH
起始位標志
1字節(jié)
ASCII:
7EHVER
10H
1字節(jié)
ASCII:31H,30HADR
01H
1字節(jié)
ASCII:30H,31HCID1
命令41H
運行控制命令
42H
配置文件讀寫命令
43H
時鐘控制命令
44H
寫EEPROM命令
45H
寫文件名CID2
輔助命令
1字節(jié)
CID1=41H時
運行命令
CID2:
10H:參數(shù)配置信息n條每條14字節(jié)HEX(28字節(jié)ASCII碼)
13H:參數(shù)運行EEPROM中的配置信息開機缺省。
14H:
參數(shù)運行CID1=45H中指定的文件。
20H:停止命令
CID1=42H時
寫配置文件
CID2:
00H:~FEH
寫配置文件
FFH:
寫配置文件,續(xù)寫配置文件結(jié)束
CID1=43H:時鐘
CID2:
00H:寫時鐘命令格式:
年-月-日-星期-時-分-秒(分別為兩個字節(jié)ASCII碼)
01H:讀時鐘命令格式:
年-月-日-星期-時-分-秒
02H:設(shè)置開機關(guān)機時間
格式
開始:(年-月-日-參數(shù)-時-分-秒)
結(jié)束:(年-月-日-參數(shù)-時-分-秒)
參數(shù):兩字節(jié)ASCII碼
D7
D6
D5
D4
D3
D2
D1
D00
1
1
1
1
1
1
1
星期
日
六
五
四
三
二
一1
0
0
0
0
0
0
0年月日十分秒1
1
1
CID1=44H時向EEPROM寫配置信息
CID2:
00H:向EEPROM寫配置信息
CID1=45H:文件名
CID2:
00H:文件名(寫入或運行的文件名,1字節(jié))
CID1=46H:預(yù)覽設(shè)置
CID2:
00H:1倍
01H:10倍
02H:100倍
03H:1000倍
LENGTH
2字節(jié)長度
先傳高字節(jié)再傳低字節(jié)
其中:校驗碼:LCHKSUM=D15~D12
長度標示碼:LENID=D11~D0
表示INFO中傳送的ASCII碼字節(jié)數(shù)
校驗碼計算:D11~D8+D7~D4+D3~D0,求和后模16余數(shù)取反加1INFO數(shù)據(jù)格式
COMMANDINFO
CHKSUM數(shù)據(jù)格式
CHKSUM的計算是除SOI,EOI和CHKSUM外,其它字符按ASCII碼值累加求和,所得結(jié)果模65536余數(shù)取反加1
EOI0DH
結(jié)束碼
響應(yīng)信息SOI
7EH
起始位標志
1字節(jié)
ASCII:
7EHVER
10H
1字節(jié)
ASCII:31H,30HADR
01H
1字節(jié)
ASCII:30H,31HCID1
60HCID2
RTN
LENGTH
2字節(jié)長度
先傳高字節(jié)再傳低字節(jié)
其中:校驗碼:LCHKSUM=D15~D12
長度標示碼:LENID=D11~D0
表示INFO中傳送的ASCII碼字節(jié)數(shù)
校驗碼計算:D11~D8+D7~D4+D3~D0,求和后模16余數(shù)取反加1INFO數(shù)據(jù)格式
DATAINFO
CHKSUM數(shù)據(jù)格式
CHKSUM的計算是除SOI,EOI和CHKSUM外,其它字符按ASCII碼值累加求和,所得結(jié)果模65536余數(shù)取反加1
EOI0DH
結(jié)束碼
RTN:00:正常
01:VER錯
02:CHKSUM錯
03:LCHKSUM錯
04:
CID2無效
05:命令格式錯
06:無效命令
E0:地址錯
E1~EFH:其它錯誤
12H:參數(shù)文件名
文件中存配置文件名每個配置文件名1字節(jié)(ASCII兩字節(jié))
11H:參數(shù)文件名
每個1字節(jié)(兩字節(jié)ASCII碼)協(xié)議中的所有內(nèi)容都是把一字節(jié)的內(nèi)容,用兩字節(jié)的ascii碼來替換,例如原本的內(nèi)容是一字節(jié)0x2f,最終會被替換為0x320x46(2的ascii碼是0x32,f的ascii碼是0x46)由于本次使用的是Android編程所以最終協(xié)議被封裝成java包,首先定義數(shù)據(jù)格式類把要傳輸?shù)臄?shù)據(jù)定義為Data類:public
class
Data
{private
byte[]
sol;private
byte[]
eol;private
byte[]
ver;private
byte[]
adr;private
byte[]
cid1;private
byte[]
cid2;private
byte[]
lenid;private
byte[]
info;private
byte[]
chksum;
//以下定義Data類的各個數(shù)據(jù)成員變量的getter和setter方法
}再定義一個DataOperator類用對,Data類進行各種操作。由于要進行十六進制代碼與ascii碼之間的轉(zhuǎn)換所以,要創(chuàng)建一個靜態(tài)數(shù)組來進行兩者的對應(yīng):public
class
Ascii
{
public
static
byte[]
ASCII
=
new
byte[]
{
0x30,
0x31,
0x32,
0x33,
0x34,
0x35,
0x36,
0x37,
0x38,
0x39,
0x41,
0x42,
0x43,
0x44,
0x45,
0x46
};
}下面主要介紹
LCHKSUM的計算方法和CHKSUN的計算方法:下面是LCHKSUM的計算方法,該方法通過對相應(yīng)的LENGTH內(nèi)容進行構(gòu)造LCHKSUM
public
byte[]
createLength_chksum(byte[]
src)
{
byte[]
result
=
new
byte[1];
//
用來記錄計算len_chksum時的中間轉(zhuǎn)換變量
int
len_check
=
0;
//
計算len_chksum先計算長度每個字節(jié)所代表的ascii碼的字符的真值和
for
(int
i
=
0;
i
<
3;
i++)
{
if
(src[i]
>
0x39)
{
len_check
=
len_check
+
(src[i]
&
0xff)
-
0x37;
}
else
{
len_check
=
len_check
+
(src[i]
&
0xff)
-
0x30;
}
}
//
System.out.println(len_check);
//
把相應(yīng)的和模16
len_check
%=
16;
//
再把結(jié)果取反
len_check
=
16
-
len_check;
//
得到結(jié)果的ascii碼的真值
if
(len_check
==
16)
{
result[0]
=
0;
}
else
{
result[0]
=
Ascii.ASCII[len_check];
}
//
System.out.println(result[0]);
return
result;
}下面是CHKSUM的計算方法,參數(shù)為整個數(shù)據(jù)(除了開始和結(jié)束位):public
byte[]
createChksum(byte[]
src)
{
//
用來記錄計算chksum時的中間轉(zhuǎn)換變量
int
check
=
0;
//
用來存放chksum結(jié)果
byte[]
result
=
new
byte[4];
//
計算每一字節(jié)的和
for
(int
i
=
1;
i
<
src.length;
i++)
{
//
System.out.println(src[i]);
int
a
=
src[i]
&
0xff;
check
=
check
+
a;
}
System.out.println(check);
//
把和對65535求余數(shù)
check
=
check
%
65536;
//
再把求余之后的結(jié)果取反
check
=
65536
-
check;
//
把最后的結(jié)果分為四字節(jié)的ascii碼
result[0]
=
Ascii.ASCII[((check
>>
12)
&
0x0000000f)];
result[1]
=
Ascii.ASCII[((
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二灰材料合同范例
- 一件代發(fā)合同范例
- 中標合同范例能談
- 供水材料合同范例
- 公司整體出售合同范例
- 上海市裝飾合同范例
- 產(chǎn)權(quán)分割商鋪銷售合同范例
- 倉儲新品補充協(xié)議合同范例
- 公路小修保養(yǎng)合同范例
- 2025年度美容院顧客權(quán)益及服務(wù)項目轉(zhuǎn)讓協(xié)議書
- GB/T 45229-2025劇場工藝安全要求
- 2025年廣州市黃埔區(qū)東區(qū)街招考社區(qū)居委會專職工作人員高頻重點模擬試卷提升(共500題附帶答案詳解)
- 2025年黑龍江省高職單招《職測》高頻必練考試題庫400題(含答案)
- GB 45184-2024眼視光產(chǎn)品元件安全技術(shù)規(guī)范
- 2025年湖南科技職業(yè)學(xué)院高職單招數(shù)學(xué)歷年(2016-2024)頻考點試題含答案解析
- 2025年新人教版八年級下冊物理全冊教案
- 《建筑電氣設(shè)計》課件
- 【地理】俄羅斯課件-2024-2025學(xué)年人教版(2024)地理七年級下冊
- 藥品使用風(fēng)險監(jiān)測與預(yù)警制度
- 《軟件實施方法論》課件
評論
0/150
提交評論