www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MCP2155 <> Symbian


Autor: Charly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Experten!

Hat jemand schon Erfahrungen mit Infrarot Handy-Mikrocontroller?

Ich muss von einem Symbian-Handy aus mit einem Mikrocontroller 
kommunizieren und habe ein Paar Probleme:
Mit dem beigefügten Code ist es möglich, Daten auf dem Handy zu 
empfangen, aber gesendete Daten vom Handy kommen nicht an.
Ich verwende ein Nokia-N95 und einen MCP2155 mit Max232 an die serielle 
Schnittstelle des PC angeschlossen. Für den PC gibt es ein 
Beispielprogramm mit dem auch Daten vom MCP gesendet werden können...

Gibt es bessere Alternativen als den MCP2155?

Jede Hilfe ist sehr willkommen!

[code]
LOCAL_C void doExampleL()
    {

    console->Printf (_L("Simple IrDA Test\n"));

    _LIT(SocketsProtocolName, "IrTinyTP" );
    _LIT8(classname,"IrDA:IrCOMM");//IRServer");
    _LIT8(attribute,"IrDA:TinyTP:LsapSel");
    _LIT8(none,"");

    TRequestStatus stat;
    RSocketServ ss;
    TProtocolDesc pInfo;
    TProtocolName protoName(SocketsProtocolName);
    TInt ret;
    ret=ss.Connect ();
    ret=ss.FindProtocol (protoName, pInfo);
    if ( ret!=KErrNone)
        {
        ss.Close();
        }
    //start discovery
    RHostResolver hr1;
    ret=hr1.Open (ss, pInfo.iAddrFamily, pInfo.iProtocol);
    if ( ret!=KErrNone)
        {
        ss.Close();
        }
    console->Printf (_L("HostResolver started\n"));
    console->Printf (_L("Now searching for device...\n"));

    TNameEntry log;
    THostName name;
    //finds all IrLAP stations
    TUint tryNum = 1;

    ret=hr1.GetByName (name, log);
    if ( ret!=KErrNone)
        {
        while (ret!=KErrNone)
            {
            tryNum++;
            ret=hr1.GetByName (name, log);
            }
        }
    console->Printf (_L("Discovered something after %d 
tries\n"),tryNum);
    console->Printf (_L("Device: "));
    console->Printf (log().iName); /// IS Generic IrDA
    console->Printf (_L("\n"));

    TIrdaSockAddr addr(log().iAddr); // Takes a TSockAddr and casts it 
to a TIrdaSockAddr.

    RSocket sender;
    sender.Open (ss, pInfo.iAddrFamily, pInfo.iSockType, 
pInfo.iProtocol);
    console->Printf (_L("Opened sender\n"));

    TIrdaSockAddr iAddress(log().iAddr);
    //open database for IAS Query

    RNetDatabase aNetdb;
    ret = aNetdb.Open(ss, pInfo.iAddrFamily, pInfo.iProtocol);
    if (ret!=KErrNone)
        {
        ss.Close();
        hr1.Close();
        sender.Close();
        }
    console->Printf (_L("Opened database\n"));

    TUint remDevAddr = iAddress.GetRemoteDevAddr();

    TInt port = IASQuery(aNetdb,classname,attribute,remDevAddr);
    iAddress.SetPort(port);
    console->Printf (_L("Queried database, using port: %d\n"),port);

    aNetdb.Close();

    sender.Bind(iAddress);
    sender.Connect(iAddress,stat);
    User::WaitForRequest(stat);
    if(stat.Int()!=KErrNone)
        {
        ss.Close();
        hr1.Close();
        sender.Close();
        }
    console->Printf (_L("Sender connected\n"));

    sender.Write(none,stat);
    User::WaitForRequest(stat);
    if(stat.Int()!=KErrNone)
        {
        ss.Close();
        hr1.Close();
        sender.Close();
        }

    TBuf8<10> b1;
    TBuf<10> b2;
    b1.FillZ();
    b2.FillZ();
    console->Printf (_L("Read until ESC (27):"));
    do
        {
        sender.Read (b1, stat); // Reading from accepted socket.
        User::WaitForRequest (stat);
        b2.Copy(b1);
        console->Printf (b2);
        }while(b2[1]!=27);

    console->Printf (_L("\nPress any key...\n"));
    console->Getch();
    console->Printf (_L("Staring to send...\n"));

    TBuf8<10> b3;
    TBuf8<1> b4;
    b3.FillZ();
    b4.FillZ();
    b3.Format (_L8("Finally :]"));

    sender.Write (b3, stat);
    User::WaitForRequest (stat);

    for(int i=0; i<10; i++)
        {
        sender.Write (b4, stat);
        User::WaitForRequest (stat);
        User::After(1000);
        console->Printf (_L("%d Stat:%d\n"),i,stat.Int());
        }

    console->Printf (_L("Finished\n"));
    hr1.Close();
    sender.Close();
    ss.Close();
    }
[\code]

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.