# 设备控制

## 发送消息

### 介绍

发送指令消息给音乐主机，消息的内容是通过CreateMessage创建，消息创建请参考该类的文档

### 方法原型

```
/**
 * 发送消息给机器端
 *
 * @param topic        地址
 * @param phoneMessage 消息
 */
public void sendMessage(String topic, PhoneMessage phoneMessage)
```

### 调用

使用MqttContorl对象调用

### 参数介绍

* topic：Deivie中的sendTopic
* phoneMessage：消息的Java bean 对象，通过CreateMessage创建，请参考CreateMessage的介绍

## 使用CreateMessage创建消息

### 介绍

创建操作设备的消息PhoneMessage的java bean，然后通过MqttControl对象把消息发送出去

### 获取对象

通过该类的静态方法直接获取

```
public static CreateMessage getInstance() {
        ...
 }
```

### 音乐下一曲

创建播放下一首的消息，控制的是当前房间

#### 方法原型

```
/**
*
* 创建播放下一首的消息
*
* @return 下一曲的CreateMessage
*/
public PhoneMessage musicNext();
```

### 音乐播放暂停

创建控制音乐播放暂停的消息，控制的是当前房间

### 方法原型

```
/**
* 创建播放暂停的消息
*
* @return 播放暂停的CreateMessage
*/
public PhoneMessage musicPlayOrPause();
```

### 音乐播放

创建控制音乐播放的消息，控制的是当前房间

#### 方法原型

```
/**
* 创建播放的消息
*
* @return 播放的CreateMessage
*/
public PhoneMessage musicPlay();
```

### 音乐暂停

创建控制音乐暂停的消息，控制的是当前房间

#### 方法原型

```
/**
* 创建暂停的消息
*
* @return 暂停的CreateMessage
*/
public PhoneMessage musicPause()
```

### 音乐上一首

创建控制音乐上一首的消息，控制的是当前房间

#### 方法原型

```
/**
 * 创建播放上一首的消息
 *
 * @return 上一曲的CreateMessage
 */
public PhoneMessage musicPre();
```

### 设置房间

设置当前控制的房间，此方法只有双分区的才有用

#### 方法原型

```
/**
 * 设置房间
 *
 * @param area 设置的房间   11:房间一   12:房间二    13:同步
 * @return 设置的CreateMessage
 */
public PhoneMessage musicArea(int area);
```

#### 参数介绍

* area：设置的房间号,CreateMEssage的常量

| 房间  | 参数名       | 参数值 |
| --- | --------- | --- |
| 区域一 | AREA1     | 11  |
| 区域二 | AREA2     | 12  |
| 同步  | AREA\_SYN | 13  |

### 设置意图音源

设置意图音源，可以用来控制音乐主机的页面，控制的是当前房间

#### 方法原型

```
/**
 * 设置意图音源
 *
 * @param flag 意图音源
 * @return 设置意图音源的CreateMessage
 */
public PhoneMessage musicFlag(int flag)
```

#### 参数介绍

* flag：需要设置的意图音源，参数如下

```
public static final int AREA_SYN = 13;//一键同步
public static final int FLG_LOCAL_MUSIC = 0;//本地
public static final int FLG_LOCAL_SD = 1;//tf
public static final int FLG_LOCAL_USB = 2;//usb
public static final int FLG_LOCAL_AUX1 = 3;//aux
public static final int FLG_local_dlna = 4;//dlna
public static final int FLG_LOCAL_BT = 5;//bt
public static final int FLG_LOCAL_FAVORITE = 6;//我的收藏
public static final int FLG_Local_XMLY = 7;//喜马拉雅
public static final int FLG_Local_All_MUSIC = 8;//所有音乐
public static final int FLG_Local_HISTORY = 9;//播放历史
public static final int FLG_Local_SEARCH = 10;//音乐搜索
public static final int FLG_LOCAL_SCENE = 11;//场景音乐
public static final int FLG_RTSP = 12;//声音共享
public static final int FLG_LOCAL_FM = 13;//收音机
public static final int FLG_NO_SOURCE = 14;//无音源
public static final int FLG_CLOUD_MUSIC = 15;//云音乐
public static final int FLG_AIRPLAY = 16;//AirPlay
public static final int FLG_NET_CHILD=17;//儿童
```

