【移動應(yīng)用開發(fā)技術(shù)】自制應(yīng)用層協(xié)議的編寫_第1頁
【移動應(yīng)用開發(fā)技術(shù)】自制應(yīng)用層協(xié)議的編寫_第2頁
【移動應(yīng)用開發(fā)技術(shù)】自制應(yīng)用層協(xié)議的編寫_第3頁
【移動應(yīng)用開發(fā)技術(shù)】自制應(yīng)用層協(xié)議的編寫_第4頁
【移動應(yīng)用開發(fā)技術(shù)】自制應(yīng)用層協(xié)議的編寫_第5頁
免費預(yù)覽已結(jié)束,剩余2頁可下載查看

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論