@@ -309,12 +309,11 @@ class enumerator
309309 if (req.get_type () == setup_packet::request_type::invalid) {
310310 return ;
311311 }
312-
313312 if (determine_standard_request (req) ==
314313 standard_request_types::get_descriptor &&
315- static_cast <descriptor_type>(req.value () >> 8 & 0xFF ) ==
314+ static_cast <descriptor_type>(req.value_bytes ()[ 1 ] ) ==
316315 descriptor_type::string) {
317- handle_str_descriptors (req.value () & 0xFF , req.length ());
316+ handle_str_descriptors (req.value_bytes ()[ 0 ] , req.length ());
318317
319318 } else if (req.get_recipient () == setup_packet::request_recipient::device) {
320319 try {
@@ -360,12 +359,21 @@ class enumerator
360359 }
361360
362361private:
362+ u16 assemble_le_u16 (std::span<byte const > bytes)
363+ {
364+ if (bytes.size () != 2 ) {
365+ throw hal::argument_out_of_domain (this );
366+ }
367+
368+ return static_cast <u16 >(bytes[0 ]) | (static_cast <u16 >(bytes[1 ]) << 8 );
369+ }
370+
363371 void handle_standard_device_request (setup_packet& req)
364372 {
365373 switch (determine_standard_request (req)) {
366374 case standard_request_types::set_address: {
367375 m_ctrl_ep->write ({});
368- m_ctrl_ep->set_address (req.value () );
376+ m_ctrl_ep->set_address (req.value_bytes ()[ 0 ] );
369377
370378 break ;
371379 }
@@ -398,18 +406,17 @@ class enumerator
398406
399407 void process_get_descriptor (setup_packet& req)
400408 {
401- hal::byte desc_type = req.value () >> 8 & 0xFF ;
402- [[maybe_unused]] hal::byte desc_idx = req.value () & 0xFF ;
403-
409+ hal::byte desc_type = req.value_bytes ()[1 ];
410+ [[maybe_unused]] hal::byte desc_idx = req.value_bytes ()[0 ];
404411 switch (static_cast <descriptor_type>(desc_type)) {
405412 case descriptor_type::device: {
406413 auto header =
407414 std::to_array ({ constants::device_descriptor_size,
408415 static_cast <byte>(descriptor_type::device) });
409416 m_device->set_max_packet_size (
410417 static_cast <byte>(m_ctrl_ep->info ().size ));
411- auto scatter_arr_pair =
412- make_sub_scatter_bytes (req.length ( ), header, *m_device);
418+ auto scatter_arr_pair = make_sub_scatter_bytes (
419+ assemble_le_u16 (req.length_bytes () ), header, *m_device);
413420 hal::v5::write_and_flush (
414421 *m_ctrl_ep,
415422 scatter_span<byte const >(scatter_arr_pair.spans )
@@ -423,8 +430,10 @@ class enumerator
423430 auto conf_hdr =
424431 std::to_array ({ constants::configuration_descriptor_size,
425432 static_cast <byte>(descriptor_type::configuration) });
426- auto scatter_conf_pair = make_sub_scatter_bytes (
427- req.length (), conf_hdr, static_cast <std::span<u8 const >>(conf));
433+ auto scatter_conf_pair =
434+ make_sub_scatter_bytes (assemble_le_u16 (req.length_bytes ()),
435+ conf_hdr,
436+ static_cast <std::span<u8 const >>(conf));
428437
429438 m_ctrl_ep->write (scatter_span<byte const >(scatter_conf_pair.spans )
430439 .first (scatter_conf_pair.count ));
0 commit comments