Join Now
Quality Rating:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)
This page was last modified 17:07, 20 May 2008.

Find IR Ports in S60

From Forum Nokia Wiki


Contents

Introduction

The purpose of this code is to demonstrate how to use the IR port and therefore the format of code is not as good as commercial code.

Description of Infrared Port

The Infrared port in Symbian S60. The port is used by selecting the port

_LIT(KIrDAPort, "IRCOMM::00");

This is used in the example below. To create the template in Carbide C++ 1.1 Express and S60 Platform SDK 3rd Edition FP1 and new "S60 Symbian OS C++ Project", call this project "FindPorts". Select "S60 3.x GUI Application", this will create the new project.

The additional include is FindPortsAppUi.cpp

#include <c32comm.h>

in FindPorts.mmp add the following libary to the section

LIBRARY           c32.lib // Added for Serial port support



Modified code

Int errDev;
TInt errCom;
RCommServ IRcommServer; //serial comms
RComm IRcommPort; // comm port


// Define the logical device driver name

// Device driver names
_LIT(KLddName, "ECOMM");

//Physical driver names
_LIT(KPddName, "EUART1");

// Communication modules
_LIT(KRS232, "ECUART");
_LIT(KIrDA, "IRCOMM");
_LIT(KCommPort, "COMM::0");

_LIT(KIrDAPort, "IRCOMM::00");

//Load Physical Device driver
errDev = User::LoadPhysicalDevice(KPddName);
if ((errDev != KErrNone) && (errDev != KErrAlreadyExists)) User::Leave (errDev);

//Load Logical Device driver
errDev = User::LoadLogicalDevice(KLddName);
if ((errDev != KErrNone) && (errDev != KErrAlreadyExists)) User::Leave (errDev);

// starting communication server does not need checking as this will not  error if already running
StartC32();
//connect to the comm server
User::LeaveIfError(IRcommServer.Connect());

errCom = IRcommServer.LoadCommModule(KIrDA);
//Load the CSY module

User::LeaveIfError(IRcommServer.LoadCommModule(KIrDAPort));

TSerialInfo portInfo;

User::LeaveIfError(IRcommServer.GetPortInfo(KIrDAPort,portInfo));

_LIT(KColons,"::");
TBuf<KMaxPortName + 4> portName;
portName.Append(portInfo.iName);

TInt errCom = IRcommPort.Open(IRcommServer, KCommPort, ECommExclusive);
if ((errCom != KErrNone) )
{
 IRcommServer.Close();
 User::Leave(errCom);
}

The full modified file FindPortsAppUi.cpp

/*
============================================================================
Name        : FindPortsAppUi.cpp
Author      : 
Copyright   : Your copyright notice
Description : CFindPortsAppUi implementation
============================================================================
*/

// INCLUDE FILES
#include <avkon.hrh>
#include <aknnotewrappers.h>
#include <stringloader.h>
#include <FindPorts.rsg>
#include <f32file.h>
#include <s32file.h>

#include <c32comm.h>

#include "FindPorts.pan"
#include "FindPortsAppUi.h"
#include "FindPortsAppView.h"
#include "FindPorts.hrh"
_LIT( KFileName, "C:\\private\\EC4B9E96\\FindPorts.txt" );
_LIT( KText, "Hello World finding port");
// ============================ MEMBER FUNCTIONS     ===============================


// -----------------------------------------------------------------------------
// CFindPortsAppUi::ConstructL()
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CFindPortsAppUi::ConstructL()
   {
   // Initialise app UI with standard value.
   BaseConstructL();

	// Create view object
	iAppView = CFindPortsAppView::NewL( ClientRect() );

	// Create a file to write the text to
	RFs fsSession;
	User::LeaveIfError(fsSession.Connect());
	CleanupClosePushL( fsSession );

	TInt err = fsSession.MkDirAll(KFileName);
	if ( (KErrNone != err) && (KErrAlreadyExists != err) )
		{
		CleanupStack::PopAndDestroy(1); //  fsSession
		return;
		}
	
	RFile file;
	err = file.Replace(fsSession, KFileName, EFileWrite );
	CleanupClosePushL( file );
	if ( KErrNone != err )
		{
		CleanupStack::PopAndDestroy(2); // file, fsSession
		return;
		}
	
	RFileWriteStream outputFileStream( file );
	CleanupClosePushL( outputFileStream );
	outputFileStream << KText;

	CleanupStack::PopAndDestroy(3); // outputFileStream, file, fsSession

	}
// -----------------------------------------------------------------------------
// CFindPortsAppUi::CFindPortsAppUi()
// C++ default constructor can NOT contain any code, that might leave.
// -----------------------------------------------------------------------------
//
CFindPortsAppUi::CFindPortsAppUi()
   {
   // No implementation required
   }

// -----------------------------------------------------------------------------
// CFindPortsAppUi::~CFindPortsAppUi()
// Destructor.
// -----------------------------------------------------------------------------
//
CFindPortsAppUi::~CFindPortsAppUi()
   {
   if ( iAppView )
       {
       delete iAppView;
       iAppView = NULL;
       }

   }
