OdroidSmartPowerSource::OdroidSmartPowerSource(QString path) : DataSource("Odroid"), QHIDevice(path), lastCmd(Command::NONE), _interval(1000), _running(false), restarted(false), _path(path) { static_cast<QHIDevice*>(this)->connect(&getDataTmr,&QTimer::timeout,[this] () { sendCommand(Command::REQUEST_DATA); read(64,1000); }); descs.append(new DataDescriptor("U_ext","V",1,DataDescriptor::Type::FLOAT)); descs.append(new DataDescriptor("I_ext","A",1,DataDescriptor::Type::FLOAT)); descs.append(new DataDescriptor("P_ext","W",1,DataDescriptor::Type::FLOAT)); descs.append(new DataDescriptor("E_ext","Wh",1,DataDescriptor::Type::FLOAT)); descs.append(new DataDescriptor("Ext_running","",1,DataDescriptor::Type::CHAR)); QHIDevice::connect(this,&QHIDevice::timeout,this,&DataSource::stop); QHIDevice::connect(this,&QHIDevice::receivedData,[this] (QByteArray data) { assert(data.size() == 64); assert(lastCmd != Command::NONE); double lastTime = QDateTime::currentMSecsSinceEpoch()/1000.0; switch (lastCmd) { case Command::REQUEST_VERSION: sendCommand(Command::REQUEST_STATUS); read(64,1000); break; case Command::REQUEST_DATA: lastTime = getGlobalTime(lastTime); emit dataAvailable(descs.at(0),QString(data.mid(2,5)).toFloat(),lastTime); if (data.at(10) != '-') { emit dataAvailable(descs.at(1),QString(data.mid(10,5)).toFloat(),lastTime); emit dataAvailable(descs.at(2),QString(data.mid(17,6)).toFloat(),lastTime); emit dataAvailable(descs.at(3),QString(data.mid(24,5)).toFloat(),lastTime); } else { emit dataAvailable(descs.at(1),0,lastTime); emit dataAvailable(descs.at(2),0,lastTime); emit dataAvailable(descs.at(3),0,lastTime); } emit dataAvailable(descs.at(4),data.at(9) == '*',lastTime); break; case Command::REQUEST_ONOFF: case Command::REQUEST_STARTSTOP: case Command::REQUEST_STATUS: getDataTmr.start(_interval); break; case Command::NONE: ; //Just to make the compiler happy } emit connected(); }); }
void G_InitSessionData( gclient_t *client, char *userinfo, qboolean isBot, qboolean firstTime ) { clientSession_t *sess; const char *value; sess = &client->sess; client->sess.siegeDesiredTeam = TEAM_FREE; // initial team determination if ( g_gametype.integer >= GT_TEAM ) { if ( g_teamAutoJoin.integer ) { sess->sessionTeam = PickTeam( -1 ); } else { // always spawn as spectator in team games if (!isBot) { sess->sessionTeam = TEAM_SPECTATOR; } else { //Bots choose their team on creation value = Info_ValueForKey( userinfo, "team" ); if (value[0] == 'r' || value[0] == 'R') { sess->sessionTeam = TEAM_RED; } else if (value[0] == 'b' || value[0] == 'B') { sess->sessionTeam = TEAM_BLUE; } else { sess->sessionTeam = PickTeam( -1 ); } } } } else { value = Info_ValueForKey( userinfo, "team" ); if ( value[0] == 's' ) { // a willing spectator, not a waiting-in-line sess->sessionTeam = TEAM_SPECTATOR; } else { switch ( g_gametype.integer ) { default: case GT_FFA: case GT_HOLOCRON: case GT_JEDIMASTER: case GT_SINGLE_PLAYER: if ( g_maxGameClients.integer > 0 && level.numNonSpectatorClients >= g_maxGameClients.integer ) { sess->sessionTeam = TEAM_SPECTATOR; } else { sess->sessionTeam = TEAM_FREE; } break; case GT_DUEL: // if the game is full, go into a waiting mode if ( level.numNonSpectatorClients >= 2 ) { sess->sessionTeam = TEAM_SPECTATOR; } else { sess->sessionTeam = TEAM_FREE; } break; case GT_POWERDUEL: { int loners = 0; int doubles = 0; G_PowerDuelCount(&loners, &doubles, qtrue); if (!doubles || loners > (doubles/2)) { sess->duelTeam = DUELTEAM_DOUBLE; } else { sess->duelTeam = DUELTEAM_LONE; } } sess->sessionTeam = TEAM_SPECTATOR; break; } } } if (firstTime){ Q_strncpyz(sess->ipString, Info_ValueForKey( userinfo, "ip" ) , sizeof(sess->ipString)); } if ( !getIpPortFromString( sess->ipString, &(sess->ip), &(sess->port) ) ) { sess->ip = 0; sess->port = 0; } sess->nameChangeTime = getGlobalTime(); // accounts system //if (isDBLoaded && !isBot){ // username = Info_ValueForKey(userinfo, "password"); // delimitator = strchr(username,':'); // if (delimitator){ // *delimitator = '\0'; //seperate username and password // Q_strncpyz(client->sess.username,username,sizeof(client->sess.username)); // } else { // client->sess.username[0] = '\0'; // } //} else { client->sess.username[0] = '\0'; } sess->isInkognito = qfalse; sess->ignoreFlags = 0; sess->canJoin = !sv_passwordlessSpectators.integer || PasswordMatches( Info_ValueForKey( userinfo, "password" ) ); sess->whTrustToggle = qfalse; sess->spectatorState = SPECTATOR_FREE; sess->spectatorTime = level.time; sess->inactivityTime = getGlobalTime() + 1000 * g_spectatorInactivity.integer; sess->siegeClass[0] = 0; Q_strncpyz( sess->saberType, Info_ValueForKey( userinfo, "saber1" ), sizeof( sess->saberType ) ); Q_strncpyz( sess->saber2Type, Info_ValueForKey( userinfo, "saber2" ), sizeof( sess->saber2Type ) ); sess->shadowMuted = qfalse; #ifdef NEWMOD_SUPPORT sess->cuidHash[0] = '\0'; sess->serverKeys[0] = sess->serverKeys[1] = 0; sess->auth = level.nmAuthEnabled && *Info_ValueForKey( userinfo, "nm_ver" ) ? PENDING : INVALID; #endif }