Ankündigung

Einklappen
Keine Ankündigung bisher.

KNX-Analyzer für Saleae-LA

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    KNX-Analyzer für Saleae-LA

    Hallo zusammen,

    wer einen Saleae-Logic Analyzer (oder Clone) einsetzt, muss die Ausgabe des TPUART bis jetzt zu Fuß dekodieren.

    Weil mir das zu blöd war, habe ich einen (ziemlich schlichten) Analyzer für den Saleae am TPUART geschrieben. Binary anbei, Code liegt unter http://git.kalassi.eu/max/KNX-Saleae/tree/master. Voraussetzungen: TPUART auf 19.2 kBaud, ohne Checksumme. Die Einstellmöglichkeit "9.6 kBaud" ist ohne Wirkung. Simulationsdaten erzeugt der Analyzer auch keine (oder keine sinnvollen). Export dagegen geht.

    Installation: DLL ins Verzeichnis C:\Program Files\Saleae LLC\Analyzers kopieren (bei mir jedenfalls) und die SW neu starten. Ich habe die 1.1.15, keine Ahnung, ob es mit neueren Varianten auch funktioniert.

    Gruß,

    Max
    Angehängte Dateien
    Zuletzt geändert von l0wside; 30.10.2015, 00:20.

    #2
    Hallo,

    vielen Dank, werde das in den nächsten Tagen mal ausprobieren.

    Gruß
    Christian

    Kommentar


      #3
      Ich nehme an die .DLL gibt's nicht auch noch als .SO für die Linux-Gemeinde?

      Kommentar


        #4
        Nö, aber den Sourcecode gerne. Ist nichts Weltbewegendes, eher hässlich zusammengehackt nach dem Motto: Hauptsache es tut. Einschränkungen von oben gelten weiter.
        http://git.kalassi.eu/max/KNX-Saleae (von den .vcproj nicht irritieren lassen, der eigentliche Code ist in source/)

        Max

        Kommentar


          #5
          Danke, wenn ich mal viel Zeit hab werde ich versuchen das zu portieren.

          Kommentar


            #6
            Ich weiß nicht, was unter Linux genau zu tun ist. Unter Windows hatte ich die erste (noch ziemlich dummyhafte) Funktionalität binnen einer Stunde am Laufen, unter Linux muss man ggf. noch ein Makefile stricken. "Viel Zeit" muss also nicht unbedingt sein, mit etwas Glück läuft der Code unverändert.

            Und ansonsten gilt:
            ";-) Tipp: Nachts schläft die Familie. Da kann man in Ruhe arbeiten. Wenn dann nur nicht der lästige Wecker wäre der einem zum Brötchengeber delegiert :-( "

            Max

            Kommentar


              #7
              So auf Anhieb ist mir eigentlich nur die Windows.h aufgefallen, die es unter Linux so nicht gibt. Der Rest scheint entweder kompatibel zu sein, oder nur noch vom SDK abzuhängen.

              Wenn man aber noch keine anständige C/C++ IDE unter Linux aufgesetzt hat (wüsste aktuell nicht mal welche, hab das bisher noch nicht gebraucht) und selbst eine Umgebung auf der Konsole stricken nicht zum täglich Brot gehört, dauert das schon länger wie ne Stunde.
              Bis dato hatte alles was ich selbst kompilieren musste ein passendes Make-File. Auspacken, Abhängigkeiten über das Repository nachinstallieren, "make" gefolgt von "make install" und fertig. Hier ist es halt "etwas" mehr.

              Und der Tipp: Der stammt doch von mir? Nur blöd wenn man für die Nachtzeit schon andere Projekte am laufen hat. Da muss man dann halt Prioritäten setzen.

              Kommentar


                #8
                Klar war der Tipp von dir - die Vorlage, ihn dir wieder zurückzugeben, war einfach zu schön

                Makefile braucht es wohl nicht, GUI auch nicht (ein Editor deiner Wahl ist natürlich von Vorteil, notfalls vi). Siehe S. 14 in der Doku.
                http://downloads.saleae.com/betas/1....Sdk-1.1.32.zip

                Max

                Kommentar


                  #9
                  Danke, das spart ein bisschen an recherche. Kurz ausprobiert:

                  Auf windows.h scheint man direkt verzichten zu können, auf tchar.h aber nicht. Ein direktes equivalent dazu gibt es nicht. Muss mal schauen wie ich das am besten umbaue (bin halt Java-String verwöhnt ...)

                  /mnt/bigdisk/Programming/C++/SaleaeAnalyzerSdk-1.1.32/KNXAnalyzer$ python build_analyzer.py
                  Running on Linux
                  g++ -I"../include" -O3 -w -c -fpic -o"release/KNXSimulationDataGenerator.o" "source/KNXSimulationDataGenerator.cpp"
                  g++ -I"../include" -O0 -w -c -fpic -g -o"debug/KNXSimulationDataGenerator.o" "source/KNXSimulationDataGenerator.cpp"
                  g++ -I"../include" -O3 -w -c -fpic -o"release/KNXAnalyzerResults.o" "source/KNXAnalyzerResults.cpp"
                  source/KNXAnalyzerResults.cpp: In member function ‘virtual void KNXAnalyzerResults::GenerateBubbleText(U64, Channel&, DisplayBase)’:
                  source/KNXAnalyzerResults.cpp:28:48: error: ‘_snprintf_s’ was not declared in this scope
                  _snprintf_s(number_str,128,"No %i",frame_index);
                  ^
                  g++ -I"../include" -O0 -w -c -fpic -g -o"debug/KNXAnalyzerResults.o" "source/KNXAnalyzerResults.cpp"
                  source/KNXAnalyzerResults.cpp: In member function ‘virtual void KNXAnalyzerResults::GenerateBubbleText(U64, Channel&, DisplayBase)’:
                  source/KNXAnalyzerResults.cpp:28:48: error: ‘_snprintf_s’ was not declared in this scope
                  _snprintf_s(number_str,128,"No %i",frame_index);
                  ^
                  g++ -I"../include" -O3 -w -c -fpic -o"release/KNXAnalyzerSettings.o" "source/KNXAnalyzerSettings.cpp"
                  g++ -I"../include" -O0 -w -c -fpic -g -o"debug/KNXAnalyzerSettings.o" "source/KNXAnalyzerSettings.cpp"
                  g++ -I"../include" -O3 -w -c -fpic -o"release/KNXAnalyzer.o" "source/KNXAnalyzer.cpp"
                  source/KNXAnalyzer.cpp: In constructor ‘KNXAnalyzer::KNXAnalyzer()’:
                  source/KNXAnalyzer.cpp:67:68: error: ‘malloc’ was not declared in this scope
                  frame_data_bfr = (char*)malloc(frame_data_bfr_size*MAXFRAMEEVALLEN) ;
                  ^
                  source/KNXAnalyzer.cpp: In member function ‘virtual void KNXAnalyzer::WorkerThread()’:
                  source/KNXAnalyzer.cpp:151:54: error: ‘strlen’ was not declared in this scope
                  if (framedata[0] & 0x80) { sprintf(bfr+strlen(bfr)," SlaveCollision"); }
                  ^
                  source/KNXAnalyzer.cpp:152:54: error: ‘strlen’ was not declared in this scope
                  if (framedata[0] & 0x40) { sprintf(bfr+strlen(bfr)," RcvError"); }
                  ^
                  source/KNXAnalyzer.cpp:153:54: error: ‘strlen’ was not declared in this scope
                  if (framedata[0] & 0x20) { sprintf(bfr+strlen(bfr)," TransmitError"); }
                  ^
                  source/KNXAnalyzer.cpp:154:54: error: ‘strlen’ was not declared in this scope
                  if (framedata[0] & 0x10) { sprintf(bfr+strlen(bfr)," ProtocolError"); }
                  ^
                  source/KNXAnalyzer.cpp:155:54: error: ‘strlen’ was not declared in this scope
                  if (framedata[0] & 0x08) { sprintf(bfr+strlen(bfr)," TempWarning"); }
                  ^
                  source/KNXAnalyzer.cpp:156:27: error: ‘strlen’ was not declared in this scope
                  sprintf(bfr+strlen(bfr)," ]");
                  ^
                  source/KNXAnalyzer.cpp:160:28: error: ‘strlen’ was not declared in this scope
                  sprintf(bfr+strlen(bfr),"RPT ");
                  ^
                  source/KNXAnalyzer.cpp:164:28: error: ‘strlen’ was not declared in this scope
                  sprintf(bfr+strlen(bfr),"LOW "); break;
                  ^
                  source/KNXAnalyzer.cpp:173:28: error: ‘strlen’ was not declared in this scope
                  sprintf(bfr+strlen(bfr),"ERROR: TOO SHORT ");
                  ^
                  source/KNXAnalyzer.cpp:190:29: error: ‘strlen’ was not declared in this scope
                  sprintf(bfr+strlen(bfr),"ERROR: LEN MISMATCH %i vs %i",flen,framelen);
                  ^
                  source/KNXAnalyzer.cpp:193:29: error: ‘strlen’ was not declared in this scope
                  sprintf(bfr+strlen(bfr),"%i.%i.%i -> ",framedata[1] >> 4,framedata[1] & 0x0F, framedata[2]);
                  ^
                  source/KNXAnalyzer.cpp:277:29: error: ‘strlen’ was not declared in this scope
                  sprintf(bfr+strlen(bfr)," [IACK]");
                  ^
                  source/KNXAnalyzer.cpp:279:29: error: ‘strlen’ was not declared in this scope
                  sprintf(bfr+strlen(bfr)," [INAK]");
                  ^
                  source/KNXAnalyzer.cpp:291:87: error: ‘realloc’ was not declared in this scope
                  frame_data_bfr = (char*)realloc(frame_data_bfr,frame_data_bfr_size* MAXFRAMEEVALLEN);
                  ^
                  g++ -I"../include" -O0 -w -c -fpic -g -o"debug/KNXAnalyzer.o" "source/KNXAnalyzer.cpp"
                  source/KNXAnalyzer.cpp: In constructor ‘KNXAnalyzer::KNXAnalyzer()’:
                  source/KNXAnalyzer.cpp:67:68: error: ‘malloc’ was not declared in this scope
                  frame_data_bfr = (char*)malloc(frame_data_bfr_size*MAXFRAMEEVALLEN) ;
                  ^
                  source/KNXAnalyzer.cpp: In member function ‘virtual void KNXAnalyzer::WorkerThread()’:
                  source/KNXAnalyzer.cpp:151:54: error: ‘strlen’ was not declared in this scope
                  if (framedata[0] & 0x80) { sprintf(bfr+strlen(bfr)," SlaveCollision"); }
                  ^
                  source/KNXAnalyzer.cpp:152:54: error: ‘strlen’ was not declared in this scope
                  if (framedata[0] & 0x40) { sprintf(bfr+strlen(bfr)," RcvError"); }
                  ^
                  source/KNXAnalyzer.cpp:153:54: error: ‘strlen’ was not declared in this scope
                  if (framedata[0] & 0x20) { sprintf(bfr+strlen(bfr)," TransmitError"); }
                  ^
                  source/KNXAnalyzer.cpp:154:54: error: ‘strlen’ was not declared in this scope
                  if (framedata[0] & 0x10) { sprintf(bfr+strlen(bfr)," ProtocolError"); }
                  ^
                  source/KNXAnalyzer.cpp:155:54: error: ‘strlen’ was not declared in this scope
                  if (framedata[0] & 0x08) { sprintf(bfr+strlen(bfr)," TempWarning"); }
                  ^
                  source/KNXAnalyzer.cpp:156:27: error: ‘strlen’ was not declared in this scope
                  sprintf(bfr+strlen(bfr)," ]");
                  ^
                  source/KNXAnalyzer.cpp:160:28: error: ‘strlen’ was not declared in this scope
                  sprintf(bfr+strlen(bfr),"RPT ");
                  ^
                  source/KNXAnalyzer.cpp:164:28: error: ‘strlen’ was not declared in this scope
                  sprintf(bfr+strlen(bfr),"LOW "); break;
                  ^
                  source/KNXAnalyzer.cpp:173:28: error: ‘strlen’ was not declared in this scope
                  sprintf(bfr+strlen(bfr),"ERROR: TOO SHORT ");
                  ^
                  source/KNXAnalyzer.cpp:190:29: error: ‘strlen’ was not declared in this scope
                  sprintf(bfr+strlen(bfr),"ERROR: LEN MISMATCH %i vs %i",flen,framelen);
                  ^
                  source/KNXAnalyzer.cpp:193:29: error: ‘strlen’ was not declared in this scope
                  sprintf(bfr+strlen(bfr),"%i.%i.%i -> ",framedata[1] >> 4,framedata[1] & 0x0F, framedata[2]);
                  ^
                  source/KNXAnalyzer.cpp:277:29: error: ‘strlen’ was not declared in this scope
                  sprintf(bfr+strlen(bfr)," [IACK]");
                  ^
                  source/KNXAnalyzer.cpp:279:29: error: ‘strlen’ was not declared in this scope
                  sprintf(bfr+strlen(bfr)," [INAK]");
                  ^
                  source/KNXAnalyzer.cpp:291:87: error: ‘realloc’ was not declared in this scope
                  frame_data_bfr = (char*)realloc(frame_data_bfr,frame_data_bfr_size* MAXFRAMEEVALLEN);
                  ^
                  g++ -L"../lib" -lAnalyzer -shared -o"release/libKNXAnalyzer.so" release/KNXSimulationDataGenerator.o release/KNXAnalyzerResults.o release/KNXAnalyzerSettings.o release/KNXAnalyzer.o
                  g++: error: release/KNXAnalyzerResults.o: Datei oder Verzeichnis nicht gefunden
                  g++: error: release/KNXAnalyzer.o: Datei oder Verzeichnis nicht gefunden
                  g++ -L"../lib" -lAnalyzer -shared -o"debug/libKNXAnalyzer.so" debug/KNXSimulationDataGenerator.o debug/KNXAnalyzerResults.o debug/KNXAnalyzerSettings.o debug/KNXAnalyzer.o
                  g++: error: debug/KNXAnalyzerResults.o: Datei oder Verzeichnis nicht gefunden
                  g++: error: debug/KNXAnalyzer.o: Datei oder Verzeichnis nicht gefunden

                  Kommentar


                    #10
                    Habs hinbekommen... aber ich brauch noch ein 64bit sdk... die libAnalyzer.so ist in der verlinkten ZIP nur 32bit.

                    Wenn's fehlerfrei durchlief kann ich ein Diff liefern. Wenn man dann noch mit einem passenden #ifdef arbeitet wäre der Code portabel.

                    [update]

                    Ah, es gibt noch eine libAnalyzer64.so ... muss ich mal schauen warum er die nicht von alleine nimmt...
                    Zuletzt geändert von tuxedo; 12.02.2016, 10:18.

                    Kommentar


                      #11
                      Hab die build_analyzer.py noch angepasst damit er die 64bit Variante nimmt.

                      Compiliert jetzt fehlerfrei. Ausprobiert hab ich's noch nicht, mein Analyzer ist noch irgendwo zwischen Shenzen/China und Deutschland.

                      Habs das ganze mal zusammengepackt:

                      http://denbh000.dyn.root1.de/public/...c_64bit.tar.gz

                      Sourcecode ist an den entsprechend geänderten Stellen kommentiert. Ein define fehlt noch und die Build-File ist erstmal hart auf 64bit eingestellt (wer ist denn bitteschön noch auf einem 32bit Linux unterwegs?!).

                      Kommentar


                        #12
                        Wäre sowas hier zu empfehlen?
                        http://de.aliexpress.com/item/USB-SA...483123776.html

                        Kommentar


                          #13
                          Hab so einen bestellt, allerdings in der Bucht.

                          Irgendwo hatte l0wside auch mal ein paar von den Dingern verlinkt. Finde den Thread aber nicht mehr.
                          Aber soweit ich das sehe/verstanden habe, sind die alle weitgehend gleich. Und für die paar Kröten kann man auch nix falsch machen.

                          Kommentar


                            #14
                            Das sind alles Clones des Saleae-Originals. Neuere SW-Versionen von Saleae scheinen wohl auch abzufragen, ob da wirklich ein Saleae-Teil dranhängt - ich kann es ihnen nicht verdenken.

                            Bei den Clones kannst du im Grunde nichts falsch machen, ob nun über eBay oder Aliexpress.

                            Max

                            Kommentar


                              #15
                              Hab das Linux-"Compilat" mal mit der 64bit Version der Software getestet: Crashed... Irgendwas stimmt noch nicht.
                              Liegt aber auf Eis solange meine Bestellung noch unterwegs ist.

                              Kommentar

                              Lädt...
                              X