]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - keystone-rtos/fvid2.git/blobdiff - src/fvid2_drvMgr.c
PDK-3279: FVID2 Trace should use user defined callback function to print
[keystone-rtos/fvid2.git] / src / fvid2_drvMgr.c
index c6fb7231b6c059ff66c2ff789dddddce59aa8d9f..c709238313b250bc43614af4880a5b9382e7e9d3 100755 (executable)
@@ -42,6 +42,9 @@
 /*                             Include Files                                  */
 /* ========================================================================== */
 
+/* This is needed for vsnprintf */
+#include <stdio.h>
+#include <stdarg.h>
 #include <ti/drv/fvid2/include/fvid2_drvMgr.h>
 
 /* ========================================================================== */
 #define FDM_NUM_STD_STR_ENTRIES         (sizeof (gFdmStdStrTable) / \
                                          sizeof (Fdm_StdString))
 
+#if defined (FVID2_CFG_TRACE_ENABLE)
+#define REMOTE_DEBUG_SERVER_PRINT_BUF_LEN        (uint32_t) (1024U * 2U)
+#endif
+
 /* ========================================================================== */
 /*                         Structure Declarations                             */
 /* ========================================================================== */
@@ -136,6 +143,14 @@ typedef struct
     /**< Semaphore to protect function calls and other memory allocation. */
 } Fdm_Object;
 
+#if defined (FVID2_CFG_TRACE_ENABLE)
+typedef struct
+{
+    uint32_t    coreId;
+    char        printBuf[REMOTE_DEBUG_SERVER_PRINT_BUF_LEN];
+} RemoteDebug_ServerObj;
+#endif
+
 /* ========================================================================== */
 /*                          Function Declarations                             */
 /* ========================================================================== */
@@ -162,6 +177,13 @@ static int32_t fdmFreeChannelObject(Fdm_Channel *channel);
 /*                            Global Variables                                */
 /* ========================================================================== */
 
+#if defined (FVID2_CFG_TRACE_ENABLE)
+static RemoteDebug_ServerObj gRemoteDebug_serverObj = {0};
+#endif
+
+/** \brief FDM init params. */
+static Fvid2_InitPrms   gFdmInitPrms = {NULL};
+
 /** \brief FDM objects. */
 static Fdm_Object        gFdmObj;
 
@@ -447,13 +469,19 @@ static Fdm_StdString     gFdmStdStrTable[] =
  *
  *  \return             Returns 0 on success else returns error value.
  */
-int32_t Fvid2_init(void *args)
+int32_t Fvid2_init(const Fvid2_InitPrms *initPrms)
 {
     uint32_t cnt;
     int32_t  retVal = FVID2_SOK;
     int32_t  initValue;
     SemaphoreP_Params params;
 
+    Fvid2InitPrms_init(&gFdmInitPrms);
+    if (NULL != initPrms)
+    {
+        Fvid2Utils_memcpy(&gFdmInitPrms, initPrms, sizeof (gFdmInitPrms));
+    }
+
     /* Init all global variables to zero */
     Fvid2Utils_memset(&gFdmObj, 0U, sizeof (gFdmObj));
 
@@ -477,7 +505,7 @@ int32_t Fvid2_init(void *args)
     gFdmObj.lockSem = SemaphoreP_create(initValue, &params);
     if (NULL == gFdmObj.lockSem)
     {
-        Fvid2_printf("FVID2 semaphore create failed!!\r\n");
+        GT_0trace(Fvid2Trace, GT_ERR, "FVID2 semaphore create failed!!\r\n");
         retVal = FVID2_EALLOC;
     }
 
@@ -563,7 +591,8 @@ int32_t Fvid2_registerDriver(const Fvid2_DrvOps *drvOps)
 
             if (drvOps->drvId == gFdmObj.fdmDriverObjects[cnt].drvOps->drvId)
             {
-                Fvid2_printf("Driver with same id already registered!!\r\n");
+                GT_0trace(Fvid2Trace, GT_ERR,
+                          "Driver with same id already registered!!\r\n");
                 retVal = FVID2_EDRIVER_INUSE;
                 break;
             }
@@ -581,7 +610,7 @@ int32_t Fvid2_registerDriver(const Fvid2_DrvOps *drvOps)
         }
         else
         {
-            Fvid2_printf("Alloc driver object failed!!\r\n");
+            GT_0trace(Fvid2Trace, GT_ERR, "Alloc driver object failed!!\r\n");
             retVal = FVID2_EALLOC;
         }
     }
