|
|
|
@ -23,6 +23,8 @@
|
|
|
|
|
#include "util.h"
|
|
|
|
|
|
|
|
|
|
unsigned char replybuf[4096];
|
|
|
|
|
// флаг ошибки структуры файла
|
|
|
|
|
unsigned int errflag=0;
|
|
|
|
|
|
|
|
|
|
//***********************************************
|
|
|
|
|
//* Таблица разделов
|
|
|
|
@ -204,7 +206,7 @@ unsigned char NAKrsp[]={0x03, 0x00, 0x02, 0xba, 0x0a, 0x7e};
|
|
|
|
|
unsigned char SVrsp[]={0x0d, 0x0a, 0x30, 0x0d, 0x0a, 0x0d, 0x0a, 0x4f, 0x4b, 0x0d, 0x0a};
|
|
|
|
|
|
|
|
|
|
unsigned int dpattern=0xa55aaa55;
|
|
|
|
|
unsigned int mflag=0,eflag=0,rflag=0,sflag=0,nflag=0,kflag=0;
|
|
|
|
|
unsigned int mflag=0,eflag=0,rflag=0,sflag=0,nflag=0,kflag=0,fflag=0;
|
|
|
|
|
unsigned char filename [100];
|
|
|
|
|
|
|
|
|
|
unsigned char fdir[40]; // каталог для мультифайловой прошивки
|
|
|
|
@ -217,7 +219,7 @@ unsigned char cmd_getproduct[30]={0x45};
|
|
|
|
|
// Коды типов разделов
|
|
|
|
|
//-d - попытка переключить модем из режима HDLC в АТ-режим\n\
|
|
|
|
|
|
|
|
|
|
while ((opt = getopt(argc, argv, "hp:mersng:k")) != -1) {
|
|
|
|
|
while ((opt = getopt(argc, argv, "hp:mersng:kf")) != -1) {
|
|
|
|
|
switch (opt) {
|
|
|
|
|
case 'h':
|
|
|
|
|
|
|
|
|
@ -236,6 +238,7 @@ printf("\n Утилита предназначена для прошивки м
|
|
|
|
|
-s - разобрать файл прошивки на разделы с заголовками\n\
|
|
|
|
|
-k - не перезагружать модем по окончании прошивки\n\
|
|
|
|
|
-r - принудительно перезагрузить модем без прошивки разделов\n\
|
|
|
|
|
-f - прошить даже при наличии ошибок CRC в исходном файле\n\
|
|
|
|
|
\n",argv[0]);
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
@ -251,6 +254,10 @@ printf("\n Утилита предназначена для прошивки м
|
|
|
|
|
nflag=1;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 'f':
|
|
|
|
|
fflag=1;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 'r':
|
|
|
|
|
rflag=1;
|
|
|
|
|
break;
|
|
|
|
@ -349,6 +356,11 @@ if (mflag) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// выход по ошибкам CRC
|
|
|
|
|
if (!fflag && errflag) {
|
|
|
|
|
printf("\n\n! Входной файл содержит ошибки - завершаем работу\n");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//------- Режим разрезания файла прошивки
|
|
|
|
|
//--------------------------------------------
|
|
|
|
@ -383,7 +395,7 @@ sio:
|
|
|
|
|
#ifndef WIN32
|
|
|
|
|
|
|
|
|
|
if (!open_port(devname)) {
|
|
|
|
|
printf("\n - Последовательный порт %s не открывается\n", devname);
|
|
|
|
|
printf("\n! - Последовательный порт %s не открывается\n", devname);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -393,17 +405,17 @@ tcflush(siofd,TCIOFLUSH); // очистка выходного буфера
|
|
|
|
|
|
|
|
|
|
if (*devname == '\0')
|
|
|
|
|
{
|
|
|
|
|
printf("\n - Последовательный порт не задан\n");
|
|
|
|
|
printf("\n! - Последовательный порт не задан\n");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
res = open_port(devname);
|
|
|
|
|
if (res == 0) {
|
|
|
|
|
printf("\n - Последовательный порт COM%s не открывается\n", devname);
|
|
|
|
|
printf("\n! - Последовательный порт COM%s не открывается\n", devname);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else if (res == -1) {
|
|
|
|
|
printf("\n - Ошибка при инициализации COM-порта\n");
|
|
|
|
|
printf("\n! - Ошибка при инициализации COM-порта\n");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|