如有问题请联系我,微信 814565668.
目标:用crank实现仪表盘的动态效果。
参考博客:http://blog.csdn.net/guokehello/article/details/51644891
他的代码没有验证,这里用的是软件带的sample中的代码。应该是差不多一样的。
1.环境准备:
1)crank storyboard下载
下载地址:http://www.cranksoftware.com/cranksoftware/v5.1.0/eval/storyboard/Crank_Storyboard_Suite-v5.1.0.exe
30天试用版,需要用手机和邮箱申请。
2)vs2013下载安装
2.软件安装:默认安装即可。
3.运行sample程序。
导入工程
File->Import->Storyboard Sample->storyboard_io,导入就可以了。
导入后界面显示效果如下,还可以吧,比较绚。下面我们让这个界面动起来。
创建底层数据驱动
Crank Storyboard Suite的特点在于可以方便的开发界面,而且不同平台之间可以方便的移植,底层提供了接口。如果需要换平台的话只需要将底层的数据驱动修改一下就可以运行了。导入的工程里面有如下文件:
其实这个就是数据驱动的C语言代码了。我这里用的是Visual Studio 2012作为编译环境。新建工程文件,copy以下代码:
/*
* Copyright 2017, Crank Software Inc. All Rights Reserved.
*
* For more information email info@cranksoftware.com.
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <inttypes.h>
#ifdef WIN32
#include <windows.h>
#else
#include <unistd.h> // for usleep
#endif
#include "greio.h"
#define CLUSTER_UPDATE_EVENT "cluster_update"
#define CLUSTER_UPDATE_FMT "2u1 speed 2u1 rpm 2u1 fuel 2u1 battery 2u1 oil 2u1 odometer 2u1 trip"
// Cluster update data structure
typedef
struct
cluster_update_event {
uint16_t speed;
uint16_t rpm;
uint16_t fuel;
uint16_t battery;
uint16_t oil;
uint16_t odometer;
uint16_t trip;
} cluster_update_event_t;
/**
* cross-platform sleep
*/
void
sleep_ms(
int
milliseconds) {
#ifdef WIN32
Sleep(milliseconds);
#else
usleep(milliseconds * 1000);
#endif
}
int
main(
int
argc,
char
**argv) {
gre_io_t *send_handle;
gre_io_serialized_data_t *nbuffer = NULL;
cluster_update_event_t event_data;
int
ret;
// Connect to a channel to send messages (write)
send_handle = gre_io_open(
"cluster"
, GRE_IO_TYPE_WRONLY);
if
(send_handle == NULL) {
fprintf
(stderr,
"Can't open send channel\n"
);
return
0;
}
memset
(&event_data, 0,
sizeof
(event_data));
while
(1) {
// Simulate data acquisition ...
sleep_ms(80);
event_data.speed = (event_data.speed + 1) % 200;
event_data.rpm = (event_data.rpm + 50) % 10000;
// Serialize the data to a buffer
nbuffer = gre_io_serialize(nbuffer, NULL, CLUSTER_UPDATE_EVENT, CLUSTER_UPDATE_FMT, &event_data,
sizeof
(event_data));
if
(!nbuffer) {
fprintf
(stderr,
"Can't serialized data to buffer, exiting\n"
);
break
;
}
// Send the serialized event buffer
ret = gre_io_send(send_handle, nbuffer);
if
(ret < 0) {
fprintf
(stderr,
"Send failed, exiting\n"
);
break
;
}
}
//Release the buffer memory, close the send handle
gre_io_free_buffer(nbuffer);
gre_io_close(send_handle);
return
0;
}
|
配置一下VC++目录包含目录、库目录以及连接器里面的附加依赖项。关于如何配置这里不再详述,每个编译环境配置有所不同。
修改模拟配置
注意第2)步代码里面的
send_handle = gre_io_open( "cluster", GRE_IO_TYPE_WRONLY );
- 1
打开的是cluster通道,需要配置一下Storyboard的simulation configurations使得通道名字一致才可以收到信息,操作如下所示:
运行实例
首先点击Simulate storyboard project打开模拟界面,先运行模拟器,再运行vs2013. 然后即可看到仪表盘的变化。 (如果运行vs2013代码有问题,往本文下看)
问题汇总:
1.这个include "greio.h"头文件会报错
解决办法:在crank安装路径里面搜索这个文件,找到后粘贴到当前的这个工程里面。如下
2.提示缺少lib库。
解决办法:
选择要添加lib库的工程,鼠标右键选择属性,在选项的最下面:
在属性页左边菜单栏,有很多选项,选择linker->general:
可以看到右边的选项都发生变化了,其中有一项additional library directories,最后面有个下拉按钮,点击下拉按钮,弹出新页面:
单击黄色文件夹状按钮,可以看到下面多了一行可以编辑的。按钮最后的省略号状按钮:
弹出文件夹选择窗口,选择你需要添加的库所在的目录,点击下面的选择按钮:
比如我的是:C:\Program Files (x86)\Crank_Software\Storyboard_Engine\5.1.201707240438\win32-x86-opengles_2.0-obj\lib
然后在菜单栏选择linker->input:输入你要引用的lib文件名,注意是全名,要加扩展名的:
这样就可以了。