### 声音减少

把音乐主机的音量减少1，控制的是当前房间

#### 方法原型

```
/**
 * 声音减少
 *
 * @return 声音减少的CreateMessage
 */
public PhoneMessage volumeMinus();
```

### 声音增加

把音乐主机的音量增加1，控制的是当前房间

#### 方法原型

```
/**
 * 声音增加
 *
 * @return 声音增加的CreateMessage
 */
public PhoneMessage volumeAdd()
```

### 使用位置播放歌曲

播放主机当前列表的position首歌曲，控制的是当前房间

#### 方法原型

```
/**
 * 使用位置播放歌曲
 *
 * @param position 歌曲的位置
 * @return 使用位置播放歌曲的CreateMessage
 */
public PhoneMessage playMusicPosition(int position)
```

#### 参数介绍

* position：需要播放歌曲的位置

### 使用音乐ID播放歌曲

使用音乐的ID，播放当前列表的歌曲，控制的是当前房间

#### 方法原型

```
/**
 * 使用ID播放歌曲
 *
 * @param id 歌曲的ID
 * @return 使用ID播放歌曲的CreateMessage
 */
public PhoneMessage playMusicID(int id):
```

#### 参数介绍

* id：需要播放歌曲的音乐ID

### EQ模式

创建设置播放器EQ模式的CreateMessage，控制的是当前房间

#### 方法原型

```
/**
 * 设置EQ模式
 *
 * @param eqMode EQ模式
 * @return 设置EQ模式的CreateMessage
 */
public PhoneMessage musicEqMode(int eqMode)
```

#### 参数介绍

eqMode：需要设置的EQ模式

| 模式 | 值（int） |
| -- | ------ |
| 普通 | 0      |
| 经典 | 1      |
| 爵士 | 2      |
| 摇滚 | 3      |
| 流行 | 4      |

### 播放模式

创建设置播放模式的CreateMessage，控制的是当前房间

#### 方法原型

```
/**
 * 设置播放模式
 *
 * @param playMode 播放模式
 * @return 设置播放模式的CreateMessage
 */
public PhoneMessage musicPlayMode(int playMode);
```

#### 参数介绍

* playMode：设置的播放模式

| 播放模式 | 值（int） |
| ---- | ------ |
| 顺序播放 | 0      |
| 随机播放 | 1      |
| 单曲循环 | 2      |
| 循环播放 | 3      |

### 收藏音乐

创建收藏当前播放音乐的CreateMessage，收藏的是当前房间的音乐

#### 方法原型

```
/**
 * 收藏音乐
 *
 * @return 收藏的CreateMessage
 */
public PhoneMessage musicFavorite();
```

### 下载歌曲

创建下载当前播放音乐的CreateMessage，下载的是当前房间的音乐

#### 方法原型

```
/**
 * 下载歌曲
 *
 * @return 下载消息的CreateMessage
 */
public PhoneMessage musicDownload();
```

### 设置播放进度

创建设置播放进度的CreateMessage，设置的是当前房间的音乐

#### 方法原型

```
/**
 * 设置播放进度
 *
 * @param seek 播放进度
 * @return 设置播放进度的CreateMessage
 */
public PhoneMessage musicSeek(int seek)
```

#### 参数介绍

* seek：设置播放进度的时间，毫秒

### 设置设备名

设置机器的名称，同时也是区域一的名称

#### 方法原型

```
/**
 * 设置设备名
 *
 * @param deviceName 设备名
 * @return 设置设备名的CreateMessage
 */
public PhoneMessage deviceName(String deviceName);
```

#### 参数介绍

* deviceName：需要设置的设备名

### 设置房间名

