-
Notifications
You must be signed in to change notification settings - Fork 5
/
MewPro4.ino
63 lines (56 loc) · 1.67 KB
/
MewPro4.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// MewPro4
// Control GoPro Hero 4 Black cameras from the herobus
//
// Target device: MewPro 2 or MewPro Cable (ATtiny1634 3.3V 8MHz)
//
// (MewPro 1 with Arduino Pro Mini will not be supported due to ATmega328's broken TWI slave hardware)
//
// Copyright (c) 2016 Hisashi ITO, Orangkucing Lab (info at mewpro.cc)
// The source code is under MIT licence. For more detail please see the LICENCE file.
#include "MewPro.h"
void setup()
{
// Remark. AVR8 8MHz is too slow to catch up with the highest 115200 baud.
// cf. http://forum.arduino.cc/index.php?topic=54623.0
// Set 57600 baud or slower.
Serial.begin(57600);
setupLED(); // onboard LED (if any) setup
initEEPROM();
if (!isOmni()) {
digitalWrite(I2CINT, HIGH); pinMode(I2CINT, OUTPUT);
resetI2C();
digitalWrite(BPRDY, LOW); pinMode(BPRDY, OUTPUT);
} else {
pinMode(BPRDY, INPUT);
pinMode(I2CINT, INPUT);
}
pinMode(HBUSRDY, INPUT_PULLUP);
digitalWrite(PWRBTN, HIGH); pinMode(PWRBTN, OUTPUT);
setupShutter(); // Interface to CANON Timer Remote Controller TC-80N3
}
void loop()
{
// start up sessions
if (queueState == QUEUE_EMPTY) {
char *addr = (char *)pgm_read_word(&(startUp[(unsigned char)(startupSession++)]));
if (addr != NULL) {
queueIn(addr);
queueState = QUEUE_BUSY;
} else { // boot finished
queueState = QUEUE_HALT;
}
}
if (recvc) {
if (parseI2C_R()) {
i2cState = SESSION_CMDBODY_SENT; // send reply request again
} else {
i2cState = SESSION_IDLE;
if (queueState != QUEUE_HALT) {
queueState = QUEUE_EMPTY;
}
}
recvc = 0;
}
checkTimeAlarms();
checkTerminalCommands();
}