Adafruit Fona устанавливает соединение с эхо-сервером, но не передает никаких данных - PullRequest
0 голосов
/ 29 января 2019

Используя плату 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 Ответ

0 голосов
/ 29 января 2019

Adafruit_FONA_3G::getTCPtimeout() предполагает, что вы передаете ему доступный для записи буфер размером> 20. Вы передаете доступный только для чтения буфер меньшего размера.Итак, замените

char *Timeout = "10000000";

на

char Timeout[21];
...