增加绑定的实际数据
authorCaisking <Casiking@zhihuishixun.com>
Thu, 18 Sep 2025 14:40:25 +0000 (22:40 +0800)
committerCaisking <Casiking@zhihuishixun.com>
Thu, 18 Sep 2025 14:40:25 +0000 (22:40 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/include/ThunderBirdGuideView.h
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/include/ThunderBirdModel.h
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdGuideView.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdPresenter.cpp
code/sdk/zhihui/leiniao/imsl_ln/ln_api.c

index e705b46..8456fde 100644 (file)
@@ -19,6 +19,7 @@ namespace OHOS
         UIViewGroup *ThunderBirdGuideViewInit(void);
         void ClearAll(void);
         void Show(int16_t showView);
+        void UpdateQrcode();
 
         enum : int16_t {
             THUNDERBIRD_GUIDEVIEW_1 = 0,
index 85ad1d3..7c00ae3 100644 (file)
@@ -90,6 +90,22 @@ namespace OHOS
         size_t GetTextLength() const;
         bool IsTextEmpty() const;
 
+        // 二维码相关函数
+        std::string GetQrcodeContent();
+        
+        // 设备ID验证相关函数
+        std::string GetDeviceId();
+        bool IsDeviceIdValid();
+        bool ValidateIMEIChecksum(const std::string& imei);
+        
+        // 版本管理相关函数
+        std::string GetAppVersion();
+        std::string GetFirmwareVersion();
+        std::string GetBuildVersion();
+        std::string GetGitHash();
+        std::string GetBuildTime();
+        bool IsVersionValid();
+
     private:
         ThunderBirdModel();
         virtual ~ThunderBirdModel();
index b6fa843..1283954 100644 (file)
@@ -79,7 +79,7 @@ namespace OHOS
         if (qrcode_)
         {
             qrcode_->SetPosition(133, 169, 104, 104);
-            qrcode_->SetQrcodeInfo("https://example.com/device/bind?deviceId=DEVICE_001");
+            qrcode_->SetQrcodeInfo(ThunderBirdModel::GetInstance()->GetQrcodeContent().c_str());
             qrcode_->SetStyle(STYLE_PADDING_LEFT, 4);
             qrcode_->SetStyle(STYLE_PADDING_RIGHT, 4);
             qrcode_->SetStyle(STYLE_PADDING_TOP, 4);
@@ -250,6 +250,17 @@ namespace OHOS
             break;
         }
     }
+    //更新二维码
+    void ThunderBirdGuideView::UpdateQrcode()
+    {
+        if (qrcode_)
+        {
+            qrcode_->SetQrcodeInfo(ThunderBirdModel::GetInstance()->GetQrcodeContent().c_str());
+            //打印
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "qrcode path:%s", ThunderBirdModel::GetInstance()->GetQrcodePath().c_str());
+            qrcode_->Invalidate();//刷新
+        }
+    }
 }
 
 
index ea7141c..eef97d5 100644 (file)
      {
          return m_currentTimeStr.empty();
      }
