|
本帖最后由 wangdapengxp 于 2013-5-16 11:19 编辑
新手,只能模仿和抄袭canutils写了一个测试程序,在android下测试过了,可以用,但是新的问题出现了。
我应用程序是java做的,需要现实can数据,我怎么才能在java中获得这些can的数据呢?难道还是必须写hal层和jni层么?
附件是我抄袭canutils写的android下的can测试程序,在串口终端里运行cansend 会自己初始化can波特率为50000bps,然后发送两个数据 id为0x11 数据为y 另一个 id为0x22 数据为n 发送完以后会等待接受数据,只收id为0x11的数据,接受到数据后会把数据显示到终端上,然后循环,继续发送yn那两个数据,继续进入等带接受数据。
请高手指点下一步需要做什么,才能让我在java中去处理can数据,
我已经尝试了如下内容:模仿led创建了hal层的can.h 实现文件can.c 其中can.c几乎就是cansend的内容,编译android文件系统,提示sockaddr_can这个结构体不认识,是不能这么用,还是我那里写错了。大致代码如下:
__BEGIN_DECLS
/**
* The id of this module
*/
#define CAN_HARDWARE_MODULE_ID "can"
struct led_module_t
{
struct hw_module_t common;
};
struct can_control_device_t {
struct hw_device_t common;
int (*can_init)(const char *name);
int (*can_do_start)(const char *name);
int (*can_do_stop)(const char *name);
int (*can_send)(int32_t id,int dlc,char *data);
int (*can_dump)(const char *name);
};
__END_DECLS
#endif // ANDROID_LED_INTERFACE_H
模仿led.h写的,基本没什么改的。我不知道方法声明那对不对,请指教
static int can_init(const struct hw_module_t *module, char const *name,
struct hw_device_t **device) {
struct can_control_device_t *dev;
dev = (struct can_control_device_t *) malloc(
sizeof(struct can_control_device_t));
if (dev == NULL)
return 0;
memset(dev, 0, sizeof(*dev));
dev->common.tag = HARDWARE_DEVICE_TAG;
dev->common.version = 0;
dev->common.module = module;
dev->common.close = (int (*)(struct hw_device_t *)) can_do_stop;
*device = (struct hw_device_t *) &dev->common;
dev->can_send = can_send;
dev->can_dump = can_dump;
if (can_open() == -1) {
free(dev);
dev = NULL;
return -1;
}
return 0;
}
static struct hw_module_methods_t can_module_methods = {
open : can_init
};
const struct can_module_t HAL_MODULE_INFO_SYM =
{
common:
{
tag: HARDWARE_MODULE_TAG,
version_major: 1,
version_minor: 0,
id: CAN_HARDWARE_MODULE_ID,
name: "can Stub",
author: "embedsky",
methods: &can_module_methods,
}
};
这个是can.c的部分内容,其他没贴出来的,几乎都是和cansend。c一样。
提示sockaddr_can这个结构体好像不认识,还有PF_CAN和CAN_RAW什么的都说没定义,我头文件引用了sys/socket.h和linux/can.h还有什么linux/netlink什么的 凡是cansend.c中引用的 我都加到can.c中了,为什么编译cansend可以收发,编译android系统却不认识这些了呢
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|