Adding to generated for now, protobuf PR will come when it works ... :-)

This commit is contained in:
Thomas Göttgens
2023-01-08 18:15:51 +01:00
parent 49172e416e
commit 0e7797f3bb
7 changed files with 394 additions and 3 deletions

View File

@@ -6,6 +6,7 @@
#include "PowerFSM.h"
#include "RadioInterface.h"
#include "configuration.h"
#include "xmodem.h"
#include <assert.h>
#if FromRadio_size > MAX_TO_FROM_RADIO_SIZE
@@ -91,6 +92,10 @@ bool PhoneAPI::handleToRadio(const uint8_t *buf, size_t bufLength)
LOG_INFO("Disconnecting from phone\n");
close();
break;
case ToRadio_xmodemPacket_tag:
LOG_INFO("Got xmodem packet\n");
xModem.handlePacket(toRadioScratch.xmodemPacket);
break;
default:
// Ignore nop messages
// LOG_DEBUG("Error: unexpected ToRadio variant\n");
@@ -284,10 +289,14 @@ size_t PhoneAPI::getFromRadio(uint8_t *buf)
// Do we have a message from the mesh?
LOG_INFO("getFromRadio=STATE_SEND_PACKETS\n");
if (queueStatusPacketForPhone) {
fromRadioScratch.which_payload_variant = FromRadio_queueStatus_tag;
fromRadioScratch.queueStatus = *queueStatusPacketForPhone;
releaseQueueStatusPhonePacket();
} else if (xmodemPacketForPhone) {
fromRadioScratch.which_payload_variant = FromRadio_xmodemPacket_tag;
fromRadioScratch.xmodemPacket = *xmodemPacketForPhone;
free(xmodemPacketForPhone);
xmodemPacketForPhone = NULL;
} else if (packetForPhone) {
printPacket("phone downloaded packet", packetForPhone);
@@ -350,6 +359,7 @@ bool PhoneAPI::available()
case STATE_SEND_MODULECONFIG:
case STATE_SEND_COMPLETE_ID:
return true;
case STATE_SEND_NODEINFO:
if (!nodeInfoForPhone)
nodeInfoForPhone = nodeDB.readNextInfo();
@@ -362,6 +372,12 @@ bool PhoneAPI::available()
if (hasPacket)
return true;
if (!xmodemPacketForPhone)
xmodemPacketForPhone = xModem.getForPhone();
hasPacket = !!packetForPhone;
if (hasPacket)
return true;
if (!packetForPhone)
packetForPhone = service.getForPhone();
hasPacket = !!packetForPhone;

View File

@@ -42,6 +42,9 @@ class PhoneAPI : public Observer<uint32_t> // FIXME, we shouldn't be inheriting
/// downloads it
MeshPacket *packetForPhone = NULL;
// file transfer packets destined for phone. Push it to the queue then free it.
XModem *xmodemPacketForPhone = NULL;
// Keep QueueStatus packet just as packetForPhone
QueueStatus *queueStatusPacketForPhone = NULL;

View File

@@ -9,6 +9,7 @@
#include "module_config.pb.h"
#include "portnums.pb.h"
#include "telemetry.pb.h"
#include "xmodem.pb.h"
#if PB_PROTO_HEADER_VERSION != 40
#error Regenerate this file with the current version of nanopb generator.
@@ -670,6 +671,8 @@ typedef struct _FromRadio {
Channel channel;
/* Queue status info */
QueueStatus queueStatus;
/* File Transfer Chunk */
XModem xmodemPacket;
};
} FromRadio;
@@ -693,6 +696,7 @@ typedef struct _ToRadio {
This is useful for serial links where there is no hardware/protocol based notification that the client has dropped the link.
(Sending this message is optional for clients) */
bool disconnect;
XModem xmodemPacket;
};
} ToRadio;
@@ -904,9 +908,11 @@ extern "C" {
#define FromRadio_moduleConfig_tag 9
#define FromRadio_channel_tag 10
#define FromRadio_queueStatus_tag 11
#define FromRadio_xmodemPacket_tag 12
#define ToRadio_packet_tag 1
#define ToRadio_want_config_id_tag 3
#define ToRadio_disconnect_tag 4
#define ToRadio_xmodemPacket_tag 5
#define Compressed_portnum_tag 1
#define Compressed_data_tag 2
@@ -1062,7 +1068,8 @@ X(a, STATIC, ONEOF, UINT32, (payload_variant,config_complete_id,config_co
X(a, STATIC, ONEOF, BOOL, (payload_variant,rebooted,rebooted), 8) \
X(a, STATIC, ONEOF, MESSAGE, (payload_variant,moduleConfig,moduleConfig), 9) \
X(a, STATIC, ONEOF, MESSAGE, (payload_variant,channel,channel), 10) \
X(a, STATIC, ONEOF, MESSAGE, (payload_variant,queueStatus,queueStatus), 11)
X(a, STATIC, ONEOF, MESSAGE, (payload_variant,queueStatus,queueStatus), 11) \
X(a, STATIC, ONEOF, MESSAGE, (payload_variant,xmodemPacket,xmodemPacket), 12)
#define FromRadio_CALLBACK NULL
#define FromRadio_DEFAULT NULL
#define FromRadio_payload_variant_packet_MSGTYPE MeshPacket
@@ -1073,14 +1080,17 @@ X(a, STATIC, ONEOF, MESSAGE, (payload_variant,queueStatus,queueStatus), 1
#define FromRadio_payload_variant_moduleConfig_MSGTYPE ModuleConfig
#define FromRadio_payload_variant_channel_MSGTYPE Channel
#define FromRadio_payload_variant_queueStatus_MSGTYPE QueueStatus
#define FromRadio_payload_variant_xmodemPacket_MSGTYPE XModem
#define ToRadio_FIELDLIST(X, a) \
X(a, STATIC, ONEOF, MESSAGE, (payload_variant,packet,packet), 1) \
X(a, STATIC, ONEOF, UINT32, (payload_variant,want_config_id,want_config_id), 3) \
X(a, STATIC, ONEOF, BOOL, (payload_variant,disconnect,disconnect), 4)
X(a, STATIC, ONEOF, BOOL, (payload_variant,disconnect,disconnect), 4) \
X(a, STATIC, ONEOF, MESSAGE, (payload_variant,xmodemPacket,xmodemPacket), 5)
#define ToRadio_CALLBACK NULL
#define ToRadio_DEFAULT NULL
#define ToRadio_payload_variant_packet_MSGTYPE MeshPacket
#define ToRadio_payload_variant_xmodemPacket_MSGTYPE XModem
#define Compressed_FIELDLIST(X, a) \
X(a, STATIC, SINGULAR, UENUM, portnum, 1) \

View File

@@ -0,0 +1,13 @@
/* Automatically generated nanopb constant definitions */
/* Generated by nanopb-0.4.7 */
#include "xmodem.pb.h"
#if PB_PROTO_HEADER_VERSION != 40
#error Regenerate this file with the current version of nanopb generator.
#endif
PB_BIND(XModem, XModem, AUTO)

View File

@@ -0,0 +1,77 @@
/* Automatically generated nanopb header */
/* Generated by nanopb-0.4.7 */
#ifndef PB_XMODEM_PB_H_INCLUDED
#define PB_XMODEM_PB_H_INCLUDED
#include <pb.h>
#if PB_PROTO_HEADER_VERSION != 40
#error Regenerate this file with the current version of nanopb generator.
#endif
/* Enum definitions */
typedef enum _XModem_Control {
XModem_Control_NUL = 0,
XModem_Control_SOH = 1,
XModem_Control_STX = 2,
XModem_Control_EOT = 4,
XModem_Control_ACK = 6,
XModem_Control_NAK = 21,
XModem_Control_CAN = 24,
XModem_Control_CTRLZ = 26
} XModem_Control;
/* Struct definitions */
typedef PB_BYTES_ARRAY_T(128) XModem_buffer_t;
typedef struct _XModem {
XModem_Control control;
uint8_t seq;
uint16_t crc16;
XModem_buffer_t buffer;
} XModem;
#ifdef __cplusplus
extern "C" {
#endif
/* Helper constants for enums */
#define _XModem_Control_MIN XModem_Control_NUL
#define _XModem_Control_MAX XModem_Control_CTRLZ
#define _XModem_Control_ARRAYSIZE ((XModem_Control)(XModem_Control_CTRLZ+1))
#define XModem_control_ENUMTYPE XModem_Control
/* Initializer values for message structs */
#define XModem_init_default {_XModem_Control_MIN, 0, 0, {0, {0}}}
#define XModem_init_zero {_XModem_Control_MIN, 0, 0, {0, {0}}}
/* Field tags (for use in manual encoding/decoding) */
#define XModem_control_tag 1
#define XModem_seq_tag 2
#define XModem_crc16_tag 3
#define XModem_buffer_tag 4
/* Struct field encoding specification for nanopb */
#define XModem_FIELDLIST(X, a) \
X(a, STATIC, SINGULAR, UENUM, control, 1) \
X(a, STATIC, SINGULAR, UINT32, seq, 2) \
X(a, STATIC, SINGULAR, UINT32, crc16, 3) \
X(a, STATIC, SINGULAR, BYTES, buffer, 4)
#define XModem_CALLBACK NULL
#define XModem_DEFAULT NULL
extern const pb_msgdesc_t XModem_msg;
/* Defines for backwards compatibility with code written before nanopb-0.4.0 */
#define XModem_fields &XModem_msg
/* Maximum encoded size of messages (where known) */
#define XModem_size 140
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif