{###########################################################################}
//MP3-Fernbedienungs-Routinen
{$IFDEF yi3}         //MP3-Player Yampp Industrial an serieller Schnittstelle
const
  yi3_stop = $F0;
  yi3_reset = $F7;
  yi3_pause = $F8;
  yi3_loop = $F4;
  yi3_noloop = $F1;
  yi3_midvolume = $B0;
  yi3_mute = $80;


procedure MP3setRepeatA;
var myTime:word;
//Repeat-Punkt A setzen, falls Player keinen Repeat1-Modus hat
begin
  myTime:= word(MP3sec)*100;
  setSysTimer(MP3repeatTimer,myTime);  //vor Ablauf von 60 Sekunden
  MP3repeatBset:=false;
  MP3runningSeconds:=0;
  MP3runningTimer:=0;
end;

procedure MP3setRepeatB;
//Repeat-Punkt B setzen, falls Player keinen Repeat1-Modus hat
begin
end;

procedure MP3gotoTrack;
//gehe zu Track in Variable MP3Track
begin
  Serout(MP3Track);
  MP3currenttrack:=MP3Track;
  MP3setRepeatA;  //Zähler zurücksetzen
end;

procedure MP3checkRepeat;
//Anhand der abgelaufenen Zeit prüfen, ob Repeat B gesetzt werden muss
//wird laufend aufgerufen, während auf Tastendruck gewartet wird
begin
  if issystimerzero(MP3repeatTimer) then
    MP3setRepeatA;
    serout(MP3Track); //nochmal von vorn
  endif;
end;

procedure MP3on;
//Player einschalten, Vol. max, erstes Stück spielen
begin
  Serout(yi3_noloop);  //Repeat machen wir selbst
  Serout(yi3_midVolume);
  Serout(yi3_stop);
  mdelay(100);
  Serout(1);     //erstes Stück spielen
  MP3currenttrack:=1;
  MP3setRepeatA;  //Repeat-Anfangspunkt setzen
  MP3isOn:= true;
  SendSR;
end;

procedure MP3off;
//Player ausschalten
begin
  Serout(yi3_noloop);
  Serout(yi3_mute);
  Serout(yi3_stop);
  MP3isOn:= false;
  MP3currenttrack:=0;
  SendSR;
end;

{###########################################################################}
{$ELSE}
//MP3Source Mainboard ab V2.1
//für MP3-Player mit Myson Century MTM809/CS8822 Chipsatz,
//Billigst-Gerät mit R-Fernbedienung
const
  c_MP3playstop              = $10;
  c_MP3rev                   = $20;
  c_MP3forw                  = $30;
  c_MP3repeat                = $40;
  c_MP3volplus               = $50;
  c_MP3equ                   = $60;
  c_MP3inh                   = $80;
//  c_MP3power                 = $08;  //Bit 03 gesteuert durch MP3isOn

procedure MP3remote(mp3cmd:byte);
//MP3-Player-Taste/Befehl in MP3command
begin
  PortB := mp3cmd;  // MP3controlPort auf "Taste drücken"
  mdelay(100);
  PortB:=  c_MP3inh;     // "Taste loslassen"
  mdelay(150);
end;

procedure MP3setRepeatA;
var myTime:word;
//Repeat-Punkt A setzen, falls Player keinen Repeat1-Modus hat
begin
  myTime:= word(MP3sec)*100 + 4;     //+ Repeat Setup Time (*10 = ms)
  setSysTimer(MP3repeatTimer,myTime);  //vor Ablauf von 60 Sekunden
  mdelay(100);
  MP3remote(c_MP3repeat);
  MP3repeatBset:=false;
  MP3runningSeconds:=0;
  MP3runningTimer:=0;
end;

procedure MP3setRepeatB;
//Repeat-Punkt B setzen, falls Player keinen Repeat1-Modus hat
begin
  MP3setRepeatA;
  MP3repeatBset:=true;
end;

procedure MP3next;
//Nächsten Track
begin
  MP3remote(c_MP3forw);
  inc(MP3currenttrack);
end;

procedure MP3prev;
//Vorherigen Track
begin
  MP3remote(c_MP3rev);
  dec(MP3currenttrack);
end;

procedure MP3gotoTrack;
//gehe zu Track in Variable MP3Track
begin
  if MP3Track > MP3currenttrack then
    repeat
      MP3next;
    until MP3currenttrack = MP3Track;
  endif;
  if MP3Track < MP3currenttrack then
    repeat
      MP3prev;
    until MP3currenttrack = MP3Track;
  endif;
  MP3setRepeatA;  //Repeat-Anfangspunkt setzen
end;

procedure MP3checkRepeat;
//Anhand der abgelaufenen Zeit prüfen, ob Repeat B gesetzt werden muss
//wird laufend aufgerufen, während auf Tastendruck gewartet wird
begin
  if issystimerzero(MP3repeatTimer) then
    if not MP3repeatBset then
      MP3setRepeatB;
    endif;
//Alternative: Forward/Reverse kurz hintereinander drücken
//Bei Playern, die bei AB-Repeat nach einigen Minuten abschalten
//     MP3next;    // setzt auch Systimer neu
//     MP3Prev;
  endif;
end;

procedure MP3on;
//Player einschalten, Vol. max, erstes Stück spielen
begin
  MP3isOn:= true;
  PortB:= c_MP3inh;
  mdelay(100);   // Boot-Zeit
  PortB:= c_MP3playstop;  // stopp gedrückt halten
  mdelay(1200);
// MP3-Player einschalten, max. Lautstärke, Equ off, Repeat on
  MP3remote(c_MP3inh);    // gain mute, stopp loslassen
  mdelay(200);   // Boot-Zeit
  PortB :=c_MP3forw;  // hier: inc volume to max
  mdelay(3000);  // Vol++
  MP3remote(c_MP3inh);
  MP3currenttrack:=1;
  MP3setRepeatA;  //Repeat-Anfangspunkt setzen
end;

procedure MP3off;
//Player ausschalten
begin
  MP3isOn:= false;
  b_ExtOnMP3Power:= high;
end;
{$ENDIF}

