void BluetoothSensor::run() { bool updateDB = false; bool scan = false; print("Running, CTRL+C to quit..."); // index of the device currently scanned unsigned int deviceIndex = 0; while(!quit) { // update device db if previous update didn't succeed if (m_updateDBNeeded) m_updateDBNeeded = !updateDeviceData(); // make sure that current device index is valid. // this also guarantees that no scanning is made when there are no devices. if (deviceIndex < m_devices.size()) { checkDevice(deviceIndex); } // move to next device, start from beginning when at the end deviceIndex++; if (deviceIndex >= m_devices.size()) deviceIndex = 0; // check if there are arrived mqtt messages (commands) do { processIncomingMessages(updateDB, scan); if (updateDB) { m_updateDBNeeded = !updateDeviceData(); } if (scan) { discoverDevices(); } } // check arrived messages again after database update or device discovery, // so that a possible request for those is processed before continuing while ((updateDB || scan) && !quit); // check that Mosquitto is still connected. // if Mosquitto disconnects there can be messages from this iteration // which aren't sent at all, but missing some outgoing messages // shouldn't be too big of a problem. if (!m_mosquitto->isConnected()) { printError("Mosquitto disconnected"); if (connectMosquitto()) { // update device db and send hello after mosquitto reconnect m_updateDBNeeded = !updateDeviceData(); sendHello(); } } } }
Matrix* CuBlasMatrix::clone() { if(hostDataChanged) updateDeviceData(); CuBlasMatrix* clone = new CuBlasMatrix(rows, cols); cudaMemcpy(clone->data(), deviceRaw, sizeof(cuDoubleComplex)*rows*cols, cudaMemcpyDeviceToDevice); return clone; }
bool BluetoothSensor::initAll(std::string configFileName) { bool manualSensorID = false; print("Reading config file..."); dictionary* ini ; ini = iniparser_load(configFileName.c_str()); if (!ini) { print("Cannot parse config file. Using default values"); } else { m_brokerAddress = iniparser_getstring(ini, ":broker_address", (char*)DEFAULT_BROKER_ADDRESS.c_str()); m_brokerPort = iniparser_getint(ini, ":broker_port", DEFAULT_BROKER_PORT); m_dataFetchUrl = iniparser_getstring(ini, ":data_fetch_url", (char*)DEFAULT_DATA_FETCH_URL.c_str()); m_connectAttemptInterval = iniparser_getint(ini, ":connect_attempt_interval", DEFAULT_CONNECT_ATTEMPT_INTERVAL); if (iniparser_find_entry(ini, ":sensor_id")) { m_sensorID = iniparser_getstring(ini, ":sensor_id", 0); manualSensorID = true; } } iniparser_freedict(ini); if (!m_bluetoothPoller) { print("Initializing Bluetooth... "); std::string btAddress; m_bluetoothPoller = new BluetoothPoller(); if (!m_bluetoothPoller->init(btAddress)) { printError(m_bluetoothPoller->getLastErrorString()); return false; } if (!manualSensorID) m_sensorID = "bt-sensor_" + btAddress; } if (!m_dataGetter) { print("Initializing Curl..."); m_dataGetter = new DataGetter(); if (!m_dataGetter->init()) { printError(m_dataGetter->getLastErrorString()); return false; } } if (!m_mosquitto) { print("Initializing Mosquitto... "); m_mosquitto = new MosquittoHandler; std::string mosqID = m_sensorID; if (!m_mosquitto->init(mosqID.c_str()) || !m_mosquitto->connectToBroker(m_brokerAddress.c_str(), m_brokerPort)) { printError(m_mosquitto->getLastErrorString()); return false; } m_mosquitto->subscribe("command/fetch_device_database"); m_mosquitto->subscribe(std::string("command/scan/bluetooth/" + m_sensorID).c_str()); m_mosquitto->subscribe("command/scan/bluetooth"); print("Connecting to broker... "); if (!m_mosquitto->waitForConnect()) { // first connection attempt failed, go into retry loop printError(m_mosquitto->getLastErrorString()); while (!connectMosquitto(false)) { if (quit) return false; } } } m_updateDBNeeded = !updateDeviceData(); sendHello(); print("Sensor ID: " + m_sensorID); return true; }
bool LANSensor::initAll(std::string configFileName) { if (getuid() != 0) { printError("Root priviledges needed"); return false; } bool manualSensorID = false; print("Reading config file... "); dictionary* ini; ini = iniparser_load(configFileName.c_str()); if (!ini) { print("Cannot parse config file. Using default values"); } else { m_arpscan_parameters = iniparser_getstring(ini, ":arp-scan_parameters", (char*)DEFAULT_ARPSCAN_PARAMETERS.c_str()); m_brokerAddress = iniparser_getstring(ini, ":broker_address", (char*)DEFAULT_BROKER_ADDRESS.c_str()); m_brokerPort = iniparser_getint(ini, ":broker_port", DEFAULT_BROKER_PORT); m_dataFetchUrl = iniparser_getstring(ini, ":data_fetch_url", (char*)DEFAULT_DATA_FETCH_URL.c_str()); m_scanInterval = iniparser_getint(ini, ":scan_interval", DEFAULT_SCAN_INTERVAL); m_connectAttemptInterval = iniparser_getint(ini, ":connect_attempt_interval", DEFAULT_CONNECT_ATTEMPT_INTERVAL); if (iniparser_find_entry(ini, ":sensor_id")) { m_sensorID = iniparser_getstring(ini, ":sensor_id", 0); manualSensorID = true; } } iniparser_freedict(ini); if (!manualSensorID) { // create sensor id from MAC address std::string id = getOwnMAC(); if (!id.size()) { id = "default"; } m_sensorID = "lan-sensor_" + id; } if (!m_ARPScanner) { print("Initializing ARP scanner... "); m_ARPScanner = new ARPScanner(); if (!m_ARPScanner->init(m_arpscan_parameters)) { printError(m_ARPScanner->getLastErrorString()); delete m_ARPScanner; m_ARPScanner = 0; return false; } } if (!m_dataGetter) { print("Initializing Curl... "); m_dataGetter = new DataGetter(); if (!m_dataGetter->init()) { printError(m_dataGetter->getLastErrorString()); return false; } } if (!m_mosquitto) { print("Initializing Mosquitto... "); m_mosquitto = new MosquittoHandler; std::string mosqID = m_sensorID; if (!m_mosquitto->init(mosqID.c_str()) || !m_mosquitto->connectToBroker(m_brokerAddress.c_str(), m_brokerPort)) { printError(m_mosquitto->getLastErrorString()); return false; } m_mosquitto->subscribe("command/fetch_device_database"); m_mosquitto->subscribe(std::string("command/scan/lan/" + m_sensorID).c_str()); m_mosquitto->subscribe("command/scan/lan"); print("Connecting to broker... "); if (!m_mosquitto->waitForConnect()) { printError(m_mosquitto->getLastErrorString()); while (!connectMosquitto(false)) { if (quit) return false; } } } m_updateDBNeeded = !updateDeviceData(); sendHello(); print("Sensor ID: " + m_sensorID); return true; }
void LANSensor::run() { bool updateDB = false; bool scan = false; print("Running, CTRL+C to quit..."); while(!quit) { // update device db if previous update didn't succeed if (m_updateDBNeeded) m_updateDBNeeded = !updateDeviceData(); checkDevices(); std::stringstream ss; ss << "Waiting scan interval (" << m_scanInterval << " sec)..."; print(ss.str()); // wait scan interval, check for incoming messages every second while doing so for (int timer = 0; timer < m_scanInterval; timer++) { sleep(1); // check if there are arrived mqtt messages (commands) do { processIncomingMessages(updateDB, scan); if (updateDB) { m_updateDBNeeded = !updateDeviceData(); // exit from wait loop timer = m_scanInterval; } if (scan) { discoverDevices(); // exit from wait loop timer = m_scanInterval; } } // check arrived messages again after database update or device discovery, // so that a possible request for those is processed before continuing while ((updateDB || scan) && !quit); // check that Mosquitto is still connected. // if Mosquitto disconnects there can be messages from this iteration // which aren't sent at all, but missing some outgoing messages // shouldn't be too big of a problem. if (!m_mosquitto->isConnected()) { printError("Mosquitto disconnected"); if (connectMosquitto()) { // update device db and send hello after mosquitto reconnect m_updateDBNeeded = !updateDeviceData(); sendHello(); } break; } if (quit) break; } } }
void* CuBlasMatrix::data() { if(hostDataChanged) updateDeviceData(); return deviceRaw; }