Merge pull request #1 from slepp/master

Static method declarations for ISR handlers and singleton object.
This commit is contained in:
Nigel VH 2015-06-30 14:16:18 -07:00
commit 68fb758aef
2 changed files with 11 additions and 20 deletions

View File

@ -1129,23 +1129,14 @@ uint32_t HamShield::findWhitespaceChannels(uint32_t buffer[],uint8_t buffsize, u
} }
/* /* Setup the auxiliary button input mode and register the ISR */
BUG: I cannot figure out how to attach these interrupt handlers without the error:
/Users/casey/Documents/Arduino/libraries/HamShield/HamShield.cpp: In member function 'void HamShield::buttonMode(uint8_t)':
/Users/casey/Documents/Arduino/libraries/HamShield/HamShield.cpp:1125: error: argument of type 'void (HamShield::)()' does not match 'void (*)()'
/Users/casey/Documents/Arduino/libraries/HamShield/HamShield.cpp:1126: error: argument of type 'void (HamShield::)()' does not match 'void (*)()'
*/
/*
void HamShield::buttonMode(uint8_t mode) { void HamShield::buttonMode(uint8_t mode) {
pinMode(HAMSHIELD_AUX_BUTTON,INPUT); // set the pin mode to input pinMode(HAMSHIELD_AUX_BUTTON,INPUT); // set the pin mode to input
digitalWrite(HAMSHIELD_AUX_BUTTON,HIGH); // turn on internal pull up digitalWrite(HAMSHIELD_AUX_BUTTON,HIGH); // turn on internal pull up
if(mode == PTT_MODE) { attachInterrupt(HAMSHIELD_AUX_BUTTON, isr_ptt, CHANGE); } sHamShield = this;
if(mode == RESET_MODE) { attachInterrupt(HAMSHIELD_AUX_BUTTON, isr_reset, CHANGE); } if(mode == PTT_MODE) { attachInterrupt(HAMSHIELD_AUX_BUTTON, HamShield::isr_ptt, CHANGE); }
if(mode == RESET_MODE) { attachInterrupt(HAMSHIELD_AUX_BUTTON, HamShield::isr_reset, CHANGE); }
} }
*/
/* Interrupt routines */ /* Interrupt routines */
@ -1162,12 +1153,12 @@ void HamShield::isr_ptt() {
if((bouncer + 200) > millis()) { if((bouncer + 200) > millis()) {
if(ptt == false) { if(ptt == false) {
ptt = true; ptt = true;
HamShield::setModeTransmit(); sHamShield->setModeTransmit();
bouncer = millis(); bouncer = millis();
} }
if(ptt == true) { if(ptt == true) {
ptt = false; ptt = false;
HamShield::setModeReceive(); sHamShield->setModeReceive();
bouncer = millis(); bouncer = millis();
} } } }
} }
@ -1359,4 +1350,4 @@ void HamShield::AFSKOut(char buffer[80]) {
startPlayback(AFSK_space, sizeof(AFSK_space)); delay(8); } startPlayback(AFSK_space, sizeof(AFSK_space)); delay(8); }
} }
*/ */

View File

@ -519,8 +519,8 @@ class HamShield {
uint32_t scanChannels(uint32_t buffer[],uint8_t buffsize, uint8_t speed, uint16_t threshold); uint32_t scanChannels(uint32_t buffer[],uint8_t buffsize, uint8_t speed, uint16_t threshold);
uint32_t findWhitespaceChannels(uint32_t buffer[],uint8_t buffsize, uint8_t dwell, uint16_t threshold); uint32_t findWhitespaceChannels(uint32_t buffer[],uint8_t buffsize, uint8_t dwell, uint16_t threshold);
void buttonMode(uint8_t mode); void buttonMode(uint8_t mode);
void isr_ptt(); static void isr_ptt();
void isr_reset(); static void isr_reset();
void morseOut(char buffer[HAMSHIELD_MORSE_BUFFER_SIZE]); void morseOut(char buffer[HAMSHIELD_MORSE_BUFFER_SIZE]);
char morseLookup(char letter); char morseLookup(char letter);
bool waitForChannel(long timeout, long breakwindow, int setRSSI); bool waitForChannel(long timeout, long breakwindow, int setRSSI);
@ -541,7 +541,7 @@ class HamShield {
uint32_t GMRS[]; uint32_t GMRS[];
uint32_t MURS[]; uint32_t MURS[];
uint32_t WX[]; uint32_t WX[];
static HamShield *sHamShield; // HamShield singleton, used for ISRs mostly
// int8_t A1846S::readWord(uint8_t devAddr, uint8_t regAddr, uint16_t *data, uint16_t timeout); // int8_t A1846S::readWord(uint8_t devAddr, uint8_t regAddr, uint16_t *data, uint16_t timeout);
// int8_t A1846S::readBits(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint16_t *data, uint16_t timeout); // int8_t A1846S::readBits(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint16_t *data, uint16_t timeout);