kerneltest/e32test/nkernsa/interrupts.h
changeset 0 a41df078684a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/e32test/nkernsa/interrupts.h	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,155 @@
+// Copyright (c) 2005-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:
+// \e32test\nkernsa\interrupts.h
+// 
+//
+
+/**
+ @file
+ @internalTechnology
+*/
+
+#ifndef __INTERRUPTS_H__
+#define __INTERRUPTS_H__
+#include <e32err.h>
+
+#undef IMPORT_C
+#define IMPORT_C /* */
+
+/*************************************************
+ * Interrupt handling
+ *************************************************/
+typedef void (*TIsr)(TAny*);
+
+
+
+
+/**
+A class that exports interrupt functionality to device drivers and
+other kernel-side code.
+
+Although Symbian OS defines this class, it does not implement it;
+an implementation for each of the functions defined by this class must
+be provided by the Variant in the baseport.
+
+Note that the class only provides the public API for using interrupts,
+not for dispatching them.
+*/
+class Interrupt
+	{
+public:
+
+
+    /**
+    Associates the specified interrupt service routine (ISR) function with
+    the specified interrupt Id.
+    
+    This is also known as binding the interrupt.
+        
+    When the ISR is called, the value aPtr is passed as the argument.
+    ISR may either be a bare function or a static class member, taking TAny* parameter:
+    @code
+    void Isr(TAny* aParam)
+    @endcode
+
+    Note that you must call Interrupt::Enable() before you can start
+    receiving interrupts.
+     
+    @param anId  The interrupt Id.
+    @param anIsr The address of the ISR function. 
+    @param aPtr  32-bit value that is passed to the ISR.
+                 This is designated a TAny* type as it is usually a pointer to
+                 the owning class or data to be used in the ISR, although
+                 it can be any 32-bit value.
+                 
+    @return 	 KErrNone, if successful; KErrArgument, if anId is invalid;
+                 KErrInUse, if the ISR is already bound to this interrupt.
+    */
+	IMPORT_C static TInt Bind(TInt anId, TIsr anIsr, TAny* aPtr);
+
+
+    /**
+    Unbinds the interrupt service routine (ISR) function from
+    the specified interrupt id.
+    
+    @param anId The interrupt Id.
+    
+    @return 	KErrNone, if successful; KErrArgument, if anId is invalid;
+                KErrGeneral, if there is no ISR bound to this interrupt.
+    */
+	IMPORT_C static TInt Unbind(TInt anId);
+
+
+    /**
+    Enables the specified interrupt.
+    
+    After enabling the interrupt, the ISR will run if the interrupt signals.
+    
+    @param anId The interrupt Id.
+    
+    @return 	KErrNone, if successful; KErrArgument, if anId is invalid;
+                KErrGeneral, if there is no ISR bound to this interrupt.
+    */
+	IMPORT_C static TInt Enable(TInt anId);
+
+
+    /**
+    Disables the specified interrupt.
+    
+    After calling this function, the interrupt source cannot generate
+    an interrupt to the CPU.
+    
+    @param anId The interrupt Id.
+    
+    @return 	KErrNone, if successful; KErrArgument, if anId is invalid;
+                KErrGeneral, if there is no ISR bound to this interrupt.
+    */
+	IMPORT_C static TInt Disable(TInt anId);
+
+
+    /**
+    Clears any pending signal on the specified interrupt.
+    
+    @param anId The interrupt Id.
+    
+    @return 	KErrNone, if successful; KErrArgument, if anId is invalid;
+                KErrGeneral, if there is no ISR bound to this interrupt.
+    */
+	IMPORT_C static TInt Clear(TInt anId);
+
+
+    /**
+    Changes the priority of the specified interrupt to the new specified value.
+    
+    The meaning of the priority value is determined by the baseport.
+    The function returns KErrNotSupported if the hardware or the baseport
+    does not support configurable interrupt priorities.
+
+    @param anId      The interrupt Id.
+    @param aPriority The new priority value.
+    
+    @return 	KErrNone, if successful; KErrArgument, if anId is invalid;
+                KErrNotSuppported, if configurable interrupt priorities
+                are not supported.
+    */
+	IMPORT_C static TInt SetPriority(TInt anId, TInt aPriority);
+	};
+
+struct SInterruptHandler
+	{
+	TAny* iPtr;
+	TIsr iIsr;
+	};
+
+#endif