@@ -691,7 +720,7 @@ Fvid2_Handle Fvid2_create(uint32_t              drvId,
         }
         else
         {
-            Fvid2_printf("Driver Ops not supported!!\r\n");
+            GT_0trace(Fvid2Trace, GT_ERR, "Driver Ops not supported!!\r\n");
         }
 
         if (NULL != drvHandle)
@@ -711,7 +740,7 @@ Fvid2_Handle Fvid2_create(uint32_t              drvId,
         }
         else
         {
-            Fvid2_printf("Driver create failed!!\r\n");
+            GT_0trace(Fvid2Trace, GT_ERR, "Driver create failed!!\r\n");
 
             /* Free the allocated channel object */
             fdmFreeChannelObject(channel);
@@ -720,7 +749,7 @@ Fvid2_Handle Fvid2_create(uint32_t              drvId,
     }
     else
     {
-        Fvid2_printf("EALLOC: Invalid driver ID!!\r\n");
+        GT_0trace(Fvid2Trace, GT_ERR, "EALLOC: Invalid driver ID!!\r\n");
     }
 
     SemaphoreP_post(gFdmObj.lockSem);
@@ -757,7 +786,7 @@ int32_t Fvid2_delete(Fvid2_Handle handle, void *deleteArgs)
         }
         else
         {
-            Fvid2_printf("Driver Ops not supported!!\r\n");
+            GT_0trace(Fvid2Trace, GT_ERR, "Driver Ops not supported!!\r\n");
         }
 
         channel->drv->numOpens--;
@@ -772,7 +801,7 @@ int32_t Fvid2_delete(Fvid2_Handle handle, void *deleteArgs)
     }
     else
     {
-        Fvid2_printf("EBADARGS: NULL pointer!!\r\n");
+        GT_0trace(Fvid2Trace, GT_ERR, "EBADARGS: NULL pointer!!\r\n");
         retVal = FVID2_EBADARGS;
     }
 
@@ -813,13 +842,13 @@ int32_t Fvid2_control(Fvid2_Handle  handle,
         }
         else
         {
-            Fvid2_printf("Driver Ops not supported!!\r\n");
+            GT_0trace(Fvid2Trace, GT_ERR, "Driver Ops not supported!!\r\n");
             retVal = FVID2_EUNSUPPORTED_OPS;
         }
     }
     else
     {
-        Fvid2_printf("EBADARGS: NULL pointer!!\r\n");
+        GT_0trace(Fvid2Trace, GT_ERR, "EBADARGS: NULL pointer!!\r\n");
         retVal = FVID2_EBADARGS;
     }
 
@@ -857,13 +886,13 @@ int32_t Fvid2_queue(Fvid2_Handle     handle,
         }
         else
         {
-            Fvid2_printf("Driver Ops not supported!!\r\n");
+            GT_0trace(Fvid2Trace, GT_ERR, "Driver Ops not supported!!\r\n");
             retVal = FVID2_EUNSUPPORTED_OPS;
         }
     }
     else
     {
-        Fvid2_printf("EBADARGS: NULL pointer!!\r\n");
+        GT_0trace(Fvid2Trace, GT_ERR, "EBADARGS: NULL pointer!!\r\n");
         retVal = FVID2_EBADARGS;
     }
 
