串口版API指令文档 - xuebaodev/wawaji GitHub Wiki

适用于娃娃机3.4版本及更高版本

指令规则

[命令头1位][消息ID号(2位)][命令头取反][消息ID取反(2位)][包长度][数据][校验位]

  • 假定数据位1位 则最小长度为9
  • 校验位=包长度之后含本身的数据字节之和%100。
  • 消息ID取值为随机数,保证两个连续命令不相同就可以。
  • 上位机发给娃娃机的指令(除主机查询娃娃机状态命令),娃娃机收到后都会原样返回。
  • 如没有特殊情况,指令协议都是由外部设备发送给娃娃机。外部设备即:安卓板,或应用服务器。
  • 而回调,返回,或通知,都是娃娃机发出的,外部设备需要处理这些数据。无需应答给娃娃机。

[指令]开局游戏

Buff[]={0XFE,pid/256,pid%256,~ Buff[0],~ Buff[1],~ Buff[2],(Length=0x14),cmd,time_out,result,num3,num4,num5,num6,num7,num8,num9,num10,num11,[校验位1]}

  • Cmd = 0x31 恒定
  • time_out:超时时间,单位秒。超过此时间未下抓,则自动下抓
  • Result: 0 表示没有抓到 1表示抓到
  • Num3表示抓起爪力(1—48)(10进制)
  • Num4表示到顶爪力(1—48) (10进制)
  • Num5 表示移动爪力(1—48) (10进制)
  • Num6 表示大爪力(1—48) (10进制)
  • Num7 抓起高度(0--10)(10进制)底部到顶部分成10份,爪子到达某个高度就会抓力变小
  • Num8下线长度(10—35)(10进制)爪子线放到最长的时间
  • Num9前后电机的速度(1-5)(10进制)
  • Num10左右电机的速度(1-5)(10进制)
  • Num11上下电机的速度(1-5)(10进制)

例:fe 00 00 01 ff ff 14 31 3c 00 00 00 00 00 00 00 00 00 00 1D

当Result为1时,也就可以中奖,此时的抓力由机器内部设置决定,后面的抓力参数不起作用,当Result为0时,后面参数不为0时会起作用,为0时采用机器内设置的参数,一般建议后面的参数设置为0


[指令]控制电机(也就是操作指令)

Buff[]={0XFE,pid/256,pid%256,~ Buff[0],~ Buff[1],~ Buff[2],(Length=0x0c),0x32, Num1, Num2, Num3, [校验位1]} Num1:

  • 0 往外移动(假定玩家站在娃娃机面前,则爪子朝玩家方向移动)
  • 1 往里
  • 2 往左
  • 3 往右
  • 4 下抓
  • 5 停止 (此条为2.1版以上新增)电机停止

Num2,num3:表示步长时间=num2+num3*256(毫秒)表示此信号会令娃娃机移动多长时间.默认发送5000即可。即num2=0x88 num3=0x19

例:fe 00 00 01 ff ff 0c 32 00 88 19 17 往外移动指令

使用方法详见SimpleClient的代码。 只需要按钮按下的时候,发送一次对应的指令。 按钮抬起的时候,发送一次fe XX XX 01 XX XX 0c 32 05 XX ...(XX的部分 请按协议规则填充 ...则需要您自行补全) 即可!


[通知]游戏结束

Buff[]={0XFE,pid/256,pid%256,~ Buff[0],~ Buff[1],~ Buff[2],(Length=0x0c),0x33, Num1, Num2, Num3, [校验位1]} Num1:

  • 1表示抓到娃娃了
  • 0表示没抓到娃娃 Num2,num3为预留。目前没使用

例:fe 00 00 01 ff ff 0c 33 01 00 00 3e 抓到娃娃


[通知]心跳包

Buff[]={0XFE,pid/256,pid%256,~ Buff[0],~ Buff[1],~ Buff[2],(Length=21),0x35, mac0, mac1, mac2, mac3, mac4, mac5, mac6, mac7, mac8, mac9, mac10, mac11, [校验位1]}