// -----------------------------------------------------------------------------
// CFindPortsAppUi::HandleCommandL()
// Takes care of command handling.
// -----------------------------------------------------------------------------
//


void CFindPortsAppUi::HandleCommandL( TInt aCommand )
   {
   switch( aCommand )
       {
       case EEikCmdExit:
       case EAknSoftkeyExit:
           Exit();
           break;

       case ECommand1:
           {
 


Int errDev;
TInt errCom;
RCommServ IRcommServer; //serial comms
RComm IRcommPort; // comm port


// Define the logical device driver name

// Device driver names
_LIT(KLddName, "ECOMM");

//Physical driver names
_LIT(KPddName, "EUART1");

// Communication modules
_LIT(KRS232, "ECUART");
_LIT(KIrDA, "IRCOMM");
_LIT(KCommPort, "COMM::0");

_LIT(KIrDAPort, "IRCOMM::00");

//Load Physical Device driver
errDev = User::LoadPhysicalDevice(KPddName);
if ((errDev != KErrNone) && (errDev != KErrAlreadyExists)) User::Leave (errDev);

//Load Logical Device driver
errDev = User::LoadLogicalDevice(KLddName);
if ((errDev != KErrNone) && (errDev != KErrAlreadyExists)) User::Leave (errDev);

// starting communication server does not need checking as this will not  error if already running
StartC32();
//connect to the comm server
User::LeaveIfError(IRcommServer.Connect());

errCom = IRcommServer.LoadCommModule(KIrDA);
//Load the CSY module

User::LeaveIfError(IRcommServer.LoadCommModule(KIrDAPort));

TSerialInfo portInfo;

User::LeaveIfError(IRcommServer.GetPortInfo(KIrDAPort,portInfo));

_LIT(KColons,"::");
TBuf<KMaxPortName + 4> portName;
portName.Append(portInfo.iName);

TInt errCom = IRcommPort.Open(IRcommServer, KCommPort, ECommExclusive);
if ((errCom != KErrNone) )
{
 IRcommServer.Close();
 User::Leave(errCom);
}
 //---- End of code -----------------------------------------------------          
           // Load a string from the resource file and display it
           HBufC* textResource = StringLoader::LoadLC( R_COMMAND1_TEXT );
           CAknInformationNote* informationNote;

           informationNote = new ( ELeave ) CAknInformationNote;

           // Show the information Note with
           // textResource loaded with StringLoader.
           informationNote->ExecuteLD( *textResource);

           // Pop HBuf from CleanUpStack and Destroy it.
           CleanupStack::PopAndDestroy( textResource );
           }
           break;
		case ECommand2:
			{
			
			RFs fsSession;
			RFile rFile;
			
			// Connects a client process to the fileserver
			User::LeaveIfError(fsSession.Connect());
			CleanupClosePushL(fsSession);
			
			//Open file where the stream text is
			User::LeaveIfError(rFile.Open(fsSession,KFileName, EFileStreamText));//EFileShareReadersOnly));// EFileStreamText));
			CleanupClosePushL(rFile);
			
			// copy stream from file to RFileStream object
			RFileReadStream inputFileStream(rFile);
    		CleanupClosePushL(inputFileStream);
   		
   		// HBufC descriptor is created from the RFileStream object.
   		HBufC* fileData = HBufC::NewLC(inputFileStream, 32);

           CAknInformationNote* informationNote;

           informationNote = new ( ELeave ) CAknInformationNote;
           // Show the information Note
           informationNote->ExecuteLD( *fileData);			
			
			// Pop loaded resources from the cleanup stack
			CleanupStack::PopAndDestroy(4); // filedata, inputFileStream, rFile, fsSession
			fsSession.Close();
			}
			break;
       default:
           Panic( EFindPortsUi );
           break;
       }
   }
Related Discussions
Thread Thread Starter Forum Replies Last Post
Implementing HID protocol jascco General Symbian C++ 1 2007-05-02 16:56
changing S60 browser user agent via python gontofe Python 13 2008-07-15 14:49
WAP Gateway startup failure... cheryltysoe General Browsing 2 2005-10-25 09:10
socket programing jonneymendoza Mobile Java General 14 2007-10-23 16:11
"Start Connector" fails ueffchen Mobile Web Server 4 2007-05-10 14:15
 
Powered by MediaWiki
     
     RDF Facets:
     
     
     qfnZtopicQUqfnTopicZconnectivityQ
     qfnZtopicQUqfnTopicZirQ
     qfnZtypeQUqfnTypeZCommunityContentQ
     qfnZtypeQUqfnTypeZWebpageQ
     qfnZtypeQUqfnTypeZWikiContentQ
     qmarsZlanguageQUxhttpE3aE2fE2fswE2enokiaE2ecomE2flanguageE2d1E2fenX