/* * ======== CreateRcmClient ======== */ Int CreateRcmClient(Int testCase) { RcmClient_Params rcmClientParams; Int count = 0; Int status = 0; /* Size (in bytes) of RCM header including the messageQ header */ /* RcmClient_Message member data[1] is the start of the payload */ Osal_printf ("CreateRcmClient: Size of RCM header in bytes = %d \n", RcmClient_getHeaderSize()); /* Rcm client module setup*/ Osal_printf ("CreateRcmClient: RCM Client module setup.\n"); RcmClient_init (); /* Rcm client module params init*/ Osal_printf ("CreateRcmClient: RCM Client module params init.\n"); status = RcmClient_Params_init (&rcmClientParams); if (status < 0) { Osal_printf ("CreateRcmClient: Error in RCM Client instance params " "init \n"); goto exit; } Osal_printf ("CreateRcmClient: RCM Client instance params init " "passed \n"); /* Create an rcm client instance */ Osal_printf ("CreateRcmClient: Creating RcmClient instance \n"); rcmClientParams.callbackNotification = 0; /* disable asynchronous exec */ rcmClientParams.heapId = RCM_MSGQ_HEAPID; while ((rcmClientHandle == NULL) && (count++ < MAX_CREATE_ATTEMPTS)) { status = RcmClient_create (remoteServerName, &rcmClientParams, &rcmClientHandle); if (status < 0) { if (status == RcmClient_E_SERVERNOTFOUND) { Osal_printf ("CreateRcmClient: Unable to open remote" "server %d time \n", count); } else { Osal_printf ("CreateRcmClient: Error in RCM Client " "create \n"); goto exit; } } } if (MAX_CREATE_ATTEMPTS <= count) { Osal_printf ("CreateRcmClient: Timeout... could not connect with" "remote server\n"); } else { Osal_printf ("CreateRcmClient: RCM Client create passed \n"); } exit: Osal_printf ("CreateRcmClient: Leaving CreateRcmClient() \n"); return status; }
static Int dvsdk_grapx_display_rpc_remote_mode_init () { RcmClient_Params rcmClientParams; IArg key; Bool doInit = FALSE; Int status = 0; key = Gate_enterSystem(); if (FALSE == g_RemoteStubContext.bRemoteInitDone) { doInit = TRUE; } Gate_leaveSystem(key); if (TRUE == doInit) { GateThread_Params gtParams; GateThread_Params_init (>Params); g_RemoteStubContext.hGate = GateThread_Handle_upCast(GateThread_create(>Params, NULL)); key = GateH_enter (g_RemoteStubContext.hGate); MessageQ_registerHeap(SharedRegion_getHeap(0),Global_GrpxDssMsgHeapId); RcmClient_Params_init (&rcmClientParams); rcmClientParams.heapId = Global_GrpxDssMsgHeapId; do { status = RcmClient_create(DVSDK_DSS_GRPX_SERVER_NAME, &rcmClientParams, &g_RemoteStubContext.hRcmClient); if (status < 0) { Thread_yield(NULL); } } while (status < 0); if (0 == status) { status = RcmClient_getSymbolIndex (g_RemoteStubContext.hRcmClient, DVSDK_DSS_GRPX_INIT_FXN_NAME, &g_RemoteStubContext.nInitFxnIdx); } if (0 == status) { status = RcmClient_getSymbolIndex (g_RemoteStubContext.hRcmClient, DVSDK_DSS_GRPX_START_FXN_NAME, &g_RemoteStubContext.nStartFxnIdx); } if (0 == status) { status = RcmClient_getSymbolIndex (g_RemoteStubContext.hRcmClient, DVSDK_DSS_GRPX_STOP_FXN_NAME, &g_RemoteStubContext.nStopFxnIdx); } if (0 == status) { status = RcmClient_getSymbolIndex (g_RemoteStubContext.hRcmClient, DVSDK_DSS_GRPX_DEINIT_FXN_NAME, &g_RemoteStubContext.nDeinitFxnIdx); } if (0 == status) { status = RcmClient_getSymbolIndex (g_RemoteStubContext.hRcmClient, DVSDK_DSS_GRPX_DISPLAYTOGGLE_FXN_NAME, &g_RemoteStubContext.nDisplayToggelFxnIdx); } g_RemoteStubContext.bRemoteInitDone = TRUE; GateH_leave(g_RemoteStubContext.hGate, key); } return status; }
Int main(Int argc, Char * argv[]) { pid_t child_pid, child_sid; int status; RcmClient_Config cfgParams; RcmClient_Params rcmParams; char cServerName[] = { "RSrv_Ducati1" }; RcmClient_Handle rcmHndl = NULL; cfgParams.maxNameLen = 20; cfgParams.defaultHeapIdArrayLength = 4; printf("Spawning TILER server daemon...\n"); /* Fork off the parent process */ child_pid = fork(); if (child_pid < 0) { printf("Spawn daemon failed!\n"); exit(EXIT_FAILURE); /* Failure */ } /* If we got a good PID, then we can exit the parent process. */ if (child_pid > 0) { exit(EXIT_SUCCESS); /* Succeess */ } /* Change file mode mask */ umask(0); /* Create a new SID for the child process */ child_sid = setsid(); if (child_sid < 0) exit(EXIT_FAILURE); /* Failure */ /* Change the current working directory */ if ((chdir("/")) < 0) { exit(EXIT_FAILURE); /* Failure */ } status = ipc_setup(); if (status < 0) { printf("\nipc_setup failed\n"); goto leave; } //Create default RCM client. RcmClient_getConfig(&cfgParams); printf("\nPrinting Config Parameters\n"); printf("\nMaxNameLen %d\nHeapIdArrayLength %d\n", cfgParams.maxNameLen, cfgParams.defaultHeapIdArrayLength); printf("\nRPC_InstanceInit: creating rcm instance\n"); RcmClient_Params_init(NULL, &rcmParams); rcmParams.heapId = 1; printf("\n Heap ID configured : %d\n", rcmParams.heapId); printf("\nCalling client setup\n"); status = RcmClient_setup(&cfgParams); printf("\nClient setup done\n"); if (status < 0) { printf("Client exist.Error Code:%d\n", status); goto leave; } while (rcmHndl == NULL) { printf ("\nCalling client create with server name = %s\n", cServerName); status = RcmClient_create(cServerName, &rcmParams, &rcmHndl); printf("\nClient create done\n"); if (status < 0) { printf("\nCannot Establish the connection\n"); goto leave; } else { printf("\nConnected to Server\n"); } } //To ensure that it is always running while (1) { } leave: return 0; }
/* * ======== Hello_exec ======== */ Int Hello_exec(Void) { RcmClient_Params rcmP; RcmClient_Handle rcmH; RcmClient_Message * msg; UInt32 size; Int status; /* must initialize the module before using it */ RcmClient_init(); /* create an rcm client instance */ RcmClient_Params_init(&rcmP); rcmP.heapId = Global_RcmClientHeapId; /* retry in case the slave is still booting */ do { status = RcmClient_create(Global_RcmServerName, &rcmP, &rcmH); } while (status == RcmClient_E_SERVERNOTFOUND); if (status < 0) { Log_error0("Hello_exec: RcmClient create failed"); goto leave; } /* allocate a remote command message */ size = sizeof(RcmClient_Message) + sizeof(UInt32[32]); status = RcmClient_alloc(rcmH, size, &msg); if (status < 0) { msg = NULL; Log_error1("Hello_exec: RcmClient_alloc() returned error %d", (IArg)status); goto leave; } /* fill in the remote command message */ msg->fxnIdx = Global_Hello_idx; msg->data[0] = (UInt32)0xFFFFFFFF; System_sprintf((Char *)(&msg->data[1]), "@@@@"); /* execute the remote command message */ status = RcmClient_exec(rcmH, msg, &msg); if (status < 0) { Log_error1("Hello_exec: RcmClient_exec() returned error %d", (IArg)status); goto leave; } /* unmarshal return value */ System_printf("%s\n", (Char *)(&msg->data[1])); leave: /* return message to the heap */ if (msg != NULL) { RcmClient_free(rcmH, msg); msg = NULL; } /* delete the rcm client instance */ if (rcmH != NULL) { RcmClient_delete(&rcmH); } /* finalize the module to support clean shutdown */ RcmClient_exit(); return(status); }