Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <iostream>
- #include <stdio.h>
- #include <Windows.h>
- HANDLE createPortHandle(const char* port, int baudrate)
- {
- HANDLE portHandle = CreateFile(port, GENERIC_WRITE | GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
- if (portHandle == INVALID_HANDLE_VALUE)
- {
- printf("Cannot open port!\n");
- return INVALID_HANDLE_VALUE;
- }
- DCB params = { 0 };
- params.DCBlength = sizeof(params);
- GetCommState(portHandle, ¶ms);
- params.BaudRate = baudrate;
- params.ByteSize = 8;
- params.StopBits = 0;
- params.Parity = 0;
- SetCommState(portHandle, ¶ms);
- COMMTIMEOUTS timeouts = { 0 };
- timeouts.ReadIntervalTimeout = 10;
- timeouts.ReadTotalTimeoutConstant = 1;
- timeouts.ReadTotalTimeoutMultiplier = 1;
- timeouts.WriteTotalTimeoutConstant = 50;
- timeouts.WriteTotalTimeoutMultiplier = 50;
- SetCommTimeouts(portHandle, &timeouts);
- return portHandle;
- }
- static bool terminate = false;
- DWORD _stdcall readFunction(void* params)
- {
- HANDLE portHandle = *(HANDLE*)params;
- char message[256];
- DWORD bytesRead;
- while (!terminate)
- {
- ReadFile(portHandle, message, 256, &bytesRead, 0);
- if (bytesRead > 0)
- {
- printf("Received message: %s\n", message);
- }
- Sleep(100);
- }
- return 0;
- }
- int main()
- {
- printf("Enter port: ");
- char portName[100];
- scanf("%s", portName);
- HANDLE portHandle = createPortHandle(portName, 115200);
- if (portHandle == INVALID_HANDLE_VALUE)
- {
- return -1;
- }
- DWORD threadId;
- HANDLE threadHandle = CreateThread(NULL, 0, readFunction, &portHandle, 0, &threadId);
- char message[256];
- do
- {
- fgets(message, 256, stdin);
- message[strlen(message) - 1] = '\0';
- if (strlen(message) > 0)
- {
- DWORD bytesSent;
- WriteFile(portHandle, message, strlen(message) + 1, &bytesSent, 0);
- printf("Number of bytes sent: %ld\n", bytesSent);
- }
- }
- while (strcmp(message, "x") != 0);
- terminate = true;
- WaitForSingleObject(threadHandle, INFINITE);
- CloseHandle(threadHandle);
- CloseHandle(portHandle);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement