0 / 0 / 1
Регистрация: 04.12.2016
Сообщений: 9
1

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

24.12.2016, 11:41. Показов 3515. Ответов 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 кто-нибудь что-нибуд в этом понимает? программисты здесь вообще бывают?))
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.12.2016, 11:41
Ответы с готовыми решениями:

Как отправить Ctrl+V через SendKeys.Send()?
Скажите пожалуйста как сделать ctrl+v. Все перепробовал ничего не робит.

Отправить нажатие Ctrl+F9 программе работающего в фоном режиме
Доброго, гуглил вопрос и нашел массу не работающих решений :) - не получается отправить нажатие...

Как отправить в активное окно комбинацию клавиш Ctrl+T?
Как отправить в активное окно комбинацию клавиш Ctrl t ?

Как отправить форме сочетание клавиш - Ctrl+C - для копирования выделенного текста?
Всем доброго дня. Вопрос в следующем. На форме есть некий выделенный текст, нужно его скопировать...

1
18470 / 9627 / 2356
Регистрация: 30.01.2014
Сообщений: 16,880
24.12.2016, 16:20 2
Лучший ответ Сообщение было отмечено Антон Бутов как решение

Решение

Цитата Сообщение от Антон Бутов Посмотреть сообщение
C++
1
fprintf(fptty, "\032"); // Строка которая должна отправить Ctrl +Z
Для начала попробуй так (вместо процитированного):
C++
1
fprintf(fptty, "\x1A");
1
24.12.2016, 16:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.12.2016, 16:20
Помогаю со студенческими работами здесь

JTextPane, функции Ctrl+A, Ctrl+C, Ctrl+X перенести на кнопку
Класс JTextPane поддерживает нажатие клавиш таких как Ctrl+A, Ctrl+C, Ctrl+X и т. д. Вопрос...

Как отловить нажатие ctrl+v ctrl+c ctrl+x key_Press
Как правильно отловить нажатие ctrl+v ctrl+c ctrl+x в событии key_Press? я пробую так: private...

Не работает ctrl+c, ctrl+v, ctrl+a, ctrl+x в ubuntu 12.04
Здравствуйте, не работают такие горячие клавиши, может кто уже стыкался з данной проблемой. Как...

Сообщения для 2 UART выводятся в 1 UART, STM32F103C8T6
Почему может неправильно работать uart? Подключил 1 uart к пк через usb/uart переходник, а второй к...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru