@@ -919,6 +919,33 @@ def power(self):
919919 if action == "get" :
920920 print (f"power{ ' ' + name if name else '' } for place { place .name } is { 'on' if res else 'off' } " )
921921
922+ def button (self ):
923+ place = self .get_acquired_place ()
924+ action = self .args .action
925+ delay = self .args .delay
926+ name = self .args .name
927+ target = self ._get_target (place )
928+ from ..resource .remote import NetworkSysfsGPIO
929+
930+ drv = None
931+ try :
932+ drv = target .get_driver ("ButtonProtocol" , name = name )
933+ except NoDriverFoundError :
934+ for resource in target .resources :
935+ if isinstance (resource , NetworkSysfsGPIO ):
936+ self ._get_driver_or_new (target , "GpioDigitalOutputDriver" , name = name )
937+ drv = self ._get_driver_or_new (target , "DigitalOutputButtonDriver" , name = name )
938+ if drv :
939+ break
940+
941+ if not drv :
942+ raise UserError ("target has no compatible resource available" )
943+ if delay is not None :
944+ drv .delay = delay
945+ res = getattr (drv , action )()
946+ if action == "get" :
947+ print (f"button{ ' ' + name if name else '' } for place { place .name } is { 'pressed' if res else 'released' } " )
948+
922949 def digital_io (self ):
923950 place = self .get_acquired_place ()
924951 action = self .args .action
@@ -1868,6 +1895,14 @@ def main():
18681895 subparser .add_argument ("--name" , "-n" , help = "optional resource name" )
18691896 subparser .set_defaults (func = ClientSession .power )
18701897
1898+ subparser = subparsers .add_parser ("button" , help = "change (or get) a place's button status" )
1899+ subparser .add_argument ("action" , choices = ["press" , "release" , "press_for" , "get" ])
1900+ subparser .add_argument (
1901+ "-t" , "--delay" , type = float , default = None , help = "wait time in seconds between the press and release during press_for"
1902+ )
1903+ subparser .add_argument ("--name" , "-n" , help = "optional resource name" )
1904+ subparser .set_defaults (func = ClientSession .button )
1905+
18711906 subparser = subparsers .add_parser ("io" , help = "change (or get) a digital IO status" )
18721907 subparser .add_argument ("action" , choices = ["high" , "low" , "get" ], help = "action" )
18731908 subparser .add_argument ("name" , help = "optional resource name" , nargs = "?" )
0 commit comments