DM8127 Image-tuning tool server thread 源码

来源:互联网 发布:psg1知乎 编辑:程序博客网 时间:2024/06/05 12:08

Image-tuning tool server thread. This thread listens on the TCP port for ITT connection and also coordinates the client side CMD/DATA send & receive.

 

/** ================================================================== *  @file   itt_Capture.h                                                   *                                                                     *  @path    ipnc_mcfw/demos/mcfw_api_demos/itt/                                                  *                                                                     *  @desc   This  File contains.                                       * =================================================================== *  Copyright (c) Texas Instruments Inc 2011, 2012                     *                                                                     *  Use of this software is controlled by the terms and conditions found *  in the license agreement under which this software has been supplied * ===================================================================*//* * Notify from A8 to VPSS M3 */#ifndef _ITT_CAPTURE_H_#define _ITT_CAPTURE_H_#ifdef __cplusplusextern "C" {#endif                                                     /* __cplusplus */#include <osa_thr.h>#define ITT_ERROR(...) \  fprintf(stderr, " ERROR  (%s|%s|%d): ", __FILE__, __func__, __LINE__); \  fprintf(stderr, __VA_ARGS__);#define ITT_STATUS_OK      0                               // /< Status : OK#define ITT_STATUS_EFAIL   -1                              // /< Status :                                                           // Generic error    /* SWOSD Timer Thread priority and stack size */#define ITT_TSK_PRI                                     (7)#define ITT_TSK_STACK_SIZE                      (32)                                                         typedef Void *(*ThrEntryFunc) (Void *);    typedef pthread_t ThrId;    typedef struct _TaskCtx {        ThrId handle;        Int8 exitFlag;    } TaskCtx;    typedef struct {        pthread_t *hndl;        pthread_attr_t *thread_attr;        // OSAL_TaskEntryFunc entryFunc;        unsigned int pri;        unsigned int stackSize;    } OSAL_TaskHandle;    Int32 Itt_thrCreate(TaskCtx * ctx, ThrEntryFunc entryFunc, Uint32 pri,                        Uint32 stackSize);    Int32 Itt_thrDelete(TaskCtx * ctx);    Int32 Itt_TaskCreate();    int Itt_TaskDelete();#ifdef __cplusplus}#endif                                                     /* __cplusplus */#endif                                                     /* _DM81XX_A8_NOTIFY_H_                                                            */

