void ccnet_processor_send_request (CcnetProcessor *processor, const char *request) { ccnet_peer_send_request (processor->peer, REQUEST_ID (processor->id), request); }
void ccnet_processor_send_request (CcnetProcessor *processor, const char *request) { ccnet_client_send_request (processor->session, REQUEST_ID (processor->id), request); }
void ccnet_processor_send_request_l (CcnetProcessor *processor, ...) { va_list ap; GString *buf = g_string_new(NULL); char *arg; va_start (ap, processor); arg = va_arg (ap, char *); while (arg) { g_string_append (buf, arg); arg = va_arg (ap, char *); } va_end (ap); ccnet_peer_send_request (processor->peer, REQUEST_ID (processor->id), buf->str); g_string_free (buf, TRUE); }
int vid_cmd_proc(tcpc_t c) { struct wcamcli *wc = c->arg; struct vid *v = wc->srv->vid; __u8 *req = wc->req; __u8 *rsp = wc->rsp; __u8 id = req[CMD1_POS]; __u8 status = ERR_SUCCESS; __u8 dat[FRAME_DAT_MAX]; __u32 pos, len, size; switch (id) { case REQUEST_ID(VID_GET_UCTL): vid_get_uctl(v, &req[DAT_POS], dat); build_and_send_rsp(c, (TYPE_SRSP << TYPE_BIT_POS) | SUBS_VID, id, 4, dat); break; case REQUEST_ID(VID_GET_UCTLS): /* * 应答帧结构: 字节 / 字段名称 * 1 | 2 | 4 | 长度由4字节数据部分指定 * 长度 | 命令 | 数据(控制项列表大小) | 控制项列表 */ len = sizeof(__u32); pos = FRAME_HDR_SZ + len; size = vid_get_uctls(v, &rsp[pos]); build_rsp(rsp, (TYPE_SRSP << TYPE_BIT_POS) | SUBS_VID, id, len, (__u8*)&size); tcpc_send(c, rsp, pos + size); break; case REQUEST_ID(VID_SET_UCTL): vid_set_uctl(v, &req[DAT_POS]); break; case REQUEST_ID(VID_SET_UCS2DEF): v4l2_set_uctls2def(v->cam); break; case REQUEST_ID(VID_GET_FMT): vid_get_fmt(v, dat); build_and_send_rsp(c, (TYPE_SRSP << TYPE_BIT_POS) | SUBS_VID, id, 4, dat); break; case REQUEST_ID(VID_GET_FRMSIZ): vid_get_frmsiz(v, dat); build_and_send_rsp(c, (TYPE_SRSP << TYPE_BIT_POS) | SUBS_VID, id, 8, dat); break; #if 0 case REQUEST_ID(VID_GET_FMTS): /* * 应答帧结构: 字节 / 字段名称 * 1 | 2 | 4 | 长度由4字节数据部分指定 * 长度 | 命令 | 数据(格式分辨率列表大小) | 格式分辨率列表 */ len = sizeof(__u32); pos = FRAME_HDR_SZ + len; size = vid_get_fmts(v, &rsp[pos]); build_rsp(rsp, (TYPE_SRSP << TYPE_BIT_POS) | SUBS_VID, id, len, (__u8*)&size); send_func(c, rsp, pos + size); break; case REQUEST_ID(VID_SET_FMT): vid_set_fmt(v, &req[DAT_POS]); break; #endif case REQUEST_ID(VID_REQ_FRAME): /* * 应答帧结构: 字节 / 字段名称 * 1 | 2 | 4 | 长度由4字节数据部分指定 * 长度 | 命令 | 数据(图像帧大小) | 图像帧 */ len = sizeof(__u32); pos = FRAME_HDR_SZ + len; pthread_mutex_lock(&v->tran_frm_mutex); if (v->tran_frm_index != wc->last_frm_index) { size = vid_get_trans_frame(v, &rsp[pos]); wc->last_frm_index = v->tran_frm_index; } else { size = 0; } pthread_mutex_unlock(&v->tran_frm_mutex); build_rsp(rsp, (TYPE_SRSP << TYPE_BIT_POS) | SUBS_VID, id, len, (__u8*)&size); tcpc_send(c, rsp, pos + size); break; default: status = ERR_CMD_ID; break; } return status; }