mirror of
https://github.com/openshwprojects/OpenBK7231T_App.git
synced 2025-10-29 11:33:20 +00:00
ping pong mode for addChannel
This commit is contained in:
parent
d039226ded
commit
e8ef72c891
@ -1643,55 +1643,53 @@ void CHANNEL_Set_Ex(int ch, int iVal, int iFlags, int ausemovingaverage) {
|
||||
void CHANNEL_Set(int ch, int iVal, int iFlags) {
|
||||
CHANNEL_Set_Ex(ch, iVal, iFlags, 0);
|
||||
}
|
||||
char *g_channelPingPongs = 0;
|
||||
|
||||
void CHANNEL_AddClamped(int ch, int iVal, int min, int max, int bWrapInsteadOfClamp) {
|
||||
#if 0
|
||||
int prevValue;
|
||||
if (ch < 0 || ch >= CHANNEL_MAX) {
|
||||
addLogAdv(LOG_ERROR, LOG_FEATURE_GENERAL, "CHANNEL_AddClamped: Channel index %i is out of range <0,%i)\n\r", ch, CHANNEL_MAX);
|
||||
return;
|
||||
}
|
||||
prevValue = g_channelValues[ch];
|
||||
g_channelValues[ch] = g_channelValues[ch] + iVal;
|
||||
|
||||
if (bWrapInsteadOfClamp) {
|
||||
if (g_channelValues[ch] > max)
|
||||
g_channelValues[ch] = min;
|
||||
if (g_channelValues[ch] < min)
|
||||
g_channelValues[ch] = max;
|
||||
}
|
||||
else {
|
||||
if (g_channelValues[ch] > max)
|
||||
g_channelValues[ch] = max;
|
||||
if (g_channelValues[ch] < min)
|
||||
g_channelValues[ch] = min;
|
||||
}
|
||||
|
||||
addLogAdv(LOG_INFO, LOG_FEATURE_GENERAL, "CHANNEL_AddClamped channel %i has changed to %i\n\r", ch, g_channelValues[ch]);
|
||||
|
||||
Channel_OnChanged(ch, prevValue, 0);
|
||||
#else
|
||||
void CHANNEL_AddClamped(int ch, int iDelta, int min, int max, int bWrapInsteadOfClamp) {
|
||||
// we want to support special channel indexes, so it's better to use GET/SET interface
|
||||
// Special channel indexes are used to access things like dimmer, led colors, etc
|
||||
iVal = CHANNEL_Get(ch) + iVal;
|
||||
int newVal;;
|
||||
|
||||
if (bWrapInsteadOfClamp) {
|
||||
if (iVal > max)
|
||||
iVal = min;
|
||||
if (iVal < min)
|
||||
iVal = max;
|
||||
if (bWrapInsteadOfClamp == 2) {
|
||||
// ping-pong logic
|
||||
if (g_channelPingPongs == 0) {
|
||||
g_channelPingPongs = (char*)malloc(CHANNEL_MAX);
|
||||
memset(g_channelPingPongs, 1, CHANNEL_MAX);
|
||||
}
|
||||
int prevVal = CHANNEL_Get(ch);
|
||||
newVal = prevVal + iDelta * g_channelPingPongs[ch];
|
||||
if (prevVal == min && newVal < min) {
|
||||
g_channelPingPongs[ch] *= -1;
|
||||
}
|
||||
else if (prevVal == max && newVal > max) {
|
||||
g_channelPingPongs[ch] *= -1;
|
||||
}
|
||||
newVal = prevVal + iDelta * g_channelPingPongs[ch];
|
||||
if (newVal > max) {
|
||||
newVal = max;
|
||||
}
|
||||
else if (newVal < min) {
|
||||
newVal = min;
|
||||
}
|
||||
} else if (bWrapInsteadOfClamp) {
|
||||
newVal = CHANNEL_Get(ch) + iDelta;
|
||||
if (newVal > max)
|
||||
newVal = min;
|
||||
if (newVal < min)
|
||||
newVal = max;
|
||||
}
|
||||
else {
|
||||
if (iVal > max)
|
||||
iVal = max;
|
||||
if (iVal < min)
|
||||
iVal = min;
|
||||
newVal = CHANNEL_Get(ch) + iDelta;
|
||||
if (newVal > max)
|
||||
newVal = max;
|
||||
if (newVal < min)
|
||||
newVal = min;
|
||||
}
|
||||
|
||||
addLogAdv(LOG_INFO, LOG_FEATURE_GENERAL, "CHANNEL_AddClamped channel %i has changed to %i\n\r", ch, iVal);
|
||||
addLogAdv(LOG_INFO, LOG_FEATURE_GENERAL,
|
||||
"CHANNEL_AddClamped channel %i has changed to %i\n\r", ch, newVal);
|
||||
|
||||
CHANNEL_Set(ch, iVal, 0);
|
||||
#endif
|
||||
CHANNEL_Set(ch, newVal, 0);
|
||||
}
|
||||
void CHANNEL_Add(int ch, int iVal) {
|
||||
#if 0
|
||||
|
||||
@ -249,7 +249,98 @@ void Test_Commands_Channels() {
|
||||
SELFTEST_ASSERT_CHANNEL(10, -123);
|
||||
|
||||
|
||||
// clamp test
|
||||
CMD_ExecuteCommand("SetChannel 1 0", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 0);
|
||||
// [ChannelIndex][ValueToAdd][ClampMin][ClampMax][bWrapInsteadOfClamp]
|
||||
CMD_ExecuteCommand("addChannel 1 10 0 100 0", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 10);
|
||||
CMD_ExecuteCommand("addChannel 1 10 0 100 0", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 20);
|
||||
CMD_ExecuteCommand("addChannel 1 80 0 100 0", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 100);
|
||||
CMD_ExecuteCommand("addChannel 1 80 0 100 0", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 100);
|
||||
CMD_ExecuteCommand("addChannel 1 80 0 100 0", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 100);
|
||||
CMD_ExecuteCommand("addChannel 1 -1 0 100 0", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 99);
|
||||
|
||||
// wrap test
|
||||
CMD_ExecuteCommand("addChannel 1 1 0 100 1", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 100);
|
||||
CMD_ExecuteCommand("addChannel 1 1 0 100 1", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 0);
|
||||
CMD_ExecuteCommand("addChannel 1 1 0 100 1", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 1);
|
||||
CMD_ExecuteCommand("addChannel 1 1 0 100 1", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 2);
|
||||
CMD_ExecuteCommand("addChannel 1 -1 0 100 1", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 1);
|
||||
CMD_ExecuteCommand("addChannel 1 1 0 100 1", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 2);
|
||||
CMD_ExecuteCommand("addChannel 1 2 0 100 1", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 4);
|
||||
CMD_ExecuteCommand("addChannel 1 10 0 100 1", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 14);
|
||||
CMD_ExecuteCommand("addChannel 1 80 0 100 1", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 94);
|
||||
CMD_ExecuteCommand("addChannel 1 5 0 100 1", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 99);
|
||||
CMD_ExecuteCommand("addChannel 1 5 0 100 1", 0);
|
||||
// TODO: stop at 100, then go to min?
|
||||
SELFTEST_ASSERT_CHANNEL(1, 0);
|
||||
|
||||
// pingpongtest
|
||||
SELFTEST_ASSERT_CHANNEL(1, 0);
|
||||
CMD_ExecuteCommand("addChannel 1 25 0 100 2", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 25);
|
||||
CMD_ExecuteCommand("addChannel 1 25 0 100 2", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 50);
|
||||
CMD_ExecuteCommand("addChannel 1 25 0 100 2", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 75);
|
||||
CMD_ExecuteCommand("addChannel 1 25 0 100 2", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 100);
|
||||
CMD_ExecuteCommand("addChannel 1 25 0 100 2", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 75);
|
||||
CMD_ExecuteCommand("addChannel 1 25 0 100 2", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 50);
|
||||
CMD_ExecuteCommand("addChannel 1 25 0 100 2", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 25);
|
||||
CMD_ExecuteCommand("addChannel 1 25 0 100 2", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 0);
|
||||
CMD_ExecuteCommand("addChannel 1 25 0 100 2", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 25);
|
||||
CMD_ExecuteCommand("addChannel 1 24 0 100 2", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 49);
|
||||
CMD_ExecuteCommand("addChannel 1 24 0 100 2", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 73);
|
||||
CMD_ExecuteCommand("addChannel 1 24 0 100 2", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 97);
|
||||
CMD_ExecuteCommand("addChannel 1 24 0 100 2", 0);
|
||||
// SPECIAL - STOP AT 100
|
||||
SELFTEST_ASSERT_CHANNEL(1, 100);
|
||||
CMD_ExecuteCommand("addChannel 1 24 0 100 2", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 76);
|
||||
CMD_ExecuteCommand("addChannel 1 24 0 100 2", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 52);
|
||||
CMD_ExecuteCommand("addChannel 1 24 0 100 2", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 28);
|
||||
CMD_ExecuteCommand("addChannel 1 24 0 100 2", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 4);
|
||||
CMD_ExecuteCommand("addChannel 1 24 0 100 2", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 0);
|
||||
CMD_ExecuteCommand("addChannel 1 24 0 100 2", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 24);
|
||||
CMD_ExecuteCommand("addChannel 1 24 0 100 2", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 48);
|
||||
CMD_ExecuteCommand("addChannel 1 24 0 100 2", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 72);
|
||||
CMD_ExecuteCommand("addChannel 1 24 0 100 2", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 96);
|
||||
CMD_ExecuteCommand("addChannel 1 24 0 100 2", 0);
|
||||
SELFTEST_ASSERT_CHANNEL(1, 100);
|
||||
CMD_ExecuteCommand("addChannel 1 24 0 100 2", 0);
|
||||
// cause error
|
||||
//SELFTEST_ASSERT_CHANNEL(3, 666);
|
||||
}
|
||||
|
||||
@ -168,6 +168,7 @@ void SIM_ClearOBK(const char *flashPath) {
|
||||
void Win_DoUnitTests() {
|
||||
//SELFTEST_ASSERT_EXPRESSION("sqrt(4)", 2)
|
||||
|
||||
Test_Commands_Channels();
|
||||
|
||||
Test_Driver_TCL_AC();
|
||||
|
||||
@ -250,7 +251,6 @@ void Win_DoUnitTests() {
|
||||
Test_LEDDriver();
|
||||
Test_LFS();
|
||||
Test_Scripting();
|
||||
Test_Commands_Channels();
|
||||
Test_Command_If();
|
||||
Test_Tokenizer();
|
||||
Test_Http();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user