/** ================================================================== *  @file   itt_Capture.c                                                   *                                                                     *  @path    ipnc_mcfw/demos/mcfw_api_demos/itt/                                                  *                                                                     *  @desc   This  File contains.                                       * =================================================================== *  Copyright (c) Texas Instruments Inc 2011, 2012                     *                                                                     *  Use of this software is controlled by the terms and conditions found *  in the license agreement under which this software has been supplied * ===================================================================*//* *  Notify from A8 to VIDEO M3 functions */#include <string.h>#include <mcfw/interfaces/ti_media_std.h>#include <itt_Capture.h>#include <ti/syslink/Std.h>#include <ti/ipc/MultiProc.h>#include <ti/syslink/IpcHost.h>#include <ti/syslink/ProcMgr.h>#include <ti/ipc/MessageQ.h>#include <ti/ipc/SharedRegion.h>#include <ti/syslink/SysLink.h>#include <unistd.h>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h>static TaskCtx ittThrHandle;#define ITT_ASSERT( COND )                                 // COND#define ITT_PRINTF( MSG )     OSA_printf(MSG)#define ITT_SERVER_MSGQ_NAME      "ITT_SERVERQ"#define DCC_SERVER_MSGQ_NAME      "DCC_SERVERQ"/** *  Handle to the ITT Server Message Queue */MessageQ_Handle hIttMsgQ = NULL;typedef struct ittServer_Msg {    MessageQ_MsgHeader header;    Int32 response;    Int32 arg1;    Int32 arg2;} ittServer_Msg;#define CMD_CKH_CONNECTION   (1)#define CMD_SEND_DCC         (2)#define CMD_MEM_READ_WORD    (3)#define CMD_SAVE_RAW         (4)#define CMD_REGS_READ        (5)#define CMD_MEM_WRITE_WORD   (6)#define CMD_RECV_DCC         (7)#define CMD_CAMERA_CNTL      (8)#define CMD_SAVE_YUV         (9)#define CMD_MEM_READ_BUFF    (10)#define CMD_SENSOR_REGS_READ (11)#define CMD_SENSOR_REG_WRITE (12)#define ITT_SHAREDREGION_ID (0)/** ******************************************************************************* *  @func       RfileServer_cleanup *  @brief      This function uninitializes the Remote File Server * *  @retval Rfile_SUCCESS   Remote File Server uninitialization successful *  @retval Rfile_FAIL      Error in uninitializing Remote File Server * *  @remarks    After calling RfileServer_cleanup, no further Remote File *  operations should be attempted. * ******************************************************************************* *//* =================================================================== *  @func     ittServerMsgQ_cleanup                                                *                                                                     *  @desc     Function does the following                              *                                                                     *  @modif    This function modifies the following structures          *                                                                     *  @inputs   This function takes the following inputs                 *            <argument name>                                          *            Description of usage                                     *            <argument name>                                          *            Description of usage                                     *                                                                     *  @outputs  <argument name>                                          *            Description of usage                                     *                                                                     *  @return   Return value of this function if any                     *  ================================================================== */                                                                   Int32 ittServerMsgQ_cleanup(){    MessageQ_delete(&hIttMsgQ);    return (1);}#define ITT_SERVER_DEFAULT_PORT    (5000)static int serverPort;static int serverSocketId;/* =================================================================== *  @func     ittServer_CreateSocket                                                *                                                                     *  @desc     Function does the following                              *                                                                     *  @modif    This function modifies the following structures          *                                                                     *  @inputs   This function takes the following inputs                 *            <argument name>                                          *            Description of usage                                     *            <argument name>                                          *            Description of usage                                     *                                                                     *  @outputs  <argument name>                                          *            Description of usage                                     *                                                                     *  @return   Return value of this function if any                     *  ================================================================== */                                                                   int ittServer_CreateSocket(unsigned int port){    struct sockaddr_in server;    int status;    serverPort = port;    serverSocketId = socket(AF_INET, SOCK_STREAM, 0);    ITT_ASSERT(serverSocketId < 0) server.sin_family = AF_INET;    server.sin_addr.s_addr = INADDR_ANY;    server.sin_port = htons(port);    memset((void *) &(server.sin_zero), 0, 8);    status = bind(serverSocketId, (struct sockaddr *) &server, sizeof(server));    ITT_ASSERT(status == -1);    status = listen(serverSocketId, 5);    ITT_ASSERT(status < 0);    return (0);}/* =================================================================== *  @func     ittServer_SendData                                                *                                                                     *  @desc     Function does the following                              *                                                                     *  @modif    This function modifies the following structures          *                                                                     *  @inputs   This function takes the following inputs                 *            <argument name>                                          *            Description of usage                                     *            <argument name>                                          *            Description of usage                                     *                                                                     *  @outputs  <argument name>                                          *            Description of usage                                     *                                                                     *  @return   Return value of this function if any                     *  ================================================================== */                                                                   int ittServer_SendData(int SocketId, unsigned char *dataBuf,                       unsigned int dataSize){    int actDataSize = 0;    while (dataSize > 0)    {        actDataSize = send(SocketId, dataBuf, dataSize, 0);        OSA_printf(" ITT_Server: Send Data %d (%d)\n", actDataSize, dataSize);        if (actDataSize <= 0)            break;        dataBuf += actDataSize;        dataSize -= actDataSize;    }    if (dataSize > 0)    {        ITT_ERROR(" ITT_Server: Failed to send the data\n");        return (-1);    }    return (0);}/* =================================================================== *  @func     ittServer_RecvData                                                *                                                                     *  @desc     Function does the following                              *                                                                     *  @modif    This function modifies the following structures          *                                                                     *  @inputs   This function takes the following inputs                 *            <argument name>                                          *            Description of usage                                     *            <argument name>                                          *            Description of usage                                     *                                                                     *  @outputs  <argument name>                                          *            Description of usage                                     *                                                                     *  @return   Return value of this function if any                     *  ================================================================== */                                                                   int ittServer_RecvData(int SocketId, unsigned char *dataBuf,                       unsigned int dataSize){    int actDataSize = 0;    while (dataSize > 0)    {        actDataSize = recv(SocketId, dataBuf, dataSize, 0);        OSA_printf(" ITT_Server: Recived Data %d (%d)\n", actDataSize, dataSize);        if (actDataSize <= 0)            break;        dataBuf += actDataSize;        dataSize -= actDataSize;    }    if (dataSize > 0)    {        ITT_ERROR(" ITT_Server: Failed to recicve the data\n");        return (-1);    }    return (0);}/* =================================================================== *  @func     ittServer_run                                                *                                                                     *  @desc     Function does the following                              *                                                                     *  @modif    This function modifies the following structures          *                                                                     *  @inputs   This function takes the following inputs                 *            <argument name>                                          *            Description of usage                                     *            <argument name>                                          *            Description of usage                                     *                                                                     *  @outputs  <argument name>                                          *            Description of usage                                     *                                                                     *  @return   Return value of this function if any                     *  ================================================================== */                                                                   MessageQ_QueueId remoteQ; Int32 ittServer_run(){    Int32 status = 0;    Bits16 cmd = 1;    ittServer_Msg *ittMsg = NULL;    remoteQ = 0;    MessageQ_Msg msg = NULL;    Ptr srHeap = NULL;    MessageQ_Params msgQParams;    //int cmdCounter = 1;    unsigned int sin_size;    struct sockaddr_in client;    int connectedSocketId;    int dataSize;    // unsigned char dataBuf[100*1024];    Int32 recvData[5];    Int32 payLoadSize;    Bits32 srPtr = 0;    Ptr buf = NULL;    OSA_printf("\n ITT ittServer_run\n");    /*--------------------------------------------------------------------------    * Get the heap associated with the Shared Region for Message Queue. This    * heap is used to create Message Queues, allocate Messages subsequently.    *------------------------------------------------------------------------*/    srHeap = SharedRegion_getHeap(ITT_SHAREDREGION_ID);    ITT_ASSERT(srHeap != NULL);    /*--------------------------------------------------------------------------    * Create a message queue for Remote File Server. The client modules send    * their requests to this message queue    *------------------------------------------------------------------------*/    MessageQ_Params_init(&msgQParams);    hIttMsgQ = MessageQ_create(ITT_SERVER_MSGQ_NAME, &msgQParams);    ITT_ASSERT(hIttMsgQ != NULL);    if(hIttMsgQ == NULL){goto EXIT;}    msg = MessageQ_alloc(ITT_SHAREDREGION_ID, sizeof(ittServer_Msg));    if (msg == NULL)    {        OSA_printf("ERROR: Can't allocate message for [%s]\n",               ITT_SERVER_MSGQ_NAME);        MessageQ_delete(&hIttMsgQ);        return (0);    }    ittMsg = (ittServer_Msg *) msg;    OSA_printf("ITT Server Message initialization successful\n");    do    {        status = MessageQ_open(DCC_SERVER_MSGQ_NAME, &remoteQ);    } while (status == MessageQ_E_NOTFOUND);    OSA_printf("DCC server Message ques is open succefully\n");    // while (1)    {        ittMsg->arg1 = 1024 * 1024;        /*--------------------------------------------------------------------------        * Specify the command to be used        *------------------------------------------------------------------------*/        OSA_printf("Setting cmd <%d> in message <%x>\n", cmd, (UInt32)msg);        MessageQ_setMsgId(msg, cmd);/*--------------------------------------------------------------------------        * Specify the MessageQ owned by this Task as the reply queue. The Remote        * File Server will reply to the queue embedded in this message        *------------------------------------------------------------------------*/        MessageQ_setReplyQueue(hIttMsgQ, msg);        /*--------------------------------------------------------------------------        * Send the command to the Remote File Server        *------------------------------------------------------------------------*/        OSA_printf("Posting message <%x> in QId <%x> \n", (UInt32)msg, (UInt32)remoteQ);        status = MessageQ_put(remoteQ, msg);        ITT_ASSERT(status == MessageQ_S_SUCCESS);        /*--------------------------------------------------------------------------        * Wait for a response from the Remote File Server        *------------------------------------------------------------------------*/        status = MessageQ_get(hIttMsgQ, &msg, MessageQ_FOREVER);        ITT_ASSERT(status == MessageQ_S_SUCCESS);if(msg == NULL){    goto EXIT;}        OSA_printf("Response from M3 is : %d\n", ittMsg->response);        srPtr = (Bits32) ittMsg->arg1;        /*--------------------------------------------------------------------------         * Check if shared region pointer is valid         *------------------------------------------------------------------------*/        if (srPtr == 0)        {            OSA_printf("Invalid sr Pointer \n");            goto EXIT;        }        /*--------------------------------------------------------------------------         * Check if SR pointer can be translated to a valid local pointer         *------------------------------------------------------------------------*/        else if ((buf = SharedRegion_getPtr(srPtr)) == NULL)        {            OSA_printf("Invalid sr translation \n");            goto EXIT;        }    }#if 1    /* send the default dcc data if exists to M3 */    {        FILE *fp;        int lSize, result;        fp = fopen("/opt/ipnc/dcc/dcc_default.bin", "rb");        if (fp == NULL)        {            OSA_printf                ("Default dcc profile does not exists. Using system defaults ... \n");        }        else                                               /* Default profile                                                            * exists */        {            // obtain file size:            fseek(fp, 0, SEEK_END);            lSize = ftell(fp);            rewind(fp);            result = fread(buf, 1, lSize, fp);            if (result != lSize)            {                OSA_printf("Unable to read complete dcc file ... \n");            }            else            {                /* Send a message to M3 asking to read the dcc data */                cmd = 2;                                   // 2 is for dcc                                                           // TODO nee to                                                           // make it enum                ittMsg->arg1 = lSize;                MessageQ_setMsgId(msg, cmd);                MessageQ_setReplyQueue(hIttMsgQ, msg);                status = MessageQ_put(remoteQ, msg);                ITT_ASSERT(status == MessageQ_S_SUCCESS);                status = MessageQ_get(hIttMsgQ, &msg, MessageQ_FOREVER);                ITT_ASSERT(status == MessageQ_S_SUCCESS);if(msg == NULL){goto EXIT;}                OSA_printf("Response from M3 is : %d\n", ittMsg->response);                OSA_printf("Default parameters were sent sucessfully \n");            }            fclose(fp);        }    }#endif    ittServer_CreateSocket(ITT_SERVER_DEFAULT_PORT);    OSA_printf("Server Socket created with ID <%d> \n", serverSocketId);    while (1)    {        sin_size = sizeof(struct sockaddr_in);        connectedSocketId =            accept(serverSocketId, (struct sockaddr *) &client, &sin_size);        if (connectedSocketId < 0)        {            ITT_ERROR("Illegal client socket ID\n");            goto EXIT;        }        OSA_printf(" ITT Server: Connected to client\n");        while (1)        {            dataSize = 20;            status = ittServer_RecvData(connectedSocketId, (unsigned char *)recvData, dataSize);            if (status == -1)            {                break;            }            // recvData = (Int32 * )buf;            /* Checking connectivity */            if (recvData[0] == CMD_CKH_CONNECTION)            {                OSA_printf("Client checking the connectivity \n");                break;            }            /* dcc data */            else if (recvData[0] == CMD_SEND_DCC)            {                int updateDefault;                cmd = recvData[0];                payLoadSize = recvData[1];                updateDefault = recvData[2];                /* Get the dcc data into buffer */                status =                    ittServer_RecvData(connectedSocketId, buf, payLoadSize);                if (status != -1)                {                    OSA_printf("Server recived <%d> bytes from client \n",                           payLoadSize);                }                if (updateDefault == 1)                {                    FILE *fp = fopen("./dcc/dcc_default.bin", "wb");                    if (fp == NULL)                    {                        OSA_printf                            ("error in opening the default file dcc_default.bin. Unable to update \n");                    }                    else                    {                        fwrite(buf, 1, payLoadSize, fp);                        OSA_printf("default update is sucessful \n");                        fclose(fp);                    }                }                ittMsg->arg1 = payLoadSize;                MessageQ_setMsgId(msg, cmd);                MessageQ_setReplyQueue(hIttMsgQ, msg);                status = MessageQ_put(remoteQ, msg);                ITT_ASSERT(status == MessageQ_S_SUCCESS);                status = MessageQ_get(hIttMsgQ, &msg, MessageQ_FOREVER);                ITT_ASSERT(status == MessageQ_S_SUCCESS);if(msg == NULL){goto EXIT;}                OSA_printf("Response from M3 is : %d\n", ittMsg->response);                recvData[0] = ittMsg->response;                recvData[1] = 0;                recvData[2] = 0;                recvData[3] = 0;                recvData[4] = 0;                status =                    ittServer_SendData(connectedSocketId, (unsigned char *)recvData, dataSize);                break;            }            /* Reg read */            else if (recvData[0] == CMD_MEM_READ_WORD)            {                cmd = recvData[0];                ittMsg->arg1 = recvData[1];                MessageQ_setMsgId(msg, cmd);                MessageQ_setReplyQueue(hIttMsgQ, msg);                status = MessageQ_put(remoteQ, msg);                ITT_ASSERT(status == MessageQ_S_SUCCESS);                status = MessageQ_get(hIttMsgQ, &msg, MessageQ_FOREVER);                ITT_ASSERT(status == MessageQ_S_SUCCESS);if(msg == NULL){goto EXIT;}                OSA_printf("Response from M3 is : %d\n", ittMsg->response);                recvData[0] = ittMsg->response;                recvData[1] = ittMsg->arg1;                recvData[2] = 0;                recvData[3] = 0;                recvData[4] = 0;                status =                    ittServer_SendData(connectedSocketId, (unsigned char *)recvData, dataSize);                break;            }            /* Request for RAW data */            else if (recvData[0] == CMD_SAVE_RAW)            {                //int i;                //int *buf_ptr = (int *) buf;                cmd = recvData[0];                MessageQ_setMsgId(msg, cmd);                MessageQ_setReplyQueue(hIttMsgQ, msg);                status = MessageQ_put(remoteQ, msg);                ITT_ASSERT(status == MessageQ_S_SUCCESS);                do                {                    status = MessageQ_get(hIttMsgQ, &msg, MessageQ_FOREVER);                    OSA_printf("Got a new message \n");                    ITT_ASSERT(status == MessageQ_S_SUCCESS);if(msg == NULL){goto EXIT;}                    recvData[0] = ittMsg->response;                    recvData[1] = ittMsg->arg1;                    recvData[2] = 0;                    recvData[3] = 0;                    recvData[4] = 0;                    if (ittMsg->arg1 != -1)                    {                        OSA_printf("Response from M3 is : %d\n", ittMsg->response);                        OSA_printf("Data to transfer = %d\n", ittMsg->arg1);                        status =                            ittServer_SendData(connectedSocketId, (unsigned char *)recvData,                                               dataSize);                        status =                            ittServer_SendData(connectedSocketId, buf,                                               ittMsg->arg1);                        /* { int i; for (i = 0; i < 10; i++) { OSA_printf("%x",                         * ((int*)buf)[i]); } } */                        // Put                        status = MessageQ_put(remoteQ, msg);                        ITT_ASSERT(status == MessageQ_S_SUCCESS);                    }                    else                    {                        break;                    }                } while (1);                recvData[1] = -1;                status =                    ittServer_SendData(connectedSocketId, (unsigned char *)recvData, dataSize);                break;            }            else if (recvData[0] == CMD_REGS_READ)            {                //int i;                //int *buf_ptr = (int *) buf;                cmd = recvData[0];                ittMsg->arg1 = recvData[1];                ittMsg->arg2 = recvData[2];                MessageQ_setMsgId(msg, cmd);                MessageQ_setReplyQueue(hIttMsgQ, msg);                status = MessageQ_put(remoteQ, msg);                ITT_ASSERT(status == MessageQ_S_SUCCESS);                status = MessageQ_get(hIttMsgQ, &msg, MessageQ_FOREVER);                ITT_ASSERT(status == MessageQ_S_SUCCESS);if(msg == NULL){goto EXIT;}                OSA_printf("Response from M3 is : %d\n", ittMsg->response);                if (ittMsg->arg1 > 0)                {                    recvData[0] = ittMsg->response;                    recvData[1] = ittMsg->arg1;                    recvData[2] = ittMsg->arg2;                    recvData[3] = 0;                    recvData[4] = 0;                    OSA_printf("Data to transfer = %d\n", ittMsg->arg1);                    status =                        ittServer_SendData(connectedSocketId, (unsigned char *)recvData,                                           dataSize);                    status =                        ittServer_SendData(connectedSocketId, buf,                                           ittMsg->arg1);                }                break;            }            else if ((recvData[0] == CMD_MEM_READ_BUFF) ||                     (recvData[0] == CMD_SENSOR_REGS_READ))            {                //int i;                //int *buf_ptr = (int *) buf;                cmd = recvData[0];                ittMsg->arg1 = recvData[1];                ittMsg->arg2 = recvData[2];                MessageQ_setMsgId(msg, cmd);                MessageQ_setReplyQueue(hIttMsgQ, msg);                status = MessageQ_put(remoteQ, msg);                ITT_ASSERT(status == MessageQ_S_SUCCESS);                status = MessageQ_get(hIttMsgQ, &msg, MessageQ_FOREVER);                ITT_ASSERT(status == MessageQ_S_SUCCESS);if(msg == NULL){goto EXIT;}                OSA_printf("Response from M3 is : %d\n", ittMsg->response);                if (ittMsg->arg1 > 0)                {                    recvData[0] = ittMsg->response;                    recvData[1] = ittMsg->arg1;                    recvData[2] = ittMsg->arg2;                    recvData[3] = 0;                    recvData[4] = 0;                    OSA_printf("Data to transfer = %d\n", ittMsg->arg1);                    status =                        ittServer_SendData(connectedSocketId, (unsigned char *)recvData,                                           dataSize);                    status =                        ittServer_SendData(connectedSocketId, buf,                                           ittMsg->arg1);                }                break;            }                                              /* Reg Write */            else if ((recvData[0] == CMD_MEM_WRITE_WORD) ||                     (recvData[0] == CMD_SENSOR_REG_WRITE))            {                cmd = recvData[0];                ittMsg->arg1 = recvData[1];                ittMsg->arg2 = recvData[2];                MessageQ_setMsgId(msg, cmd);                MessageQ_setReplyQueue(hIttMsgQ, msg);                status = MessageQ_put(remoteQ, msg);                ITT_ASSERT(status == MessageQ_S_SUCCESS);                status = MessageQ_get(hIttMsgQ, &msg, MessageQ_FOREVER);                ITT_ASSERT(status == MessageQ_S_SUCCESS);if(msg == NULL){goto EXIT;}                OSA_printf("Response from M3 is : %d\n", ittMsg->response);                recvData[0] = ittMsg->response;                recvData[1] = 0;                recvData[2] = 0;                recvData[3] = 0;                recvData[4] = 0;                status =                    ittServer_SendData(connectedSocketId, (unsigned char *)recvData, dataSize);                break;            }            else if (recvData[0] == CMD_RECV_DCC)            {                cmd = recvData[0];                MessageQ_setMsgId(msg, cmd);                MessageQ_setReplyQueue(hIttMsgQ, msg);                status = MessageQ_put(remoteQ, msg);                ITT_ASSERT(status == MessageQ_S_SUCCESS);                status = MessageQ_get(hIttMsgQ, &msg, MessageQ_FOREVER);                ITT_ASSERT(status == MessageQ_S_SUCCESS);if(msg == NULL){goto EXIT;}                OSA_printf("Response from M3 is : %d\n", ittMsg->response);                recvData[0] = ittMsg->response;                recvData[1] = ittMsg->arg1;                recvData[2] = 0;                recvData[3] = 0;                recvData[4] = 0;                status =                    ittServer_SendData(connectedSocketId, (unsigned char *)recvData, dataSize);                status =                    ittServer_SendData(connectedSocketId, buf, ittMsg->arg1);                break;            }            else if (recvData[0] == CMD_CAMERA_CNTL)            {                cmd = recvData[0];                payLoadSize = recvData[1];                /* Control Parameters into buffer */                status =                    ittServer_RecvData(connectedSocketId, buf, payLoadSize);                if (status != -1)                {                    OSA_printf("Server recived <%d> bytes from client \n",                           payLoadSize);                }                ittMsg->arg1 = payLoadSize;                MessageQ_setMsgId(msg, cmd);                MessageQ_setReplyQueue(hIttMsgQ, msg);                status = MessageQ_put(remoteQ, msg);                ITT_ASSERT(status == MessageQ_S_SUCCESS);                status = MessageQ_get(hIttMsgQ, &msg, MessageQ_FOREVER);                ITT_ASSERT(status == MessageQ_S_SUCCESS);if(msg == NULL){goto EXIT;}                OSA_printf("Response from M3 is : %d\n", ittMsg->response);                recvData[0] = ittMsg->response;                recvData[1] = 0;                recvData[2] = 0;                recvData[3] = 0;                recvData[4] = 0;                status =                    ittServer_SendData(connectedSocketId, (unsigned char *)recvData, dataSize);                break;            }            else if (recvData[0] == CMD_SAVE_YUV)            {                //int i;                //int *buf_ptr = (int *) buf;                cmd = recvData[0];                MessageQ_setMsgId(msg, cmd);                MessageQ_setReplyQueue(hIttMsgQ, msg);                status = MessageQ_put(remoteQ, msg);                ITT_ASSERT(status == MessageQ_S_SUCCESS);                do                {                    status = MessageQ_get(hIttMsgQ, &msg, MessageQ_FOREVER);                    OSA_printf("Got a new message \n");                    ITT_ASSERT(status == MessageQ_S_SUCCESS);if(msg == NULL){goto EXIT;}                    recvData[0] = ittMsg->response;                    recvData[1] = ittMsg->arg1;                    recvData[2] = 0;                    recvData[3] = 0;                    recvData[4] = 0;                    if (ittMsg->arg1 != -1)                    {                        OSA_printf("Response from M3 is : %d\n", ittMsg->response);                        OSA_printf("Data to transfer = %d\n", ittMsg->arg1);                        status =                            ittServer_SendData(connectedSocketId, (unsigned char *)recvData,                                               dataSize);                        status =                            ittServer_SendData(connectedSocketId, buf,                                               ittMsg->arg1);                        status = MessageQ_put(remoteQ, msg);                        ITT_ASSERT(status == MessageQ_S_SUCCESS);                    }                    else                    {                        break;                    }                } while (1);                recvData[1] = -1;                status =                    ittServer_SendData(connectedSocketId, (unsigned char *)recvData, dataSize);                break;            }            else            {                OSA_printf("Un-supported command \n");                break;            }        }        OSA_printf(" ITT Server: Disconnected from client\n");    }    return (1);  EXIT:    ITT_ERROR("ITT server exiting with erro\n");    return (0);}/* =================================================================== *  @func     IttServer_Task                                                *                                                                     *  @desc     Function does the following                              *                                                                     *  @modif    This function modifies the following structures          *                                                                     *  @inputs   This function takes the following inputs                 *            <argument name>                                          *            Description of usage                                     *            <argument name>                                          *            Description of usage                                     *                                                                     *  @outputs  <argument name>                                          *            Description of usage                                     *                                                                     *  @return   Return value of this function if any                     *  ================================================================== */                                                                   void *IttServer_Task(void *taskHndl){    OSA_printf("ITT server task running !!!\n");    ittServer_run();    OSA_printf("ITT server task Exiting \n");    return NULL;}/* =================================================================== *  @func     Itt_TaskCreate                                                *                                                                     *  @desc     Function does the following                              *                                                                     *  @modif    This function modifies the following structures          *                                                                     *  @inputs   This function takes the following inputs                 *            <argument name>                                          *            Description of usage                                     *            <argument name>                                          *            Description of usage                                     *                                                                     *  @outputs  <argument name>                                          *            Description of usage                                     *                                                                     *  @return   Return value of this function if any                     *  ================================================================== */                                                                   Int32 Itt_TaskCreate(){    Int32 status = ITT_STATUS_OK;    status = Itt_thrCreate(&ittThrHandle,                           (ThrEntryFunc) IttServer_Task,                           ITT_TSK_PRI, ITT_TSK_STACK_SIZE);    OSA_printf("\n ITT capture task created\n");    UTILS_assert(status == ITT_STATUS_OK);    return status;}/* Date Time task delete *//* =================================================================== *  @func     Itt_TaskDelete                                                *                                                                     *  @desc     Function does the following                              *                                                                     *  @modif    This function modifies the following structures          *                                                                     *  @inputs   This function takes the following inputs                 *            <argument name>                                          *            Description of usage                                     *            <argument name>                                          *            Description of usage                                     *                                                                     *  @outputs  <argument name>                                          *            Description of usage                                     *                                                                     *  @return   Return value of this function if any                     *  ================================================================== */                                                                   int Itt_TaskDelete(){    Itt_thrDelete(&ittThrHandle);    return 0;}/* =================================================================== *  @func     Itt_thrCreate                                                *                                                                     *  @desc     Function does the following                              *                                                                     *  @modif    This function modifies the following structures          *                                                                     *  @inputs   This function takes the following inputs                 *            <argument name>                                          *            Description of usage                                     *            <argument name>                                          *            Description of usage                                     *                                                                     *  @outputs  <argument name>                                          *            Description of usage                                     *                                                                     *  @return   Return value of this function if any                     *  ================================================================== */                                                                   Int32 Itt_thrCreate(TaskCtx * ctx, ThrEntryFunc entryFunc, Uint32 pri,                    Uint32 stackSize){    Int32 status = ITT_STATUS_OK;    pthread_attr_t thread_attr;    struct sched_param schedprm;    if (ctx == NULL || entryFunc == NULL)    {        ITT_ERROR("Input param error\n");        return ITT_STATUS_EFAIL;    }    // initialize thread attributes structure    status = pthread_attr_init(&thread_attr);    if (status != ITT_STATUS_OK)    {        ITT_ERROR("Itt_thrCreate() - Could not initialize thread attributes\n");        return status;    }    if (stackSize != 0)        pthread_attr_setstacksize(&thread_attr, stackSize);    status |=        pthread_attr_setinheritsched(&thread_attr, PTHREAD_EXPLICIT_SCHED);    status |= pthread_attr_setschedpolicy(&thread_attr, SCHED_FIFO);    if (pri > sched_get_priority_max(SCHED_FIFO))        pri = sched_get_priority_max(SCHED_FIFO);    else if (pri < sched_get_priority_min(SCHED_FIFO))        pri = sched_get_priority_min(SCHED_FIFO);    schedprm.sched_priority = pri;    status |= pthread_attr_setschedparam(&thread_attr, &schedprm);    if (status != ITT_STATUS_OK)    {        ITT_ERROR("Itt_thrCreate() - Could not initialize thread attributes\n");        goto error_exit;    }    ctx->exitFlag = 0;    status = pthread_create(&ctx->handle, &thread_attr, entryFunc, ctx);    if (status != ITT_STATUS_OK)    {        ITT_ERROR("Itt_thrCreate() - Could not create thread [%d]\n", status);    }  error_exit:    pthread_attr_destroy(&thread_attr);    return status;}/* =================================================================== *  @func     Itt_thrDelete                                                *                                                                     *  @desc     Function does the following                              *                                                                     *  @modif    This function modifies the following structures          *                                                                     *  @inputs   This function takes the following inputs                 *            <argument name>                                          *            Description of usage                                     *            <argument name>                                          *            Description of usage                                     *                                                                     *  @outputs  <argument name>                                          *            Description of usage                                     *                                                                     *  @return   Return value of this function if any                     *  ================================================================== */                                                                   Int32 Itt_thrDelete(TaskCtx * ctx){    Int32 status = ITT_STATUS_OK;    void *retVal;    if (NULL == ctx)    {        ITT_ERROR("Itt_thrDelete() - handle is NULL\n");        return ITT_STATUS_EFAIL;    }status = close(serverSocketId);UTILS_assert(status == MessageQ_S_SUCCESS);status = MessageQ_close(&remoteQ);UTILS_assert(status == MessageQ_S_SUCCESS);MessageQ_unblock(hIttMsgQ);status = MessageQ_delete(&hIttMsgQ);UTILS_assert(status == MessageQ_S_SUCCESS);    status |= pthread_cancel(ctx->handle);    ctx->exitFlag = 1;    if (pthread_join(ctx->handle, &retVal))    {        ITT_ERROR("Itt_thrDelete() - handle is NULL\n");    }    return status;}

DM8127下面的例子,使用socket传输数据;
0 0
原创粉丝点击