gt9271_update_cfg.bat

本文介绍了如何通过ADB(AndroidDebugBridge)对GT9271设备进行固件更新,包括设备连接、配置文件推送和执行i2c操作的详细步骤。

::@echo off
@title gt9271 update cfg by adb

adb wait-for-device
adb push V1.2_T101WS0016AWA01_GT9271_Config_20240123_100149.cfg /data/
adb push ui2c /data/xbin/ui2c
adb shell chmod +x /data/xbin/ui2c

adb shell /data/xbin/ui2c -f /dev/i2c-0 -c 0x5d -F /data/V1.2_T101WS0016AWA01_GT9271_Config_20240123_100149.cfg

pause

你提供的函数 `arp_scan_cfg_set` 是用于设置 ARP 扫描配置的函数,将传入的配置结构体 `cfg` 拷贝到全局配置变量 `g_arp_scan_cfg_user` 中,并记录日志。 --- ### ✅ 函数原型分析: ```c STATUS arp_scan_cfg_set(ARP_SCAN_CFG cfg) ``` - **函数名**:`arp_scan_cfg_set` - **参数**:`cfg`,表示要设置的新的 ARP 扫描配置 - **返回值**:`STATUS`,通常为 `OK` 表示成功,`ERROR` 表示失败 --- ### ✅ 函数逻辑详解: ```c g_arp_scan_cfg_user.enabled = cfg.enabled; g_arp_scan_cfg_user.cycle = cfg.cycle; g_arp_scan_cfg_user.valid = cfg.valid; g_arp_scan_cfg_user.interval = cfg.interval; strcpy(g_arp_scan_cfg_user.ip_start, cfg.ip_start); strcpy(g_arp_scan_cfg_user.ip_end, cfg.ip_end); ``` - **逐字段赋值**:将传入的配置结构体字段逐个赋值给全局配置结构体 `g_arp_scan_cfg_user`。 - **IP地址拷贝**:使用 `strcpy` 拷贝 IP 地址字符串,**需要注意缓冲区大小是否足够**,否则可能造成溢出。 --- ### ⚠️ 潜在问题: 1. **`strcpy` 的风险**: - 如果 `ip_start` 和 `ip_end` 是字符数组(如 `char ip_start[16]`),使用 `strcpy` 有可能导致缓冲区溢出。 - 建议使用 `strncpy` 并手动补 `\0`: ```c strncpy(g_arp_scan_cfg_user.ip_start, cfg.ip_start, sizeof(g_arp_scan_cfg_user.ip_start) - 1); g_arp_scan_cfg_user.ip_start[sizeof(g_arp_scan_cfg_user.ip_start) - 1] = '\0'; ``` 2. **注释掉的 memcpy**: ```c // memcpy(&g_arp_scan_cfg_user, &cfg, sizeof(ARP_SCAN_CFG)); ``` - 这种方式更高效,但前提是结构体中不能包含指针或动态资源。 - 若结构体中字段为固定大小(如整型、数组),可安全使用。 --- ### ✅ 日志输出: ```c ARP_LOG_OP("cfg set [enabled] %u [cycle] %u [valid] %u [interval] %u \n", ...); ARP_LOG_OP("cfg set [ip_start] %s [ip_end] %s\n", ...); ``` - 使用宏 `ARP_LOG_OP` 输出配置信息,便于调试和审计。 - 格式化字符串与参数匹配,建议检查是否遗漏参数或类型错误。 --- ### ✅ 改进后的函数示例: ```c STATUS arp_scan_cfg_set(ARP_SCAN_CFG cfg) { g_arp_scan_cfg_user.enabled = cfg.enabled; g_arp_scan_cfg_user.cycle = cfg.cycle; g_arp_scan_cfg_user.valid = cfg.valid; g_arp_scan_cfg_user.interval = cfg.interval; // 使用安全拷贝方式 strncpy(g_arp_scan_cfg_user.ip_start, cfg.ip_start, sizeof(g_arp_scan_cfg_user.ip_start) - 1); g_arp_scan_cfg_user.ip_start[sizeof(g_arp_scan_cfg_user.ip_start) - 1] = '\0'; strncpy(g_arp_scan_cfg_user.ip_end, cfg.ip_end, sizeof(g_arp_scan_cfg_user.ip_end) - 1); g_arp_scan_cfg_user.ip_end[sizeof(g_arp_scan_cfg_user.ip_end) - 1] = '\0'; ARP_LOG_OP("cfg set [enabled] %u [cycle] %u [valid] %u [interval] %u \n", g_arp_scan_cfg_user.enabled, g_arp_scan_cfg_user.cycle, g_arp_scan_cfg_user.valid, g_arp_scan_cfg_user.interval); ARP_LOG_OP("cfg set [ip_start] %s [ip_end] %s\n", g_arp_scan_cfg_user.ip_start, g_arp_scan_cfg_user.ip_end); return OK; } ``` --- ### ✅ 总结: 该函数用于设置 ARP 扫描配置,将传入的结构体内容赋值给全局配置结构体,并记录日志。使用时需注意字符串拷贝的安全性,推荐使用 `strncpy` 避免缓冲区溢出。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值