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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.