From ba6fd2bee06d53876c5700fe03148ea52011196a Mon Sep 17 00:00:00 2001 From: forth32 Date: Wed, 3 Aug 2016 07:17:29 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D1=83=D0=BF=D1=80=D0=BE=D1=89=D0=B5=D0=BD=D0=BD=D1=8B?= =?UTF-8?q?=D0=B9=20=D0=B2=D0=B2=D0=BE=D0=B4=20=D0=B8=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=20=D0=BF=D0=BE=D1=80=D1=82=D0=B0,=20=D0=BA=D0=B0=D0=BA?= =?UTF-8?q?=20=D0=B2=20qtools=20-=20-p1=20=D0=B2=D0=BC=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D0=BE=20-p/dev/ttyUSB1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- balong_flash.c | 30 ----------------------- hdlcio.c | 65 ++++++++++++++++++++++++++++++++++++++++++++------ hdlcio.h | 4 +++- 3 files changed, 61 insertions(+), 38 deletions(-) diff --git a/balong_flash.c b/balong_flash.c index e6b873a..0f43179 100644 --- a/balong_flash.c +++ b/balong_flash.c @@ -69,36 +69,6 @@ if (pcodes[j].code != 0) strcpy(pname,pcodes[j].name); // имя найдено else sprintf(pname,"U%08x",id); // имя не найдено - подставляем псевдоимя Uxxxxxxxx в тупоконечном формате } -//**************************************************** -//* Отсылка модему АТ-команды -//* -//* cmd - буфер с командой -//* rbuf - буфер для записи ответа -//* -//* Возвращает длину ответа -//**************************************************** -int atcmd(char* cmd, char* rbuf) { - -int res; -char cbuf[128]; - -strcpy(cbuf,"AT"); -strcat(cbuf,cmd); -strcat(cbuf,"\r"); - -port_timeout(100); -// Вычищаем буфер приемника и передатчика -tcflush(siofd,TCIOFLUSH); - -// отправка команды -write(siofd,cbuf,strlen(cbuf)); -usleep(100000); - -// чтение результата -res=read(siofd,rbuf,200); -return res; -} - //**************************************************** //* Определение версии прошивальщика //* diff --git a/hdlcio.c b/hdlcio.c index 7fe17d5..dfcbece 100644 --- a/hdlcio.c +++ b/hdlcio.c @@ -1,3 +1,5 @@ +// Низкоуровневые процедуры работы с последовательным портом и HDLC + #include #include #include @@ -19,6 +21,7 @@ char flash_mfr[30]={0}; char flash_descr[30]={0}; unsigned int oobsize=0; +static char pdev[500]; // имя последовательного порта struct termios sioparm; int siofd; // fd для работы с Последовательным портом @@ -233,14 +236,29 @@ if (!send_unframed_buf(outcmdbuf,iolen)) return 0; // ошибка переда return receive_reply(iobuf,0); } +//*************************************************** +// Открытие и настройка последовательного порта +//*************************************************** + +int open_port(char* devname) { -//************************************* -// Настройка Последовательного порта -//************************************* +int i,dflag=1; +char devstr[200]={0}; -int open_port(char* devname) -{ -siofd = open(devname, O_RDWR | O_NOCTTY |O_SYNC); +strcpy(pdev,devname); // сохраняем имя порта + +// Вместо полного имени устройства разрешается передавать только номер ttyUSB-порта + +// Проверяем имя устройства на наличие нецифровых символов +for(i=0;i'9')) dflag=0; +} +// Если в строке - только цифры, добавляем префикс /dev/ttyUSB +if (dflag) strcpy(devstr,"/dev/ttyUSB"); +// копируем имя устройства +strcat(devstr,devname); + +siofd = open(devstr, O_RDWR | O_NOCTTY |O_SYNC); if (siofd == -1) return 0; bzero(&sioparm, sizeof(sioparm)); // готовим блок атрибутов termios @@ -254,11 +272,13 @@ tcsetattr(siofd, TCSANOW, &sioparm); return 1; } + //************************************* -// Настройка Последовательного порта +// Настройка времени ожидания порта //************************************* void port_timeout(int timeout) { + bzero(&sioparm, sizeof(sioparm)); // готовим блок атрибутов termios sioparm.c_cflag = B115200 | CS8 | CLOCAL | CREAD ; sioparm.c_iflag = 0; // INPCK; @@ -350,3 +370,34 @@ fclose(in); return 1; } + +//**************************************************** +//* Отсылка модему АТ-команды +//* +//* cmd - буфер с командой +//* rbuf - буфер для записи ответа +//* +//* Возвращает длину ответа +//**************************************************** +int atcmd(char* cmd, char* rbuf) { + +int res; +char cbuf[128]; + +strcpy(cbuf,"AT"); +strcat(cbuf,cmd); +strcat(cbuf,"\r"); + +port_timeout(100); +// Вычищаем буфер приемника и передатчика +tcflush(siofd,TCIOFLUSH); + +// отправка команды +write(siofd,cbuf,strlen(cbuf)); +usleep(100000); + +// чтение результата +res=read(siofd,rbuf,200); +return res; +} + diff --git a/hdlcio.h b/hdlcio.h index 4304c7e..102570f 100755 --- a/hdlcio.h +++ b/hdlcio.h @@ -4,4 +4,6 @@ void dump(char buffer[],int len,long base); int send_cmd(unsigned char* incmdbuf, int blen, unsigned char* iobuf); int open_port(char* devname); int find_file(int num, char* dirname, char* filename,unsigned int* id, unsigned int* size); -void port_timeout(); \ No newline at end of file +void port_timeout(); +int atcmd(char* cmd, char* rbuf); +