Android-приложение для обновления внешней материнской платы - PullRequest
2 голосов
/ 18 октября 2011

Фон:

Мы создали приложение для Android, которое в настоящее время связывается с внешней материнской платой через соединение Bluetooth. Плата в свою очередь выдает команды для запуска одного или нескольких двигателей на разных скоростях. (Это приложение было создано для конкретной задачи в морской промышленности)

Наша цель - усовершенствовать приложение, чтобы пользователи мобильных устройств Android (в будущем) могли обновить прошивку материнской платы, введя команду в приложении, подключенном через Bluetooth.

Материнская плата использует старый стандартный протокол связи, который называется YMODEM. http://en.wikipedia.org/wiki/YMODEM Материнская плата поддерживает эту функцию, и в настоящее время мы можем выполнить обновление прошивки с помощью гипертерминала на платформе Windows.

Мой вопрос :

Можно ли использовать протокол YMODEM в приложении для Android для повторной прошивки?

Если да, то как? Любая помощь будет принята с благодарностью! Спасибо за внимание!

1 Ответ

7 голосов
/ 16 октября 2012

Извините за поздний ответ, но это может быть полезно ... Да, это определенно возможно.Я сделал именно это с Nexus 7 и внешним устройством с процессором ARM.Nexus 7 должен быть рутирован с включенной отладкой по USB.Я использовал wugfresh nexus root toolkit - это было очень просто.

Далее (держитесь за свои места), вы должны написать свое приложение, чтобы использовать протокол YModem.Одним из вариантов является использование Android NDK (Native Development Kit) для компиляции протокола YModem, написанного на C / C ++ (Попробуйте Tixy's ).Вам понадобится cygwin или mingw перед установкой NDK, если вы работаете с Windows.

Итак, допустим, вы используете windows и у вас установлен NDKв c:\android-ndk-r8b-windows\android-ndk-r8b.Вы можете использовать Eclipse с установленным плагином adt, и, скажем, ваша новая рабочая область для проекта - 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.

Interface.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).

Вы можете поместить двоичные файлы, которые хотите записать, в папку на /sdcard/.Загрузите файловый браузер, чтобы увидеть их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...