37 #include "mfrMgrInternal.h"
42 #include "libIARMCore.h"
43 #include "safec_lib.h"
45 static int m_initialized =0;
46 static pthread_mutex_t mfrLock = PTHREAD_MUTEX_INITIALIZER;
48 static char writeImageCbModule[MAX_BUF] =
"";
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"
60 typedef mfrError_t (*mfrCrypto_term_t)();
62 typedef mfrError_t (*mfr_init_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);
74 typedef mfrError_t (*mfrGetBootImageName_t)(int ,
char *, int ,mfrImageType_t );
75 typedef mfrError_t (*mfrGetPathConfiguration_t)(mfrConfigPathType_t,
char *,
int *);
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);
95 void *find_func(
const char* lib_name,
const char *proc_name)
98 void *dllib = dlopen(lib_name, RTLD_LAZY);
101 ret = dlsym(dllib, proc_name);
104 printf(
"%s is defined and loaded\r\n",proc_name);
108 printf(
"%s is not defined\r\n",proc_name);
114 printf(
"Opening library [%s] failed\r\n", lib_name);
119 IARM_Result_t mfrMgr_start( )
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__);
128 static mfr_init_t func = 0;
130 printf(
"In %s\n",__func__);
133 func = (mfr_init_t) find_func(RDK_MFRLIB_NAME,
"mfr_init");
137 printf(
"Calling mfr_init err %p\r\n", func);
141 printf(
"Calling mfr_init returned value %d\r\n", err);
142 if(mfrERR_NONE != err)
144 printf(
"Calling mfr_init returned err %d\r\n", err);
145 IARM_Bus_Unlock(lock);
146 return IARM_RESULT_IPCCORE_FAIL;
150 printf(
"Error initializing IARM.. \n");
151 IARM_Bus_Unlock(lock);
153 return IARM_RESULT_IPCCORE_FAIL;
159 retCode = IARM_RESULT_SUCCESS;
162 IARM_Bus_Unlock(lock);
167 IARM_Result_t _mfr_init(
void *arg)
169 IARM_Result_t retVal = IARM_RESULT_IPCCORE_FAIL;
171 errno_t safec_rc = -1;
198 if(IARM_RESULT_SUCCESS == retVal )
201 mfrCrypto_init_t func = (mfrCrypto_init_t) find_func(RDK_MFRCRYPTOLIB_NAME,
"mfrCrypto_init");
205 printf(
"mfrCrypto_init returned ..... - %d\n",retVal);
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);
216 IARM_Bus_Unlock(lock);
217 return IARM_RESULT_INVALID_PARAM;
221 if(err != mfrERR_NONE)
223 printf(
"mfrCrypto_init returned failure - %d\n",err);
227 retVal = IARM_RESULT_SUCCESS;
232 printf(
"Some issue in finding the function mfrCrypto_init..\n");
235 printf(
"_mfr_init sucess ..... - %d\n",retVal);
242 IARM_Bus_Unlock(lock);
243 return IARM_RESULT_SUCCESS;
245 IARM_Result_t _mfrGetSerializedData(
void *arg)
247 IARM_Result_t retCode = IARM_RESULT_INVALID_STATE;
248 errno_t safec_rc = -1;
250 #ifndef RDK_MFRLIB_NAME
251 printf(
"Please define RDK_MFRLIB_NAME\r\n");
252 printf(
"Exiting %s\n",__func__);
255 static mfrGetSerializedData_t func = 0;
256 static mfrCrypto_Encrypt_t encrypt_func = 0;
260 printf(
"In %s\n",__func__);
264 func = (mfrGetSerializedData_t) find_func(RDK_MFRLIB_NAME,
"mfrGetSerializedData");
269 mfrCrypto_Encrypt_t *func_ptr = NULL;
273 safec_rc = strcmp_s(param->crypto, strlen(param->crypto),
"", &ind);
275 if((safec_rc == EOK) && ind))
277 if(encrypt_func == 0)
279 encrypt_func = (mfrCrypto_Encrypt_t) find_func(RDK_MFRCRYPTOLIB_NAME, param->crypto);
282 printf(
"Exiting %s\n",__func__);
283 IARM_Bus_Unlock(lock);
284 return IARM_RESULT_INVALID_STATE;
287 func_ptr = encrypt_func;
289 err = func(param->
type, &data, func_ptr);
290 if(mfrERR_NONE == err)
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);
301 data.freebuf(data.buf);
303 IARM_Bus_Unlock(lock);
304 return IARM_RESULT_INVALID_PARAM;
310 data.freeBuf(data.buf);
312 retCode = IARM_RESULT_SUCCESS;
316 IARM_Bus_Unlock(lock);
322 IARM_Result_t _mfrSetSerializedData(
void *arg)
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__);
330 static mfrSetSerializedData_t func = 0;
331 static mfrCrypto_Decrypt_t decrypt_func = 0;
332 errno_t safec_rc = -1;
336 printf(
"In %s\n",__func__);
339 func = (mfrSetSerializedData_t) find_func(RDK_MFRLIB_NAME,
"mfrSetSerializedData");
344 mfrCrypto_Decrypt_t *func_ptr = NULL;
347 safec_rc = strcmp_s(param->crypto, strlen(param->crypto),
"", &ind);
349 if((safec_rc == EOK) && ind)
351 if(decrypt_func == 0)
353 decrypt_func = (mfrCrypto_Decrypt_t) find_func(RDK_MFRCRYPTOLIB_NAME, param->crypto);
356 printf(
"Exiting %s\n",__func__);
357 IARM_Bus_Unlock(lock);
358 return IARM_RESULT_INVALID_STATE;
361 func_ptr = decrypt_func;
364 data.buf = (
char *) malloc (param->
bufLen);
365 data.bufLen = param->
bufLen;
367 safec_rc = memcpy_s(data.buf, param->
bufLen, ((
char *)param->buffer), param->
bufLen);
373 IARM_Bus_Unlock(lock);
374 return IARM_RESULT_INVALID_PARAM;
376 err = func(param->
type, &data, func_ptr);
377 if(mfrERR_NONE == err)
379 retCode = IARM_RESULT_SUCCESS;
382 IARM_Bus_Unlock(lock);
394 LOG(
"In writeImage callback: error = %d, percentage = %02.02\n",status.error,status.percentage/100,status.percentage%100);
398 (
void *) ¶m,
sizeof(param));
403 IARM_Result_t _mfrWriteImage(
void *arg)
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;
410 static mfrWriteImage_t func = 0;
412 printf(
"In writeImage_\n");
415 func = (mfrWriteImage_t) find_func(RDK_MFRLIB_NAME,
"mfrWriteImage");
418 printf(
"mfrWriteImage is defined and loaded\r\n");
422 printf(
"mfrWriteImage is not defined\r\n");
423 return IARM_RESULT_INVALID_STATE;
426 IARM_Result_t retCode = IARM_RESULT_INVALID_STATE;
427 mfrError_t err = mfrERR_NONE;
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)
439 printf(
"Calling mfrWriteImage returned err %d\r\n", err);
440 retCode = IARM_RESULT_SUCCESS;
442 while( lastStatus.progress == mfrUPGRADE_PROGRESS_NOT_STARTED )
444 printf(
"Waiting for upgrade to start\n");
448 while( lastStatus.progress == mfrUPGRADE_PROGRESS_STARTED )
450 printf(
"Waiting for upgrade to complete\n");
453 printf(
"Update process complete..\n");
454 if(lastStatus.progress != mfrUPGRADE_PROGRESS_COMPLETED)
456 retCode = IARM_RESULT_IPCCORE_FAIL;
461 printf(
"Exiting writeImage_\n");
466 IARM_Result_t _mfrGetImageWriteProgress(
void *arg)
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;
473 static mfrGetImageWriteProgress_t func = 0;
475 printf(
"In %s\n",__func__);
478 func = (mfrGetImageWriteProgress_t) find_func(RDK_MFRLIB_NAME,
"mfrGetImageWriteProgress");
481 printf(
"mfrGetImageWriteProgress is defined and loaded\r\n");
485 printf(
"mfrGetImageWriteProgress is not defined\r\n");
486 return IARM_RESULT_INVALID_STATE;
489 IARM_Result_t retCode = IARM_RESULT_INVALID_STATE;
490 mfrError_t err = mfrERR_NONE;
495 err = func(pParam->imageName,pParam->imageType,&(pParam->progress));
496 if(mfrERR_NONE == err)
498 printf(
"Calling mfrGetImageWriteProgress returned err %d\r\n", err);
499 retCode = IARM_RESULT_SUCCESS;
502 printf(
"Exiting %s\n",__func__);
507 IARM_Result_t _mfrSetImageWriteProgress(
void *arg)
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;
514 static mfrSetImageWriteProgress_t func = 0;
516 printf(
"In %s\n",__func__);
519 func = (mfrSetImageWriteProgress_t) find_func(RDK_MFRLIB_NAME,
"mfrSetImageWriteProgress");
522 printf(
"mfrSetImageWriteProgress is defined and loaded\r\n");
526 printf(
"mfrSetImageWriteProgress is not defined\r\n");
527 return IARM_RESULT_INVALID_STATE;
530 IARM_Result_t retCode = IARM_RESULT_INVALID_STATE;
531 mfrError_t err = mfrERR_NONE;
536 err = func(pParam->imageName, pParam->imageType, pParam->progress);
537 if(mfrERR_NONE == err)
539 printf(
"Calling mfrSetImageWriteProgress returned err %d\r\n", err);
540 retCode = IARM_RESULT_SUCCESS;
543 printf(
"Exiting %s\n",__func__);
547 IARM_Result_t _mfrDeletePDRI(
void *arg)
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;
554 static mfrDeletePDRI_t func = 0;
559 func = (mfrDeletePDRI_t) find_func(RDK_MFRLIB_NAME,
"mfrDeletePDRI");
562 printf(
"mfrDeletePDRI(void) is defined and loaded\r\n");
566 printf(
"mfrDeletePDRI(void) is not defined\r\n");
567 IARM_Bus_Unlock(lock);
568 return IARM_RESULT_INVALID_STATE;
571 IARM_Result_t retCode = IARM_RESULT_INVALID_STATE;
572 mfrError_t err = mfrERR_NONE;
576 if(mfrERR_NONE == err)
578 printf(
"Calling mfrDeletePDRI returned err %d\r\n", err);
579 IARM_Bus_Unlock(lock);
580 retCode = IARM_RESULT_SUCCESS;
583 IARM_Bus_Unlock(lock);
588 IARM_Result_t _mfrScrubAllBanks(
void *arg)
590 #ifndef RDK_MFRLIB_NAME
591 printf(
"Please define RDK_MFRLIB_NAME\r\n");
592 return IARM_RESULT_INVALID_STATE;
594 static mfrScrubAllBanks_t func = 0;
599 func = (mfrScrubAllBanks_t) find_func(RDK_MFRLIB_NAME,
"mfrScrubAllBanks");
602 printf(
"mfrScrubAllBanks(void) is defined and loaded\r\n");
606 printf(
"mfrScrubAllBanks(void) is not defined\r\n");
607 IARM_Bus_Unlock(lock);
608 return IARM_RESULT_INVALID_STATE;
611 IARM_Result_t retCode = IARM_RESULT_INVALID_STATE;
612 mfrError_t err = mfrERR_NONE;
616 if(mfrERR_NONE == err)
618 printf(
"Calling mfrScrubAllBanks returned err %d\r\n", err);
619 IARM_Bus_Unlock(lock);
620 retCode = IARM_RESULT_SUCCESS;
623 IARM_Bus_Unlock(lock);
629 IARM_Result_t _mfr_shutdown(
void *arg)
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;
639 static mfr_shutdown_t func = 0;
640 IARM_Result_t retCode = IARM_RESULT_INVALID_STATE;
644 func = (mfr_shutdown_t) find_func(RDK_MFRLIB_NAME,
"mfr_shutdown");
647 printf(
"mfr_shutdown(void) is defined and loaded\r\n");
651 printf(
"mfr_shutdown(void) is not defined\r\n");
652 IARM_Bus_Unlock(lock);
653 return IARM_RESULT_INVALID_STATE;
659 mfrError_t err = func();
660 if(mfrERR_NONE == err)
662 printf(
"Calling mfr_shutdown returned err %d\r\n", err);
663 IARM_Bus_Unlock(lock);
664 retCode = IARM_RESULT_SUCCESS;
667 IARM_Bus_Unlock(lock);
674 IARM_Result_t _mfrReboot(
void *arg)
676 #ifndef RDK_MFRLIB_NAME
677 printf(
"Please define RDK_MFRLIB_NAME\r\n");
678 return IARM_RESULT_INVALID_STATE;
680 static mfrReboot_t func = 0;
685 func = (mfrReboot_t) find_func(RDK_MFRLIB_NAME,
"mfrReboot");
688 printf(
"mfrReboot (const char*) is defined and loaded\r\n");
692 printf(
"mfrReboot (const char*) is not defined\r\n");
693 IARM_Bus_Unlock(lock);
694 return IARM_RESULT_INVALID_STATE;
697 IARM_Result_t retCode = IARM_RESULT_INVALID_STATE;
698 mfrError_t err = mfrERR_NONE;
703 err = func(pParam->imageName);
704 if(mfrERR_NONE == err)
706 printf(
"Calling mfrReboot returned err %d\r\n", err);
707 IARM_Bus_Unlock(lock);
708 retCode = IARM_RESULT_SUCCESS;
711 IARM_Bus_Unlock(lock);
717 IARM_Result_t _mfrSetCableCardType(
void *arg)
719 #ifndef RDK_MFRLIB_NAME
720 printf(
"Please define RDK_MFRLIB_NAME\r\n");
721 return IARM_RESULT_INVALID_STATE;
723 static mfrSetCableCardType_t func = 0;
728 func = (mfrSetCableCardType_t) find_func(RDK_MFRLIB_NAME,
"mfrSetCableCardType");
731 printf(
"mfrSetCableCardType is defined and loaded\r\n");
735 printf(
"mfrSetCableCardType is not defined\r\n");
736 IARM_Bus_Unlock(lock);
737 return IARM_RESULT_INVALID_STATE;
740 IARM_Result_t retCode = IARM_RESULT_INVALID_STATE;
741 mfrError_t err = mfrERR_NONE;
746 err = func(pParam->type);
747 if(mfrERR_NONE == err)
749 printf(
"Calling mfrSetCableCardType returned err %d\r\n", err);
750 IARM_Bus_Unlock(lock);
751 retCode = IARM_RESULT_SUCCESS;
754 IARM_Bus_Unlock(lock);
760 IARM_Result_t _mfrSetHostFirmwareInfo(
void *arg)
762 #ifndef RDK_MFRLIB_NAME
763 printf(
"Please define RDK_MFRLIB_NAME\r\n");
764 return IARM_RESULT_INVALID_STATE;
766 static mfrSetHostFirmwareInfo_t func = 0;
767 errno_t safec_rc = -1;
772 func = (mfrSetHostFirmwareInfo_t) find_func(RDK_MFRLIB_NAME,
"mfrSetHostFirmwareInfo");
775 printf(
"mfrSetHostFirmwareInfo is defined and loaded\r\n");
779 printf(
"mfrSetHostFirmwareInfo is not defined\r\n");
780 IARM_Bus_Unlock(lock);
781 return IARM_RESULT_INVALID_STATE;
784 IARM_Result_t retCode = IARM_RESULT_INVALID_STATE;
785 mfrError_t err = mfrERR_NONE;
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));
798 IARM_Bus_Unlock(lock);
799 return IARM_RESULT_INVALID_PARAM;
801 err = func(&host_firmware_info);
802 if(mfrERR_NONE == err)
804 printf(
"Calling mfrSetHostFirmwareInfo returned err %d\r\n", err);
805 IARM_Bus_Unlock(lock);
806 retCode = IARM_RESULT_SUCCESS;
809 IARM_Bus_Unlock(lock);
815 IARM_Result_t _mfrGetBootImageName(
void *arg)
817 #ifndef RDK_MFRLIB_NAME
818 printf(
"Please define RDK_MFRLIB_NAME\r\n");
819 return IARM_RESULT_INVALID_STATE;
821 static mfrGetBootImageName_t func = 0;
826 func = (mfrGetBootImageName_t) find_func(RDK_MFRLIB_NAME,
"mfrGetBootImageName");
829 printf(
"mfrGetBootImageName is defined and loaded\r\n");
833 printf(
"mfrGetBootImageName is not defined\r\n");
834 IARM_Bus_Unlock(lock);
835 return IARM_RESULT_INVALID_STATE;
838 IARM_Result_t retCode = IARM_RESULT_INVALID_STATE;
839 mfrError_t err = mfrERR_NONE;
844 err = func(pParam->bootInstance, pParam->imageName, &(pParam->len), pParam->type);
845 if(mfrERR_NONE == err)
847 printf(
"Calling mfrGetBootImageName returned err %d\r\n", err);
848 IARM_Bus_Unlock(lock);
849 retCode = IARM_RESULT_SUCCESS;
852 IARM_Bus_Unlock(lock);
858 IARM_Result_t _mfrGetPathConfiguration(
void *arg)
860 #ifndef RDK_MFRLIB_NAME
861 printf(
"Please define RDK_MFRLIB_NAME\r\n");
862 return IARM_RESULT_INVALID_STATE;
864 static mfrGetPathConfiguration_t func = 0;
865 printf(
"In %s \n",__func__);
869 func = (mfrGetPathConfiguration_t) find_func(RDK_MFRLIB_NAME,
"mfrGetPathConfiguration");
872 printf(
"mfrGetPathConfiguration is defined and loaded\r\n");
876 printf(
"mfrGetPathConfiguration is not defined\r\n");
877 IARM_Bus_Unlock(lock);
878 return IARM_RESULT_INVALID_STATE;
881 IARM_Result_t retCode = IARM_RESULT_INVALID_STATE;
882 mfrError_t err = mfrERR_NONE;
887 err = func(pParam->type, pParam->path, &(pParam->len));
888 if(mfrERR_NONE == err)
890 printf(
"Calling mfrGetPathConfiguration returned err %d\r\n", err);
891 IARM_Bus_Unlock(lock);
892 retCode = IARM_RESULT_SUCCESS;
895 IARM_Bus_Unlock(lock);
901 IARM_Result_t _mfrGetDFAST2Data(
void *arg)
903 #ifndef RDK_MFRLIB_NAME
904 printf(
"Please define RDK_MFRLIB_NAME\r\n");
905 return IARM_RESULT_INVALID_STATE;
907 static mfrGetDFAST2Data_t func = 0;
908 errno_t safec_rc = -1;
913 func = (mfrGetDFAST2Data_t) find_func(RDK_MFRLIB_NAME,
"mfrGetDFAST2Data");
916 printf(
"mfrGetDFAST2Data is defined and loaded\r\n");
920 printf(
"mfrGetDFAST2Data is not defined\r\n");
921 IARM_Bus_Unlock(lock);
922 return IARM_RESULT_INVALID_STATE;
925 IARM_Result_t retCode = IARM_RESULT_INVALID_STATE;
926 mfrError_t err = mfrERR_NONE;
936 IARM_Bus_Unlock(lock);
937 return IARM_RESULT_INVALID_PARAM;
939 err = func(&dfast_params);
940 if(mfrERR_NONE == err)
942 printf(
"Calling mfrGetDFAST2Data returned err %d\r\n", err);
943 IARM_Bus_Unlock(lock);
944 retCode = IARM_RESULT_SUCCESS;
947 IARM_Bus_Unlock(lock);