//static int led = 6; void endpoint_setup(void) { // pinMode(led, OUTPUT); build_rsp(); }
////////////////////////////////////////////////////////////////////////// // Endpoint Setup ////////////////////////////////////////////////////////////////////////// void endpoint_setup(void) { build_rsp(); }
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; }