Код:
//-------------------- Сервис управления светодиодами: -----------------------
void TControl::LedsService(void)
{
Leds->Execute();
if(fUpdate || (IndState != TrState))
{
IndState = TrState;
fUpdate = 0;
//очистка набора светодиодов:
Leds->Set(LED_ALL, LEDS_OFF);
//индикация набора программы:
if(Program == PR_STEP1)
{
//начальный набор для программирования:
Leds->Set(LED_REW + LED_PLAYR + LED_PLAYF + LED_FFD, LEDS_CONT);
return;
}
else if(Program == PR_STEP2 || Program == PR_RUN)
{
//набор для движения вперед:
if(ProgMode1 == TR_AREW || ProgMode1 == TR_REW || ProgMode1 == TR_PLAYR)
Leds->Set(LED_PLAYF + LED_FFD + LED_PAUSE, LEDS_CONT);
//набор для движения назад:
if(ProgMode1 == TR_AFFD || ProgMode1 == TR_FFD || ProgMode1 == TR_PLAYF)
Leds->Set(LED_PLAYR + LED_REW + LED_PAUSE, LEDS_CONT);
return;
}
//индикация направления Capstan:
if(Trs(TRS_CAP)) //если Capstan включен
{
uint8_t b;
if(!Trs(TRS_LOCK)) //если Capstan не готов
b = LEDS_FAST; //быстрое мигание
else if(Option(OPT_SHOWDIR)) //иначе если разреш. инд. направления
b = LEDS_SLOW; //то медленное мигание,
else b = LEDS_OFF; //иначе выключение
if(Trs(TRS_REV)) //если Capstan вращается назад,
Leds->Set(LED_PLAYR, b); //мигает LED_PLAYR,
else Leds->Set(LED_PLAYF, b); //иначе мигает LED_PLAYF
}
//индикация режимов работы:
switch(Mode)
{
case TR_STOP:
if(Trs(TRS_TAPE)) //если лента загружена, то
Leds->Set(LED_STOP, LEDS_CONT); //LED_STOP горит
else Leds->Set(LED_NONE); //если ленты нет, то не горит
break;
case TR_PLAYF:
if(fPause && Option(OPT_PAUSELEDBLINK)) //если пауза, то
Leds->Set(LED_PLAYF, LEDS_NORM); //LED_PLAYF мигает,
else if(Trs(TRS_LOCK)) //иначе если Capstan готов,
Leds->Set(LED_PLAYF, LEDS_CONT); //LED_PLAYF горит
break;
case TR_PLAYR:
if(fPause && Option(OPT_PAUSELEDBLINK)) //если пауза, то
Leds->Set(LED_PLAYR, LEDS_NORM); //LED_PLAYR мигает,
else if(Trs(TRS_LOCK)) //иначе если Capstan готов,
Leds->Set(LED_PLAYR, LEDS_CONT); //LED_PLAYR горит
break;
case TR_REC:
if(fPause && Option(OPT_PAUSELEDBLINK)) //если пауза, то LED_REC + PLAYF
Leds->Set(LED_REC + LED_PLAYF, LEDS_NORM); //мигает,
else Leds->Set(LED_REC + LED_PLAYF, LEDS_CONT); //иначе горит
break;
case TR_FFD:
if(fRoll)
Leds->Set(LED_PLAYR, LEDS_CONT); //если откат, горит LED_PLAYR
Leds->Set(LED_FFD, LEDS_CONT); //включение LED_FFD
break;
case TR_REW:
if(fRoll)
Leds->Set(LED_PLAYF, LEDS_CONT); //если откат, горит LED_PLAYF
Leds->Set(LED_REW, LEDS_CONT); //включение LED_REW
break;
case TR_AFFD:
if(fRoll)
Leds->Set(LED_PLAYR, LEDS_CONT); //если откат, горит LED_PLAYR
if(Trs(TRS_CUE)) //если обзор
if(Trs(TRS_REV)) //и если Capstan вращается назад,
Leds->Set(LED_PLAYR, LEDS_FAST); //то быстро мигает LED_PLAYR,
else Leds->Set(LED_PLAYF, LEDS_FAST); //иначе LED_PLAYF
Leds->Set(LED_FFD, LEDS_NORM); //LED_FFD мигает норм.
break;
case TR_AREW:
if(fRoll)
Leds->Set(LED_PLAYF, LEDS_CONT); //если откат, горит LED_PLAYF
if(Trs(TRS_CUE)) //если обзор
if(Trs(TRS_REV)) //и если Capstan вращается назад,
Leds->Set(LED_PLAYR, LEDS_FAST); //то быстро мигает LED_PLAYR,
else Leds->Set(LED_PLAYF, LEDS_FAST); //иначе LED_PLAYF
Leds->Set(LED_REW, LEDS_NORM); //LED_REW мигает норм.
break;
};
//индикация торможения двигателями:
if(Trs(TRS_BRAKE) && Trs(TRS_MOVE)) //если торможение, то
Leds->Set(LED_STOP, LEDS_FAST); //LED_STOP мигает
//индикация режима PAUSE:
if(fPause) //если пауза, то
{
if(Option(OPT_PAUSELEDBLINK))
Leds->Set(LED_PAUSE, LEDS_NORM); //LED_PAUSE мигает
else Leds->Set(LED_PAUSE, LEDS_CONT); //или горит
}
//индикация второго программного режима:
if(ProgMode2 != TR_STOP)
{
uint8_t m = Option(OPT_PROGBLINK)? LEDS_SLOW : LEDS_CONT;
switch(ProgMode2)
{
case TR_PAUSE: Leds->Set(LED_PAUSE, m); break;
case TR_PLAYR: Leds->Set(LED_PLAYR, m); break;
case TR_REW:
case TR_AREW: Leds->Set(LED_REW, m); break;
case TR_FFD:
case TR_AFFD: Leds->Set(LED_FFD, m); break;
case TR_PLAYF: Leds->Set(LED_PLAYF, m); break;
}
}
}
}
Социальные закладки