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
- DM8127 Image-tuning tool server thread 源码
- TI IPNC Image Tuning Tool 下载 2A算法必备
- tuning+asterisk+server
- Linked server perfmance tuning.
- SQL Server Performance Tuning
- Tuning Mysql Server Parameters
- SQL SERVER TUNING
- Server performance tuning
- WebLogic Server Performance and Tuning
- IBM HTTP Server Performance Tuning
- SQL Server TUNING-from DN
- mySAP Tool Bag for Performance Tuning and Stress Testing
- OBD2 ECU Remap Flash TUNING TOOL EOBD-II Galletto 1250
- Tuning one SQL that is generated by report tool
- MTK Audio Tuning Tool set Normal Recond Volume Invaild
- Thread源码
- dm8127 进展
- DM8127 overview
- 45 EL 表达式语言
- BroadcastReceiver之开机自启动程序
- jstl判断list是否为空
- android linker分析
- linux下简单文本处理
- DM8127 Image-tuning tool server thread 源码
- ASP.NET MVC 入门7:分页
- java 字符串 数组 互转
- MySQL 数据库性能优化之缓存参数优化
- 1443. Printer Queue
- Prime number
- FastCGI
- navigationItem和tableView在UITableViewController里的关系
- 在VS中添加命令方便获取当前程序集全名