1 // *** Routine zum Einlesen und versenden von decodierten SSDV Bildern *** 2 uint8_t* ssdv_get_data() 3 { 4 static uint8_t ssdv_data[SSDV_DATA_LEN]; // SSDV Datenarray pro Übertragung 5 int char_zaehler; // Zähler für Größe des Sendearrays 6 int c; // byteweises einlesen der codierten Bilddaten 7 if(ssdv_packet==0) // Falls neue Übertragung dekodiere Bild und öffne Datei 8 { 9 ssdv_encode_picture(); 10 ssdv_datei=fopen ("SSDV_DATA_AX25","r"); 11 } 12 if(ssdv_datei != NULL) // Solange das Bildende nicht erreicht 13 { 14 char_zaehler=0; 15 ssdv_data[0] = 'S'; 16 ssdv_data[1] = 'S'; 17 ssdv_data[2] = 'D'; 18 if(ssdv_image==0) // Unterscheidung von zwei Bildern 19 { 20 ssdv_data[3] = 'A'; 21 } 22 else 23 { 24 ssdv_data[3] = 'B'; 25 } 26 ssdv_data[4]=msb_packet; 27 ssdv_data[5]=lsb_packet; 28 char_zaehler=6; 29 while(char_zaehler15) 47 { 48 lsb=0; 49 msb++; 50 if(msb>15) 51 msb=0; 52 } 53 } 54 if(lsb>9) 55 charOffset=7; 56 else 57 charOffset=0; 58 lsb_packet=lsb+48+charOffset; 59 if(msb>9) 60 charOffset=8; 61 else 62 charOffset=0; 63 msb_packet=msb+48+charOffset; 64 lsb=0; 65 msb=0; 66 if(c==EOF) 67 { 68 fclose(ssdv_datei); // Schließen der Datei (wichtig für Neubeschreiben) 69 ssdv_packet=0; // Setze Zähler auf Null 70 msb_packet='0'; 71 lsb_packet='0'; 72 msb=0; 73 lsb=0; 74 ssdv_datei=NULL; // Setze Zeiger auf Null 75 76 printf("SSDV: Übertragung beendet... \n"); 77 system("sudo rm SSDV_DATA_AX25"); 78 if(ssdv_image==0) 79 { 80 ssdv_image=1; 81 } 82 else 83 { 84 ssdv_image=0; 85 } 86 if(ssdv_index==255) 87 { 88 ssdv_index=0; 89 } 90 else 91 { 92 ssdv_index++; 93 } 94 } 95 else 96 { 97 printf("SSDV: ID %i - Packet gesendet... \n",ssdv_index); 98 } 99 } 100 else 101 { 102 printf("SSDV: Datei nicht gefunden!\n"); 103 } 104 return ssdv_data; 105 }