Bluetooth経由でデータを受信し、配列で返す関数を実装していますunsigned char buf[10]
。これは私の関数で、次のように x ミリ秒ごとに呼び出されますQTimer
。
void gui::listen_device()
{
unsigned char crcval;
int count = 0;
fd_set readmask;
struct timeval tv;
int v = 0, v1 = 0, v2 = 0;
tv.tv_sec = 0;
tv.tv_usec = 100000;
int i;
memset (buf, 0, 10);
FD_ZERO (&readmask);
FD_SET (sock, &readmask);
if (select (255, &readmask, NULL, NULL, &tv) > 0)
{
if (FD_ISSET (sock, &readmask))
{
numb = read (sock, buf, 10);
// print of counter
printf ("%d ->", buf[0]);
fprintf (data, "%d,", buf[0]);
for (i = begin; i < numb-1; i++)
{
v = buf[i];
printf ("%d,", v);
fprintf (data, "%d,", v);
}
//---------------//
crcval = BP_CRC8(buf,9);
printf(" crcf=%x crcc=%x", buf[9], crcval);
if (crcval == buf[9])
{
printf("crc ok\n");
begin = 1;
}
else
{
printf("crc fail\n");
begin = numb -1;
}
//---------------//
printf ("\n");
fprintf (data, "\n");
}
}
}
buf
いっぱいになった場合にのみ関数を返すようにします。そのため、最後にタイマーが来たときに満杯でなかったbegin
場合は、グローバル変数を作成しました。buf
これは、.txt
ファイル内の出力です。
0,0,0,0,0,0,0,0,0,
1,0,0,0,0,0,0,0,0,
2,0,0,0,0,0,0,0,0,
3,0,0,0,0,0,0,0,0,
4,0,0,0,0,0,0,
0,
5,0,0,0,0,0,0,0,0,
6,0,0,0,0,0,0,0,0,
7,0,0,0,0,0,0,0,0,
8,0,0,0,0,0,0,0,0,
9,0,0,
0,0,0,
10,0,0,0,0,
11,0,0,0,0,0,0,0,0,
12,0,0,0,0,0,0,0,0,
13,0,0,0,0,0,0,0,0,
14,0,0,0,0,0,0,0,0,
15,0,0,0,0,0,0,0,0,
16,0,0,0,0,0,0,0,0,
時々それは私に不完全なを返しますbuf
。