View a printable version of the current page.
  Wiki > Symbian Developer Network Public Wiki > ... > Example source code > Get cell broadcast
  Get cell broadcast
Added by alie, last edited by Rodney De Gale on Feb 15, 2008  (view change)
Labels: 
(None)

Header file

#ifndef __CBUTIL_H__
#define __CBUTIL_H__

#include <e32base.h>
#include <Etel3rdParty.h>

#include <etelmm.h>
#include <etel.h>
#include <etelmmcs.h>
#include <flogger.h>
#include <csmshandler.h>
 
class CCBUtil : public CActive
    {
    public:
        CCBUtil();

        static CCBUtil* NewL();

        void ConstructL();

        ~CCBUtil();

    private:
        void RunL();

        void DoCancel();

    private:
        RFileLogger                iLog;

        TRequestStatus iReqStatus;

        RTelServer iServer;

        RMobilePhone iPhone;

        RMobileBroadcastMessaging iBroadcastMsg;

        TBuf8<88> iGsmMsgdata;

        CSmsHandler* iSmsHandler;

        };

#endif // __CBUTIL_H__
#include "cbutil.h"
#include <eikenv.h>
#include <Etelmm.h>
#include <Etel3rdparty.h>
#include <stdio.h>

_LIT(KGsmModuleName,"phonetsy.tsy");

CCBUtil::~CCBUtil()
    {
    Cancel();
    iPhone.Close();
    iServer.UnloadPhoneModule(KGsmModuleName);
    iServer.Close();
    iLog.CloseLog();
    iLog.Close();
    }
 
CCBUtil* CCBUtil::NewL()
    {
    CCBUtil* self = new (ELeave) CCBUtil();
    CleanupStack::PushL(self);
    self->ConstructL();
    CleanupStack::Pop();
    return self;   
    }

   
void CCBUtil::ConstructL()
    {
    RTelServer::TPhoneInfo iPhoneInfo;
    iServer.Connect();
    iServer.LoadPhoneModule(KGsmModuleName);
    TInt enumphone;
    User::LeaveIfError(iServer.EnumeratePhones(enumphone));
    if (enumphone < 1)
        {
        User::Leave(KErrNotFound);
        }
    User::LeaveIfError(iServer.GetPhoneInfo(0, iPhoneInfo));
    User::LeaveIfError(iPhone.Open(iServer,iPhoneInfo.iName));
    iBroadcastMsg.Open(iPhone);
    RMobileBroadcastMessaging::TMobileBroadcastAttributesV1 iAttrInfo;
    TPckg<RMobileBroadcastMessaging::TMobileBroadcastAttributesV1> iDes(iAttrInfo);
    iBroadcastMsg.ReceiveMessage(iStatus,iGsmMsgdata,iDes);
    SetActive();
    }
 
CCBUtil::CCBUtil()
    : CActive(EPriorityNormal)
    {
    CActiveScheduler::Add(this);
    }

void CCBUtil::RunL()
    {
    if(iStatus==KErrNone)
        {
        RFs fs;
        fs.Connect();
        RFile file;
        TBuf<32> aFileName = _L("C:\\log.txt");
        fs.Delete(aFileName);
        file.Replace(fs,aFileName,EFileWrite);
        file.Write(iGsmMsgdata);
        file.Close();
        fs.Close();
    
        FILE* fp;
        fp = fopen("c:\\log.txt","rb");

        char locationString[94];
        char cbuf;
        int char_cnt = 0;
        unsigned int bb = 0;

        unsigned char ur, curr, prev = 0;
        int cnt = 0;
        for ( cnt = 0; cnt < 6; cnt++)
            fread(&cbuf, 1, 1, fp);

        while(fread(&cbuf,1,1,fp))
            {
            unsigned char aa = (1<< (7 -bb%7))-1;
            ur = cbuf & aa;
            ur = (ur << (bb)) | prev;
            curr = cbuf &(0xff ^ aa);
            curr = curr >>(7-bb);
            prev= curr;
            if(ur == 0xd)
                {
                break;
                }
                
            locationString[char_cnt] = ur;
            bb = ++bb % 7;
            char_cnt++;
            if ( bb== 0 )
                {
                locationString[char_cnt++] = prev;
                prev =0;
                }
            }

        locationString[char_cnt] = '\0';
        fclose(fp);
        int len = 0;
        while (locationString[len] != NULL )
            len++;

        HBufC* nameHeap = HBufC::NewLC(len);
        TPtr namePtr(nameHeap->Des());
        TBuf<250> messageText;

        for (int i = 0; i < len; i++)
            namePtr.Append((TChar)locationString[i]);

        messageText.Copy(namePtr);

        CAknInformationNote* informationNote = new ( ELeave )
        CAknInformationNote;
        informationNote->ExecuteLD(messageText);

        CleanupStack::PopAndDestroy(nameHeap);
        }
    else
        {
        CAknInformationNote* informationNote = new ( ELeave )
        CAknInformationNote;
        informationNote->ExecuteLD(_L("Error :p"));
        }
    iBroadcastMsg.Close();
    }

void CCBUtil::DoCancel()
    {
    }

This code is great but how does one use it? The header files 'etelmmcs.h' and 'csmshandler.h' are not public in the current Nokia series 60 sdk's.

Interactive Services Terms & Conditions of use | Terms of use | Privacy policy | Media Center | Contact us | © 2008 Symbian