在安卓中实现Zigbee串口设备采集模块

前段时间做了一个移动开发的嵌入式项目,目前有时间所以写这篇博客,第一次写,多有不对望指正
好入正题,希望通俗易懂
安卓系统是架构在Linux上的,如果要将一个串口设备让应用层APP识别,或者说将数据读取出来应该有一下的几个必要的事要做
1、APP是用java写的,因此要实现Java调用C/Cpp代码,
2、应该有C/Cpp编写的Linux应用
3、应该有Linux驱动
4、应该要定义协议
——————————————————————————————>
上面的4步实际上google[今天这小伙18岁了],在设计安卓的时候已经做好了,我们只需要依葫芦画瓢而已。
1、 实际上是android的JNI开发,有两种方式:NDK和直接使用CPP写一个native方法的调用表然后再JNI代码中实现。
2、 这就对应着android中的HAL开发,和开发Linux的应用是一样的。
3、 这个通常不需要去开发,因为linux自带PL2303的USB转串口的驱动,如果是纯粹的串口设备的话需要自己去开发驱动。
4、协议的定义是许多外设IC和SOC通信时必须做的如GPRS模块的AT指令,GPS的nema数据,但是这里指的是和Cyber_M0板子通信的协议。
——————————————————————————————>
设计的思路是这四步,但是凡事总有仙人发明的轮子,linux哲学就是不要发明重复的轮子,哈哈,实际上android的GPS代码和我们要开发的几乎是一样的。
一、 JNI的开发:(设计从简,因为把握主线理解这种移动开发模式为主,不再模仿GPS那种直接将他做成安卓的服务,做成Framework层的东西)。

static JNINativeMethod zgbMethods[] = {
    {
  "InitZgb", "()I", (void *)Init_zgb},
    {
  "CloseZgb", "()I", (void *)close_zgb},
    {
  "Ledctrl", "(I)I", (void *)Ledctrl_zgb},
    {
  "Fanctrl", "(I)I", (void *)Fanctrl_zgb},
};

代码只设计打开四个native的接口。
InitZgb:负责初始化设备,主要是打开设备节点,绑定串口的一次参数。

/*------------------------------------------------------
注册相应的回调方法
加载HAL库
获取HAL的接口
打开设备创建设备节点
成功返回0
失败返回-1
------------------------------------------------------*/
jint Init_zgb(JNIEnv *env, jobject thiz)
{

    ALOGD("-----%s--------\n", __FUNCTION__);

    jint ret,err;
    /*将从主线程传递过来的对象做成本地全局的*/
    if (!mCallbacksObj)
        mCallbacksObj = env->NewGlobalRef(thiz);

    if (!mCallbacksObj)
        ALOGD("mCallbacksObj get error \n");

#ifdef NEVER/*这里将数据单独做成一个类在JNI无法找到,水很深没研究透*/
    jclass SensorCls = env->FindClass(
    "com/wl/zgb/bean/SensorData");
#else/*因为接口简单所以Java里面的方法设计在native类里面*/
    jclass SensorCls = env->FindClass(
    "com/android/zgb/ZgbComCtrl");
#endif 

    method_reportHumTemp = env->GetMethodID(SensorCls, "ReportHumTemp", "(Ljava/lang/String;)V");

    ret 
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值