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.

winHelper.c 1.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /*
  2. * By: Thomas Buck <taucher.bodensee@gmail.com>
  3. * Visit: www.xythobuz.org
  4. */
  5. #include <stdlib.h>
  6. #include <stdio.h>
  7. #include "helper/winSerial.c"
  8. char *fileData = NULL;
  9. void removeFromBeginning(size_t size, size_t remove);
  10. size_t readFile(char *path);
  11. size_t getFileSize(FILE *fp);
  12. /*
  13. Return values:
  14. 0: Success
  15. 1: Usage error
  16. 2: Serial Port Error
  17. 3: Data File Error
  18. */
  19. int main(int argc, char *argv[]) {
  20. size_t length, written;
  21. if (argc < 3) {
  22. printf("Usage:\n%s COM1 C:\\file\\to\\send.txt\n", argv[0]);
  23. return 1;
  24. } else {
  25. if (serialOpen(argv[1]) != 0) {
  26. printf("Error: Could not open %s\n", argv[1]);
  27. return 2;
  28. }
  29. length = readFile(argv[2]);
  30. if (length == 0) {
  31. printf("Error while reading %s\n", argv[2]);
  32. return 3;
  33. }
  34. written = serialWrite(fileData, length);
  35. while (written < length) {
  36. removeFromBeginning(length, written);
  37. length -= written;
  38. written = serialWrite(fileData, length);
  39. }
  40. free(fileData);
  41. fileData = NULL;
  42. serialClose();
  43. return 0;
  44. }
  45. }
  46. void removeFromBeginning(size_t size, size_t remove) {
  47. size_t i;
  48. char *tmp = (char *)malloc((size - remove) * sizeof(char));
  49. for (i = 0; i < (size - remove); i++) {
  50. tmp[i] = fileData[i + remove];
  51. }
  52. free(fileData);
  53. fileData = tmp;
  54. }
  55. size_t readFile(char *path) {
  56. size_t size, i;
  57. FILE *fp;
  58. fp = fopen(path, "r");
  59. if (!fp) {
  60. return 0;
  61. }
  62. size = getFileSize(fp);
  63. fileData = (char *)malloc(size * sizeof(char));
  64. for (i = 0; i < size; i++) {
  65. fileData[i] = fgetc(fp);
  66. }
  67. fclose(fp);
  68. return size;
  69. }
  70. size_t getFileSize(FILE *fp) {
  71. size_t size = 0;
  72. int c;
  73. fseek(fp, 0, 0); // Set file pointer to beginning
  74. do { // Calculate size
  75. c = fgetc(fp);
  76. size++;
  77. } while (c != EOF);
  78. fseek(fp, 0, 0);
  79. return size;
  80. }