Пример #1
0
void print_pftp_put( void )
{
    u32 ulSum;
    u16 i;
    u8 ucByte;

    // This function establishes connection
    globalModemStatus |= (MODEM_PFTPINPROGRESS|MODEM_BUSY); // Setting this earlier causes a UART conflict
    print( MODEM_COM, "GET /cgi/pftp.py?put=" );
    print( MODEM_COM, globalModemPFTP.File.Name );
    if( globalModemPFTP.ChunkSize != 256 ) { // 256 is PFTP server default
        print( MODEM_COM, "&sz=%d", globalModemPFTP.ChunkSize );
    } // if
    // Character '+' is substitute for SPACE in URI
    print( MODEM_COM, "&dat=PFTP+%d+", globalModemPFTP.CurrentChunk );
    
    fileSetPosition( &globalModemPFTP.File, START, 
        ( globalModemPFTP.CurrentChunk - 1 ) * globalModemPFTP.ChunkSize );
    
    ulSum = 0;
    pdiaEncode( 0, PDIA_NEW, &ulSum );
    for( i = 0; i < globalModemPFTP.ChunkSize; i++ ){
        if( globalModemPFTP.File.Attributes & EOF ){
            break;
        } // if
        ucByte = fileGetChar( &globalModemPFTP.File ); // feed each byte sent to PDIA Encoder 
        pdiaEncode( ucByte, PDIA_ADD, &ulSum );
        print( MODEM_COM, "%2X", ucByte ); // send in bar uppercase hex with no prefix
    } // for
    // PDIA will not increment the frame if only 256 bytes are sent
    pdiaEncode( 0, PDIA_END, &ulSum ); // Close out PDIA
    print( MODEM_COM, "+%d+%08X", i, ulSum );
    print( MODEM_COM, " HTTP/1.1%s", (u8*)AT_CRLF );
    print( MODEM_COM, "Host: %s%s%s", globalModemPFTP.HostName, (u8*)AT_CRLF, (u8*)AT_CRLF );
}
Пример #2
0
void main( void )
{
    PYGMYFILE pygmyFile;
    u8 i, ucStatus, ucBuffer[ 65 ], *ucSubString;

    sysInit();
    print( COM3, "\rUpdating bootloader, cancel boot after completion" );
    print( COM3, "\rOpening Resource..." );
    if( !fileOpenResource( &pygmyFile, (u8*)PYGMY_boothex ) ){
        print( COM3, "\rFile Failed to Open" );
    } else{
        print( COM3, "\rErasing..." );
        for( i = 0; i < 8; i++ ){
            fpecErasePage( i );
        } // for;
        print( COM3, "\rFlashing..." );
        for( ucStatus = 0; !( fileIsEOF( &pygmyFile ) ) && ucStatus != 0xFF; ){
            for( i = 0; i < 64; i++ ){
                ucBuffer[ i ] = fileGetChar( &pygmyFile );
                if( ucBuffer[ i ] == '\r' ){
                    ucBuffer[ i ] = '\0';
                    ucSubString = getNextSubString( (u8*)ucBuffer, WHITESPACE|NEWLINE );
                    // Add 1 to pointer before passing to skip the ':' packet start char
                    ucStatus = fpecProcessIHEX( (u8*)( ucSubString + 1 ) );
                    break; // Time to fetch next IHEX entry
                } // if
            } // for
        } // for
    } // else
    print( COM3, "\rBootloader Updated" );
    print( COM3, "\rReseting..." );
    delay( 100 );
    PYGMY_RESET;
    //boot();
}
Пример #3
0
u8 bootTestAndLoad( u32 Address, u8 *FileName )
{
    PYGMYFILE *File;
    u32 i, Length;
    u8 Buffer[ 64 ], *SubString, Status;

    File = fileOpen( FileName, READ, 0 );
    if( !File ){
        return( FALSE );
    } // if
    //Length = fpecGetIHEXLength( FileName );
    print( STDIO, "\rFlashing %d bytes to 0x%08", Length, Address );
    fpecEraseProgramMemory();
    print( STDIO, "..." );
    for( Status = 0; !( File->Properties.Attributes & EOF ) && Status != 0xFF; ){
        for( i = 0; i < 64; i++ ){
            Buffer[ i ] = fileGetChar( File );
            if( Buffer[ i ] == '\r' ){
                Buffer[ i ] = '\0';
                SubString = getNextSubString( (u8*)Buffer, WHITESPACE|NEWLINE );
                // Add 1 to pointer before passing to skip the ':' packet start char
                Status = fpecProcessIHEX( (u8*)( SubString + 1 ) );
                break; // Time to fetch next IHEX entry
            } // if
        } // for
    } // for
}
Пример #4
0
/**
 * Shell command () prints existing files or creates new ones.
 * @param args array of arguments
 * @return OK for success, SYSERR for syntax error
 */
