Advertisement
Guest User

Untitled

a guest
Dec 10th, 2019
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.81 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2.  
  3. #include <Windows.h>
  4. #include <stdio.h>
  5.  
  6. char id = 1;
  7.  
  8. HANDLE createPortHandle(const char* port, int baudrate) {
  9. HANDLE portHandle = CreateFile(port, GENERIC_WRITE | GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  10.  
  11. if (portHandle == INVALID_HANDLE_VALUE) {
  12. printf("Cannot open port!\n");
  13. return INVALID_HANDLE_VALUE;
  14. }
  15.  
  16. DCB params = { 0 };
  17. params.DCBlength = sizeof(params);
  18. GetCommState(portHandle, &params);
  19. params.BaudRate = baudrate;
  20. params.ByteSize = 8;
  21. params.StopBits = 0; // 0 == 1
  22. params.Parity = 0; //StartBit| xxxxxxxx |1or0| StopBit|
  23. SetCommState(portHandle, &params);
  24.  
  25. COMMTIMEOUTS timeouts = { 0 };
  26. timeouts.ReadIntervalTimeout = 10;
  27. timeouts.ReadTotalTimeoutConstant = 1;
  28. timeouts.ReadTotalTimeoutMultiplier = 1;
  29. timeouts.WriteTotalTimeoutConstant = 50;
  30. timeouts.WriteTotalTimeoutMultiplier = 50;
  31. SetCommTimeouts(portHandle, &timeouts);
  32.  
  33. return portHandle;
  34. }
  35.  
  36. static bool terminate = false;
  37.  
  38. DWORD _stdcall readFunction(void* params) {
  39. HANDLE portHandle = *(HANDLE*)params;
  40.  
  41. char message[256];
  42. char recvID[2];
  43.  
  44. DWORD bytesRead;
  45.  
  46. while (!terminate) {
  47. DWORD flags;
  48. WaitCommEvent(portHandle, &flags, 0);
  49. if (flags & EV_CTS) {
  50. ReadFile(portHandle, recvID, 2, &bytesRead, 0);
  51. ReadFile(portHandle, message, 256, &bytesRead, 0);
  52. if (bytesRead > 0) {
  53. if(id == recvID[0]){
  54. printf("Recieved message: %s\n", message);
  55. }
  56. }
  57. }
  58. }
  59. return 0;
  60. }
  61.  
  62. int main() {
  63. char portName[100];
  64. char recvID[2];
  65.  
  66. printf("Enter port: ");
  67. scanf("%s", portName);
  68.  
  69. HANDLE portHandle = createPortHandle(portName, 115200);
  70. if (portHandle == INVALID_HANDLE_VALUE) {
  71. return -1;
  72. }
  73.  
  74. DWORD threadID;
  75. HANDLE threadHandle = CreateThread(NULL, 0, readFunction, &portHandle, 0, &threadID);
  76.  
  77. char message[256];
  78. do {
  79. printf("Enter reciever ID: ");
  80. fgets(recvID, 2, stdin);
  81. recvID[strlen(recvID) - 1] = '\0';
  82. printf("\n");
  83. if (strlen(recvID) > 0) {
  84. DWORD bytesSent;
  85. EscapeCommFunction(portHandle, SETRTS); //
  86. WriteFile(portHandle, recvID, strlen(recvID) + 1, &bytesSent, 0);
  87. EscapeCommFunction(portHandle, CLRRTS); //
  88. printf("*ID* Number of bytes sent: %ld\n", bytesSent);
  89. }
  90.  
  91. printf("Message: ");
  92. scanf("%s", &message);
  93. //fgets(message, 256, stdin);
  94. message[strlen(message - 1)] = '\0';
  95. if (strlen(message) > 0) {
  96. DWORD bytesSent;
  97.  
  98. EscapeCommFunction(portHandle, SETRTS); //
  99. WriteFile(portHandle, message, strlen(message) + 1, &bytesSent, 0);
  100. EscapeCommFunction(portHandle, CLRRTS); //
  101. printf("*MSG* Number of bytes sent: %ld\n", bytesSent);
  102. }
  103. } while (strcmp(message, "x") != 0);
  104.  
  105. terminate = true;
  106. WaitForSingleObject(threadHandle, INFINITE);
  107. CloseHandle(threadHandle);
  108.  
  109. CloseHandle(portHandle);
  110.  
  111. return 0;
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement