949
社区成员
发帖
与我相关
我的任务
分享
intf->AddSignal("sig_test", "(sq(sqq))qa(qq)", "arg1,arg2,arg3", 0);
struct A{
uint8_t a;
uint8_t b;
}v1;
struct A test[3] = {{1,2},{3,4},{10,6}};
static int numSended = 0;
MsgArg arg[3];
arg[0].Set("(sq(sqq))",thisdev);
arg[1].Set("q",thisdev.res[0].type);
MsgArg tmp[3];
tmp[0].Set("(qq)",test[0]);
tmp[1].Set("(qq)",test[1]);
tmp[2].Set("(qq)",test[2]);
arg[2].Set("a(qq)",sizeof(test)/sizeof(struct A),tmp);//第二个参数必须给
return Signal(NULL, g_sessionId, *testSigMember, arg, 3, 0, 0);
}
struct res_info {
// 发现个问题:若把unit写在最后面,客户端产生了异常,所以就改到了最前面
char* unit;
uint8_t __resid;
uint8_t type;
};
struct dev_info {
char* mac;
uint8_t rescnt;
res_info res[MAX_RES_NUM];
}thisdev;
void MyBusObject::testSigHandler(const InterfaceDescription::Member* member, const char* srcPath, ajn::Message& msg)
{
struct A {
uint8_t a;
uint8_t b;
}v1;
const char* sender = msg->GetSender();
const MsgArg* arg1 = msg->GetArg(0);
const MsgArg* arg2 = msg->GetArg(1);
// 第三个参数,即结构体数组的解析
MsgArg* entries;
const MsgArg* arg3 = msg->GetArg(2);
arg3->Get("a(qq)",&n,&entries);
for (int i=0; i<n; i++) {
entries[i].Get("(qq)",&v1);
printf("a:%d, b:%d\n",v1.a,v1.b);
}
const char* ele1_macstr = arg1->v_struct.members->v_string.str;
uint8_t ele2_rescnt = (arg1->v_struct.members + 1)->v_byte;
MsgArg* tmp = (arg1->v_struct.members + 2)->v_struct.members;
//printf("tmp arg num:%d\n",(arg1->v_struct.members + 2)->v_struct.numMembers);
const char* ele3_1_unit = tmp->v_string.str;
uint8_t ele3_2_resid = (tmp + 1)->v_byte;
uint8_t ele3_3_type = (tmp + 2)->v_byte;//这个返回有问题!!!目前还没查出,所以才将它以第二参数传过来
ele3_3_type = arg2->v_byte;//于是乎将"资源类型域"以第二参数返回
printf("\n[%s msg]\n\tdevice name:%s\n\trescnt:%d\n\tres unit:%s\n\t__resid:%d\n\tres type:%d\n",
sender,ele1_macstr,ele2_rescnt,ele3_1_unit,ele3_2_resid,ele3_3_type);
}