22 #include "MALedsController.hpp" 24 #include "core/MADevice.hpp" 25 #include "core/MARandomness.hpp" 26 #include "core/MAValueGenerators.hpp" 27 #include "types/skits/MALedSkit.hpp" 28 #include "types/MARobotState.hpp" 29 #include "types/MATorso.hpp" 33 #include <boost/algorithm/string/predicate.hpp> 45 void CheckStaticLedsVariables()
47 if (unlikely(!FaceMode.get()))
49 FaceMode.reset(
new int);
55 MALedsController::MALedsController() :
MAController(
MA::LedController), LedModeForSkitter(-1),
56 ShownBatteryLevel(-1), MaximumValue(0.4, 0.05, 1.0)
58 CheckStaticLedsVariables();
61 MC_WARNING(
"The global leds controller is overridden.");
67 MA_BIND_TRANSITION_ACTION(MALedsController, ShowBatteryChargingAnim)
68 MA_BIND_TRANSITION_ACTION(MALedsController, ShowCrownStrokedAnim)
69 MA_BIND_TRANSITION_ACTION(MALedsController, ShowHappyAnim)
70 MA_BIND_TRANSITION_ACTION(MALedsController, ShowSadAnim)
71 MA_BIND_TRANSITION_ACTION(MALedsController, ShowBatteryLevel)
72 MA_BIND_TRANSITION_ACTION(MALedsController, ShowDataUploadStatus)
73 MA_BIND_TRANSITION_ACTION(MALedsController, ShowClientConnectedStatus)
74 MA_BIND_TRANSITION_ACTION(MALedsController, ShowNoNetworkStatus)
75 MA_BIND_TRANSITION_ACTION(MALedsController, ShowStartup)
76 MA_BIND_TRANSITION_ACTION(MALedsController, ShowAngryFace)
77 MA_BIND_TRANSITION_ACTION(MALedsController, HeavyCalculation);
78 MA_BIND_TRANSITION_ACTION(MALedsController, SwitchSoundProfile);
79 MA_BIND_TRANSITION_ACTION(MALedsController, NormalVolumeControl);
80 MA_BIND_TRANSITION_ACTION(MALedsController, AdaptiveVolumeControl);
81 MA_BIND_TRANSITION_ACTION(MALedsController, ShowPickUpMode);
82 MA_BIND_TRANSITION_ACTION(MALedsController, ShowGameMode);
83 MA_BIND_TRANSITION_ACTION(MALedsController, FadeOutEarsGreen);
84 MA_BIND_TRANSITION_ACTION(MALedsController, FadeOutEarsRed);
85 MA_BIND_TRANSITION_ACTION(MALedsController, FadeOutCrownWhite);
88 TransitionLedModes[ShowBatteryChargingAnimStr] = 0;
89 TransitionLedModes[ShowHappyAnimStr] = 1;
90 TransitionLedModes[ShowSadAnimStr] = 1;
91 TransitionLedModes[ShowAngryFaceStr] = 0;
95 MALedsController::~MALedsController()
97 if (MA::Leds.
get() ==
this)
111 return MA::DeviceList();
122 auto LedModeIter = TransitionLedModes.find(name);
124 if (LedModeIter != TransitionLedModes.end() && (int)LedModeIter->second != *FaceMode)
126 *FaceMode = (int)LedModeIter->second;
128 if (LedModeForSkitter >= 0)
129 *FaceMode = LedModeForSkitter;
145 LedModeForSkitter = -1;
146 MA::DeviceGeneratorsMap& ContainerMap = TransitionIter->second.get<2>();
149 for (
auto& container : ContainerMap)
155 if (Device->HasGeneratorContainer(*Container))
161 Device->DeleteGeneratorContainer(*Container);
167 Device->SwapGeneratorContainer(*Container, *NewContainer);
176 if (name == ShowBatteryLevelStr)
178 ShownBatteryLevel = -1;
183 int MALedsController::GetFaceMode()
185 CheckStaticLedsVariables();
190 void MALedsController::ResetSkitterFaceMode()
192 LedModeForSkitter = -1;
196 void MALedsController::SetMaximumValue(
float new_value)
198 MANum<float> NewValue(new_value, MaximumValue.GetMin(), MaximumValue.GetMax());
200 if (NewValue == MaximumValue)
203 MaximumValue = (float)NewValue;
206 for (
int i = 0; i < 14; i++)
208 Face[i]->SetSoftLimit(MaximumValue);
210 BackFBlue->SetSoftLimit(MaximumValue);
211 BackMOrange->SetSoftLimit(MaximumValue);
212 BackRRed->SetSoftLimit(MaximumValue);
213 BackFWhite->SetSoftLimit(MaximumValue);
214 BackMWhite->SetSoftLimit(MaximumValue);
215 BackRWhite->SetSoftLimit(MaximumValue);
219 float MALedsController::GetMaximumValue()
const 221 return (
float)MaximumValue;
225 int MALedsController::GetShownBatteryLevel()
const 227 return ShownBatteryLevel;
232 MA::DeviceGeneratorsMap MALedsController::ShowAwakenEyes()
235 MA::DeviceGeneratorsMap DeviceGenerators;
238 AddGenerator(DeviceGenerators, *Face[8], *Face[8]->AddGenerator(*Generator),
true);
240 AddGenerator(DeviceGenerators, *Face[9], *Face[9]->AddGenerator(*Generator),
true);
241 return DeviceGenerators;
245 MA::DeviceGeneratorsMap MALedsController::ShowSleepingEyes()
248 MA::DeviceGeneratorsMap DeviceGenerators;
251 AddGenerator(DeviceGenerators, *Face[8], *Face[8]->AddGenerator(*Generator),
true);
253 AddGenerator(DeviceGenerators, *Face[9], *Face[9]->AddGenerator(*Generator),
true);
254 return DeviceGenerators;
258 MA::DeviceGeneratorsMap MALedsController::ShowBatteryChargingAnim()
261 MA::DeviceGeneratorsMap DeviceGenerators;
263 float MaxValue =
MCMin((
float)0.3, (
float)MaximumValue);
266 Generator =
new MAPeriodicGenerator(0.0, MaxValue, 0, Speed, 4*Speed, Speed, 4*Speed,
true);
267 AddGenerator(DeviceGenerators, *Face[2].
get(), *Face[2]->AddGenerator(*Generator),
true);
268 Generator =
new MAPeriodicGenerator(0.0, MaxValue, Speed, Speed, 4*Speed, Speed, 3*Speed,
true);
269 AddGenerator(DeviceGenerators, *Face[4].
get(), *Face[4]->AddGenerator(*Generator),
true);
270 Generator =
new MAPeriodicGenerator(0.0, MaxValue, Speed*2, Speed, 4*Speed, Speed, 2*Speed,
true);
271 AddGenerator(DeviceGenerators, *Face[11].
get(), *Face[11]->AddGenerator(*Generator),
true);
272 Generator =
new MAPeriodicGenerator(0.0, MaxValue, Speed*3, Speed, 4*Speed, Speed, Speed,
true);
273 AddGenerator(DeviceGenerators, *Face[5].
get(), *Face[5]->AddGenerator(*Generator),
true);
274 Generator =
new MAPeriodicGenerator(0.0, MaxValue, Speed*4, Speed, 4*Speed, Speed, 0,
true);
275 AddGenerator(DeviceGenerators, *Face[3].
get(), *Face[3]->AddGenerator(*Generator),
true);
276 return DeviceGenerators;
280 MA::DeviceGeneratorsMap MALedsController::ShowCrownStrokedAnim()
284 MA::DeviceGeneratorsMap DeviceGenerators;
287 Container = HeadYellow->AddGenerator(*Generator);
292 AddGenerator(DeviceGenerators, *HeadYellow, *Container);
293 return DeviceGenerators;
297 MA::DeviceGeneratorsMap MALedsController::ShowHappyAnim()
299 MA::DeviceGeneratorsMap DeviceGenerators;
308 AddGenerator(DeviceGenerators, *Face[2].
get(), *Face[2]->AddGenerator(*Generator));
310 AddGenerator(DeviceGenerators, *Face[3].
get(), *Face[3]->AddGenerator(*Generator));
312 AddGenerator(DeviceGenerators, *Face[0].
get(), *Face[0]->AddGenerator(*Generator));
314 AddGenerator(DeviceGenerators, *Face[1].
get(), *Face[1]->AddGenerator(*Generator));
321 AddGenerator(DeviceGenerators, *Face[0].
get(), *Face[0]->AddGenerator(*Generator));
323 AddGenerator(DeviceGenerators, *Face[1].
get(), *Face[1]->AddGenerator(*Generator));
325 AddGenerator(DeviceGenerators, *Face[2].
get(), *Face[2]->AddGenerator(*Generator));
327 AddGenerator(DeviceGenerators, *Face[3].
get(), *Face[3]->AddGenerator(*Generator));
334 AddGenerator(DeviceGenerators, *Face[0].
get(), *Face[0]->AddGenerator(*Generator));
336 AddGenerator(DeviceGenerators, *Face[2].
get(), *Face[2]->AddGenerator(*Generator));
338 AddGenerator(DeviceGenerators, *Face[3].
get(), *Face[3]->AddGenerator(*Generator));
340 AddGenerator(DeviceGenerators, *Face[1].
get(), *Face[1]->AddGenerator(*Generator));
347 AddGenerator(DeviceGenerators, *Face[1].
get(), *Face[1]->AddGenerator(*Generator));
349 AddGenerator(DeviceGenerators, *Face[3].
get(), *Face[3]->AddGenerator(*Generator));
351 AddGenerator(DeviceGenerators, *Face[2].
get(), *Face[2]->AddGenerator(*Generator));
353 AddGenerator(DeviceGenerators, *Face[0].
get(), *Face[0]->AddGenerator(*Generator));
360 AddGenerator(DeviceGenerators, *Face[0].
get(), *Face[0]->AddGenerator(*Generator));
362 AddGenerator(DeviceGenerators, *Face[2].
get(), *Face[2]->AddGenerator(*Generator));
364 AddGenerator(DeviceGenerators, *Face[3].
get(), *Face[3]->AddGenerator(*Generator));
366 AddGenerator(DeviceGenerators, *Face[1].
get(), *Face[1]->AddGenerator(*Generator));
373 AddGenerator(DeviceGenerators, *Face[0].
get(), *Face[0]->AddGenerator(*Generator));
375 AddGenerator(DeviceGenerators, *Face[2].
get(), *Face[2]->AddGenerator(*Generator));
377 AddGenerator(DeviceGenerators, *Face[3].
get(), *Face[3]->AddGenerator(*Generator));
379 AddGenerator(DeviceGenerators, *Face[1].
get(), *Face[1]->AddGenerator(*Generator));
381 return DeviceGenerators;
385 MA::DeviceGeneratorsMap MALedsController::ShowSadAnim()
387 MA::DeviceGeneratorsMap DeviceGenerators;
396 AddGenerator(DeviceGenerators, *Face[12].
get(), *Face[12]->AddGenerator(*Generator));
398 AddGenerator(DeviceGenerators, *Face[13].
get(), *Face[13]->AddGenerator(*Generator));
405 AddGenerator(DeviceGenerators, *Face[13].
get(), *Face[13]->AddGenerator(*Generator));
407 AddGenerator(DeviceGenerators, *Face[12].
get(), *Face[12]->AddGenerator(*Generator));
414 AddGenerator(DeviceGenerators, *Face[12].
get(), *Face[12]->AddGenerator(*Generator));
416 AddGenerator(DeviceGenerators, *Face[13].
get(), *Face[13]->AddGenerator(*Generator));
423 AddGenerator(DeviceGenerators, *Face[12].
get(), *Face[12]->AddGenerator(*Generator));
425 AddGenerator(DeviceGenerators, *Face[13].
get(), *Face[13]->AddGenerator(*Generator));
427 return DeviceGenerators;
431 MA::DeviceGeneratorsMap MALedsController::ShowBatteryLevel()
433 if (ShownBatteryLevel == (
int)MA::RobotState->Torso->BatteryLevel)
435 return MA::DeviceGeneratorsMap();
437 MA::DeviceGeneratorsMap DeviceGenerators;
438 MA::DeviceList DevicesToClear;
441 ShownBatteryLevel = (int)MA::RobotState->Torso->BatteryLevel;
445 if (ShownBatteryLevel >= 66)
448 ((float)ShownBatteryLevel-66.0) / 34.0*(float)MaximumValue, 2000);
449 AddGenerator(DeviceGenerators, *BackFBlue.get(), *BackFBlue->AddGenerator(*Generator),
true);
450 if (ShownBatteryLevel > 82)
452 DevicesToClear.push_back(BackMOrange.get());
454 DevicesToClear.push_back(BackRRed.get());
459 if (ShownBatteryLevel >= 18 && ShownBatteryLevel <= 82)
461 float Level = (int)ShownBatteryLevel >= 50 ? 82-ShownBatteryLevel : (
int)ShownBatteryLevel-18;
464 Level / 32.0*(float)MaximumValue, 2000);
465 AddGenerator(DeviceGenerators, *BackMOrange.get(), *BackMOrange->AddGenerator(*Generator),
true);
466 if (ShownBatteryLevel < 66)
468 DevicesToClear.push_back(BackFBlue.get());
470 if (ShownBatteryLevel > 32 && ShownBatteryLevel < 66)
472 DevicesToClear.push_back(BackRRed.get());
478 if (ShownBatteryLevel >= 10 && ShownBatteryLevel <= 32)
482 (float)(32.0-ShownBatteryLevel) / 32.0*(float)MaximumValue, 2000);
483 AddGenerator(DeviceGenerators, *BackRRed.get(), *BackRRed->AddGenerator(*Generator),
true);
484 if (ShownBatteryLevel < 18)
486 DevicesToClear.push_back(BackMOrange.get());
487 DevicesToClear.push_back(BackFBlue.get());
491 if (ShownBatteryLevel < 10)
494 float MaxValue = 22.0 / 32.0*(float)MaximumValue;
497 Generator->
Start(BackRRed->GetSensorValue());
498 AddGenerator(DeviceGenerators, *BackRRed.get(), *BackRRed->AddGenerator(*Generator),
true);
499 DevicesToClear.push_back(BackMOrange.get());
500 DevicesToClear.push_back(BackFBlue.get());
504 for (
auto& device : DevicesToClear)
506 if (device->GetNextValue() > 0.0)
509 device->AddGenerator(*Generator);
512 return DeviceGenerators;
516 MA::DeviceGeneratorsMap MALedsController::ShowDataUploadStatus()
518 MA::DeviceGeneratorsMap DeviceGenerators;
522 AddGenerator(DeviceGenerators, *HeadWifi.get(), *HeadWifi->AddGenerator(*Generator));
523 return DeviceGenerators;
527 MA::DeviceGeneratorsMap MALedsController::ShowClientConnectedStatus()
529 MA::DeviceGeneratorsMap DeviceGenerators;
533 AddGenerator(DeviceGenerators, *EarsBlue.get(), *EarsBlue->AddGenerator(*Generator));
534 return DeviceGenerators;
538 MA::DeviceGeneratorsMap MALedsController::ShowNoNetworkStatus()
540 MA::DeviceGeneratorsMap DeviceGenerators;
548 EarsBlue->AddGeneratorContainer(*Container);
549 AddGenerator(DeviceGenerators, *EarsBlue.get(), *Container);
550 return DeviceGenerators;
554 MA::DeviceGeneratorsMap MALedsController::ShowStartup()
556 MA::DeviceGeneratorsMap DeviceGenerators;
560 AddGenerator(DeviceGenerators, *BackFWhite.get(), *BackFWhite->AddGenerator(*Generator));
562 AddGenerator(DeviceGenerators, *BackMWhite.get(), *BackMWhite->AddGenerator(*Generator));
564 AddGenerator(DeviceGenerators, *BackRWhite.get(), *BackRWhite->AddGenerator(*Generator));
565 return DeviceGenerators;
569 MA::DeviceGeneratorsMap MALedsController::ShowAngryFace()
572 MA::DeviceGeneratorsMap DeviceGenerators;
575 AddGenerator(DeviceGenerators, *Face[2].
get(), *Face[2]->AddGenerator(*Generator));
577 AddGenerator(DeviceGenerators, *Face[3].
get(), *Face[3]->AddGenerator(*Generator));
579 AddGenerator(DeviceGenerators, *Face[4].
get(), *Face[4]->AddGenerator(*Generator));
581 AddGenerator(DeviceGenerators, *Face[5].
get(), *Face[5]->AddGenerator(*Generator));
583 AddGenerator(DeviceGenerators, *Face[12].
get(), *Face[12]->AddGenerator(*Generator));
585 AddGenerator(DeviceGenerators, *Face[13].
get(), *Face[13]->AddGenerator(*Generator));
586 return DeviceGenerators;
590 MA::DeviceGeneratorsMap MALedsController::HeavyCalculation()
592 MA::DeviceGeneratorsMap DeviceGenerators;
598 HeadWhite->AddGeneratorContainer(*Container);
599 AddGenerator(DeviceGenerators, *HeadWhite.get(), *Container);
600 return DeviceGenerators;
604 MA::DeviceGeneratorsMap MALedsController::SwitchSoundProfile()
606 MA::DeviceGeneratorsMap DeviceGenerators;
613 Container->AddGenerator(*Generator);
614 BackFWhite->AddGeneratorContainer(*Container);
615 AddGenerator(DeviceGenerators, *BackFWhite.get(), *Container);
616 return DeviceGenerators;
620 MA::DeviceGeneratorsMap MALedsController::NormalVolumeControl()
622 MA::DeviceGeneratorsMap DeviceGenerators;
629 Container->AddGenerator(*Generator);
630 BackRWhite->AddGeneratorContainer(*Container);
631 AddGenerator(DeviceGenerators, *BackRWhite.get(), *Container);
632 return DeviceGenerators;
636 MA::DeviceGeneratorsMap MALedsController::AdaptiveVolumeControl()
638 MA::DeviceGeneratorsMap DeviceGenerators;
645 Container->AddGenerator(*Generator);
647 Container->AddGenerator(*Generator);
648 BackRWhite->AddGeneratorContainer(*Container);
649 AddGenerator(DeviceGenerators, *BackRWhite.get(), *Container);
650 return DeviceGenerators;
654 MA::DeviceGeneratorsMap MALedsController::ShowPickUpMode()
656 MA::DeviceGeneratorsMap DeviceGenerators;
662 AddGenerator(DeviceGenerators, *EarsBlue.get(), *EarsBlue->AddGenerator(*Generator),
false);
664 AddGenerator(DeviceGenerators, *EarsRed.get(), *EarsRed->AddGenerator(*Generator),
false);
669 Container->AddGenerator(*Generator);
670 EarsGreen->AddGeneratorContainer(*Container);
671 AddGenerator(DeviceGenerators, *EarsGreen.get(), *Container,
true);
672 return DeviceGenerators;
676 MA::DeviceGeneratorsMap MALedsController::ShowGameMode()
678 MA::DeviceGeneratorsMap DeviceGenerators;
684 AddGenerator(DeviceGenerators, *EarsBlue.get(), *EarsBlue->AddGenerator(*Generator),
false);
686 AddGenerator(DeviceGenerators, *EarsGreen.get(), *EarsGreen->AddGenerator(*Generator),
false);
690 EarsRed->AddGeneratorContainer(*Container);
691 AddGenerator(DeviceGenerators, *EarsRed.get(), *Container,
false);
692 return DeviceGenerators;
696 MA::DeviceGeneratorsMap MALedsController::FadeOutEarsGreen()
698 MA::DeviceGeneratorsMap DeviceGenerators;
702 EarsGreen->AddGeneratorContainer(*Container);
703 AddGenerator(DeviceGenerators, *EarsGreen.get(), *Container);
704 return DeviceGenerators;
708 MA::DeviceGeneratorsMap MALedsController::FadeOutEarsRed()
710 MA::DeviceGeneratorsMap DeviceGenerators;
714 EarsRed->AddGeneratorContainer(*Container);
715 AddGenerator(DeviceGenerators, *EarsRed.get(), *Container);
716 return DeviceGenerators;
720 MA::DeviceGeneratorsMap MALedsController::FadeOutCrownWhite()
722 MA::DeviceGeneratorsMap DeviceGenerators;
728 HeadWhite->AddGeneratorContainer(*Container);
729 AddGenerator(DeviceGenerators, *HeadWhite.get(), *Container);
730 return DeviceGenerators;
735 void MALedsController::AddGenerator(MA::DeviceGeneratorsMap& device_generators,
MADevice& device,
740 MC_WARNING(
"The generator container can not be infinite for a temporary transition!");
745 MC_WARNING(
"The generator container must start with zero for a temporary transition!");
748 if (!device.HasGeneratorContainer(container))
750 MC_WARNING(
"The device does not have this container!");
754 if (boost::starts_with(device.GetDisplayName(),
"Face") && !permanent && container.
GetTargetValue() != 0.0)
756 MC_WARNING(
"The generator container does not decrease back to zero!");
761 MC_WARNING(
"The generator container has uncertain start or target value!");
774 for (
auto& transition : DeviceTransitions)
780 device_generators.insert(MA::DeviceGeneratorPair(&device, &container));
784 void MALedsController::ClearFace()
788 MC_WARNING(
"The face LEDs can not be cleared when any expression is active.");
789 MC_WARNING(
"The intention of the function is to clear the LEDs on start-up.");
794 for (
int i = 0; i < 14; i++)
795 Face[i]->SetNextValue(0.0);
806 return MA::DeviceGeneratorsMap();
808 MA::DeviceGeneratorsMap DeviceGenerators;
814 BackFBlue->ClearGenerators();
815 BackFBlue->AddGeneratorContainer(*Container);
816 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, BackFBlue.get(), Container);
821 BackFWhite->ClearGenerators();
822 BackFWhite->AddGeneratorContainer(*Container);
823 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, BackFWhite.get(), Container);
828 BackMOrange->ClearGenerators();
829 BackMOrange->AddGeneratorContainer(*Container);
830 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, BackMOrange.get(), Container);
835 BackMWhite->ClearGenerators();
836 BackMWhite->AddGeneratorContainer(*Container);
837 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, BackMWhite.get(), Container);
842 BackRRed->ClearGenerators();
843 BackRRed->AddGeneratorContainer(*Container);
844 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, BackRRed.get(), Container);
849 BackRWhite->ClearGenerators();
850 BackRWhite->AddGeneratorContainer(*Container);
851 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, BackRWhite.get(), Container);
856 HeadWifi->ClearGenerators();
857 HeadWifi->AddGeneratorContainer(*Container);
858 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, HeadWifi.get(), Container);
863 HeadYellow->ClearGenerators();
864 HeadYellow->AddGeneratorContainer(*Container);
865 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, HeadYellow.get(), Container);
870 HeadWhite->ClearGenerators();
871 HeadWhite->AddGeneratorContainer(*Container);
872 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, HeadWhite.get(), Container);
877 EarsRed->ClearGenerators();
878 EarsRed->AddGeneratorContainer(*Container);
879 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, EarsRed.get(), Container);
884 EarsGreen->ClearGenerators();
885 EarsGreen->AddGeneratorContainer(*Container);
886 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, EarsGreen.get(), Container);
891 EarsBlue->ClearGenerators();
892 EarsBlue->AddGeneratorContainer(*Container);
893 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, EarsBlue.get(), Container);
896 bool LockMode0 =
false;
897 bool LockMode1 =
false;
900 if (Container && !LockMode1)
902 Face[0]->ClearGenerators();
903 Face[0]->AddGeneratorContainer(*Container);
904 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, Face[0].
get(), Container);
908 if (Container && !LockMode0)
910 Face[0]->ClearGenerators();
911 Face[0]->AddGeneratorContainer(*Container);
912 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, Face[0].
get(), Container);
916 if (Container && !LockMode1)
918 Face[1]->ClearGenerators();
919 Face[1]->AddGeneratorContainer(*Container);
920 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, Face[1].
get(), Container);
924 if (Container && !LockMode0)
926 Face[1]->ClearGenerators();
927 Face[1]->AddGeneratorContainer(*Container);
928 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, Face[1].
get(), Container);
932 if (Container && !LockMode1)
934 Face[2]->ClearGenerators();
935 Face[2]->AddGeneratorContainer(*Container);
936 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, Face[2].
get(), Container);
940 if (Container && !LockMode0)
942 Face[2]->ClearGenerators();
943 Face[2]->AddGeneratorContainer(*Container);
944 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, Face[2].
get(), Container);
948 if (Container && !LockMode1)
950 Face[3]->ClearGenerators();
951 Face[3]->AddGeneratorContainer(*Container);
952 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, Face[3].
get(), Container);
956 if (Container && !LockMode0)
958 Face[3]->ClearGenerators();
959 Face[3]->AddGeneratorContainer(*Container);
960 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, Face[3].
get(), Container);
966 Face[4]->ClearGenerators();
967 Face[4]->AddGeneratorContainer(*Container);
968 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, Face[4].
get(), Container);
973 Face[5]->ClearGenerators();
974 Face[5]->AddGeneratorContainer(*Container);
975 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, Face[5].
get(), Container);
980 Face[6]->ClearGenerators();
981 Face[6]->AddGeneratorContainer(*Container);
982 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, Face[6].
get(), Container);
987 Face[7]->ClearGenerators();
988 Face[7]->AddGeneratorContainer(*Container);
989 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, Face[7].
get(), Container);
994 Face[8]->ClearGenerators();
995 Face[8]->AddGeneratorContainer(*Container);
996 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, Face[8].
get(), Container);
1001 Face[9]->ClearGenerators();
1002 Face[9]->AddGeneratorContainer(*Container);
1003 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, Face[9].
get(), Container);
1008 Face[10]->ClearGenerators();
1009 Face[10]->AddGeneratorContainer(*Container);
1010 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, Face[10].
get(), Container);
1015 Face[11]->ClearGenerators();
1016 Face[11]->AddGeneratorContainer(*Container);
1017 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, Face[11].
get(), Container);
1020 if (Container && !LockMode1)
1022 Face[12]->ClearGenerators();
1023 Face[12]->AddGeneratorContainer(*Container);
1024 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, Face[12].
get(), Container);
1028 if (Container && !LockMode0)
1030 Face[12]->ClearGenerators();
1031 Face[12]->AddGeneratorContainer(*Container);
1032 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, Face[12].
get(), Container);
1036 if (Container && !LockMode1)
1038 Face[13]->ClearGenerators();
1039 Face[13]->AddGeneratorContainer(*Container);
1040 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, Face[13].
get(), Container);
1044 if (Container && !LockMode0)
1046 Face[13]->ClearGenerators();
1047 Face[13]->AddGeneratorContainer(*Container);
1048 MA_INSERT_DEVICEGENERATOR(DeviceGenerators, Face[13].
get(), Container);
1050 LedModeForSkitter = -1;
1053 LedModeForSkitter = 0;
1055 LedModeForSkitter = 1;
1057 return DeviceGenerators;
bool IsAbsolute() const
Check if the container is absolute.
virtual void StopTransition(const std::string &name) override
Stop a transition.
#define MA_RANDOM_POINT_1(_variable_name, _min, _max)
Set a random point with one value.
void AddGenerator(MAGeneratorBase &generator, bool in_front=false)
Add a new generator after the last internal generator.
virtual MA::DeviceGeneratorsMap GetSkitTransitionGenerators(MA::SkitBaseSPtr skit) override
Get skit transition generators.
const T MCMin(const U &container)
Get the minimal value of a container.
float GetTargetValue() const
Get the final target value of the container.
int GetDuration() const
Get the container duration.
virtual int StartTransition(const std::string &name) override
Start a transition.
void CalculateCurrentValue(float device_value)
Calculate the current value based on a device value.
LED sequence (LED skit) class.
void MakePermanent()
Make the generator container infinite long (permanent)
#define MC_WARNING(...)
Warning macro.
Base class for the controllers.
static bool IsVerbose()
Get the verbosity of the controller domain.
bool IsAnyActiveTransition()
Check if any transition is active.
MAGeneratorContainer * GetGeneratorContainer(unsigned int device) const
Get generator container for a device.
void Start(float device_value)
Start the first generator in the container based on a device value.
bool IsStarted() const
Check if the container has been started.
virtual void StopTransition(const std::string &name)
Stop a transition.
float GetCurrentValue()
Get the current value.
Generator container class.
MC::StringList GetActiveTransitionsByDevice(const MADevice &device)
Get a transition list by device.
virtual MA::DeviceList GetMotors() const override
Get the list of the motors.
virtual int StartTransition(const std::string &name)
Start a transition.
Base class for generators.
virtual void Start()
Start the generator.
float MCFloatInfinity()
Get float infinity.
bool IsTransitionActive(const std::string &name)
Whenever the transition is still active.
A wrapper class to cover boost::thread_specific_ptr/folly::ThreadLocal API on certain targets...
float GetStartingValue() const
Get the starting value of the container.
Periodic generator class (waveform _/‾\_)
#define MC_LOG(...)
Debug macro.
MA::TransitionMap Transitions
The map of the transitions.
virtual void UpdateRobotState(MARobotState &robot_state) override
Update the robot state.
#define MA_CONTAINER_LOCK_OTHER_FILE(_container)
Lock a container in an other file.
void BlockExpiredSignal()
Block the expiration signal of the container.