mirror of
https://github.com/afska/gba-link-connection.git
synced 2026-10-01 21:36:53 -05:00
Moving transfer requests to example
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
#include <vector>
|
||||
#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))
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user