Skip to content

Remove magic values for LowPower.sleep() #10

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 56 additions & 50 deletions src/SigFox.cpp
Original file line number Diff line number Diff line change
@@ -119,6 +119,10 @@ int SIGFOXClass::begin(SPIClass& spi, int reset, int poweron, int interrupt, int
return begin();
}

void wakeUpRoutine() {
SigFox.status_without_delay();
}

int SIGFOXClass::send(unsigned char mess[], int len, bool rx)
{
if (len == 0) return 98;
@@ -160,39 +164,31 @@ int SIGFOXClass::send(unsigned char mess[], int len, bool rx)
digitalWrite(chip_select_pin, HIGH);
int ret = 99;

int timeout = 10000; //10 seconds
if (rx) {
timeout = 60000; //60 seconds
}

if (!debugging) {
#ifdef SIGFOX_SPI
LowPower.attachInterruptWakeup(interrupt_pin, NULL, FALLING);
LowPower.sleep(timeout);
LowPower.attachInterruptWakeup(interrupt_pin, wakeUpRoutine, LOW);
LowPower.sleep();
delay(1);
detachInterrupt(interrupt_pin);
ret = statusCode(SIGFOX);
#endif
if (digitalRead(interrupt_pin) == 0) {
status();
ret = statusCode(SIGFOX);
}
goto exit;
}

for (i = 0; i < timeout/10; i++)
{
if (digitalRead(interrupt_pin) == 0) {
status();
ret = statusCode(SIGFOX);
break;
}
else {
digitalWrite(led_pin, HIGH);
delay(50);
digitalWrite(led_pin, LOW);
delay(50);
} else {
while (true)
{
if (digitalRead(interrupt_pin) == 0) {
status();
ret = statusCode(SIGFOX);
break;
}
else {
digitalWrite(led_pin, HIGH);
delay(50);
digitalWrite(led_pin, LOW);
delay(50);
}
}
}

exit:
if (ret == 99) sig = 13;

if (sig == 0 && rx) {
@@ -227,34 +223,30 @@ int SIGFOXClass::sendBit(bool value){
delay(1);
digitalWrite(chip_select_pin, HIGH);

int timeout = 7000; //7 seconds

if (!debugging) {
#ifdef SIGFOX_SPI
LowPower.attachInterruptWakeup(interrupt_pin, NULL, FALLING);
LowPower.sleep(timeout);
LowPower.attachInterruptWakeup(interrupt_pin, wakeUpRoutine, LOW);
LowPower.sleep();
delay(1);
detachInterrupt(interrupt_pin);
return statusCode(SIGFOX);
#endif
if (digitalRead(interrupt_pin) == 0) {
status();
return statusCode(SIGFOX);
}
}

for (i = 0; i < timeout/10; i++)
{
if (digitalRead(interrupt_pin) == 0) {
status();
return statusCode(SIGFOX);
break;
}
else {
digitalWrite(led_pin, HIGH);
delay(50);
digitalWrite(led_pin, LOW);
delay(50);
return 13;
} else {
while (true)
{
if (digitalRead(interrupt_pin) == 0) {
status();
return statusCode(SIGFOX);
}
else {
digitalWrite(led_pin, HIGH);
delay(50);
digitalWrite(led_pin, LOW);
delay(50);
}
}
}
return 99; //default
}

int SIGFOXClass::beginPacket() {
@@ -426,6 +418,20 @@ void SIGFOXClass::status()
delay(1);
}

void SIGFOXClass::status_without_delay()
{
digitalWrite(chip_select_pin, LOW);
spi_port->beginTransaction(SPICONFIG);
spi_port->transfer(0x0A);
spi_port->transfer(0);
ssm = spi_port->transfer(0);
atm = spi_port->transfer(0);
sig = spi_port->transfer(0);
sig2 = spi_port->transfer(0);
spi_port->endTransaction();
digitalWrite(chip_select_pin, HIGH);
}

float SIGFOXClass::internalTemperature()
{
digitalWrite(chip_select_pin, LOW);
1 change: 1 addition & 0 deletions src/SigFox.h
Original file line number Diff line number Diff line change
@@ -98,6 +98,7 @@ class SIGFOXClass : public Stream
* Read status (fill ssm,atm,sig status variables)
*/
void status();
void status_without_delay();
/*
* Return status code.
* Type: 0 -> ssm status ; 1 -> atm status ; 2 -> sigfox status