Exemple #1
0
void com_putu(unsigned u) {
    char buf[1024];

    if (u < 10)
        com_putc(UTOC(u));
    else
    {
        char *bp;

        bp = buf + 1024 - 1;
        *bp-- = '\0';
        while (u && bp >= buf)
        {
            *bp-- = UTOC(u % 10);
            u /= 10;
        }
        com_puts(++bp);
    }
}
/**
 * Checking CRC Support
 *
 * @return 2 if no crc support, 0 if crc supported, 1 fail, exit on timeout
 */
int check_crc() {
    int i;
    unsigned int crc1;

    sendcommand(CHECK_CRC);
    crc1 = crc;
    com_putc(crc1);
    com_putc(crc1 >> 8);

    i = com_getc(TIMEOUT);
    switch (i) {
    case SUCCESS:
        return 0;
    case BADCOMMAND:
        return 2;
    case FAIL:
        return 1;
    case -1:
        printf("...Device does not answer!\n\n");
        exit (0);
    default:
        return i;
    }
}
/**
 * Sending a command
 */
void sendcommand(unsigned char c) {
    com_putc(COMMAND);
    com_putc(c);
}
/**
 * Flashes or verify the controller
 */
int flash(char verify, const char * filename) {
    char * data = NULL;
    int i;
    int msg;
    unsigned char d1;
    unsigned long addr;
    unsigned long lastaddr=0;

    //read data from hex-file
    data = readHexfile(filename, flashsize, &lastaddr);

    if(data == NULL) {
        printf("Reading file failed.\n");
        return 0;
    }
    printf("Highest address in hex file: 0x%05lX (%lu Bytes)\n",lastaddr,lastaddr);

    // Sending commands to MC
    if(verify == 0) {
        printf("Writing program memory...\n");
        printf("Programming \"%s\": 00000 - 00000", filename);
        sendcommand(PROGRAM);
    }
    else {
        sendcommand(VERIFY);
        printf("Verifying program memory...\n");

        foo = com_getc(TIMEOUT);
        if(foo == BADCOMMAND) {
            printf("Verify not available\n");
            return 0;
        }
        printf( "Verify %s: 00000 - 00000", filename);
    }

    // Sending data to MC
    for(i = buffersize, addr = 0;; addr++) {
        switch(d1 = data[addr]) {
        case ESCAPE:
        case 0x13:
            com_putc(ESCAPE);
            d1 += ESC_SHIFT;
        default:
            com_putc(d1);
        }

        if(--i == 0) {
            printf( "\b\b\b\b\b%05lX", addr + 1);
            fflush(stdout);
            if(!verify) {
                msg = 0;
                msg = com_getc(TIMEOUTP);
                if (msg != CONTINUE) {
                    printf(" failed. Did not receive CONTINUE despite more data to write. Got 0x%04X (%u)\n",(unsigned)((unsigned char)msg),(unsigned)((unsigned char)msg));
                    free(data);
                    return 0;
                }
            }
            i = buffersize;
        }

        if(addr == lastaddr) {
            com_putc(ESCAPE);
            com_putc(ESC_SHIFT); // A5,80 = End

            printf("\b\b\b\b\b%05lX", addr);
            msg = 0;
            msg = com_getc(TIMEOUTP);
            if (msg != SUCCESS) {
                printf(" failed. Did not receive SUCCESS at end of programming. Got 0x%04X (%u)\n",(unsigned)((unsigned char)msg),(unsigned)((unsigned char)msg));
                free(data);
                return 0;
            } else {
                printf(" SUCCESS\n");
            }
            break;
        }
    }
    printf("\n");

    free(data);

    return 1;
}//int flash(char verify, const char * filename)
Exemple #5
0
main(int argc, char *argv[])
{
/*

   This is the main section of this driver. It's makeup is entirely
   up to you. With of course, several REQUIRED sets.

   */
int i,x,count;
int y=0,block_size=1024;
int send=0,do_acks=0;
char s[81],s1[81];
qvideo();
clrscrn();
Screen_ptr = malloc(1 * 4000);
if(Screen_ptr == NULL) exit(1);
uncomprs(&Screen_ptr[0*4000], tmod); /* uncompress screen 1 */
memtoscr(2000, 0, Screen_ptr);
curoff();
for(i=1;i<argc;i++)
 {
  if(argv[i][0] == '/' || argv[i][0] == '-')
  {
    switch(toupper(argv[i][1]))
    {
    case 'S' : block_size = atoi(argv[i+1]);
               if(block_size > 1024)
                             block_size = 1024;
               break;
    case 'A' : do_acks = 1;break;
    case 'K' : delete_aborted_transfers = 0;
               break;
    case 'P' : port_ptr = atoi(argv[i+1]);
               port_ptr--;
               break;
    case 'B' : connect_rate = atoi(argv[i+1]);
               cur_baud = connect_rate;
               block_size = (connect_rate > 2400) ? 2048 : 1024;
               break;
    case 'L' : locked_port = atol(argv[i+1]);
               break;
    case 'R' : set_com();

               /*
                 You should continue to cycle receiving files until
                 Zrecfile returns a ZERO, indicating that it did not
                 receive any files or the session was aborted.
                 */

               while ( Zrecfile(do_acks,block_size) && (async_carrier(port))) clear_screen() ;

               /* Following the last file, the sender will require an ACK
                  to signal the receivers acknowledges end of session.

                  The Sender doesn't respond back after receiving the ACK so
                  continue with you processing after sending a couple of
                  ACKS. Two is suggested, an extra incase line noise blew the
                  first one.
                  */

               com_putc(ACK);
               com_putc(ACK);
               end_prg();
               break;

    case 'F' : set_com();
               i++;
               for(;i<argc;i++)
                {
                 memset(s,'\0',sizeof(s));
                 parser(argv[i],&s[0]);

                 /* Cycle until all files are sent or Zsendfile returns
                    a zero indicating Session was aborted. */

                 if(!Zsendfile(argv[i],s))
                       end_prg();
                 if(!async_carrier(port)) end_prg();
                 clear_screen();
                }
                i = count = 0;

                /* Cycle sending EOT until receiver sees it and ACKs
                    the ending EOT. I suggest cycling only two periods
                    , period being defined as trying ACKEOT function twice. */

                while(!count && i <= 1)
                  {
                   com_putc(EOT);
                   i++;
                   if(ackeot()) count = 1;
                   if(!async_carrier(port)) count = 1;
                  }
                end_prg();
                break;
   }
 }
 }

}
Exemple #6
0
void com_puts(char *s) {
    char c;
    while((c = *s++))
        com_putc(c);
}