Добавлены коды завершения программы:

0 - ОК
-1 - ошибка в командной строке или структуре файлов
-2 - ошибки, возвращаемые модемом
pull/15/head^2
forth32 7 years ago
parent da9d2fed27
commit 2baea5037c

@ -39,7 +39,7 @@ int npart=0; // число разделов в таблице
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
void main(int argc, char* argv[]) {
int main(int argc, char* argv[]) {
unsigned int opt;
int res;
@ -70,7 +70,7 @@ printf("\n Утилита предназначена для прошивки м
-r - принудительно перезагрузить модем без прошивки разделов\n\
-f - прошить даже при наличии ошибок CRC в исходном файле\n\
\n",argv[0]);
return;
return 0;
case 'p':
strcpy(devname,optarg);
@ -110,7 +110,7 @@ printf("\n Утилита предназначена для прошивки м
case '?':
case ':':
return;
return -1;
}
}
printf("\n Программа для прошивки устройств на Balong-чипсете, V3.0.%i, (c) forth32, 2015, GNU GPLv3",BUILDNO);
@ -121,17 +121,17 @@ printf("\n----------------------------------------------------------------------
if (eflag&sflag) {
printf("\n Ключи -s и -e несовместимы\n");
return;
return -1;
}
if (kflag&rflag) {
printf("\n Ключи -k и -r несовместимы\n");
return;
return -1;
}
if (nflag&(eflag|sflag|mflag)) {
printf("\n Ключ -n несовместим с ключами -s, -m и -e\n");
return;
return -1;
}
@ -147,7 +147,7 @@ if (optind>=argc) {
printf("\n - Не указан каталог с файлами\n");
else
printf("\n - Не указано имя файла для загрузки, используйте ключ -h для подсказки\n");
return;
return -1;
}
if (nflag)
@ -158,7 +158,7 @@ else {
in=fopen(argv[optind],"rb");
if (in == 0) {
printf("\n Ошибка открытия %s",argv[optind]);
return;
return -1;
}
}
@ -178,14 +178,14 @@ if (mflag) show_file_map();
// выход по ошибкам CRC
if (!fflag && errflag) {
printf("\n\n! Входной файл содержит ошибки - завершаем работу\n");
return;
return -1;
}
//------- Режим разрезания файла прошивки
if (eflag|sflag) {
fwsplit(sflag);
printf("\n");
return;
return 0;
}
sio:
@ -198,7 +198,7 @@ open_port(devname);
// Определяем режим порта и версию dload-протокола
res=dloadversion();
if (res == -1) return;
if (res == -1) return -2;
if (res == 0) {
printf("\n Модем уже находится в HDLC-режиме");
goto hdlc;

@ -1 +1 @@
225
226

@ -200,7 +200,7 @@ printf("\n");
if (!dload_start(ptable[part].hd.code,ptable[part].hd.psize)) {
printf("\r! Отвергнут заголовок раздела %i (%s)",part,ptable[part].pname);
printerr();
return;
exit(-2);
}
maxblock=(ptable[part].hd.psize+(fblock-1))/fblock; // число блоков в разделе
@ -213,7 +213,7 @@ printf("\n");
if (!dload_block(part,blk,ptable[part].pimage)) {
printf("\n! Отвергнут блок %i раздела %i (%s)",blk,part,ptable[part].pname);
printerr();
return;
exit(-2);
}
}
@ -221,7 +221,7 @@ printf("\n");
if (!dload_end(ptable[part].hd.code,ptable[part].hd.psize)) {
printf("\n! Ошибка закрытия раздела %i (%s)",part,ptable[part].pname);
printerr();
return;
exit(-2);
}
} // конец цикла по разделам
}

@ -109,7 +109,7 @@ uint32_t signlen; // длина подписи
if (gflag != 0) {
printf("\n Дублирующийся ключ -g\n\n");
exit(0);
exit(-1);
}
strcpy(parm,sparm); // локальная копия параметров
@ -132,7 +132,7 @@ if (strncmp(parm,"*,",2) == 0) {
signtype=atoi(sptr+1);
if (fw_description(signtype) == 0) {
printf("\n Ключ -g: неизвестный тип прошивки - %i\n",signtype);
exit(0);
exit(-1);
}
}
else {
@ -150,7 +150,7 @@ return;
perror:
printf("\n Ошибка в параметрах ключа -g\n");
exit(0);
exit(-1);
}
@ -167,5 +167,6 @@ uint8_t replybuf[200];
res=atcmd(signver,replybuf);
if ( (res<sizeof(SVrsp)) || (memcmp(replybuf,SVrsp,sizeof(SVrsp)) != 0) ) {
printf("\n ! Ошибка проверки цифровой сигнатуры - %02x\n",replybuf[2]);
exit(-2);
}
}

@ -170,11 +170,11 @@ usleep(100000);
res=atcmd("^DATAMODE",replybuf);
if (res != 6) {
printf("\n Неправильная длина ответа на ^DATAMODE");
exit(0);
exit(-2);
}
if (memcmp(replybuf,OKrsp,6) != 0) {
printf("\n Команда ^DATAMODE отвергнута, возможно требуется режим цифровой подписи\n");
exit(0);
exit(-2);
}
}
@ -203,12 +203,12 @@ unsigned char cmdver[7]={0x0c}; // команда запроса ве
iolen=send_cmd(cmdver,1,replybuf);
if (iolen == 0) {
printf("\n Нет ответа от модема в HDLC-режиме\n");
exit(0);
exit(-2);
}
if (replybuf[0] == 0x7e) memcpy(replybuf,replybuf+1,iolen-1);
if (replybuf[0] != 0x0d) {
printf("\n Ошибка получения версии протокола\n");
exit(0);
exit(-2);
}
i=replybuf[1];

Loading…
Cancel
Save