最近工程需要,需要在勘智的k210平台进行一些本体软件开发。
首当其冲的就是界面设计了。
由于k210自身存储空间不是很大,留给ROM和程序的空间并不是很多,所以littlevgl并没有吧它全部去支持了。
而是采取了一半一半的方式。
界面渲染采用了littlevgl,关键的按键消息机制也采用了原生的,但是界面的元素的回调和处理,就没有用LittleVGL了。而是采用了即时生成的方式,效果还不错,可以看一下。
k210做的界面
附上一个lvgl的初始化code:
#cooperation screen
class RSDev():
def __init__(self,key):
self.last_key = -1
lcd.init()
lv.init()
self._key = key
#注册颜色缓冲区
self.lvgl_buf = lv.disp_buf_t()
screen_width_buf = bytearray(240*10)
lv.disp_buf_init(self.lvgl_buf,screen_width_buf,None,len(screen_width_buf)//4)
#注册交互显示器
self.disp_drv = lv.disp_drv_t()
lv.disp_drv_init(self.disp_drv)
self.disp_drv.buffer = self.lvgl_buf
self.disp_drv.flush_cb = lv_h.flush #交互的回调函数
self.disp_drv.hor_res = 240
self.disp_drv.ver_res = 320
lv.disp_drv_register(self.disp_drv)
print("cool")
#注册交互设备
self.input_dev = lv.indev_drv_t()
lv.indev_drv_init(self.input_dev)
self.input_dev.type=lv.INDEV_TYPE.KEYPAD
self.input_dev.read_cb=self.input_func
self.devs = lv.indev_drv_register(self.input_dev)
self.input_group = lv.group_create()
lv.group_set_style_mod_cb(self.input_group,self.group_style_func)
lv.indev_set_group(self.devs,self.input_group)
def input_func(self,drv,events):
self._key.read()
if(self._key.press_hor()):
print("left")
events.state = lv.INDEV_STATE.PR
events.key = lv.KEY.LEFT
elif(self._key.press_row()):
print("right")
events.state = lv.INDEV_STATE.PR
events.key = lv.KEY.RIGHT
elif(self._key.press_quit()):
print("quit")
elif(self._key.press_enter()):
events.state = lv.INDEV_STATE.PR
print("enter")
events.key = lv.KEY.ENTER
elif(self._key.unpress()):
events.state = lv.INDEV_STATE.REL
return False
def group_style_func(self,group ,style):
style.body.border.color = lv.color_make(250,0,0)
style.text.color = lv.color_make(0,0,0)
def read_wifi(self):
return self._key._dev._nic.scan()