void HeartbeatArrival(uint16_t sourceId, CANExtended::DeviceState state) { #ifdef DEBUG_PRINT static int dc =0; #endif if (state != CANExtended::Operational) return; CanEx->Sync(sourceId, SYNC_LIVE, CANExtended::Trigger); //Confirm & Stop if (sourceId & 0x100) { boost::shared_ptr<ShelfUnit> unit = unitManager.FindUnit(sourceId); if (unit.get() == NULL) { #ifdef DEBUG_PRINT cout<<"#"<<++dc<<" DeviceID: "<<(sourceId & 0xff)<<" Added"<<endl; #endif unit.reset(new ShelfUnit(*CanEx, sourceId)); CanEx->AddDevice(unit); // unit->ReadCommandResponse.bind(ethEngine.get(), &NetworkEngine::DeviceReadResponse); // unit->WriteCommandResponse.bind(ethEngine.get(), &NetworkEngine::DeviceWriteResponse); unitManager.Add(sourceId, unit); } } }