Skip to content

Commit f04225f

Browse files
committed
Added EventBroadcaster sink
1 parent f1ed3e4 commit f04225f

15 files changed

Lines changed: 513 additions & 22 deletions

File tree

Builds/Linux/Makefile

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ OBJECTS := \
9797
$(OBJDIR)/ImageIcon_c89b23a6.o \
9898
$(OBJDIR)/VisualizerEditor_3672b003.o \
9999
$(OBJDIR)/NetworkEventsEditor_fd22826.o \
100+
$(OBJDIR)/EventBroadcaster_babd0c4a.o \
101+
$(OBJDIR)/EventBroadcasterEditor_55664797.o \
100102
$(OBJDIR)/EventDetector_d0f4d00c.o \
101103
$(OBJDIR)/EventNode_857d5604.o \
102104
$(OBJDIR)/EventNodeEditor_2652ddd1.o \
@@ -437,6 +439,16 @@ $(OBJDIR)/NetworkEventsEditor_fd22826.o: ../../Source/Processors/Editors/Network
437439
@echo "Compiling NetworkEventsEditor.cpp"
438440
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
439441

442+
$(OBJDIR)/EventBroadcaster_babd0c4a.o: ../../Source/Processors/EventBroadcaster/EventBroadcaster.cpp
443+
-@mkdir -p $(OBJDIR)
444+
@echo "Compiling EventBroadcaster.cpp"
445+
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
446+
447+
$(OBJDIR)/EventBroadcasterEditor_55664797.o: ../../Source/Processors/EventBroadcaster/EventBroadcasterEditor.cpp
448+
-@mkdir -p $(OBJDIR)
449+
@echo "Compiling EventBroadcasterEditor.cpp"
450+
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
451+
440452
$(OBJDIR)/EventDetector_d0f4d00c.o: ../../Source/Processors/EventDetector/EventDetector.cpp
441453
-@mkdir -p $(OBJDIR)
442454
@echo "Compiling EventDetector.cpp"

Builds/MacOSX/open-ephys.xcodeproj/project.pbxproj

Lines changed: 21 additions & 7 deletions
Large diffs are not rendered by default.

Builds/VisualStudio2012/open-ephys.vcxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,8 @@
309309
<ClCompile Include="..\..\Source\Processors\Editors\ImageIcon.cpp"/>
310310
<ClCompile Include="..\..\Source\Processors\Editors\VisualizerEditor.cpp"/>
311311
<ClCompile Include="..\..\Source\Processors\Editors\NetworkEventsEditor.cpp"/>
312+
<ClCompile Include="..\..\Source\Processors\EventBroadcaster\EventBroadcaster.cpp"/>
313+
<ClCompile Include="..\..\Source\Processors\EventBroadcaster\EventBroadcasterEditor.cpp"/>
312314
<ClCompile Include="..\..\Source\Processors\EventDetector\EventDetector.cpp"/>
313315
<ClCompile Include="..\..\Source\Processors\EventNode\EventNode.cpp"/>
314316
<ClCompile Include="..\..\Source\Processors\EventNode\EventNodeEditor.cpp"/>
@@ -1562,6 +1564,8 @@
15621564
<ClInclude Include="..\..\Source\Processors\Editors\ImageIcon.h"/>
15631565
<ClInclude Include="..\..\Source\Processors\Editors\VisualizerEditor.h"/>
15641566
<ClInclude Include="..\..\Source\Processors\Editors\NetworkEventsEditor.h"/>
1567+
<ClInclude Include="..\..\Source\Processors\EventBroadcaster\EventBroadcaster.h"/>
1568+
<ClInclude Include="..\..\Source\Processors\EventBroadcaster\EventBroadcasterEditor.h"/>
15651569
<ClInclude Include="..\..\Source\Processors\EventDetector\EventDetector.h"/>
15661570
<ClInclude Include="..\..\Source\Processors\EventNode\EventNode.h"/>
15671571
<ClInclude Include="..\..\Source\Processors\EventNode\EventNodeEditor.h"/>

