Fix handling for set_interface
This commit is contained in:
		| @@ -325,10 +325,10 @@ typedef struct TU_ATTR_PACKED { | ||||
|   _nEPs, TUSB_CLASS_VIDEO, VIDEO_SUBCLASS_CONTROL, VIDEO_INT_PROTOCOL_CODE_15, _stridx | ||||
|  | ||||
| /* 3.7.2 */ | ||||
| #define TUD_VIDEO_DESC_CS_VC(_bcdUVC, _totallen, _clkfreq, _coll, ...)	\ | ||||
|   TUD_VIDEO_DESC_CS_VC_LEN + (_coll), TUSB_DESC_CS_INTERFACE, VIDEO_CS_VC_INTERFACE_HEADER, \ | ||||
|   U16_TO_U8S_LE(_bcdUVC), U16_TO_U8S_LE((_totallen) + TUD_VIDEO_DESC_CS_VC_LEN + (_coll)), \ | ||||
|   U32_TO_U8S_LE(_clkfreq), _coll, __VA_ARGS__ | ||||
| #define TUD_VIDEO_DESC_CS_VC(_bcdUVC, _totallen, _clkfreq, ...)	\ | ||||
|   TUD_VIDEO_DESC_CS_VC_LEN + (TU_ARGS_NUM(__VA_ARGS__)), TUSB_DESC_CS_INTERFACE, VIDEO_CS_VC_INTERFACE_HEADER, \ | ||||
|   U16_TO_U8S_LE(_bcdUVC), U16_TO_U8S_LE((_totallen) + TUD_VIDEO_DESC_CS_VC_LEN + (TU_ARGS_NUM(__VA_ARGS__))), \ | ||||
|   U32_TO_U8S_LE(_clkfreq), TU_ARGS_NUM(__VA_ARGS__), __VA_ARGS__ | ||||
|  | ||||
| /* 3.7.2.1 */ | ||||
| #define TUD_VIDEO_DESC_INPUT_TERM(_tid, _tt, _at, _stridx) \ | ||||
| @@ -346,18 +346,18 @@ typedef struct TU_ATTR_PACKED { | ||||
|   _epn, TUSB_CLASS_VIDEO, VIDEO_SUBCLASS_STREAMING, VIDEO_INT_PROTOCOL_CODE_15, _stridx | ||||
|  | ||||
| /* 3.9.2.1 */ | ||||
| #define TUD_VIDEO_DESC_CS_VS_INPUT(_numfmt, _totallen, _ep, _inf, _termlnk, _sticaptmeth, _trgspt, _trgusg, _ctlsz, ...) \ | ||||
|   TUD_VIDEO_DESC_CS_VS_IN_LEN + (_numfmt) * (_ctlsz), TUSB_DESC_CS_INTERFACE, \ | ||||
| #define TUD_VIDEO_DESC_CS_VS_INPUT(_numfmt, _totallen, _ep, _inf, _termlnk, _sticaptmeth, _trgspt, _trgusg, ...) \ | ||||
|   TUD_VIDEO_DESC_CS_VS_IN_LEN + (_numfmt) * (TU_ARGS_NUM(__VA_ARGS__)), TUSB_DESC_CS_INTERFACE, \ | ||||
|   VIDEO_CS_VS_INTERFACE_INPUT_HEADER, _numfmt, \ | ||||
|   U16_TO_U8S_LE((_totallen) + TUD_VIDEO_DESC_CS_VS_IN_LEN + (_numfmt) * (_ctlsz)), \ | ||||
|   _ep, _inf, _termlnk, _sticaptmeth, _trgspt, _trgusg, _ctlsz, __VA_ARGS__ | ||||
|   U16_TO_U8S_LE((_totallen) + TUD_VIDEO_DESC_CS_VS_IN_LEN + (_numfmt) * (TU_ARGS_NUM(__VA_ARGS__))), \ | ||||
|   _ep, _inf, _termlnk, _sticaptmeth, _trgspt, _trgusg, (TU_ARGS_NUM(__VA_ARGS__)), __VA_ARGS__ | ||||
|  | ||||
| /* 3.9.2.2 */ | ||||
| #define TUD_VIDEO_DESC_CS_VS_OUTPUT(_numfmt, _totallen, _ep, _inf, _termlnk, _ctlsz, ...) \ | ||||
|   TUD_VIDEO_DESC_CS_VS_OUT_LEN + (_numfmt) * (_ctlsz), TUSB_DESC_CS_INTERFACE, \ | ||||
| #define TUD_VIDEO_DESC_CS_VS_OUTPUT(_numfmt, _totallen, _ep, _inf, _termlnk, ...) \ | ||||
|   TUD_VIDEO_DESC_CS_VS_OUT_LEN + (_numfmt) * (TU_ARGS_NUM(__VA_ARGS__)), TUSB_DESC_CS_INTERFACE, \ | ||||
|   VIDEO_CS_VS_INTERFACE_OUTPUT_HEADER, _numfmt, \ | ||||
|   U16_TO_U8S_LE((_totallen) + TUD_VIDEO_DESC_CS_VS_OUT_LEN + (_numfmt) * (_ctlsz)), \ | ||||
|   _ep, _inf, _termlnk, _ctlsz, __VA_ARGS__ | ||||
|   U16_TO_U8S_LE((_totallen) + TUD_VIDEO_DESC_CS_VS_OUT_LEN + (_numfmt) * (TU_ARGS_NUM(__VA_ARGS__))), \ | ||||
|   _ep, _inf, _termlnk, (TU_ARGS_NUM(__VA_ARGS__)), __VA_ARGS__ | ||||
|  | ||||
| /* Uncompressed 3.1.1 */ | ||||
| #define TUD_VIDEO_GUID(_g0,_g1,_g2,_g3,_g4,_g5,_g6,_g7,_g8,_g9,_g10,_g11,_g12,_g13,_g14,_g15) _g0,_g1,_g2,_g3,_g4,_g5,_g6,_g7,_g8,_g9,_g10,_g11,_g12,_g13,_g14,_g15 | ||||
| @@ -378,11 +378,11 @@ typedef struct TU_ATTR_PACKED { | ||||
|   U32_TO_U8S_LE(_minfrminterval), U32_TO_U8S_LE(_maxfrminterval), U32_TO_U8S_LE(_frmintervalstep) | ||||
|  | ||||
| /* Uncompressed 3.1.2 Table 3-4 */ | ||||
| #define TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_DISC(_frmidx, _cap, _width, _height, _minbr, _maxbr, _maxfrmbufsz, _frminterval, _numfrminterval, ...) \ | ||||
|   TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_DISC_LEN + _numfrminterval * 4, \ | ||||
| #define TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_DISC(_frmidx, _cap, _width, _height, _minbr, _maxbr, _maxfrmbufsz, _frminterval, ...) \ | ||||
|   TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_DISC_LEN + (TU_ARGS_NUM(__VA_ARGS__)) * 4, \ | ||||
|   TUSB_DESC_CS_INTERFACE, VIDEO_CS_VS_INTERFACE_FRAME_UNCOMPRESSED, \ | ||||
|   _frmidx, _cap, U16_TO_U8S_LE(_width), U16_TO_U8S_LE(_height), U32_TO_U8S_LE(_minbr), U32_TO_U8S_LE(_maxbr), \ | ||||
|   U32_TO_U8S_LE(_maxfrmbufsz), U32_TO_U8S_LE(_frminterval), _numfrminterval, __VA_ARGS__ | ||||
|   U32_TO_U8S_LE(_maxfrmbufsz), U32_TO_U8S_LE(_frminterval), (TU_ARGS_NUM(__VA_ARGS__)), __VA_ARGS__ | ||||
|  | ||||
| /* 3.9.2.6 */ | ||||
| #define TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(_color, _trns, _mat) \ | ||||
|   | ||||
| @@ -321,7 +321,6 @@ static bool _open_vs_itf(uint8_t rhport, videod_interface_t *self, unsigned itfn | ||||
|     cur += tu_desc_len(cur); | ||||
|   } | ||||
|   *ofs = (void const*)vs - self->beg; | ||||
|   TU_LOG2("    done\r\n"); | ||||
|   return true; | ||||
| } | ||||
|  | ||||
| @@ -346,6 +345,7 @@ static int handle_video_ctl_std_req(uint8_t rhport, uint8_t stage, tusb_control_ | ||||
|       return VIDEO_UNKNOWN; | ||||
|     if (!_open_vc_itf(rhport, &_videod_itf[itf], request->wValue)) | ||||
|       return VIDEO_UNKNOWN; | ||||
|     tud_control_status(rhport, request); | ||||
|     return VIDEO_NO_ERROR; | ||||
|   default: /* Unknown/Unsupported request */ | ||||
|     TU_BREAKPOINT(); | ||||
| @@ -457,6 +457,7 @@ static int handle_video_stm_std_req(uint8_t rhport, uint8_t stage, tusb_control_ | ||||
|       return VIDEO_UNKNOWN; | ||||
|     if (!_open_vs_itf(rhport, &_videod_itf[itf], itfnum, request->wValue)) | ||||
|       return VIDEO_UNKNOWN; | ||||
|     tud_control_status(rhport, request); | ||||
|     return VIDEO_NO_ERROR; | ||||
|   default: /* Unknown/Unsupported request */ | ||||
|     TU_BREAKPOINT(); | ||||
| @@ -612,12 +613,6 @@ uint16_t videod_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uin | ||||
|     cur = _next_desc_itf(cur, end); | ||||
|   } | ||||
|   self->len = (uintptr_t)cur - (uintptr_t)itf_desc; | ||||
|   /*------------- Video Stream Interface -------------*/ | ||||
|   unsigned itfnum = 0; | ||||
|   for (unsigned i = 0; i < bInCollection; ++i) { | ||||
|     itfnum = vc->ctl.baInterfaceNr[i]; | ||||
|     if (!_open_vs_itf(rhport, self, itfnum, 0)) return 0; | ||||
|   } | ||||
|   return (uintptr_t)cur - (uintptr_t)itf_desc; | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 kkitayam
					kkitayam