展讯修改recovery OTA更新时红灯闪烁

文章描述了如何修改设备的init.rc、recovery.cpp和updater.cpp文件来控制在OTA更新过程中recovery模式下的红灯闪烁行为。通过调整权限和写入特定节点值,实现了红灯在不同阶段的闪烁效果,如进入recovery和开始更新时。这有助于在无屏幕设备上提供更新状态的视觉反馈。
摘要由CSDN通过智能技术生成

展讯修改recovery OTA更新时红灯闪烁:

有些项目没有屏, OTA更新是需要看到状态


修改

直接上修改diff, init.rc修改权限,
recovery.cpp修改刚进入recovery模式是红灯闪烁。
updater.cpp 修改开始更新是红灯闪烁。

const char* SER_LED_RED_BR = "/sys/class/leds/sc27xx:red/brightness";
+  //chmod(SER_LED_RED_BR,0666);
+  android::base::WriteStringToFile("255", SER_LED_RED_BR);
+
+  const char* SER_LED_RED = "/sys/class/leds/sc27xx:red/trigger";
+               //chmod(SER_LED_RED,0666);
+  android::base::WriteStringToFile("pattern", SER_LED_RED);
+  const char* SER_LED_HW = "/sys/class/leds/sc27xx:red/hw_pattern";
+               //chmod(SER_LED_HW,0666);
+  android::base::WriteStringToFile("50 255 875 255 75 255 1000 255", SER_LED_HW);

这里是修改核心,WriteStringToFile表示写节点, 不同平台的"/sys/class/leds/sc27xx:red/brightness";这个节点可能不一样,“50 255 875 255 75 255 1000 255” 这个表示闪烁频率,闪烁亮度等等,驱动参数的,自己查找相关文档即可

diff --git a/bootable/recovery/etc/init.rc b/bootable/recovery/etc/init.rc
old mode 100644
new mode 100755
index 188228f..9a642e2
--- a/bootable/recovery/etc/init.rc
+++ b/bootable/recovery/etc/init.rc
@@ -43,7 +43,19 @@ on boot
     domainname localdomain

     class_start default
-
+
+    wait /sys/class/leds/sc27xx:blue/brightness
+       chmod 0666 /sys/class/leds/sc27xx:blue/hw_pattern
+       chmod 0666 /sys/class/leds/sc27xx:blue/trigger
+       chmod 0666 /sys/class/leds/sc27xx:blue/brightness
+
+       wait /sys/class/leds/sc27xx:red/brightness
+       chmod 0666 /sys/class/leds/sc27xx:red/hw_pattern
+       chmod 0666 /sys/class/leds/sc27xx:red/trigger
+       chmod 0666 /sys/class/leds/sc27xx:red/brightness
+
+   //write /sys/class/leds/sc27xx:blue/brightness 200
+
 # Load properties from /system/ + /factory after fs mount.
 on load_system_props_action
     load_system_props
diff --git a/bootable/recovery/recovery.cpp b/bootable/recovery/recovery.cpp
old mode 100644
new mode 100755
diff --git a/bootable/recovery/etc/init.rc b/bootable/recovery/etc/init.rc
old mode 100644
new mode 100755
index 188228f..9a642e2
--- a/bootable/recovery/etc/init.rc
+++ b/bootable/recovery/etc/init.rc
@@ -43,7 +43,19 @@ on boot
     domainname localdomain

     class_start default
-
+
+    wait /sys/class/leds/sc27xx:blue/brightness
+       chmod 0666 /sys/class/leds/sc27xx:blue/hw_pattern
+       chmod 0666 /sys/class/leds/sc27xx:blue/trigger
+       chmod 0666 /sys/class/leds/sc27xx:blue/brightness
+
+       wait /sys/class/leds/sc27xx:red/brightness
+       chmod 0666 /sys/class/leds/sc27xx:red/hw_pattern
+       chmod 0666 /sys/class/leds/sc27xx:red/trigger
+       chmod 0666 /sys/class/leds/sc27xx:red/brightness
+
+   //write /sys/class/leds/sc27xx:blue/brightness 200
+
 # Load properties from /system/ + /factory after fs mount.
 on load_system_props_action
     load_system_props
diff --git a/bootable/recovery/recovery.cpp b/bootable/recovery/recovery.cpp
old mode 100644
new mode 100755
index 094b5a9..e88812f
--- a/bootable/recovery/recovery.cpp
+++ b/bootable/recovery/recovery.cpp
@@ -779,6 +779,20 @@ Device::BuiltinAction start_recovery(Device* device, const std::vector<std::stri
   // Parse everything before the last element (which must be a nullptr). getopt_long(3) expects a
   // null-terminated char* array, but without counting null as an arg (i.e. argv[argc] should be
   // nullptr).
+  //android::base::WriteStringToFile("255",SER_LED_REDBR);
+
+  const char* SER_LED_RED_BR = "/sys/class/leds/sc27xx:red/brightness";
+  //chmod(SER_LED_RED_BR,0666);
+  android::base::WriteStringToFile("255", SER_LED_RED_BR);
+
+  const char* SER_LED_RED = "/sys/class/leds/sc27xx:red/trigger";
+               //chmod(SER_LED_RED,0666);
+  android::base::WriteStringToFile("pattern", SER_LED_RED);
+  const char* SER_LED_HW = "/sys/class/leds/sc27xx:red/hw_pattern";
+               //chmod(SER_LED_HW,0666);
+  android::base::WriteStringToFile("50 255 875 255 75 255 1000 255", SER_LED_HW);
+
+
   while ((arg = getopt_long(args_to_parse.size() - 1, args_to_parse.data(), "", OPTIONS,
                             &option_index)) != -1) {
     switch (arg) {
diff --git a/bootable/recovery/updater/updater.cpp b/bootable/recovery/updater/updater.cpp
old mode 100644
new mode 100755
index 7b5a3f9..15d5122
--- a/bootable/recovery/updater/updater.cpp
+++ b/bootable/recovery/updater/updater.cpp
@@ -23,7 +23,11 @@

 #include <string>

+#include <android-base/file.h>
 #include <android-base/logging.h>
+#include <android-base/parseint.h>
+#include <android-base/properties.h>
+#include <android-base/stringprintf.h>
 #include <android-base/strings.h>
 #include <selinux/android.h>
 #include <selinux/label.h>
@@ -66,7 +70,18 @@ int main(int argc, char** argv) {
   // We don't have logcat yet under recovery. Update logs will always be written to stdout
   // (which is redirected to recovery.log).
   android::base::InitLogging(argv, &UpdaterLogger);
-
+  LOG(ERROR) << "led red is start: " << argc;
+  const char* SER_LED_RED_BR = "/sys/class/leds/sc27xx:red/brightness";
+  //chmod(SER_LED_RED_BR,0666);
+  android::base::WriteStringToFile("255", SER_LED_RED_BR);
+
+  const char* SER_LED_RED = "/sys/class/leds/sc27xx:red/trigger";
+               //chmod(SER_LED_RED,0666);
+  android::base::WriteStringToFile("pattern", SER_LED_RED);
+  const char* SER_LED_HW = "/sys/class/leds/sc27xx:red/hw_pattern";
+               //chmod(SER_LED_HW,0666);
+  android::base::WriteStringToFile("50 255 875 255 75 255 1000 255", SER_LED_HW);
+       LOG(ERROR) << "led red is light: " << argc;
   if (argc != 4 && argc != 5) {
     LOG(ERROR) << "unexpected number of arguments: " << argc;
     return 1;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xuyewen288

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值