int _tmain(int argc, _TCHAR* argv[]) { bool force_slave = false; int32_t offset = 0; bool syntonize = false; uint8_t priority1 = 248; int i; // Register default network interface WindowsPCAPNetworkInterfaceFactory *default_factory = new WindowsPCAPNetworkInterfaceFactory(); OSNetworkInterfaceFactory::registerFactory( factory_name_t( "default" ), default_factory ); // Create thread, lock, timer, timerq factories WindowsThreadFactory *thread_factory = new WindowsThreadFactory(); WindowsTimerQueueFactory *timerq_factory = new WindowsTimerQueueFactory(); WindowsLockFactory *lock_factory = new WindowsLockFactory(); WindowsTimerFactory *timer_factory = new WindowsTimerFactory(); WindowsConditionFactory *condition_factory = new WindowsConditionFactory(); WindowsNamedPipeIPC *ipc = new WindowsNamedPipeIPC(); if( !ipc->init() ) { delete ipc; ipc = NULL; } /* Process optional arguments */ for( i = 1; i < argc-1; ++i ) { if( ispunct(argv[i][0]) ) { if( toupper( argv[i][1] ) == 'H' ) { print_usage( argv[0] ); return -1; } else if( toupper( argv[i][1] ) == 'R' ) { if( i+1 >= argc ) { printf( "Priority 1 value must be specified on " "command line, using default value\n" ); } else { unsigned long tmp = strtoul( argv[i], NULL, 0 ); ++i; if( tmp > 254 ) { printf( "Invalid priority 1 value, using " "default value\n" ); } else { priority1 = (uint8_t) tmp; } } } } } // Create Low level network interface object uint8_t local_addr_ostr[ETHER_ADDR_OCTETS]; if( i >= argc ) { print_usage( argv[0] ); return -1; } parseMacAddr( argv[i], local_addr_ostr ); LinkLayerAddress local_addr(local_addr_ostr); // Create HWTimestamper object HWTimestamper *timestamper = new WindowsTimestamper(); // Create Clock object IEEE1588Clock *clock = new IEEE1588Clock( false, false, priority1, timestamper, timerq_factory, ipc ); // Do not force slave // Create Port Object linked to clock and low level IEEE1588Port *port = new IEEE1588Port( clock, 1, false, 0, timestamper, 0, &local_addr, condition_factory, thread_factory, timer_factory, lock_factory ); if( !port->init_port() ) { printf( "Failed to initialize port\n" ); return -1; } port->processEvent( POWERUP ); // Wait for Ctrl-C if( !SetConsoleCtrlHandler( ctrl_handler, true )) { printf( "Unable to register Ctrl-C handler\n" ); return -1; } while( !exit_flag ) Sleep( 1200 ); delete( ipc ); return 0; }
int _tmain(int argc, _TCHAR* argv[]) { PortInit_t portInit; phy_delay_map_t ether_phy_delay; ether_phy_delay[LINKSPEED_1G].set_delay (PHY_DELAY_GB_TX_PCH, PHY_DELAY_GB_RX_PCH); ether_phy_delay[LINKSPEED_100MB].set_delay (PHY_DELAY_MB_TX_PCH, PHY_DELAY_MB_RX_PCH); portInit.clock = NULL; portInit.index = 1; portInit.timestamper = NULL; portInit.net_label = NULL; portInit.automotive_profile = false; portInit.isGM = false; portInit.testMode = false; portInit.initialLogSyncInterval = LOG2_INTERVAL_INVALID; portInit.initialLogPdelayReqInterval = LOG2_INTERVAL_INVALID; portInit.operLogPdelayReqInterval = LOG2_INTERVAL_INVALID; portInit.operLogSyncInterval = LOG2_INTERVAL_INVALID; portInit.condition_factory = NULL; portInit.thread_factory = NULL; portInit.timer_factory = NULL; portInit.lock_factory = NULL; portInit.neighborPropDelayThreshold = CommonPort::NEIGHBOR_PROP_DELAY_THRESH; bool syntonize = false; uint8_t priority1 = 248; int i; int phy_delays[4] = { -1, -1, -1, -1 }; // Register default network interface WindowsPCAPNetworkInterfaceFactory *default_factory = new WindowsPCAPNetworkInterfaceFactory(); OSNetworkInterfaceFactory::registerFactory( factory_name_t( "default" ), default_factory ); // Create thread, lock, timer, timerq factories portInit.thread_factory = new WindowsThreadFactory(); portInit.lock_factory = new WindowsLockFactory(); portInit.timer_factory = new WindowsTimerFactory(); portInit.condition_factory = new WindowsConditionFactory(); WindowsNamedPipeIPC *ipc = new WindowsNamedPipeIPC(); WindowsTimerQueueFactory *timerq_factory = new WindowsTimerQueueFactory(); if( !ipc->init() ) { delete ipc; ipc = NULL; } // If there are no arguments, output usage if (1 == argc) { print_usage(argv[0]); return -1; } /* Process optional arguments */ for( i = 1; i < argc; ++i ) { if( ispunct(argv[i][0]) ) { if( toupper( argv[i][1] ) == 'H' ) { print_usage( argv[0] ); return -1; } else if( toupper( argv[i][1] ) == 'R' ) { if( i+1 >= argc ) { printf( "Priority 1 value must be specified on " "command line, using default value\n" ); } else { unsigned long tmp = strtoul( argv[i+1], NULL, 0 ); ++i; if( tmp > 254 ) { printf( "Invalid priority 1 value, using " "default value\n" ); } else { priority1 = (uint8_t) tmp; } } } } } // the last argument is supposed to be a MAC address, so decrement argv index to read it i--; // Create Low level network interface object uint8_t local_addr_ostr[ETHER_ADDR_OCTETS]; parseMacAddr( argv[i], local_addr_ostr ); LinkLayerAddress local_addr(local_addr_ostr); portInit.net_label = &local_addr; // Create HWTimestamper object portInit.timestamper = new WindowsTimestamper(); // Create Clock object portInit.clock = new IEEE1588Clock( false, false, priority1, timerq_factory, ipc, portInit.lock_factory ); // Do not force slave // Create Port Object linked to clock and low level portInit.phy_delay = ðer_phy_delay; EtherPort *port = new EtherPort( &portInit ); port->setLinkSpeed(findLinkSpeed(&local_addr)); if ( !port->init_port() ) { printf( "Failed to initialize port\n" ); return -1; } port->processEvent( POWERUP ); // Wait for Ctrl-C if( !SetConsoleCtrlHandler( ctrl_handler, true )) { printf( "Unable to register Ctrl-C handler\n" ); return -1; } while( !exit_flag ) Sleep( 1200 ); delete( ipc ); return 0; }