Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit f08aa48

Browse files
Merge pull request #115 from PRosenb/mock_for_sleep_and_wdt
Mock for sleep and wdt
2 parents c5f5732 + 2600fb5 commit f08aa48

File tree

16 files changed

+354
-2
lines changed

16 files changed

+354
-2
lines changed

‎CHANGELOG.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
4343
### Added
4444
- Proper `ostream operator <<` for `nullptr`
4545
- Proper comparison operations fro `nullptr`
46+
- Mocks for avr/sleep.h and avr/wdt.h
47+
- Definitions for ISR and ADCSRA
4648

4749
### Changed
4850
- `Compare.h` heavily refactored to use a smallish macro
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
compile:
2+
libraries: ~
3+
platforms:
4+
- uno
5+
- leonardo
6+
7+
unittest:
8+
libraries: ~
9+
platforms:
10+
- uno
11+
- leonardo
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#include <avr/sleep.h>
2+
3+
#define BUTTON_INT_PIN 2
4+
5+
void setup() {
6+
Serial.begin(115200);
7+
Serial.println("start");
8+
delay(200);
9+
pinMode(BUTTON_INT_PIN, INPUT_PULLUP);
10+
attachInterrupt(digitalPinToInterrupt(BUTTON_INT_PIN), isrButtonTrigger, FALLING);
11+
}
12+
13+
void loop() {
14+
// sleep unti an interrupt occurs
15+
sleep_enable(); // enables the sleep bit, a safety pin
16+
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
17+
sleep_cpu(); // here the device is actually put to sleep
18+
sleep_disable(); // disables the sleep bit, a safety pin
19+
20+
Serial.println("interrupt");
21+
delay(200);
22+
}
23+
24+
void isrButtonTrigger() {
25+
// nothing to do, wakes up the CPU
26+
}
27+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
compile:
2+
libraries: ~
3+
platforms:
4+
- uno
5+
- leonardo
6+
7+
unittest:
8+
libraries: ~
9+
platforms:
10+
- uno
11+
- leonardo
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#include <avr/wdt.h>
2+
3+
void setup() {
4+
pinMode(LED_BUILTIN, OUTPUT);
5+
digitalWrite(LED_BUILTIN, LOW);
6+
7+
wdt_enable(WDTO_4S);
8+
// First timeout executes interrupt, second does reset.
9+
// So first LED 4s off
10+
// then LED 4s on
11+
// then reset CPU and start again
12+
WDTCSR |= (1 << WDIE);
13+
}
14+
15+
void loop() {
16+
// the program is alive...for now.
17+
wdt_reset();
18+
19+
while (1)
20+
; // do nothing. the program will lockup here.
21+
22+
// Can not get here
23+
}
24+
25+
ISR (WDT_vect) {
26+
// WDIE & WDIF is cleared in hardware upon entering this ISR
27+
digitalWrite(LED_BUILTIN, HIGH);
28+
}
29+
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#include <ArduinoUnitTests.h>
2+
#include <Arduino.h>
3+
4+
unittest(check_ADCSRA_read_write) {
5+
ADCSRA = 123;
6+
7+
assertEqual(123, ADCSRA);
8+
}
9+
10+
unittest_main()

‎SampleProjects/TestSomething/test/interrupts.cpp‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ unittest(interrupt_attachment) {
2323
assertFalse(state->interrupt[0].attached);
2424
}
2525

26-
26+
// Just check if declaration compiles.
27+
// WDT_vect defines the interrupt of the watchdog timer
28+
// if configured accordinly.
29+
// See avr/interrupt.h
30+
ISR (WDT_vect) {
31+
}
2732

2833
unittest_main()
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#include <ArduinoUnitTests.h>
2+
#include <avr/sleep.h>
3+
4+
GodmodeState* state = GODMODE();
5+
6+
unittest(sleep_enable) {
7+
state->reset();
8+
assertFalse(state->sleep.sleep_enable);
9+
assertEqual(0, state->sleep.sleep_enable_count);
10+
11+
sleep_enable();
12+
13+
assertTrue(state->sleep.sleep_enable);
14+
assertEqual(1, state->sleep.sleep_enable_count);
15+
}
16+
17+
unittest(sleep_disable) {
18+
state->reset();
19+
assertEqual(0, state->sleep.sleep_disable_count);
20+
21+
sleep_disable();
22+
23+
assertFalse(state->sleep.sleep_enable);
24+
assertEqual(1, state->sleep.sleep_disable_count);
25+
}
26+
27+
unittest(set_sleep_mode) {
28+
state->reset();
29+
assertEqual(0, state->sleep.sleep_mode);
30+
31+
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
32+
33+
assertEqual(SLEEP_MODE_PWR_DOWN, state->sleep.sleep_mode);
34+
}
35+
36+
unittest(sleep_bod_disable) {
37+
state->reset();
38+
assertEqual(0, state->sleep.sleep_bod_disable_count);
39+
40+
sleep_bod_disable();
41+
42+
assertEqual(1, state->sleep.sleep_bod_disable_count);
43+
}
44+
45+
unittest(sleep_cpu) {
46+
state->reset();
47+
assertEqual(0, state->sleep.sleep_cpu_count);
48+
49+
sleep_cpu();
50+
51+
assertEqual(1, state->sleep.sleep_cpu_count);
52+
}
53+
54+
unittest(sleep_mode) {
55+
state->reset();
56+
assertEqual(0, state->sleep.sleep_mode_count);
57+
58+
sleep_mode();
59+
60+
assertEqual(1, state->sleep.sleep_mode_count);
61+
assertEqual(1, state->sleep.sleep_enable_count);
62+
assertEqual(1, state->sleep.sleep_disable_count);
63+
}
64+
65+
unittest_main()
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#include <ArduinoUnitTests.h>
2+
#include <avr/wdt.h>
3+
4+
GodmodeState* state = GODMODE();
5+
6+
unittest(taskWdtEnable_checkTimeout) {
7+
state->reset();
8+
assertEqual(0, state->wdt.timeout);
9+
10+
wdt_enable(WDTO_1S);
11+
12+
assertTrue(state->wdt.wdt_enable);
13+
assertEqual(WDTO_1S, state->wdt.timeout);
14+
assertEqual(1, state->wdt.wdt_enable_count);
15+
}
16+
17+
unittest(taskWdtEnableDisable) {
18+
state->reset();
19+
assertEqual(0, state->wdt.wdt_enable_count);
20+
21+
wdt_enable(WDTO_1S);
22+
23+
assertTrue(state->wdt.wdt_enable);
24+
assertEqual(1, state->wdt.wdt_enable_count);
25+
26+
wdt_disable();
27+
28+
assertFalse(state->wdt.wdt_enable);
29+
assertEqual(1, state->wdt.wdt_enable_count);
30+
}
31+
32+
unittest(wdt_reset) {
33+
state->reset();
34+
assertEqual(0, state->wdt.wdt_reset_count);
35+
36+
wdt_reset();
37+
38+
assertEqual(1, state->wdt.wdt_reset_count);
39+
}
40+
41+
unittest_main()

‎cpp/arduino/Arduino.h‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ typedef uint8_t byte;
2424
// Math and Trig
2525
#include "AvrMath.h"
2626

27+
#include "AvrAdc.h"
28+
#include "avr/interrupt.h"
29+
2730
#include "Godmode.h"
2831

2932

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /