void RTPSsocketInit(RTPSsocket* socket, microRTPS* mRTPS) { unsigned portBASE_TYPE i; socket->semNewMsg = xSemaphoreCreateCounting(MSG_QUEUE_LENGTH, 0); socket->mRTPS = mRTPS; socket->last_read.msgID=0; socket->last_read.tpbufID=0; socket->startup=1; for(i=0; i<MAX_TOPICS; i++) { socket->subscribedTopics[i].topicID=0; socket->subscribedTopics[i].tpbufID=MAX_TOPICS; } MsgQueueInit(&(socket->msgQueue)); SLE_Init(&(socket->listItem), socket); SLE_Push(&socket->mRTPS->socketList, &socket->listItem); }
/****************************************************************************** RPC IPC Buffer Pool Config Init *******************************************************************************/ RPC_Result_t RPC_IPC_Init(RpcProcessorType_t rpcProcType) { PACKET_InterfaceType_t itype; Int8 index; int ret; #if defined(CNEON_COMMON) && defined(FUSE_APPS_PROCESSOR) /* wait for CP RPC ready - need to find better way */ OSTASK_Sleep(TICKS_ONE_SECOND / 10); #endif /* (CNEON_COMMON) && (FUSE_APPS_PROCESSOR) */ memset(ipcBufList, 0, sizeof(ipcBufList)); for (itype = INTERFACE_START; itype < INTERFACE_TOTAL; itype++) { if (itype >= INTERFACE_CAPI2 && itype < INTERFACE_PACKET) { ipcBufList[itype].max_pkts[0] = CFG_RPC_CMD_MAX_PACKETS; ipcBufList[itype].max_pkts[1] = CFG_RPC_CMD_MAX_PACKETS2; ipcBufList[itype].max_pkts[2] = CFG_RPC_CMD_MAX_PACKETS3; ipcBufList[itype].pkt_size[0] = CFG_RPC_CMD_PKT_SIZE; ipcBufList[itype].pkt_size[1] = CFG_RPC_CMD_PKT_SIZE2; ipcBufList[itype].pkt_size[2] = CFG_RPC_CMD_PKT_SIZE3; ipcBufList[itype].start_threshold = CFG_RPC_CMD_START_THRESHOLD; ipcBufList[itype].end_threshold = CFG_RPC_CMD_END_THRESHOLD; ipcBufList[itype].srcEpId = (rpcProcType == RPC_COMMS) ? IPC_EP_Capi2Cp : IPC_EP_Capi2App; ipcBufList[itype].destEpId = (rpcProcType == RPC_COMMS) ? IPC_EP_Capi2App : IPC_EP_Capi2Cp; } else if (itype == INTERFACE_DRX) { ipcBufList[itype].max_pkts[0] = CFG_RPC_DRX_MAX_PACKETS; ipcBufList[itype].pkt_size[0] = CFG_RPC_DRX_PKT_SIZE; ipcBufList[itype].start_threshold = CFG_RPC_DRX_START_THRESHOLD; ipcBufList[itype].end_threshold = CFG_RPC_DRX_END_THRESHOLD; ipcBufList[itype].srcEpId = (rpcProcType == RPC_COMMS) ? IPC_EP_DrxCP : IPC_EP_DrxAP; ipcBufList[itype].destEpId = (rpcProcType == RPC_COMMS) ? IPC_EP_DrxAP : IPC_EP_DrxCP; } else if (itype == INTERFACE_PACKET) { for (index = 0; index < MAX_CHANNELS; index++) { ipcBufList[itype].pkt_size[(int)index] = CFG_RPC_PKTDATA_PKT_SIZE; ipcBufList[itype].max_pkts[(int)index] = (rpcProcType == RPC_COMMS) ? CFG_RPC_PKTDATA_MAX_NW2TE_PACKETS : CFG_RPC_PKTDATA_MAX_TE2NW_PACKETS; } ipcBufList[itype].start_threshold = CFG_RPC_PKT_START_THRESHOLD; ipcBufList[itype].end_threshold = CFG_RPC_PKT_END_THRESHOLD; ipcBufList[itype].srcEpId = (rpcProcType == RPC_COMMS) ? IPC_EP_PsCpData : IPC_EP_PsAppData; ipcBufList[itype].destEpId = (rpcProcType == RPC_COMMS) ? IPC_EP_PsAppData : IPC_EP_PsCpData; } else if (itype == INTERFACE_USB_EEM) { for (index = 0; index < MAX_CHANNELS; index++) { ipcBufList[itype].pkt_size[(int)index] = CFG_RPC_EEMDATA_PKT_SIZE; ipcBufList[itype].max_pkts[(int)index] = CFG_RPC_EEMDATA_MAX_PACKETS; } ipcBufList[itype].start_threshold = CFG_RPC_EEM_START_THRESHOLD; ipcBufList[itype].end_threshold = CFG_RPC_EEM_END_THRESHOLD; #ifdef IPC_EP_EemAP ipcBufList[itype].srcEpId = (rpcProcType == RPC_COMMS) ? IPC_EP_EemCP : IPC_EP_EemAP; ipcBufList[itype].destEpId = (rpcProcType == RPC_COMMS) ? IPC_EP_EemAP : IPC_EP_EemCP; #endif } else if (itype == INTERFACE_CSD) { for (index = 0; index < MAX_CHANNELS; index++) { ipcBufList[itype].pkt_size[(int)index] = CFG_RPC_CSDDATA_PKT_SIZE; ipcBufList[itype].max_pkts[(int)index] = CFG_RPC_CSDDATA_MAX_PACKETS; } ipcBufList[itype].start_threshold = CFG_RPC_CSD_START_THRESHOLD; ipcBufList[itype].end_threshold = CFG_RPC_CSD_END_THRESHOLD; ipcBufList[itype].srcEpId = (rpcProcType == RPC_COMMS) ? IPC_EP_CsdCpCSDData : IPC_EP_CsdAppCSDData; ipcBufList[itype].destEpId = (rpcProcType == RPC_COMMS) ? IPC_EP_CsdAppCSDData : IPC_EP_CsdCpCSDData; } else if (itype == INTERFACE_LOGGING) { #if !defined(UNDER_CE) && !defined(UNDER_LINUX) /*modify for UDP log */ for (index = 0; index < MAX_CHANNELS; index++) { ipcBufList[itype].pkt_size[index] = CFG_RPC_LOG_PKT_SIZE; ipcBufList[itype].max_pkts[index] = CFG_RPC_LOG_MAX_PACKETS; } ipcBufList[itype].start_threshold = CFG_RPC_LOG_START_THRESHOLD; ipcBufList[itype].end_threshold = CFG_RPC_LOG_END_THRESHOLD; ipcBufList[itype].srcEpId = (rpcProcType == RPC_COMMS) ? IPC_EP_LogCp : IPC_EP_LogApps; ipcBufList[itype].destEpId = (rpcProcType == RPC_COMMS) ? IPC_EP_LogApps : IPC_EP_LogCp; #endif } else if (itype == INTERFACE_SERIAL) { ipcBufList[itype].max_pkts[0] = CFG_RPC_SERIALDATA_MAX_PACKETS; ipcBufList[itype].max_pkts[1] = CFG_RPC_SERIALDATA_MAX_PACKETS2; ipcBufList[itype].pkt_size[0] = CFG_RPC_SERIALDATA_PKT_SIZE; ipcBufList[itype].pkt_size[1] = CFG_RPC_SERIALDATA_PKT_SIZE2; ipcBufList[itype].start_threshold = CFG_RPC_SERIAL_START_THRESHOLD; ipcBufList[itype].end_threshold = CFG_RPC_SERIAL_END_THRESHOLD; ipcBufList[itype].srcEpId = (rpcProcType == RPC_COMMS) ? IPC_EP_SerialCP : IPC_EP_SerialAP; ipcBufList[itype].destEpId = (rpcProcType == RPC_COMMS) ? IPC_EP_SerialAP : IPC_EP_SerialCP; } else xassert(0, itype); } RPC_LOCK_INIT; #ifdef USE_KTHREAD_HANDOVER ret = MsgQueueInit(&rpcMQhandle, rpcKthreadFn, "RpcKThread", 0, NULL, "krpc_wake_lock"); if (ret != 0) { _DBG_(RPC_TRACE("RPC_IPC_Init: MsgQueueInit failed\n")); printk(KERN_CRIT "RPC_IPC_Init: MsgQueueInit fail\n"); return RPC_RESULT_ERROR; } #endif sCPResetting = FALSE; sIsNotifyingCPReset = FALSE; /* register notification handler for silent CP reset */ sIPCResetClientId = IPCAP_RegisterCPResetHandler(RPC_PACKET_RPCNotificationHandler); rpc_wake_lock_init(); recvRpcPkts = 0; freeRpcPkts = 0; return RPC_RESULT_OK; }