Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <Windows.h>
- #include <stdio.h>
- char id = 1;
- 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; // 0 == 1
- params.Parity = 0; //StartBit| xxxxxxxx |1or0| StopBit|
- 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];
- char recvID[2];
- DWORD bytesRead;
- while (!terminate) {
- DWORD flags;
- WaitCommEvent(portHandle, &flags, 0);
- if (flags & EV_CTS) {
- ReadFile(portHandle, recvID, 2, &bytesRead, 0);
- ReadFile(portHandle, message, 256, &bytesRead, 0);
- if (bytesRead > 0) {
- if(id == recvID[0]){
- printf("Recieved message: %s\n", message);
- }
- }
- }
- }
- return 0;
- }
- int main() {
- char portName[100];
- char recvID[2];
- printf("Enter port: ");
- 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 {
- printf("Enter reciever ID: ");
- fgets(recvID, 2, stdin);
- recvID[strlen(recvID) - 1] = '\0';
- printf("\n");
- if (strlen(recvID) > 0) {
- DWORD bytesSent;
- EscapeCommFunction(portHandle, SETRTS); //
- WriteFile(portHandle, recvID, strlen(recvID) + 1, &bytesSent, 0);
- EscapeCommFunction(portHandle, CLRRTS); //
- printf("*ID* Number of bytes sent: %ld\n", bytesSent);
- }
- printf("Message: ");
- scanf("%s", &message);
- //fgets(message, 256, stdin);
- message[strlen(message - 1)] = '\0';
- if (strlen(message) > 0) {
- DWORD bytesSent;
- EscapeCommFunction(portHandle, SETRTS); //
- WriteFile(portHandle, message, strlen(message) + 1, &bytesSent, 0);
- EscapeCommFunction(portHandle, CLRRTS); //
- printf("*MSG* 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