Simple single-color 8x8x8 LED Cube with AVRs
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

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. }