{###########################################################################}
//MP3-Fernbedienungs-Routinen

const
  yi3_stop = $F0;
  yi3_reset = $F7;
  yi3_pause = $F8;
  yi3_loop = $F4;
  yi3_noloop = $F1;
  yi3_midvolume = $A8;
  yi3_mute = $80;

procedure SerAux(mybyte:byte);
//Sende Byte in "mychar" mit 19200 Bd an PB5 für MP3-Player
begin
  _ACCDHI:=mybyte;
  asm;
    ldi  _ACCDLO, 8
    cbi  DDS.DDSOutPort, DDS.b_SerAux ; Startbit
    ldi       _ACCA, 5
    call      SYSTEM.UDELAY
  DDS.SerAuxloop1:    ; Byte rausschieben
    lsr  _ACCDHI          ; Bit 0 zuerst
    brcs DDS.SerAuxdatahigh
    cbi  DDS.DDSOutPort, DDS.b_SerAux
    rjmp DDS.SerAuxdataset
  DDS.SerAuxdatahigh:
    sbi  DDS.DDSOutPort, DDS.b_SerAux
  DDS.SerAuxdataset:
    ldi       _ACCA, 5
    call      SYSTEM.UDELAY
    dec _ACCDLO
    brne  DDS.SerAuxloop1
    sbi  DDS.DDSOutPort, DDS.b_SerAux
    ldi       _ACCA, 10
    call      SYSTEM.UDELAY
  endasm;
end;

procedure MP3timeZero;
begin
  disableInts;
  RTCsetSecond (0);
  RTCsetMinute (0);
  RTCsetHour (0);
  RTCtimer_Load(longword(MP3sec) + 60*longword(MP3min));
  RTCtimer_Start;

  MP3elapsed:=false;
  enableInts;
end;

procedure MP3setVol;
//Player einschalten, Vol. max, erstes Stück spielen
begin
  mdelay(20);
  SerAux(yi3_midVolume+MP3dBkorr);
end;

procedure MP3gotoTrack;
//gehe zu Track in Variable MP3Track
begin
  SerAux(MP3Track);
  MP3currenttrack:=MP3Track;
  MP3timeZero;  //Zähler zurücksetzen
  MP3setVol;
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 MP3Elapsed then
//    MP3Elapsed:=false;  // in MP3timeZero
    MP3timeZero;
    SerAux(MP3Track); //nochmal von vorn
  endif;
end;


procedure MP3on;
//Player einschalten, Vol. max, erstes Stück spielen
begin
  SerAux(yi3_noloop);  //Repeat machen wir selbst
  SerAux(yi3_midVolume+MP3dBkorr);
  SerAux(yi3_stop);
  mdelay(100);
  MP3currenttrack:=0;
  MP3timezero;  //Repeat-Anfangspunkt setzen
  MP3isOn:= true;
  SendSR;
end;


procedure MP3off;
//Player ausschalten
begin
  SerAux(yi3_noloop);
  SerAux(yi3_mute);
  SerAux(yi3_stop);
  MP3isOn:= false;
  MP3currenttrack:=0;
  SendSR;
end;


