/
EOSRemote.pde
147 lines (118 loc) · 3.91 KB
/
EOSRemote.pde
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/* EOS control terminal */
//#include <Spi.h>
#include <Max3421e.h>
#include <Usb.h>
#include <simpletimer.h>
#include <ptp.h>
#include <canoneos.h>
#include <qep_port.h>
#include <valuelist.h>
#include <eosvaluetitles.h>
#include "eoseventparser.h"
#include "eosconsole.h"
#define DEV_ADDR 1
// Canon EOS 400D
#define DATA_IN_EP 1
#define DATA_OUT_EP 2
#define INTERRUPT_EP 3
#define CONFIG_NUM 1
#define EEP_APERTURE_LIST_OFFSET 0
#define EEP_APERTURE_LIST_SIZE 32
#define EEP_SHTSPEED_LIST_OFFSET (EEP_APERTURE_LIST_OFFSET + EEP_APERTURE_LIST_SIZE)
#define EEP_SHTSPEED_LIST_SIZE 64
#define EEP_WBALANCE_LIST_OFFSET (EEP_SHTSPEED_LIST_OFFSET + EEP_SHTSPEED_LIST_SIZE)
#define EEP_WBALANCE_LIST_SIZE 12
#define EEP_PICSTYLE_LIST_OFFSET (EEP_WBALANCE_LIST_OFFSET + EEP_WBALANCE_LIST_SIZE)
#define EEP_PICSTYLE_LIST_SIZE 12
#define EEP_EXPOCOR_LIST_OFFSET (EEP_PICSTYLE_LIST_OFFSET + EEP_PICSTYLE_LIST_SIZE)
#define EEP_EXPOCOR_LIST_SIZE 48
#define EEP_ISO_LIST_OFFSET (EEP_EXPOCOR_LIST_OFFSET + EEP_EXPOCOR_LIST_SIZE)
#define EEP_ISO_LIST_SIZE 8
EEPROMByteList vlAperture(EEP_APERTURE_LIST_OFFSET, EEP_APERTURE_LIST_SIZE);
EEPROMByteList vlShutterSpeed(EEP_SHTSPEED_LIST_OFFSET, EEP_SHTSPEED_LIST_SIZE);
EEPROMByteList vlWhiteBalance(EEP_WBALANCE_LIST_OFFSET, EEP_WBALANCE_LIST_SIZE);
EEPROMByteList vlPictureStyle(EEP_PICSTYLE_LIST_OFFSET, EEP_PICSTYLE_LIST_SIZE);
EEPROMByteList vlIso(EEP_EXPOCOR_LIST_OFFSET, EEP_EXPOCOR_LIST_SIZE);
EEPROMByteList vlExpCompensation(EEP_EXPOCOR_LIST_OFFSET, EEP_EXPOCOR_LIST_SIZE);
class CamStateHandlers : public EOSStateHandlers
{
enum CamStates { stInitial, stDisconnected, stConnected };
CamStates stateConnected;
public:
CamStateHandlers() : stateConnected(stInitial)
{
};
virtual void OnDeviceDisconnectedState(PTP *ptp);
virtual void OnDeviceInitializedState(PTP *ptp);
};
CamStateHandlers CamStates;
SimpleTimer ControlTimer, PTPPollTimer;
CanonEOS Eos(DEV_ADDR, DATA_IN_EP, DATA_OUT_EP, INTERRUPT_EP, CONFIG_NUM, &CamStates);
QEvent evtTick, evtAbort;
EOSConsole eosConsole;
uint8_t dpMode = 0;
uint8_t dpAperture = 0;
uint8_t dpShutterSpeed = 0;
uint8_t dpWb = 0;
uint8_t dpPStyle = 0;
uint8_t dpIso = 0;
uint8_t dpExpComp = 0;
void CamStateHandlers::OnDeviceDisconnectedState(PTP *ptp)
{
if (stateConnected == stConnected || stateConnected == stInitial)
{
stateConnected = stDisconnected;
PTPPollTimer.Disable();
Notify(PSTR("Camera disconnected.\r\n"));
if (stateConnected == stConnected)
eosConsole.dispatch(&evtTick);
}
}
void CamStateHandlers::OnDeviceInitializedState(PTP *ptp)
{
if (stateConnected == stDisconnected)
{
stateConnected = stConnected;
PTPPollTimer.Enable();
eosConsole.dispatch(&evtTick);
}
int8_t index = eosConsole.MenuSelect();
if (index >= 0)
{
MenuSelectEvt menu_sel_evt;
menu_sel_evt.sig = MENU_SELECT_SIG;
menu_sel_evt.item_index = index;
eosConsole.dispatch(&menu_sel_evt); // dispatch the event
}
}
void OnControlTimer()
{
// ExtControls.CheckControls();
// hdrCapture.PostEvent(&evtTick);
// Screen::Run(&LCD);
}
void OnPTPPollTimer()
{
EOSEventParser prs;
Eos.EventCheck(&prs);
}
void setup()
{
Serial.begin(115200);
Eos.Setup();
delay( 200 );
PTPPollTimer.Set(OnPTPPollTimer, 300);
// 1ms is the perfect interval for encoder polling
ControlTimer.Set(OnControlTimer, 1);
ControlTimer.Enable();
evtTick.sig = TICK_SIG;
// evtAbort.sig = ABORT_SIG;
eosConsole.init();
Serial.println("Start");
}
void loop()
{
Eos.Task();
PTPPollTimer.Run();
ControlTimer.Run();
}