Библиотека Adafruit Fona 3g;Как именно это работает? - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь отправить пакет на сервер через 3g и TCP-соединение.Ниже приведена ссылка на найденные мной файлы .cpp и .h:

https://os.mbed.com/users/Nels885/code/Adafruit_FONA_3G/

В частности, я действительно запутался в том, как TCPSend работает в классе Adafruit_FONA_3G,Я пытаюсь реализовать это, но мой код застрял на packet[0] = 0; в функции bool Adafruit_FONA_3G::TCPsend(char *packet).

Я пытался закомментировать packet[0] = 0;и код работает до конца.Я также попытался инициализировать char* packet[32]; до packet[0] = 0;, и код работает до конца.Я предполагаю, что функция не обнаруживает пакетный ввод.

Вот конкретная функция из файла .cpp:

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;
}

Вот мой основной код:

#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();

    char Timeout[21];
    fona.getTCPtimeout(Timeout);

    char * Server = "52.14.99.26";
    uint16_t Port = 10001;
    fona.TCPconnect(Server,Port);

    char *Packet = "Pick Up %";
    fona.TCPsend(Packet);

    fona.TCPclose();

}

1 Ответ

0 голосов
/ 07 февраля 2019

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

char *Packet = "Pick Up %";

на

char Packet[] = "Pick Up %";

Проблема в том, что ваш компилятор позволяет вам инициализировать записываемые указатели значениями только для чтения.Это недостаток вашего компилятора.

...