[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