hv_mw_OsdUserdata.c 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  1. /**
  2. * @file hv_mw_OsdUserdata.c
  3. * @brief osd userdata c file.
  4. * @details This file provides the following functions: \n
  5. * (1) Osd userdata functions \n
  6. *
  7. * @author HiView SoC Software Team
  8. * @version 1.0.0
  9. * @date 2022-09-01
  10. * @copyright Copyright(c),2022-8, Hiview Software. All rights reserved.
  11. * @par History:
  12. * <table>
  13. * <tr><th>Author <th>Date <th>Change Description
  14. * <tr><td>shanpeng <td>2022-09-01 <td>create
  15. * </table>
  16. */
  17. #ifdef OSD_ITEM_BIND_USERDATA_BY_TOOL
  18. #include "hv_mw_OsdLog.h"
  19. #include "hv_mw_OsdUserdata.h"
  20. #include "hv_app_Function.h"
  21. #include "hv_drv_Gpio.h"
  22. VOID Hv_Mw_SetFromOsdUserdata(UserdataId enUserdata)
  23. {
  24. HV_ASSERT_TRUE_VOID((E_USERDATA_NONE != enUserdata) && (enUserdata < E_USERDATA_MAX));
  25. SHORT16 sValue = Hv_App_GetOsdDataValue(enUserdata);
  26. Hv_Mw_OsdAdjustFunction(enUserdata, ACT_SET, sValue, SET_INTERFACE);
  27. }
  28. VOID Hv_Mw_OsdUserdataUpdate(UserdataId enWhichData)
  29. {
  30. UserdataProp stOsdDataProp = { 0 };
  31. Hv_App_OsdGetUserdata(enWhichData, &stOsdDataProp);
  32. SHORT16 sOsdValue = 0;
  33. OSD_LOG_DEBUG("Update userdata: %s", Hv_App_GetUserdataName(enWhichData));
  34. if (E_NO_MAP == stOsdDataProp.enMappingType)
  35. {
  36. sOsdValue = stOsdDataProp.sRealValue;
  37. OSD_LOG_DEBUG("Get no mapped value = %d", sOsdValue);
  38. }
  39. else if (E_ENUM_MAP == stOsdDataProp.enMappingType)
  40. {
  41. UCHAR8 ucValueId = 0;
  42. for (; ucValueId < stOsdDataProp.stEnumMap.usCount; ucValueId++)
  43. {
  44. if (stOsdDataProp.sRealValue == stOsdDataProp.stEnumMap.asRealValueMapTable[ucValueId])
  45. {
  46. break;
  47. }
  48. }
  49. sOsdValue = ucValueId;
  50. if (sOsdValue >= stOsdDataProp.stEnumMap.usCount)
  51. {
  52. OSD_LOG_ERROR("Userdata-%d, real value = %d not found!", enWhichData, stOsdDataProp.sRealValue);
  53. sOsdValue = 0;
  54. }
  55. else
  56. {
  57. OSD_LOG_DEBUG("Get enum map value = %d (real value=%d)", sOsdValue, stOsdDataProp.sRealValue);
  58. }
  59. }
  60. else if (E_LINEAR_MAP == stOsdDataProp.enMappingType)
  61. {
  62. sOsdValue = LINEAR_MAPPING_VALUE(stOsdDataProp.sRealValue, stOsdDataProp.stLinerMap.sRealMinValue, stOsdDataProp.stLinerMap.sRealMaxValue,
  63. stOsdDataProp.sMinValue, stOsdDataProp.sMaxValue);
  64. OSD_LOG_DEBUG("Get linear map value = %d (real value=%d)", sOsdValue, stOsdDataProp.sRealValue);
  65. }
  66. else if (E_LINEAR_REVERT_MAP == stOsdDataProp.enMappingType)
  67. {
  68. sOsdValue = LINEAR_REVERT_MAPPING_VALUE(stOsdDataProp.sRealValue, stOsdDataProp.stLinerMap.sRealMinValue, stOsdDataProp.stLinerMap.sRealMaxValue,
  69. stOsdDataProp.sMinValue, stOsdDataProp.sMaxValue);
  70. OSD_LOG_DEBUG("Get linear revert map value = %d (real value=%d)", sOsdValue, stOsdDataProp.sRealValue);
  71. }
  72. else
  73. {
  74. OSD_LOG_ERROR("Userdata-%d mapping type error!", enWhichData);
  75. return;
  76. }
  77. if (sOsdValue != stOsdDataProp.sOsdValue)
  78. {
  79. OSD_LOG_DEBUG("Update OsdUserdata-%d value: %d to %d", enWhichData, stOsdDataProp.sOsdValue, sOsdValue);
  80. Hv_App_OsdSetUserdata(enWhichData, sOsdValue);
  81. }
  82. }
  83. VOID Hv_Mw_OsdUserdataUpdateAll(VOID)
  84. {
  85. OSD_LOG_DEBUG("Osd userdata sync, num = %d", E_USERDATA_MAX);
  86. for (USHORT16 usId = 1; usId < E_USERDATA_MAX; usId++)
  87. {
  88. Hv_Mw_OsdUserdataUpdate(usId);
  89. }
  90. }
  91. SHORT16 Hv_Mw_OsdGetMappedOsdValue(UserdataId enWhichData, SHORT16 sRealValue)
  92. {
  93. UserdataProp stOsdDataProp = { 0 };
  94. Hv_App_OsdGetUserdata(enWhichData, &stOsdDataProp);
  95. SHORT16 sOsdValue = 0;
  96. OSD_LOG_DEBUG("Update userdata: %s", Hv_App_GetUserdataName(enWhichData));
  97. if (E_NO_MAP == stOsdDataProp.enMappingType)
  98. {
  99. sOsdValue = sRealValue;
  100. OSD_LOG_DEBUG("Get no mapped value = %d", sOsdValue);
  101. }
  102. else if (E_ENUM_MAP == stOsdDataProp.enMappingType)
  103. {
  104. UCHAR8 ucValueId = 0;
  105. for (; ucValueId < stOsdDataProp.stEnumMap.usCount; ucValueId++)
  106. {
  107. if (sRealValue == stOsdDataProp.stEnumMap.asRealValueMapTable[ucValueId])
  108. {
  109. break;
  110. }
  111. }
  112. sOsdValue = ucValueId;
  113. if (sOsdValue >= stOsdDataProp.stEnumMap.usCount)
  114. {
  115. OSD_LOG_ERROR("Userdata-%d, real value = %d not found!", enWhichData, sRealValue);
  116. sOsdValue = 0;
  117. }
  118. else
  119. {
  120. OSD_LOG_DEBUG("Get enum map value = %d (real value=%d)", sOsdValue, sRealValue);
  121. }
  122. }
  123. else if (E_LINEAR_MAP == stOsdDataProp.enMappingType)
  124. {
  125. sOsdValue = LINEAR_MAPPING_VALUE(sRealValue, stOsdDataProp.stLinerMap.sRealMinValue, stOsdDataProp.stLinerMap.sRealMaxValue,
  126. stOsdDataProp.sMinValue, stOsdDataProp.sMaxValue);
  127. OSD_LOG_DEBUG("Get linear map value = %d (real value=%d)", sOsdValue, sRealValue);
  128. }
  129. else if (E_LINEAR_REVERT_MAP == stOsdDataProp.enMappingType)
  130. {
  131. sOsdValue = LINEAR_REVERT_MAPPING_VALUE(sRealValue, stOsdDataProp.stLinerMap.sRealMinValue, stOsdDataProp.stLinerMap.sRealMaxValue,
  132. stOsdDataProp.sMinValue, stOsdDataProp.sMaxValue);
  133. OSD_LOG_DEBUG("Get linear revert map value = %d (real value=%d)", sOsdValue, sRealValue);
  134. }
  135. else
  136. {
  137. HV_ASSERT_TRUE_RET(stOsdDataProp.enMappingType <= E_LINEAR_REVERT_MAP, 0);
  138. }
  139. return sOsdValue;
  140. }
  141. SHORT16 Hv_Mw_OsdGetMappedRealValue(UserdataId enWhichData, SHORT16 sOsdValue)
  142. {
  143. UserdataProp stOsdDataProp = { 0 };
  144. Hv_App_OsdGetUserdata(enWhichData, &stOsdDataProp);
  145. SHORT16 sCurRealValue = 0;
  146. OSD_LOG_DEBUG("Get %s's real value:", Hv_App_GetUserdataName(enWhichData));
  147. if (E_NO_MAP == stOsdDataProp.enMappingType)
  148. {
  149. sCurRealValue = sOsdValue;
  150. OSD_LOG_DEBUG("OsdUserdata-%d OsdValue: %d no map to real = %d", enWhichData, sOsdValue, sCurRealValue);
  151. }
  152. else if (E_ENUM_MAP == stOsdDataProp.enMappingType)
  153. {
  154. HV_ASSERT_TRUE_RET(sOsdValue < stOsdDataProp.stEnumMap.usCount, 0);
  155. sCurRealValue = stOsdDataProp.stEnumMap.asRealValueMapTable[sOsdValue];
  156. OSD_LOG_DEBUG("OsdUserdata-%d OsdValue: %d enum map to real = %d", enWhichData, sOsdValue, sCurRealValue);
  157. }
  158. else if (E_LINEAR_MAP == stOsdDataProp.enMappingType)
  159. {
  160. sCurRealValue = LINEAR_MAPPING_VALUE(sOsdValue, stOsdDataProp.sMinValue, stOsdDataProp.sMaxValue,
  161. stOsdDataProp.stLinerMap.sRealMinValue, stOsdDataProp.stLinerMap.sRealMaxValue);
  162. OSD_LOG_DEBUG("OsdUserdata-%d OsdValue: %d linear map to real = %d", enWhichData, sOsdValue, sCurRealValue);
  163. }
  164. else if (E_LINEAR_REVERT_MAP == stOsdDataProp.enMappingType)
  165. {
  166. sCurRealValue = LINEAR_REVERT_MAPPING_VALUE(sOsdValue, stOsdDataProp.sMinValue, stOsdDataProp.sMaxValue,
  167. stOsdDataProp.stLinerMap.sRealMinValue, stOsdDataProp.stLinerMap.sRealMaxValue);
  168. OSD_LOG_DEBUG("OsdUserdata-%d OsdValue: %d linear revert map to real = %d", enWhichData, sOsdValue, sCurRealValue);
  169. }
  170. else
  171. {
  172. HV_ASSERT_TRUE_RET(stOsdDataProp.enMappingType <= E_LINEAR_REVERT_MAP, 0);
  173. }
  174. return sCurRealValue;
  175. }
  176. SHORT16 Hv_Mw_OsdAdjustFunction(UserdataId enWhichData, AdjustAct enAdjustAct, SHORT16 sAdjustValue, UCHAR8 ucFlag)
  177. {
  178. HV_ASSERT_TRUE_RET((E_USERDATA_NONE != enWhichData) && (enWhichData < E_USERDATA_MAX), 0);
  179. UserdataProp stProp = { 0 };
  180. SHORT16 sValue = 0;
  181. Hv_App_GetOsdUserdataProp(enWhichData, &stProp);
  182. switch (enAdjustAct)
  183. {
  184. case ACT_SET:
  185. {
  186. sValue = sAdjustValue;
  187. if (sValue > stProp.sMaxValue)
  188. {
  189. OSD_LOG_WARN("Userdata-%d: set value = %d, limit to max = %d", enWhichData, sValue, stProp.sMaxValue);
  190. sValue = stProp.sMaxValue;
  191. }
  192. else if (sValue < stProp.sMinValue)
  193. {
  194. OSD_LOG_WARN("Userdata-%d: set value = %d, limit to min = %d", enWhichData, sValue, stProp.sMinValue);
  195. sValue = stProp.sMinValue;
  196. }
  197. if (enWhichData == E_USERDATA_VIDEOSOURCE)
  198. {
  199. switch (sAdjustValue)
  200. {
  201. case UD_VIDEOSOURCE_V_HDMI1:
  202. {
  203. Hv_Drv_Gpio_SetPinLevel(HV_BOARD_CONFIG_GPIO_CH444G_YA, GPIO_LEVEL_HIGH);
  204. Hv_Drv_Gpio_SetPinLevel(HV_BOARD_CONFIG_GPIO_CH444G_YB, GPIO_LEVEL_LOW);
  205. break;
  206. }
  207. case UD_VIDEOSOURCE_V_HDMI2:
  208. {
  209. Hv_Drv_Gpio_SetPinLevel(HV_BOARD_CONFIG_GPIO_CH444G_YA, GPIO_LEVEL_LOW);
  210. Hv_Drv_Gpio_SetPinLevel(HV_BOARD_CONFIG_GPIO_CH444G_YB, GPIO_LEVEL_LOW);
  211. break;
  212. }
  213. case UD_VIDEOSOURCE_V_USB_C:
  214. {
  215. break;
  216. }
  217. case UD_VIDEOSOURCE_V_DP:
  218. {
  219. break;
  220. }
  221. default:
  222. {
  223. Hv_Drv_Gpio_SetPinLevel(HV_BOARD_CONFIG_GPIO_CH444G_YA, GPIO_LEVEL_HIGH);
  224. Hv_Drv_Gpio_SetPinLevel(HV_BOARD_CONFIG_GPIO_CH444G_YB, GPIO_LEVEL_LOW);
  225. break;
  226. }
  227. }
  228. }
  229. break;
  230. }
  231. case ACT_SET_DEFAULT:
  232. {
  233. sValue = GET_OSD_MAP_VALUE(enWhichData, stProp.sRealDefaultValue);
  234. break;
  235. }
  236. case ACT_INCREASE:
  237. {
  238. sValue = stProp.sOsdValue;
  239. sValue += sAdjustValue;
  240. if (sValue > stProp.sMaxValue)
  241. {
  242. if (stProp.bCircle)
  243. {
  244. sValue = stProp.sMinValue;
  245. }
  246. else
  247. {
  248. sValue = stProp.sMaxValue;
  249. }
  250. }
  251. break;
  252. }
  253. case ACT_DECREASE:
  254. {
  255. sValue = stProp.sOsdValue;
  256. sValue -= sAdjustValue;
  257. if (sValue < stProp.sMinValue)
  258. {
  259. if (stProp.bCircle)
  260. {
  261. sValue = stProp.sMaxValue;
  262. }
  263. else
  264. {
  265. sValue = stProp.sMinValue;
  266. }
  267. }
  268. break;
  269. }
  270. default:
  271. {
  272. return sValue;
  273. }
  274. }
  275. /* If just set interface, do not check userdata if equal */
  276. if ((0 == (ucFlag & SET_OSDDATA)) || (ucFlag & SET_FORCE))
  277. {
  278. OSD_LOG_DEBUG("Set %s = %d -> %d", Hv_App_GetUserdataName(enWhichData), stProp.sOsdValue, sValue);
  279. Hv_App_SetFuncInterface(enWhichData, sValue, ucFlag);
  280. }
  281. else if (stProp.sOsdValue != sValue)
  282. {
  283. OSD_LOG_DEBUG("Update %s = %d -> %d", Hv_App_GetUserdataName(enWhichData), stProp.sOsdValue, sValue);
  284. Hv_App_SetFuncInterface(enWhichData, sValue, ucFlag);
  285. }
  286. else
  287. {
  288. OSD_LOG_DEBUG("No need update %s = %d", Hv_App_GetUserdataName(enWhichData), stProp.sOsdValue);
  289. }
  290. return sValue;
  291. }
  292. #endif