Форум программистов, компьютерный форум CyberForum.ru

C++: COM, OLE, ActiveX

Войти
Регистрация
Восстановить пароль
 
Антон Бутов
0 / 0 / 0
Регистрация: 04.12.2016
Сообщений: 9
#1

Отправить Ctrl+Z по UART - C++ COM

24.12.2016, 11:41. Просмотров 407. Ответов 1
Метки нет (Все метки)

Устройство отменивается данными с sim900 AT коммандами, проблема в том, что в конце сообщение необходимо закрыть комбинацией Cntrl+Z она же \032 оно же \x1a в общем виде порядок передаваемых комманд выглядит так
AT+CMGF=1
AT+CMGS="phone#"
message
Ctrl-Z

Множество проб и ошибок передать комбинацию цифр как Ctrl-Z к успеху не привело, потратил несколько часов на поиске в интернете, где нашел кучу каких-тообрывочных данных, о каких-о пролемах с буфферизацией символа, необходимости его передать с конечной длинной, что вообщем-то мне ни о чем не говорит. Вот мой код, он отлично отрабатывает до Cntl+Z что я вижу через Com-порт, нет только закрывающего символа, очень прошу помочь --

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
char MySmsText [] = "All Normal" ;// переменная хранения сообщения
char MyNumberPhone [] ="+88888888888"; // Переменная для хранения номера
int message(char MySmsText [],char MyNumberPhone []){
 FILE *fptty = fopen("/dev/ttyS2", "w");
fprintf(fptty, "AT+CMGF=1\r\n");  //Инициация передач смск -- AT+CMGF=1<enter>
delay (5000);
fprintf(fptty, "AT+CMGS="%s"\r\n", MyNumberPhone);   // AT+CMGS=(номер телефона)<enter>
delay (4000);
fprintf(fptty, "%s", MySmsText);   // "All Normal", GSM module!
delay (1000);
 fprintf(fptty, "\032");  // Строка которая должна отправить Ctrl +Z, но вместо этого отправлся   032 ))
 fclose (fptty);
         }
main(){ 
 message(MySmsText,MyNumberPhone);
}
Добавлено через 3 часа 2 минуты
что-то там связано с передачей нулевого символа кажись, может кто знает как его передать в этом коде?

Добавлено через 4 часа 42 минуты
Эта проблема каким-то образом разрешается через отправу символа с каким то символическим нулем, в общем вот этот код, но я не понимаю как его прикрутить к моей задаче

C
1
2
3
4
5
6
7
bzero (buffer, sizeof(buffer));
read(fd, buffer, sizeof(buffer));
strcpy(buffer, "AT+CMGS ="+60125649001"\r\nhello\n");
buffer[strlen(buffer)+1] = '\0';
buffer[strlen(buffer)] =(char)0x1A;
write (fd, buffer, strlen(buffer)+1);
wait();
человек что-то отписался на английском --
Well, It was my mistake. I generalized the size of the data sent t following 0x1A meant. To solve this I used strlen to send the real size of the char * sent to the serial port.o the serial port. I think since the sent size defined was larger, the values following the ctrl-z hex value 0x1A were garbage values. So my command could not save the sms in memory as it did not know the values
и вот вроде , как то еще вот так можно символ подсунуть
C
1
char ctrlZ[]={0x1A,0x00};
применяя strcpy кто-нибудь что-нибуд в этом понимает? программисты здесь вообще бывают?))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2016, 11:41     Отправить Ctrl+Z по UART
Посмотрите здесь:

Копирование картиннки из интернета и вставка документ путём Ctrl+C, Ctrl+V MS Word
Не работает ctrl+c, ctrl+v, ctrl+a, ctrl+x в ubuntu 12.04 Ubuntu Linux
Как отловить нажатие ctrl+v ctrl+c ctrl+x key_Press C#
Java SE JTextPane, функции Ctrl+A, Ctrl+C, Ctrl+X перенести на кнопку
Delphi Текст с Memo1 ctrl+c и ctrl+v в определённую программу автоматически
Разработать программу, которая не реагирует на нажатия клавиш Ctrl+Break и Ctrl+C Assembler
GUI table - вставка целикового массива из экселя (Ctrl+C - Ctrl+V) Matlab
Как разместить скрипт на все страницы сайта (без Ctrl+c, Ctrl+v)? JavaScript
Написать shell-процедуры работающие с сигналами Ctrl+C|Ctrl+\ Bash
Отправить нажатие Ctrl+F9 программе работающего в фоном режиме Visual Basic .NET .NET 3.x
Awesomium: по нажатию на Ctrl+T / Ctrl+W создавать новые и закрывать текущие формы C#

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6851 / 4062 / 927
Регистрация: 30.01.2014
Сообщений: 6,859
24.12.2016, 16:20     Отправить Ctrl+Z по UART #2
Цитата Сообщение от Антон Бутов Посмотреть сообщение
C++
1
fprintf(fptty, "\032"); // Строка которая должна отправить Ctrl +Z
Для начала попробуй так (вместо процитированного):
C++
1
fprintf(fptty, "\x1A");
Yandex
Объявления
24.12.2016, 16:20     Отправить Ctrl+Z по UART
Ответ Создать тему
Опции темы

Текущее время: 13:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru