Adafruit Fona устанавливает соединение с эхо-сервером, но не передает никаких данных
Используя mbed OS и ядро Stm32 с Adafruit Fona 3g, я пытаюсь отправить данные на сервер через соединение 3g. Я использую файл.cpp и файл.h, размещенный здесь: https://os.mbed.com/users/Nels885/code/Adafruit_FONA_3G/file/b18cfba4283a/
Кажется, код застрял на getTCPtimeout. У меня проблемы с выяснением, почему это так.
Я попытался закомментировать функцию getTCPtimeout, чтобы увидеть результаты, и код полностью проходит, но никогда не устанавливает соединение с сервером.
#include "mbed.h"
#include "Adafruit_FONA.h"
#define FONA_RST D4
#define FONA_TX D1
#define FONA_RX D0
#define FONA_RI D7 //not used
char replybuffer[255];
Adafruit_FONA_3G fona(FONA_TX, FONA_RX, FONA_RST, FONA_RI);
Serial pc(USBTX, USBRX);
int main()
{
fona.TCPinitialize();
pc.printf ("initialize \n");
char *Timeout = "10000000";
fona.getTCPtimeout(Timeout);
pc.printf ("timeout \n");
char * Server = "47.218.188.133";
uint16_t Port = 23;
fona.TCPconnect(Server,Port);
pc.printf ("connect \n");
char * Packet = "Pick Up %";
fona.TCPsend(Packet);
pc.printf ("send \n");
fona.TCPclose();
pc.printf ("close \n");
}
Редактировать: я запустил код и заметил, что после исправления вышеуказанной проблемы в коде зависнет функция TCPSend, в частности, перед пакетом [0] = 0; который показан здесь:
bool Adafruit_FONA_3G::TCPsend(char *packet)
{
if (strlen(packet) > 0) {
mySerial.printf("%s", packet);
//mySerial.printf("%s\r\n", packet);
readline();
packet[0] = 0;
return true;
} else return false;
}
При комментировании строки код будет выполняться до конца. Я все еще в процессе тестирования, чтобы убедиться, что код по-прежнему функционирует так, как задумано, но мой вопрос заключается в том, какова цель пакета [0] = 0;?
1 ответ
Adafruit_FONA_3G::getTCPtimeout()
предполагается, что вы передаете ему доступный для записи буфер размером> 20. Вы передаете доступный только для чтения буфер меньшего размера. Итак, замени
char *Timeout = "10000000";
с
char Timeout[21];