Modemsimulator programieren ohne viel Schickschnack



  • Guten Abend zusammen,

    ich möchte gerne mit C ++ ein Modem simulieren welches alle AT
    Befehle mit ok bzw. ring oder connect beantwortet.

    Das heißt das Tool soll auf einen Comport den ich z.b. mit com0com erstelle lauschen und dann wie ein richtiges Modem auf folgende Befehle folgendermaßen antworten:

    ATDT irgend ne nummer: CONNECT

    AT: OK

    Und es soll die RING Meldung erzeugen können.

    Wie fange ich nun am besten ab soetwas in c++ zu programieren für Windows mehr muss das Tool nicht können.

    Vielen Dank für Eure Hilfe und einen schönen Abend noch



  • Naja, erstmal com0com installieren.

    Dann machst du in deinem Programm einen der beiden COM Ports des com0com Paares auf, und liest da Daten.
    Alles was reinkommst pufferst du so lange bis du nen Zeilenumbruch bekommst.
    Und dann wertest du diese eine Zeile aus und schreibst das Ergebnis zurück.

    Ala

    OpenPort();
    while (true)
    {
        char ch = ReadOneChar();
        m_readBuffer.push_back(ch);
        if (IsCompleteLine(m_readBuffer))
        {
            ProcessCommand(m_readBuffer);
            m_readBuffer.clear();
        }
    }
    

    In ProcessCommand dann halt gucken was du bekommen hast und die passende Antwort generieren.
    Die nötigen API Calls musst du dir selbst raussuchen (=> MSDN). Also wie man nen COM Port aufmacht, wie man das Format einstellt (Baudrate, Datenbits, Stopbits, Parity, ...) usw.

    Wie du dem Ding dann mitteilst dass es sich z.B. beenden soll, bzw. dass es nen "RING" simulieren soll, ist wieder ein anderes Problem.

    Bzw. was "RING" angeht - das schickt das Modem IIRC ja von selbst, also nicht als Ergebnis auf ein Kommando sondern sozusagen "unaufgefordert".
    D.h. du müsstest den oben skizzierten Loop z.B. so anpassen dass du ReadOneChar() z.B. nach einer bestimmten (kurzen) Zeit auch zurückkommt wenn es nix zu lesen gibt. Und in dem Fall dann gucken ob über den wie-auch-immer gerateten Kommunikationsmechanismus den du für diese Art von Steuerbefehlen verwendest (Sockets, gebroadcastete Messages, Shared-Memory, ...) ein "mach mal RING" Befehl angekommen ist.

    Das ist strenggenommen etwas "unsauber", da "unnötiges" Polling, aber dafür einfacher umzusetzen.
    Die saubere Variante wäre vermutlich asynchrone IO Befehle + WaitForMultipleObjects zu verwenden.
    Würde ich aber hier nicht machen - bzw. nur in ganz speziellen Anwendungsfällen. Also z.B. wenn das Tool wirklich für den "Produktivbetrieb" gedacht ist (=nicht nur zum Testen von irgendwas), und es wirklich drauf ankommt im Idle-Betrieb so wenig CPU Zeit wie nur irgendmöglich zu verbrauchen. Also z.B. wenn es irgendwo 24/7 laufen soll und vielleicht sogar im Akkubetrieb auf nem Notebook.

    Und...

    ohne viel Schickschnack (...) alle AT Befehle

    Das beisst sich ein bisschen.
    Hast du mal nachgeguckt wie viele AT Befehle es gibt?
    Klar, du kannst es so implementieren dass alle unbekannten Befehle einfach mit "OK" beantwortet werden, aber das ist nicht sehr realistisch. D.h. die Chancen dass ein Programm das solche unbekannten Befehle sendet mit einem einfachen "OK" klarkommt sind nicht sehr gut.



  • Schonmal Danke.

    Nur damit es keine Mißverständnisse gibt der Modemsimulator soll nur die Meldungen RING CONNECT und OK ausgeben mehr nicht.

    Also wie fang ich am besten an? Com0com installieren und dann mit welcher Software soll ich arbeiten bin Neuling



  • Naja ich würde eine IDE nehmen wie z.B. Visual Studio 2013. Die Community Edition ist da z.B. gratis, und ein sehr sehr mächtiges Teil.

    Und halt die Sprache mit der du am besten klar kommst. Ich würde mal C++ oder C# vorschlagen.

    Das Forum ist allerdings nicht dazu da dir die Grundlagen von C++, C# oder sonst einer Sprache deiner Wahl zu erklären. Dafür gibt es Bücher und z.T. Online Tutorials.
    Dazu welche Bücher empfehlenswert sind gibt es auch nen eigenen Thread hier in der FAQ.
    Ob es für C++ brauchbare Online Tutorials gibt weiss ich nicht. Vermutlich nicht 😉



  • Oder gibs sowas was ich suce auch aks fertiges Programm bislang habe ich die Modemsimulatoren die ich getestet habe nicht für gut befunden weil sie keine RING Befehle OK und CONNECT Befehle ausführen konnten sie haben dann immmer eine Telefonleitung erqartet das möchte ich aber nicht es soll ohne nternetverbindung und ohne Telefonleitung gehen.



  • Keine Ahnung ob's sowas fertig gibt was deinen Ansprüchen gerecht wird.
    Hab' aber auch keine Ahnung was ein "OK Befehl" sein soll.
    AT+OK? WTF?



  • Gut das klären wir

    Das meine ich damit

    http://www.tcp-ip-info.de/tcp_ip_und_internet/hayes-befehle.htm



  • Ja, der Hayes-Befehlssatz ist mir nicht fremd.
    Nur dass es darin keinen "OK" Befehl gibt. Und auch keinen "RING" Befehl.
    Das sind Antworten bzw. Benachrichtigungen vom Modem, keine Befehle.



  • Aber vom Grundprinzip hast Du verstanden was ich gerne möchte?



  • Ja, klar.
    Hast du verstanden dass man dafür programmieren können muss?
    Wenn nur ein paar der einfacheren Befehle unterstützt werden müssen ist es nicht wirklich sehr schwer, aber ganz trivial ist es auch nicht.

    Fertiges Programm kenne lich leider keines, das hätte ich dir natürlich sonst verraten 🙂



  • Ja das habe ich aber das ist doch noch zi hoch für mich.



  • OK.

    Also du kannst gerne im Projekte Forum fragen ob jmd. Lust hat das mit dir zusammen durchzuziehen, bzw. ob es jmd. (gegen Bezahlung) für dich entwickeln will.

    Ansonsten könntest du noch in Themen rund um die IT fragen ob jemand etwas fertiges kennt.

    Oder du versuchst es halt doch selbst. Wobei dir eins klar sein muss: die Treibende Kraft dahinter musst du sein, und eine gewisse Selbständigkeit/der Wille Dinge selbst zu googeln/auszuprobieren etc. muss auch erkennbar sein, sonst wird dir vermutlich keiner helfen.


Anmelden zum Antworten