Compare commits

..

No commits in common. "master" and "v1.0.2" have entirely different histories.

4 changed files with 26 additions and 17 deletions

View File

@ -1,5 +1,5 @@
name=HamShield_KISS
version=1.0.6
version=1.0.2
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,5 +7,4 @@ 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
depends=HamShield, DDS
includes=packet.h, SimpleFIFO.h, KISS.h

View File

@ -2,7 +2,6 @@
#include "packet.h"
#include "KISS.h"
//AFSK::Packet kissPacket;
bool inFrame = false;
uint8_t kissBuffer[PACKET_MAX_LEN];
@ -12,11 +11,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);
@ -24,7 +23,7 @@ void KISS::loop() {
}
}
// Check if we have incoming data to turn into a packet
while(currentlySending == false && io->available()) {
while(io->available()) {
uint8_t c = (uint8_t)io->read();
if(c == KISS_FEND) {
if(inFrame && kissLen > 0) {
@ -35,7 +34,7 @@ void KISS::loop() {
packet->appendFCS(kissBuffer[i]);
}
packet->finish();
afsk->encoder.putPacket(packet);
afsk.encoder.putPacket(packet);
}
kissLen = 0;
inFrame = false;
@ -58,15 +57,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;
}
@ -77,7 +76,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++) {
unsigned char c = p->getByte(i);
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));

View File

@ -11,15 +11,26 @@
class KISS {
public:
KISS(Stream *_io, HamShield *h, DDS *d, AFSK *a) : io(_io), radio(h), dds(d), afsk(a) {}
KISS(Stream *_io, HamShield *h, DDS *d) : io(_io), radio(h), dds(d) {}
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_ */

View File

@ -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 |= 0b01100000;
ssidField |= 0b11100000;
}
appendFCS(ssidField);
}