void TinkerforgeSensors::callbackConnected(uint8_t connect_reason, void *user_data) { TinkerforgeSensors *tfs = (TinkerforgeSensors*) user_data; //if (tfs->is_imu_connected == false) ipcon_enumerate(&(tfs->ipcon)); return; }
void LaserTransform::callbackConnected(uint8_t connect_reason, void *user_data) { LaserTransform *lt = (LaserTransform*) user_data; if (lt->is_imu_connected == false) ipcon_enumerate(&(lt->ipcon)); return; }
void MasterConnectionImpl::connect(const std::string& host, Poco::UInt16 port) { poco_assert (ipcon_get_connection_state(&_ipcon) == IPCON_CONNECTION_STATE_DISCONNECTED); int rc = ipcon_connect(&_ipcon, host.c_str(), port); switch (rc) { case E_OK: break; case E_TIMEOUT: throw Poco::TimeoutException(); case E_HOSTNAME_INVALID: throw Poco::IOException("invalid hostname", host); default: throw Poco::IOException("cannot establish connection to master"); } while (ipcon_get_connection_state(&_ipcon) == IPCON_CONNECTION_STATE_PENDING) { Poco::Thread::sleep(100); } ipcon_register_callback(&_ipcon, IPCON_CALLBACK_ENUMERATE, (void*) enumerate, this); rc = ipcon_enumerate(&_ipcon); if (rc != E_OK) { throw Poco::IOException(); } }
void cb_connected(uint8_t connected_reason, void *user_data) { SmokeDetector *sd = (SmokeDetector *)user_data; if(connected_reason == IPCON_CONNECT_REASON_AUTO_RECONNECT) { printf("Auto Reconnect\n"); while(true) { int rc = ipcon_enumerate(&sd->ipcon); if(rc < 0) { fprintf(stderr, "Could not enumerate: %d\n", rc); // TODO: sleep 1s continue; } break; } } }
int main(void) { SmokeDetector sd; ipcon_create(&sd.ipcon); while(true) { int rc = ipcon_connect(&sd.ipcon, HOST, PORT); if(rc < 0) { fprintf(stderr, "Could not connect to brickd: %d\n", rc); // TODO: sleep 1s continue; } break; } ipcon_register_callback(&sd.ipcon, IPCON_CALLBACK_ENUMERATE, (void *)cb_enumerate, (void *)&sd); ipcon_register_callback(&sd.ipcon, IPCON_CALLBACK_CONNECTED, (void *)cb_connected, (void *)&sd); while(true) { int rc = ipcon_enumerate(&sd.ipcon); if(rc < 0) { fprintf(stderr, "Could not enumerate: %d\n", rc); // TODO: sleep 1s continue; } break; } printf("Press key to exit\n"); getchar(); ipcon_destroy(&sd.ipcon); return 0; }