From 8ffc30d740e09dcda7f260391eded830758589f2 Mon Sep 17 00:00:00 2001 From: Rodrigo Alfonso Date: Sat, 17 Aug 2024 00:43:20 -0300 Subject: [PATCH] Moving transfer requests to example --- examples/LinkMobile_demo/src/main.cpp | 45 +++++++++++++++++++++++++++ lib/LinkMobile.hpp | 1 + 2 files changed, 46 insertions(+) diff --git a/examples/LinkMobile_demo/src/main.cpp b/examples/LinkMobile_demo/src/main.cpp index 68f8ba5..4624a3d 100644 --- a/examples/LinkMobile_demo/src/main.cpp +++ b/examples/LinkMobile_demo/src/main.cpp @@ -9,6 +9,7 @@ #include #include "../../_lib/interrupt.h" +void transfer(LinkMobile::DataTransfer& dataTransfer, std::string text); std::string readConfiguration(); std::string getStateString(LinkMobile::State state); std::string getErrorString(LinkMobile::Error error); @@ -56,8 +57,12 @@ start: // (3) Initialize the library linkMobile->activate(); + bool isConnected = false; bool reading = false; bool calling = false; + u32 counter = 0; + LinkMobile::DataTransfer dataTransfer; + LinkMobile::DataTransfer lastCompletedTransfer; while (true) { u16 keys = ~REG_KEYS & KEY_ANY; @@ -80,6 +85,38 @@ start: output += " (SELECT = stop)"; } + if (linkMobile->getState() == LinkMobile::State::CALL_ESTABLISHED) { + if (!isConnected) { + isConnected = true; + dataTransfer = {}; + lastCompletedTransfer = {}; + transfer(dataTransfer, dontReceiveCalls ? "caller" : "receiver"); + } + + if (dataTransfer.completed) { + if (dataTransfer.size > 0) { + lastCompletedTransfer = dataTransfer; + counter++; + } + + transfer(dataTransfer, (dontReceiveCalls ? "caller: " : "receiver: ") + + std::to_string(counter)); + } + if (lastCompletedTransfer.completed) { + char received[LINK_MOBILE_MAX_COMMAND_TRANSFER_LENGTH]; + for (u32 i = 0; i < lastCompletedTransfer.size; i++) + received[i] = lastCompletedTransfer.data[i]; + received[lastCompletedTransfer.size] = '\0'; + output += "\n\n<< " + std::string(received); + } + } else { + if (isConnected) { + isConnected = false; + dataTransfer = {}; + lastCompletedTransfer = {}; + } + } + // SELECT = stop if (keys & KEY_SELECT) { bool didShutdown = linkMobile->getState() == LinkMobile::State::SHUTDOWN; @@ -128,6 +165,14 @@ start: return 0; } +void transfer(LinkMobile::DataTransfer& dataTransfer, std::string text) { + for (u32 i = 0; i < text.size(); i++) + dataTransfer.data[i] = text[i]; + dataTransfer.data[text.size()] = '\0'; + dataTransfer.size = text.size() + 1; + linkMobile->transfer(dataTransfer, &dataTransfer); +} + std::string readConfiguration() { LinkMobile::ConfigurationData data; if (!linkMobile->readConfiguration(data)) diff --git a/lib/LinkMobile.hpp b/lib/LinkMobile.hpp index 4e82c84..73efcc5 100644 --- a/lib/LinkMobile.hpp +++ b/lib/LinkMobile.hpp @@ -238,6 +238,7 @@ class LinkMobile { if (state != CALL_ESTABLISHED || userRequests.isFull()) return false; + receivedData->completed = false; auto request = UserRequest{.type = UserRequest::Type::TRANSFER, .send = {.data = {}, .size = dataToSend.size}, .receive = receivedData,