t113-c-lvgl-anim篇
有时候我们需要在anim结束后释放一些空间那么这个时候应该怎么做的?
其实官方已经给了函数给我们了
动画结束后回调函数
1.lv_anim_set_deleted_cb()
这个函数表示的是当anim被删除的时候回调的函数,实际运行会自己调用,可以在这个回调函数里面添加东西去删除或者改动什么的,但这个毕竟是个系统函数不好改
2.lv_anim_set_ready_cb
这个函数是当动画空闲的时候调用的回调函数,动画结束了不就空闲了嘛
基本上就这俩个了
但是有的时候我们需要在整个程序(好几个动画什么的)运行完成后操作一些东西,这个时候就要自己设计事件函数了,那么我来简单设计一个eventsready的函数试一下
设计发送事件函数
1._ui_set_get_events_num
我们在之前提到的readycb中加入一个能够计数的函数(自己设计的)
这样就能在运行完一定的步骤之后回调发送给先前的函数
2.ui_event____initial_actions0
在这个函数中我门就可以运行我们想做的东西了
移植之前的摄像头代码
现在ui做好了那么移植一下之前的代码吧:
代码:
首先之前的代码已经不适宜现在的情况了,必须得改一下
其实并没有改很多,只是把main函数改掉了;
int get_camera(void *img)
{
unsigned char buf[240*240*4];
unsigned char rgbbuf[240*240*3];
if(!udp_rec(rgbbuf))
{
rgb_to_argb(rgbbuf,(unsigned int *)img,240*240*3);
}
else{
return -1;
}
return 0;
// udp_end();
}
同时监听的时候我做个一个小型的超时返回,虽然这样还是会有一小段的卡顿,但是终究还是解决卡死的情况
int udp_rec(unsigned char *ucRecvBuf)
{
int size,total_size=0;
iAddrLen = sizeof(struct sockaddr);
iRecvLen = 0;
unsigned int time_try;
time_try = 0;
while(total_size<(240*240*3))
{
iRecvLen = recvfrom(iSocketServer, ucRecvBuf+total_size, 240*240*3, MSG_DONTWAIT, (struct sockaddr *)&tSocketClientAddr, &iAddrLen);
if (iRecvLen > 0){
total_size+=iRecvLen;
udp_send_ack();
}
else{
time_try++;
}
if(time_try >= 500000)
{
printf("ERROR TO RECV,CHEAK CONNET!\r\n");
return -1;
}
}
return 0;
}
cmake
cmake我添加了文件搜寻下的所有.c文件,这样更方便
cmake_minimum_required(VERSION 3.12.4)
SET(CMAKE_C_COMPILER /home/momo/Tina-Linux/prebuilt/gcc/linux-x86/arm/toolchain-sunxi-musl/toolchain/bin/arm-openwrt-linux-muslgnueabi-gcc)
SET(CMAKE_CXX_COMPILER /home/momo/Tina-Linux/prebuilt/gcc/linux-x86/arm/toolchain-sunxi-musl/toolchain/bin/arm-openwrt-linux-muslgnueabi-g++)
project(lvgl_run VERSION 1.2)
set(CMAKE_INSTALL_PREFIX /home/momo/Tina-Linux/exsample/lcd_run/build)
file(GLOB_RECURSE allc ${PROJECT_SOURCE_DIR}/img/*.c
${PROJECT_SOURCE_DIR}/app/*.c
)
message("${allc}")
#包含lvgl的子库
add_subdirectory(lvgl)
add_subdirectory(camera)
#创建exe的可执行程序
add_executable(lcd_run lcd_run.c ui.c ui_events.c ui_helpers.c animation.c ${allc})
#链接所需要的库
target_link_libraries(lcd_run PUBLIC lvgl camera)
#target_link_libraries(lvgl_ui PUBLIC lvgl_demos)