[文章]

【HarmonyOS HiSpark AI Camera试用连载 】Setting->关于->设备名称等OEM信息修改

2021-1-17 13:18:17  123
分享

setting_info

0

原始信息.jpg
如上图与AI Camera初次相遇时设备名称等显示为“****”,这引起了我的好奇应该在哪里修改这些信息?于是查阅了下源码关于“设备名称”是在哪里显示的,这边我是搭建了一个harmony 的opengrok(如果有人感兴趣怎么搭建可以留言,我会再开一篇帖子写下如何搭建opengrok),查找了下有以下三个地方。
设备名称.png
  1. /openharmony/vendor/hisi/hi3861/hi3861/include/
  2. H A D        hi_btcoex_api.h        42 * [url=home.php?mod=space&uid=3142012]@param[/url] ifname [IN] Type #const char *, device name, e.g. wlan0.CNcomment:设备名称,如 wl…
  3. /openharmony/applications/sample/camera/setting/setting/src/main/cpp/
  4. H A D        setting_about_ability_slice.cpp        56 itemInfo_[0][0] = (char*) "设备名称"; // 0 in SetItemInfo()
  5. H A D        main_ability_slice.cpp        245 err = sprintf_s(buff, sizeof(buff), "设备名称: %s", gPT); in SetAboutButtonView()
复制代码
第一处是3861的直接pass掉。

我们接下来看剩下的两个地方
先看下
/openharmony/applications/sample/camera/setting/setting/src/main/cpp/setting_about_ability_slice.cpp
这边的代码如下
  1. 54  void SettingAboutAbilitySlice::SetItemInfo()
  2. 55  {
  3. 56      itemInfo_[0][0] = (char*) "设备名称"; // 0
  4. 57      itemInfo_[0][1] = GetProductType(); // 0
  5. 58      itemInfo_[1][0] = (char*) "厂家信息"; // 1
  6. 59      itemInfo_[1][1] = GetManufacture(); // 1
  7. 60      itemInfo_[2][0] = (char*) "品牌信息"; // 2
  8. 61      itemInfo_[2][1] = GetBrand(); // 2
  9. 62      itemInfo_[3][0] = (char*) "硬件版本号"; // 3
  10. 63      itemInfo_[3][1] = GetHardwareModel(); // 3
  11. 64      itemInfo_[4][0] = (char*) "设备序列号"; // 4
  12. 65      itemInfo_[4][1] = GetSerial(); // 4
  13. 66      itemInfo_[5][0] = (char*) "操作系统名"; // 5
  14. 67      itemInfo_[5][1] = GetOsName(); // 5
  15. 68      itemInfo_[6][0] = (char*) "软件版本号"; // 6
  16. 69      itemInfo_[6][1] = GetdisplayVersion(); // 6
  17. 70      itemInfo_[7][0] = (char*) "BootLoader版本号"; // 7
  18. 71      itemInfo_[7][1] = GetBootloaderVersion(); // 7
  19. 72      itemInfo_[8][0] = (char*) "构建时间"; // 8
  20. 73      itemInfo_[8][1] = GetBuildTime(); // 8
  21. 74  }
复制代码
从这边我们就能知道“关于”中的信息分别是调用哪支API 来拿到这些信息的了,等下我们在往下看。
这里再看下另一处是哪里的代码呢?
第二处是以下
/openharmony/applications/sample/camera/setting/setting/src/main/cpp/main_ability_slice.cpp
  1. void MainAbilitySlice::SetAboutButtonView(void)
  2. 213  {
  3. 214      UIViewGroup* buttonView = new UIViewGroup();
  4. 215      buttonView->SetPosition(ABOUT_BUTTON_X, ABOUT_BUTTON_Y, DE_BUTTON_WIDTH, ABOUT_BUTTON_HEIGHT);
  5. 216      buttonView->SetStyle(STYLE_BORDER_RADIUS, DE_BUTTON_RADIUS);
  6. 217      buttonView->SetStyle(STYLE_BACKGROUND_COLOR, DE_BUTTON_BACKGROUND_COLOR);
  7. 218      buttonView->SetTouchable(true);
  8. 219      buttonView->SetOnClickListener(buttonAboutListener_);
  9. 220      scrollView_->Add(buttonView);
  10. 221  
  11. 222      UILabel* lablelFontAbout = new UILabel();
  12. 223      lablelFontAbout->SetPosition(DE_TITLE_TEXT_X, ABOUT_BUTTON_TEXT_ABOUT_Y, DE_TITLE_TEXT_WIDTH, DE_TITLE_TEXT_HEIGHT);
  13. 224      lablelFontAbout->SetText("关于");
  14. 225      lablelFontAbout->SetFont(DE_FONT_OTF, DE_TITLE_TEXT_SIZE);
  15. 226      lablelFontAbout->SetStyle(STYLE_TEXT_COLOR, DE_TITLE_TEXT_COLOR);
  16. 227      buttonView->Add(lablelFontAbout);
  17. 228  
  18. 229      char buff[62];
  19. 230      char* gDV = GetDisplayVersion();
  20. 231      int err = sprintf_s(buff, sizeof(buff), "系统版本: %s", gDV);
  21. 232      if (err < 0) {
  22. 233          printf("[ERROR]sprintf_s faiLED, err = %d\n", err);
  23. 234          return;
  24. 235      }
  25. 236      free(gDV);
  26. 237      setAboutTest(buttonView, ABOUT_BUTTON_TEXT_SYSTEM_X, ABOUT_BUTTON_TEXT_SYSTEM_Y, buff);
  27. 238  
  28. 239      err = memset_s(buff, sizeof(buff), 0, sizeof(buff));
  29. 240      if (err < EOK) {
  30. 241          printf("[ERROR]memset_s failed, err = %d\n", err);
  31. 242          return;
  32. 243      }
  33. 244      char* gPT = GetProductType();
  34. 245      err = sprintf_s(buff, sizeof(buff), "设备名称: %s", gPT);
  35. 246      if (err < 0) {
  36. 247          printf("[ERROR]sprintf_s failed, err = %d\n", err);
  37. 248          return;
  38. 249      }
  39. 250      free(gPT);
  40. 251      setAboutTest(buttonView, ABOUT_BUTTON_TEXT_DEVICE_X, ABOUT_BUTTON_TEXT_DEVICE_Y, buff);
  41. 252  
  42. 253      UIImageView* imageView = new UIImageView();
  43. 254      imageView->SetPosition(DE_FORWARD_IMG_X, ABOUT_BUTTON_IMAGE_Y, DE_FORWARD_IMG_WIDTH, DE_FORWARD_IMG_HEIGHT);
  44. 255      imageView->SetSrc(DE_IMAGE_FORWORD);
  45. 256      buttonView->Add(imageView);
  46. 257  }
