|
|
@@ -6,6 +6,10 @@
|
|
|
|
|
|
int main(int argc, const char * argv[]){
|
|
|
|
|
|
+//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
+//Initializations
|
|
|
+//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
+
|
|
|
//Setting up Timer-Signal--------------------------------------------
|
|
|
sigset_t signal;
|
|
|
pthread_t thread;
|
|
|
@@ -21,17 +25,6 @@ int main(int argc, const char * argv[]){
|
|
|
pthread_err = pthread_sigmask(SIG_BLOCK, &signal, NULL);
|
|
|
if(pthread_err!=0){
|
|
|
error_handler(pthread_err, "Error changing Signal-Mask");
|
|
|
- }
|
|
|
-
|
|
|
-//Loading Page-------------------------------------------------------
|
|
|
- FILE * file_stream = fopen("test.hex", "r");
|
|
|
- if(file_stream==NULL){
|
|
|
- fprintf(stderr, "No File \n");
|
|
|
- }
|
|
|
- char * page_get_ptr = page_get(file_stream);
|
|
|
- for(int i=0; i<page_size; i++){
|
|
|
- printf("%02X \n", *page_get_ptr);
|
|
|
- page_get_ptr++;
|
|
|
}
|
|
|
|
|
|
//initializing USART at USB_PORT-------------------------------------
|
|
|
@@ -50,45 +43,99 @@ int main(int argc, const char * argv[]){
|
|
|
cfsetspeed(termios_ptr, B19200); //set Baudrate 19.2k
|
|
|
tcsetattr(USB, TCSANOW ,termios_ptr);
|
|
|
|
|
|
-//Get Command--------------------------------------------------------
|
|
|
- char cmd_check = 0;
|
|
|
- char * frame_ptr;
|
|
|
- char * cmd_ack_ptr = (char *)malloc(3*sizeof(char));
|
|
|
- frame_ptr = cmd_build(page_read, (char)page_size);
|
|
|
- write(USB, frame_ptr, 3*sizeof(char));
|
|
|
- while(cmd_check<3){
|
|
|
- read(USB, cmd_ack_ptr, sizeof(char));
|
|
|
- tcflush(USB, TCIFLUSH);
|
|
|
- if(*cmd_ack_ptr==page_size){
|
|
|
- cmd_check++;
|
|
|
- }
|
|
|
+//initializing Stream for Source-Code--------------------------------
|
|
|
+ FILE * file_stream = fopen("test.hex", "r");
|
|
|
+ if(file_stream==NULL){
|
|
|
+ fprintf(stderr, "No File \n");
|
|
|
}
|
|
|
- tcflush(USB, TCIOFLUSH);
|
|
|
- set_timer(0, 1000);
|
|
|
- pthread_err = pthread_create(&thread, NULL,
|
|
|
+ int page_cnt = 0;
|
|
|
+ int skip;
|
|
|
+ int page_end = page_size;
|
|
|
+
|
|
|
+//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
+//Programming cycle
|
|
|
+//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
+
|
|
|
+//Loading and Masking Page-------------------------------------------
|
|
|
+ while(page_end==page_size){
|
|
|
+ skip=1;
|
|
|
+ page_end = page_get(file_stream, page_cnt);
|
|
|
+ printf("Page %d: \n", page_cnt);
|
|
|
+ for(int i=0; i<page_end; i++, skip++){
|
|
|
+ printf("%02X", page_buf[i]);
|
|
|
+ if(skip==16){
|
|
|
+ printf("\n");
|
|
|
+ skip=0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ printf("\n");
|
|
|
+ if(skip!=1){
|
|
|
+ printf("\n");
|
|
|
+ }
|
|
|
+ page_cnt++;
|
|
|
+ printf("Page %d Masked: \n", page_cnt-1);
|
|
|
+ unsigned char * page_ptr = page_mask(&page_buf[0], page_end);
|
|
|
+ skip=1;
|
|
|
+ for(int i=0; i<2*page_end; i++, skip++, page_ptr++){
|
|
|
+ printf("%02X", *page_ptr);
|
|
|
+ if(skip==16){
|
|
|
+ printf("\n");
|
|
|
+ skip=0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ printf("\n");
|
|
|
+ if(skip!=1){
|
|
|
+ printf("\n");
|
|
|
+ }
|
|
|
+ page_ptr = page_ptr-2*page_end;
|
|
|
+ printf("Page Ready \n");
|
|
|
+
|
|
|
+//Opening Connection to Programmer-----------------------------------
|
|
|
+ char * cmd_ack_ptr = (char *)malloc(sizeof(char));
|
|
|
+ char * frame_ptr = cmd_build(page_read, page_end);
|
|
|
+ write(USB, frame_ptr, 3*sizeof(char));
|
|
|
+ while(true){
|
|
|
+ read(USB, cmd_ack_ptr, sizeof(char));
|
|
|
+ if(*cmd_ack_ptr==page_end){
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ tcflush(USB, TCIOFLUSH);
|
|
|
+ printf("Acknowledged Page Send \n");
|
|
|
+ set_timer(0, 200);
|
|
|
+ pthread_err = pthread_create(&thread, NULL,
|
|
|
&signal_thread, (void *)&signal);
|
|
|
- if(pthread_err!=0){
|
|
|
- error_handler(pthread_err, "Failed to create Thread");
|
|
|
- }
|
|
|
- while(timer_state);
|
|
|
- printf("Page Read acknoledged \n");
|
|
|
- char * cmd_done_ptr = (char *)malloc(sizeof(char));
|
|
|
- cmd_check = 0;
|
|
|
- char * page_ptr = page_mask(page_build(page_size));
|
|
|
- write(USB, page_ptr, 2*page_size*sizeof(char));
|
|
|
- while(cmd_check<3){
|
|
|
- read(USB, cmd_done_ptr, sizeof(char));
|
|
|
- tcflush(USB, TCIFLUSH);
|
|
|
- if(*cmd_done_ptr==frame_mask){
|
|
|
- break;
|
|
|
+ if(pthread_err!=0){
|
|
|
+ error_handler(pthread_err, "Failed to create Thread");
|
|
|
+ }
|
|
|
+ while(timer_state);
|
|
|
+
|
|
|
+//Sending Page-------------------------------------------------------
|
|
|
+ write(USB, page_ptr, 2*page_end*sizeof(char));
|
|
|
+ char * page_rec_ptr = (char *)malloc(sizeof(char));
|
|
|
+ while(true){
|
|
|
+ read(USB, page_rec_ptr, sizeof(char));
|
|
|
+ if(*page_rec_ptr==-112){ //Framemask
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
+ printf("Page Send Complete \n");
|
|
|
+
|
|
|
+//Receiving Checksum-------------------------------------------------
|
|
|
+ for(int i=0; i<32; i++){
|
|
|
+ printf("-");
|
|
|
+ }
|
|
|
+ printf("\n");
|
|
|
}
|
|
|
- printf("Page Read Complete \n");
|
|
|
- close(USB);
|
|
|
- return EXIT_SUCCESS;
|
|
|
-}
|
|
|
+
|
|
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
+//Deintialization and Error Handling
|
|
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
|
|
+ close(USB);
|
|
|
+ return EXIT_SUCCESS;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
|
|
|
|