Advertisement
Guest User

Untitled

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