@@ -274,6 +274,13 @@ unsafe fn fan_set_pwm(ec: &mut Ec<Box<dyn Access>>, index: u8, duty: u8) -> Resu
274274 unsafe { ec. fan_set_pwm ( index, duty) }
275275}
276276
277+ unsafe fn fan_get_rpm ( ec : & mut Ec < Box < dyn Access > > , index : u8 ) -> Result < ( ) , Error > {
278+ let rpm = unsafe { ec. fan_get_rpm ( index) ? } ;
279+ println ! ( "{}" , rpm) ;
280+
281+ Ok ( ( ) )
282+ }
283+
277284unsafe fn fan_get_mode ( ec : & mut Ec < Box < dyn Access > > ) -> Result < ( ) , Error > {
278285 let mode = unsafe { ec. fan_get_mode ( ) ? } ;
279286 println ! ( "{}" , mode) ;
@@ -285,6 +292,17 @@ unsafe fn fan_set_mode(ec: &mut Ec<Box<dyn Access>>, mode: ectool::FanMode) -> R
285292 unsafe { ec. fan_set_mode ( mode) }
286293}
287294
295+ unsafe fn case_rev_get ( ec : & mut Ec < Box < dyn Access > > ) -> Result < ( ) , Error > {
296+ let rev = unsafe { ec. case_rev_get ( ) ? } ;
297+ println ! ( "{}" , rev) ;
298+
299+ Ok ( ( ) )
300+ }
301+
302+ unsafe fn case_rev_set ( ec : & mut Ec < Box < dyn Access > > , rev : u32 ) -> Result < ( ) , Error > {
303+ unsafe { ec. case_rev_set ( rev) }
304+ }
305+
288306unsafe fn keymap_get (
289307 ec : & mut Ec < Box < dyn Access > > ,
290308 layer : u8 ,
@@ -333,13 +351,19 @@ fn parse_color(s: &str) -> Result<(u8, u8, u8), String> {
333351#[ derive( Parser ) ]
334352#[ clap( rename_all = "snake_case" ) ]
335353enum SubCommand {
354+ CaseRev {
355+ rev : Option < u32 > ,
356+ } ,
336357 Console ,
358+ FanMode {
359+ mode : Option < ectool:: FanMode > ,
360+ } ,
337361 FanPwm {
338362 index : u8 ,
339363 duty : Option < u8 > ,
340364 } ,
341- FanMode {
342- mode : Option < ectool :: FanMode > ,
365+ FanRpm {
366+ index : u8 ,
343367 } ,
344368 Flash {
345369 path : String ,
@@ -426,7 +450,13 @@ fn main() {
426450 // System76 launch_2
427451 ( 0x3384 , 0x0006 , 1 ) |
428452 // System76 launch_heavy_1
429- ( 0x3384 , 0x0007 , 1 ) => {
453+ ( 0x3384 , 0x0007 , 1 ) |
454+ // System76 launch_3
455+ ( 0x3384 , 0x0009 , 1 ) |
456+ // System76 launch_heavy_3
457+ ( 0x3384 , 0x000A , 1 ) |
458+ // System76 thelio_io_2
459+ ( 0x3384 , 0x000B , 1 ) => {
430460 let device = info. open_device ( & api) ?;
431461 let access = AccessHid :: new ( device, 10 , 100 ) ?;
432462 return Ok ( Ec :: new ( access) ?. into_dyn ( ) ) ;
@@ -448,6 +478,24 @@ fn main() {
448478 } ;
449479
450480 match args. subcommand {
481+ SubCommand :: CaseRev {
482+ rev,
483+ } => match rev {
484+ Some ( rev) => match unsafe { case_rev_set ( & mut ec, rev) } {
485+ Ok ( ( ) ) => ( ) ,
486+ Err ( err) => {
487+ eprintln ! ( "failed to set case revision {}: {:X?}" , rev, err) ;
488+ process:: exit ( 1 ) ;
489+ }
490+ } ,
491+ None => match unsafe { case_rev_get ( & mut ec) } {
492+ Ok ( ( ) ) => ( ) ,
493+ Err ( err) => {
494+ eprintln ! ( "failed to get case revision: {:X?}" , err) ;
495+ process:: exit ( 1 ) ;
496+ }
497+ } ,
498+ } ,
451499 SubCommand :: Console => match unsafe { console ( & mut ec) } {
452500 Ok ( ( ) ) => ( ) ,
453501 Err ( err) => {
@@ -492,6 +540,15 @@ fn main() {
492540 }
493541 } ,
494542 } ,
543+ SubCommand :: FanRpm {
544+ index,
545+ } => match unsafe { fan_get_rpm ( & mut ec, index) } {
546+ Ok ( ( ) ) => ( ) ,
547+ Err ( err) => {
548+ eprintln ! ( "failed to get fan rpm {}: {:X?}" , index, err) ;
549+ process:: exit ( 1 ) ;
550+ }
551+ } ,
495552 SubCommand :: Flash {
496553 path,
497554 } => match unsafe { flash ( & mut ec, & path, SpiTarget :: Main ) } {
0 commit comments