TCP远程控制命令协议

一、 概述

无线局域实现可靠的网络通讯,TCPC/S和UDP协议手机及其他接入设备(简称手机)作为客户端,背景音乐网关设备(简称设备)作为服务

1、服务端为被动端,当接收到命令后做出相应的反应,并根据需要决定是否返回数据。

2、客户端为主动端,根据实际需要发送指令和数据,当发出命令后,服务端返回当前指令及相关数据。

3、客户端先用startBroadCast函数广播心跳包(发送心跳包时不带数据表示为客户端),当服务端收到心跳包后,返回机器型号,表示成功连接。连接成功后就可以发送其它指令的相关动作。如房间号和房间名等所有指令。

4、每条指令发出后都有返回信息,当检测到返回的的信息后,根据需要作出处理,再做后续动作。

5本指令集支持TCP协议和UDP协议,即客户可以选择是TCP还是UDP进行通讯。

 

以下是播放指令示例在网络调试助手上的调试界面:

选择UDP

 

 

 

端口号:8080

 

1013日新增指令

 

选择TCP

 

 


二、 数据包格式

客户端和服务端,发送的数据包格式完全相同。

通讯传输为异步方式,并以字节为单位。

格式

起始位

包长度

协议号

信息内容

帧序列号

停止位

长度(Byte)

2

2

1

N

1

2

固定值

0x7E 0x7E

4+N

 

 

0x01

0x0D 0x0A

 

 

1. 起始位

2。固定值,统一为十六进制0x7E 0x7E

2. 包长度

2字节。高位在前低位在后

