Compare commits
14 Commits
Author | SHA1 | Date |
---|---|---|
|
883a1d1cb5 | |
|
df7e551844 | |
|
eae0d7db09 | |
|
32b02a6128 | |
|
5e512db17d | |
|
d2502913d5 | |
|
0bcbbdb2e3 | |
|
56161805a4 | |
|
07fbb1af2f | |
|
ba97bd4702 | |
|
5fc9e7abbd | |
|
0689f95f74 | |
|
74d7724843 | |
|
d365fee768 |
|
@ -1,5 +1,5 @@
|
|||
name=HamShield_KISS
|
||||
version=1.0.2
|
||||
version=1.0.6
|
||||
author=Morgan Redfield <morgan@enhancedradio.com>, Casey Halverson <casey@enhancedradio.com>
|
||||
maintainer=Morgan Redfield <morgan@enhancedradio.com>
|
||||
sentence=A library for use with HamShield by Enhanced Radio Devices.
|
||||
|
@ -7,4 +7,5 @@ paragraph=See the HamShield library by Enhanced Radio Devices for examples.
|
|||
category=Device Control
|
||||
url=http://www.hamshield.com
|
||||
architectures=*
|
||||
includes=packet.h, SimpleFIFO.h, KISS.h
|
||||
includes=packet.h, SimpleFIFO.h, KISS.h
|
||||
depends=HamShield, DDS
|
||||
|
|
19
src/KISS.cpp
19
src/KISS.cpp
|
@ -2,6 +2,7 @@
|
|||
#include "packet.h"
|
||||
#include "KISS.h"
|
||||
|
||||
|
||||
//AFSK::Packet kissPacket;
|
||||
bool inFrame = false;
|
||||
uint8_t kissBuffer[PACKET_MAX_LEN];
|
||||
|
@ -11,11 +12,11 @@ uint16_t kissLen = 0;
|
|||
// KISS equipment, and look if we have anything to relay along
|
||||
void KISS::loop() {
|
||||
static bool currentlySending = false;
|
||||
if(afsk.decoder.read() || afsk.rxPacketCount()) {
|
||||
if(afsk->decoder.read() || afsk->rxPacketCount()) {
|
||||
// A true return means something was put onto the packet FIFO
|
||||
// If we actually have data packets in the buffer, process them all now
|
||||
while(afsk.rxPacketCount()) {
|
||||
AFSK::Packet *packet = afsk.getRXPacket();
|
||||
while(afsk->rxPacketCount()) {
|
||||
AFSK::Packet *packet = afsk->getRXPacket();
|
||||
if(packet) {
|
||||
writePacket(packet);
|
||||
AFSK::PacketBuffer::freePacket(packet);
|
||||
|
@ -23,7 +24,7 @@ void KISS::loop() {
|
|||
}
|
||||
}
|
||||
// Check if we have incoming data to turn into a packet
|
||||
while(io->available()) {
|
||||
while(currentlySending == false && io->available()) {
|
||||
uint8_t c = (uint8_t)io->read();
|
||||
if(c == KISS_FEND) {
|
||||
if(inFrame && kissLen > 0) {
|
||||
|
@ -34,7 +35,7 @@ void KISS::loop() {
|
|||
packet->appendFCS(kissBuffer[i]);
|
||||
}
|
||||
packet->finish();
|
||||
afsk.encoder.putPacket(packet);
|
||||
afsk->encoder.putPacket(packet);
|
||||
}
|
||||
kissLen = 0;
|
||||
inFrame = false;
|
||||
|
@ -57,15 +58,15 @@ void KISS::loop() {
|
|||
inFrame = true;
|
||||
}
|
||||
}
|
||||
if(afsk.txReady()) {
|
||||
if(afsk->txReady()) {
|
||||
radio->setModeTransmit();
|
||||
currentlySending = true;
|
||||
if(!afsk.txStart()) { // Unable to start for some reason
|
||||
if(!afsk->txStart()) { // Unable to start for some reason
|
||||
radio->setModeReceive();
|
||||
currentlySending = false;
|
||||
}
|
||||
}
|
||||
if(currentlySending && afsk.encoder.isDone()) {
|
||||
if(currentlySending && afsk->encoder.isDone()) {
|
||||
radio->setModeReceive();
|
||||
currentlySending = false;
|
||||
}
|
||||
|
@ -76,7 +77,7 @@ void KISS::writePacket(AFSK::Packet *p) {
|
|||
io->write(KISS_FEND);
|
||||
io->write((uint8_t)0); // Host to TNC port identifier
|
||||
for(i = 0; i < p->len-2; i++) {
|
||||
char c = p->getByte(i);
|
||||
unsigned char c = p->getByte(i);
|
||||
if(c == KISS_FEND || c == KISS_FESC) {
|
||||
io->write(KISS_FESC);
|
||||
io->write((c==KISS_FEND?KISS_TFEND:KISS_TFESC));
|
||||
|
|
15
src/KISS.h
15
src/KISS.h
|
@ -11,26 +11,15 @@
|
|||
|
||||
class KISS {
|
||||
public:
|
||||
KISS(Stream *_io, HamShield *h, DDS *d) : io(_io), radio(h), dds(d) {}
|
||||
KISS(Stream *_io, HamShield *h, DDS *d, AFSK *a) : io(_io), radio(h), dds(d), afsk(a) {}
|
||||
bool read();
|
||||
AFSK afsk;
|
||||
void writePacket(AFSK::Packet *);
|
||||
void loop();
|
||||
inline void isr() {
|
||||
static uint8_t tcnt = 0;
|
||||
TIFR1 = _BV(ICF1); // Clear the timer flag
|
||||
dds->clockTick();
|
||||
if(++tcnt == (DDS_REFCLK_DEFAULT/9600)) {
|
||||
//PORTD |= _BV(2); // Diagnostic pin (D2)
|
||||
afsk.timer();
|
||||
tcnt = 0;
|
||||
}
|
||||
//PORTD &= ~(_BV(2));
|
||||
}
|
||||
private:
|
||||
Stream *io;
|
||||
HamShield *radio;
|
||||
DDS *dds;
|
||||
AFSK *afsk;
|
||||
};
|
||||
|
||||
#endif /* _KISS_H_ */
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#include <Arduino.h>
|
||||
#include "SimpleFIFO.h"
|
||||
#include "packet.h"
|
||||
#include "dds.h"
|
||||
#include <DDS.h>
|
||||
#include <util/atomic.h>
|
||||
|
||||
#define PHASE_BIT 8
|
||||
|
@ -537,7 +537,7 @@ size_t AFSK::Packet::appendCallsign(const char *callsign, uint8_t ssid, bool fin
|
|||
if(final) {
|
||||
ssidField |= 0b01100001;
|
||||
} else {
|
||||
ssidField |= 0b11100000;
|
||||
ssidField |= 0b01100000;
|
||||
}
|
||||
appendFCS(ssidField);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue