프레임 구분자를 설정하는 명령어는 ifd입니다. 데이터 수신시 이 명령어로 설정된 구분자를 이용하여 프레임을 구분합니다. 이 때 "get rxlen" 명령으로 프레임 길이를 확인하여 프레임단위로 데이터를 수신할 수 있습니다.
프레임의 끝 구분하기
프레임의 끝을 구분하기 위해서는 다음과같이 구분자를 설정합니다.
"set ifd (del)"
del에 프레임 구분자를 설정하면 해당 구분자까지가 하나의 프레임이 됩니다. 구분자는 16진수의 문자열 형태로 설정해야 하며, 최소 2바이트에서 최대 64바이트까지 설정할 수 있습니다.
프레임의 처음과 끝을 모두 구분하기
프레임의 처음과 끝을 모두 구분하기 위해서는 다음과 같이 구분자를 2개 설정합니다.
"set ifd (start_del) (end_del)"
프레임 구분자를 2개 설정하면 첫 번째 구분자부터 두 번째 구분자까지가 하나의 프레임이 됩니다. 이 때 구분자와 구분자 사이의 데이터만 유효하고 나머지 데이터는 무시됩니다. 프레임 구분자 2개의 길이의 합은 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")은 동시에 사용할 수 없습니다.