长度=协议号+信息内容+帧序列号+停止位,共(4+NByte,信息内容为不定长字段。

3. 协议号

不同的功能对应相应的协议号,详见“指令集”。

协议

定义(名)

0xC0

TCPCMD_PALPITANT

心跳包,服务端收到对方的心跳包返回机器型号(如BM209)

0xC1

TCPCMD_PLAY_PAUSE

音乐播放/暂停

0xC2

TCPCMD_PRE

音乐上一首

0xC3

TCPCMD_NEXT

音乐下一首

0xC4

TCPCMD_LOOPMODE

音乐循环模式

0xC5

TCPCMD_VOL_CTRL

音乐播放声音控制

0XC6

TCPCMD_PLAYSTATUS

音乐播放状态

0XC7

TCPCMD_SHUTDOWN

关机

0xC8

TCPCMD_DURATION

获取当前播放歌曲时长

0xC9

TCPCMD_POSITION

获取进度位置

0xCA

TCPCMD_SONGNAME

获取当前播放歌曲

0xCB

TCPCMD_ROOMNAME

返回房间名号,用"::"分隔

0xCC

TCPCMD_PROGRESS

设置进度条

0xCD

TCPCMD_MEDIATYPE

1音乐,2电台, 3:视频,4:图片

0xCE

TCPCMD_MEDIA_LIST_SIZE

返回歌曲总数

0xCF

TCPCMD_GET_MEDIA_LIST

每次取一条,返回歌曲名和播放时长

0xD0

TCPCMD_PLAY_POS

播放列表中的某一位置的歌曲

0xD1

TCPCMD_ARTIST

获取当前歌曲艺术家,仅限音频

0xD2

TCPCMD_VOL_SET

设置音量

0xD3

TCPCMD_VOL_GET

获取音量

0xD4

TCPCMD_UPDATE_ROOMNAME

修改房间名

0xD5

TCPCMD_UPDATE_ROOMNO

修改房间号

0xD6

TCPCMD_SIWTCH_SOUND_SOURCE

获取和设置音源

0xD7

TCPCMD_GET_TIMER_SIZE

获取定时器列表总数,不带参数

0xD8

TCPCMD_GET_TIMER_DATA

获取定时器数据

0xD9

TCPCMD_SET_TIMER_DATA

设置定时器

0xDA

TCPCMD_GET_TIMER_SWITCH

获取定时器开关

0xDB

TCPCMD_SET_TIMER_SWITCH

设置定时器开关

0xDC

TCPCMD_GET_SUBAREA_CONTROL

获取分区控制,仅限机型BM209

0xDD

TCPCMD_SET_SUBAREA_CONTROL

设置分区控制,仅限机型BM209

0xDE

TCPCMD_GET_EQ

不带参数获取当前音效

0xDF

TCPCMD_SET_EQ

设置音效

0xE0

TCPCMD_GET_EQ_SWITCH

获取音效开关

0xE1

TCPCMD_SET_EQ_SWITCH

带参数0或1设置音效开关

 

4. 信息内容

N字节

按不同的应用,对应相应的“协议号”,确定具体的内容。

5. 帧序列号

帧序列号1个字节,默认用0x01代入。

帧序列号器端暂不做检查,可写可不写。

 

6. 校验码

校验码机器端暂不做检查,可写可不写。

 

7. 停止位

2。固定值,统一为十六进制0x0D 0x0A

 

三、 指令集

public final static byte TCPCMD_PALPITANT = (byte) 0xC0;

命令示例:0x7e0x7e0x00x40xc00x10xd0xa

7e 7e 0 4 c0 1 d a

如果是服务端,返回机器型号,如"BM209"

 

public final static byte TCPCMD_PLAY_PAUSE = (byte) 0xC1;

命令示例:0x7e0x7e0x00x40xc10x10xd0xa

7e 7e 0 4 c1 1 d a

不带参数返回当前指令

815新增说明:

1、当媒体是音频或电台时,可随时发送此指令,进行播放和暂停。

2、当媒体是视频时,且是通过TCP指令启动的,可以通过此命令进行关闭。

关闭后系统将媒体设置成音频类型。如要重启视频,需重新设置类型。

3、当媒体是图片时,且是通过TCP指令启动的,可以通过此命令进行关闭。

关闭后系统将媒体设置成音频类型。如要重启视频,需重新设置类型。

 

public final static byte TCPCMD_PRE = (byte) 0xC2;

命令示例:0x7e0x7e0x00x40xc20x10xd0xa

不带参数返回当前指令

815新增说明:仅限音频和电台。

 

public final static byte TCPCMD_NEXT = (byte) 0xC3;

命令示例:0x7e0x7e0x00x40xc30x10xd0xa

7e 7e 0 4 c3 1 d a

不带参数返回当前指令

815新增说明:仅限音频和电台。

 

public final static byte TCPCMD_LOOPMODE = (byte) 0xC4;

带参数'0',获取当前播放模式。

命令示例:0x7e0x7e0x00x50xc40x300x10xd0xa

带参数'1'切换当前播放模式

命令示例:0x7e0x7e0x00x50xc40x310x10xd0xa

 

带参数返回数字

public static final int MPM_ERROR = -1; // error

public static final int MPM_NORMAL = 0; // normal

public static final int MPM_REPEAT_ALL = 1; // repeat all

public static final int MPM_REPEAT_ONE = 2; // repeat one

public static final int MPM_SHUFFLE = 3; // shuffle

 

 

public final static byte TCPCMD_VOL_CTRL = (byte) 0xC5;

//'0'音量减,

0x7e0x7e0x00x50xc50x300x10xd0xa

//'1'音量加

0x7e0x7e0x00x50xc50x310x10xd0xa

带参数返回字符0’或‘1

812更正:

带参数返回数字01

 

public final static byte TCPCMD_PLAYSTATUS = (byte) 0xC6;

命令示例:0x7e0x7e0x00x40xc60x10xd0xa

返回播放状态如下:

前面是返回字符串“-1”、“0”、“1”

public static final int MPS_NOFILE = -1;// no file

public static final int MPS_INVALID = 0;// invalid

public static final int MPS_PLAYING = 1;// play

public static final int MPS_PAUSE = 2;// pause

public static final int MPS_STOP = 3; // pause

public static final int MPS_PARESYNC = 4;// paresync

public static final int MPS_PARECOMPLETE = 5;// parecomplete

public static final int MPS_COMPLETE = 6;// complete

812更正:

等,现改成带参数返回数字012

 

 

public final static byte TCPCMD_SHUTDOWN = (byte) 0xC7;//暂时无此功能

 

public final static byte TCPCMD_DURATION = (byte) 0xC8;

获取当前播放歌曲时长

命令示例:0x7e0x7e0x00x40xc80x10xd0xa

带参数返回毫秒级时间数字

 

 

public final static byte TCPCMD_POSITION = (byte) 0xC9;

获取进度位置

命令示例:0x7e0x7e0x00x40xc90x10xd0xa

带参数返回毫秒级时间数字

 

public final static byte TCPCMD_SONGNAME = (byte) 0xCA;

获取当前播放歌曲名字

命令示例:0x7e0x7e0x00x40xca0x10xd0xa

带参数返回歌曲名字

 

public final static byte TCPCMD_ROOMNAME = (byte) 0xCB;

命令示例:0x7e0x7e0x00x40xcb0x10xd0xa

带参数返回房间名和房间号,用"::"分隔

 

public final static byte TCPCMD_PROGRESS = (byte) 0xCC;

设置进度条,需带参数,参数为时间,毫秒级

命令示例:0x7e0x7e0x00x80xcc0x750x660x00x00x10xd0xa

4字节的含义?

答:此处为毫秒级时间,需转换成十进制。低位数在前,高位数在后。

带参数以原样指令返回

 

public final static byte TCPCMD_MEDIATYPE = (byte) 0xCD;

设置媒体类型

参数为1是音乐

命令示例:0x7e0x7e0x00x80xcd0x10x00x00x00x10xd0xa

参数为2是电台

命令示例:0x7e0x7e0x00x80xcd0x20x00x00x00x10xd0xa

以上以BM209为例。

 

BM209BM205,BM206等机器型号 参数对应

1:音频   2:电台(电台已取消)   3:视频   4:图片

 

public final static byte TCPCMD_MEDIA_LIST_SIZE = (byte) 0xCE;

获取媒体总数,获取前先设置媒体类型,参照设置媒体类型指令

命令示例:0x7e0x7e0x00x40xce0x10xd0xa

带数字参数返回媒体总数

 

public final static byte TCPCMD_GET_MEDIA_LIST = (byte) 0xCF;

获取媒体列表,获取前先获取媒体总数,参照设置指令。

范围0~size-1,每次取一条。

 

开始获取第一条

命令示例:0x7e0x7e0x00x80xcf0x00x00x00x00x10xd0xa

取第二条

命令示例:0x7e0x7e0x00x80xcf0x10x00x00x00x10xd0xa

返回歌曲名,播放歌曲名字、时长、艺术家、路径等,用"::"分隔

 

815日新增返回说明:

添加路径用于定时器中开机、播放设置中设置歌曲。

 

音频取第9条转换后的数据如下:

9::爱如潮水::275304::张信哲::/mnt/internal_sd/爱如潮水-张信哲.mp3

 

 

public final static byte TCPCMD_PLAY_POS = (byte) 0xD0;

设置前先确定是否已设置当前媒体类型,参照设置媒体类型指令

再播放列表中的某一位置的歌曲

命令示例:0x7e0x7e0x00x80xd00x90x00x00x00x10xd0xa

带参数以原指令返回

 

public final static byte TCPCMD_ARTIST = (byte) 0xD1;

获取当前歌曲艺术家,仅限音频

命令示例:0x7e0x7e0x00x40xd10x10xd0xa

带参数返回艺术家名字。

 

public final static byte T CPCMD_VOL_SET = (byte) 0xD2;

设置音量,参数为1~15

示例:0x7e0x7e0x00x80xd20x60x00x00x00x10xd0xa

带参数以原指令返回

 

public final static byte TCPCMD_VOL_GET = (byte) 0xD3;

获取音量。

示例:0x7e0x7e0x00x40xd30x10xd0xa

带参数返回音量,返回范围1~15

 

public final static byte TCPCMD_UPDATE_ROOMNAME = (byte) 0xD4;

修改房间名

带参数返回房间名

 

public final static byte TCPCMD_UPDATE_ROOMNO = (byte) 0xD5;

修改房间号

带参数返回房间号

 

public final static byte TCPCMD_SIWTCH_SOUND_SOURCE = (byte) 0xD6;

获取和设置音源。

1、获取时带参数-1,返回当前音源

示例:0x7e0x7e0x00x80xd60xff0xff0xff0xff0x10xd0xa

红色部分转换成整数即为-1

2、设置时带参数0~5,需根据机型而定,返回如下数字。

public static final int AUDIO_SOURCE_LOCAL = 0;

public static final int AUDIO_SOURCE_LINEIN_1 = 1;

public static final int AUDIO_SOURCE_LINEIN_2 = 2;

public static final int AUDIO_SOURCE_BLUE = 3;

public static final int AUDIO_SOURCE_UX = 4;

public static final int AUDIO_SOURCE_Microphone = 5;

示例(BM209外部音源1):

0x7e0x7e0x00x80xd60x10x00x00x00x10xd0xa

注:外部音源2205独有的。蓝牙是209U6,U9才有的,话筒是U6,U9独有的。本地和外部1是所以安卓机型都有的。

public final static byte TCPCMD_GET_TIMER_SIZE = (byte) 0xD7;

获取定时器列表总数,不带参数

示例:0x7e0x7e0x00x40xd70x10xd0xa

带参数返回列表总数

 

public final static byte TCPCMD_GET_TIMER_DATA = (byte) 0xD8;

获取定时器数据,带参数数字0~n

返回定时器数据,数据格式为:

"TimerBean [id=" + id + ", title=" + title + ", enable="

+ enable + ", type=" + type + ", state=" + state + ", hour="

+ hour + ", minute=" + minute + ", from=" + from

+ ", musicType=" + musicType + ", musicTitle=" + musicTitle

+ ", musicPath=" + musicPath + ", funcType=" + funcType + "]"

以下是接收到的数据示例:

TimerBean [id=1, title=, enable=false, type=timer_wake_up, state=511, hour=20, minute=22, from=0, musicType=0, musicTitle=, musicPath=, funcType=music]

 

public final static byte TCPCMD_SET_TIMER_DATA = (byte) 0xD9;

设置定时器:

参数格式为:

命令+数据内容:

1、命令

添加命令 "add::";

删除命令 "del::"

修改命令 "update::"

2、数据内容:

"TimerBean [id=" + id + ", title=" + title + ", enable="

+ enable + ", type=" + type + ", state=" + state + ", hour="

+ hour + ", minute=" + minute + ", from=" + from

+ ", musicType=" + musicType + ", musicTitle=" + musicTitle

+ ", musicPath=" + musicPath + ", funcType=" + funcType + "]"

3、最后合成参数,如添加:

"add::"+"TimerBean [id=" + id + ", title=" + title + ", enable="

+ enable + ", type=" + type + ", state=" + state + ", hour="

+ hour + ", minute=" + minute + ", from=" + from

+ ", musicType=" + musicType + ", musicTitle=" + musicTitle

+ ", musicPath=" + musicPath + ", funcType=" + funcType + "]"

4、返回参数为adddelupdate;

 

以下是修改数据示例

update::TimerBean [id=2119, hostTBid=1, title=, enable=true, type=timer_wake_up, state=511, hour=20, minute=21, musicType=0, musicTitle=, musicPath=]

 

public final static byte TCPCMD_GET_TIMER_SWITCH = (byte) 0xDA;

获取定时器开关,带参数开关0~3,如下:

定时器类型:

0:开机

1:关机

2:播放

3:停止

示例:开机

0x7e0x7e0x00x80xda0x00x00x00x00x10xd0xa

                       0000表示?每字节的含义

答:此处转换成十制后,就是数字0,代表定时器类型为开机。即获取开机开关。

 

返回参数格式,定时类型+开关,如关机且开关开,返回1::1,关机且开关关,返回1::0

 

public final static byte TCPCMD_SET_TIMER_SWITCH = (byte) 0xDB;

定时器类型:

0:开机

1:关机

2:播放

3:停止

设置定时器开关。带参数格式如下:

定时器类型+开关(10

示例:开机

0x7e0x7e0x00x80xdb0x300x3a0x3a0x300x10xd0xa

  0::0代表什么含义?

答:此处表示为开机类型,且开关为关,“::”为分隔符。

返回参数跟获取定时器开关返回参数一样。

public final static byte TCPCMD_GET_SUBAREA_CONTROL = (byte) 0xDC;

分区: 0~3

音量: 1~15

开关:0~1

 

获取分区控制,机型BM209,带参数分区0~3机型U6,U9,带参数分区0~1.其他型号机型无分区。

示例:0分区

0x7e0x7e0x00x80xdc0x00x00x00x00x10xd0xa

4字节的含义?

答:转换成十进制后为数字0,即为0分区。

返回参数格式,分区::音量::开关。

 

public final static byte TCPCMD_SET_SUBAREA_CONTROL = (byte) 0xDD;

设置分区控制,仅限机型BM209U6U9参数格式:分区::音量::开关。

示例:

0x7e0x7e0x00xc0xdd0x300x3a0x3a0x310x340x3a0x3a0x300x10xd0xa

带参数以原指令返回

 

public final static byte TCPCMD_GET_EQ = (byte) 0xDE;

不带参数获取当前音效

示例:0x7e0x7e0x00x40xde0x10xd0xa

返回当前音效

public final static byte TCPCMD_SET_EQ = (byte) 0xDF;

设置音效,参数范围0~7,生效需开启音效开关。

1->"普通/Normal"

2->"摇滚/Rock"

3->"流行/Pop"

4->"舞曲/Dance"

5->"嘻哈/Hip-Hop"

6->"古典/Classic"

7->"超重低音/Bass"

8->"人声/Vocal"

示例:舞曲/Dance

0x7e0x7e0x00x80xdf0x30x00x00x00x10xd0xa

                与舞曲不对应

答:不对,应该看成0x3,而不是0x30

带参数以原指令返回。

 

public final static byte TCPCMD_GET_EQ_SWITCH = (byte) 0xE0;

不带参数,获取当前音效开关

示例:0x7e0x7e0x00x40xe00x10xd0xa

带参数01返回,0表示关,1表示开

 

public final static byte TCPCMD_SET_EQ_SWITCH = (byte) 0xE1;

带参数01设置音效开关。

示例:关

0x7e0x7e0x00x80xe10x00x00x00x00x10xd0xa

答:需转换成十进制。转换后就是数字0,表示关。

带参数以原指令返回。

 

1013日新增指令

public final static byte TCPCMD_SET_MUTE = (byte) 0xE3;

不带参数设置静音开关。

示例:0x7e0x7e0x00x40xe30x10xd0xa

带参数以原指令返回。