Builds/VisualStudio2012/open-ephys.vcxproj.filters

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@
6262
<Filter Include="open-ephys\Source\Processors\Editors">
6363
<UniqueIdentifier>{E65874A6-23B2-9D76-B12A-15730E2192BC}</UniqueIdentifier>
6464
</Filter>
65+
<Filter Include="open-ephys\Source\Processors\EventBroadcaster">
66+
<UniqueIdentifier>{5D8BDC28-D042-498C-5264-B63133EAFE42}</UniqueIdentifier>
67+
</Filter>
6568
<Filter Include="open-ephys\Source\Processors\EventDetector">
6669
<UniqueIdentifier>{FDD5B79A-1AA4-7745-BB6E-E09A6DFC328E}</UniqueIdentifier>
6770
</Filter>
@@ -580,6 +583,12 @@
580583
<ClCompile Include="..\..\Source\Processors\Editors\NetworkEventsEditor.cpp">
581584
<Filter>open-ephys\Source\Processors\Editors</Filter>
582585
</ClCompile>
586+
<ClCompile Include="..\..\Source\Processors\EventBroadcaster\EventBroadcaster.cpp">
587+
<Filter>open-ephys\Source\Processors\EventBroadcaster</Filter>
588+
</ClCompile>
589+
<ClCompile Include="..\..\Source\Processors\EventBroadcaster\EventBroadcasterEditor.cpp">
590+
<Filter>open-ephys\Source\Processors\EventBroadcaster</Filter>
591+
</ClCompile>
583592
<ClCompile Include="..\..\Source\Processors\EventDetector\EventDetector.cpp">
584593
<Filter>open-ephys\Source\Processors\EventDetector</Filter>
585594
</ClCompile>
@@ -2196,6 +2205,12 @@
21962205
<ClInclude Include="..\..\Source\Processors\Editors\NetworkEventsEditor.h">
21972206
<Filter>open-ephys\Source\Processors\Editors</Filter>
21982207
</ClInclude>
2208+
<ClInclude Include="..\..\Source\Processors\EventBroadcaster\EventBroadcaster.h">
2209+
<Filter>open-ephys\Source\Processors\EventBroadcaster</Filter>
2210+
</ClInclude>
2211+
<ClInclude Include="..\..\Source\Processors\EventBroadcaster\EventBroadcasterEditor.h">
2212+
<Filter>open-ephys\Source\Processors\EventBroadcaster</Filter>
2213+
</ClInclude>
21992214
<ClInclude Include="..\..\Source\Processors\EventDetector\EventDetector.h">
22002215
<Filter>open-ephys\Source\Processors\EventDetector</Filter>
22012216
</ClInclude>

Builds/VisualStudio2013/open-ephys.sln

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,21 @@
1-
Microsoft Visual Studio Solution File, Format Version 12.00
1+
Microsoft Visual Studio Solution File, Format Version 11.00
22
# Visual Studio 2013
3-
VisualStudioVersion = 12.0.31101.0
4-
MinimumVisualStudioVersion = 10.0.40219.1
5-
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "open-ephys", "open-ephys.vcxproj", "{9C924D66-7DEC-1AEF-B375-DB8666BFB909}"
3+
Project("{5A05F353-1D63-394C-DFB0-981BB2309002}") = "open-ephys", "open-ephys.vcxproj", "{9C924D66-7DEC-1AEF-B375-DB8666BFB909}"
64
EndProject
75
Global
86
GlobalSection(SolutionConfigurationPlatforms) = preSolution
97
Debug|Win32 = Debug|Win32
10-
Debug|x64 = Debug|x64
11-
Debug64|Win32 = Debug64|Win32
12-
Debug64|x64 = Debug64|x64
138
Release|Win32 = Release|Win32
14-
Release|x64 = Release|x64
15-
Release64|Win32 = Release64|Win32
9+
Debug64|x64 = Debug64|x64
1610
Release64|x64 = Release64|x64
1711
EndGlobalSection
1812
GlobalSection(ProjectConfigurationPlatforms) = postSolution
1913
{9C924D66-7DEC-1AEF-B375-DB8666BFB909}.Debug|Win32.ActiveCfg = Debug|Win32
2014
{9C924D66-7DEC-1AEF-B375-DB8666BFB909}.Debug|Win32.Build.0 = Debug|Win32
21-
{9C924D66-7DEC-1AEF-B375-DB8666BFB909}.Debug|x64.ActiveCfg = Debug|Win32
22-
{9C924D66-7DEC-1AEF-B375-DB8666BFB909}.Debug64|Win32.ActiveCfg = Debug64|x64
23-
{9C924D66-7DEC-1AEF-B375-DB8666BFB909}.Debug64|x64.ActiveCfg = Debug64|x64
24-
{9C924D66-7DEC-1AEF-B375-DB8666BFB909}.Debug64|x64.Build.0 = Debug64|x64
2515
{9C924D66-7DEC-1AEF-B375-DB8666BFB909}.Release|Win32.ActiveCfg = Release|Win32
2616
{9C924D66-7DEC-1AEF-B375-DB8666BFB909}.Release|Win32.Build.0 = Release|Win32
27-
{9C924D66-7DEC-1AEF-B375-DB8666BFB909}.Release|x64.ActiveCfg = Release|Win32
28-
{9C924D66-7DEC-1AEF-B375-DB8666BFB909}.Release64|Win32.ActiveCfg = Release64|x64
17+
{9C924D66-7DEC-1AEF-B375-DB8666BFB909}.Debug64|x64.ActiveCfg = Debug64|x64
18+
{9C924D66-7DEC-1AEF-B375-DB8666BFB909}.Debug64|x64.Build.0 = Debug64|x64
2919
{9C924D66-7DEC-1AEF-B375-DB8666BFB909}.Release64|x64.ActiveCfg = Release64|x64
3020
{9C924D66-7DEC-1AEF-B375-DB8666BFB909}.Release64|x64.Build.0 = Release64|x64
3121
EndGlobalSection

