Simple single-color 8x8x8 LED Cube with AVRs
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

unixHelper.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/unixSerial.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 /dev/SerialPort /file/to/send\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. }