⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gpstest.cpp

📁 SYMBIAN GPS NMEA协议实现
💻 CPP
字号:

#include <EikEnv.h>

#include <BluetoothGPS.rsg>

#include "gps/impl/BtGpsReceiver.h"

#include "views/GpsTest.h"



#define KMaxTIntLen 8
#define KMaxMessageListLen 500



CGpsTest::CGpsTest( ) : CViewBase( ) {

}



CGpsTest::~CGpsTest( ) {

	if ( iGpsReceiver ) iGpsReceiver->RemoveListenerL( this );
	iGpsReceiver = NULL;

	delete( iGpsText ); iGpsText = NULL;
    delete( iListBox ); iListBox = NULL;

}



CGpsTest * CGpsTest::NewL( const TRect & aRect ) {

    CGpsTest * self = CGpsTest::NewLC( aRect );
    CleanupStack::Pop( );

    return( self );

}



CGpsTest * CGpsTest::NewLC( const TRect & aRect ) {

    CGpsTest * self = new ( ELeave ) CGpsTest( );
    CleanupStack::PushL( self );
    self->ConstructL( aRect );

    return( self );

}



void CGpsTest::ConstructL( const TRect & aRect ) {

	BaseConstructL( aRect );

	// Texte aus den Resourcen laden.
	iGpsText = iEikonEnv->AllocReadResourceL( R_GPS_INFO_LABEL );

	// Bestimme den benutzerkonfigurierten GPS Receiver und melde "this" als
	// Listener an.
	iGpsReceiver = CBtGpsReceiver::NewL( );
	iGpsReceiver->AddListenerL( this );
	
	// Create a control to display a list of messages
    iListBox = new ( ELeave ) CAknSingleNumberStyleListBox( );
    iListBox->SetContainerWindowL( *this );
    iListBox->ConstructL( this, 0 );
    iListBox->SetRect( aRect.Size( ) );
    iListBox->ActivateL( );
    iListBox->CreateScrollBarFrameL( ETrue );
    iListBox->ScrollBarFrame( )->SetScrollBarVisibilityL
		( CEikScrollBarFrame::EOn, CEikScrollBarFrame::EAuto );

    // Create an array to hold the messages
    iMessageList = new ( ELeave ) CDesCArrayFlat( 10 );

    // Give it to the control
    CTextListBoxModel * model = iListBox->Model( );
    model->SetItemTextArray( iMessageList );
    model->SetOwnershipType( ELbmOwnsItemArray ); // transfer ownership of iMessageList

	// Show startup message
	_LIT( KStarted, "Started" );
	LogL( KStarted );

	// Activate the window, which makes it ready to be drawn.
	ActivateL( );

}



TKeyResponse CGpsTest::OfferKeyEventL( const TKeyEvent & aKeyEvent, TEventCode aType ) {

	return( iListBox->OfferKeyEventL( aKeyEvent, aType ) );

}



TInt CGpsTest::CountComponentControls( ) const {

	return( 1 ); // Only have one Component

}



CCoeControl * CGpsTest::ComponentControl( TInt /*aIndex*/ ) const {

    return( iListBox ); //  Return the component

}



void CGpsTest::GpsUpdate( const TGpsPosition & aNewPosition ) {

	iLastGpsPos.Set( aNewPosition );

	TRealFormat format;
	format.iWidth = 5;

	TBuf< 25 > numberString;
	numberString.AppendNum( iLastGpsPos.Longitude( ), format );
	numberString.Append( ' ' );
	numberString.AppendNum( iLastGpsPos.Latitude( ), format );

	LogL( numberString );

}



void CGpsTest::LogL( const TDesC & aText ) {

	LogL( aText, KNullDesC );

}



void CGpsTest::LogL( const TDesC & aText, TInt aNumber ) {

	TBuf< KMaxTIntLen > numberString;
    numberString.Num( aNumber );

	LogL( aText, numberString );

}



void CGpsTest::LogL( const TDesC & aText, const TDesC & aExtraText ) {

	if ( iMessageList->Count( ) > KMaxMessageListLen )
		ShrinkMessageListL( KMaxMessageListLen * 3 / 4 );

	HBufC * buffer = HBufC::NewLC( KMaxTIntLen + aText.Length( ) + aExtraText.Length( ) );

    buffer->Des( ).Num( ++iMsgIndex );
	buffer->Des( ).Append( '\t' );
    buffer->Des( ).Append( aText );
	if ( aExtraText.Length( ) > 0 ) {
		buffer->Des( ).Append( ':' );
		buffer->Des( ).Append( aExtraText );
	}

    // Add the message to the list
    iMessageList->AppendL( *buffer );
    CleanupStack::PopAndDestroy( buffer );

    // tell the control about the change
    iListBox->HandleItemAdditionL( );

}



TBool CGpsTest::ContainsEntries( ) {

	return( iListBox->Model( )->NumberOfItems( ) != 0 );

}



void CGpsTest::ClearMessageListL( ) {

	iMessageList->Reset( );

    iListBox->HandleItemRemovalL( );
    iListBox->Reset( );

    iMsgIndex = 0;

}



void CGpsTest::ShrinkMessageListL( TInt aRemainingSize ) {

	TInt delta = iMessageList->Count( ) - aRemainingSize;
	if ( delta <= 0 )
		return;

	iMessageList->Delete( 0, delta );

    iListBox->HandleItemRemovalL( );
    iListBox->Reset( );

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -