返回官网官方微博

麦步社区-论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: MAI 表盘
楼主: klds1991
打印 上一主题 下一主题

初次修改表盘,分享一下

[复制链接]

2

主题

18

帖子

380

麦力

精华
0
阅读权限
30
在线时间
15 小时

31#
 楼主| 发表于 2016-8-29 12:06:31 | 只看该作者
dustin134 发表于 2016-8-29 10:16
多谢,您能讲一下回调函数和申请函数(比如天气或城市)的作用和区别吗? ...

没研究过这些。这些天气功能在iOS上都不稳定,经常断开,所以我把这些全都去掉了,所以也没有研究。

5

主题

235

帖子

1787

麦力

精华
0
阅读权限
50
在线时间
42 小时

麦步手表用户

32#
发表于 2016-8-29 14:53:48 | 只看该作者
klds1991 发表于 2016-8-29 12:06
没研究过这些。这些天气功能在iOS上都不稳定,经常断开,所以我把这些全都去掉了,所以也没有研究。 ...

嗯,总之对我帮助很大,再次感谢

5

主题

235

帖子

1787

麦力

精华
0
阅读权限
50
在线时间
42 小时

麦步手表用户

33#
发表于 2016-8-29 15:52:19 | 只看该作者
本帖最后由 dustin134 于 2016-8-29 15:53 编辑
klds1991 发表于 2016-8-29 12:06
没研究过这些。这些天气功能在iOS上都不稳定,经常断开,所以我把这些全都去掉了,所以也没有研究。 ...

你好,我看了缤纷多显的程序有一个疑问,我之前开发单片机软件,都是设定一个TIMER,这个定时器定时产生中断,这时就可以在该定时器中断中加入处理程序,在main()中加入死循环,这样就可以使之不停的运转,可是在麦步程序中并没有看见这样的机制,应该是执行一遍就OVER了,如何做到定时刷新程序的呢?比如说定时刷新步数、天气、等等数据

5

主题

235

帖子

1787

麦力

精华
0
阅读权限
50
在线时间
42 小时

麦步手表用户

34#
发表于 2016-8-29 17:11:54 | 只看该作者
本帖最后由 dustin134 于 2016-8-29 22:19 编辑
klds1991 发表于 2016-8-29 12:06
没研究过这些。这些天气功能在iOS上都不稳定,经常断开,所以我把这些全都去掉了,所以也没有研究。 ...

//注册定时查询函数
      此问题已经清楚了

5

主题

235

帖子

1787

麦力

精华
0
阅读权限
50
在线时间
42 小时

麦步手表用户

35#
发表于 2016-8-29 22:16:18 | 只看该作者
klds1991 发表于 2016-8-29 12:06
没研究过这些。这些天气功能在iOS上都不稳定,经常断开,所以我把这些全都去掉了,所以也没有研究。 ...

1、你的神盾局程序里定的定时器每200ms触发app_timer_change事件,意思是只执行app_timer_change吧,
2、此外,P_Window init_mwd_window()函数多长时间更新一次呢,或者只是表盘一开始运行一次,但是我看你app_timer_change函数中更新的数据不全吧,比如高度、气压、步数、电量都在哪个函数里更新呢?
3、我没找到你程序里关于带刻度的电量图片是如何建立图层并显示的(可能我被电量百分比搞混了)
问题比较多,多谢啦

2

主题

18

帖子

380

麦力

精华
0
阅读权限
30
在线时间
15 小时

36#
 楼主| 发表于 2016-8-30 08:46:32 | 只看该作者
dustin134 发表于 2016-8-29 22:16
1、你的神盾局程序里定的定时器每200ms触发app_timer_change事件,意思是只执行app_timer_change吧,
2、 ...

是这样的。我发给你的是我把神盾局表盘修改了日期和星期刷新之后的版本,并不是我自己的表盘文件。在神盾局表盘里,app_timer_change只负责刷新蓝牙状态之类的少数数据,大部分数据实在另一个函数里每分钟刷新一次的。
init_mwd_window是表盘初始化时候运行,只运行一次。大部分数据刷新在app_zola_watch_time_change里面。是通过注册maibu_service_sys_event_subscribe(app_zola_watch_time_change);回调实现的。
电量图层在源代码里有,只是被注释掉了。你可以找app_plug_status_bar_create(p_window, NULL, NULL, NULL);开头的四句,就是负责生成状态栏、时间、电量、蓝牙的

5

主题

235

帖子

1787

麦力

精华
0
阅读权限
50
在线时间
42 小时

麦步手表用户

37#
发表于 2016-8-30 10:52:16 | 只看该作者
klds1991 发表于 2016-8-30 08:46
是这样的。我发给你的是我把神盾局表盘修改了日期和星期刷新之后的版本,并不是我自己的表盘文件。在神盾 ...

再次感谢:handshake

5

主题

235

帖子

1787

麦力

精华
0
阅读权限
50
在线时间
42 小时

麦步手表用户

38#
发表于 2016-8-30 11:19:04 | 只看该作者
klds1991 发表于 2016-8-30 08:46
是这样的。我发给你的是我把神盾局表盘修改了日期和星期刷新之后的版本,并不是我自己的表盘文件。在神盾 ...

   maibu_service_sys_event_subscribe(time_change);
        /*注册接受手机数据回调函数*/
        maibu_comm_register_phone_callback(get_city_info_callback);
        
        /*注册通讯结果回调*/
    maibu_comm_register_result_callback(weather_comm_result_callback);
        
        uint32_t request_time = 15*60*1000;//默认15分钟请求数据
               
        //是安装表盘的情况,则记录时间,并设置快速查询
        if(g_start_seconds_flag == 0)
        {
                struct date_time tt1;
                app_service_get_datetime(&tt1);
                g_start_seconds = app_get_time(&tt1);
               
                request_time = 5 * 1000;//在没有获取过数据的情况下5秒获取一次数据
                g_callback_request_flag = 1;//设置快速查询标志
                        
        }
        g_start_seconds_flag = 1;

        time_change(SysEventTypeTimeChange,NULL);
        
        //判断是否距离上次成功获得数据超过5分钟
        if(get_time_out_flag(5)||(g_weather_bmp_key == -1))
        {
                //请求GPS数据并注册GPS数据请求超时回调
                request_get_city_info();
               
        }

上面一堆回调函数,比如maibu_service_sys_event_subscribe(time_change);、maibu_comm_register_result_callback(weather_comm_result_callback);以及maibu_comm_register_result_callback(weather_comm_result_callback);等,这些都是由下面15分钟定时器决定进行刷新数据的吗?主要是跟我以前编程内容差别太大,不好理解

2

主题

18

帖子

380

麦力

精华
0
阅读权限
30
在线时间
15 小时

39#
 楼主| 发表于 2016-8-30 12:58:08 | 只看该作者
dustin134 发表于 2016-8-30 11:19
maibu_service_sys_event_subscribe(time_change);
        /*注册接受手机数据回调函数*/
        mai ...

并不都是15分钟。这个刷新是调用的app_service_timer_subscribe(request_time, app_weather_update_timer_callback, NULL)。在main里这个只调用了一次,而在app_weather_update_timer_callback方法里这个是重复调用的,也就是在app_weather_update_timer_callback里决定了刷新的频率。刷新频率会根据刷新的结果进行调整,也就是app_service_timer_subscribe((30-(15*get_front_or_back_flag()))*60*1000, app_weather_update_timer_callback, NULL)

5

主题

235

帖子

1787

麦力

精华
0
阅读权限
50
在线时间
42 小时

麦步手表用户

40#
发表于 2016-8-30 13:07:31 | 只看该作者
klds1991 发表于 2016-8-30 12:58
并不都是15分钟。这个刷新是调用的app_service_timer_subscribe(request_time, app_weather_update_timer ...

这回清楚了,我都觉得自己太笨了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|麦步官方论坛 ( 粤ICP备12052190号  

GMT+8, 2024-11-24 00:59 , Processed in 0.081833 second(s), 24 queries .

Powered by Discuz! X3.2

© 2012-2021 Comsenz Inc.

快速回复 返回顶部 返回列表