/** * Init this node */ bool SimpleE133Node::Init() { // setup notifications for stdin & turn off buffering m_stdin_descriptor.SetOnData(ola::NewCallback(this, &SimpleE133Node::Input)); m_ss.AddReadDescriptor(&m_stdin_descriptor); tcgetattr(STDIN_FILENO, &m_old_tc); termios new_tc = m_old_tc; new_tc.c_lflag &= static_cast<tcflag_t>(~ICANON & ~ECHO); tcsetattr(STDIN_FILENO, TCSANOW, &new_tc); if (!m_e133_device.Init()) return false; // register the root endpoint m_e133_device.SetRootEndpoint(&m_root_endpoint); // add a single endpoint m_endpoint_manager.RegisterEndpoint(1, &m_first_endpoint); // register in SLP OLA_INFO << "service is " << m_service_name; if (!m_slp_thread.Init()) { OLA_WARN << "SlpThread Init() failed"; return false; } m_slp_thread.Start(); return true; }
/* * Setup the monitoring console */ bool DmxMonitor::Init() { /* set up ola connection */ if (!m_client.Setup()) { printf("error: %s", strerror(errno)); return false; } OlaCallbackClient *client = m_client.GetClient(); client->SetDmxCallback(ola::NewCallback(this, &DmxMonitor::NewDmx)); client->RegisterUniverse( m_universe, ola::REGISTER, ola::NewSingleCallback(this, &DmxMonitor::RegisterComplete)); /* init curses */ m_window = initscr(); if (!m_window) { printf("unable to open main-screen\n"); return false; } savetty(); start_color(); noecho(); raw(); keypad(m_window, TRUE); m_client.GetSelectServer()->AddReadDescriptor(&m_stdin_descriptor); m_stdin_descriptor.SetOnData( ola::NewCallback(this, &DmxMonitor::StdinReady)); m_client.GetSelectServer()->RegisterRepeatingTimeout( 500, ola::NewCallback(this, &DmxMonitor::CheckDataLoss)); CalcScreenGeometry(); ChangePalette(m_palette_number); m_buffer.Blackout(); timerclear(&m_last_data); DrawScreen(); return true; }