PHP fwrite 以十六进制格式,而不是十六进制字符串 - 无线固件发送

问题描述 投票:0回答:1

我正在尝试通过无线方式将固件发送到设备。 在我的其他一些设备上,我通过以下方式使用 fseek 取得了成功:

$handle = fopen($uniquedetails['send_firmware'], "r");
fseek($handle, $uniquedetails['ota_bytes']);
// Read the file up to the max bytes limit
$data = bin2hex(fread ($handle , $sendbytes ));

然后我就可以将该格式的数据写入套接字并且设备很高兴。

fwrite($sock, hex2bin($hextosend));

本质上,我正在读取固件文件的块并将其与偏移量 (ota_bytes) 一起发送到设备,以便设备可以将它们拼凑起来。

此设备的数据格式如下: 992、

$cmd = '992'; //Send OTA Data
$header = '$$';
$offset = str_pad(dechex($uniquedetails['ota_bytes']), 8, "0", STR_PAD_LEFT);
$data = "," . $input_array[1] . "," . $cmd . "," . $offset . $datalength . $data;
$length = strlen($data);
// Calculate random package flag
$flag = randLetter();
// Build packet for checksum
$data = $header . $flag . $length . $data;
$checksum = calcCheckSum($data);
// Build packet for sending
$data = $data . $checksum . "\r\n";
fwrite($sock, $data);

设备不喜欢这样。 它识别出这是一个 OTA 数据包,但出错了。

== GPRS Receive: 301
$$R289,861157040009546,992,0000000000808a664a7a0b2ed05849e0d22aa9d6b8701530a27a7dae50d8d1f0623a126232d43acada6a7a0a1aaaba4a5aeac97ea0a805e81aa2ba4a5aeacd86e82051b86a72316e10989be4766e5d7afc5487b022fae9e64880f3fc4ef6677b362e1d3abc144770e2ba2bcfaab271ae50d8db24b6ae9dba3c94c7a6aab271ae50d8db24b6aeE0



== OTA_RxIndex: 808464432
0
== OTA_RxDataLen: 12336
== OTA_RxData Err

当我联系制造商时,他们的答复是我需要以十六进制格式发送 OTA 数据,而不是十六进制字符串(我猜这是 bin2hex 在做什么)。这可以用 PHP 实现吗?

php sockets hex
1个回答
0
投票

供应商给了我一个可接受的数据包示例,我注意到它们的偏移量和长度值也是十六进制格式:

$$Q556,861157040009546,992,00H 00H 00H 00H 00H 80H 8aH 66H 4aH 7aH 0bH 2eH d0H 58H

我更改了我的代码以将这些转换回二进制。

$data = hex2bin($offset . $datalength . $data);

然后我把剩下的包裹放在一起寄出去

$data = "," . $input_array[1] . "," . $cmd . "," . $data;
$length = strlen($data);
// Calculate random package flag
$flag = randLetter();
// Build packet for checksum
$data = $header . $flag . $length . $data;
$checksum = meitrackCheckSum($data);
// Build packet for sending
$data = $data . $checksum . "\r\n";
fwrite($sock, $data);

设备似乎接受了这个。

© www.soinside.com 2019 - 2024. All rights reserved.