19#include <HardwareSerial.h>
21 #include <ESP8266WiFi.h>
31uint8_t sUARTOutputBuffer[MAX_LEN_SERIAL_OUTPUT_BUF];
42 uint16_t bytes_left_wired = 0;
43 HardwareSerial *serial_port = (HardwareSerial *) (pComm->serial_port);
45 bytes_left_wired = pComm->bytes_to_send;
48 uint16_t bytes_left_wireless = 0;
49 WiFiClient *tcp_client = NULL;
50 if (NULL != pComm->tcp_client) {
51 tcp_client = (WiFiClient *)(pComm->tcp_client);
53 bytes_left_wireless = pComm->bytes_to_send;
56 int bytes_to_write_wired;
58 while ((bytes_left_wired > 0) || (bytes_left_wireless > 0)) {
59 if (bytes_left_wired > 0) {
60 bytes_to_write_wired = serial_port->availableForWrite();
61 if( bytes_to_write_wired > bytes_left_wired ) {
62 bytes_to_write_wired = bytes_left_wired;
65 serial_port->write(&(pComm->serial_out_buf[pComm->bytes_to_send - bytes_left_wired]), bytes_to_write_wired);
66 bytes_left_wired -= bytes_to_write_wired;
68 if (bytes_left_wireless > 0) {
69 if( tcp_client->connected() ) {
71 bytes_left_wireless -= tcp_client->write(&(pComm->serial_out_buf[pComm->bytes_to_send - bytes_left_wireless]), bytes_left_wireless);
74 bytes_left_wireless = 0;
78 pComm->bytes_to_send = 0;
90 WiFiClient *tcp_client = (WiFiClient *) sfg->pControlSubsystem->tcp_client;
91 HardwareSerial *serial_port = (HardwareSerial*) sfg->pControlSubsystem->serial_port;
95 while (0 < Serial.available() )
96 { data = serial_port->read();
102 while (tcp_client->connected() && (0 < tcp_client->available())) {
103 tcp_client->read(&data, 1);
114 const void *serial_port,
const void *tcp_client )
119 pComm->DefaultQuaternionPacketType =
Q3;
120 pComm->QuaternionPacketType =
Q3;
121 pComm->AngularVelocityPacketOn =
false;
122 pComm->DebugPacketOn =
false;
123 pComm->RPCPacketOn =
true;
124 pComm->AltPacketOn =
false;
125 pComm->AccelCalPacketOn =
false;
126 pComm->serial_out_buf = sUARTOutputBuffer;
127 pComm->write = SendSerialBytesOut;
129 pComm->readCommands = ReceiveIncomingCommands;
131 pComm->serial_port = serial_port;
132 pComm->tcp_client = tcp_client;
143 pComm->tcp_client = tcp_client;
Build configuration file.
bool initializeIOSubsystem(ControlSubsystem *pComm, const void *serial_port, const void *tcp_client)
Initialize the control subsystem and all related hardware.
Defines control sub-system.
void CreateOutgoingPackets(SensorFusionGlobals *sfg)
void DecodeCommandBytes(SensorFusionGlobals *sfg, uint8_t input_buffer[], uint16_t nbytes)
The sensor_fusion.h file implements the top level programming interface.
@ Q3
Quaternion derived from 3-axis accel (tilt)
The ControlSubsystem encapsulates command and data streaming functions.
The top level fusion structure.