-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfieldtrip.rb
64 lines (51 loc) · 1.38 KB
/
fieldtrip.rb
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
require 'socket'
class FieldTrip
VERSION = 1
GET_HDR = 0x201
GET_DAT = 0x202
GET_EVT = 0x203
WAIT_DAT = 0x402
class Client
def initialize(hostname, port = 1972)
@socket = TCPSocket.new hostname, port
end
def send_request(command, payload = nil)
if payload.nil?
request = [VERSION, command, 0].pack('vvV')
else
request = [VERSION, command, payload.bytesize].pack('vvV') + payload
end
@socket.write request
end
def receive_response
response_header = @socket.read(8)
_, _, bufsize = response_header.unpack('vvV')
response_body = @socket.read(bufsize)
return response_header + response_body
end
def get_header
send_request GET_HDR
receive_response
end
def get_data(begsample = nil, endsample = nil)
if begsample.nil? && endsample.nil?
send_request GET_DAT
else
send_request GET_DAT, [begsample, endsample].pack('LL')
end
receive_response
end
def get_events(begevent = nil, endevent = nil)
if begevent.nil? && endevent.nil?
send_request GET_EVT
else
send_request GET_EVT, [begevent, endevent].pack('LL')
end
receive_response
end
def wait_data(nsamples, nevents, timeout)
send_request WAIT_DAT, [nsamples, nevents, timeout].pack('LLL')
receive_response
end
end
end