Add defaultErrFxn and an err fxn to module state
authorJudah Vang <judah@ti.com>
Wed, 25 Sep 2013 22:13:54 +0000 (15:13 -0700)
committerChris Ring <cring@ti.com>
Thu, 26 Sep 2013 00:41:41 +0000 (17:41 -0700)
Update TransportCirc_setErrFxn to set the module errFxn at runtime.
Create a default Error Fxn which does nothing for TransportCirc.
If an error fxn is not specified it will be set to the default.

packages/ti/sdo/ipc/family/f28m35x/TransportCirc.c
packages/ti/sdo/ipc/family/f28m35x/TransportCirc.xdc
packages/ti/sdo/ipc/family/f28m35x/TransportCirc.xs

index c0138ae4f9bb9963d7d8c60177f4a14ffca1b3d2..8dfd364b8be9bd261b57a00d15ad999b8aef5aa3 100644 (file)
@@ -42,6 +42,7 @@
 
 #include <ti/sysbios/hal/Hwi.h>
 #include <ti/sysbios/knl/Swi.h>
 
 #include <ti/sysbios/hal/Hwi.h>
 #include <ti/sysbios/knl/Swi.h>
+#include <ti/sdo/ipc/interfaces/IMessageQTransport.h>
 
 #include <ti/sdo/ipc/family/f28m35x/IpcMgr.h>
 
 
 #include <ti/sdo/ipc/family/f28m35x/IpcMgr.h>
 
@@ -329,7 +330,7 @@ Void TransportCirc_swiFxn(UArg arg)
 
         /* Make sure buf is not NULL */
         if (buf == NULL) {
 
         /* Make sure buf is not NULL */
         if (buf == NULL) {
-            TransportCirc_errFxn(TransportCirc_Reason_FAILEDALLOC,
+            TransportCirc_module->errFxn(TransportCirc_Reason_FAILEDALLOC,
                 ti_sdo_ipc_family_f28m35x_TransportCirc_Handle_upCast(obj),
                 NULL,
                 (UArg)msg);
                 ti_sdo_ipc_family_f28m35x_TransportCirc_Handle_upCast(obj),
                 NULL,
                 (UArg)msg);
@@ -393,10 +394,20 @@ SizeT TransportCirc_sharedMemReq(const TransportCirc_Params *params)
     return (memReq);
 }
 
     return (memReq);
 }
 
+/*
+ *  ======== TransportCirc_defaultErrFxn ========
+ */
+Void TransportCirc_defaultErrFxn(IMessageQTransport_Reason reason,
+                                 IMessageQTransport_Handle handle,
+                                Ptr ptr,
+                                UArg arg)
+{
+}
+
 /*
  *  ======== TransportCirc_setErrFxn ========
  */
 Void TransportCirc_setErrFxn(TransportCirc_ErrFxn errFxn)
 {
 /*
  *  ======== TransportCirc_setErrFxn ========
  */
 Void TransportCirc_setErrFxn(TransportCirc_ErrFxn errFxn)
 {
-    /* Ignore the errFxn */
+    TransportCirc_module->errFxn = errFxn;
 }
 }
index 5285a12c11e7fa1b28d773c5e7ec1b269169b6f9..4c71c404a4d0da831e306eff3234686019b1bf36 100644 (file)
@@ -34,6 +34,7 @@
  */
 
 import ti.sysbios.knl.Swi;
  */
 
 import ti.sysbios.knl.Swi;
+import ti.sdo.ipc.interfaces.IMessageQTransport;
 
 import xdc.rov.ViewInfo;
 
 
 import xdc.rov.ViewInfo;
 
@@ -88,7 +89,7 @@ import xdc.rov.ViewInfo;
 @InstanceFinalize
 @InstanceInitError
 
 @InstanceFinalize
 @InstanceInitError
 
-module TransportCirc inherits ti.sdo.ipc.interfaces.IMessageQTransport
+module TransportCirc inherits IMessageQTransport
 {
     /*! @_nodoc */
     metaonly struct BasicView {
 {
     /*! @_nodoc */
     metaonly struct BasicView {
@@ -226,6 +227,20 @@ internal:
      */
     config UInt msgSize;
 
      */
     config UInt msgSize;
 
+    /*!
+     *  ======== defaultErrFxn ========
+     *  This is the default error function.
+     *
+     *  This function is an empty function that does nothing.
+     *
+     *  @param(reason)  reason for error function
+     *  @param(handle)  handle of transport that had error
+     *  @param(ptr)     pointer to the message
+     *  @param(arg)     argument passed to error function
+     */
+    Void defaultErrFxn(IMessageQTransport.Reason reason,
+                       IMessageQTransport.Handle handle, Ptr ptr, UArg arg);
+
     /*!
      *  ======== swiFxn ========
      *  This function takes the messages from the transport ListMP and
     /*!
      *  ======== swiFxn ========
      *  This function takes the messages from the transport ListMP and
@@ -264,4 +279,8 @@ internal:
         UInt16          remoteProcId;   /* dst proc id                      */
         UInt16          priority;       /* priority to register             */
     };
         UInt16          remoteProcId;   /* dst proc id                      */
         UInt16          priority;       /* priority to register             */
     };
+
+    struct Module_State {
+        ErrFxn errFxn;                  /* error function */
+    };
 }
 }
index 46a86e65daafca001023d5755fce57f86d327bcd..48b1d9ae5f98cce5baca4690109ecc9d13616f12 100644 (file)
@@ -73,6 +73,13 @@ function module$static$init(mod, params)
                 TransportCirc.numMsgs +
                 " is not a power of 2", TransportCirc);
     }
                 TransportCirc.numMsgs +
                 " is not a power of 2", TransportCirc);
     }
+
+    if (params.errFxn != null) {
+        mod.errFxn = params.errFxn;
+    }
+    else {
+        mod.errFxn = TransportCirc.defaultErrFxn;
+    }
 }
 
 /*
 }
 
 /*