Forum: Mikrocontroller und Digitale Elektronik MCP2155 <> Symbian


von Charly (Gast)


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]

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.