Командой для установки разделителя интервал кадров яявляется ifd. При получении данных PES-2407 выделяет кадры с назначенным разделителем этой команды. В это время вы можете проверить длину кадра при помощи команды "get rxlen" и получить данные в еденицах кадра.
Устаноыитее разделитель следующим образом, чтобы отделить кадры с конца.
"set ifd (del)"
Если вы установите разделитель в del, то данные до разделителя будут рассмотрены как один кадр. Разделитель должен быть установлен в шестнадцатеричный строковой форме и иожет быть установлен в диапазоне от 2 до 64 байтов.
Разделение кадров с обоих концов
Установите два разделителя слебующим образом для того, чтобы разделить кадры с обоих концов.
"set ifd (start_del) (end_del)"
Если вы установите два разделителя кадров, данные от первого разделителя ко второму станут одним кадром. Оба разделителя и данные между ними действительны, но остальные данные будут проигнорированы. Общая длина двух разделителей не может превышать 64 байта.
Вы можете отключить разделитель межкадрового интервала следующим образом:
"set ifd"
Если вы не укажете что-либо после команды ifd, как указано выше, то разделитель кадра не будет установлен.
<?php
include "lib/sd_spc.php";
$sid = 14;
spc_reset();
spc_sync_baud(115200);
spc_request_dev($sid, "set uart 115200");
spc_request_dev($sid, "set ifd 1b01");
echo spc_request_dev($sid, "get ifd"), "\r\n"; // output: 1b01
spc_request_dev($sid, "set ifd 1b02 1b03");
echo spc_request_dev($sid, "get ifd"), "\r\n"; // output: 1b02 1b03
spc_request_dev($sid, "set ifd");
echo spc_request_dev($sid, "get ifd"), "\r\n"; // output:
?>
Пример отправки и приема данных с разделителем
В примере ниже для приема данных по кадру за кадром и отправки данных обратно в качестве разделителя используется 0x0d.
<?php
include "/lib/sd_spc.php";
$rwbuf = "";
$sid = 14;
spc_reset();
spc_sync_baud(115200);
spc_request_dev($sid, "set uart 115200N81");
spc_request_dev($sid, "set ifd 0d");
while(1)
{
$txfree = (int)spc_request_dev($sid, "get txfree");
$rlen = (int)spc_request_dev($sid, "get rxlen");
if($rlen > 0)
{
if($rlen <= $txfree)
{
// receive data
$rwbuf = spc_request($sid, 6, "$rlen");
// send data
spc_request($sid, 7, $rwbuf);
// print data
echo $rwbuf;
}
}
usleep(1000);
}
?>
※ Примечание: Параметр интервала между разделителями кадров("set ifd") и настройка интервала между кадрами("set ifg") не могут использоваться одновременно.