32 #ifdef USE_XRDK_EMMC_PROFILE
41 #ifdef USE_RDK_STORAGE_MANAGER_V2
42 #include "rdkStorageMgr.h"
44 #include "storageMgr.h"
45 #endif // ifdef USE_RDK_STORAGE_MANAGER_V2
46 #include "safec_lib.h"
52 errno_t safec_rc = -1;
55 char emmcDeviceID[RDK_STMGR_MAX_STRING_LENGTH] =
"";
56 char emmcPartitionID[RDK_STMGR_MAX_STRING_LENGTH] =
"";
58 eSTMGRDeviceInfoList deviceInfoList;
59 eSTMGRReturns stRet = rdkStorage_getDeviceInfoList (&deviceInfoList);
60 for (
int i = 0; i < deviceInfoList.m_numOfDevices; i++)
62 if (RDK_STMGR_DEVICE_TYPE_EMMCCARD == deviceInfoList.m_devices[i].m_type)
64 safec_rc=memcpy_s (emmcDeviceID, RDK_STMGR_MAX_STRING_LENGTH , &deviceInfoList.m_devices[i].m_deviceID,RDK_STMGR_MAX_STRING_LENGTH);
69 safec_rc=memcpy_s (emmcPartitionID, RDK_STMGR_MAX_STRING_LENGTH , &deviceInfoList.m_devices[i].m_partitions,RDK_STMGR_MAX_STRING_LENGTH);
86 RDK_LOG(RDK_LOG_WARN, LOG_TR69HOSTIF,
"[%s] Failed: eMMC not found\n",__FUNCTION__);
89 catch(
const std::exception& e)
91 RDK_LOG(RDK_LOG_WARN,LOG_TR69HOSTIF,
"[%s] Caught exception \" %s\"\n", __FUNCTION__, e.what());
105 hostIf_STBServiceXeMMC::hostIf_STBServiceXeMMC(
char* emmcDeviceID,
char* emmcPartitionID)
107 snprintf (this->emmcDeviceID,
sizeof(this->emmcDeviceID),
"%s", emmcDeviceID);
108 snprintf (this->emmcPartitionID,
sizeof(this->emmcPartitionID),
"%s", emmcPartitionID);
113 int ret = NOT_HANDLED;
122 typedef std::pair<const char*, getter_function> getter_function_entry;
123 #define CALL_MEMBER_FN(object,ptrToMember) ((object).*(ptrToMember))
125 static getter_function_entry getter_function_map[] = {
126 {
"Capacity", &hostIf_STBServiceXeMMC::getCapacity},
127 {
"LifeElapsedA", &hostIf_STBServiceXeMMC::getLifeElapsedA},
128 {
"LifeElapsedB", &hostIf_STBServiceXeMMC::getLifeElapsedB},
129 {
"LotID", &hostIf_STBServiceXeMMC::getLotID},
130 {
"Manufacturer", &hostIf_STBServiceXeMMC::getManufacturer},
131 {
"Model", &hostIf_STBServiceXeMMC::getModel},
132 {
"ReadOnly", &hostIf_STBServiceXeMMC::getReadOnly},
133 {
"SerialNumber", &hostIf_STBServiceXeMMC::getSerialNumber},
134 {
"TSBQualified", &hostIf_STBServiceXeMMC::getTSBQualified},
135 {
"PreEOLStateSystem", &hostIf_STBServiceXeMMC::getPreEOLStateSystem},
136 {
"PreEOLStateEUDA", &hostIf_STBServiceXeMMC::getPreEOLStateEUDA},
137 {
"PreEOLStateMLC", &hostIf_STBServiceXeMMC::getPreEOLStateMLC},
138 {
"FirmwareVersion", &hostIf_STBServiceXeMMC::getFirmwareVersion},
139 {
"DeviceReport", &hostIf_STBServiceXeMMC::getDeviceReport} };
141 int str_len = strlen(X_EMMC_OBJ);
142 if ((strncasecmp(stMsgData->
paramName, X_EMMC_OBJ, str_len) != 0))
144 RDK_LOG(RDK_LOG_ERROR,LOG_TR69HOSTIF,
"[%s:%s]Failed : Mismatch parameter path : %s\n", __FILE__, __FUNCTION__, stMsgData->
paramName);
148 const char *paramName = strchr(stMsgData->
paramName + str_len - 1,
'.');
149 if (paramName == NULL)
151 RDK_LOG(RDK_LOG_ERROR,LOG_TR69HOSTIF,
"[%s:%s] Parameter is NULL \n", __FILE__, __FUNCTION__);
158 for (
const auto& entry : getter_function_map)
159 if (strcasecmp (paramName, entry.first) == 0)
160 return CALL_MEMBER_FN(*
this, entry.second)(stMsgData);
161 RDK_LOG (RDK_LOG_ERROR, LOG_TR69HOSTIF,
"[%s:%s] Parameter \'%s\' is Not Supported \n", __FILE__, __FUNCTION__, paramName);
163 catch (
const std::exception& e)
165 RDK_LOG(RDK_LOG_ERROR,LOG_TR69HOSTIF,
"[%s:%s] Exception caught %s \n", __FILE__, __FUNCTION__, e.what());
174 stMsgData->
paramtype = hostIf_UnsignedIntType;
176 eSTMGRDeviceInfo deviceInfo;
177 if (RDK_STMGR_RETURN_SUCCESS == rdkStorage_getDeviceInfo (emmcDeviceID, &deviceInfo))
179 RDK_LOG (RDK_LOG_DEBUG, LOG_TR69HOSTIF,
"[%s:%s] deviceInfo.m_capacity = %llu\n",
180 __FILE__, __FUNCTION__, deviceInfo.m_capacity);
196 return getLifeElapsed(stMsgData,
"LifeElapsedA");
203 return getLifeElapsed(stMsgData,
"LifeElapsedB");
206 int hostIf_STBServiceXeMMC::getLifeElapsed(
HOSTIF_MsgData_t *stMsgData,
const char* life_elapsed_type)
210 stMsgData->
paramtype = hostIf_IntegerType;
212 eSTMGRHealthInfo healthInfo;
213 if (RDK_STMGR_RETURN_SUCCESS == rdkStorage_getHealth (emmcDeviceID, &healthInfo))
215 for (
int i = 0; i < healthInfo.m_lifetimesList.m_numOfAttributes; i++)
217 if (0 == strcmp (healthInfo.m_lifetimesList.m_diagnostics[i].m_name, life_elapsed_type))
219 put_int(stMsgData->
paramValue, atoi (healthInfo.m_lifetimesList.m_diagnostics[i].m_value));
233 stMsgData->
paramtype = hostIf_StringType;
236 eSTMGRDeviceInfo deviceInfo;
237 if (RDK_STMGR_RETURN_SUCCESS == rdkStorage_getDeviceInfo (emmcDeviceID, &deviceInfo))
239 rc=strcpy_s((
char*) stMsgData->
paramValue,
sizeof(stMsgData->
paramValue),deviceInfo.m_hwVersion);
257 stMsgData->
paramtype = hostIf_StringType;
260 eSTMGRDeviceInfo deviceInfo;
261 if (RDK_STMGR_RETURN_SUCCESS == rdkStorage_getDeviceInfo (emmcDeviceID, &deviceInfo))
263 rc=strcpy_s((
char*) stMsgData->
paramValue,
sizeof(stMsgData->
paramValue), deviceInfo.m_manufacturer);
281 stMsgData->
paramtype = hostIf_StringType;
284 eSTMGRDeviceInfo deviceInfo;
285 if (RDK_STMGR_RETURN_SUCCESS == rdkStorage_getDeviceInfo (emmcDeviceID, &deviceInfo))
305 stMsgData->
paramtype = hostIf_BooleanType;
307 eSTMGRDeviceInfo deviceInfo;
308 if (RDK_STMGR_RETURN_SUCCESS == rdkStorage_getDeviceInfo (emmcDeviceID, &deviceInfo))
324 stMsgData->
paramtype = hostIf_StringType;
327 eSTMGRDeviceInfo deviceInfo;
328 if (RDK_STMGR_RETURN_SUCCESS == rdkStorage_getDeviceInfo (emmcDeviceID, &deviceInfo))
330 rc=strcpy_s((
char*) stMsgData->
paramValue,
sizeof(stMsgData->
paramValue), deviceInfo.m_serialNumber);
349 stMsgData->
paramtype = hostIf_BooleanType;
351 eSTMGRDeviceInfo deviceInfo;
352 if (RDK_STMGR_RETURN_SUCCESS == rdkStorage_getDeviceInfo (emmcDeviceID, &deviceInfo))
364 int hostIf_STBServiceXeMMC::getPreEOLStateSystem(
HOSTIF_MsgData_t *stMsgData)
368 return getPreEOLState(stMsgData,
"PreEOLStateSystem");
375 return getPreEOLState(stMsgData,
"PreEOLStateEUDA");
382 return getPreEOLState(stMsgData,
"PreEOLStateMLC");
385 int hostIf_STBServiceXeMMC::getPreEOLState(
HOSTIF_MsgData_t *stMsgData,
const char* pre_eol_state_type)
389 stMsgData->
paramtype = hostIf_StringType;
391 eSTMGRHealthInfo healthInfo;
392 if (RDK_STMGR_RETURN_SUCCESS == rdkStorage_getHealth (emmcDeviceID, &healthInfo))
394 for (
int i = 0; i < healthInfo.m_healthStatesList.m_numOfAttributes; i++)
396 if (0 == strcmp (healthInfo.m_healthStatesList.m_diagnostics[i].m_name, pre_eol_state_type))
398 snprintf (stMsgData->
paramValue, sizeof (stMsgData->
paramValue), healthInfo.m_healthStatesList.m_diagnostics[i].m_value);
412 stMsgData->
paramtype = hostIf_StringType;
415 eSTMGRDeviceInfo deviceInfo;
416 if (RDK_STMGR_RETURN_SUCCESS == rdkStorage_getDeviceInfo (emmcDeviceID, &deviceInfo))
418 rc=strcpy_s((
char*) stMsgData->
paramValue,
sizeof(stMsgData->
paramValue), deviceInfo.m_firmwareVersion);
436 stMsgData->
paramtype = hostIf_StringType;
438 eSTMGRHealthInfo healthInfo;
439 if (RDK_STMGR_RETURN_SUCCESS == rdkStorage_getHealth (emmcDeviceID, &healthInfo))
441 snprintf(stMsgData->
paramValue,
sizeof(stMsgData->
paramValue), healthInfo.m_diagnostics.m_blob);
453 #endif // ifdef USE_XRDK_EMMC_PROFILE