//*************************************************************************** // Main() - Main Routine //*************************************************************************** void main(){ OSCCON = 0xF0; //Initialitation of Internal Oscillator OSCTUNEbits.PLLEN = 1; hardware_setup(); //Hardware initialization if ( !vscp_check_pstorage() ) // Check VSCP persistent storage and init_app_eeprom(); // restore if needed init_app_ram(); // Initialize data vscp_init(); // Initialize the VSCP functionality while(1){ //Handler scheduler ClrWdt(); // Feed the dog if(timeEvent._10mS){ //10mS Event timeEvent._10mS = 0; vscp_10mS_Running(); hardware_10mS(); } if(timeEvent._100mS){ //100mS Event timeEvent._100mS = 0; vscp_100mS_Running(); vscp_ledActivity(); } if(timeEvent._1s){ //1second Event timeEvent._1s = 0; vscp_doOneSecondWork(); // Do VSCP one second jobs greenLed_pin = !greenLed_pin; } vscp_freeRunning(); //TODO: Handling the override event } }
//*************************************************************************** // Main() - Main Routine //*************************************************************************** void main( void ) { unsigned char a; unsigned char i; unsigned char ctrlreg; // Current control register BOOL bOn; EmDataFlags.EmDataReceived = 0; EmDataFlags.EmDataTrue = 0; EmDataTimer = 0; init(); // Initialize Microcontroller // Check VSCP persistent storage and // restore if needed if ( !vscp_check_pstorage() ) { // Spoiled or not initialized - reinitialize init_app_eeprom(); } vscp_init(); // Initialize the VSCP functionality while ( 1 ) { // Loop Forever ClrWdt(); // Give the dog a bone if ( ( vscp_initbtncnt > 250 ) && ( 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(); // Temperature report timers are only updated if in active // state guid_reset if ( VSCP_STATE_ACTIVE == vscp_node_state ) { } } 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(); } // while }