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"); } } }
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" : " "); } }