[myled]
pin:mcu:PE4
pin_statue:0
class error(Exception):
pass
class MyLED:
def __init__(self, config):
self.printer = config.get_printer()
ppins = self.printer.lookup_object('pins')
pin_params = ppins.lookup_pin(config.get('pin'))
self.mcu = pin_params['chip']
self.oid = self.mcu.create_oid()
self.pin = pin_params['pin'] #获取引脚
self.mcu.register_config_callback(self.build_config)
self.pin_statue = config.getint('pin_statue',0) #获取pin_statue的值,当pin_statue没有在配置文件出现时,默认设置为0
if self.pin_statue != 0 and self.pin_statue != 1: #保证pin_statue为0或1
raise error("pin_statue must be 0 or 1 .now is:%d"%(self.pin_statue))
def build_config(self):
# 为给定的GPIO'pin'创建一个内部微控制器对象。该引脚将被配置为数字输出模式,并被设置为'value'指定的初始值(0为低,1为高)
# max_duration 参数用于实现安全检查,max_duration是16000,那么如果主机将gpio设置为1,它必须在16000个时钟刻度内刷新gpio引脚的输出(为0或1)
self.mcu.add_config_cmd("config_digital_out oid=%d pin=%s value=%d default_value=%d" % (self.oid, self.pin, self.pin_statue, 0))
# self.mcu.add_config_cmd("config_digital_out oid=%d pin=%s value=%d default_value=%d max_duration=%d" % (self.oid, self.pin, self.pin_statue, 0, 10000))
# config_analog_in oid=%c pin=%u:该命令用于将一个引脚配置为模拟输入采样模式。一旦配置完成,就可以使用query_analog_in命令(见下文)以固定的时间间隔对该引脚进行采样。
def load_config(config):
return MyLED(config)
def load_config_prefix(config):
return MyLED(config)