+
+     //获取设备ID
+     std::string ThunderBirdModel::GetDeviceId()
+     {
+        return std::string(uapi_ln_get_device_id());
+     }
+
+     //判断设备id是否有效
+     bool ThunderBirdModel::IsDeviceIdValid()
+     {
+         // 获取设备ID(IMEI)
+         std::string deviceId = GetDeviceId();
+         
+         // 检查是否为空
+         if (deviceId.empty()) {
+             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::IsDeviceIdValid: Device ID is empty");
+             return false;
+         }
+         
+         // 检查长度(IMEI应该是15位)
+         if (deviceId.length() != 15) {
+             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::IsDeviceIdValid: Invalid length %zu, expected 15", deviceId.length());
+             return false;
+         }
+         
+         // 检查是否全为数字
+         for (char c : deviceId) {
+             if (!std::isdigit(c)) {
+                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::IsDeviceIdValid: Contains non-digit character: %c", c);
+                 return false;
+             }
+         }
+         
+         // 检查是否包含默认值或无效值
+         if (deviceId == "000000000000000" || deviceId == "123456789012345") {
+             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::IsDeviceIdValid: Device ID is default/invalid value: %s", deviceId.c_str());
+             return false;
+         }
+         
+         // 检查IMEI校验位(Luhn算法)
+         if (!ValidateIMEIChecksum(deviceId)) {
+             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::IsDeviceIdValid: IMEI checksum validation failed");
+             return false;
+         }
+         
+         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::IsDeviceIdValid: Valid device ID: %s", deviceId.c_str());
+         return true;
+     }
+     
+     // IMEI校验位验证(Luhn算法)
+     bool ThunderBirdModel::ValidateIMEIChecksum(const std::string& imei)
+     {
+         if (imei.length() != 15) {
+             return false;
+         }
+         
+         int sum = 0;
+         
+         // 处理前14位数字(从右到左,偶数位需要乘以2)
+         for (int i = 0; i < 14; i++) {
+             int digit = imei[i] - '0';
+             
+             // 偶数位(从0开始计数,所以i为奇数时是偶数位)需要乘以2
+             if (i % 2 == 1) {
+                 digit *= 2;
+                 if (digit > 9) {
+                     digit -= 9; // 等同于 digit/10 + digit%10
+                 }
+             }
+             
+             sum += digit;
+         }
+         
+         // 计算校验位:(10 - (sum % 10)) % 10
+         int checkDigit = (10 - (sum % 10)) % 10;
+         int actualCheckDigit = imei[14] - '0';
+         
+         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ValidateIMEIChecksum: sum=%d, calculated=%d, actual=%d", 
+                      sum, checkDigit, actualCheckDigit);
+         
+         return checkDigit == actualCheckDigit;
+     }
+
+     //获取二维码内容
+     std::string ThunderBirdModel::GetQrcodeContent()
+     {
+        std::string qrcodeContent = "https://example.com/device/bind?deviceId=" + GetDeviceId();
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::GetQrcodeContent: %s", qrcodeContent.c_str());
+        return qrcodeContent;
+     }
+
+     /**
+        表情配置相关函数
+        1、表情结构体
+            struct character{
+            string characterId;//角色ID
+            string characterName;//角色名称
+            string hairColor;//发色
+            string hairStyle;//发型
+            string eyesColor;//瞳色
+            string eyesShape;//眼型
+            string screenImage;//屏保图片
+            bool screenImageAsEmoji;//屏保图片是否作为对话表情
+            }
+        2、表情配置相关函数 
+            2.1 下载表情的路径 /user/userdata/characterId/(以角色ID为文件夹)
+            2.2 切换表情接口
+            2.3 获取表情接口
+            2.4 删除表情接口
+     */
+
+
+     
  
  /*
          1、新手引导 
index 25bbe9a..721a0bd 100644 (file)
@@ -366,10 +366,10 @@ namespace OHOS
     {
        
         //如果在二维码界面 判断是否绑定
-        if(ThunderBirdMainView::GetInstance()!=  nullptr)
+        if(ThunderBirdMainView::GetInstance() != nullptr)
        { 
-        int16_t currentView = ThunderBirdMainView::GetInstance()->GetCurrentView();
-        int16_t currentSubView = ThunderBirdMainView::GetInstance()->GetCurrentSubView();
+            int16_t currentView = ThunderBirdMainView::GetInstance()->GetCurrentView();
+            int16_t currentSubView = ThunderBirdMainView::GetInstance()->GetCurrentSubView();
             //如果在二维码界面 要一直判断绑定状态 绑定成功就返回主界面
             if(currentSubView == ThunderBirdGuideView::THUNDERBIRD_GUIDEVIEW_3)
             {
@@ -379,6 +379,15 @@ namespace OHOS
                     //绑定成功
                     ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING);
                 }
+                else 
+                {
+                    //判断二维码的有效性
+                    if(ThunderBirdModel::GetInstance()->IsDeviceIdValid())
+                    {
+                        //更新二维码
+                        ThunderBirdGuideView::GetInstance()->UpdateQrcode();
+                    }
+                }
             }
         }
     }
index 1777e2b..fde8a8c 100644 (file)
@@ -37,19 +37,19 @@ char g_ln_last_target_version[64] = {0}; // 最近一次查询到的 OTA 包目
 char g_ln_last_package_md5[65] = {0};    // 最近一次查询到的 OTA 包 MD5
 int g_ln_last_package_size = 0;          // 最近一次查询到的 OTA 包大小(字节)
 static int g_ln_audio_download_cancel = 0; /* 0=正常, 1=取消 */
-int g_ln_is_device_bound = -1;           /* 设备绑定状态 */
+int g_ln_is_device_bound = 0;           /* 设备绑定状态 */
 char g_ln_device_user_id[64] = {0};      // 设备绑定用户ID
 
 /* 获取设备id: 设备唯一标识 */
 char *uapi_ln_get_device_id(void)
 {
-    g_device_id = "DEVICE_PC_TEST_001";
+    g_device_id = cat1_api_runtime_get_cat1_imei();
     return g_device_id;
 }
 /* 获取设备iccid:设备物联网卡号 */
 char *uapi_ln_get_device_iccid(void)
 {
-    g_device_iccid = "86123456789012345678";
+    g_device_iccid = ppp_api_update_imei();
     return g_device_iccid;
 }
 /* 获取设备model */