Сброс флэш-памяти с маршрутизатора с помощью C

Я создаю приложение, которое сбрасывает флэш-память маршрутизатора (аналогично brn-tool). Флэш-память маршрутизатора может быть выгружена из его загрузчика, к которому я уже могу получить доступ через последовательный кабель.

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

У меня проблемы с получением остальных байтов флэш-памяти.

Как упоминалось ранее, байты могут быть прочитаны из меню загрузчика, выбрав соответствующую опцию и введя количество байтов для чтения. Код выглядит следующим образом.

int ReturnByte(int FileDescriptor, char * StartAddress)
{

// Create the Variable to hold the Start Address in Hexadecimal Notation

char ModdedStartAddress[10];

// Convert the Decimal Input to Hexadecimal

sprintf(ModdedStartAddress,"%X", (unsigned int)strtol(StartAddress, NULL, 10));

// Append a \r to simulate an Enter Press

ModdedStartAddress[strlen(ModdedStartAddress)] = '\r';

 // Go inside the Read Menu

char Character = 'R';

write(FileDescriptor, &Character, 1);   

// Input the Starting Read Address

write(FileDescriptor,ModdedStartAddress, sizeof(ModdedStartAddress ) - 1);  

// Set the Data Length to 1 Byte

Character = '3';

write(FileDescriptor, &Character, 1);   

// Set the Read Count to 10000

write(FileDescriptor, "10000\r", sizeof("10000"));

return 10000;


}

При однократном запуске метод работает нормально и правильно выводит 10000 байт.

Однако для создания полного Flash-дампа указанный выше метод должен запускаться несколько раз с другим начальным адресом. Когда метод запускается несколько раз, последовательность для меню и т. Д. Не выполняется внутри подсказки, а выполняется, пока данные из памяти возвращаются устройством.

Обзор того, как работает меню, выглядит следующим образом:

Read Menu (Option R)
    Start Address to Read
    Data Length (Set to 3 for 1 Byte)
    Read Count (Set to a maximum of 10000)
        *The Router starts outputting a hex dump*
Back to Menu

Я пытаюсь выяснить, есть ли способ проверить, что все данные были отправлены с последовательного порта, чтобы повторно запустить метод.

Я использую библиотеку termios для соединения с последовательным портом.

Спасибо, Эндрю Борг

1 ответ

Я не уверен, что я правильно понял ваш вопрос, но я постараюсь попробовать.

Если вы запрашиваете конкретную длину / размер данных (счетчик чтения (опция меню)), поэтому, когда ваша программа перестает получать поток байтов, вы просто подсчитываете полученные вами байты и сравниваете их с количеством запрошенных вами байтов. для повторного считывания.

Надеюсь, я помогу, если я не прав, пожалуйста, дайте мне знать!;)

Другие вопросы по тегам