-
Notifications
You must be signed in to change notification settings - Fork 11
/
instance.go
208 lines (167 loc) · 9.03 KB
/
instance.go
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
/*****************************************************************************
* (c) 2020 Copyright, Real-Time Innovations. All rights reserved. *
* *
* No duplications, whole or partial, manual or electronic, may be made *
* without express written permission. Any such copies, or revisions thereof,*
* must display this notice unaltered. *
* This code contains trade secrets of Real-Time Innovations, Inc. *
* *
*****************************************************************************/
// Package rti implements functions of RTI Connector for Connext DDS in Go
package rti
// #cgo windows CFLAGS: -I${SRCDIR}/include -I${SRCDIR}/rticonnextdds-connector/include -DRTI_WIN32 -DNDDS_DLL_VARIABLE
// #cgo linux,arm CFLAGS: -I${SRCDIR}/include -I${SRCDIR}/rticonnextdds-connector/include -DRTI_UNIX -DRTI_LINUX
// #cgo windows LDFLAGS: -L${SRCDIR}/rticonnextdds-connector/lib/x64Win64VS2013 -lrtiddsconnector
// #cgo linux,arm LDFLAGS: -L${SRCDIR}/rticonnextdds-connector/lib/armv6vfphLinux3.xgcc4.7.2 -lrtiddsconnector -ldl -lnsl -lm -lpthread -lrt
// #include "rticonnextdds-connector.h"
// #include <stdlib.h>
import "C"
import (
"encoding/json"
"unsafe"
)
/********
* Types *
*********/
// Instance is used by an output to write DDS data
type Instance struct {
output *Output
}
/*******************
* Public Functions *
*******************/
// SetUint8 is a function to set a value of type uint8 into samples
func (instance *Instance) SetUint8(fieldName string, value uint8) error {
fieldNameCStr := C.CString(fieldName)
defer C.free(unsafe.Pointer(fieldNameCStr))
retcode := int(C.RTI_Connector_set_number_into_samples(unsafe.Pointer(instance.output.connector.native), instance.output.nameCStr, fieldNameCStr, C.double(value)))
return checkRetcode(retcode)
}
// SetUint16 is a function to set a value of type uint16 into samples
func (instance *Instance) SetUint16(fieldName string, value uint16) error {
fieldNameCStr := C.CString(fieldName)
defer C.free(unsafe.Pointer(fieldNameCStr))
retcode := int(C.RTI_Connector_set_number_into_samples(unsafe.Pointer(instance.output.connector.native), instance.output.nameCStr, fieldNameCStr, C.double(value)))
return checkRetcode(retcode)
}
// SetUint32 is a function to set a value of type uint32 into samples
func (instance *Instance) SetUint32(fieldName string, value uint32) error {
fieldNameCStr := C.CString(fieldName)
defer C.free(unsafe.Pointer(fieldNameCStr))
retcode := int(C.RTI_Connector_set_number_into_samples(unsafe.Pointer(instance.output.connector.native), instance.output.nameCStr, fieldNameCStr, C.double(value)))
return checkRetcode(retcode)
}
// SetUint64 is a function to set a value of type uint64 into samples
func (instance *Instance) SetUint64(fieldName string, value uint64) error {
fieldNameCStr := C.CString(fieldName)
defer C.free(unsafe.Pointer(fieldNameCStr))
retcode := int(C.RTI_Connector_set_number_into_samples(unsafe.Pointer(instance.output.connector.native), instance.output.nameCStr, fieldNameCStr, C.double(value)))
return checkRetcode(retcode)
}
// SetInt8 is a function to set a value of type int8 into samples
func (instance *Instance) SetInt8(fieldName string, value int8) error {
fieldNameCStr := C.CString(fieldName)
defer C.free(unsafe.Pointer(fieldNameCStr))
retcode := int(C.RTI_Connector_set_number_into_samples(unsafe.Pointer(instance.output.connector.native), instance.output.nameCStr, fieldNameCStr, C.double(value)))
return checkRetcode(retcode)
}
// SetInt16 is a function to set a value of type int16 into samples
func (instance *Instance) SetInt16(fieldName string, value int16) error {
fieldNameCStr := C.CString(fieldName)
defer C.free(unsafe.Pointer(fieldNameCStr))
retcode := int(C.RTI_Connector_set_number_into_samples(unsafe.Pointer(instance.output.connector.native), instance.output.nameCStr, fieldNameCStr, C.double(value)))
return checkRetcode(retcode)
}
// SetInt32 is a function to set a value of type int32 into samples
func (instance *Instance) SetInt32(fieldName string, value int32) error {
fieldNameCStr := C.CString(fieldName)
defer C.free(unsafe.Pointer(fieldNameCStr))
retcode := int(C.RTI_Connector_set_number_into_samples(unsafe.Pointer(instance.output.connector.native), instance.output.nameCStr, fieldNameCStr, C.double(value)))
return checkRetcode(retcode)
}
// SetInt64 is a function to set a value of type int64 into samples
func (instance *Instance) SetInt64(fieldName string, value int64) error {
fieldNameCStr := C.CString(fieldName)
defer C.free(unsafe.Pointer(fieldNameCStr))
retcode := int(C.RTI_Connector_set_number_into_samples(unsafe.Pointer(instance.output.connector.native), instance.output.nameCStr, fieldNameCStr, C.double(value)))
return checkRetcode(retcode)
}
// SetUint is a function to set a value of type uint into samples
func (instance *Instance) SetUint(fieldName string, value uint) error {
fieldNameCStr := C.CString(fieldName)
defer C.free(unsafe.Pointer(fieldNameCStr))
retcode := int(C.RTI_Connector_set_number_into_samples(unsafe.Pointer(instance.output.connector.native), instance.output.nameCStr, fieldNameCStr, C.double(value)))
return checkRetcode(retcode)
}
// SetInt is a function to set a value of type int into samples
func (instance *Instance) SetInt(fieldName string, value int) error {
fieldNameCStr := C.CString(fieldName)
defer C.free(unsafe.Pointer(fieldNameCStr))
retcode := int(C.RTI_Connector_set_number_into_samples(unsafe.Pointer(instance.output.connector.native), instance.output.nameCStr, fieldNameCStr, C.double(value)))
return checkRetcode(retcode)
}
// SetFloat32 is a function to set a value of type float32 into samples
func (instance *Instance) SetFloat32(fieldName string, value float32) error {
fieldNameCStr := C.CString(fieldName)
defer C.free(unsafe.Pointer(fieldNameCStr))
retcode := int(C.RTI_Connector_set_number_into_samples(unsafe.Pointer(instance.output.connector.native), instance.output.nameCStr, fieldNameCStr, C.double(value)))
return checkRetcode(retcode)
}
// SetFloat64 is a function to set a value of type float64 into samples
func (instance *Instance) SetFloat64(fieldName string, value float64) error {
fieldNameCStr := C.CString(fieldName)
defer C.free(unsafe.Pointer(fieldNameCStr))
retcode := int(C.RTI_Connector_set_number_into_samples(unsafe.Pointer(instance.output.connector.native), instance.output.nameCStr, fieldNameCStr, C.double(value)))
return checkRetcode(retcode)
}
// SetString is a function that set a string to a fieldname of the samples
func (instance *Instance) SetString(fieldName, value string) error {
fieldNameCStr := C.CString(fieldName)
defer C.free(unsafe.Pointer(fieldNameCStr))
valueCStr := C.CString(value)
defer C.free(unsafe.Pointer(valueCStr))
retcode := int(C.RTI_Connector_set_string_into_samples(unsafe.Pointer(instance.output.connector.native), instance.output.nameCStr, fieldNameCStr, valueCStr))
return checkRetcode(retcode)
}
// SetByte is a function to set a byte to a fieldname of the samples
func (instance *Instance) SetByte(fieldName string, value byte) error {
fieldNameCStr := C.CString(fieldName)
defer C.free(unsafe.Pointer(fieldNameCStr))
retcode := int(C.RTI_Connector_set_number_into_samples(unsafe.Pointer(instance.output.connector.native), instance.output.nameCStr, fieldNameCStr, C.double(value)))
return checkRetcode(retcode)
}
// SetRune is a function to set rune to a fieldname of the samples
func (instance *Instance) SetRune(fieldName string, value rune) error {
fieldNameCStr := C.CString(fieldName)
defer C.free(unsafe.Pointer(fieldNameCStr))
retcode := int(C.RTI_Connector_set_number_into_samples(unsafe.Pointer(instance.output.connector.native), instance.output.nameCStr, fieldNameCStr, C.double(value)))
return checkRetcode(retcode)
}
// SetBoolean is a function to set boolean to a fieldname of the samples
func (instance *Instance) SetBoolean(fieldName string, value bool) error {
fieldNameCStr := C.CString(fieldName)
defer C.free(unsafe.Pointer(fieldNameCStr))
intValue := 0
if value {
intValue = 1
}
retcode := int(C.RTI_Connector_set_boolean_into_samples(unsafe.Pointer(instance.output.connector.native), instance.output.nameCStr, fieldNameCStr, C.int(intValue)))
return checkRetcode(retcode)
}
// SetJSON is a function to set JSON string in the form of slice of bytes into Instance
func (instance *Instance) SetJSON(blob []byte) error {
jsonCStr := C.CString(string(blob))
defer C.free(unsafe.Pointer(jsonCStr))
retcode := int(C.RTI_Connector_set_json_instance(unsafe.Pointer(instance.output.connector.native), instance.output.nameCStr, jsonCStr))
return checkRetcode(retcode)
}
// Set is a function that consumes an interface
// of multiple samples with different types and value
// TODO - think about a new name for this a function (e.g. SetType, SetFromType, FromType)
func (instance *Instance) Set(v interface{}) error {
jsonData, err := json.Marshal(v)
if err != nil {
return err
}
return instance.SetJSON(jsonData)
}