[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[DDL-ML] NMRA Refresh Bug




Beim NMRA Locorefresh hat sich ein Bug eingeschlichen:

Wenn die Refreshpakete verschickt werden, dann geht man die
Liste mit den Loks durch:

   last_refreshed_nmra_loco++;
   if (last_refreshed_nmra_loco>=NMRAPacketPool.NrOfKnownAdresses) {
      last_refreshed_nmra_loco=0;
   }
 
Gleichzeitig alterniert man zwischen Geschwindigkeits- und Funktionspaketen:

          if (!nmra_fx_refresh) {
		/* send speed packet */
		nmra_fx_refresh=!nmra_fx_refresh;
	 } else {
		/* send fx packet */
		nmra_fx_refresh=!nmra_fx_refresh;
         }

Mit einer _geraden_ Anzahl von Loks bekommen die einen nur "fx" und die
anderen nur "speed" Pakete im Refresh. Bei Digitraxdecodern merkt man
das leider - die scheinen etwas vergesslich zu sein. Mit Lenz neuem
N-decoder 077fx spielt es keine Rolle. Ich habe kurzerhand den Wechsel
ausgebaut und schike jetzt beide Pakete bei jedem Refresh raus. Als
Notfix geht das. 

In cycles.c sieht das jetzt so aus:

      if (adr>=0) {
             send_packet(adr,NMRAPacketPool.packets[adr].packet,
                         NMRAPacketPool.packets[adr].packet_size,
                         QNBLOCOPKT,TRUE);
#ifdef _DEBUG_
             fprintf(stderr, "NMRA loco    refresh: %d\n",adr);
             fflush(stderr);
#endif
             send_packet(adr,NMRAPacketPool.packets[adr].fx_packet,
                         NMRAPacketPool.packets[adr].fx_packet_size, 
                         QNBLOCOPKT,TRUE);
#ifdef _DEBUG_
             fprintf(stderr, "NMRA loco fx refresh: %d\n",adr);
             fflush(stderr);
#endif
	}

Ein schönes Fest wünsche ich auch,
Harald.