1551USB SEND
Suche
Index
FAQ
Kontakt
Zurück
/*

 file: send.c
 compile: make 
 
 sends PRG using 1551USB 

 Version 0.2 
 9.4.2017

 + runtime (linux)
 some bugfix

 Version 0.1
 19.2.2017

*/
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/io.h>
#ifdef _WIN32
#include <Windows.h>
#else
#include <unistd.h>
#endif
#include "rs232.h"  /* uses: http://www.teuniz.net/RS-232 */

int main(int argc, char** argv)
{                    


        FILE *datei;
        unsigned char * buffer;       
        unsigned char * buffer2;     
	int sendsize,a,point,lopoint,hipoint,blocks,tsize,rest,i, port=1;
        int size;
        char* filename = NULL;
        int xport;

        char mode[]={'8','N','1',0};
        int baudrate = 57600;


    for (i = 1; i < argc; i++) {

         if (argv[i][0] == '-') {

	     switch (argv[i][1]) {

		case 'f':	filename = argv[++i];
				break;

		case 'p':	port = atoi(argv[++i]);
 				break;
                                 }
	                        }
                               }

             switch (port) {
		case 1:       xport = 16; break; // Windows COM1

		case 2:       xport = 17; break; // Windows COM2

                           }





if ((datei = fopen(filename, "rb")) == NULL)
	{ printf("nError: File not found !an");
          printf("Usage: send -f {filename} -p {port}n");

#if defined(__linux__) || defined(__FreeBSD__)   /* Linux & FreeBSD */

          printf("port: 1 = /dev/ttyUSB0 (default)nn");
          printf("port: 2 = /dev/ttyUSB1nn");

#else /* Windows */

          printf("port: 1 = COM1 (default)nn");
          printf("port: 2 = COM2 nn");

#endif
          ;return 0;
        }


/* Filesize */
	fseek(datei,0,SEEK_END);
	size=ftell(datei);
	fseek(datei,0,SEEK_SET);
         
        if (size > 65535) { printf("Abort ! - File to big for your target machine !n");exit(1);}

/* Calculate complete blocks and carryover bytes */
        tsize = size -2;  
        blocks = (tsize/256); 
        rest = tsize - (blocks*256);        

/* Calculate pointer */
        point= 1025+tsize; 
        hipoint = point /256;
        lopoint = point - (hipoint*256);
        
        printf("# Complete Blocks : %i n",blocks);
        printf("# Carryover Bytes : %i n",rest);



/* Memory */
	buffer = (unsigned char *) malloc(size);
	buffer2 = (unsigned char *) malloc(size);
/* Read File */
	fread(buffer, sizeof(unsigned char), size,datei);
	fclose(datei);
        printf("# Low-Address: %#X n", buffer[0]);
        printf("# High-Address: %#X n", buffer[1]);

        
        a =3;
        for(i=0; i<=size; i++)
         {
           buffer2[a] = buffer[i]; 
           a++; 
         }
    

        if (rest != 0) { blocks++;}

        buffer2[0]= lopoint; 
        buffer2[1]= hipoint;
        buffer2[2]= blocks;

        a=0;

       if (rest != 0) 
        {    
           
        for(i=0; i<=255-rest; i++)
         {
           buffer2[size+3+a] = 0;
           a++; 
          }
         }
       sendsize=size+a+3;
        printf("# Filename: %s n",filename);
        printf("# Adding Pointer: %i", sendsize);
        printf(" Bytes n");
        printf("# Completing Blocks: %i n", blocks);
        printf("# Sending @ %i ", baudrate);
        printf("bps n");

/* Transfer */


/* Debug and secondary RS232 for Linux */


        filename ="sendarray.prg";
        datei = fopen(filename, "wb");
        fwrite(buffer2, sendsize+1, 1, datei);
        fclose(datei);
        system ("time -f '# Runtime: %e Seconds' sh -c 'cat sendarray.prg >/dev/ttyUSB0'"); 
        system ("rm sendarray.prg");

/*
        RS232_OpenComport(xport,baudrate,mode);

         for(i=0; i<=sendsize+1; i++)
          {
            RS232_SendByte (xport,buffer2[i]);           

             if (i <= sendsize) {
                              
                                   printf("r# Progress: %i", i); printf(" Bytes");
                                   fflush(stdout);
                                  }

             usleep(100);
          }

      
        RS232_CloseComport(xport);
        printf("n");
*/
}

 

Letzte Änderung: 2019-01-06 09:45:54
  Rubrik:  DIY : Do it yourself
Rubriken-Übersicht
 7 Besucher online 

Valid XHTML 1.0 Transitional Valid CSS!