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))
|
#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 添加参数到会话, 方便添加用户数据到会话
|
* @brief 添加参数到会话, 方便添加用户数据到会话
|
||||||
* @param session 参数会话
|
* @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;
|
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)
|
uint8_t HDRPCAddArgs(HDRPCSession *session, HDRPCArgs *args)
|
||||||
{
|
{
|
||||||
if (session == NULL || args == NULL) {
|
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) {
|
for (uint8_t i = index; i < len; ++i) {
|
||||||
if (i >= session->index) {
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (session->args[i].type != type[i]) {
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user