Пример #1
0
u8 modem_sms( u8 *ucBuffer )
{
    PYGMYCOMMAND pygmyCmd1, pygmyCmd2, pygmyCmdCMGF;
    
    
    //streamSetActionChars( MODEM_COM, "\r>" );
    //cmdInitQueue( &globalModemQueue );
    copyString( getNextSubString( ucBuffer, WHITESPACE ), globalModemSMS.PhoneNumber ); 
    copyString( getNextSubString( NULL, NEWLINE ), globalModemSMS.Message );
    //print( MODEM_DEBUG, "\rSending \"%s\"", globalModemSMS.Message ); 
    // set SMS format
    //pygmyCmdCMGF.Name = (u8*)AT_CMGF;
    //pygmyCmdCMGF.PrintHandler = print_CMGF;
    //pygmyCmdCMGF.EventHandler = handler_ATCMGF;
    //pygmyCmdCMGF.Expire = 2;
    //pygmyCmdCMGF.Retry = 1;
    
    pygmyCmd1.Name = ">";   
    pygmyCmd1.Expire = 2;
    pygmyCmd1.Retry = 0;
    pygmyCmd1.EventHandler = handler_ATSMSPROMPT;
    pygmyCmd1.PrintHandler = print_CMGS;

    pygmyCmd2.Name = (u8*)AT_CMGS;
    pygmyCmd2.Expire = 2;
    pygmyCmd2.Retry = 1;
    pygmyCmd2.EventHandler = handler_ATCMGS;
    pygmyCmd2.PrintHandler = print_CMGSMessage;
    
    //cmdQueue( &globalModemQueue, &pygmyCmdCMGF );
    cmdQueue( &globalModemQueue, &pygmyCmd1 );
    cmdQueue( &globalModemQueue, &pygmyCmd2 );

    return( TRUE );
}
Пример #2
0
u8 handler_ATCCLK( u8 *ucBuffer )
{
    u8 *ucParam, *ucTime;//[ 2 ];

    ucParam = getNextSubString( ucBuffer, WHITESPACE );
    ucTime = getNextSubString( NULL, NEWLINE );
    print( MODEM_DEBUG, "\rATCCLK( %s, %s )", ucParam, ucTime );
    if( isStringSame( ucParam,  (u8*)AT_CCLK ) ){//&& set_time( ucParams[ 1 ] ) ){
        print( MODEM_DEBUG, "TIME( %s )" );
        return( TRUE );
    } // if
    
    return( FALSE );
}
Пример #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
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();
}
Пример #5
0
u8 handler_ATCGDCONT( u8 *ucBuffer )
{
    if( isStringSame( getNextSubString( ucBuffer, WHITESPACE|PUNCT ), (u8*)AT_OK ) ){
        return( TRUE );
    } // if
    
    return( FALSE );
}
Пример #6
0
u8 handler_ATSH( u8 *ucBuffer )
{
    u8 *ucSubString;
    
    ucSubString = getNextSubString( ucBuffer, WHITESPACE|PUNCT|NEWLINE );
    if( isStringSame( ucSubString, (u8*)AT_OK ) || isStringSame( ucSubString, (u8*)AT_ERROR ) ){
        return( TRUE ); // if already disconnected ERROR is valid
    } // if

    return( FALSE );
}
Пример #7
0
u8 handler_ATESCAPE( u8 *ucBuffer )
{
    u8 *ucParam, ucLen;

    ucParam = getNextSubString( ucBuffer, WHITESPACE|PUNCT );
    if( isStringSame( ucParam, (u8*)AT_OK ) ){
        return( TRUE );
    }

    return( FALSE );
}
Пример #8
0
u8 handler_ATCMGF( u8 *ucBuffer )
{
    u8 *ucParam;

    ucParam = getNextSubString( ucBuffer, WHITESPACE|PUNCT|SEPARATORS );
    //print( MODEM_COM, "\rATCMGF( %s )", ucParam );
    if( isStringSame( ucParam, (u8*)AT_OK ) ){
        return( TRUE );
    } // if

    return( FALSE );
}
Пример #9
0
u8 handler_ATATOFF( u8 *ucBuffer )
{
    u8 *ucSubString;

    ucSubString = getNextSubString( ucBuffer, WHITESPACE|NEWLINE );
    if( ucSubString ){
        // cell_onoff( "" );
        return( TRUE ); // if cell responded then it's not off yet
    }

    return( FALSE ); 
}
Пример #10
0
u8 handler_ATSGACT( u8 *ucBuffer )
{
    u8 *ucSubString;
    
    ucSubString = getNextSubString( ucBuffer, WHITESPACE|PUNCT|NEWLINE );
   
    if( isStringSame( ucSubString, (u8*)AT_SGACT ) || isStringSame( ucSubString, (u8*)AT_OK ) ){
        return( TRUE );
    } // if

    return( FALSE );
}
Пример #11
0
u8 handler_ATOK( u8 *ucBuffer )
{
    // Waits for OK response
    // Returns TRUE for "OK" FALSE for anything else
    u8 *ucSubString;

    ucSubString = getNextSubString( ucBuffer, WHITESPACE|PUNCT );
    if( ucSubString && isStringSame( ucSubString, (u8*)AT_OK ) ){
        return( TRUE );
    }

    return( FALSE );
}
Пример #12
0
u8 handler_ATSMSPROMPT( u8 *ucBuffer )
{
    u8 *ucParam;

    ucParam = getNextSubString( ucBuffer, NEWLINE );
    
    if( replaceChars( ucParam, ">", ' ' ) ){
        print( MODEM_COM, "\rATSMSPROMPT", ucParam );
        return( TRUE );
    } // if
    
    return( TRUE );
}
Пример #13
0
u8 handler_ATSD( u8 *ucBuffer )
{
    u8 *ucSubString;
    
    ucSubString = getNextSubString( ucBuffer, WHITESPACE|PUNCT );
    
    if( isStringSame( ucSubString, (u8*)AT_CONNECT ) ){
        return( TRUE );
    } else if( isStringSame( ucSubString, (u8*)AT_ERROR ) ){
        //cell_close( (u8*)PYGMY_CMD_now );
        //cell_at( "" );
    } // else if

    return( FALSE );
}
Пример #14
0
u8 handler_ATCMGS( u8 *ucBuffer )
{
    u8 *ucSubString;

    ucSubString = getNextSubString( ucBuffer, WHITESPACE|PUNCT|NEWLINE );
   // print( MODEM_COM, "\rATCMGS( %s )", ucSubString );
    if( isStringSame( ucSubString, (u8*)AT_CMGS ) || isStringSame( ucSubString, (u8*)AT_CMS ) ){ 
        // Message fail
        if( cmdIsQueued( &globalModemQueue, (u8*)AT_CMGS ) == 1 ){
            
            return( TRUE );
        } // if
    } // if

    return( FALSE );
}
Пример #15
0
u8 modem_echo( u8 *ucBuffer )
{
    u8 *ucParam;

    ucParam = getNextSubString( ucBuffer, WHITESPACE | PUNCT );
    modem_close( "now" );
    if( isStringSame( ucParam, "on" ) ){
        println( MODEM_COM, "ATE1&W" );
        return( TRUE );
    } else if( isStringSame( ucParam, "off" ) ){
        println( MODEM_COM, "ATE0&W" );
        return( TRUE );
    } // else if

    return( FALSE );
}
Пример #16
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 );
}
Пример #17
0
u8 handler_ATAT( u8 *ucBuffer )
{
    u8 *ucSubString;
    
    ucSubString = getNextSubString( ucBuffer, WHITESPACE|PUNCT );
    if( ucSubString ){
        if( isStringSame( ucSubString, (u8*)AT_OK ) ||
            isStringSame( ucSubString, (u8*)AT_ERROR ) || 
            isStringSame( ucSubString, (u8*)AT_MWI ) ){
            print( MODEM_COM, "\rRadio On\r" );
            deleteTask( "AT", 0 );
        
            return( TRUE );
        } // if
    } // if
    
    return( FALSE );
}
Пример #18
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 );
} 
Пример #19
0
u8 email_get( u8 *ucBuffer )
{
    // This function doesn't "get" an e-mail, rather it acts as the equivalent to HTTP GET
    u8 *ucParam;

    ucParam = getNextSubString( ucBuffer, WHITESPACE|PUNCT );
    
    if( ucParam ){
        if( isStringSame( ucParam, (u8*)EMAIL_220 ) || // Greeting
            isStringSame( ucParam, (u8*)EMAIL_235 ) || // Authentication accepted
            isStringSame( ucParam, (u8*)EMAIL_250 ) || // Ack 
            isStringSame( ucParam, (u8*)EMAIL_334 ) || // Ready for Login
            isStringSame( ucParam, (u8*)EMAIL_354 ) ){ // Ready for Data
            return( TRUE );
        } else if( isStringSame( ucParam, "500" ) || isStringSame( ucParam, "503" ) ){
            modem_close( "now" );
        } else if( isStringSame( ucParam, (u8*)EMAIL_221 ) ){
            modem_close( "now" );
            return( TRUE );
        } //else if
    }

    return( FALSE );
}
Пример #20
0
u8 handler_ATCMGL( u8 *ucBuffer )
{
    print( MODEM_DEBUG, "SMS( %s )", getNextSubString( ucBuffer, NEWLINE ) );

    return( TRUE );
}