Builds/VisualStudio2013/open-ephys.vcxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,8 @@
314314
<ClCompile Include="..\..\Source\Processors\Editors\ImageIcon.cpp"/>
315315
<ClCompile Include="..\..\Source\Processors\Editors\VisualizerEditor.cpp"/>
316316
<ClCompile Include="..\..\Source\Processors\Editors\NetworkEventsEditor.cpp"/>
317+
<ClCompile Include="..\..\Source\Processors\EventBroadcaster\EventBroadcaster.cpp"/>
318+
<ClCompile Include="..\..\Source\Processors\EventBroadcaster\EventBroadcasterEditor.cpp"/>
317319
<ClCompile Include="..\..\Source\Processors\EventDetector\EventDetector.cpp"/>
318320
<ClCompile Include="..\..\Source\Processors\EventNode\EventNode.cpp"/>
319321
<ClCompile Include="..\..\Source\Processors\EventNode\EventNodeEditor.cpp"/>
@@ -1567,6 +1569,8 @@
15671569
<ClInclude Include="..\..\Source\Processors\Editors\ImageIcon.h"/>
15681570
<ClInclude Include="..\..\Source\Processors\Editors\VisualizerEditor.h"/>
15691571
<ClInclude Include="..\..\Source\Processors\Editors\NetworkEventsEditor.h"/>
1572+
<ClInclude Include="..\..\Source\Processors\EventBroadcaster\EventBroadcaster.h"/>
1573+
<ClInclude Include="..\..\Source\Processors\EventBroadcaster\EventBroadcasterEditor.h"/>
15701574
<ClInclude Include="..\..\Source\Processors\EventDetector\EventDetector.h"/>
15711575
<ClInclude Include="..\..\Source\Processors\EventNode\EventNode.h"/>
15721576
<ClInclude Include="..\..\Source\Processors\EventNode\EventNodeEditor.h"/>

Builds/VisualStudio2013/open-ephys.vcxproj.filters

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@
6262
<Filter Include="open-ephys\Source\Processors\Editors">
6363
<UniqueIdentifier>{E65874A6-23B2-9D76-B12A-15730E2192BC}</UniqueIdentifier>
6464
</Filter>
65+
<Filter Include="open-ephys\Source\Processors\EventBroadcaster">
66+
<UniqueIdentifier>{5D8BDC28-D042-498C-5264-B63133EAFE42}</UniqueIdentifier>
67+
</Filter>
6568
<Filter Include="open-ephys\Source\Processors\EventDetector">
6669
<UniqueIdentifier>{FDD5B79A-1AA4-7745-BB6E-E09A6DFC328E}</UniqueIdentifier>
6770
</Filter>
@@ -580,6 +583,12 @@
580583
<ClCompile Include="..\..\Source\Processors\Editors\NetworkEventsEditor.cpp">
581584
<Filter>open-ephys\Source\Processors\Editors</Filter>
582585
</ClCompile>
586+
<ClCompile Include="..\..\Source\Processors\EventBroadcaster\EventBroadcaster.cpp">
587+
<Filter>open-ephys\Source\Processors\EventBroadcaster</Filter>
588+
</ClCompile>
589+
<ClCompile Include="..\..\Source\Processors\EventBroadcaster\EventBroadcasterEditor.cpp">
590+
<Filter>open-ephys\Source\Processors\EventBroadcaster</Filter>
591+
</ClCompile>
583592
<ClCompile Include="..\..\Source\Processors\EventDetector\EventDetector.cpp">
584593
<Filter>open-ephys\Source\Processors\EventDetector</Filter>
585594
</ClCompile>
@@ -2196,6 +2205,12 @@
21962205
<ClInclude Include="..\..\Source\Processors\Editors\NetworkEventsEditor.h">
21972206
<Filter>open-ephys\Source\Processors\Editors</Filter>
21982207
</ClInclude>
2208+
<ClInclude Include="..\..\Source\Processors\EventBroadcaster\EventBroadcaster.h">
2209+
<Filter>open-ephys\Source\Processors\EventBroadcaster</Filter>
2210+
</ClInclude>
2211+
<ClInclude Include="..\..\Source\Processors\EventBroadcaster\EventBroadcasterEditor.h">
2212+
<Filter>open-ephys\Source\Processors\EventBroadcaster</Filter>
2213+
</ClInclude>
21992214
<ClInclude Include="..\..\Source\Processors\EventDetector\EventDetector.h">
22002215
<Filter>open-ephys\Source\Processors\EventDetector</Filter>
22012216
</ClInclude>