@@ -903,13 +932,13 @@ int32_t Fvid2_dequeue(Fvid2_Handle      handle,
         }
         else
         {
-            Fvid2_printf("Driver Ops not supported!!\r\n");
+            GT_0trace(Fvid2Trace, GT_ERR, "Driver Ops not supported!!\r\n");
             retVal = FVID2_EUNSUPPORTED_OPS;
         }
     }
     else
     {
-        Fvid2_printf("EBADARGS: NULL pointer!!\r\n");
+        GT_0trace(Fvid2Trace, GT_ERR, "EBADARGS: NULL pointer!!\r\n");
         retVal = FVID2_EBADARGS;
     }
 
@@ -946,13 +975,13 @@ int32_t Fvid2_processRequest(Fvid2_Handle     handle,
         }
         else
         {
-            Fvid2_printf("Driver Ops not supported!!\r\n");
+            GT_0trace(Fvid2Trace, GT_ERR, "Driver Ops not supported!!\r\n");
             retVal = FVID2_EUNSUPPORTED_OPS;
         }
     }
     else
     {
-        Fvid2_printf("EBADARGS: NULL pointer!!\r\n");
+        GT_0trace(Fvid2Trace, GT_ERR, "EBADARGS: NULL pointer!!\r\n");
         retVal = FVID2_EBADARGS;
     }
 
@@ -991,13 +1020,13 @@ int32_t Fvid2_getProcessedRequest(Fvid2_Handle     handle,
         }
         else
         {
-            Fvid2_printf("Driver Ops not supported!!\r\n");
+            GT_0trace(Fvid2Trace, GT_ERR, "Driver Ops not supported!!\r\n");
             retVal = FVID2_EUNSUPPORTED_OPS;
         }
     }
     else
     {
-        Fvid2_printf("EBADARGS: NULL pointer!!\r\n");
+        GT_0trace(Fvid2Trace, GT_ERR, "EBADARGS: NULL pointer!!\r\n");
         retVal = FVID2_EBADARGS;
     }
 
@@ -1027,7 +1056,7 @@ int32_t Fvid2_getModeInfo(Fvid2_ModeInfo *modeInfo)
 
         if (NULL == matchedEntry)
         {
-            Fvid2_printf("Unsupported standard!!\r\n");
+            GT_0trace(Fvid2Trace, GT_ERR, "Unsupported standard!!\r\n");
             retVal = FVID2_EINVALID_PARAMS;
         }
         else
@@ -1037,7 +1066,7 @@ int32_t Fvid2_getModeInfo(Fvid2_ModeInfo *modeInfo)
     }
     else
     {
-        Fvid2_printf("EBADARGS: NULL pointer!!\r\n");
+        GT_0trace(Fvid2Trace, GT_ERR, "EBADARGS: NULL pointer!!\r\n");
         retVal = FVID2_EBADARGS;
     }
 
