feat(ble): 完善BLE OTA架构并优化性能
- 实现BLE OTA数据路径分离:添加ble_ota_data.cpp处理重排序/工作线程/DATA_IN, 和ble_ota_host.cpp处理GATT/GAP/广播/主机功能 - 将滑动ACK窗口从32增大到64,实测Windows WebBT环境下固件传输速度提升约10% (从40KB/s提升到44KB/s),内存消耗约30KB重排序缓冲区 - 优化调试日志级别,将OTA相关信息从INFO调整为DBG以减少日志冗余 refactor(can): 改进CAN反馈监听机制 - 将CAN反馈任务从1Hz主动轮询模式改为被动事件监听模式, 使用SpiMaster::takeEvent()替代主动发送0xC1轮询请求 - 更新相关头文件注释说明架构变更,将"周期性轮询"改为"被动接收推送" - 修改调试日志级别,将暂停/恢复状态日志从INFO调整为DBG
This commit is contained in:
+18
-9
@@ -108,7 +108,11 @@ function setConnectionState(connected, text, buildVersion, buildTime, wifi, upti
|
||||
async function testConnection() {
|
||||
var baseUrl = getBaseUrl();
|
||||
try {
|
||||
var resp = await fetch(baseUrl + '/system/status', { signal: AbortSignal.timeout(3000) });
|
||||
/* 状态端点禁用 HTTP 缓存,避免命中旧响应 */
|
||||
var resp = await fetch(baseUrl + '/system/status', {
|
||||
signal: AbortSignal.timeout(3000),
|
||||
cache: 'no-store'
|
||||
});
|
||||
if (!resp.ok) {
|
||||
setConnectionState(false, 'HTTP ' + resp.status, '', '', {}, null);
|
||||
return;
|
||||
@@ -209,7 +213,11 @@ async function handleDbcFiles(fileList) {
|
||||
}
|
||||
}
|
||||
|
||||
afterDbcSourcesChanged({ resetSelection: true });
|
||||
/* 仅在确有新增/覆盖时才 reset 并刷新 UI;
|
||||
* 全部解析失败时保留用户当前选中/勾选/信号值,只弹错误提示。 */
|
||||
if (added || replaced) {
|
||||
afterDbcSourcesChanged({ resetSelection: true });
|
||||
}
|
||||
|
||||
if (added || replaced) {
|
||||
var msg = 'DBC:';
|
||||
@@ -317,10 +325,10 @@ function bindEvents() {
|
||||
scheduleCanPersist();
|
||||
});
|
||||
}
|
||||
el.sendSelectedBtn.addEventListener('click', sendSelectedMessage);
|
||||
el.loadPreviewToRawBtn.addEventListener('click', loadPreviewToManual);
|
||||
el.sendManualBtn.addEventListener('click', sendManualFrame);
|
||||
el.resetManualBtn.addEventListener('click', function () {
|
||||
if (el.sendSelectedBtn) el.sendSelectedBtn.addEventListener('click', sendSelectedMessage);
|
||||
if (el.loadPreviewToRawBtn) el.loadPreviewToRawBtn.addEventListener('click', loadPreviewToManual);
|
||||
if (el.sendManualBtn) el.sendManualBtn.addEventListener('click', sendManualFrame);
|
||||
if (el.resetManualBtn) el.resetManualBtn.addEventListener('click', function () {
|
||||
resetManualFields();
|
||||
scheduleCanPersist();
|
||||
});
|
||||
@@ -328,9 +336,10 @@ function bindEvents() {
|
||||
refreshManualHint();
|
||||
scheduleCanPersist();
|
||||
}
|
||||
el.manualData.addEventListener('input', onManualFieldChange);
|
||||
el.manualDlc.addEventListener('input', onManualFieldChange);
|
||||
el.manualId.addEventListener('input', onManualFieldChange);
|
||||
/* 手动帧三字段统一守卫,避免任一元素缺失时后续绑定被中断 */
|
||||
['manualData', 'manualDlc', 'manualId'].forEach(function (id) {
|
||||
if (el[id]) el[id].addEventListener('input', onManualFieldChange);
|
||||
});
|
||||
if (el.manualChannel) el.manualChannel.addEventListener('change', scheduleCanPersist);
|
||||
if (el.sendCheckedBtn) el.sendCheckedBtn.addEventListener('click', sendCheckedMessages);
|
||||
if (el.selectAllBox) el.selectAllBox.addEventListener('change', function () {
|
||||
|
||||
Reference in New Issue
Block a user