1. 增加RPC支持修改参数

This commit is contained in:
coffee 2026-05-26 16:29:55 +08:00
parent fa25457c1e
commit 3fb9057dd9
2 changed files with 75 additions and 2 deletions

View File

@ -215,6 +215,31 @@ uint8_t _HDRPCAddArgs(HDRPCSession *session, uint8_t type, const void *args, uin
// 注: 如果需要用户数据, 要求用户数据添加到所有参数后面
#define HDRPCAddUserData(session, data, len) _HDRPCAddArgs((session), kHDRPCUserData, (data), (len))
/**
* @brief session指定索引的参数
* @param session RPC参数会话
* @param index
* @param type
* @param args
* @param len
* @return 1, 0
*/
uint8_t _HDRPCModifyArgs(HDRPCSession *session, uint8_t index, uint8_t type, const void *args, uint8_t len);
/**
* @brief
*/
#define HDRPCModifyU8(session, idx, val) do { uint8_t __v = (val); _HDRPCModifyArgs((session), (idx), kHDRPCU8, &__v, 1); } while (0)
#define HDRPCModifyU16(session, idx, val) do { uint16_t __v = (val); _HDRPCModifyArgs((session), (idx), kHDRPCU16, &__v, 1); } while (0)
#define HDRPCModifyU32(session, idx, val) do { uint32_t __v = (val); _HDRPCModifyArgs((session), (idx), kHDRPCU32, &__v, 1); } while (0)
#ifdef HDRPC_USE_64
#define HDRPCModifyU64(session, idx, val) do { uint64_t __v = (val); _HDRPCModifyArgs((session), (idx), kHDRPCU64, &__v, 1); } while (0)
#endif
#define HDRPCModifyException(session, idx, val) do { uint16_t __v = (val); _HDRPCModifyArgs((session), (idx), kHDRPCException, &__v, 1); } while (0)
#define HDRPCModifyBuffer(session, idx, data, len) _HDRPCModifyArgs((session), (idx), kHDRPCBuffer, (data), (len))
#define HDRPCModifyString(session, idx, data, len) _HDRPCModifyArgs((session), (idx), kHDRPCString, (data), (len) * 2)
#define HDRPCModifyUserData(session, idx, data, len) _HDRPCModifyArgs((session), (idx), kHDRPCUserData, (data), (len))
/**
* @brief , 便
* @param session

View File

@ -479,6 +479,54 @@ uint8_t _HDRPCAddArgs(HDRPCSession *session, uint8_t type, const void *args, uin
return 1;
}
uint8_t _HDRPCModifyArgs(HDRPCSession *session, uint8_t index, uint8_t type, const void *args, uint8_t len)
{
if (session == NULL) {
LogD("Session is nullptr");
return 0;
}
if (index >= session->index) {
LogD("Modify index[%d] session->index[%d] error", index, session->index);
return 0;
}
if (len == 0) {
LogD("type[0x%x], args len is 0", type);
return 0;
}
session->args[index].type = type;
switch (type) {
case kHDRPCU8:
session->args[index].dataU8 = *((uint8_t *)args);
break;
case kHDRPCException:
case kHDRPCU16:
session->args[index].dataU16 = *((uint16_t *)args);
break;
case kHDRPCU32:
session->args[index].dataU32 = *((uint32_t *)args);
break;
#ifdef HDRPC_USE_64
case kHDRPCU64:
session->args[index].dataU64 = *((uint64_t *)args);
break;
#endif
case kHDRPCUserData:
case kHDRPCBuffer:
case kHDRPCString:
session->args[index].buffer.data = (uint8_t *)args;
session->args[index].buffer.len = len;
return 1;
default:
LogD("Not support type[0x%x]", type);
return 0;
}
return 1;
}
uint8_t HDRPCAddArgs(HDRPCSession *session, HDRPCArgs *args)
{
if (session == NULL || args == NULL) {
@ -536,12 +584,12 @@ uint8_t _HDRPCCheckArgs(HDRPCSession *session, uint8_t *type, uint8_t index, uin
{
for (uint8_t i = index; i < len; ++i) {
if (i >= session->index) {
LogD("Check type[%d] index[%d] len[%d] error", type[i], i, session->index);
LogD("Check code[0x%x], type[%d] index[%d] len[%d] error", session->func, type[i], i, session->index);
return 0;
}
if (session->args[i].type != type[i]) {
LogD("Check index[%d] Type[0x%x][0x%x] faild", i, session->args[i].type, type[i]);
LogD("Check code[0x%x], index[%d] Type[0x%x][0x%x] faild", session->func, i, session->args[i].type, type[i]);
return 0;
}
}