RDK Documentation (Open Sourced RDK Components)
Device_DeviceInfo_ProcessStatus_Process.cpp
Go to the documentation of this file.
1 /*
2  * If not stated otherwise in this file or this component's Licenses.txt file the
3  * following copyright and licenses apply:
4  *
5  * Copyright 2016 RDK Management
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18 */
19 
20 /**
21  * @file Device_DeviceInfo_ProcessStatus_Process.cpp
22  * @brief This source file contains the APIs for getting process of device processor status information.
23  */
24 
25 
26 /*****************************************************************************
27  * STANDARD INCLUDE FILES
28  *****************************************************************************/
29 
30 
31 
32 /**
33 * @defgroup tr69hostif
34 * @{
35 * @defgroup hostif
36 * @{
37 **/
38 
39 
40 #include<proc/readproc.h>
41 #include<sys/time.h>
42 #include<stdio.h>
43 #include<stdlib.h>
44 #include<string.h>
45 
47 #include "safec_lib.h"
48 
49 GHashTable* hostIf_DeviceProcess::ifHash = NULL;
50 
51 GMutex* hostIf_DeviceProcess::m_mutex = NULL;
52 
53 GMutex* hostIf_DeviceProcess::m_libproc_lock = NULL;
54 
55 /**
56  * @brief Class Constructor of the class hostIf_DeviceProcess.
57  *
58  * It will initialize the device id, process attribute such as id, command, size, priority etc.
59  *
60  * @param[in] _dev_id Device identification Number.
61  */
63 {
64  dev_id = _dev_id;
65  bCalledProcessPid = false;
66  bCalledProcessCommand = false;
67  bCalledProcessSize = false;
68  bCalledProcessPriority = false;
69  bCalledProcessCpuTime = false;
70  bCalledProcessState = false;
71 
72  backupProcessPid = 0;
73  memset(backupProcessCommand,0,_COMMAND_LENGTH);
74  backupProcessSize = 0;
75  backupProcessPriority = 0;
76  backupProcessCpuTime = 0;
77  memset(backupProcessState,0,_STATE_LENGTH);
78  hostIf_DeviceProcess::initProcpsLock();
79 }
80 
81 
82 GMutex* hostIf_DeviceProcess::initProcpsLock()
83 {
84 #if GLIB_VERSION_CUR_STABLE <= GLIB_VERSION_2_32
85  if(!g_thread_supported())
86  {
87  g_thread_init(NULL);
88  }
89 #endif
90  if( NULL == m_libproc_lock )
91  m_libproc_lock = g_mutex_new();
92  return m_libproc_lock;
93 }
94 
95 /**
96  * @brief Class destructor.
97  *
98  * It does the mutex free of 'm_libproc_lock' mutex variable of hostIf_DeviceProcess class.
99  */
101 {
102  if( NULL == m_libproc_lock )
103  g_mutex_free(m_libproc_lock);
104 }
105 
106 hostIf_DeviceProcess* hostIf_DeviceProcess::getInstance(int dev_id)
107 {
108  hostIf_DeviceProcess* pRet = NULL;
109 
110  if(ifHash)
111  {
112  pRet = (hostIf_DeviceProcess *)g_hash_table_lookup(ifHash,(gpointer) dev_id);
113  }
114  else
115  {
116  ifHash = g_hash_table_new(NULL,NULL);
117  }
118 
119  if(!pRet)
120  {
121  try {
122  pRet = new hostIf_DeviceProcess(dev_id);
123  } catch(int e)
124  {
125  RDK_LOG(RDK_LOG_WARN,LOG_TR69HOSTIF,"Caught exception, not able create MoCA Interface instance..\n");
126  }
127  g_hash_table_insert(ifHash, (gpointer)dev_id, pRet);
128  }
129  return pRet;
130 }
131 
132 GList* hostIf_DeviceProcess::getAllInstances()
133 {
134  if(ifHash)
135  return g_hash_table_get_keys(ifHash);
136  return NULL;
137 }
138 
139 void hostIf_DeviceProcess::closeInstance(hostIf_DeviceProcess *pDev)
140 {
141  if(pDev)
142  {
143  g_hash_table_remove(ifHash, (gconstpointer)pDev->dev_id);
144  delete pDev;
145  }
146 }
147 
148 void hostIf_DeviceProcess::closeAllInstances()
149 {
150  if(ifHash)
151  {
152  GList* tmp_list = g_hash_table_get_values (ifHash);
153 
154  while(tmp_list)
155  {
156  hostIf_DeviceProcess* pDev = (hostIf_DeviceProcess *)tmp_list->data;
157  tmp_list = tmp_list->next;
158  closeInstance(pDev);
159  }
160  }
161 }
162 
163 void hostIf_DeviceProcess::getLock()
164 {
165  if(!m_mutex)
166  {
167  m_mutex = g_mutex_new();
168  }
169  g_mutex_lock(m_mutex);
170 }
171 
172 void hostIf_DeviceProcess::releaseLock()
173 {
174  g_mutex_unlock(m_mutex);
175 }
176 
177 
178 static DeviceProcessStatusProcess processStatus = {0,{'\0'},0,0,0,{'\0'}};
179 
180 /** Description: Counts the number of Processes in the system.
181  *
182  * \Return: Count value or '0' if error
183  *
184  */
186 {
187  hostIf_DeviceProcess::initProcpsLock();
188  g_mutex_lock(m_libproc_lock);
189  int iTotalNumOfProcess = 0;
190 
191  PROCTAB *pProcTab = NULL;
192  proc_t *task = NULL;
193 
194 //#ifndef RDK_DEVICE_CISCO_XI4
195 // pProcTab = openproc(PROC_FILLSTAT);
196 //#else
197  pProcTab = openproc(PROC_FILLMEM);
198 //#endif
199 
200  if (pProcTab == NULL)
201  {
202  g_mutex_unlock(m_libproc_lock);
203  return NOK;
204  }
205 
206  while ((task = readproc(pProcTab, NULL)) != NULL)
207  {
208  iTotalNumOfProcess++;
209  free(task);
210  }
211  closeproc(pProcTab);
212 
213  RDK_LOG(RDK_LOG_DEBUG,LOG_TR69HOSTIF,"%s: Current Process Count: [%u]\n", __FUNCTION__, iTotalNumOfProcess);
214 
215  put_int(stMsgData->paramValue,iTotalNumOfProcess);
216  stMsgData->paramtype = hostIf_UnsignedIntType;
217  g_mutex_unlock(m_libproc_lock);
218  return OK;
219 }
220 
221 /**
222  * @brief This is a helper function to fill values for the Process Profile.
223  *
224  * @param[in] iProcInstanceNum Takes the instance number in the process profile table.
225  * @param[in] eProcessMem Takes the Enum value of the member in the process instance to be filled.
226  *
227  * @return The Process Fields.
228  *
229  * @retval OK if is successfully fetch the data.
230  * @retval ERR_INTERNAL_ERROR if not able to fetch.
231  */
232 int getProcessFields(int iProcInstanceNum, EProcessMembers eProcessMem)
233 {
234  PROCTAB *pProcTab = NULL;
235  proc_t procTask;
236  int iProcEntry = 0;
237  errno_t safec_rc = -1;
238 
239  if(NULL == (pProcTab = openproc(PROC_FILLSTAT | PROC_FILLMEM)))
240  {
241  RDK_LOG(RDK_LOG_ERROR,LOG_TR69HOSTIF,"[%s:%s:%d] Failed in openproc(), returned NULL. \n",__FILE__,__FUNCTION__,__LINE__);
242 
243  return NOK;
244  }
245 
246  for (iProcEntry = 0; iProcEntry < iProcInstanceNum; iProcEntry++)
247  {
248  memset(&procTask, 0, sizeof(procTask));
249  //traverse the list and get the pid.
250  if(!pProcTab->finder(pProcTab,&procTask))
251  {
252  RDK_LOG(RDK_LOG_DEBUG,LOG_TR69HOSTIF,"ProcessInstance: %d : No Entry Found In Process Profile Table\n",iProcInstanceNum);
253  memset(&processStatus, 0, sizeof(processStatus));
254  closeproc(pProcTab);
255  return OK;
256  }
257  }
258 
259  // For the given pid get the process info.
260  pProcTab->reader(pProcTab,&procTask);
261 
262  switch(eProcessMem)
263  {
264  case eProcessPid:
265  processStatus.uiPid = (unsigned int)procTask.tid;
266  RDK_LOG(RDK_LOG_DEBUG,LOG_TR69HOSTIF,"ProcessInstance: %d Pid: %d\n",iProcInstanceNum, procTask.tid);
267  break;
268  case eProcessCommand:
269  memset(processStatus.cCommand,'\0',_COMMAND_LENGTH);
270  safec_rc=strcpy_s(processStatus.cCommand, sizeof(processStatus.cCommand) ,procTask.cmd);
271  if(safec_rc!=EOK)
272  {
273  ERR_CHK(safec_rc);
274  }
275  RDK_LOG(RDK_LOG_DEBUG,LOG_TR69HOSTIF,"ProcessInstance: %d Command: %s\n",iProcInstanceNum, procTask.cmd);
276  break;
277  case eProcessState:
278  memset(processStatus.cState,'\0',_STATE_LENGTH);
279  switch(procTask.state)
280  {
281  case 'R':
282  safec_rc=strcpy_s(processStatus.cState, sizeof(processStatus.cState) ,PROCESS_STATE_RUNNING);
283  if(safec_rc!=EOK)
284  {
285  ERR_CHK(safec_rc);
286  }
287  break;
288  case 'S':
289  safec_rc=strcpy_s(processStatus.cState, sizeof(processStatus.cState) ,PROCESS_STATE_SLEEPING);
290  if(safec_rc!=EOK)
291  {
292  ERR_CHK(safec_rc);
293  }
294  break;
295  case 'T':
296  safec_rc=strcpy_s(processStatus.cState, sizeof(processStatus.cState) ,PROCESS_STATE_STOPPED);
297  if(safec_rc!=EOK)
298  {
299  ERR_CHK(safec_rc);
300  }
301  break;
302  case 'Z':
303  safec_rc=strcpy_s(processStatus.cState, sizeof(processStatus.cState) ,PROCESS_STATE_ZOMBIE);
304  if(safec_rc!=EOK)
305  {
306  ERR_CHK(safec_rc);
307  }
308  break;
309  default:
310  break;
311  }
312  RDK_LOG(RDK_LOG_DEBUG,LOG_TR69HOSTIF,"ProcessInstance: %d State: %c\n",iProcInstanceNum, procTask.state);
313  break;
314  case eProcessPriority:
315  processStatus.uiPriority = (unsigned int)procTask.priority;
316  RDK_LOG(RDK_LOG_DEBUG,LOG_TR69HOSTIF,"ProcessInstance: %d Priority: %5ld\n",iProcInstanceNum, procTask.priority);
317  break;
318  case eProcessSize:
319  processStatus.uiSize = (unsigned int)(procTask.size*4);
320  RDK_LOG(RDK_LOG_DEBUG,LOG_TR69HOSTIF,"ProcessInstance: %d Size: %5ld\n",iProcInstanceNum, procTask.size*4);
321  break;
322  case eProcessCpuTime:
323  processStatus.uiCpuTime = (unsigned int)(procTask.utime+procTask.stime);
324  RDK_LOG(RDK_LOG_DEBUG,LOG_TR69HOSTIF,"ProcessInstance: %d CPU Time: %5lld\n",iProcInstanceNum, procTask.utime+procTask.stime);
325  break;
326  default:
327  break;
328  }
329 
330  closeproc(pProcTab);
331 
332  return OK;
333 }
334 
335 /**
336  * Description: Takes in the request and extracts the instance number of the process requested.
337  * @param[in] name ACS request path.
338  * @param[in] enum value Takes the Enum value of the member in the process instance to be filled.
339  * @param[out] value retuns OK/NOK
340  **/
341 static int
342 readProcessFields(const char *name,EProcessMembers eProcessMem)
343 {
344  int iProcessInstance = 0;
345  const char *pSetting;
346  if(!matchComponent(name,"Device.DeviceInfo.ProcessStatus.Process",&pSetting,iProcessInstance))
347  {
348  return NOK;
349  }
350  if(OK != getProcessFields(iProcessInstance,eProcessMem))
351  {
352  return NOK;
353  }
354 
355  return OK;
356 }
357 
358 
359 /****************************************************************************************************************************************************/
360 // Device_DeviceInfo_ProcessStatus_Process. Profile. Getters:
361 /****************************************************************************************************************************************************/
362 
363 /**
364  * @brief This function provides the Process Identifier.
365  *
366  * @param[out] stMsgData TR-069 Host interface message request.
367  * @param[in] pChanged Status of the operation.
368  *
369  * @return Returns the status of the operation.
370  *
371  * @retval OK if is successfully fetch the data from the device.
372  * @retval ERR_INTERNAL_ERROR if not able to fetch the data.
373  * @ingroup TR69_HOSTIF_DEVICE_STATUS_PROCESS_API
374  */
376 {
377  g_mutex_lock(m_libproc_lock);
378  if(OK != readProcessFields(stMsgData->paramName,eProcessPid))
379  {
380  g_mutex_unlock(m_libproc_lock);
381  return NOK;
382  }
383  if(bCalledProcessPid && pChanged && (backupProcessPid != processStatus.uiPid))
384  {
385  *pChanged = true;
386  }
387  bCalledProcessPid = true;
388  backupProcessPid = processStatus.uiPid;
389 
390  put_int(stMsgData->paramValue,processStatus.uiPid);
391  stMsgData->paramtype = hostIf_UnsignedIntType;
392  g_mutex_unlock(m_libproc_lock);
393  return OK;
394 }
395 
396 /**
397  * @brief This function provides The name of the command that has caused the process to exist.
398  *
399  * @param[out] stMsgData TR-069 Host interface message request.
400  * @param[in] pChanged Status of the operation.
401  *
402  * @return Returns the status of the operation.
403  *
404  * @retval OK if is successfully fetch the data from the device.
405  * @retval ERR_INTERNAL_ERROR if not able to fetch the data.
406  * @ingroup TR69_HOSTIF_DEVICE_STATUS_PROCESS_API
407  */
409 {
410  errno_t rc = -1;
411  g_mutex_lock(m_libproc_lock);
412  if(OK != readProcessFields(stMsgData->paramName,eProcessCommand))
413  {
414  g_mutex_unlock(m_libproc_lock);
415  return NOK;
416  }
417  rc=strcpy_s(backupProcessCommand,sizeof(backupProcessCommand),processStatus.cCommand);
418  if(rc!=EOK)
419  {
420  ERR_CHK(rc);
421  }
422 
423  if(bCalledProcessCommand && pChanged && (!rc))
424  {
425  *pChanged = true;
426  }
427  bCalledProcessCommand = true;
428  rc=strcpy_s(backupProcessCommand,sizeof(backupProcessCommand),processStatus.cCommand);
429  if(rc!=EOK)
430  {
431  ERR_CHK(rc);
432  }
433 
434  rc=strcpy_s(stMsgData->paramValue,sizeof(stMsgData->paramValue),processStatus.cCommand);
435  if(rc!=EOK)
436  {
437  ERR_CHK(rc);
438  }
439 
440  g_mutex_unlock(m_libproc_lock);
441  return OK;
442 }
443 
444 /**
445  * @brief This function provides The Size in Kilo bytes of the memory occupied by process.
446  *
447  * @param[out] stMsgData TR-069 Host interface message request.
448  * @param[in] pChanged Status of the operation.
449  *
450  * @return Returns the status of the operation.
451  *
452  * @retval OK if is successfully fetch the data from the device.
453  * @retval ERR_INTERNAL_ERROR if not able to fetch the data.
454  * @ingroup TR69_HOSTIF_DEVICE_STATUS_PROCESS_API
455  */
457 {
458  g_mutex_lock(m_libproc_lock);
459  if(OK != readProcessFields(stMsgData->paramName,eProcessSize))
460  {
461  g_mutex_unlock(m_libproc_lock);
462  return NOK;
463  }
464  if(bCalledProcessSize && pChanged && (backupProcessSize != processStatus.uiSize))
465  {
466  *pChanged = true;
467  }
468  bCalledProcessSize = true;
469  backupProcessSize = processStatus.uiSize;
470 
471  put_int(stMsgData->paramValue,processStatus.uiSize);
472  stMsgData->paramtype = hostIf_UnsignedIntType;
473  g_mutex_unlock(m_libproc_lock);
474  return OK;
475 }
476 
477 /**
478  * @brief This function provides The priority of the process.
479  *
480  * @param[out] stMsgData TR-069 Host interface message request.
481  * @param[in] pChanged Status of the operation.
482  *
483  * @return Returns the status of the operation.
484  *
485  * @retval OK if is successfully fetch the data from the device.
486  * @retval ERR_INTERNAL_ERROR if not able to fetch the data.
487  * @ingroup TR69_HOSTIF_DEVICE_STATUS_PROCESS_API
488  */
490 {
491  g_mutex_lock(m_libproc_lock);
492  if(OK != readProcessFields(stMsgData->paramName,eProcessPriority))
493  {
494  g_mutex_unlock(m_libproc_lock);
495  return NOK;
496  }
497  if(bCalledProcessPriority && pChanged && (backupProcessPriority != processStatus.uiPriority))
498  {
499  *pChanged = true;
500  }
501  bCalledProcessPriority = true;
502  backupProcessPriority = processStatus.uiPriority;
503 
504  put_int(stMsgData->paramValue,processStatus.uiPriority);
505  stMsgData->paramtype = hostIf_UnsignedIntType;
506  g_mutex_unlock(m_libproc_lock);
507  return OK;
508 }
509 
510 /**
511  * @brief This function provides The amount of time spent by the process taking the cpu.
512  *
513  * @param[out] stMsgData TR-069 Host interface message request.
514  * @param[in] pChanged Status of the operation.
515  *
516  * @return Returns the status of the operation.
517  *
518  * @retval OK if is successfully fetch the data from the device.
519  * @retval ERR_INTERNAL_ERROR if not able to fetch the data.
520  * @ingroup TR69_HOSTIF_DEVICE_STATUS_PROCESS_API
521  */
523 {
524  g_mutex_lock(m_libproc_lock);
525  if(OK != readProcessFields(stMsgData->paramName,eProcessCpuTime))
526  {
527  g_mutex_unlock(m_libproc_lock);
528  return NOK;
529  }
530  if(bCalledProcessCpuTime && pChanged && (backupProcessCpuTime != processStatus.uiCpuTime))
531  {
532  *pChanged = true;
533  }
534  bCalledProcessCpuTime = true;
535  backupProcessCpuTime = processStatus.uiCpuTime;
536 
537  put_int(stMsgData->paramValue,processStatus.uiCpuTime);
538  stMsgData->paramtype = hostIf_UnsignedIntType;
539  g_mutex_unlock(m_libproc_lock);
540  return OK;
541 }
542 
543 /**
544  * @brief This function provides The current state of the process.
545  *
546  * @param[out] stMsgData TR-069 Host interface message request.
547  * @param[in] pChanged Status of the operation.
548  *
549  * @return Returns the status of the operation.
550  *
551  * @retval OK if is successfully fetch the data from the device.
552  * @retval ERR_INTERNAL_ERROR if not able to fetch the data.
553  * @ingroup TR69_HOSTIF_DEVICE_STATUS_PROCESS_API
554  */
556 {
557  g_mutex_lock(m_libproc_lock);
558  errno_t rc = -1;
559  if(OK != readProcessFields(stMsgData->paramName,eProcessState))
560  {
561  g_mutex_unlock(m_libproc_lock);
562  return NOK;
563  }
564  rc=strcpy_s(backupProcessState,sizeof(backupProcessState),processStatus.cState);
565  if(rc!=EOK)
566  {
567  ERR_CHK(rc);
568  }
569 
570  if(bCalledProcessState && pChanged && (!rc))
571  {
572  *pChanged = true;
573  }
574  bCalledProcessState = true;
575  rc=strcpy_s(backupProcessState,sizeof(backupProcessState),processStatus.cState);
576  if(rc!=EOK)
577  {
578  ERR_CHK(rc);
579  }
580 
581  rc=strcpy_s(stMsgData->paramValue,sizeof(stMsgData->paramValue),processStatus.cState);
582  if(rc!=EOK)
583  {
584  ERR_CHK(rc);
585  }
586 
587  g_mutex_unlock(m_libproc_lock);
588  return OK;
589 }
590 /* End of doxygen group */
591 /**
592  * @}
593  */
594 
595 /* End of file xxx_api.c. */
596 
597 
598 /** @} */
599 /** @} */
hostIf_DeviceProcess::get_Device_DeviceInfo_ProcessStatus_Process_CPUTime
int get_Device_DeviceInfo_ProcessStatus_Process_CPUTime(HOSTIF_MsgData_t *, bool *pChanged=NULL)
This function provides The amount of time spent by the process taking the cpu.
Definition: Device_DeviceInfo_ProcessStatus_Process.cpp:522
hostIf_DeviceProcess::get_Device_DeviceInfo_ProcessStatus_Process_PID
int get_Device_DeviceInfo_ProcessStatus_Process_PID(HOSTIF_MsgData_t *, bool *pChanged=NULL)
This function provides the Process Identifier.
Definition: Device_DeviceInfo_ProcessStatus_Process.cpp:375
hostIf_DeviceProcess
This class provides the interface for getting device processor information.
Definition: Device_DeviceInfo_ProcessStatus_Process.h:108
getProcessFields
int getProcessFields(int iProcInstanceNum, EProcessMembers eProcessMem)
This is a helper function to fill values for the Process Profile.
Definition: Device_DeviceInfo_ProcessStatus_Process.cpp:232
hostIf_DeviceProcess::~hostIf_DeviceProcess
~hostIf_DeviceProcess()
Class destructor.
Definition: Device_DeviceInfo_ProcessStatus_Process.cpp:100
Device_DeviceInfo_ProcessStatus_Process.h
The header file provides TR069 device processor status process information APIs.
_HostIf_MsgData_t
Definition: hostIf_tr69ReqHandler.h:170
hostIf_DeviceProcess::hostIf_DeviceProcess
hostIf_DeviceProcess(int _dev_id)
Class Constructor of the class hostIf_DeviceProcess.
Definition: Device_DeviceInfo_ProcessStatus_Process.cpp:62
hostIf_DeviceProcess::get_Device_DeviceInfo_ProcessStatus_Process_Priority
int get_Device_DeviceInfo_ProcessStatus_Process_Priority(HOSTIF_MsgData_t *, bool *pChanged=NULL)
This function provides The priority of the process.
Definition: Device_DeviceInfo_ProcessStatus_Process.cpp:489
hostIf_DeviceProcess::getNumOfProcessEntries
static int getNumOfProcessEntries(HOSTIF_MsgData_t *)
Definition: Device_DeviceInfo_ProcessStatus_Process.cpp:185
_HostIf_MsgData_t::paramtype
HostIf_ParamType_t paramtype
Definition: hostIf_tr69ReqHandler.h:177
RDK_LOG
#define RDK_LOG
Definition: rdk_debug.h:258
EProcessMembers
EProcessMembers
These values are the members of the process.
Definition: Device_DeviceInfo_ProcessStatus_Process.h:86
_HostIf_MsgData_t::paramName
char paramName[(4 *1024)]
Definition: hostIf_tr69ReqHandler.h:171
hostIf_DeviceProcess::get_Device_DeviceInfo_ProcessStatus_Process_Size
int get_Device_DeviceInfo_ProcessStatus_Process_Size(HOSTIF_MsgData_t *, bool *pChanged=NULL)
This function provides The Size in Kilo bytes of the memory occupied by process.
Definition: Device_DeviceInfo_ProcessStatus_Process.cpp:456
Device_DeviceInfo_ProcessStatus_Process
These values are the members variables of the DeviceProcessStatusProcess structure.
Definition: Device_DeviceInfo_ProcessStatus_Process.h:73
_HostIf_MsgData_t::paramValue
char paramValue[(4 *1024)]
Definition: hostIf_tr69ReqHandler.h:172
hostIf_DeviceProcess::get_Device_DeviceInfo_ProcessStatus_Process_State
int get_Device_DeviceInfo_ProcessStatus_Process_State(HOSTIF_MsgData_t *, bool *pChanged=NULL)
This function provides The current state of the process.
Definition: Device_DeviceInfo_ProcessStatus_Process.cpp:555
put_int
void put_int(char *ptr, int val)
This function converts the input data to integer type.
Definition: hostIf_utils.cpp:152
readProcessFields
static int readProcessFields(const char *name, EProcessMembers eProcessMem)
Definition: Device_DeviceInfo_ProcessStatus_Process.cpp:342
hostIf_DeviceProcess::get_Device_DeviceInfo_ProcessStatus_Process_Command
int get_Device_DeviceInfo_ProcessStatus_Process_Command(HOSTIF_MsgData_t *, bool *pChanged=NULL)
This function provides The name of the command that has caused the process to exist.
Definition: Device_DeviceInfo_ProcessStatus_Process.cpp:408