RDK Documentation (Open Sourced RDK Components)
mfrSrv.c
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 
22 /**
23 * @defgroup iarmmgrs
24 * @{
25 * @defgroup mfr
26 * @{
27 **/
28 
29 
30 #include <string.h>
31 #include <pthread.h>
32 #include "mfrTypes.h"
33 #include "mfrMgr.h"
34 #include "libIARM.h"
35 #include "libIBus.h"
36 #include "iarmUtil.h"
37 #include "mfrMgrInternal.h"
38 #include <stdio.h>
39 #include <memory.h>
40 #include <dlfcn.h>
41 #include <unistd.h>
42 #include "libIARMCore.h"
43 #include "safec_lib.h"
44 
45 static int m_initialized =0;
46 static pthread_mutex_t mfrLock = PTHREAD_MUTEX_INITIALIZER;
47 
48 static char writeImageCbModule[MAX_BUF] = "";
49 
50 static mfrUpgradeStatus_t lastStatus;
51 
52 
53 #define IARM_Bus_Lock(lock) pthread_mutex_lock(&mfrLock)
54 #define IARM_Bus_Unlock(lock) pthread_mutex_unlock(&mfrLock)
55 #define RDK_MFRCRYPTOLIB_NAME "libmfrcrypto.so"
56 
57 typedef mfrError_t (*mfrCrypto_init_t)( const mfrSerializedData_t *);
58 typedef mfrError_t (*mfrCrypto_Encrypt_t)(const mfrSerializedData_t *, mfrSerializedData_t * );
59 typedef mfrError_t (*mfrCrypto_Decrypt_t)(const mfrSerializedData_t *, mfrSerializedData_t * );
60 typedef mfrError_t (*mfrCrypto_term_t)();
61 
62 typedef mfrError_t (*mfr_init_t)();
63 typedef mfrError_t (*mfrGetSerializedData_t)( mfrSerializedType_t , mfrSerializedData_t *, mfrEncryptFunction_t *);
64 typedef mfrError_t (*mfrSetSerializedData_t)( mfrSerializedType_t , mfrSerializedData_t *, mfrDecryptFunction_t *);
65 typedef mfrError_t (*mfrWriteImage_t)(const char *, const char *, mfrImageType_t , mfrUpgradeStatusNotify_t );
66 typedef mfrError_t (*mfrSetImageWriteProgress_t)(const char *, mfrImageType_t, mfrUpgradeProgress_t );
67 typedef mfrError_t (*mfrGetImageWriteProgress_t)(const char * imageName,mfrImageType_t imageType,mfrUpgradeProgress_t *);
68 typedef mfrError_t (*mfrDeletePDRI_t)(void);
69 typedef mfrError_t (*mfrScrubAllBanks_t)(void);
70 typedef mfrError_t (*mfr_shutdown_t)(void);
71 typedef mfrError_t (*mfrReboot_t)(const char *);
72 typedef mfrError_t (*mfrSetCableCardType_t)(mfrCableCardType_t);
73 typedef mfrError_t (*mfrSetHostFirmwareInfo_t)(const mfrHostFirmwareInfo_t *);
74 typedef mfrError_t (*mfrGetBootImageName_t)(int , char *, int ,mfrImageType_t );
75 typedef mfrError_t (*mfrGetPathConfiguration_t)(mfrConfigPathType_t, char *, int *);
76 typedef mfrError_t (*mfrGetDFAST2Data_t)(mfrDFAST2Params_t *);
77 
78 
79 IARM_Result_t _mfr_init(void *arg);
80 IARM_Result_t _mfr_shutdown(void *arg);
81 IARM_Result_t _mfrGetSerializedData(void *arg);
82 IARM_Result_t _mfrSetSerializedData(void *arg);
83 IARM_Result_t _mfrWriteImage(void *arg);
84 IARM_Result_t _mfrSetImageWriteProgress(void *arg);
85 IARM_Result_t _mfrGetImageWriteProgress(void *arg);
86 IARM_Result_t _mfrDeletePDRI(void *arg);
87 IARM_Result_t _mfrScrubAllBanks(void *arg);
88 IARM_Result_t _mfrReboot(void *arg);
89 IARM_Result_t _mfrSetCableCardType(void *arg);
90 IARM_Result_t _mfrSetHostFirmwareInfo(void *arg);
91 IARM_Result_t _mfrGetBootImageName(void *arg);
92 IARM_Result_t _mfrGetPathConfiguration(void *arg);
93 IARM_Result_t _mfrGetDFAST2Data(void *arg);
94 
95 void *find_func(const char* lib_name, const char *proc_name)
96 {
97  void *ret = NULL;
98  void *dllib = dlopen(lib_name, RTLD_LAZY);
99  if (dllib)
100  {
101  ret = dlsym(dllib, proc_name);
102  if (ret)
103  {
104  printf("%s is defined and loaded\r\n",proc_name);
105  }
106  else
107  {
108  printf("%s is not defined\r\n",proc_name);
109  }
110  dlclose(dllib);
111  }
112  else
113  {
114  printf("Opening library [%s] failed\r\n", lib_name);
115  }
116  return ret;
117 }
118 
119 IARM_Result_t mfrMgr_start( )
120 {
121  IARM_Result_t retCode = IARM_RESULT_INVALID_STATE;
122 #ifndef RDK_MFRLIB_NAME
123  printf("Please define RDK_MFRLIB_NAME\r\n");
124  printf("Exiting %s\n",__func__);
125  return retCode;
126 #else
127 
128  static mfr_init_t func = 0;
129  IARM_Bus_Lock(lock);
130  printf("In %s\n",__func__);
131  if (func == 0)
132  {
133  func = (mfr_init_t) find_func(RDK_MFRLIB_NAME, "mfr_init");
134  }
135  if (func)
136  {
137  printf("Calling mfr_init err %p\r\n", func);
138  // mfrError_t err = func();
139  mfrError_t err = mfr_init();
140 
141  printf("Calling mfr_init returned value %d\r\n", err);
142  if(mfrERR_NONE != err)
143  {
144  printf("Calling mfr_init returned err %d\r\n", err);
145  IARM_Bus_Unlock(lock);
146  return IARM_RESULT_IPCCORE_FAIL;
147  }
148  if(IARM_RESULT_SUCCESS != IARM_Bus_Init(IARM_BUS_MFRLIB_NAME))
149  {
150  printf("Error initializing IARM.. \n");
151  IARM_Bus_Unlock(lock);
152  _mfr_shutdown(NULL);
153  return IARM_RESULT_IPCCORE_FAIL;
154  }
156 
157  IARM_Bus_RegisterCall(IARM_BUS_MFRLIB_API_Init,_mfr_init);
158 
159  retCode = IARM_RESULT_SUCCESS;
160  }
161 
162  IARM_Bus_Unlock(lock);
163 #endif
164  return retCode;
165 }
166 
167 IARM_Result_t _mfr_init(void *arg)
168 {
169  IARM_Result_t retVal = IARM_RESULT_IPCCORE_FAIL;
170  IARM_Bus_Lock(lock);
171  errno_t safec_rc = -1;
172 
173  if ( !m_initialized)
174  {
175 
177  IARM_Bus_RegisterCall(IARM_BUS_MFRLIB_API_SetSerializedData,_mfrSetSerializedData);
178  IARM_Bus_RegisterCall(IARM_BUS_MFRLIB_API_Shutdown,_mfr_shutdown);
182  IARM_Bus_RegisterCall(IARM_BUS_MFRLIB_API_SetImageWriteProgress, _mfrSetImageWriteProgress);
183  IARM_Bus_RegisterCall(IARM_BUS_MFRLIB_API_GetImageWriteProgress, _mfrGetImageWriteProgress);
185  IARM_Bus_RegisterCall(IARM_BUS_MFRLIB_API_Reboot, _mfrReboot);
186  IARM_Bus_RegisterCall(IARM_BUS_MFRLIB_API_SetCableCardType, _mfrSetCableCardType);
187  IARM_Bus_RegisterCall(IARM_BUS_MFRLIB_API_SetHostFirmwareInfo, _mfrSetHostFirmwareInfo);
188  IARM_Bus_RegisterCall(IARM_BUS_MFRLIB_API_GetBootImageName, _mfrGetBootImageName);
189  IARM_Bus_RegisterCall(IARM_BUS_MFRLIB_API_GetPathConfiguration, _mfrGetPathConfiguration);
190  IARM_Bus_RegisterCall(IARM_BUS_MFRLIB_API_GetDFAST2Data, _mfrGetDFAST2Data);
192 
193  {
194  mfrSerializedData_t data;
196 
197 
198  if(IARM_RESULT_SUCCESS == retVal )
199  {
200 
201  mfrCrypto_init_t func = (mfrCrypto_init_t) find_func(RDK_MFRCRYPTOLIB_NAME, "mfrCrypto_init");
202 
203  if(func)
204  {
205  printf("mfrCrypto_init returned ..... - %d\n",retVal);
206 
207  mfrError_t err;
208  retVal = IARM_RESULT_IPCCORE_FAIL;
209  data.buf = (char *)malloc(param.bufLen);
210  safec_rc = memcpy_s(data.buf, param.bufLen, param.buffer, param.bufLen);
211  if(safec_rc != EOK)
212  {
213  ERR_CHK(safec_rc);
214  if (data.buf)
215  free(data.buf);
216  IARM_Bus_Unlock(lock);
217  return IARM_RESULT_INVALID_PARAM;
218  }
219  data.freeBuf = free;
220  err = func(&data);
221  if(err != mfrERR_NONE)
222  {
223  printf("mfrCrypto_init returned failure - %d\n",err);
224  }
225  else
226  {
227  retVal = IARM_RESULT_SUCCESS;
228  }
229  free(data.buf);
230  }
231  else
232  printf("Some issue in finding the function mfrCrypto_init..\n");
233 
234  }
235  printf("_mfr_init sucess ..... - %d\n",retVal);
236 
237  }
238 
239  m_initialized = 1;
240  }
241 
242  IARM_Bus_Unlock(lock);
243  return IARM_RESULT_SUCCESS;
244 }
245 IARM_Result_t _mfrGetSerializedData(void *arg)
246 {
247  IARM_Result_t retCode = IARM_RESULT_INVALID_STATE;
248  errno_t safec_rc = -1;
249  int ind = -1;
250 #ifndef RDK_MFRLIB_NAME
251  printf("Please define RDK_MFRLIB_NAME\r\n");
252  printf("Exiting %s\n",__func__);
253  return retCode;
254 #else
255  static mfrGetSerializedData_t func = 0;
256  static mfrCrypto_Encrypt_t encrypt_func = 0;
257 
258  IARM_Bus_Lock(lock);
259 
260  printf("In %s\n",__func__);
261 
262  if (func == 0)
263  {
264  func = (mfrGetSerializedData_t) find_func(RDK_MFRLIB_NAME, "mfrGetSerializedData");
265  }
266  if (func)
267  {
268  mfrSerializedData_t data;
269  mfrCrypto_Encrypt_t *func_ptr = NULL;
270  mfrError_t err;
272 
273  safec_rc = strcmp_s(param->crypto, strlen(param->crypto), "", &ind);
274  ERR_CHK(safec_rc);
275  if((safec_rc == EOK) && ind))
276  {
277  if(encrypt_func == 0)
278  {
279  encrypt_func = (mfrCrypto_Encrypt_t) find_func(RDK_MFRCRYPTOLIB_NAME, param->crypto);
280  if(!encrypt_func)
281  {
282  printf("Exiting %s\n",__func__);
283  IARM_Bus_Unlock(lock);
284  return IARM_RESULT_INVALID_STATE;
285  }
286  }
287  func_ptr = encrypt_func;
288  }
289  err = func(param->type, &data, func_ptr);
290  if(mfrERR_NONE == err)
291  {
292 
293  int max_len = MAX_SERIALIZED_BUF;
294  max_len = (max_len < data.bufLen)? max_len:data.bufLen;
295  safec_rc = memcpy_s(((char *)param->buffer), sizeof(param->buffer), data.buf, max_len);
296  if(safec_rc != EOK)
297  {
298  ERR_CHK(safec_rc);
299  if (data.freebuf)
300  {
301  data.freebuf(data.buf);
302  }
303  IARM_Bus_Unlock(lock);
304  return IARM_RESULT_INVALID_PARAM;
305  }
306  param->bufLen = max_len;
307 
308  if(data.freeBuf)
309  {
310  data.freeBuf(data.buf);
311  }
312  retCode = IARM_RESULT_SUCCESS;
313  }
314  }
315 
316  IARM_Bus_Unlock(lock);
317 #endif
318  return retCode;
319 
320 }
321 
322 IARM_Result_t _mfrSetSerializedData(void *arg)
323 {
324  IARM_Result_t retCode = IARM_RESULT_INVALID_STATE;
325 #ifndef RDK_MFRLIB_NAME
326  printf("Please define RDK_MFRLIB_NAME\r\n");
327  printf("Exiting %s\n",__func__);
328  return retCode;
329 #else
330  static mfrSetSerializedData_t func = 0;
331  static mfrCrypto_Decrypt_t decrypt_func = 0;
332  errno_t safec_rc = -1;
333  int ind = -1;
334 
335  IARM_Bus_Lock(lock);
336  printf("In %s\n",__func__);
337  if (func == 0)
338  {
339  func = (mfrSetSerializedData_t) find_func(RDK_MFRLIB_NAME, "mfrSetSerializedData");
340  }
341  if (func)
342  {
343  mfrSerializedData_t data;
344  mfrCrypto_Decrypt_t *func_ptr = NULL;
345  mfrError_t err;
347  safec_rc = strcmp_s(param->crypto, strlen(param->crypto), "", &ind);
348  ERR_CHK(safec_rc);
349  if((safec_rc == EOK) && ind)
350  {
351  if(decrypt_func == 0)
352  {
353  decrypt_func = (mfrCrypto_Decrypt_t) find_func(RDK_MFRCRYPTOLIB_NAME, param->crypto);
354  if(!decrypt_func)
355  {
356  printf("Exiting %s\n",__func__);
357  IARM_Bus_Unlock(lock);
358  return IARM_RESULT_INVALID_STATE;
359  }
360  }
361  func_ptr = decrypt_func;
362  }
363 
364  data.buf = (char *) malloc (param->bufLen);
365  data.bufLen = param->bufLen;
366  data.freeBuf = free;
367  safec_rc = memcpy_s(data.buf, param->bufLen, ((char *)param->buffer), param->bufLen);
368  if(safec_rc != EOK)
369  {
370  ERR_CHK(safec_rc);
371  if (data.buf)
372  free(data.buf);
373  IARM_Bus_Unlock(lock);
374  return IARM_RESULT_INVALID_PARAM;
375  }
376  err = func(param->type, &data, func_ptr);
377  if(mfrERR_NONE == err)
378  {
379  retCode = IARM_RESULT_SUCCESS;
380  }
381  }
382  IARM_Bus_Unlock(lock);
383 #endif
384  return retCode;
385 }
386 
387 
388 static void writeImageCb(mfrUpgradeStatus_t status, void *cbData)
389 {
391 
392  param.status = status;
393 
394  LOG("In writeImage callback: error = %d, percentage = %02.02\n",status.error,status.percentage/100,status.percentage%100);
395 
398  (void *) &param, sizeof(param));
399 
400  lastStatus = status;
401 }
402 
403 IARM_Result_t _mfrWriteImage(void *arg)
404 {
405 #ifndef RDK_MFRLIB_NAME
406  printf("Please define RDK_MFRLIB_NAME\r\n");
407  printf("Exiting writeImage_\n");
408  return IARM_RESULT_INVALID_STATE;
409 #else
410  static mfrWriteImage_t func = 0;
411  IARM_Bus_Lock(lock);
412  printf("In writeImage_\n");
413  if (func == 0)
414  {
415  func = (mfrWriteImage_t) find_func(RDK_MFRLIB_NAME, "mfrWriteImage");
416  if (func)
417  {
418  printf("mfrWriteImage is defined and loaded\r\n");
419  }
420  else
421  {
422  printf("mfrWriteImage is not defined\r\n");
423  return IARM_RESULT_INVALID_STATE;
424  }
425  }
426  IARM_Result_t retCode = IARM_RESULT_INVALID_STATE;
427  mfrError_t err = mfrERR_NONE;
428  if (func)
429  {
430 
432  mfrUpgradeStatusNotify_t notifyStruct;
433  notifyStruct.interval = pParam->interval;
434  notifyStruct.cb = writeImageCb;
435  lastStatus.progress = mfrUPGRADE_PROGRESS_NOT_STARTED;
436  err = func(pParam->name, pParam->path, pParam->type, notifyStruct);
437  if(mfrERR_NONE == err)
438  {
439  printf("Calling mfrWriteImage returned err %d\r\n", err);
440  retCode = IARM_RESULT_SUCCESS;
441  /* Poll for upgrade start */
442  while( lastStatus.progress == mfrUPGRADE_PROGRESS_NOT_STARTED )
443  {
444  printf("Waiting for upgrade to start\n");
445  sleep(1);
446  }
447  /* Poll for completion */
448  while( lastStatus.progress == mfrUPGRADE_PROGRESS_STARTED )
449  {
450  printf("Waiting for upgrade to complete\n");
451  sleep(1);
452  }
453  printf("Update process complete..\n");
454  if(lastStatus.progress != mfrUPGRADE_PROGRESS_COMPLETED)
455  {
456  retCode = IARM_RESULT_IPCCORE_FAIL;
457  }
458 
459  }
460  }
461  printf("Exiting writeImage_\n");
462  return retCode;
463 #endif
464 }
465 
466 IARM_Result_t _mfrGetImageWriteProgress(void *arg)
467 {
468 #ifndef RDK_MFRLIB_NAME
469  printf("Please define RDK_MFRLIB_NAME\r\n");
470  printf("Exiting %s\n",__func__);
471  return IARM_RESULT_INVALID_STATE;
472 #else
473  static mfrGetImageWriteProgress_t func = 0;
474  IARM_Bus_Lock(lock);
475  printf("In %s\n",__func__);
476  if (func == 0)
477  {
478  func = (mfrGetImageWriteProgress_t) find_func(RDK_MFRLIB_NAME, "mfrGetImageWriteProgress");
479  if (func)
480  {
481  printf("mfrGetImageWriteProgress is defined and loaded\r\n");
482  }
483  else
484  {
485  printf("mfrGetImageWriteProgress is not defined\r\n");
486  return IARM_RESULT_INVALID_STATE;
487  }
488  }
489  IARM_Result_t retCode = IARM_RESULT_INVALID_STATE;
490  mfrError_t err = mfrERR_NONE;
491  if (func)
492  {
493 
495  err = func(pParam->imageName,pParam->imageType,&(pParam->progress));
496  if(mfrERR_NONE == err)
497  {
498  printf("Calling mfrGetImageWriteProgress returned err %d\r\n", err);
499  retCode = IARM_RESULT_SUCCESS;
500  }
501  }
502  printf("Exiting %s\n",__func__);
503  return retCode;
504 #endif
505 }
506 
507 IARM_Result_t _mfrSetImageWriteProgress(void *arg)
508 {
509 #ifndef RDK_MFRLIB_NAME
510  printf("Please define RDK_MFRLIB_NAME\r\n");
511  printf("Exiting %s\n",__func__);
512  return IARM_RESULT_INVALID_STATE;
513 #else
514  static mfrSetImageWriteProgress_t func = 0;
515  IARM_Bus_Lock(lock);
516  printf("In %s\n",__func__);
517  if (func == 0)
518  {
519  func = (mfrSetImageWriteProgress_t) find_func(RDK_MFRLIB_NAME, "mfrSetImageWriteProgress");
520  if (func)
521  {
522  printf("mfrSetImageWriteProgress is defined and loaded\r\n");
523  }
524  else
525  {
526  printf("mfrSetImageWriteProgress is not defined\r\n");
527  return IARM_RESULT_INVALID_STATE;
528  }
529  }
530  IARM_Result_t retCode = IARM_RESULT_INVALID_STATE;
531  mfrError_t err = mfrERR_NONE;
532  if (func)
533  {
534 
536  err = func(pParam->imageName, pParam->imageType, pParam->progress);
537  if(mfrERR_NONE == err)
538  {
539  printf("Calling mfrSetImageWriteProgress returned err %d\r\n", err);
540  retCode = IARM_RESULT_SUCCESS;
541  }
542  }
543  printf("Exiting %s\n",__func__);
544  return retCode;
545 #endif
546 }
547 IARM_Result_t _mfrDeletePDRI(void *arg)
548 {
549  mfrError_t Err = mfrERR_NONE;
550 #ifndef RDK_MFRLIB_NAME
551  printf("Please define RDK_MFRLIB_NAME\r\n");
552  return IARM_RESULT_INVALID_STATE;
553 #else
554  static mfrDeletePDRI_t func = 0;
555 
556  IARM_Bus_Lock(lock);
557  if (func == 0)
558  {
559  func = (mfrDeletePDRI_t) find_func(RDK_MFRLIB_NAME, "mfrDeletePDRI");
560  if (func)
561  {
562  printf("mfrDeletePDRI(void) is defined and loaded\r\n");
563  }
564  else
565  {
566  printf("mfrDeletePDRI(void) is not defined\r\n");
567  IARM_Bus_Unlock(lock);
568  return IARM_RESULT_INVALID_STATE;
569  }
570  }
571  IARM_Result_t retCode = IARM_RESULT_INVALID_STATE;
572  mfrError_t err = mfrERR_NONE;
573  if (func)
574  {
575  err = func();
576  if(mfrERR_NONE == err)
577  {
578  printf("Calling mfrDeletePDRI returned err %d\r\n", err);
579  IARM_Bus_Unlock(lock);
580  retCode = IARM_RESULT_SUCCESS;
581  }
582  }
583  IARM_Bus_Unlock(lock);
584  return retCode;
585 #endif
586 }
587 
588 IARM_Result_t _mfrScrubAllBanks(void *arg)
589 {
590 #ifndef RDK_MFRLIB_NAME
591  printf("Please define RDK_MFRLIB_NAME\r\n");
592  return IARM_RESULT_INVALID_STATE;
593 #else
594  static mfrScrubAllBanks_t func = 0;
595 
596  IARM_Bus_Lock(lock);
597  if (func == 0)
598  {
599  func = (mfrScrubAllBanks_t) find_func(RDK_MFRLIB_NAME, "mfrScrubAllBanks");
600  if (func)
601  {
602  printf("mfrScrubAllBanks(void) is defined and loaded\r\n");
603  }
604  else
605  {
606  printf("mfrScrubAllBanks(void) is not defined\r\n");
607  IARM_Bus_Unlock(lock);
608  return IARM_RESULT_INVALID_STATE;
609  }
610  }
611  IARM_Result_t retCode = IARM_RESULT_INVALID_STATE;
612  mfrError_t err = mfrERR_NONE;
613  if (func)
614  {
615  err = func();
616  if(mfrERR_NONE == err)
617  {
618  printf("Calling mfrScrubAllBanks returned err %d\r\n", err);
619  IARM_Bus_Unlock(lock);
620  retCode = IARM_RESULT_SUCCESS;
621  }
622  }
623  IARM_Bus_Unlock(lock);
624  return retCode;
625 
626 #endif
627 }
628 
629 IARM_Result_t _mfr_shutdown(void *arg)
630 {
631  IARM_Bus_Lock(lock);
633  IARM_Bus_Term();
634  mfrError_t Err = mfrERR_NONE;
635 #ifndef RDK_MFRLIB_NAME
636  printf("Please define RDK_MFRLIB_NAME\r\n");
637  return IARM_RESULT_INVALID_STATE;
638 #else
639  static mfr_shutdown_t func = 0;
640  IARM_Result_t retCode = IARM_RESULT_INVALID_STATE;
641  IARM_Bus_Lock(lock);
642  if (func == 0)
643  {
644  func = (mfr_shutdown_t) find_func(RDK_MFRLIB_NAME, "mfr_shutdown");
645  if (func)
646  {
647  printf("mfr_shutdown(void) is defined and loaded\r\n");
648  }
649  else
650  {
651  printf("mfr_shutdown(void) is not defined\r\n");
652  IARM_Bus_Unlock(lock);
653  return IARM_RESULT_INVALID_STATE;
654  }
655  }
656 
657  if (func)
658  {
659  mfrError_t err = func();
660  if(mfrERR_NONE == err)
661  {
662  printf("Calling mfr_shutdown returned err %d\r\n", err);
663  IARM_Bus_Unlock(lock);
664  retCode = IARM_RESULT_SUCCESS;
665  }
666  }
667  IARM_Bus_Unlock(lock);
668  return retCode;
669 #endif
670 
671 }
672 
673 
674 IARM_Result_t _mfrReboot(void *arg)
675 {
676 #ifndef RDK_MFRLIB_NAME
677  printf("Please define RDK_MFRLIB_NAME\r\n");
678  return IARM_RESULT_INVALID_STATE;
679 #else
680  static mfrReboot_t func = 0;
681 
682  IARM_Bus_Lock(lock);
683  if (func == 0)
684  {
685  func = (mfrReboot_t) find_func(RDK_MFRLIB_NAME, "mfrReboot");
686  if (func)
687  {
688  printf("mfrReboot (const char*) is defined and loaded\r\n");
689  }
690  else
691  {
692  printf("mfrReboot (const char*) is not defined\r\n");
693  IARM_Bus_Unlock(lock);
694  return IARM_RESULT_INVALID_STATE;
695  }
696  }
697  IARM_Result_t retCode = IARM_RESULT_INVALID_STATE;
698  mfrError_t err = mfrERR_NONE;
699  if (func)
700  {
702 
703  err = func(pParam->imageName);
704  if(mfrERR_NONE == err)
705  {
706  printf("Calling mfrReboot returned err %d\r\n", err);
707  IARM_Bus_Unlock(lock);
708  retCode = IARM_RESULT_SUCCESS;
709  }
710  }
711  IARM_Bus_Unlock(lock);
712  return retCode;
713 
714 #endif
715 }
716 
717 IARM_Result_t _mfrSetCableCardType(void *arg)
718 {
719 #ifndef RDK_MFRLIB_NAME
720  printf("Please define RDK_MFRLIB_NAME\r\n");
721  return IARM_RESULT_INVALID_STATE;
722 #else
723  static mfrSetCableCardType_t func = 0;
724 
725  IARM_Bus_Lock(lock);
726  if (func == 0)
727  {
728  func = (mfrSetCableCardType_t) find_func(RDK_MFRLIB_NAME, "mfrSetCableCardType");
729  if (func)
730  {
731  printf("mfrSetCableCardType is defined and loaded\r\n");
732  }
733  else
734  {
735  printf("mfrSetCableCardType is not defined\r\n");
736  IARM_Bus_Unlock(lock);
737  return IARM_RESULT_INVALID_STATE;
738  }
739  }
740  IARM_Result_t retCode = IARM_RESULT_INVALID_STATE;
741  mfrError_t err = mfrERR_NONE;
742  if (func)
743  {
745 
746  err = func(pParam->type);
747  if(mfrERR_NONE == err)
748  {
749  printf("Calling mfrSetCableCardType returned err %d\r\n", err);
750  IARM_Bus_Unlock(lock);
751  retCode = IARM_RESULT_SUCCESS;
752  }
753  }
754  IARM_Bus_Unlock(lock);
755  return retCode;
756 
757 #endif
758 }
759 
760 IARM_Result_t _mfrSetHostFirmwareInfo(void *arg)
761 {
762 #ifndef RDK_MFRLIB_NAME
763  printf("Please define RDK_MFRLIB_NAME\r\n");
764  return IARM_RESULT_INVALID_STATE;
765 #else
766  static mfrSetHostFirmwareInfo_t func = 0;
767  errno_t safec_rc = -1;
768 
769  IARM_Bus_Lock(lock);
770  if (func == 0)
771  {
772  func = (mfrSetHostFirmwareInfo_t) find_func(RDK_MFRLIB_NAME, "mfrSetHostFirmwareInfo");
773  if (func)
774  {
775  printf("mfrSetHostFirmwareInfo is defined and loaded\r\n");
776  }
777  else
778  {
779  printf("mfrSetHostFirmwareInfo is not defined\r\n");
780  IARM_Bus_Unlock(lock);
781  return IARM_RESULT_INVALID_STATE;
782  }
783  }
784  IARM_Result_t retCode = IARM_RESULT_INVALID_STATE;
785  mfrError_t err = mfrERR_NONE;
786  if (func)
787  {
789  mfrHostFirmwareInfo_t host_firmware_info;
790 
791  host_firmware_info.firmwareDay = pParam->day;
792  host_firmware_info.firmwareMonth = pParam->month;
793  host_firmware_info.firmwareYear = pParam->year;
794  safec_rc = memcpy_s(&(host_firmware_info.firmwareVersion), sizeof(host_firmware_info.firmwareVersion), pParam->version, sizeof(host_firmware_info.firmwareVersion));
795  if(safec_rc != EOK)
796  {
797  ERR_CHK(safec_rc);
798  IARM_Bus_Unlock(lock);
799  return IARM_RESULT_INVALID_PARAM;
800  }
801  err = func(&host_firmware_info);
802  if(mfrERR_NONE == err)
803  {
804  printf("Calling mfrSetHostFirmwareInfo returned err %d\r\n", err);
805  IARM_Bus_Unlock(lock);
806  retCode = IARM_RESULT_SUCCESS;
807  }
808  }
809  IARM_Bus_Unlock(lock);
810  return retCode;
811 
812 #endif
813 }
814 
815 IARM_Result_t _mfrGetBootImageName(void *arg)
816 {
817 #ifndef RDK_MFRLIB_NAME
818  printf("Please define RDK_MFRLIB_NAME\r\n");
819  return IARM_RESULT_INVALID_STATE;
820 #else
821  static mfrGetBootImageName_t func = 0;
822 
823  IARM_Bus_Lock(lock);
824  if (func == 0)
825  {
826  func = (mfrGetBootImageName_t) find_func(RDK_MFRLIB_NAME, "mfrGetBootImageName");
827  if (func)
828  {
829  printf("mfrGetBootImageName is defined and loaded\r\n");
830  }
831  else
832  {
833  printf("mfrGetBootImageName is not defined\r\n");
834  IARM_Bus_Unlock(lock);
835  return IARM_RESULT_INVALID_STATE;
836  }
837  }
838  IARM_Result_t retCode = IARM_RESULT_INVALID_STATE;
839  mfrError_t err = mfrERR_NONE;
840  if (func)
841  {
843 
844  err = func(pParam->bootInstance, pParam->imageName, &(pParam->len), pParam->type);
845  if(mfrERR_NONE == err)
846  {
847  printf("Calling mfrGetBootImageName returned err %d\r\n", err);
848  IARM_Bus_Unlock(lock);
849  retCode = IARM_RESULT_SUCCESS;
850  }
851  }
852  IARM_Bus_Unlock(lock);
853  return retCode;
854 
855 #endif
856 }
857 
858 IARM_Result_t _mfrGetPathConfiguration(void *arg)
859 {
860 #ifndef RDK_MFRLIB_NAME
861  printf("Please define RDK_MFRLIB_NAME\r\n");
862  return IARM_RESULT_INVALID_STATE;
863 #else
864  static mfrGetPathConfiguration_t func = 0;
865  printf("In %s \n",__func__);
866  IARM_Bus_Lock(lock);
867  if (func == 0)
868  {
869  func = (mfrGetPathConfiguration_t) find_func(RDK_MFRLIB_NAME, "mfrGetPathConfiguration");
870  if (func)
871  {
872  printf("mfrGetPathConfiguration is defined and loaded\r\n");
873  }
874  else
875  {
876  printf("mfrGetPathConfiguration is not defined\r\n");
877  IARM_Bus_Unlock(lock);
878  return IARM_RESULT_INVALID_STATE;
879  }
880  }
881  IARM_Result_t retCode = IARM_RESULT_INVALID_STATE;
882  mfrError_t err = mfrERR_NONE;
883  if (func)
884  {
886 
887  err = func(pParam->type, pParam->path, &(pParam->len));
888  if(mfrERR_NONE == err)
889  {
890  printf("Calling mfrGetPathConfiguration returned err %d\r\n", err);
891  IARM_Bus_Unlock(lock);
892  retCode = IARM_RESULT_SUCCESS;
893  }
894  }
895  IARM_Bus_Unlock(lock);
896  return retCode;
897 
898 #endif
899 }
900 
901 IARM_Result_t _mfrGetDFAST2Data(void *arg)
902 {
903 #ifndef RDK_MFRLIB_NAME
904  printf("Please define RDK_MFRLIB_NAME\r\n");
905  return IARM_RESULT_INVALID_STATE;
906 #else
907  static mfrGetDFAST2Data_t func = 0;
908  errno_t safec_rc = -1;
909 
910  IARM_Bus_Lock(lock);
911  if (func == 0)
912  {
913  func = (mfrGetDFAST2Data_t) find_func(RDK_MFRLIB_NAME, "mfrGetDFAST2Data");
914  if (func)
915  {
916  printf("mfrGetDFAST2Data is defined and loaded\r\n");
917  }
918  else
919  {
920  printf("mfrGetDFAST2Data is not defined\r\n");
921  IARM_Bus_Unlock(lock);
922  return IARM_RESULT_INVALID_STATE;
923  }
924  }
925  IARM_Result_t retCode = IARM_RESULT_INVALID_STATE;
926  mfrError_t err = mfrERR_NONE;
927  if (func)
928  {
930  mfrDFAST2Params_t dfast_params;
931 
932  safec_rc = memcpy_s(&dfast_params,sizeof(mfrDFAST2Params_t), pParam,sizeof(mfrDFAST2Params_t));
933  if(safec_rc != EOK)
934  {
935  ERR_CHK(safec_rc);
936  IARM_Bus_Unlock(lock);
937  return IARM_RESULT_INVALID_PARAM;
938  }
939  err = func(&dfast_params);
940  if(mfrERR_NONE == err)
941  {
942  printf("Calling mfrGetDFAST2Data returned err %d\r\n", err);
943  IARM_Bus_Unlock(lock);
944  retCode = IARM_RESULT_SUCCESS;
945  }
946  }
947  IARM_Bus_Unlock(lock);
948  return retCode;
949 
950 #endif
951 }
952 
953 
954 
955 /** @} */
956 /** @} */
_IARM_Bus_MFRLib_SerializedData_Param_t::bufLen
int bufLen
Definition: mfrMgr.h:125
_mfrUpgradeStatus_t
Definition: mfrTypes.h:218
IARM_BUS_MFRLIB_API_ScrubAllBanks
#define IARM_BUS_MFRLIB_API_ScrubAllBanks
Definition: mfrMgr.h:106
IARM_Bus_Term
IARM_Result_t IARM_Bus_Term(void)
This API is used to terminate the IARM-Bus library.
_IARM_Bus_MFRLib_Reboot_Param_t
Definition: mfrMgr.h:148
IARM_BUS_MFRLIB_API_WriteImage
#define IARM_BUS_MFRLIB_API_WriteImage
Definition: mfrMgr.h:102
_IARM_Bus_MFRLib_SerializedData_Param_t::type
mfrSerializedType_t type
Definition: mfrMgr.h:123
_mfrUpgradeStatusNotify_t
Definition: mfrTypes.h:225
IARM_Bus_RegisterEvent
IARM_Result_t IARM_Bus_RegisterEvent(IARM_EventId_t maxEventId)
This API is used to register all the events that are published by the application.
_IARM_Bus_MFRLib_GetDFAST2Data_Param_t
Definition: mfrMgr.h:176
IARM_Bus_RegisterCall
IARM_Result_t IARM_Bus_RegisterCall(const char *methodName, IARM_BusCall_t handler)
This API is used to register an RPC method that can be invoked by other applications.
_IARM_BUS_MfrMgr_StatusUpdate_EventData_t
Definition: mfrMgr.h:193
IARM_Bus_Disconnect
IARM_Result_t IARM_Bus_Disconnect(void)
This API disconnect Application from IARM Bus so the application will not receive any IARM event or R...
IARM_Bus_BroadcastEvent
IARM_Result_t IARM_Bus_BroadcastEvent(const char *ownerName, IARM_EventId_t eventId, void *data, size_t len)
This API is used to publish an Asynchronous event to all IARM client registered for this perticular e...
libIBus.h
RDK IARM-Bus API Declarations.
_IARM_Bus_MFRLib_SetImageWriteProgress_Param_t
Definition: mfrMgr.h:142
IARM_BUS_MFRMGR_EVENT_STATUS_UPDATE
@ IARM_BUS_MFRMGR_EVENT_STATUS_UPDATE
Definition: mfrMgr.h:188
_IARM_BUS_MfrMgr_StatusUpdate_EventData_t::status
mfrUpgradeStatus_t status
Definition: mfrMgr.h:194
_IARM_Bus_MFRLib_WriteImage_Param_t
Definition: mfrMgr.h:129
_IARM_Bus_MFRLib_SetHostFirmwareInfo_Param_t
Definition: mfrMgr.h:156
mfr_init
mfrError_t mfr_init(void)
Initialize the mfr library. This function should be call once before the functions in this API can ...
Definition: mfrCli.c:65
mfrDecryptFunction_t
mfrError_t(* mfrDecryptFunction_t)(const mfrSerializedData_t *pCipherText, mfrSerializedData_t *pClearText)
crypto funcionality. This function should be called to decrypt a block of data that are encrypted by ...
Definition: mfrTypes.h:253
_IARM_Bus_MFRLib_WriteImage_Param_t::interval
int interval
Definition: mfrMgr.h:133
_IARM_Bus_MFRLib_WriteImage_Param_t::path
char path[255]
Definition: mfrMgr.h:131
IARM_BUS_MFRLIB_API_GetSerializedData
#define IARM_BUS_MFRLIB_API_GetSerializedData
Definition: mfrMgr.h:100
_IARM_Bus_MFRLib_GetPathConfiguration_Param_t
Definition: mfrMgr.h:170
IARM_BUS_MFRLIB_NAME
#define IARM_BUS_MFRLIB_NAME
Definition: mfrMgr.h:98
mfrEncryptFunction_t
mfrError_t(* mfrEncryptFunction_t)(const mfrSerializedData_t *pClearText, mfrSerializedData_t *pCipherText)
crypto funcionality. This function should be called to encrypt a block of data
Definition: mfrTypes.h:242
_mfrSerializedData_t
Definition: mfrTypes.h:50
IARM_Bus_Connect
IARM_Result_t IARM_Bus_Connect(void)
This API is used to connect application to the IARM bus daemon. After connected, the application can ...
Definition: iarmMgrMocks.cpp:33
_IARM_Bus_MFRLib_GetImageWriteProgress_Param_t
Definition: mfrMgr.h:136
IARM_BUS_MFRLIB_API_DeletePDRI
#define IARM_BUS_MFRLIB_API_DeletePDRI
Definition: mfrMgr.h:105
_IARM_Bus_MFRLib_GetBootImageName_Param_t
Definition: mfrMgr.h:163
_IARM_Bus_MFRLib_WriteImage_Param_t::name
char name[255]
Definition: mfrMgr.h:130
IARM_Bus_Init
IARM_Result_t IARM_Bus_Init(const char *name)
This API is used to initialize the IARM-Bus library.
Definition: iarmMgrMocks.cpp:38
_mfrHostFrmwareInfo_t
Definition: mfrTypes.h:209
_mfrDFAST2Params_t
Definition: mfrTypes.h:199
_IARM_Bus_MFRLib_SerializedData_Param_t
Definition: mfrMgr.h:122
_IARM_Bus_MFRLib_SetCableCardType_Param_t
Definition: mfrMgr.h:152
_IARM_Bus_MFRLib_WriteImage_Param_t::type
mfrImageType_t type
Definition: mfrMgr.h:132