RDK Documentation (Open Sourced RDK Components)
librmh_api_no_wrap.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 #include "librmh.h"
21 #include "rdk_moca_hal.h"
22 
23 RMH_Handle RMH_Initialize(const RMH_EventCallback eventCB, void* userContext) {
24  RMH* handle;
25 
26  handle=malloc(sizeof(*handle));
27  BRMH_RETURN_IF(handle==NULL, NULL);
28  memset(handle, 0, sizeof(*handle));
29  handle->printBuf=malloc(RMH_MAX_PRINT_LINE_SIZE);
30  handle->logLevelBitMask=RMH_LOG_ERROR;
31  if (!handle->printBuf) {
32  RMH_PrintErr("Unable to allocate print buf of size %u!\n", RMH_MAX_PRINT_LINE_SIZE);
33  goto error_out;
34  }
35  handle->eventCB=eventCB;
36  handle->eventCBUserContext=userContext;
37  handle->soclib = dlopen("librdkmocahalsoc.so.0", RTLD_LAZY);
38  if (handle->soclib) {
39  char *dlErr = dlerror(); /* Check error first to clear it out */
40  RMH_Handle (*apiFunc)() = dlsym(handle->soclib, "RMH_Initialize");
41  dlErr = dlerror();
42  if (dlErr) {
43  RMH_PrintTrace("Error 'RMH_Initialize' in dlopen: '%s'. APIs will return RMH_INVALID_INTERNAL_STATE!\n", dlErr);
44  }
45  else if (!apiFunc) {
46  RMH_PrintErr("Unable to find 'RMH_Initialize' in SoC library! APIs will return RMH_INVALID_INTERNAL_STATE!\n");
47  }
48  else {
49  handle->handle = apiFunc(eventCB, userContext);
50  if (!handle->handle) {
51  RMH_PrintErr("Failed when initializing the SoC MoCA Hal!\n");
52  goto error_out;
53  }
54  }
55  }
56  else {
57  RMH_PrintWrn("Failed to open the SoC library 'librdkmocahalsoc.so.0', all MoCA APIs will return RMH_UNIMPLEMENTED! Please ensure it's properly installed on this system\n");
58  }
59  RMH_PrintTrace("Initialized generic handle:0x%p socHandle:0x%p\n", handle, handle->handle);
60  return (RMH_Handle)handle;
61 
62 error_out:
63  RMH_Destroy(handle);
64  return NULL;
65 }
66 
67 
68 #undef AS
69 #define AS(x,y) #x,
70 __attribute__((visibility("hidden"))) const char * const RMH_ResultStr[] = { ENUM_RMH_Result };
71 __attribute__((visibility("hidden"))) const char * const RMH_LinkStatusStr[] = { ENUM_RMH_LinkStatus };
72 __attribute__((visibility("hidden"))) const char * const RMH_AdmissionStatusStr[] = { ENUM_RMH_AdmissionStatus };
73 __attribute__((visibility("hidden"))) const char * const RMH_PowerModeStr[] = { ENUM_RMH_PowerMode };
74 __attribute__((visibility("hidden"))) const char * const RMH_BandStr[] = { ENUM_RMH_Band };
75 __attribute__((visibility("hidden"))) const char * const RMH_MoCAVersionStr[] = { ENUM_RMH_MoCAVersion };
76 __attribute__((visibility("hidden"))) const char * const RMH_LogLevelStr[] = { ENUM_RMH_LogLevel };
77 __attribute__((visibility("hidden"))) const char * const RMH_EventStr[] = { ENUM_RMH_Event };
78 __attribute__((visibility("hidden"))) const char * const RMH_ACATypeStr[] = { ENUM_RMH_ACAType };
79 __attribute__((visibility("hidden"))) const char * const RMH_ACAStatusStr[] = { ENUM_RMH_ACAStatus };
80 __attribute__((visibility("hidden"))) const char * const RMH_MoCAResetReasonStr[] = { ENUM_RMH_MoCAResetReason };
81 __attribute__((visibility("hidden"))) const char * const RMH_SubcarrierProfileStr[] = { ENUM_RMH_SubcarrierProfile };
82 __attribute__((visibility("hidden"))) const char * const RMH_PERModeStr[] = { ENUM_RMH_PERMode };
83 
84 const char* const RMH_ResultToString(const RMH_Result value) {
85  return RMH_ResultStr[value];
86 }
87 
88 const char* const RMH_LinkStatusToString(const RMH_LinkStatus value) {
89  return RMH_LinkStatusStr[value];
90 }
91 
92 const char* const RMH_AdmissionStatusToString(const RMH_AdmissionStatus value) {
93  return RMH_AdmissionStatusStr[value];
94 }
95 
96 const char* const RMH_BandToString(const RMH_Band value) {
97  return RMH_BandStr[value];
98 }
99 
100 const char* const RMH_ACATypeToString(const RMH_ACAType value) {
101  return RMH_ACATypeStr[value];
102 }
103 
104 const char* const RMH_ACAStatusToString(const RMH_ACAStatus value) {
105  return RMH_ACAStatusStr[value];
106 }
107 
108 const char* const RMH_MoCAResetReasonToString(const RMH_MoCAResetReason value) {
109  return RMH_MoCAResetReasonStr[value];
110 }
111 
112 const char* const RMH_SubcarrierProfileToString(const RMH_SubcarrierProfile value) {
113  return RMH_SubcarrierProfileStr[value];
114 }
115 
116 const char* const RMH_PERModeToString(const RMH_PERMode value) {
117  return RMH_PERModeStr[value];
118 }
119 
120 
121 
122 const char* const RMH_MoCAVersionToString(const RMH_MoCAVersion value) {
123  switch (value) {
124  case RMH_MOCA_VERSION_UNKNOWN:
125  return "Unknown";
126  break;
127  case RMH_MOCA_VERSION_10:
128  return "1.0";
129  break;
130  case RMH_MOCA_VERSION_11:
131  return "1.1";
132  break;
133  case RMH_MOCA_VERSION_20:
134  return "2.0";
135  break;
136  default:
137  return RMH_MoCAVersionStr[value];
138  break;
139  }
140 }
141 
142 static inline
143 const char* const RMH_BitMAskToString(const uint32_t value, char* responseBuf, const size_t responseBufSize, const char * const fixedStrings[], const uint32_t numFixedStrings) {
144  if (responseBuf) {
145  int i;
146  responseBuf[0]='\0';
147  for(i=0; i < numFixedStrings; i ++) {
148  if ((value & (1u<<i)) == (1u<<i)) {
149  if (responseBufSize <= strlen(responseBuf) + strlen(fixedStrings[i]) + 3) {
150  return "Buffer too small!";
151  }
152  if (strlen(responseBuf)) {
153  strcat(responseBuf, " | ");
154  }
155  strcat(responseBuf, fixedStrings[i]);
156  }
157  }
158  }
159  return responseBuf;
160 }
161 
162 const char* const RMH_PowerModeToString(const uint32_t value, char* responseBuf, const size_t responseBufSize) {
163  return RMH_BitMAskToString(value, responseBuf, responseBufSize, RMH_PowerModeStr, sizeof(RMH_PowerModeStr)/sizeof(RMH_PowerModeStr[0]));
164 }
165 
166 const char* const RMH_LogLevelToString(const uint32_t value, char* responseBuf, const size_t responseBufSize) {
167  return RMH_BitMAskToString(value, responseBuf, responseBufSize, RMH_LogLevelStr, sizeof(RMH_LogLevelStr)/sizeof(RMH_LogLevelStr[0]));
168 }
169 
170 const char* const RMH_EventToString(const uint32_t value, char* responseBuf, const size_t responseBufSize) {
171  return RMH_BitMAskToString(value, responseBuf, responseBufSize, RMH_EventStr, sizeof(RMH_EventStr)/sizeof(RMH_EventStr[0]));
172 }
173 
174 const char* const RMH_MacToString(const RMH_MacAddress_t mac, char* responseBuf, const size_t responseBufSize) {
175  if (responseBuf && responseBufSize >= 18 ) {
176  int written=snprintf(responseBuf, responseBufSize, "%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
177  if ((written > 0) && (written < responseBufSize))
178  return responseBuf;
179  }
180  return "Buffer too small!";
181 }
182 
RMH_AdmissionStatusToString
const char *const RMH_AdmissionStatusToString(const RMH_AdmissionStatus value)
Convert RMH_AdmissionStatus to a string.
Definition: librmh_api_no_wrap.c:92
RMH_LogLevelToString
const char *const RMH_LogLevelToString(const uint32_t value, char *responseBuf, const size_t responseBufSize)
Return the bitmask value as a string.
Definition: librmh_api_no_wrap.c:166
RMH_MoCAVersionToString
const char *const RMH_MoCAVersionToString(const RMH_MoCAVersion value)
Convert RMH_MoCAVersion to a string.
Definition: librmh_api_no_wrap.c:122
RMH_BandToString
const char *const RMH_BandToString(const RMH_Band value)
Convert value to a printable string.
Definition: librmh_api_no_wrap.c:96
RMH_LinkStatusToString
const char *const RMH_LinkStatusToString(const RMH_LinkStatus value)
Convert RMH_LinkStatus to a string.
Definition: librmh_api_no_wrap.c:88
RMH
Definition: librmh.h:57
RMH_MoCAResetReasonToString
const char *const RMH_MoCAResetReasonToString(const RMH_MoCAResetReason value)
Convert RMH_MoCAResetReason to a string.
Definition: librmh_api_no_wrap.c:108
RMH_MacToString
const char *const RMH_MacToString(const RMH_MacAddress_t mac, char *responseBuf, const size_t responseBufSize)
Returns the provided MAC address in value as a string.
Definition: librmh_api_no_wrap.c:174
RMH_PERModeToString
const char *const RMH_PERModeToString(const RMH_PERMode value)
Convert RMH_PERMode to a string.
Definition: librmh_api_no_wrap.c:116
RMH_Initialize
RMH_Handle RMH_Initialize(const RMH_EventCallback eventCB, void *userContext)
Initialize the RMH library and return a handle to the instance.
Definition: librmh_api_no_wrap.c:23
RMH_PowerModeToString
const char *const RMH_PowerModeToString(const uint32_t value, char *responseBuf, const size_t responseBufSize)
The input value should be a a bitmask of type RMH_PowerMode.
Definition: librmh_api_no_wrap.c:162
RMH_ResultToString
const char *const RMH_ResultToString(const RMH_Result value)
Convert RMH_Result to a string.
Definition: librmh_api_no_wrap.c:84
RMH_SubcarrierProfileToString
const char *const RMH_SubcarrierProfileToString(const RMH_SubcarrierProfile value)
Convert RMH_SubcarrierProfile to a string.
Definition: librmh_api_no_wrap.c:112
RMH_Destroy
RMH_Result RMH_Destroy(RMH_Handle handle)
Destroy the instance of RMH library which was created by RMH_Initialize.
RMH_EventToString
const char *const RMH_EventToString(const uint32_t value, char *responseBuf, const size_t responseBufSize)
Return the bitmask value as a string.
Definition: librmh_api_no_wrap.c:170
RMH_ACAStatusToString
const char *const RMH_ACAStatusToString(const RMH_ACAStatus value)
Convert ACA status to a printable string.
Definition: librmh_api_no_wrap.c:104
RMH_ACATypeToString
const char *const RMH_ACATypeToString(const RMH_ACAType value)
Convert value to a printable string.
Definition: librmh_api_no_wrap.c:100