Adafruit Fona устанавливает соединение с эхо-сервером, но не отправляет никаких данных

Используя ОС mbed и плату stm32 nucleo с 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;
}

При комментировании строки код будет выполняться полностью. Я все еще нахожусь в процессе тестирования, чтобы увидеть, работает ли код по-прежнему, как задумано, но мой вопрос в том, какова цель package[0] = 0;?


person Community    schedule 29.01.2019    source источник


Ответы (1)


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

char *Timeout = "10000000";

с

char Timeout[21];
person Sid S    schedule 29.01.2019