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

2023-12-08

背景:

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

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

主板使用旧的标准通信协议,称为YMODEM. http://en.wikipedia.org/wiki/YMODEM主板支持该功能,目前我们可以在windows平台上使用超级终端进行固件升级。

我的问题是:

是否可以在Android应用程序中使用YMODEM协议来执行重新刷新?

如果是,怎么办?任何帮助将不胜感激!!感谢您对此进行调查!


对于迟到的回复表示歉意,但这可能会有所帮助......是的,这绝对是可能的。我已经使用 Nexus 7 和带有 ARM 处理器的外部设备完成了此操作。 Nexus 7 必须在启用 USB 调试的情况下获得 root 权限。我用了伍格弗莱什的Nexus Root 工具包——非常简单。

接下来(请坐在座位上),您必须编写应用程序以使用 YModem 协议。一种选择是使用android NDK(本机开发套件)编译用C/C++编写的YModem协议(尝试Tixy's)。你需要cygwin or mingw如果您使用的是 Windows,请在安装 NDK 之前进行。

假设您使用 Windows 并且已安装 NDKc:\android-ndk-r8b-windows\android-ndk-r8b。您可以使用安装了 adt 插件的 Eclipse,假设您的项目的新工作空间是 c:\android-workspace。您可以使用批处理文件从项目中执行 NDK make (c:\android-workspace\batch.bat):

C:\android-ndk-r8b-windows\android-ndk-r8b\ndk-build.cmd 
PAUSE

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

接口.cpp:

#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 files).

您可以将要刷新的二进制文件放在/sdcard/。下载文件浏览器来查看它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于升级外部主板的 Android 应用程序 的相关文章

随机推荐