Initial public release of WII5 Buoy firmware
Firmware for an autonomous wave-measurement buoy (ATmega2560-based WII5 v2 board). Reads wave motion from a Sparton AHRS-M1/M2 IMU, samples GPS and battery state, and reports back over Iridium SBD satellite telemetry. Originally developed 2012-2024. This is the first public release. Code, documentation, and field-tested operating modes (Capture, Sleep, Position, ManualTest, SelfTest, LowBattery) are licensed under Apache 2.0 — see LICENSE and NOTICE. See README.md for an overview and build instructions, CONTRIBUTING.md for how to contribute, and DEPLOYMENTS.md for the field-deployment log.
This commit is contained in:
@@ -0,0 +1,162 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
// Copyright (c) 2012-2024 Scott Penrose <scottp@dd.com.au> and WII5 Buoy contributors
|
||||
//
|
||||
// This file is part of WII5 Buoy firmware.
|
||||
// See LICENSE for full terms.
|
||||
|
||||
/**
|
||||
* @file WII5SerialManager.h
|
||||
* @brief Serial-port helper: AT-response parsing, command queue.
|
||||
*/
|
||||
|
||||
#ifndef WII5SerialManager_h
|
||||
#define WII5SerialManager_h
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <WII5_board.h>
|
||||
#include <WII5Data.h>
|
||||
#include <WII5Sh3dConsole.h>
|
||||
#include <elapsedMillis.h>
|
||||
#include <TimeLib.h>
|
||||
#include <TinyGPS++.h>
|
||||
|
||||
// TODO Really?
|
||||
#define WII5SERIALMAANGER_FIELD_SIZE 25
|
||||
|
||||
/*
|
||||
|
||||
WII5SerialManager - Base class for managed serial ports
|
||||
|
||||
Special and Shared Types
|
||||
|
||||
WII5SERIAL_LAST
|
||||
What was the last message we received
|
||||
|
||||
WII5SERIAL_PARSERS
|
||||
Which parser we currently using?
|
||||
|
||||
*/
|
||||
|
||||
enum WII5SERIAL_PARSERS {
|
||||
WII5SERIALPARSER_NONE,
|
||||
WII5SERIALPARSER_LINE,
|
||||
WII5SERIALPARSER_BINARY1, // likely to have multiple binary fomrats, this one, has the length in the first 2 bytes
|
||||
// and last 2 bytes are checksum
|
||||
WII5SERIALPARSER_RECORD,
|
||||
WII5SERIALPARSER_OKHUH,
|
||||
WII5SERIALPARSER_AT
|
||||
};
|
||||
|
||||
enum WII5SERIAL_LAST {
|
||||
WII5SERIALLAST_NONE,
|
||||
WII5SERIALLAST_LINE,
|
||||
WII5SERIALLAST_RECORD,
|
||||
WII5SERIALLAST_OK,
|
||||
WII5SERIALLAST_READY,
|
||||
WII5SERIALLAST_ERROR,
|
||||
WII5SERIALLAST_ATOK, // OK
|
||||
WII5SERIALLAST_ATERR,
|
||||
WII5SERIALLAST_ATSBDI, // including +SBDI and +SBDIX
|
||||
WII5SERIALLAST_BOOTVERSION,
|
||||
WII5SERIALLAST_NUMBER,
|
||||
WII5SERIALLAST_ATCSQ // including +CSQ
|
||||
};
|
||||
|
||||
class WII5SerialManager {
|
||||
public:
|
||||
WII5SerialManager() {
|
||||
gps = NULL;
|
||||
}
|
||||
|
||||
virtual WII5_DRIVERS driverId();
|
||||
|
||||
virtual void loop();
|
||||
|
||||
void beginSerialManager();
|
||||
void endSerialManager();
|
||||
|
||||
void setPassthrough(bool in);
|
||||
bool getPassthrough();
|
||||
void setDebug(bool in);
|
||||
bool getDebug();
|
||||
void setCapture(bool in);
|
||||
bool getCapture();
|
||||
|
||||
void repl(uint32_t baud = 0);
|
||||
|
||||
virtual void sendNewLine();
|
||||
WII5_SERIALCMDS sendAll(WII5SERIAL_LAST lastUntil = WII5SERIALLAST_OK);
|
||||
WII5_SERIALCMDS sendAndWait(WII5SERIAL_LAST lastUntil = WII5SERIALLAST_OK);
|
||||
|
||||
virtual void setBaudrate(uint32_t baud);
|
||||
|
||||
virtual void start(bool force = false);
|
||||
virtual void stop(bool force = false);
|
||||
|
||||
virtual void setRecords(uint32_t in);
|
||||
virtual uint32_t getRecords();
|
||||
|
||||
virtual void writePassthrough();
|
||||
virtual void writeCapture();
|
||||
|
||||
// Public to allow easy access???
|
||||
TinyGPSPlus *gps;
|
||||
void enableNmea();
|
||||
|
||||
// virtual void displaySTATS();
|
||||
virtual void sendAtDataLine();
|
||||
|
||||
void setTimeout(uint32_t in);
|
||||
uint32_t getTimeout();
|
||||
|
||||
char* buffer;
|
||||
char* binBuffer;
|
||||
uint16_t binBufferCount;
|
||||
uint16_t binBufferExpect;
|
||||
|
||||
protected:
|
||||
// Serial stream
|
||||
// TODO Stream or HardwareSerial
|
||||
HardwareSerial *stream;
|
||||
|
||||
// Must be implemented in inherited class !
|
||||
|
||||
bool capture; // Capture to file - see openFile and closeFile
|
||||
bool passthrough; // Passthrough to Serial console
|
||||
bool debug; // Extra debugging to Serial Console
|
||||
uint32_t sendCount;
|
||||
|
||||
virtual bool processSerial(char in);
|
||||
virtual void processBufferField(char *buf, uint8_t len);
|
||||
virtual void processBufferOK();
|
||||
virtual void processBufferLine();
|
||||
virtual void processRecord();
|
||||
elapsedMillis processWait;
|
||||
uint32_t processTimeout;
|
||||
|
||||
virtual void programLine(uint16_t l);
|
||||
virtual void sendLine(uint16_t l);
|
||||
|
||||
virtual void consolePrefix(bool input = false);
|
||||
virtual void consoleBuffer(bool input = false, bool useLog = false);
|
||||
virtual void setBuffer(char* buf, uint8_t sz);
|
||||
uint8_t bufMax;
|
||||
char fieldBuffer[WII5SERIALMAANGER_FIELD_SIZE]; // TODO Configuration etc
|
||||
uint8_t bufCount;
|
||||
|
||||
uint8_t fieldLoc;
|
||||
uint8_t fieldCount;
|
||||
WII5SERIAL_PARSERS processMode;
|
||||
uint8_t programCount;
|
||||
uint8_t programTotal;
|
||||
uint32_t recordCount;
|
||||
uint32_t recordTotal;
|
||||
WII5SERIAL_LAST last;
|
||||
uint32_t lastVal;
|
||||
uint32_t recordVals[WII5_FIELD_MAX];
|
||||
char *p;
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user