Simple single-color 8x8x8 LED Cube with AVRs
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

winSerial.c 1.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /*
  2. * Windows 16 (& 32 & 64?) compatible serial port library
  3. * Uses 8 databits, no parity, 1 stop bit, no handshaking
  4. * By: Thomas Buck <taucher.bodensee@gmail.com>
  5. * Visit: www.xythobuz.org
  6. */
  7. #include <stdio.h>
  8. #include <windows.h>
  9. #define BAUD CBR_19200;
  10. HANDLE hSerial = INVALID_HANDLE_VALUE;
  11. // Open the serial port
  12. int serialOpen(char *port) {
  13. DCB dcbSerialParams = {0};
  14. COMMTIMEOUTS timeouts = {0};
  15. hSerial = CreateFile(port GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  16. if (hSerial == INVALID_HANDLE_VALUE) {
  17. return -1;
  18. }
  19. dcbSerial.DCBlength = sizeof(dcbSerialParams);
  20. if (!GetCommState(hSerial, &dcbSerialParams)) {
  21. CloseHandle(hSerial);
  22. hSerial = INVALID_HANDLE_VALUE;
  23. return -1;
  24. }
  25. dcbSerialParams.BaudRate = BAUD;
  26. dcbSerialParams.ByteSize = 8;
  27. dcbSerialParams.StopBits = ONESTOPBIT;
  28. dcbSerialParams.Parity = NOPARITY;
  29. if (!SetCommState(hSerial, &dcbSerialParams)) {
  30. CloseHandle(hSerial);
  31. hSerial = INVALID_HANDLE_VALUE;
  32. return -1;
  33. }
  34. timeouts.ReadIntervalTimeout = 50;
  35. timeouts.ReadTotalTimeoutConstant = 50;
  36. timeouts.ReadTotalTimeoutMultiplier = 10;
  37. timeouts.WriteTotalTimeoutConstant = 50;
  38. timeouts.WriteTotalTimeoutMultiplier = 10;
  39. if (!SetCommTimeouts(hSerial, &timeouts)) {
  40. CloseHandle(hSerial);
  41. hSerial = INVALID_HANDLE_VALUE;
  42. return -1;
  43. }
  44. return 0;
  45. }
  46. // Write to port. Returns number of characters sent, -1 on error
  47. ssize_t serialWrite(char *data, size_t length) {
  48. DWORD dwBytesWritten = 0;
  49. if (!WriteFile(hSerial, data, length, &dwBytesWritten, NULL)) {
  50. return -1;
  51. }
  52. return dwBytesWritten;
  53. }
  54. // Read from port. Return number of characters read, 0 if none available, -1 on error
  55. ssize_t serialRead(char *data, size_t length) {
  56. DWORD dwBytesRead = 0;
  57. if (!ReadFile(hSerial, data, length, &dwBytesRead, NULL)) {
  58. return -1;
  59. }
  60. return dwBytesRead;
  61. }
  62. // Close the serial Port
  63. void serialClose(void) {
  64. CloseHandle(hSerial);
  65. hSerial = INVALID_HANDLE_VALUE;
  66. }