@@ -11,6 +11,7 @@ use windows::{
1111 } ,
1212} ;
1313
14+ use crate :: chromium_ec:: portio:: HEADER_LEN ;
1415use crate :: chromium_ec:: EC_MEMMAP_SIZE ;
1516use crate :: chromium_ec:: { EcError , EcResponseStatus , EcResult } ;
1617
@@ -89,16 +90,18 @@ pub fn send_command(command: u16, command_version: u8, data: &[u8]) -> EcResult<
8990 version : command_version as u32 ,
9091 command : command as u32 ,
9192 outsize : data. len ( ) as u32 ,
92- insize : CROSEC_CMD_MAX_REQUEST as u32 ,
93+ insize : ( CROSEC_CMD_MAX_REQUEST - HEADER_LEN ) as u32 ,
9394 result : 0xFF ,
94- buffer : [ 0_u8 ; 256 ] ,
95+ buffer : [ 0_u8 ; CROSEC_CMD_MAX_REQUEST ] ,
9596 } ;
9697 cmd. buffer [ 0 ..data. len ( ) ] . clone_from_slice ( data) ;
9798
98- let size = std:: mem:: size_of :: < CrosEcCommand > ( ) ;
99+ let buf_size = std:: mem:: size_of :: < CrosEcCommand > ( ) ;
100+ // Must keep 8 bytes of space for the EC command request/response headers
101+ let cmd_len = buf_size - HEADER_LEN ;
102+ let out_len = buf_size - HEADER_LEN ;
99103 let const_ptr = & mut cmd as * const _ as * const :: core:: ffi:: c_void ;
100104 let mut_ptr = & mut cmd as * mut _ as * mut :: core:: ffi:: c_void ;
101- let _ptr_size = std:: mem:: size_of :: < CrosEcCommand > ( ) as u32 ;
102105
103106 let mut returned: u32 = 0 ;
104107
@@ -113,9 +116,9 @@ pub fn send_command(command: u16, command_version: u8, data: &[u8]) -> EcResult<
113116 device. 0 ,
114117 IOCTL_CROSEC_XCMD ,
115118 Some ( const_ptr) ,
116- size . try_into ( ) . unwrap ( ) ,
119+ cmd_len . try_into ( ) . unwrap ( ) ,
117120 Some ( mut_ptr) ,
118- size . try_into ( ) . unwrap ( ) ,
121+ out_len . try_into ( ) . unwrap ( ) ,
119122 Some ( & mut returned as * mut u32 ) ,
120123 None ,
121124 )
@@ -129,7 +132,7 @@ pub fn send_command(command: u16, command_version: u8, data: &[u8]) -> EcResult<
129132 }
130133
131134 // TODO: Figure out why that's sometimes bigger
132- let end = std:: cmp:: min ( returned, 256 ) ;
135+ let end = std:: cmp:: min ( returned, CROSEC_CMD_MAX_REQUEST as u32 ) ;
133136
134137 let out_buffer = & cmd. buffer [ ..( end as usize ) ] ;
135138 Ok ( out_buffer. to_vec ( ) )
0 commit comments