How to port VSCP to new platform
To port VSCP to a new platform is not very hard even if it involves some steps.
// Status LED vscp_statuscnt++; if ( ( VSCP_LED_BLINK1 == vscp_initledfunc ) && ( vscp_statuscnt > 100 ) ) { if ( PORTCbits.RC1 ) { PORTCbits.RC1 = 0; } else { PORTCbits.RC1 = 1; } vscp_statuscnt = 0; } else if ( VSCP_LED_ON == vscp_initledfunc ) { PORTCbits.RC1 = 1; vscp_statuscnt = 0; } else if ( VSCP_LED_OFF == vscp_initledfunc ) { PORTCbits.RC1 = 0; vscp_statuscnt = 0; }
//*************************************************************************** // Main() - Main Routine //*************************************************************************** void main() { init(); // Initialize Microcontroller // Check VSCP persistent storage and // restore if needed if ( !vscp_check_pstorage() ) { init_app_eeprom(); // Initialize the application EEPROM } vscp_init(); // Initialize the VSCP functionality while ( 1 ) { // Loop Forever ClrWdt(); // Feed the dog if ( ( vscp_initbtncnt > 500 ) && ( VSCP_STATE_INIT != vscp_node_state ) ) { // Init button pressed vscp_nickname = VSCP_ADDRESS_FREE; writeEEPROM( VSCP_EEPROM_NICKNAME, VSCP_ADDRESS_FREE ); vscp_init(); } // Check for a valid event vscp_imsg.flags = 0; vscp_getEvent(); // do a meaurement if needed if ( measurement_clock > 1000 ) { measurement_clock = 0; // Do VSCP one second jobs vscp_doOneSecondWork(); switch ( vscp_node_state ) { case VSCP_STATE_STARTUP: // Cold/warm reset // Get nickname from EEPROM if ( VSCP_ADDRESS_FREE == vscp_nickname ) { // new on segment need a nickname vscp_node_state = VSCP_STATE_INIT; } else { // been here before - go on vscp_node_state = VSCP_STATE_ACTIVE; vscp_goActiveState(); } break; case VSCP_STATE_INIT: // Assigning nickname vscp_handleProbeState(); break; case VSCP_STATE_PREACTIVE: // Waiting for host initialisation vscp_goActiveState(); break; case VSCP_STATE_ACTIVE: // The normal state if ( vscp_imsg.flags & VSCP_VALID_MSG ) { // incoming message? vscp_handleProtocolEvent(); } break; case VSCP_STATE_ERROR: // Everything is *very* *very* bad. vscp_error(); break; default: // Should not be here... vscp_node_state = VSCP_STATE_STARTUP; break; } doWork(); // Do general application work } // while
Discussion