feat(ble): add DrawBoxEnable SET cmd; per-board handshake key; move headers
- event_recorder.c: add SET DRAWBOXENABLE 0/1 BLE command (runtime toggle, INI-persistent); expose g_dwDrawBoxEnable extern - kdp2_host_stream.c: guard draw-box and seg-overlay rendering behind g_dwDrawBoxEnable so SET DRAWBOXENABLE 0 cleanly suppresses both - handshake.c: derive key from runtime VMF_NNM_Get_Kn_Number() instead of compile-time constant; each board gets a unique handshake key - kp_firmware.c: remove startup handshake key print (key is now per-board, fixed expected value is no longer meaningful) - move base64.h / sha256.h / handshake.h from src/host_stream/ to include/host_stream/ (proper include path for shared headers)
This commit is contained in:
parent
936e547dc3
commit
8fb28087c5
@ -15,7 +15,6 @@
|
|||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
#define HANDSHAKE_KEY_LEN 16
|
#define HANDSHAKE_KEY_LEN 16
|
||||||
#define HANDSHAKE_KN_STR "29C310F5"//"48872dc21ede" /* test vector; restore to "29C310F5" after verification */
|
|
||||||
#define HANDSHAKE_R_LEN 16
|
#define HANDSHAKE_R_LEN 16
|
||||||
#define HANDSHAKE_TIMEOUT_SEC 5
|
#define HANDSHAKE_TIMEOUT_SEC 5
|
||||||
|
|
||||||
@ -51,6 +51,7 @@ extern VMF_VSRC_HANDLE_T *g_ptVsrcHandle;
|
|||||||
|
|
||||||
/* ── External globals settable via BLE SET command ───────────────────────── */
|
/* ── External globals settable via BLE SET command ───────────────────────── */
|
||||||
extern unsigned int g_dwSegOverlayEnable; /* defined in kp_firmware.c */
|
extern unsigned int g_dwSegOverlayEnable; /* defined in kp_firmware.c */
|
||||||
|
extern unsigned int g_dwDrawBoxEnable; /* defined in kp_firmware.c */
|
||||||
extern unsigned int g_verbose_log; /* defined in kp_firmware.c */
|
extern unsigned int g_verbose_log; /* defined in kp_firmware.c */
|
||||||
|
|
||||||
/* ── Speed control via MsgBroker ─────────────────────────────────────────── */
|
/* ── Speed control via MsgBroker ─────────────────────────────────────────── */
|
||||||
@ -812,6 +813,7 @@ static void persist_ini_int(const char *ini_key, int val)
|
|||||||
/* Handle "SET key=value" command — works outside test mode.
|
/* Handle "SET key=value" command — works outside test mode.
|
||||||
* cmd must already be uppercased (as provided by handle_test_cmd).
|
* cmd must already be uppercased (as provided by handle_test_cmd).
|
||||||
* Supported keys (case-insensitive from sender):
|
* Supported keys (case-insensitive from sender):
|
||||||
|
* DrawBoxEnable — 0/1
|
||||||
* SegOverlayEnable — 0/1
|
* SegOverlayEnable — 0/1
|
||||||
* speed_normal — 1–255
|
* speed_normal — 1–255
|
||||||
* speed_alert — 1–255
|
* speed_alert — 1–255
|
||||||
@ -861,7 +863,13 @@ static void handle_set_cmd(const char *cmd)
|
|||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
char ack[96];
|
char ack[96];
|
||||||
|
|
||||||
if (strcmp(key, "SEGOVERLAYENABLE") == 0) {
|
if (strcmp(key, "DRAWBOXENABLE") == 0) {
|
||||||
|
int v = val ? 1 : 0;
|
||||||
|
g_dwDrawBoxEnable = (unsigned int)v;
|
||||||
|
persist_ini_int("DrawBoxEnable", v);
|
||||||
|
snprintf(ack, sizeof(ack), "SET_ACK DrawBoxEnable=%d", v);
|
||||||
|
|
||||||
|
} else if (strcmp(key, "SEGOVERLAYENABLE") == 0) {
|
||||||
int v = val ? 1 : 0;
|
int v = val ? 1 : 0;
|
||||||
printf("[SET] writing g_dwSegOverlayEnable=%d\n", v);
|
printf("[SET] writing g_dwSegOverlayEnable=%d\n", v);
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
|||||||
@ -13,6 +13,7 @@
|
|||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <vmf_nnm_inference_app.h>
|
||||||
#include "sha256.h"
|
#include "sha256.h"
|
||||||
#include "base64.h"
|
#include "base64.h"
|
||||||
#include "handshake.h"
|
#include "handshake.h"
|
||||||
@ -24,8 +25,14 @@ static time_t s_challenge_send_time = 0;
|
|||||||
|
|
||||||
void handshake_derive_key(uint8_t out_key[HANDSHAKE_KEY_LEN])
|
void handshake_derive_key(uint8_t out_key[HANDSHAKE_KEY_LEN])
|
||||||
{
|
{
|
||||||
|
/* Use runtime Kn chip number as key material (uppercase hex, no "0x" prefix).
|
||||||
|
* This ensures each board uses its own unique handshake key. */
|
||||||
|
char kn_str[16];
|
||||||
|
uint32_t kn = VMF_NNM_Get_Kn_Number();
|
||||||
|
snprintf(kn_str, sizeof(kn_str), "%08X", kn);
|
||||||
|
|
||||||
uint8_t digest[32];
|
uint8_t digest[32];
|
||||||
sha256((const uint8_t *)HANDSHAKE_KN_STR, strlen(HANDSHAKE_KN_STR), digest);
|
sha256((const uint8_t *)kn_str, strlen(kn_str), digest);
|
||||||
for (int i = 0; i < HANDSHAKE_KEY_LEN; i++)
|
for (int i = 0; i < HANDSHAKE_KEY_LEN; i++)
|
||||||
out_key[i] = digest[i] ^ 0x5A;
|
out_key[i] = digest[i] ^ 0x5A;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -855,7 +855,7 @@ void* kdp2_host_stream_draw_box(void *arg)
|
|||||||
|
|
||||||
int need_flush = 0;
|
int need_flush = 0;
|
||||||
|
|
||||||
if (g_dwResultCounts != 0) {
|
if (g_dwDrawBoxEnable && g_dwResultCounts != 0) {
|
||||||
tYuvInfo.pcYuvBuff = tWriterSsmBuffer.buffer + vsrc_ssm_reader_info.dwOffset[0];
|
tYuvInfo.pcYuvBuff = tWriterSsmBuffer.buffer + vsrc_ssm_reader_info.dwOffset[0];
|
||||||
tYuvInfo.dwWidth = dwWidth;
|
tYuvInfo.dwWidth = dwWidth;
|
||||||
tYuvInfo.dwHeight = dwHeight;
|
tYuvInfo.dwHeight = dwHeight;
|
||||||
@ -866,7 +866,7 @@ void* kdp2_host_stream_draw_box(void *arg)
|
|||||||
|
|
||||||
/* Paint STDC segmentation colour overlay (50% alpha blend into YM12).
|
/* Paint STDC segmentation colour overlay (50% alpha blend into YM12).
|
||||||
* Requires SegOverlayEnable=1 in host_stream.ini (default 0 = outline only). */
|
* Requires SegOverlayEnable=1 in host_stream.ini (default 0 = outline only). */
|
||||||
if (g_dwSegOverlayEnable && g_stdc_seg_w > 0) {
|
if (g_dwDrawBoxEnable && g_dwSegOverlayEnable && g_stdc_seg_w > 0) {
|
||||||
stdc_paint_seg_overlay(tWriterSsmBuffer.buffer, &vsrc_ssm_reader_info,
|
stdc_paint_seg_overlay(tWriterSsmBuffer.buffer, &vsrc_ssm_reader_info,
|
||||||
dwWidth, dwHeight);
|
dwWidth, dwHeight);
|
||||||
need_flush = 1;
|
need_flush = 1;
|
||||||
|
|||||||
@ -510,14 +510,6 @@ int main (int argc, char* argv[])
|
|||||||
VMF_NNM_Get_Version(&major, &minor, &patch, &build);
|
VMF_NNM_Get_Version(&major, &minor, &patch, &build);
|
||||||
uint32_t kn_number = VMF_NNM_Get_Kn_Number();
|
uint32_t kn_number = VMF_NNM_Get_Kn_Number();
|
||||||
|
|
||||||
/* Derive and print BLE handshake key for startup verification.
|
|
||||||
* Expected: 58 48 c8 ff b2 eb b1 b8 69 92 b5 20 48 8d 1d 61 */
|
|
||||||
{
|
|
||||||
uint8_t hs_key[HANDSHAKE_KEY_LEN];
|
|
||||||
handshake_derive_key(hs_key);
|
|
||||||
printf("[INIT] handshake key: ");
|
|
||||||
handshake_print_key(hs_key);
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("\n\n**********************************************************\n");
|
printf("\n\n**********************************************************\n");
|
||||||
printf("Kneron Firmware\n");
|
printf("Kneron Firmware\n");
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user