http://satellite-board.de

Aktuelle Zeit: Di 14. Mai 2024, 17:21

Alle Zeiten sind UTC




Ein neues Thema erstellen Auf das Thema antworten  [ 95 Beiträge ]  Gehe zu Seite Vorherige  1 ... 3, 4, 5, 6, 7  Nächste
Autor Nachricht
 Betreff des Beitrags: Re: adam Setting Editor
BeitragVerfasst: Di 18. Mär 2008, 17:30 
Offline
Member

Registriert: Sa 20. Jan 2007, 18:16
Beiträge: 105
Hallo Oli,

ja da scheint einiges im Argen zu liegen. Hier mal der Ausschnitt aus dem
Sourcecode:
Code:
typedef struct _bouquet_list
{
   unsigned short   BID;
   unsigned short   bouquet_total_svl_list;
   char            bouquet_name[LEN_BOUQUET_NAME+1];
   unsigned short   bouquet_svl_idx[MAX_BOUQUET_SERVICES];
   unsigned short   bouquet_source;               // Favoritenlisten, Bouquet
                           // (aut.update->Pflege ARD,ZDF,
                           // Premiere etc.)
   unsigned short   bouquet_flags;
}strc_bouquet_list;


oli hat geschrieben:
BID = 00 00 (Liste 0)
bouquet_total_svl_list = 04 00 (4 Service)
bouquet_name = 46 61 76 6f 72 69 74 65 6e 20 31 00 (Favoriten 1[0])
bouquet_svl_idx = 00 00 (wird nicht verwendet) ??
bouquet_source = 00 00, 01 00, 02 00, 07 00 (4 Service) ??
bouquet_flags = ... (wird nicht verwendet)
Past beim Favoriten 1 ja super? Nur dann scheint es einen Fehler im Index zu geben?


Danach sind im bouqet_svl_idx die Services aufgelistet (max 100 Einträge)
Das Feld bouqet_source ist ein short Wert, welches nach der Liste kommt. Wenn das
anders ist, dann sollte die Struktur geändert werden.

oli hat geschrieben:
Eigentlich ist das die gleiche Checksumme wie bei den anderen galaxis Programmlisten auch, easy, goldtop, Matrix usw. !? Die hast Du schon beim Easy drin.
Also es wird über alles berechnet, außer den 16byte Header und der Checksumme am ende selber. Die Checksumme ist die einfache Summe der WORD werte, begrenzt auf 2 Byte. Hier werden einfach die letzten 2 Byte der Summe verwendet.


Das ist leider nicht so, die interne Prüfsumme wird anders gebildet. Ich weiss aber nicht wie.
Ich habe schon alle Varianten geprüft, little Endian, big Endian... Ich komme aber nicht auf
das gleiche Ergebnis.

mfg
Franz


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: adam Setting Editor
BeitragVerfasst: Di 25. Mär 2008, 13:41 
Offline
Administrator
Benutzeravatar

Registriert: Do 29. Jun 2000, 20:20
Beiträge: 5439
Wohnort: München
Verbrauch
Bei der Checksumme hast Du recht, hatte das nicht weiter hinterfragt das das Format gleich aussah...

Ich habe dem mal nachgeforscht....

Prg_Strc.h hat geschrieben:
typedef struct
{
strc_network_list network_list[MAX_NETWORK_LIST];
strc_transponder_list transponder_list[MAX_TRANSPONDER_LIST];
strc_all_service_list all_service_list[MAX_SERVICE_LIST];
u_sv_ext service_extended[MAX_EXTENDED_LIST]; // Channelname länger od.
// spezielle PID's
strc_bouquet_list bouquet_list[MAX_BOUQUETS-2]; // radio and tv are specific handled
unsigned short bouquet_idx[MAX_BOUQUETS]; // Reihenfolge der Bouquets
unsigned short sort_service_list_idx[MAX_RADIOTV_SERVICES]; // Reihenfolge sortiert Services
// Bouquet TV/Radio
unsigned short total_networks;
unsigned short total_transponder;
unsigned short total_services;
unsigned short total_tv_services;
unsigned short total_radio_services;
unsigned short total_ext_services;
unsigned short total_bouquets;
unsigned short reserved_short;
unsigned long gxID;
unsigned long gxVerID;
unsigned short program_block_flags;
unsigned short checksum;
}strc_all_program_block;


