1 #include "rk_aiq_uapi_atmo_int.h"
2 #include "rk_aiq_types_atmo_algo_prvt.h"
3
4 bool
IfTmoDataEqu(int * pInput,int len)5 IfTmoDataEqu
6 (
7 int* pInput,
8 int len
9 )
10 {
11 bool equ = true;
12
13 for(int i = 0; i < len - 1; i++)
14 if(pInput[i] != pInput[i + 1])
15 equ = false;
16
17 return equ;
18 }
19
20 XCamReturn
rk_aiq_uapi_atmo_SetTool(CalibDbV2_tmo_t * pStore,CalibDbV2_tmo_t * pInput)21 rk_aiq_uapi_atmo_SetTool
22 (
23 CalibDbV2_tmo_t* pStore,
24 CalibDbV2_tmo_t* pInput
25 )
26 {
27 XCamReturn ret = XCAM_RETURN_NO_ERROR;
28
29 //global luma
30 int GlobalLumaLen[3];
31 GlobalLumaLen[0] = pInput->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
32 GlobalLumaLen[1] = pInput->TmoTuningPara.GlobalLuma.GlobalLumaData.ISO_len;
33 GlobalLumaLen[2] = pInput->TmoTuningPara.GlobalLuma.GlobalLumaData.Strength_len;
34 bool GlobalLumaEqu = IfTmoDataEqu(GlobalLumaLen, 3);
35 if(!GlobalLumaEqu) {
36 LOGE_ATMO("%s: Input TMO Global Luma Data length is NOT EQUAL !!!\n", __FUNCTION__ );
37 return XCAM_RETURN_ERROR_FAILED;
38 }
39
40 if(pStore->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len != pInput->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len) {
41 free(pStore->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv);
42 free(pStore->TmoTuningPara.GlobalLuma.GlobalLumaData.ISO);
43 free(pStore->TmoTuningPara.GlobalLuma.GlobalLumaData.Strength);
44 pStore->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv =
45 (float *) malloc(sizeof(float) * pInput->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len);
46 pStore->TmoTuningPara.GlobalLuma.GlobalLumaData.ISO =
47 (float *) malloc(sizeof(float) * pInput->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len);
48 pStore->TmoTuningPara.GlobalLuma.GlobalLumaData.Strength =
49 (float *) malloc(sizeof(float) * pInput->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len);
50 }
51 pStore->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len = pInput->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
52 pStore->TmoTuningPara.GlobalLuma.GlobalLumaData.ISO_len = pInput->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
53 pStore->TmoTuningPara.GlobalLuma.GlobalLumaData.Strength_len = pInput->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
54 memcpy(pStore->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv,
55 pInput->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv, sizeof(float)*pInput->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len);
56 memcpy(pStore->TmoTuningPara.GlobalLuma.GlobalLumaData.ISO,
57 pInput->TmoTuningPara.GlobalLuma.GlobalLumaData.ISO, sizeof(float)*pInput->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len);
58 memcpy(pStore->TmoTuningPara.GlobalLuma.GlobalLumaData.Strength,
59 pInput->TmoTuningPara.GlobalLuma.GlobalLumaData.Strength, sizeof(float)*pInput->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len);
60
61 //high light
62 int HighLightLen[3];
63 HighLightLen[0] = pInput->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf_len;
64 HighLightLen[1] = pInput->TmoTuningPara.DetailsHighLight.HighLightData.EnvLv_len;
65 HighLightLen[2] = pInput->TmoTuningPara.DetailsHighLight.HighLightData.Strength_len;
66 bool HighLightLenEqu = IfTmoDataEqu(HighLightLen, 3);
67 if(!HighLightLenEqu) {
68 LOGE_ATMO("%s: Input TMO Hight Light Data length is NOT EQUAL !!!\n", __FUNCTION__ );
69 return XCAM_RETURN_ERROR_FAILED;
70 }
71 if(pStore->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf_len != pInput->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf_len) {
72 free(pStore->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf);
73 free(pStore->TmoTuningPara.DetailsHighLight.HighLightData.EnvLv);
74 free(pStore->TmoTuningPara.DetailsHighLight.HighLightData.Strength);
75 pStore->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf =
76 (float *) malloc(sizeof(float) * pInput->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf_len);
77 pStore->TmoTuningPara.DetailsHighLight.HighLightData.EnvLv =
78 (float *) malloc(sizeof(float) * pInput->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf_len);
79 pStore->TmoTuningPara.DetailsHighLight.HighLightData.Strength =
80 (float *) malloc(sizeof(float) * pInput->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf_len);
81 }
82 pStore->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf_len = pInput->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf_len;
83 pStore->TmoTuningPara.DetailsHighLight.HighLightData.EnvLv_len = pInput->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf_len;
84 pStore->TmoTuningPara.DetailsHighLight.HighLightData.Strength_len = pInput->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf_len;
85 memcpy(pStore->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf,
86 pInput->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf, sizeof(float)*pInput->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf_len);
87 memcpy(pStore->TmoTuningPara.DetailsHighLight.HighLightData.EnvLv,
88 pInput->TmoTuningPara.DetailsHighLight.HighLightData.EnvLv, sizeof(float)*pInput->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf_len);
89 memcpy(pStore->TmoTuningPara.DetailsHighLight.HighLightData.Strength,
90 pInput->TmoTuningPara.DetailsHighLight.HighLightData.Strength, sizeof(float)*pInput->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf_len);
91
92 //low light
93 int LowLightLen[4];
94 LowLightLen[0] = pInput->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma_len;
95 LowLightLen[1] = pInput->TmoTuningPara.DetailsLowLight.LowLightData.DarkPdf_len;
96 LowLightLen[2] = pInput->TmoTuningPara.DetailsLowLight.LowLightData.ISO_len;
97 LowLightLen[3] = pInput->TmoTuningPara.DetailsLowLight.LowLightData.Strength_len;
98 bool LowLightLenEqu = IfTmoDataEqu(LowLightLen, 4);
99 if(!LowLightLenEqu) {
100 LOGE_ATMO("%s: Input TMO Low Light Data length is NOT EQUAL !!!\n", __FUNCTION__ );
101 return XCAM_RETURN_ERROR_FAILED;
102 }
103 if(pStore->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma_len != pInput->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma_len) {
104 free(pStore->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma);
105 free(pStore->TmoTuningPara.DetailsLowLight.LowLightData.DarkPdf);
106 free(pStore->TmoTuningPara.DetailsLowLight.LowLightData.ISO);
107 free(pStore->TmoTuningPara.DetailsLowLight.LowLightData.Strength);
108 pStore->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma =
109 (float *) malloc(sizeof(float) * pInput->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma_len);
110 pStore->TmoTuningPara.DetailsLowLight.LowLightData.DarkPdf =
111 (float *) malloc(sizeof(float) * pInput->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma_len);
112 pStore->TmoTuningPara.DetailsLowLight.LowLightData.ISO =
113 (float *) malloc(sizeof(float) * pInput->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma_len);
114 pStore->TmoTuningPara.DetailsLowLight.LowLightData.Strength =
115 (float *) malloc(sizeof(float) * pInput->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma_len);
116 }
117 pStore->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma_len = pInput->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma_len;
118 pStore->TmoTuningPara.DetailsLowLight.LowLightData.DarkPdf_len = pInput->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma_len;
119 pStore->TmoTuningPara.DetailsLowLight.LowLightData.ISO_len = pInput->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma_len;
120 pStore->TmoTuningPara.DetailsLowLight.LowLightData.Strength_len = pInput->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma_len;
121 memcpy(pStore->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma,
122 pInput->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma, sizeof(float)*pInput->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma_len);
123 memcpy(pStore->TmoTuningPara.DetailsLowLight.LowLightData.DarkPdf,
124 pInput->TmoTuningPara.DetailsLowLight.LowLightData.DarkPdf, sizeof(float)*pInput->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma_len);
125 memcpy(pStore->TmoTuningPara.DetailsLowLight.LowLightData.ISO,
126 pInput->TmoTuningPara.DetailsLowLight.LowLightData.ISO, sizeof(float)*pInput->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma_len);
127 memcpy(pStore->TmoTuningPara.DetailsLowLight.LowLightData.Strength,
128 pInput->TmoTuningPara.DetailsLowLight.LowLightData.Strength, sizeof(float)*pInput->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma_len);
129
130 //global tmo
131 int GlobalTMOLen[3];
132 GlobalTMOLen[0] = pInput->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange_len;
133 GlobalTMOLen[1] = pInput->TmoTuningPara.GlobaTMO.GlobalTmoData.EnvLv_len;
134 GlobalTMOLen[2] = pInput->TmoTuningPara.GlobaTMO.GlobalTmoData.Strength_len;
135 bool GlobalTMOLenEqu = IfTmoDataEqu(GlobalTMOLen, 3);
136 if(!GlobalTMOLenEqu) {
137 LOGE_ATMO("%s: Input TMO GlobalTMO Data length is NOT EQUAL !!!\n", __FUNCTION__ );
138 return XCAM_RETURN_ERROR_FAILED;
139 }
140 if(pStore->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange_len != pInput->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange_len) {
141 free(pStore->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange);
142 free(pStore->TmoTuningPara.GlobaTMO.GlobalTmoData.EnvLv);
143 free(pStore->TmoTuningPara.GlobaTMO.GlobalTmoData.Strength);
144 pStore->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange =
145 (float *) malloc(sizeof(float) * pInput->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange_len);
146 pStore->TmoTuningPara.GlobaTMO.GlobalTmoData.EnvLv =
147 (float *) malloc(sizeof(float) * pInput->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange_len);
148 pStore->TmoTuningPara.GlobaTMO.GlobalTmoData.Strength =
149 (float *) malloc(sizeof(float) * pInput->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange_len);
150 }
151 pStore->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange_len = pInput->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange_len;
152 pStore->TmoTuningPara.GlobaTMO.GlobalTmoData.EnvLv_len = pInput->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange_len;
153 pStore->TmoTuningPara.GlobaTMO.GlobalTmoData.Strength_len = pInput->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange_len;
154 memcpy(pStore->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange,
155 pInput->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange, sizeof(float)*pInput->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange_len);
156 memcpy(pStore->TmoTuningPara.GlobaTMO.GlobalTmoData.EnvLv,
157 pInput->TmoTuningPara.GlobaTMO.GlobalTmoData.EnvLv, sizeof(float)*pInput->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange_len);
158 memcpy(pStore->TmoTuningPara.GlobaTMO.GlobalTmoData.Strength,
159 pInput->TmoTuningPara.GlobaTMO.GlobalTmoData.Strength, sizeof(float)*pInput->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange_len);
160
161 //local tmo
162 int LocalTMOLen[3];
163 LocalTMOLen[0] = pInput->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange_len;
164 LocalTMOLen[1] = pInput->TmoTuningPara.LocalTMO.LocalTmoData.EnvLv_len;
165 LocalTMOLen[2] = pInput->TmoTuningPara.LocalTMO.LocalTmoData.Strength_len;
166 bool LocalTMOLenEqu = IfTmoDataEqu(LocalTMOLen, 3);
167 if(!LocalTMOLenEqu) {
168 LOGE_ATMO("%s: Input TMO LocalTMO Data length is NOT EQUAL !!!\n", __FUNCTION__ );
169 return XCAM_RETURN_ERROR_FAILED;
170 }
171 if(pStore->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange_len != pInput->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange_len) {
172 //free
173 free(pStore->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange);
174 free(pStore->TmoTuningPara.LocalTMO.LocalTmoData.EnvLv);
175 free(pStore->TmoTuningPara.LocalTMO.LocalTmoData.Strength);
176 //malloc
177 pStore->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange =
178 (float *) malloc(sizeof(float) * pInput->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange_len);
179 pStore->TmoTuningPara.LocalTMO.LocalTmoData.EnvLv =
180 (float *) malloc(sizeof(float) * pInput->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange_len);
181 pStore->TmoTuningPara.LocalTMO.LocalTmoData.Strength =
182 (float *) malloc(sizeof(float) * pInput->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange_len);
183 //store len
184 pStore->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange_len = pInput->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange_len;
185 pStore->TmoTuningPara.LocalTMO.LocalTmoData.EnvLv_len = pInput->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange_len;
186 pStore->TmoTuningPara.LocalTMO.LocalTmoData.Strength_len = pInput->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange_len;
187 }
188 memcpy(pStore->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange,
189 pInput->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange, sizeof(float)*pInput->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange_len);
190 memcpy(pStore->TmoTuningPara.LocalTMO.LocalTmoData.EnvLv,
191 pInput->TmoTuningPara.LocalTMO.LocalTmoData.EnvLv, sizeof(float)*pInput->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange_len);
192 memcpy(pStore->TmoTuningPara.LocalTMO.LocalTmoData.Strength,
193 pInput->TmoTuningPara.LocalTMO.LocalTmoData.Strength, sizeof(float)*pInput->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange_len);
194
195
196 pStore->TmoTuningPara.Enable = pInput->TmoTuningPara.Enable;
197 pStore->TmoTuningPara.GlobalLuma.Mode = pInput->TmoTuningPara.GlobalLuma.Mode;
198 pStore->TmoTuningPara.GlobalLuma.Tolerance = pInput->TmoTuningPara.GlobalLuma.Tolerance;
199 pStore->TmoTuningPara.DetailsHighLight.Mode = pInput->TmoTuningPara.DetailsHighLight.Mode;
200 pStore->TmoTuningPara.DetailsHighLight.Tolerance = pInput->TmoTuningPara.DetailsHighLight.Tolerance;
201 pStore->TmoTuningPara.DetailsLowLight.Mode = pInput->TmoTuningPara.DetailsLowLight.Mode;
202 pStore->TmoTuningPara.DetailsLowLight.Tolerance = pInput->TmoTuningPara.DetailsLowLight.Tolerance;
203 pStore->TmoTuningPara.LocalTMO.Mode = pInput->TmoTuningPara.LocalTMO.Mode;
204 pStore->TmoTuningPara.LocalTMO.Tolerance = pInput->TmoTuningPara.LocalTMO.Tolerance;
205 pStore->TmoTuningPara.GlobaTMO.Mode = pInput->TmoTuningPara.GlobaTMO.Mode;
206 pStore->TmoTuningPara.GlobaTMO.Tolerance = pInput->TmoTuningPara.GlobaTMO.Tolerance;
207 pStore->TmoTuningPara.GlobaTMO.Enable = pInput->TmoTuningPara.GlobaTMO.Enable;
208 pStore->TmoTuningPara.GlobaTMO.IIR = pInput->TmoTuningPara.GlobaTMO.IIR;
209 pStore->TmoTuningPara.damp = pInput->TmoTuningPara.damp;
210
211 return ret;
212 }
213
214 XCamReturn
rk_aiq_uapi_atmo_SetAttrib(RkAiqAlgoContext * ctx,atmo_attrib_t attr,bool need_sync)215 rk_aiq_uapi_atmo_SetAttrib
216 (
217 RkAiqAlgoContext* ctx,
218 atmo_attrib_t attr,
219 bool need_sync
220 )
221 {
222 XCamReturn ret = XCAM_RETURN_NO_ERROR;
223
224 if(ctx == NULL) {
225 LOGE_ATMO("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
226 return XCAM_RETURN_ERROR_PARAM;
227 }
228
229 AtmoContext_t* pAtmoCtx = (AtmoContext_t*)(ctx->AtmoInstConfig.hAtmo);
230
231 //Todo
232 pAtmoCtx->tmoAttr.opMode = attr.opMode;
233 if(attr.opMode == TMO_OPMODE_SET_LEVEL)
234 memcpy(&pAtmoCtx->tmoAttr.stSetLevel, &attr.stSetLevel, sizeof(FastMode_t));
235 if(attr.opMode == TMO_OPMODE_DARKAREA)
236 memcpy(&pAtmoCtx->tmoAttr.stDarkArea, &attr.stDarkArea, sizeof(DarkArea_t));
237 if(attr.opMode == TMO_OPMODE_TOOL)
238 ret = rk_aiq_uapi_atmo_SetTool(&pAtmoCtx->tmoAttr.stTool, &attr.stTool);
239
240 if (attr.opMode == TMO_OPMODE_AUTO) {
241 pAtmoCtx->tmoAttr.stAuto.bUpdateTmo = attr.stAuto.bUpdateTmo;
242 memcpy(&pAtmoCtx->tmoAttr.stAuto.stTmoAuto, &attr.stAuto.stTmoAuto, sizeof(atmoAttr_t));
243 }
244 else
245 pAtmoCtx->tmoAttr.stAuto.bUpdateTmo = false;
246
247 if (attr.opMode == TMO_OPMODE_MANU) {
248 pAtmoCtx->tmoAttr.stManual.bUpdateTmo = attr.stManual.bUpdateTmo;
249 memcpy(&pAtmoCtx->tmoAttr.stManual.stTmoManual, &attr.stManual.stTmoManual, sizeof(mtmoAttr_t));
250 }
251 else
252 pAtmoCtx->tmoAttr.stManual.bUpdateTmo = false;
253
254 return ret;
255 }
256
257 XCamReturn
rk_aiq_uapi_atmo_GetAttrib(RkAiqAlgoContext * ctx,atmo_attrib_t * attr)258 rk_aiq_uapi_atmo_GetAttrib
259 (
260 RkAiqAlgoContext* ctx,
261 atmo_attrib_t* attr
262 )
263 {
264 XCamReturn ret = XCAM_RETURN_NO_ERROR;
265
266 if(ctx == NULL || attr == NULL) {
267 LOGE_ATMO("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
268 return XCAM_RETURN_ERROR_PARAM;
269 }
270
271 AtmoContext_t* pAtmoCtx = (AtmoContext_t*)ctx->AtmoInstConfig.hAtmo;
272
273 attr->opMode = pAtmoCtx->tmoAttr.opMode;
274 memcpy(&attr->stAuto.stTmoAuto, &pAtmoCtx->tmoAttr.stAuto.stTmoAuto, sizeof(atmoAttr_t));
275 memcpy(&attr->stManual.stTmoManual, &pAtmoCtx->tmoAttr.stManual.stTmoManual, sizeof(mtmoAttr_t));
276 memcpy(&attr->stSetLevel, &pAtmoCtx->tmoAttr.stSetLevel, sizeof(FastMode_t));
277 memcpy(&attr->stDarkArea, &pAtmoCtx->tmoAttr.stDarkArea, sizeof(DarkArea_t));
278 ret = rk_aiq_uapi_atmo_SetTool(&attr->stTool, &pAtmoCtx->tmoAttr.stTool);
279 memcpy(&attr->stTool, &pAtmoCtx->tmoAttr.stTool, sizeof(CalibDbV2_tmo_t));
280 memcpy(&attr->CtlInfo, &pAtmoCtx->tmoAttr.CtlInfo, sizeof(TmoCurrCtlData_t));
281 memcpy(&attr->RegInfo, &pAtmoCtx->tmoAttr.RegInfo, sizeof(TmoCurrRegData_t));
282
283 return ret;
284 }
285
286
287