kerneltest/f32test/shostmassstorage/msman/inc/cusbotg.h
author mikek
Fri, 02 Jul 2010 09:53:45 +0100
branchGCC_SURGE
changeset 190 0d42d469e749
parent 0 a41df078684a
permissions -rw-r--r--
1) Swapping to c++ instead of assembly implementations of several kernel APIs to avoid calling probably broken implementations of __EH_FRAME_?? macros 2) Commenting out otherwise unavoidable calls to __EH_FRAME_?? macros in uc_exe.cia. This is a temporary hack. Both changes to see if they get past an early kernel panic in the Syborg ROM from the current build: EH ERROR: no exception descriptor for address 0x801eb277 Thread efile.exe::Main Panic USER-EXEC 3

// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
// All rights reserved.
// This component and the accompanying materials are made available
// under the terms of the License "Eclipse Public License v1.0"
// which accompanies this distribution, and is available
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
//
// Initial Contributors:
// Nokia Corporation - initial contribution.
//
// Contributors:
//
// Description:
//


#ifndef CUSBOTG_H
#define CUSBOTG_H

class CUsbOtgEventWatcher;
class CRequestSessionWatcher;

class MUsbRequestSessionObserver
    {
public:
    virtual void BusRequestL() = 0;
    };


class ROtgStateChangeNotifier
    {
public:
    ROtgStateChangeNotifier();
    ~ROtgStateChangeNotifier();

	void Register(const RMessage2& aMessage);
    void DoNotifyL();
    void DoCancelL();

private:
	void CompleteNotifierL(TInt);

private:
    /** Notification service */
	RMessage2 iMessage;
    /** Flag to indicate that media change notification is active */
	TBool iRegistered;
    };





class CUsbOtg: public CBase,
               public MUsbRequestSessionObserver
    {
public:
    enum TOtgState {KOtgStateStart,
                    KOtgStateAPlugInserted,
                    KOtgStateSessionOpen,
                    KOtgStateSessionClose};


public:
	static CUsbOtg* NewL();
	~CUsbOtg();
protected:
	CUsbOtg();
	void ConstructL();

public:

    // MUsbRequestSessionObserver
    void BusRequestL();

    void HandleUsbOtgEvent(RUsbOtgDriver::TOtgEvent aEvent);

    TBool DeviceInserted();
    void NotifyChange(const RMessage2& aMessage);
    void NotifyChangeCancel();
    TInt BusDrop();

private:
    void StartL();
    void Stop();


private:
    TOtgState iOtgState;
	RUsbOtgDriver iUsbOtgDriver;

    CUsbOtgEventWatcher* iOtgEventWatcher;

    CRequestSessionWatcher* iRequestSessionWatcher;

    ROtgStateChangeNotifier iNotifier;
    };

#endif