summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2016-01-15 20:27:22 +0100
committerDaniel Friesel <derf@finalrewind.org>2016-01-15 20:27:22 +0100
commit4c6cb2e5c4748502cbd26d3bd38e490ebead197f (patch)
tree4bf36680ef4fb9ee464d1a0699711f3f8bdc3e56 /src
parentfd6f265cbc7270bd69b4f8b68d7ec6c436e67d39 (diff)
turn modem voltage divider off during sleep
needs hw revision >= git commit 71f427bd100963b1aafb545bfca319c50e1c48cd
Diffstat (limited to 'src')
-rw-r--r--src/main.cc12
-rw-r--r--src/modem.cc14
-rw-r--r--src/modem.h3
-rw-r--r--src/system.cc9
4 files changed, 30 insertions, 8 deletions
diff --git a/src/main.cc b/src/main.cc
index eb523ce..03cdabd 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -33,8 +33,14 @@ int main (void)
// raise timer interrupt on counter overflow (-> interrupt frequency = ~4kHz)
TIMSK0 = _BV(TOIE0);
- disp[0] = 0xff;
- disp[1] = 0xaa;
+ disp[0] = 0x01;
+ disp[1] = 0x02;
+ disp[2] = 0x04;
+ disp[3] = 0x08;
+ disp[4] = 0x10;
+ disp[5] = 0x20;
+ disp[6] = 0x40;
+ disp[7] = 0x80;
#if 0
// smile!
@@ -72,7 +78,7 @@ int main (void)
disp[31] = 0x00;
#endif
- modem.init();
+ modem.enable();
sei();
diff --git a/src/modem.cc b/src/modem.cc
index cb3a6ee..2eae685 100644
--- a/src/modem.cc
+++ b/src/modem.cc
@@ -28,7 +28,7 @@ uint8_t Modem::buffer_available() {
* Store 1 byte in ringbuffer
*/
static inline void modem_buffer_put(const uint8_t c) {
- if (modem.buffer_available() != MODEM_BUFFER_SIZE) {
+ if (modem.buffer_available() != MODEM_BUFFER_SIZE) {
modem_buffer[modem_buffer_head++ % MODEM_BUFFER_SIZE] = c;
}
}
@@ -83,7 +83,11 @@ ISR(PCINT3_vect) {
/*
* Start the modem by enabling Pin Change Interrupts & Timer
*/
-void Modem::init() {
+void Modem::enable() {
+ /* Enable R1 */
+ DDRA |= _BV(PA3);
+ PORTA |= _BV(PA3);
+
/* Modem pin as input */
MODEM_DDR &= ~_BV(MODEM_PIN);
@@ -94,3 +98,9 @@ void Modem::init() {
/* Timer: TCCR1: CS10 and CS11 bits: 8MHz clock with Prescaler 64 = 125kHz timer clock */
TCCR1B = _BV(CS11) | _BV(CS10);
}
+
+void Modem::disable()
+{
+ PORTA &= ~_BV(PA3);
+ DDRA &= ~_BV(PA3);
+}
diff --git a/src/modem.h b/src/modem.h
index 9c629a5..a37d7d8 100644
--- a/src/modem.h
+++ b/src/modem.h
@@ -27,7 +27,8 @@ class Modem {
Modem() {};
uint8_t buffer_available(void);
uint8_t buffer_get(void);
- void init(void);
+ void enable(void);
+ void disable(void);
};
extern Modem modem;
diff --git a/src/system.cc b/src/system.cc
index 9aaa62b..b98e687 100644
--- a/src/system.cc
+++ b/src/system.cc
@@ -34,6 +34,8 @@ void System::loop()
// turn off display to indicate we're about to shut down
display.turn_off();
+ modem.disable();
+
// wait until both buttons are released
while (!((PINC & _BV(PC3)) && (PINC & _BV(PC7)))) ;
@@ -57,6 +59,9 @@ void System::loop()
// turn on display
display.turn_on();
+ // ... and modem
+ modem.enable();
+
want_shutdown = 0;
}
}
@@ -64,9 +69,9 @@ void System::loop()
want_shutdown = 0;
}
- if (modem.buffer_available()) {
+ while (modem.buffer_available()) {
disp[i++] = modem.buffer_get();
- if (i == 7)
+ if (i == 8)
i = 0;
}
}