创建设置房间名的消息，设置房间二的名称需要双分区才会有作用

#### 方法原型

```
/**
 * 设置房间名
 *
 * @param room     需要设置的房间
 * @param roomName 设置的房间名
 * @return 设置房间名的CreateMessage
 */
public PhoneMessage roomName(int room, String roomName);
```

#### 参数介绍

* room：需要修改的房间名的房间

| 房间  | 参数名   | 参数值 |
| --- | ----- | --- |
| 区域一 | AREA1 | 11  |
| 区域二 | AREA2 | 12  |

* roomName：修改的房间名

### 修改蓝牙名和密码

创建修改蓝牙名称和密码的消息，蓝牙名和密码，可以一个为空，不可两个都为空

#### 方法原型

```
/**
 * 修改蓝牙名和密码
 *
 * @param btName 蓝牙名称，可以为空，为空表示不修改
 * @param btPwd  蓝牙密码，可以为空，为空表示不修改
 * @return 设置蓝牙名称和密码的CreateMessage
 */
public PhoneMessage btNameAndPwd(String btName, String btPwd);
```

#### 参数介绍

* btName：新的蓝牙名，可以为空，为空表示不修改
* btPwd：新的蓝牙密码，可以为空，为空表示不修改

### 连接WiFi

创建控制音乐主机连接WiFi的消息

#### 方法原型

```
/**
 * 连接WiFi
 *
 * @param wifiName WiFi名
 * @param wifiPwd WiFi密码
 * @return 连接WiFi的CreateMessage
 */
public PhoneMessage connWiFiInfo(@NonNull String wifiName, String wifiPwd);
```

#### 参数介绍

* wifiName：需要连接WiFi的名称，不可为空
* wifiPwd：需要连接WiFi的密码，无密码的可以直接为空

### 设置机器休眠时间

创建设置机器休眠时间的消息

#### 方法原型

```
/**
 * 设置机器休眠时间
 *
 * @param time 时间
 * @return 设置机器休眠时间的CreateMessage
 */
public PhoneMessage deviceSleepTime(int time);
```

#### 参数介绍

* time：机器休眠的时间，毫秒值，设置0为不休眠

### 控制设备开关机

创建控制设备开关机的消息，可以关机也可以开机

#### 方法原型

```
/**
 * 控制设备开关机
 *
 * @param isPower 开关机的状态   0 : 关机   1 : 开机
 * @return 控制设备开关机的CreateMessage
 */
public PhoneMessage devivePower(@NonNull int isPower);
```

#### 参数介绍

* isPower：控制开机还是关机

| 指令 | isPower（int） |
| -- | ------------ |
| 关机 | 0            |
| 开机 | 1            |

### 设置BASS音量

创建控制主机BASS音量的消息

#### 方法原型

```
/**
 * 设置BASS音量
 *
 * @param bassVolume BASS的音量
 * @return 设置BASS音量的CreateMessage
 */
public PhoneMessage musicBass(@NonNull int bassVolume);
```

#### 参数介绍

* bassVolume：设置BASS的音量，音量值为0\~15

### 设置TREBLE音量

创建控制主机TREBLE音量的消息

#### 方法原型

```
/**
 * 设置TREBLE音量
 *
 * @param trebleVolume TREBLE的音量
 * @return 设置TREBLE音量的CreateMessage
 */
public PhoneMessage musicTreble(@NonNull int trebleVolume);
```

#### 参数介绍

* trebleVolume：设置TREBLE的音量，音量值为0\~15

### 更新设备

当发现机器段有更新的时候可以通过这个方法更新音乐主机

#### 方法原型

```
/**
 * 更新设备
 *
 * @return 更新设备的CreateMessage
 */
public PhoneMessage deviceUpdate();
```

### 更新播放信息

通知播放器更新播放信息，机器段会发送消息到手机端来

#### 方法原型

```
/**
 * 更新播放信息
 *
 * @return 更新播放信息的CreateMessage
 */
public PhoneMessage updatePlayInfo()
```
