21 #ifndef _AVRIO_AFSK_H_ 22 #define _AVRIO_AFSK_H_ 24 #include <avrio/defs.h> 29 #include <avrio/hdlc.h> 72 #define AFSK_RXFIFO_OVERRUN -2 87 #define AFSK_MODE_NOBLOCK 0x80 108 #if defined(__DOXYGEN__) 195 #define CONFIG_AFSK_RX_BUFLEN 202 #define CONFIG_AFSK_TX_BUFLEN 211 #define CONFIG_AFSK_PREAMBLE_LEN 220 #define CONFIG_AFSK_TRAILER_LEN 244 #define AFSK_BAUDRATE 1200L 251 #define AFSK_MARK_FREQ 1200L 258 #define AFSK_SPACE_FREQ 2200L 269 #define AFSK_SAMPLES_PER_BIT 8L 276 #define AFSK_DAC_RESOLUTION 4 285 #define AFSK_TXONLY_vect 374 #include <util/atomic.h> 375 #include <avrio/queue.h> 376 #include "avrio-board-afsk.h" 378 #if defined(AFSK_TX_DISABLE) && defined(AFSK_RX_DISABLE) 379 #error "AFSK_TX_DISABLE and AFSK_RX_DISABLE can not be defined at the same time !" 382 #if !defined(AFSK_RX_DISABLE) && (AFSK_SAMPLES_PER_BIT != 8) 383 #warning "AFSK_RX_DISABLE not defined: AFSK_SAMPLES_PER_BIT was redefined to 8" 384 #undef AFSK_SAMPLES_PER_BIT 385 #define AFSK_SAMPLES_PER_BIT 8L 390 #define AFSK_SINWAVE_LEN 512L 393 #define AFSK_SINWAVE_RESOLUTION 8 396 #if AFSK_SINWAVE_RESOLUTION > AFSK_DAC_RESOLUTION 397 #define AFSK_DAC_VALUE(_v) ((_v)>>(AFSK_SINWAVE_RESOLUTION-AFSK_DAC_RESOLUTION)) 398 #elif AFSK_SINWAVE_RESOLUTION < AFSK_DAC_RESOLUTION 399 #define AFSK_DAC_VALUE(_v) ((_v)<<(AFSK_DAC_RESOLUTION-AFSK_SINWAVE_RESOLUTION)) 401 #define AFSK_DAC_VALUE(_v) (_v) 405 #define AFSK_PHASE_INC(_freq) (((_freq)*AFSK_SINWAVE_LEN)/AFSK_BAUDRATE/AFSK_SAMPLES_PER_BIT) 408 #define AFSK_MARK_INC AFSK_PHASE_INC(AFSK_MARK_FREQ) 411 #define AFSK_SPACE_INC AFSK_PHASE_INC(AFSK_SPACE_FREQ) 414 typedef struct xAfsk {
416 #ifndef AFSK_TX_DISABLE 419 uint16_t usTxPhaseInc;
420 uint8_t ucTxSampleCnt;
423 uint8_t ucTxStuffCnt;
424 uint8_t ucPreambleCnt;
425 uint8_t ucTrailerCnt;
431 #ifndef AFSK_RX_DISABLE 434 uint8_t ucRxBitStream;
436 uint8_t ucCarrierCnt;
463 uint8_t ucSampleBits;
465 #ifdef AVRIO_AFSK_USE_RSSI 478 volatile uint8_t ucFlag;
480 volatile uint8_t bTxEnable : 1;
481 volatile uint8_t bStuffEnable : 1;
482 volatile uint8_t bFrameStarted : 1;
483 volatile uint8_t bDcd : 1;
484 volatile uint8_t bTestEnable : 1;
499 memset (&af, 0,
sizeof (af));
504 #ifndef AFSK_TX_DISABLE 506 af.usTxPhaseInc = AFSK_MARK_INC;
510 #ifndef AFSK_RX_DISABLE 512 #ifdef AVRIO_AFSK_USE_RSSI 514 af.ucRssiTh = AFSK_RSSI_DEFAULT_TH;
521 #ifndef AFSK_RX_DISABLE 528 ATOMIC_BLOCK (ATOMIC_RESTORESTATE) {
530 bValue = (af.bFrameStarted ?
true :
false);
540 ATOMIC_BLOCK (ATOMIC_RESTORESTATE) {
542 bValue = (af.bFrameStarted ?
true :
false);
547 #ifdef AVRIO_AFSK_USE_RSSI 555 ATOMIC_BLOCK (ATOMIC_RESTORESTATE) {
566 ATOMIC_BLOCK (ATOMIC_RESTORESTATE) {
568 af.ucRssiTh = ucRssi;
577 ATOMIC_BLOCK (ATOMIC_RESTORESTATE) {
579 ucRssi = af.ucRssiTh;
587 #ifndef AFSK_TX_DISABLE 594 ATOMIC_BLOCK (ATOMIC_RESTORESTATE) {
596 bValue = (af.bTxEnable ?
true :
false);
605 ATOMIC_BLOCK (ATOMIC_RESTORESTATE) {
607 af.usTxPhaseInc = usTxPhaseInc;
617 (af.usTxPhaseInc == AFSK_MARK_INC) ?
vAfskToneSet (AFSK_SPACE_INC) :
620 #endif // AFSK_TX_DISABLE not defined void vAfskToneSet(uint16_t usTxPhaseInc)
Modifie la tonalité en sortie du modulateur.
void vAfskHwDacWrite(uint16_t usValue)
Ecriture DAC.
int8_t iAfskHwAdcRead(void)
Lecture ADC.
FILE xAfskPort
Fichier permettant l'utilisation du modem avec les fonctions de la libc.
void vAfskHwDcdOff(void)
Détection absence porteuse.
void vAfskHwTxEnable(void)
Validation transmetteur.
void vAfskToneToggle(void)
Bascule la tonalité en sortie du modulateur.
#define CONFIG_AFSK_TX_BUFLEN
Taille buffer émission.
uint8_t ucAfskGetRssi(void)
void vAfskInit(uint8_t ucMode)
void vAfskHwDcdOn(void)
Détection de présence porteuse.
void vAfskHwInit(void)
Initialisation du driver.
void vQueueSetBuffer(struct xQueue *pxQueue, uint8_t *pucBuffer, size_t xBufferSize)
Initialise la pile avec le buffer.
void vAfskSetRssiTh(uint8_t ucRssi)
#define AFSK_SAMPLES_PER_BIT
Nombre d'échantillons de sinusoide par temps de bit.
#define CONFIG_AFSK_RX_BUFLEN
Taille buffer réception.
bool bAfskReceiving(void)
uint8_t ucAfskGetRssiTh(void)
void vAfskHwTxDisable(void)
Dévalidation transmetteur.