1. 增加RPC支持修改参数
This commit is contained in:
parent
fa25457c1e
commit
3fb9057dd9
@ -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 参数会话
|
||||
|
||||
52
src/HDRPC.c
52
src/HDRPC.c
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user