mirror of https://github.com/arendst/Tasmota.git
58 lines
2.1 KiB
Plaintext
58 lines
2.1 KiB
Plaintext
#- Native code used for testing and code solidification -#
|
|
#- Do not use it -#
|
|
|
|
class Tasmota
|
|
def event(type, cmd, idx, payload)
|
|
if type=='cmd' return self.exec_cmd(cmd, idx, payload)
|
|
elif type=='rule' return self.exec_rules(payload)
|
|
elif type=='mqtt_data' return nil
|
|
elif type=='gc' return self.gc()
|
|
elif type=='every_50ms' return self.run_deferred()
|
|
elif self._drivers
|
|
for d:self._drivers
|
|
try
|
|
if type=='every_second' && d.every_second d.every_second()
|
|
elif type=='every_100ms' && d.every_100ms d.every_100ms()
|
|
elif type=='web_add_button' && d.web_add_button d.web_add_button()
|
|
elif type=='web_add_main_button' && d.web_add_main_button d.web_add_main_button()
|
|
elif type=='save_before_restart' && d.save_before_restart d.save_before_restart()
|
|
elif type=='web_add_handler' && d.web_add_handler d.web_add_handler()
|
|
elif type=='web_sensor' && d.web_sensor d.web_sensor()
|
|
elif type=='json_append' && d.json_append d.json_append()
|
|
elif type=='button_pressed' && d.button_pressed d.button_pressed()
|
|
elif type=='web_add_handler' && d.display d.display()
|
|
elif type=='display' && d.display d.display()
|
|
end
|
|
except .. as e,m
|
|
import string
|
|
self.log(string.format('BRY: exception %s - %m',3))
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
#- dispatch callback number n, with parameters v0,v1,v2,v3 -#
|
|
def cb_dispatch(n,v0,v1,v2,v3)
|
|
if self._cb == nil return 0 end
|
|
var f = self._cb.find(n)
|
|
if f != nil
|
|
return f(v0,v1,v2,v3)
|
|
end
|
|
return 0
|
|
end
|
|
|
|
#- generate a new C callback and record the associated Berry closure -#
|
|
def gen_cb(f)
|
|
if self._cb == nil self._cb = {} end # create map if not already initialized
|
|
for i:0..19
|
|
if self._cb.find(i) == nil
|
|
#- free slot -#
|
|
self._cb[i] = f
|
|
return self._get_cb(i)
|
|
end
|
|
end
|
|
raise "internal_error", "No callback available"
|
|
end
|
|
|
|
end
|