复制代码
阅读代码可知,这一段是在进入设置界面上显示的信息,如下图所示
关于按键1.jpg

这两个地方的“设备名称”均是通过GetProductType();这只API 来获取的
“系统版本”和“软件版本号”用的是同一只API,GetDisplayVersion();

接下来我们找一下GetProductType();和GetDisplayVersion();在哪里
查找一下
GetProductType.png
可以发现这两只API 多在以下这个档案,只是实现方法略有不同
/openharmony/base/startup/frameworks/syspara_lite/parameter/src/parameter_common.c
GetDisplayVersion();-> GetSysProperty();
  1. 158  char* GetDisplayVersion(void)
  2. 159  {
  3. 160      return GetSysProperty(g_roBuildVerShow, strlen(g_roBuildVerShow) + 1);
  4. 161  }
复制代码
GetSysProperty如下
  1.   static char* GetSysProperty(const char* propertyInfo, const size_t propertySize)
  2. 140  {
  3. 141      char* prop = (char*)malloc(propertySize);
  4. 142      if (prop == NULL) {
  5. 143          return NULL;
  6. 144      }
  7. 145      if (strcpy_s(prop, propertySize, propertyInfo) != 0) {
  8. 146          free(prop);
  9. 147          prop = NULL;
  10. 148          return NULL;
  11. 149      }
  12. 150      return prop;
  13. 151  }
复制代码
也就是说这里会拿到同个档案中的g_roBuildVerShow这个字符串
  1. static char g_roBuildVerShow[] = {"OpenHarmony 1.0"};
复制代码


而GetProductType();
  1.   char* GetProductType(void)
  2. 75  {
  3. 76      return HalGetProductType();
  4. 77  }
复制代码

会继续call到HalGetProductType();这只
HalGetProductType.png

查阅
/openharmony/vendor/huawei/camera/hals/utils/sys_param/hal_sys_param.c
  1. char* HalGetProductType(void)
  2. 34  {
  3. 35      char* value = (char*)malloc(strlen(OHOS_PRODUCT_TYPE) + 1);
  4. 36      if (value == NULL) {
  5. 37          return NULL;
  6. 38      }
  7. 39      if (strcpy_s(value, strlen(OHOS_PRODUCT_TYPE) + 1, OHOS_PRODUCT_TYPE) != 0) {
  8. 40          free(value);
  9. 41          return NULL;
  10. 42      }
  11. 43      return value;
  12. 44  }
复制代码
也就是设备名称显示的是OHOS_PRODUCT_TYPE,
在hal_sys_param.c 中还有定义如下,就是“关于”中的其他信息
  1. 19  static const char OHOS_PRODUCT_TYPE[] = {"****"};<span lang="en-US">//</span><span lang="zh-CN">设备名称</span>
  2. 20  static const char OHOS_MANUFACTURE[] = {"****"};<span lang="en-US">//</span><span lang="zh-CN">厂家信息</span>
  3. 21  static const char OHOS_BRAND[] = {"****"};<span lang="en-US">//</span><span lang="zh-CN">品牌信息系</span>
  4. 22  static const char OHOS_MARKET_NAME[] = {"****"};
  5. 23  static const char OHOS_PRODUCT_SERIES[] = {"****"};
  6. 24  static const char OHOS_PRODUCT_MODEL[] = {"****"};
  7. 25  static const char OHOS_SOFTWARE_MODEL[] = {"****"};
  8. 26  static const char OHOS_HARDWARE_MODEL[] = {"****"};<span lang="en-US">//</span><span lang="zh-CN">硬件版本号</span>
  9. 27  static const char OHOS_HARDWARE_PROFILE[] = {"aout:true,display:true"};
  10. 28  static const char OHOS_BOOTLOADER_VERSION[] = {"bootloader"};<span lang="en-US">//BootLoader</span><span lang="zh-CN">版本号</span>
  11. 29  static const char OHOS_SECURITY_PATCH_TAG[] = {"2020-09-01"};
  12. 30  static const char OHOS_ABI_LIST[] = {"****"};
  13. 31  static const char OHOS_SERIAL[] = {"1234567890"}; <span lang="x-none">// </span><span lang="zh-CN">设备序列号</span>
复制代码
所以想要修改OEM信息,只要在hal_sys_param.c 修改以上信息即可。
还有一部分是直接在parameter_common.c,如果感兴趣的朋友就去研究下这两个档案吧。

评论

您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发文章