Mac为网络模块的MAC码,每隔10秒发一次 特别说明 心跳包里面的MAC格式是字符串形式。 即 java使用 String strMAC = new String(total_data, 8, 12);来获取。 c语言使用 pData[20] = 0; char* pStr = pData + 8; printf("mac recv is:%s\r\n", pStr); 即 如果MAC是:EA EB 12 23 33 44. 则mac0 = 'E' mac1='A' mac2='E' mac3='B' 以此类推。


[通知]故障上报

Buff[]={0XFE,pid/256,pid%256,~ Buff[0],~ Buff[1],~ Buff[2],(Length=0x0a),0x37, num1 [校验位1]} Num1:

  • 101 上下电机故障或者天车未接或者上升微动故障
  • 103 左右移动电机故障
  • 104 前后移动电机故障或者后移微动故障
  • 105 下降微动损坏或者上下电机故障
  • 106 上升微动故障
  • 107 左移微动故障
  • 108 前后移动电机故障或者前移
  • 109 检测礼品的光眼堵住了
  • 111下线长度过大

例子:fe 00 00 01 ff ff 0a 37 6d 4a 检测礼品的光眼堵住了


可选功能:查询娃娃机状态

[指令]查询

Buff[]={0XFE,pid/256,pid%256,~ Buff[0],~ Buff[1],~ Buff[2],(Length=0x09),0x34, [校验位1]} 例子:fe 00 00 01 ff ff 09 34 3d

[返回]查询结果

fe 00 00 01 ff ff 0e 34 num1 num2 num3 num4 num5 [校验位1]

  • Num1表示机台状态0,1,2是正常状态,其它看 ** [通知]故障上报 **
  • Num2表示抓起爪力
  • Num3表示到顶爪力
  • Num4 表示移动爪力
  • Num5 表示大爪力

可选功能:主动查询娃娃机游戏结果

[指令]查询

Buff[]={0XFE,pid/256,pid%256,~ Buff[0],~ Buff[1],~ Buff[2],(Length=0x09),0x3E, [校验位1]}

[返回]查询结果

0XFE,pid/256,pid%256,~ Buff[0],~ Buff[1],~ Buff[2],(Length=0x0B),0x3E,num1,num2, [校验位1]

  • Num1表示机器状态,0表示空闲,1和2表示有客人正在玩机器,其它表示有故障,故障代码看 ** [通知]故障上报 **
  • Num2表示中奖结果,中奖了(抓到娃娃了)为1,没抓到为0

适用场景:当没有收到游戏结束回调时


可选功能:[指令]关闭心跳包

Buff[]={0XFE,pid/256,pid%256,~ Buff[0],~ Buff[1],~ Buff[2],(Length=9),0x36, [校验位1]} 例子:fe 00 00 01 ff ff 09 36 3f 主板每次开机后都会默认有心跳包命令,如果主板接收到此命令,自动关闭心跳包


可选功能:[指令]复位娃娃机

Buff[]={0XFE,pid/256,pid%256,~ Buff[0],~ Buff[1],~ Buff[2],(Length=0x09),0x38,[校验位1]}


3.8以后的娃娃机主板才有这个功能.更低版本,需要自行查询以便确定是否支持。

重要功能:[指令]读取娃娃机的心跳包

Buff[]={0XFE,pid/256,pid%256,~ Buff[0],~ Buff[1],~ Buff[2],(Length=0x09),0x42, [校验位1]}

娃娃机收到指令后,会立即返回心跳包。 应用场景:当网络断开,模块重新连接到服务器后,由于娃娃机并不会第一时间心跳,因此,服务器无法处理它发过来的数据。所以,服务器应该在每个connect到7770的连接,立即给他发以上的指令,要求它立即报告自身MAC,以便确定是哪台娃娃机。


可选功能:[通知]服务检测到本台娃娃机发生错误。通知娃娃机发出声音告警,以便现场人员及时处理。

Buff[]={0XFE,pid/256,pid%256,~ Buff[0],~ Buff[1],~ Buff[2],(Length=0x09),0x43, [校验位1]}

应用场景:当你的服务器检测到本台娃娃机光眼堵住,或者多出礼品,或者其他故障的时候,要往这台娃娃机发送这个指令,让它发出报警声音,以便现场人员及时处理。