@@ -1120,7 +1149,7 @@ int32_t Fvid2_checkFrameList(const Fvid2_FrameList *frameList,
     /* Check for NULL pointer */
     if (NULL == frameList)
     {
-        Fvid2_printf("EBADARGS: NULL pointer!!\r\n");
+        GT_0trace(Fvid2Trace, GT_ERR, "EBADARGS: NULL pointer!!\r\n");
         retVal = FVID2_EBADARGS;
     }
     else
@@ -1128,21 +1157,22 @@ int32_t Fvid2_checkFrameList(const Fvid2_FrameList *frameList,
         /* Check whether num frames is within range */
         if (frameList->numFrames > maxFrames)
         {
-            Fvid2_printf("Number of frames exceeds max!!\r\n");
+            GT_0trace(Fvid2Trace, GT_ERR, "Number of frames exceeds max!!\r\n");
             retVal = FVID2_EOUT_OF_RANGE;
         }
 
         /* Check whether num frames is within range */
         if (frameList->numFrames > FVID2_MAX_FRAME_PTR)
         {
-            Fvid2_printf("Number of frames exceeds FVID2 max!!\r\n");
+            GT_0trace(Fvid2Trace, GT_ERR,
+                      "Number of frames exceeds FVID2 max!!\r\n");
             retVal = FVID2_EOUT_OF_RANGE;
         }
 
         /* Check whether num frames is zero */
         if (0U == frameList->numFrames)
         {
-            Fvid2_printf("Number of frames is zero!!\r\n");
+            GT_0trace(Fvid2Trace, GT_ERR, "Number of frames is zero!!\r\n");
             retVal = FVID2_EOUT_OF_RANGE;
         }
 
@@ -1154,7 +1184,8 @@ int32_t Fvid2_checkFrameList(const Fvid2_FrameList *frameList,
                 /* Check for NULL pointer */
                 if (NULL == frameList->frames[frmCnt])
                 {
-                    Fvid2_printf("EBADARGS: NULL pointer!!\r\n");
+                    GT_0trace(Fvid2Trace, GT_ERR,
+                              "EBADARGS: NULL pointer!!\r\n");
                     retVal = FVID2_EBADARGS;
                     break;
                 }
@@ -1180,7 +1211,7 @@ int32_t Fvid2_checkDqFrameList(const Fvid2_FrameList *frameList,
     /* Check for NULL pointer */
     if (NULL == frameList)
     {
-        Fvid2_printf("EBADARGS: NULL pointer!!\r\n");
+        GT_0trace(Fvid2Trace, GT_ERR, "EBADARGS: NULL pointer!!\r\n");
         retVal = FVID2_EBADARGS;
     }
     else
@@ -1188,7 +1219,8 @@ int32_t Fvid2_checkDqFrameList(const Fvid2_FrameList *frameList,
         /* Check whether max frames is within range */
         if (maxFrames > FVID2_MAX_FRAME_PTR)
         {
-            Fvid2_printf("Number of frames exceeds FVID2 max!!\r\n");
+            GT_0trace(Fvid2Trace, GT_ERR,
+                      "Number of frames exceeds FVID2 max!!\r\n");
             retVal = FVID2_EOUT_OF_RANGE;
         }
     }
@@ -1349,7 +1381,7 @@ static int32_t fdmFreeDriverObject(const Fvid2_DrvOps *drvOps)
             }
             else
             {
-                Fvid2_printf("Driver in use!!\r\n");
+                GT_0trace(Fvid2Trace, GT_ERR, "Driver in use!!\r\n");
                 retVal = FVID2_EDEVICE_INUSE;
             }
             break;
@@ -1358,7 +1390,7 @@ static int32_t fdmFreeDriverObject(const Fvid2_DrvOps *drvOps)
 
     if (FVID2_EFAIL == retVal)
     {
-        Fvid2_printf("Driver ops not found!!\r\n");
+        GT_0trace(Fvid2Trace, GT_ERR, "Driver ops not found!!\r\n");
     }
 
     return (retVal);
@@ -1407,9 +1439,34 @@ static int32_t fdmFreeChannelObject(Fdm_Channel *channel)
     }
     else
     {
-        Fvid2_printf("Freeing a channel object not in use!!\r\n");
+        GT_0trace(Fvid2Trace, GT_ERR,
+                  "Freeing a channel object not in use!!\r\n");
     }
 
     return (retVal);
 }
 
+void Fvid2_printf(const char *format, ...)
+{
+#if defined (FVID2_CFG_TRACE_ENABLE)
+    va_list     vaArgPtr;
+    uintptr_t   cookie;
+    char       *buf = NULL;
+
+    cookie = HwiP_disable();
+
+    buf = &gRemoteDebug_serverObj.printBuf[0];
+    va_start(vaArgPtr, format);
+    vsnprintf(buf, REMOTE_DEBUG_SERVER_PRINT_BUF_LEN,
+              (const char *) format, vaArgPtr);
+    va_end(vaArgPtr);
+
+    HwiP_restore(cookie);
+
+    if(gFdmInitPrms.printFxn != NULL)
+    {
+        gFdmInitPrms.printFxn(buf);
+    }
+#endif
+    return;
+}