我有一个gps设备通过tcp向我的服务器(linux和php侦听器)发送数据包,除了一个i/o状态之外,我有所有的参数。
TK207协议将该参数定义为:IO State
Length: 8 bits
Type: N_STRING
1:Main power, '0' means on power, '1' means off power。
2:ACC, '0' ACC close, '1' ACC open
3: blender, '0' Did not.start, '1' Just turning, '2' reverse turning。
4:Empty/heavy vehicles, '0' Did not.start, '1' Empty, '2' Heavy
5:Front door, '0' Did not start, ’1’ open, '2' close。
6: off the oil state, '1' '0' recovery oil
7: arm / disarm state, '1' '0' from the 8 fortification: there is no vibration
n_字符串定义:包含0.9的数字字符串。固定数字时,除特殊指令外,若缺少数字,请在左边填写ascii码0(ox30h)。
我得到这样的价值观编辑*
01000000
01000001
11000000
11000001
但是我无法从这个字符串中得到7个参数。
任何帮助都将不胜感激。
编辑:
在对字段进行定义之前,我正在看一些关于如何从该字段中检索on/off值的示例
$gpioInput = 0;
for ($i = 0; $i <= 7; $i++) {
$b = substr($gpioStr, 7 - $i, 1);
if ($b != "0") {
$gpioInput |= (1 << $i);
}
}
最佳答案
我的理解是,你试图访问一个“全局”值,它是所有字段的集合,如果是,它是“关闭”的,当任何数字为零,那么下一个代码应该是有用的。<?php
const TK207_MAIN_POWER_ON = 0;
const TK207_MAIN_POWER_OFF = 1;
const TK207_ACC_CLOSE = 0;
const TK207_ACC_OPEN = 1;
const TK207_BLENDER_DID_NOT_START = 0;
const TK207_BLENDER_JUST_TURNING = 1;
const TK207_BLENDER_REVERSE_TURNING = 2;
const TK207_VEHICLES_DID_NOT_START = 0;
const TK207_VEHICLES_EMPTY = 1;
const TK207_VEHICLES_HEAVY = 2;
const TK207_FRONT_DOOR_DID_NOT_START = 0;
const TK207_FRONT_DOOR_OPEN = 1;
const TK207_FRONT_DOOR = 2;
const TK207_OFF_THE_OIL_OFF = 0;
const TK207_OFF_THE_OIL_RECOVERY = 1;
const TK207_STATE_ARM = 0; // ???
const TK207_STATE_DISARM = 1; // ???
//-------------------------------
function isOn($str) {
return (int)array_reduce(str_split($str), function($carry, $item) {
$carry &= (bool)$item;
return $carry;
}, 1);
}
function getValues($str) {
return str_split($str);
}
function getOnOffValues($str) {
return array_map(function ($item) {
return (int)(bool)$item;
}, str_split($str));
}
//-------------------------------
$offStr = '11210211';
$onStr = '11211211';
echo isOn($offStr); // off
echo isOn($onStr); // on
list($mainPower, $acc, $blender, $vehicles, $frontDoor, $oil, $armDisarm) = getValues($onStr);
var_dump([$mainPower, $acc, $blender, $vehicles, $frontDoor, $oil, $armDisarm]);
list($mainPower, $acc, $blender, $vehicles, $frontDoor, $oil, $armDisarm) = getOnOffValues($offStr);
var_dump([$mainPower, $acc, $blender, $vehicles, $frontDoor, $oil, $armDisarm]);