Resources/Python/event_listener.py

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
from __future__ import print_function, unicode_literals
2+
from collections import OrderedDict
3+
from itertools import chain, repeat
4+
try:
5+
from itertools import izip
6+
except ImportError:
7+
izip = zip # Python 3
8+
import struct
9+
10+
import zmq
11+
12+
13+
# Event types
14+
TTL = 3
15+
SPIKE = 4
16+
MESSAGE = 5
17+
BINARY_MSG = 6
18+
19+
20+
def unpacker(format, *fields):
21+
s = struct.Struct(format)
22+
23+
def unpack(data):
24+
values = s.unpack(data[:s.size])
25+
return (OrderedDict(izip(fields, chain(values, repeat(None)))),
26+
data[s.size:])
27+
28+
return unpack
29+
30+
31+
unpack_standard = unpacker('3BxB',
32+
'node_id',
33+
'event_id',
34+
'event_channel',
35+
'source_node_id',
36+
)
37+
38+
39+
unpack_spike = unpacker('<2q2x5H3B2fH',
40+
'timestamp',
41+
'timestamp_software',
42+
'n_channels',
43+
'n_samples',
44+
'sorted_id',
45+
'electrode_id',
46+
'channel',
47+
'color_r', 'color_g', 'color_b',
48+
'pc_proj_x', 'pc_proj_y',
49+
'sampling_frequency_hz',
50+
'data',
51+
'gain',
52+
'threshold',
53+
)
54+
55+
56+
def run(hostname='localhost', port=5557):
57+
with zmq.Context() as ctx:
58+
with ctx.socket(zmq.SUB) as sock:
59+
sock.connect('tcp://%s:%d' % (hostname, port))
60+
61+
for etype in (TTL, SPIKE, MESSAGE):
62+
sock.setsockopt(zmq.SUBSCRIBE, chr(etype).encode('utf-8'))
63+
64+
while True:
65+
try:
66+
parts = sock.recv_multipart()
67+
assert len(parts) == 3
68+
69+
etype = ord(parts[0])
70+
timestamp_seconds = struct.unpack('d', parts[1])[0]
71+
body = parts[2]
72+
73+
if etype == SPIKE:
74+
spike, body = unpack_spike(body)
75+
print('%g: Spike: %s' % (timestamp_seconds, spike))
76+
body = '' # TODO: unpack other data
77+
78+
else:
79+
header, body = unpack_standard(body)
80+
81+
if etype == TTL:
82+
print('%g: TTL: Channel %d: %s' %
83+
(timestamp_seconds,
84+
header['event_channel'] + 1,
85+
'ON' if header['event_id'] else 'OFF'))
86+
87+
elif etype == MESSAGE:
88+
msg, body = body.decode('utf-8'), ''
89+
print('%g: Message: %s' % (timestamp_seconds, msg))
90+
91+
92+
# Check that all data was consumed
93+
assert len(body) == 0
94+
95+
except KeyboardInterrupt:
96+
print() # Add final newline
97+
break
98+
99+
100+
if __name__ == '__main__':
101+
run()

0 commit comments

Comments
 (0)