Simplify DAC ISR interface: now afsk_dac_isr() return the next sample.
[bertos.git] / bertos / net / afsk.h
index 902c5b9470944a6fbd136ab248ba7acfc7e608e9..bd82e66012d72eb9d5d5163f00dfcb3bfdc0d195 100644 (file)
 #include <struct/fifobuf.h>
 
 
-// Demodulator constants
+
+/**
+ * ADC sample rate.
+ * The demodulator filters are designed to work at this frequency.
+ * If you need to change this remember to update afsk_adc_isr().
+ */
 #define SAMPLERATE 9600
+
+/**
+ * Bitrate of the received/transmitted data.
+ * The demodulator filters and decoderes are designed to work at this frequency.
+ * If you need to change this remember to update afsk_adc_isr().
+ */
 #define BITRATE    1200
 
 #define SAMPLEPERBIT (SAMPLERATE / BITRATE)
@@ -70,6 +81,10 @@ typedef struct Hdlc
        bool rxstart;       ///< True if an HDLC_FLAG char has been found in the bitstream.
 } Hdlc;
 
+/**
+ * RX FIFO buffer full error.
+ */
+#define AFSK_RXFIFO_OVERRUN BV(0)
 
 /**
  * AFSK1200 modem context.
@@ -154,6 +169,12 @@ typedef struct Afsk
        /** True while modem sends data */
        volatile bool sending;
 
+       /**
+        * AFSK modem status.
+        * If 0 all is ok, otherwise errors are present.
+        */
+       volatile int status;
+
        /** Hdlc context */
        Hdlc hdlc;
 
@@ -182,8 +203,9 @@ INLINE Afsk *AFSK_CAST(KFile *fd)
   return (Afsk *)fd;
 }
 
-void afsk_adc_isr(Afsk *af, int8_t curr_sample);
-void afsk_dac_isr(Afsk *af);
+
+void afsk_adc_isr(Afsk *af, int8_t sample);
+uint8_t afsk_dac_isr(Afsk *af);
 void afsk_init(Afsk *af, int adc_ch, int dac_ch);