strc_api.c hat geschrieben:
long
Save_Prg_Block(u_int8 *buf)
{
int old_chksum = ((strc_all_program_block*)buf)->checksum;
if(
(Get_reset_flag( ) == 2) ||
(Get_reset_flag( ) == 0)
)
{
memset( (u_int16 *)buf, 0x0, sizeof(strc_all_program_block));
}

switch(Save_flag(GET_STATUS, SAVE_FLASH))
{
case ERR_STATUS:
break;
case SAVE_FLASH:
((strc_all_program_block*)buf)->checksum =
CalcChkSum(
(u_int16 *)buf,
(u_int16*)&(((strc_all_program_block*)buf)->checksum)
);
if( old_chksum != ((strc_all_program_block*)buf)->checksum )
{
Disp_Txt("SAFE");
Flash_It(PROGRAM_LIST_BASE, buf, sizeof(strc_all_program_block));
Disp_Blank();
}

tools.h hat geschrieben:
extern unsigned short CalcChkSum( u_int16 *start, u_int16 *end);

tools.c hat geschrieben:
unsigned short
CalcChkSum( u_int16 *start, u_int16 *end)
{
u_int16 check = 0;
end--;
do
{
check += *start++;
check += *start;
check += *start;
check += *start++;
}while(start < end);

return check;
}


Hoffe das hilft weiter?

Gruß Oli


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: adam Setting Editor
BeitragVerfasst: Di 25. Mär 2008, 13:57 
Offline
Administrator
Benutzeravatar

Registriert: Do 29. Jun 2000, 20:20
Beiträge: 5439
Wohnort: München
Verbrauch
Wenn ich den Vergleich auf der letzten Seite nocheinmal heranziehen kann... Hier hatte die Textänderung "T" (0x54) zu "D" (0x44) eine Checksummenänderung von 0x1000 erzeugt, was dafür spicht das dies eine einfache WordSumme ist? Also das Word 0x5456 ("TV") zu 0x4456 ("DV") ergibt (-)0x1000! Alte Checksume 0xD3A7 neue Chcksum nach der Änderung 0xC3A7, also genau diese (-) 0x1000 !!!

Also entweder es wird nicht der gesamte Bereich geprüft oder es gibt eine StartSumme?

cu Oli


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: adam Setting Editor
BeitragVerfasst: Di 25. Mär 2008, 20:26 
Offline
Member

Registriert: Sa 20. Jan 2007, 18:16
Beiträge: 105
Hallo Oli,

das mit der Checksumme ist jetzt Ok. Anbei eine Version
die auch die Checksumme prüft und bildet.

mfg
Franz


Dateianhänge:
SettingEdit.zip [43.27 KiB]
224-mal heruntergeladen
Nach oben
 Profil  
 
 Betreff des Beitrags: Re: adam Setting Editor
BeitragVerfasst: Mi 26. Mär 2008, 09:25 
Offline
Administrator
Benutzeravatar

Registriert: Do 29. Jun 2000, 20:20
Beiträge: 5439
Wohnort: München
Verbrauch
Woran lag es nun mit der Checksumme?

cu Oli


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: adam Setting Editor
BeitragVerfasst: Mi 26. Mär 2008, 16:45 
Offline
Member

Registriert: Sa 20. Jan 2007, 18:16
Beiträge: 105
Hallo Oli,

ich bilde jetzt die Checksumme wie in der Box. Also:
- 1. Word + 3 * (2. Word) + 3. Word
- 4. Word + 3 * (5. Word) + 6. Word
...

Wer das programmiert hat gehört erschlagen. Was sinnvolles
kann ich daraus leider nicht erkennen.

Könntest Du anhand des Box Programms der Box mal kontrollieren welche
Daten aus der Setting Struktur benötigt/benutzt werden und welche nicht.
Dann kann ich daran das Programm weitermachen.

mfg
Franz


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: adam Setting Editor
BeitragVerfasst: Do 27. Mär 2008, 07:50 
Offline
Administrator
Benutzeravatar

Registriert: Do 29. Jun 2000, 20:20
Beiträge: 5439
Wohnort: München
Verbrauch
Also genau das oben, ich wuste nicht genau ob das der richtige zweig ist. Ich denke die wollten die Checksumme etwas verfeinern, den beim Matrix gab es öfter das die Checksumme sich trotz editieren garnicht geänder hat. Beim Easy hatten sie die innere irgendwann ja ganz raus genommen und fix auf 0x0000 gesetzt, was aber auch kein weg ist.

Der Editor stürtzt noch ab wenn man auf ein Favoriten erstellt in der Box geht, aber da muß ich mir die Firmware noch mal anschauen ob da nicht der Fehler liegt.

Wobei mit Pascal bekomme ich die Checksumme so:
- 1. Word + 3 * (2. Word) + 3. Word
- 4. Word + 3 * (5. Word) + 6. Word
...
nicht hin!?

cu Oli


Dateianhänge:
test1.jpg
test1.jpg [ 26.66 KiB | 3829-mal betrachtet ]
Nach oben
 Profil  
 
 Betreff des Beitrags: Re: adam Setting Editor
BeitragVerfasst: Do 27. Mär 2008, 17:51 
Offline
Member

Registriert: Sa 20. Jan 2007, 18:16
Beiträge: 105
Hallo Oli,

da war ich gestern doch was zu schnell. Es ist eigentlich wie folgt:
- 1. Word + 3 * (2. Word)
- 3. Word + 3 * (4. Word)
...

Hier ist mal der Sourcecode wie ich den zur Zeit verwende. Das Programm
bekommt die Startadresse der Daten und die Länge in Bytes übergeben.
Da die Schleife immer den Index um 4 Bytes erhöht, muss von der Länge
2 Byte abgezogen werden um auf die richtige Länge zu kommen.

Code:
unsigned short CReceiver::usCalcChecksumWord(unsigned short * uspStart, unsigned int uiLen)
{

  unsigned int                  i, iMax;
  unsigned short                usCheckSum;

  iMax = (uiLen / sizeof(unsigned short)) - 2;                                // Berechne Indexanzahl
  usCheckSum = 0;                                                             // Init Checksumme
  for (i = 0; i < iMax; i++)
  {
    usCheckSum = usCheckSum + uspStart[i++];                                  // Berechne die Checksumme
    usCheckSum = usCheckSum + uspStart[i];                                    // Berechne die Checksumme
    usCheckSum = usCheckSum + uspStart[i];                                    // Berechne die Checksumme
    usCheckSum = usCheckSum + uspStart[i];                                    // Berechne die Checksumme
  }

  return usCheckSum;                                                          // Gebe Checksumme zurück

}



und der Aufruf: Die Checksumme ist unsigned short und der letzte Eintrag, darum - sizeof(unsigned short)

Code:
  usCheck = usCalcChecksumWord((unsigned short *)&sSettingBuffer, sizeof(sSettingBuffer) - sizeof(unsigned short));


mfg
Franz


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: adam Setting Editor
BeitragVerfasst: Fr 28. Mär 2008, 10:58 
Offline
Administrator
Benutzeravatar

Registriert: Do 29. Jun 2000, 20:20
Beiträge: 5439
Wohnort: München
Verbrauch
Also ich komme noch nicht auf die korrekte Summe im Pascal. Vielleicht gebe ich das auf?
Würde aber gerne wissen wie die Summe korrekt berechnet wird...

Code:
   if (i>8)and(i<157074) then begin
      wordcheck:=wordcheck+word1;
      if i=9 then chZ:=1;

      if chZ=1 then WordCheck_neu:=WordCheck_neu-word1;
      if chZ=2 then WordCheck_neu:=WordCheck_neu+(3*word1);
      if chZ=3 then WordCheck_neu:=WordCheck_neu-word1;
      if chZ=4 then WordCheck_neu:=WordCheck_neu+(3*word1);

      if chZ=4 then chZ:=1;
   end;


cu Oli


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: adam Setting Editor
BeitragVerfasst: Fr 28. Mär 2008, 15:19 
Offline
Member

Registriert: Sa 20. Jan 2007, 18:16
Beiträge: 105
Hallo Oli,

stelle mal die gesamte Prozedur ein, dann kann man auch was
sehen. Aus dem Fragment kann ich nicht viel erkennen.

Was wird gemacht, wenn i <= 8 ist? Wie sind die Declarationen?
Was ist 157074?? Was ist wordl?

Auch den Aufruf, damit man sieht, wie die Übergabeparameter
aussehen.

mfg
Franz


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: adam Setting Editor
BeitragVerfasst: Sa 29. Mär 2008, 13:38 
Offline
Administrator
Benutzeravatar

Registriert: Do 29. Jun 2000, 20:20
Beiträge: 5439
Wohnort: München
Verbrauch
Das File ist 157074 WORD lang, bei i=9 beginnt der Datenteil (Header zuende). Bin gerade unterwegs, an einem fremden PC, nichts dabei... Variabel word1 ist der aus dem Dump gelesen WORD Wert, i laeuft von 1 bis 157074, der WORD wert i=157074 ist die Checksumme am ende des Settings. Alles schoen unstrukturet hard gecodet :mrgreen:

cu oli


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: adam Setting Editor
BeitragVerfasst: Sa 29. Mär 2008, 16:09 
Offline
Member

Registriert: Sa 20. Jan 2007, 18:16
Beiträge: 105
Hallo Oli,

in Deinem Fall sind mehrere Sachen, die korregiert werden müssen:

1.
In der Box erhöht sich bei jeden Schleifendurchlauf der Index um 2 (4 Bytes).
Wenn man jetzt die Datenlänge durch 4 teilt (157074 / 4 = 39268,5) erkennt
man, dass das Ende nicht mit einem Schleifendurchlauf erreicht wird.. Der
Endeindex muss also entsprechend korregiert werden. Also in Deinem Fall (-1 bzw. -2),
da sonst die Berechnungslänge nicht mit der Box übereinstimmt.

2.
Bei chZ=1 und bei chZ=3 wird der Wert abgezogen. Der sollte aber addiert werden.

Übersichtlicher wäre so eine Berechnung. Ich hoffe das passt so in Pascal.

Code:
  if (i > 8) and (i < (157074 - 1)) then begin
    wordcheck_neu := wordcheck_neu + word1;

    if ((i and 1) == 0) then begin
      wordcheck_neu := wordcheck_neu + (2 * word1);  /* Alle geraden Indexe = 3 * Word */
    end;
  end;


mfg
Franz


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: adam Setting Editor
BeitragVerfasst: Sa 29. Mär 2008, 18:19 
Offline
Administrator
Benutzeravatar

Registriert: Do 29. Jun 2000, 20:20
Beiträge: 5439
Wohnort: München
Verbrauch
Mit
Zitat:
if (i > 8) and (i < (157074 - 1))
berechne ich die Checksumme nicht ueber den gesamten Datenbereich (for i={9...157072}), ist das beabsichigt?

Muss der Datenbereich wirklich teilbar drch 4 sein? Da (157073-8)/4=39266.25

Meine Rechnung ging ueber i={9..157073}, so ergab sich:

Start
i=9 -> 1.Word
i=10 -> 2.Word
i=11 -> 3.Word
i=12 -> 4.Word
...
i=157072 -> 4.Word
i=157073 -> 1.Word

cu Oli

p.s. sorry fuer Pascal, fuer so kleine Sachen verwende ich och immer TPascal, was ich mal vor fast 20Jahren in der Schule lernte. Fuer C habe ich nicht mal einen Compiler fuer win.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: adam Setting Editor
BeitragVerfasst: Sa 29. Mär 2008, 18:42 
Offline
Member

Registriert: Sa 20. Jan 2007, 18:16
Beiträge: 105
Hallo Oli,

bei Pascal ist ja nur die Syntax ein bischen anders. Die Programme
sind eigentlich immer gleich.

Zu den Längen: Das Problem liegt in der Checksummenberechnung der
Box.

Zitat:
do
{
check += *start++;
check += *start;
check += *start;
check += *start++;
}while(start < end);


Da in der Schleife 2 mal (++) ist, wird also der Index pro Durchlauf um 2 (4 Byte)
erhöht. Da aber die Gesamtlänge nicht durch 4 teilbar ist, wurde gefuscht. Das
müssen wir in den Programmen auch machen oder das Box Programm umschreiben.

Das zweite ist, das die Schleife als "until" Schleife aufgebaut ist. Die Endeabfrage
ist nicht wie üblich am Anfang der Schleife sondern am Ende. Daraus ergibt sich
nochmal eine Indexverschiebung. Darum die Korrektur als (1 bzw. 2). Jenachdem
wie die neue Programmschleife aufgebaut ist. Bei meinem Programm ist der
Korrekturwert 2.

mfg
Franz


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: adam Setting Editor
BeitragVerfasst: Sa 29. Mär 2008, 18:54 
Offline
Administrator
Benutzeravatar

Registriert: Do 29. Jun 2000, 20:20
Beiträge: 5439
Wohnort: München
Verbrauch
Das heiszt die Box beechnet das beim letzten WORD Wert garnicht mehr! Hm.. Man koennte natuerich auch die Checksumme wieder alt bilden SUM={+1WORD, +2WORD...} (Matrix), also die Firmwae anpassen...? Was helst du da fuer an sinnvollsten?

cu Oli


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 95 Beiträge ]  Gehe zu Seite Vorherige  1 ... 3, 4, 5, 6, 7  Nächste

Alle Zeiten sind UTC


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Deutsche Übersetzung durch phpBB.de