Skip to content

Commit 207e08b

Browse files
committed
Added support for the LD-board
1 parent a432e69 commit 207e08b

File tree

3 files changed

+130
-13
lines changed

3 files changed

+130
-13
lines changed

cores/panstamp/cc1101.cpp

+77-1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ CC1101::CC1101(void)
5858
syncWord[0] = CC1101_DEFVAL_SYNC1;
5959
syncWord[1] = CC1101_DEFVAL_SYNC0;
6060
devAddress = CC1101_DEFVAL_ADDR;
61+
62+
hgmEnabled = false;
6163
}
6264

6365
/**
@@ -391,6 +393,10 @@ void CC1101::setCarrierFreq(byte freq)
391393
*/
392394
void CC1101::setPowerDownState()
393395
{
396+
// Disable LNA on LD-board if any
397+
if (hgmEnabled)
398+
disableLNA();
399+
394400
// Comming from RX state, we need to enter the IDLE state first
395401
cmdStrobe(CC1101_SIDLE);
396402
// Enter Power-down state
@@ -532,6 +538,10 @@ void CC1101::setRxState(void)
532538
{
533539
cmdStrobe(CC1101_SRX);
534540
rfState = RFSTATE_RX;
541+
542+
// Enable LNA on LD-board if any
543+
if (hgmEnabled)
544+
enableLNA();
535545
}
536546

537547
/**
@@ -541,6 +551,72 @@ void CC1101::setRxState(void)
541551
*/
542552
void CC1101::setTxState(void)
543553
{
544-
cmdStrobe(CC1101_STX);
554+
// Enable PA on LD-board if any
555+
if (hgmEnabled)
556+
enablePA();
557+
558+
cmdStrobe(CC1101_STX);
545559
rfState = RFSTATE_TX;
546560
}
561+
562+
/**
563+
* enablePA
564+
*
565+
* Enable PA and disable LNA on the LD-Board
566+
*/
567+
void CC1101::enablePA(void)
568+
{
569+
digitalWrite(PA_EN, HIGH);
570+
digitalWrite(LNA_EN, LOW);
571+
}
572+
573+
/**
574+
* enableLNA
575+
*
576+
* Enable LNA and disable PA on the LD-Board
577+
*/
578+
void CC1101::enableLNA(void)
579+
{
580+
digitalWrite(LNA_EN, HIGH);
581+
digitalWrite(PA_EN, LOW);
582+
}
583+
584+
/**
585+
* disableLNA
586+
*
587+
* Disable LNA and PA on the LD-Board
588+
*/
589+
void CC1101::disableLNA(void)
590+
{
591+
digitalWrite(LNA_EN, LOW);
592+
digitalWrite(PA_EN, LOW);
593+
}
594+
595+
/**
596+
* enableHGM
597+
*
598+
* Enable Long-distance board with CC1190 IC in high-gain mode
599+
*/
600+
void CC1101::enableHGM(void)
601+
{
602+
hgmEnabled = true;
603+
604+
pinMode(HGM, OUTPUT);
605+
pinMode(LNA_EN, OUTPUT);
606+
pinMode(PA_EN, OUTPUT);
607+
608+
digitalWrite(HGM, HIGH);
609+
}
610+
611+
/**
612+
* disableHGM
613+
*
614+
* Disable high-gain mode on the LD-Board
615+
*/
616+
void CC1101::disableHGM(void)
617+
{
618+
hgmEnabled = false;
619+
620+
digitalWrite(HGM, LOW);
621+
}
622+

cores/panstamp/cc1101.h

+41-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
#include "simplespi.h"
2929
#include "ccpacket.h"
3030

31-
3231
/**
3332
* Carrier frequencies
3433
*/
@@ -353,6 +352,32 @@ class CC1101
353352
*/
354353
void setRegsFromEeprom(void);
355354

355+
/**
356+
* High-gain mode enabled on the LD-board
357+
*/
358+
bool hgmEnabled;
359+
360+
/**
361+
* enablePA
362+
*
363+
* Enable PA and disable LNA on the LD-Board
364+
*/
365+
void enablePA(void);
366+
367+
/**
368+
* enableLNA
369+
*
370+
* Enable LNA and disable PA on the LD-Board
371+
*/
372+
void enableLNA(void);
373+
374+
/**
375+
* disableLNA
376+
*
377+
* Disable LNA and PA on the LD-Board
378+
*/
379+
void disableLNA(void);
380+
356381
public:
357382
/*
358383
* RF state
@@ -553,8 +578,22 @@ class CC1101
553578
*/
554579
inline void setTxPowerAmp(uint8_t paLevel)
555580
{
556-
writeReg(CC1101_PATABLE, paLevel);
581+
writeReg(CC1101_PATABLE, paLevel);
557582
}
583+
584+
/**
585+
* enableHGM
586+
*
587+
* Enable Long-distance board with CC1190 IC in high-gain mode
588+
*/
589+
void enableHGM(void);
590+
591+
/**
592+
* disableHGM
593+
*
594+
* Disable high-gain mode on the LD-Board
595+
*/
596+
void disableHGM(void);
558597
};
559598

