Командой для получения размера полученных данных является rxlen. В случае установки интервала между кадрами("set ifg") или разделителя интервала кадров("set ifd") возвращаемое значение будет представлять собой длину принятого кадра. Если получено несколько принятых кадров, то возвращается длина первого принятого кадра.
"get rxlen [del]"
Возвращаемое начение представляет собой строку в целочисленном виде.
Если вы укажете в разделителе del, то он вернет длину в разделитель.
※ Обратитесь к "Разделение кадров с конца" на странице Разделитель интервала кадров для информации о том, как установить разделитель.
В данном примере данные поступают из последовательного порта и отправляются обратно в тот же порт.
<?php
include "/lib/sd_spc.php";
$rwbuf = "";
$sid = 14;
spc_reset();
spc_sync_baud(115200);
spc_request_dev($sid, "set uart 115200N81");
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);
}
?>
В данном примере данные передаются в блоке с разделителем (0x0d) из последовательного порта и отправляются обратно в тот же порт.
<?php
include "/lib/sd_spc.php";
$rwbuf = "";
$sid = 14;
spc_reset();
spc_sync_baud(115200);
spc_request_dev($sid, "set uart 115200N81");
while(1)
{
$txfree = (int)spc_request_dev($sid, "get txfree");
$rlen = (int)spc_request_dev($sid, "get rxlen 0d");
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);
}
?>