首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于升级外部主板的Android应用程序

用于升级外部主板的Android应用程序
EN

Stack Overflow用户
提问于 2011-10-18 04:41:31
回答 1查看 859关注 0票数 2

背景:

我们创建了一个Android应用程序,目前通过蓝牙连接与外部主板进行通信。板转发出命令,以不同的速度运行一个或多个马达.(此应用程序是为海洋工业的特定任务而构建的)

我们的目标是增强该应用程序,以便android移动用户(在未来)能够通过在通过蓝牙连接的应用程序上发布命令来升级主板固件。

主板使用了一个名为YMODEM的旧的标准通信协议。http://en.wikipedia.org/wiki/YMODEM主板支持这一功能,我们目前能够使用windows平台上的超级终端处理固件升级。

我的问题是

在android应用程序中可以使用YMODEM协议执行重闪吗?

如果是,怎么做?任何帮助都将不胜感激!!谢谢您的调查!

EN

回答 1

Stack Overflow用户

发布于 2012-10-16 03:37:19

抱歉反应晚了,但这可能会有帮助.是的,这绝对是可能的。我正是用nexus 7和带有ARM处理器的外部设备做到了这一点。nexus 7必须基于启用的USB调试。我使用了乌格雷斯特连接根工具包--非常简单。

接下来(保持座位),您必须编写应用程序来使用YModem协议。一种选择是使用android (本地开发工具包)编译用C/C++编写的YModem协议(尝试泰西氏)。在安装NDK之前,如果您正在使用Windows,您将需要cygwin或mingw。

因此,假设您正在使用窗口,并且在c:\android-ndk-r8b-windows\android-ndk-r8b中安装了NDK。您可以在安装adt插件时使用Eclipse,并且假设项目的新工作区是c:\android-工作区。可以使用批处理文件从项目(c:\android-workspace\batch.bat)执行NDK:

代码语言:javascript
复制
C:\android-ndk-r8b-windows\android-ndk-r8b\ndk-build.cmd 
PAUSE

只需确保导出C/C++函数,以便它们可以被JAVA应用程序使用。

Interface.cpp:

代码语言:javascript
复制
#include <string.h>
#include <jni.h>
#include <dirent.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#include "ymodem_tx.h"
#include "ymodem_main.h"

extern "C" {

JNIEXPORT int JNICALL Java_com_example_ymupload_MainActivity_ymodemSent( JNIEnv* env, jobject obj, int portNumber, jstring fileName)
{
    int status = 0;
    if (portNumber >= 0)
    {
        const char* input = env->GetStringUTFChars(fileName, 0);

        status = ymodem_sentFile(portNumber, input);

        env->ReleaseStringUTFChars(fileName, input);
    }
    else
    {
        status = 0xFF;
    }

    return status;
}


JNIEXPORT int JNICALL Java_com_example_ymupload_MainActivity_YmodemGetTotalSize( JNIEnv* env, jobject obj)
{
    return ymodem_getTotalSize();
}


JNIEXPORT int JNICALL Java_com_example_ymupload_MainActivity_YmodemGetTransferredSize( JNIEnv* env, jobject obj)
{
    return ymodem_getTransferredSize();
}



JNIEXPORT bool JNICALL Java_com_example_ymupload_MainActivity_YmodemIsSending( JNIEnv* env, jobject obj)
{
    return ymodem_bIsSending();
}

JNIEXPORT int JNICALL Java_com_example_ymupload_MainActivity_YmodemGetStatus( JNIEnv* env, jobject obj)
{
return ymodem_uGetStatus();
}


JNIEXPORT jstring JNICALL Java_com_example_ymupload_MainActivity_YmodemGetFileName( JNIEnv* env, jobject obj)
{
    return env->NewStringUTF(ymodem_pGetFileName());
}


}

还要确保将该文件和其他.c.cpp.h文件放在项目文件夹中的jni文件夹中,例如c:\android-workspace\prog-name\jni,以及Android.mk文件(关于Android.mk文件还有很多其他堆栈问题)。

您可以将想要闪烁的二进制文件放在/sdcard/上的文件夹中。下载一个文件浏览器来查看它们。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7802506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档