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;
}
Exemple #2
0
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;
}