560599
#endif

variants/panstamp_avr_2.0/pins_arduino.h

+12-10
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,17 @@
4444
#define LED ONBOARD_LED
4545
#define INIT_ONBOARD_LED() pinMode(ONBOARD_LED, OUTPUT)
4646

47+
// LD-BOARD definitions
48+
#define HGM 20
49+
#define LNA_EN 19
50+
#define PA_EN 18
51+
4752
#define NUM_DIGITAL_PINS 23
4853
#define NUM_ANALOG_INPUTS 8
4954
#define analogInputToDigitalPin(p) ((p < 6) ? (p) + 14 : -1)
5055

51-
#if defined(__AVR_ATmega8__)
52-
#define digitalPinHasPWM(p) ((p) == 9 || (p) == 10 || (p) == 11)
53-
#else
54-
#define digitalPinHasPWM(p) ((p) == 3 || (p) == 5 || (p) == 6 || (p) == 9 || (p) == 10 || (p) == 11)
55-
#endif
56+
#define digitalPinHasPWM(p) ((p) == 1 || (p) == 2 || (p) == 3 || (p) == 4 || (p) == 18 || (p) == 19)
57+
5658

5759
static const uint8_t SS = 22;
5860
static const uint8_t MOSI = 0;
@@ -82,12 +84,12 @@ static const uint8_t A7 = 13;
8284
// ADC resolution
8385
#define ADC_RESOLUTION 1023
8486

85-
#define digitalPinToPCICR(p) (((p) >= 0 && (p) <= 21) ? (&PCICR) : ((uint8_t *)0))
86-
#define digitalPinToPCICRbit(p) (((p) <= 7) ? 2 : (((p) <= 13) ? 0 : 1))
87-
#define digitalPinToPCMSK(p) (((p) <= 7) ? (&PCMSK2) : (((p) <= 13) ? (&PCMSK0) : (((p) <= 21) ? (&PCMSK1) : ((uint8_t *)0))))
88-
#define digitalPinToPCMSKbit(p) (((p) <= 7) ? (p) : (((p) <= 13) ? ((p) - 8) : ((p) - 14)))
87+
#define digitalPinToPCICR(p) (((p) >= 0 && (p) <= 22) ? (&PCICR) : ((uint8_t *)0))
88+
#define digitalPinToPCICRbit(p) (((p) <= 22 && (p) >= 18 || (p) == 0 || (p) == 1) ? 2 : (((p) <= 11 && (p) >= 3) ? 1 : 0))
89+
#define digitalPinToPCMSK(p) (((p) <= 22 && (p) >= 18 || (p) == 0 || (p) == 1) ? (&PCMSK2) : (((p) <= 11 && (p) >= 3) ? (&PCMSK1) : (&PCMSK0))))
90+
#define digitalPinToPCMSKbit(p) digital_pin_to_bit_mask_PGM[p]
8991

90-
#define digitalPinToInterrupt(p) ((p) == 2 ? 0 : ((p) == 3 ? 1 : NOT_AN_INTERRUPT))
92+
#define digitalPinToInterrupt(p) ((p) == 18 ? 1 : NOT_AN_INTERRUPT)
9193

9294
#ifdef ARDUINO_MAIN
9395

0 commit comments

Comments
 (0)