Advertisement
Guest User

Untitled

a guest
Dec 10th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.83 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2.  
  3. #include <Windows.h>
  4. #include <stdio.h>
  5.  
  6. char id;
  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[1];
  43. DWORD IDbytesRead, MSGbytesRead;
  44.  
  45. while (!terminate) {
  46. if(recvID[0] == NULL){
  47. ReadFile(portHandle, recvID, 256, &IDbytesRead, 0);
  48. printf("ID recieved: %c\n", recvID[0]);
  49. }
  50. ReadFile(portHandle, message, 256, &MSGbytesRead, 0);
  51. //printf("MSG> %s\n", message);
  52. if(MSGbytesRead > 0) {
  53. printf("Recieved message: %s\n", message);
  54. recvID[0] = NULL;
  55. }
  56. Sleep(100);
  57. }
  58. return 0;
  59. }
  60.  
  61. int main(){
  62. char portName[100];
  63. char recvID[1];
  64.  
  65. printf("Enter port: ");
  66. scanf("%s", portName);
  67.  
  68. printf("\nEnter your ID: ");
  69. scanf("%s", &id);
  70. printf("MY ID IS: %c", id);
  71.  
  72. HANDLE portHandle = createPortHandle(portName, 115200);
  73. if (portHandle == INVALID_HANDLE_VALUE) { return -1; }
  74.  
  75. DWORD threadID;
  76. HANDLE threadHandle = CreateThread(NULL, 0, readFunction, &portHandle, 0, &threadID);
  77.  
  78. char message[256];
  79. DWORD bytesSent;
  80. do {
  81. printf("Enter reciever ID: ");
  82. //fgets(message, 256, stdin);
  83. scanf("%s", &recvID[0]);
  84. printf("char: %c\n", recvID[0]);
  85. printf("int: %d\n", int(recvID[0]) - 48);
  86. recvID[strlen(recvID)] = '\0';
  87. if((int(recvID[0]) - 48) > 0 && (int(recvID[0] - 48) <= 3)){
  88. WriteFile(portHandle, recvID, strlen(recvID) + 1, &bytesSent, 0);
  89. printf("*ID* Number of bytes sent: %ld\n", bytesSent);
  90. }
  91.  
  92. printf("Message: ");
  93. scanf("%s", &message);
  94. message[strlen(message - 1)] = '\0';
  95. if (strlen(message) > 0) {
  96. DWORD bytesSent2;
  97. WriteFile(portHandle, message, strlen(message) + 1, &bytesSent2, 0);
  98. printf("Number of bytes sent: %ld\n", bytesSent2);
  99. }
  100. } while (strcmp(message, "x") != 0);
  101.  
  102. terminate = true;
  103. WaitForSingleObject(threadHandle, INFINITE);
  104. CloseHandle(threadHandle);
  105.  
  106. CloseHandle(portHandle);
  107.  
  108. return 0;
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement