[feat] add tools of receive debug signals as vofa in windows
This commit is contained in:
parent
27f528f87b
commit
bc752dbc81
128
tools/vofa.c
Normal file
128
tools/vofa.c
Normal file
@ -0,0 +1,128 @@
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <windows.h>
|
||||
|
||||
#define SAMPLE_RATE (1024)
|
||||
#define CHANNEL_MAX (3 + 1)
|
||||
#define PERIOD_CNT (100)
|
||||
#define BUFFER_SIZE (CHANNEL_MAX * sizeof(float) * SAMPLE_RATE * PERIOD_CNT)
|
||||
uint8_t buffer[BUFFER_SIZE];
|
||||
|
||||
int main(void) {
|
||||
DWORD actual_len;
|
||||
int total_len;
|
||||
time_t time_pre, time_now;
|
||||
int line;
|
||||
char str[100];
|
||||
|
||||
HANDLE hComm = CreateFile(
|
||||
"\\\\.\\COM12", /* serial port name */
|
||||
GENERIC_READ, /* only read privilege */
|
||||
0, /* share mode */
|
||||
NULL, /* secure attribute */
|
||||
OPEN_EXISTING, /* open current device */
|
||||
0, /* file attribute */
|
||||
NULL /* template file */
|
||||
);
|
||||
if (hComm == INVALID_HANDLE_VALUE) {
|
||||
/* open serial port failed */
|
||||
printf("Error: open serial port failed\r\n");
|
||||
return -1;
|
||||
} else {
|
||||
DCB dcb = { 0 };
|
||||
dcb.DCBlength = sizeof(dcb);
|
||||
if (GetCommState(hComm, &dcb)) {
|
||||
dcb.BaudRate = 2 * 1000 * 1000;
|
||||
dcb.ByteSize = 8;
|
||||
dcb.Parity = NOPARITY;
|
||||
dcb.StopBits = ONESTOPBIT;
|
||||
if (!SetCommState(hComm, &dcb)) {
|
||||
printf("Error: Set serial port parameter failed\r\n");
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
printf("Error: Get serial port parameter failed\r\n");
|
||||
return -1;
|
||||
}
|
||||
COMMTIMEOUTS timeouts = { 0 };
|
||||
timeouts.ReadIntervalTimeout = 10;
|
||||
timeouts.ReadTotalTimeoutConstant = 10;
|
||||
timeouts.ReadTotalTimeoutMultiplier = 10;
|
||||
SetCommTimeouts(hComm, &timeouts);
|
||||
printf("Succeed: open serial port\r\n");
|
||||
}
|
||||
|
||||
/* sample data */
|
||||
PurgeComm(hComm, PURGE_RXCLEAR);
|
||||
actual_len = 0;
|
||||
total_len = 0;
|
||||
time_pre = time(NULL);
|
||||
while (1) {
|
||||
ReadFile(hComm, buffer + total_len, sizeof(buffer) - total_len, &actual_len, NULL);
|
||||
total_len += actual_len;
|
||||
if (total_len >= sizeof(buffer)) {
|
||||
break;
|
||||
}
|
||||
time_now = time(NULL);
|
||||
if (difftime(time_now, time_pre) >= 1) {
|
||||
time_pre = time_now;
|
||||
printf("Received %d bytes, %d%%\r\n", total_len, (int)(total_len * 100.0f / BUFFER_SIZE));
|
||||
}
|
||||
}
|
||||
printf("Total Received %d bytes\r\n", total_len);
|
||||
|
||||
/* create and open file */
|
||||
HANDLE hFile;
|
||||
DWORD bytsWritten;
|
||||
hFile = CreateFile(
|
||||
"vofa.xls",
|
||||
GENERIC_WRITE,
|
||||
0,
|
||||
NULL,
|
||||
CREATE_ALWAYS,
|
||||
FILE_ATTRIBUTE_NORMAL,
|
||||
NULL
|
||||
);
|
||||
if (hFile == INVALID_HANDLE_VALUE) {
|
||||
printf("Error: create file failed, %d\r\n", GetLastError());
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* parse data and write file */
|
||||
time_pre = time(NULL);
|
||||
WriteFile(hFile, "idx\tref\tsig\tcnt\n", 16, &bytsWritten, NULL);
|
||||
line = 0;
|
||||
for (int i = 0; i < sizeof(buffer) - 4; i++) {
|
||||
if (buffer[i] == 0 && buffer[i+1] == 0 && buffer[i+2] == 0x80 && buffer[i+3] == 0x7F) {
|
||||
if (i > CHANNEL_MAX * sizeof(float)) {
|
||||
uint8_t *p = buffer + i;
|
||||
char *pstr;
|
||||
pstr = itoa(line, str, 10);
|
||||
WriteFile(hFile, pstr, strlen(str), &bytsWritten, NULL);
|
||||
WriteFile(hFile, "\t", 1, &bytsWritten, NULL);
|
||||
for (int j = 0; j < CHANNEL_MAX - 1; j++) {
|
||||
float *val = (float *)p - (CHANNEL_MAX - 1 - j);
|
||||
sprintf(str, "%.*f\t", 0, *val);
|
||||
WriteFile(hFile, str, strlen(str), &bytsWritten, NULL);
|
||||
}
|
||||
WriteFile(hFile, "\n", 1, &bytsWritten, NULL);
|
||||
line++;
|
||||
}
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
time_now = time(NULL);
|
||||
if (difftime(time_now, time_pre) >= 1) {
|
||||
time_pre = time_now;
|
||||
printf("Write %d lines, complete %d%%\r\n", line, (int)(line * 100.0f / SAMPLE_RATE / PERIOD_CNT));
|
||||
}
|
||||
}
|
||||
|
||||
CloseHandle(hFile);
|
||||
CloseHandle(hComm);
|
||||
|
||||
return 0;
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user