Beispiel #1
0
void 
PropertyManager::updateGrid(wxPropertyGridManager *pg, nau::AttribSet &attribs, AttributeValues *attribVal) {

	std::map<std::string, std::unique_ptr<Attribute>> & attributes = attribs.getAttributes();

	pg->ClearSelection();

	for (auto &attrib : attributes) {

		std::unique_ptr<Attribute> &a = attrib.second;
		switch (a->getType()) {

		case Enums::ENUM: updateEnum(pg, a->getName(), attribVal->getPrope((AttributeValues::EnumProperty)a->getId())); break;
		case Enums::BOOL: updateBool(pg, a->getName(), attribVal->getPropb((AttributeValues::BoolProperty)a->getId())); break;
		case Enums::BVEC4: updateBVec4(pg, a->getName(), attribVal->getPropb4((AttributeValues::Bool4Property)a->getId())); break;
		case Enums::INT: updateInt(pg, a->getName(), attribVal->getPropi((AttributeValues::IntProperty)a->getId())); break;
		case Enums::IVEC3: updateIVec3(pg, a->getName(), attribVal->getPropi3((AttributeValues::Int3Property)a->getId())); break;
		case Enums::UINT: updateInt(pg, a->getName(), attribVal->getPropui((AttributeValues::UIntProperty)a->getId())); break;
		case Enums::UIVEC2: updateUIVec2(pg, a->getName(), attribVal->getPropui2((AttributeValues::UInt2Property)a->getId())); break;
		case Enums::UIVEC3: updateUIVec3(pg, a->getName(), attribVal->getPropui3((AttributeValues::UInt3Property)a->getId())); break;
		case Enums::FLOAT: updateFloat(pg, a->getName(), attribVal->getPropf((AttributeValues::FloatProperty)a->getId())); break;
		case Enums::VEC2: updateVec2(pg, a->getName(), attribVal->getPropf2((AttributeValues::Float2Property)a->getId())); break;
		case Enums::VEC3: updateVec3(pg, a->getName(), attribVal->getPropf3((AttributeValues::Float3Property)a->getId())); break;
		case Enums::VEC4: 
			if (a->getSemantics() == Attribute::Semantics::COLOR)
				updateVec4Color(pg, a->getName(), attribVal->getPropf4((AttributeValues::Float4Property)a->getId()));
			else
				updateVec4(pg, a->getName(), attribVal->getPropf4((AttributeValues::Float4Property)a->getId()));
			break;
		case Enums::MAT3: updateMat3(pg, a->getName(), attribVal->getPropm3((AttributeValues::Mat3Property)a->getId())); break;
		case Enums::MAT4: updateMat4(pg, a->getName(), attribVal->getPropm4((AttributeValues::Mat4Property)a->getId())); break;
		case Enums::STRING: updateString(pg, a->getName(), attribVal->getProps((AttributeValues::StringProperty)a->getId())); break;
		default: assert(false && "Missing datatype in property manager");
		}
	}
}
Beispiel #2
0
void Com::loop(int time) {
    while(Serial.available()>0) {
        char cmd = Serial.read();
        switch(cmd) {
        case 't':
            temp = readLong();
            sendOk();
            Serial.print("temp = ");
            Serial.println(temp);
            break;

        case 's': // read settings
            sendSettings();
            break;

        case 'P': // write PID
            updatePid();
            break;
        case 'G': // write Gain
            updateFloat(&g_userControlGain);
            break;
        case 'W': // write Windup Guard
            updateFloat(&g_pidWindupGuard);
            break;
        default:
            sendError();
            break;
        }
    }

    {
        Telem telem;
        sendPacketStart(PACKET_TELEMETRY);
        telem.Yaw = g_telemetryCom.Yaw;
        telem.Pitch = g_telemetryCom.Pitch;
        telem.Roll = g_telemetryCom.Roll;
        telem.MotorL = g_motorLeft.get();
        telem.MotorR = g_motorRight.get();
        telem.MotorF = g_motorFront.get();
        telem.MotorB = g_motorBack.get();
        telem.BatteryLevel = g_batteryManager.getLastReading();
        telem.UserElev = g_receiverCom.pos[RECEIVER_Throttle];
        telem.UserPitch = g_receiverCom.pos[RECEIVER_Elevator];
        telem.UserRoll = g_receiverCom.pos[RECEIVER_Aileron];
        telem.UserYaw = g_receiverCom.pos[RECEIVER_Rudder];
        telem.loopCount = g_loopCount;
        Serial.write((byte*)&telem, sizeof(Telem));
    }

    if(time - _lastSlowTime > 1000) {
        _lastSlowTime = time;

        Serial.print("RECV: ");
        Serial.print(g_receiverCom.hasSignal ? "HAS SIGNAL " : "NO SIGNAL  ");
        for(int i=0; i<SERVO_INPUT_CHANNELS; i++) {
            if(i != 0) {
                Serial.print(", ");
            }
            Serial.print(g_receiverCom.pos[i]);
        }

        Serial.print(" TELEM: ");
        Serial.print(g_telemetryCom.Yaw);
        Serial.print(", ");
        Serial.print(g_telemetryCom.Pitch);
        Serial.print(", ");
        Serial.print(g_telemetryCom.Roll);

        Serial.print(" MOTOR: ");
        Serial.print(g_motorFront.get());
        Serial.print(", ");
        Serial.print(g_motorBack.get());
        Serial.print(", ");
        Serial.print(g_motorLeft.get());
        Serial.print(", ");
        Serial.print(g_motorRight.get());

        Serial.print(" PID: ");
        Serial.print(g_rollPid.getLastPosition());
        Serial.print(", ");
        Serial.print(g_pitchPid.getLastPosition());
        Serial.print(", ");
        Serial.print(g_yawPid.getLastPosition());

        Serial.print(" BAT: ");
        Serial.print(g_batteryManager.getLastReading());
        Serial.println(g_batteryManager.getIsWarning() ? " warning" : " ");
    }
}