command xsh_cat(int nargs, char *args[])
{
    int fd = 0;
    char c = 0;

    /* Output help, if '--help' argument was supplied */
    if ((nargs == 2 && strncmp(args[1], "--help", 6) == 0) || (nargs > 3) || (nargs < 2))
    {
        printf("Usage: cat [filename] or cat > [filename]\n");
        printf("Print file contents or copy console input into new file.\n");
        printf("\t--help\t display this help and exit\n");

        return OK;
    }
    if (nargs == 2)
    { /* Cat a file */
	fd = fileOpen(args[1]);
	if (SYSERR != fd)
	{
		fileSeek(fd, 0);
		while ((c = fileGetChar(fd)) != (char)SYSERR)
		{
			printf("%c", c);
		}
	}
	else
	{
		printf("File \"%s\" not found.\n", args[1]);
	}
	printf("\n\n");
	return OK;
    }
    if (strncmp(args[1], ">", 2))
    {
	    printf("ERROR: Cannot read from \"%s\", only CONSOLE!\n", args[1]);
	    return SYSERR;
    }
    if (SYSERR != fileOpen(args[2]))
    {
	    printf("ERROR: file \"%s\" already exists!\n", args[2]);
	    return SYSERR;
    }
    fd = fileCreate(args[2]);
    if (SYSERR == fd)
    {
	    printf("ERROR creating file \"%s\"\n", args[2]);
	    return SYSERR;
    }
    printf("Creating new file \"%s\".  Enter ~ to exit.\n", args[2]);
    while ((c = getc(CONSOLE)) != '~')
    {
	    filePutChar(fd, c);
    }
    fileClose(fd);

    return OK;
}
Пример #5
0
u8 bootTest( void )
{
    // This function pre-tests every row in firmware file for corruption before erase and program
    u32 i;
    u8 ucBuffer[ 64 ], *ucSubString;

    //if( !fileOpen( &pygmyFile, (u8*)BOOT_filename, READ ) ){
    //    return( FALSE );
    //}
 
    for( ; !( pygmyFile.Properties.Attributes & EOF ); ){
        // Get an IHEX packet
        for( i = 0; i < 64; i++ ){
            ucBuffer[ i ] = fileGetChar( &pygmyFile );
            if( ucBuffer[ i ] == '\r' ){
                ucBuffer[ i ] = '\0';
                break;
            } // if
        } // for
        ucSubString = getNextSubString( ucBuffer, WHITESPACE|NEWLINE );
        if( *(ucSubString++) != ':' ){
            return( 0 );
        } // if
        // Following works because the output cannot be longer than the input being converted
        convertHexEncodedStringToBuffer( ucSubString, ucSubString );
        if( ucSubString[ 3 ] == IHEX_EOF ){
            break; // We have reached EOF without error
        }
        //for( i = 0, ucCalculatedSum = 0; i < ucSubString[ 0 ]+4; i++ ){
        //    ucCalculatedSum += ucSubString[ i ];
        //} // for
        //ucCalculatedSum = 1 + ( 0xFF ^ (u8)ucCalculatedSum ); 
        //if( (u8)ucCalculatedSum != ucSubString[ i ] ){ // Last short is checksum
        if( sysCRC8( ucSubString, ucSubString[ 0 ]+4 ) != ucSubString[ i ] ){ // Last short is checksum
            return( FALSE ); // Corrupt HEX Row
        } // if
        i = ( (u16)ucSubString[ 1 ] << 8 ) + ucSubString[ 2 ];
        if( ucSubString[ 3 ] == IHEX_DATA && i < 0x2000 ){
            return( 0 );
        } // if 
    } // for

    //putstr( (u8*)BOOT_OK );
    print( STDIO, (u8*)BOOT_OK );
    return( 1 );
}
Пример #6
0
u8 bootTest( PYGMYFILE *pygmyFile )
{
    // This function pre-tests every row in firmware file for corruption before erase and program
    u32 i;
    u8 ucBuffer[ 64 ], ucCalculatedSum, *ucSubString;

    for( ; !( fileIsEOF( pygmyFile ) ); ){
        // Get an IHEX packet
        for( i = 0; i < 64; i++ ){
            ucBuffer[ i ] = fileGetChar( pygmyFile );
            if( ucBuffer[ i ] == '\r' ){
                ucBuffer[ i ] = '\0';
                break;
            } // if
        } // for
        ucSubString = getNextSubString( ucBuffer, WHITESPACE|NEWLINE );
        
        if( *(ucSubString++) != ':' ){
            return( 0 );
        } // if
        // Following works because the output cannot be longer than the input being converted
        convertHexEncodedStringToBuffer( ucSubString, ucSubString );
        if( ucSubString[ 3 ] == IHEX_EOF ){
            break; // We have reached EOF without error
        }
        for( i = 0, ucCalculatedSum = 0; i < ucSubString[ 0 ]+4; i++ ){
            ucCalculatedSum += ucSubString[ i ];
        } // for
        ucCalculatedSum = 1 + ( 0xFF ^ (u8)ucCalculatedSum ); 
        if( (u8)ucCalculatedSum != ucSubString[ i ] ){ // Last short is checksum
            return( 0 ); // Corrupt HEX Row
        } // if
        i = ( (u16)ucSubString[ 1 ] << 8 ) + ucSubString[ 2 ];
        //if( ucSubString[ 3 ] == IHEX_DATA && i > 0x2000 ){
        //    return( 0 );
        //} // if 
    } // for

    return( 1 );
}