prog.c 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. //Include Header-----------------------------------------------------
  2. #include"prog.h"
  3. //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  4. //Main-Program
  5. int main(int argc, const char * argv[]){
  6. //Setting up Timer-Signal--------------------------------------------
  7. sigset_t signal;
  8. pthread_t thread;
  9. int signal_err, pthread_err;
  10. signal_err = sigemptyset(&signal);
  11. if(signal_err!=0){
  12. error_handler(signal_err, "Not a valid Signal");
  13. }
  14. signal_err = sigaddset(&signal, SIGALRM);
  15. if(signal_err!=0){
  16. error_handler(signal_err, "Not a valid Signal");
  17. }
  18. pthread_err = pthread_sigmask(SIG_BLOCK, &signal, NULL);
  19. if(pthread_err!=0){
  20. error_handler(pthread_err, "Error changing Signal-Mask");
  21. }
  22. //Loading Page-------------------------------------------------------
  23. FILE * file_stream = fopen("test.hex", "r");
  24. if(file_stream==NULL){
  25. fprintf(stderr, "No File \n");
  26. }
  27. char * page_get_ptr = page_get(file_stream);
  28. for(int i=0; i<page_size; i++){
  29. printf("%02X \n", *page_get_ptr);
  30. page_get_ptr++;
  31. }
  32. //initializing USART at USB_PORT-------------------------------------
  33. int USB = open("/dev/ttyACM3", O_RDWR|O_NOCTTY|O_NONBLOCK);
  34. int USB_err = isatty(USB);
  35. if(USB_err!=1){
  36. error_handler(USB_err, "No File Descriptor");
  37. }
  38. struct termios * termios_ptr = (struct termios *)
  39. malloc(sizeof(struct termios));
  40. (*termios_ptr).c_iflag = IGNPAR; //ignore Parity-Err
  41. (*termios_ptr).c_oflag = 0;
  42. (*termios_ptr).c_cflag = CS8|CREAD; //set Size, enable RX
  43. (*termios_ptr).c_lflag = 0;
  44. (*termios_ptr).c_cc[VMIN] = 0; //set min Characters
  45. cfsetspeed(termios_ptr, B19200); //set Baudrate 19.2k
  46. tcsetattr(USB, TCSANOW ,termios_ptr);
  47. //Get Command--------------------------------------------------------
  48. char cmd_check = 0;
  49. char * frame_ptr;
  50. char * cmd_ack_ptr = (char *)malloc(3*sizeof(char));
  51. frame_ptr = cmd_build(page_read, (char)page_size);
  52. write(USB, frame_ptr, 3*sizeof(char));
  53. while(cmd_check<3){
  54. read(USB, cmd_ack_ptr, sizeof(char));
  55. tcflush(USB, TCIFLUSH);
  56. if(*cmd_ack_ptr==page_size){
  57. cmd_check++;
  58. }
  59. }
  60. tcflush(USB, TCIOFLUSH);
  61. set_timer(0, 1000);
  62. pthread_err = pthread_create(&thread, NULL,
  63. &signal_thread, (void *)&signal);
  64. if(pthread_err!=0){
  65. error_handler(pthread_err, "Failed to create Thread");
  66. }
  67. while(timer_state);
  68. printf("Page Read acknoledged \n");
  69. char * cmd_done_ptr = (char *)malloc(sizeof(char));
  70. cmd_check = 0;
  71. char * page_ptr = page_mask(page_build(page_size));
  72. write(USB, page_ptr, 2*page_size*sizeof(char));
  73. while(cmd_check<3){
  74. read(USB, cmd_done_ptr, sizeof(char));
  75. tcflush(USB, TCIFLUSH);
  76. if(*cmd_done_ptr==frame_mask){
  77. break;
  78. }
  79. }
  80. printf("Page Read Complete \n");
  81. close(USB);
  82. return EXIT_SUCCESS;
  83. }
  84. //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  85. //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++