Skip to content

Commit 0d4518e

Browse files
committed
src files
1 parent c2c37aa commit 0d4518e

35 files changed

+346
-0
lines changed

src/std_msgs/Bool.msg

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
bool data

src/std_msgs/Byte.msg

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
byte data

src/std_msgs/ByteMultiArray.msg

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Please look at the MultiArrayLayout message definition for
2+
# documentation on all multiarrays.
3+
4+
MultiArrayLayout layout # specification of data layout
5+
byte[] data # array of data
6+

src/std_msgs/Char.msg

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
char data

src/std_msgs/ColorRGBA.msg

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
float32 r
2+
float32 g
3+
float32 b
4+
float32 a

src/std_msgs/Duration.msg

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
duration data

src/std_msgs/Empty.msg

Whitespace-only changes.

src/std_msgs/Float32.msg

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
float32 data

src/std_msgs/Float32MultiArray.msg

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Please look at the MultiArrayLayout message definition for
2+
# documentation on all multiarrays.
3+
4+
MultiArrayLayout layout # specification of data layout
5+
float32[] data # array of data
6+

src/std_msgs/Float64.msg

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
float64 data

src/std_msgs/Float64MultiArray.msg

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Please look at the MultiArrayLayout message definition for
2+
# documentation on all multiarrays.
3+
4+
MultiArrayLayout layout # specification of data layout
5+
float64[] data # array of data
6+

src/std_msgs/Header.msg

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Standard metadata for higher-level stamped data types.
2+
# This is generally used to communicate timestamped data
3+
# in a particular coordinate frame.
4+
#
5+
# sequence ID: consecutively increasing ID
6+
uint32 seq
7+
#Two-integer timestamp that is expressed as:
8+
# * stamp.sec: seconds (stamp_secs) since epoch (in Python the variable is called 'secs')
9+
# * stamp.nsec: nanoseconds since stamp_secs (in Python the variable is called 'nsecs')
10+
# time-handling sugar is provided by the client library
11+
time stamp
12+
#Frame this data is associated with
13+
string frame_id

src/std_msgs/Int16.msg

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
int16 data

src/std_msgs/Int16MultiArray.msg

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Please look at the MultiArrayLayout message definition for
2+
# documentation on all multiarrays.
3+
4+
MultiArrayLayout layout # specification of data layout
5+
int16[] data # array of data
6+

src/std_msgs/Int32.msg

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
int32 data

src/std_msgs/Int32MultiArray.msg

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Please look at the MultiArrayLayout message definition for
2+
# documentation on all multiarrays.
3+
4+
MultiArrayLayout layout # specification of data layout
5+
int32[] data # array of data
6+

src/std_msgs/Int64.msg

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
int64 data

src/std_msgs/Int64MultiArray.msg

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Please look at the MultiArrayLayout message definition for
2+
# documentation on all multiarrays.
3+
4+
MultiArrayLayout layout # specification of data layout
5+
int64[] data # array of data
6+

src/std_msgs/Int8.msg

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
int8 data

src/std_msgs/Int8MultiArray.msg

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Please look at the MultiArrayLayout message definition for
2+
# documentation on all multiarrays.
3+
4+
MultiArrayLayout layout # specification of data layout
5+
int8[] data # array of data
6+

src/std_msgs/MultiArrayDimension.msg

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
string label # label of given dimension
2+
uint32 size # size of given dimension (in type units)
3+
uint32 stride # stride of given dimension

src/std_msgs/MultiArrayLayout.msg

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# The multiarray declares a generic multi-dimensional array of a
2+
# particular data type. Dimensions are ordered from outer most
3+
# to inner most.
4+
5+
MultiArrayDimension[] dim # Array of dimension properties
6+
uint32 data_offset # padding elements at front of data
7+
8+
# Accessors should ALWAYS be written in terms of dimension stride
9+
# and specified outer-most dimension first.
10+
#
11+
# multiarray(i,j,k) = data[data_offset + dim_stride[1]*i + dim_stride[2]*j + k]
12+
#
13+
# A standard, 3-channel 640x480 image with interleaved color channels
14+
# would be specified as:
15+
#
16+
# dim[0].label = "height"
17+
# dim[0].size = 480
18+
# dim[0].stride = 3*640*480 = 921600 (note dim[0] stride is just size of image)
19+
# dim[1].label = "width"
20+
# dim[1].size = 640
21+
# dim[1].stride = 3*640 = 1920
22+
# dim[2].label = "channel"
23+
# dim[2].size = 3
24+
# dim[2].stride = 3
25+
#
26+
# multiarray(i,j,k) refers to the ith row, jth column, and kth channel.

src/std_msgs/String.msg

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
string data

src/std_msgs/Time.msg

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
time data

src/std_msgs/UInt16.msg

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uint16 data

src/std_msgs/UInt16MultiArray.msg

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Please look at the MultiArrayLayout message definition for
2+
# documentation on all multiarrays.
3+
4+
MultiArrayLayout layout # specification of data layout
5+
uint16[] data # array of data
6+

src/std_msgs/UInt32.msg

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uint32 data

src/std_msgs/UInt32MultiArray.msg

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Please look at the MultiArrayLayout message definition for
2+
# documentation on all multiarrays.
3+
4+
MultiArrayLayout layout # specification of data layout
5+
uint32[] data # array of data
6+

src/std_msgs/UInt64.msg

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uint64 data

src/std_msgs/UInt64MultiArray.msg

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Please look at the MultiArrayLayout message definition for
2+
# documentation on all multiarrays.
3+
4+
MultiArrayLayout layout # specification of data layout
5+
uint64[] data # array of data
6+

src/std_msgs/UInt8.msg

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uint8 data

src/std_msgs/UInt8MultiArray.msg

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Please look at the MultiArrayLayout message definition for
2+
# documentation on all multiarrays.
3+
4+
MultiArrayLayout layout # specification of data layout
5+
uint8[] data # array of data
6+

src/ugenpy/__init__.py

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
from . import md5
2+
from . import message

src/ugenpy/md5.py

+84
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
"""
2+
Copyright [2018] [Mauro Riva <lemariva@mail.com> <lemariva.com>]
3+
Licensed under the Apache License, Version 2.0 (the "License");
4+
you may not use this file except in compliance with the License.
5+
You may obtain a copy of the License at
6+
http://www.apache.org/licenses/LICENSE-2.0
7+
Unless required by applicable law or agreed to in writing, software
8+
distributed under the License is distributed on an "AS IS" BASIS,
9+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10+
See the License for the specific language governing permissions and
11+
limitations under the License.
12+
The above copyright notice and this permission notice shall be
13+
included in all copies or substantial portions of the Software.
14+
15+
16+
based on https://rosettacode.org/wiki/MD5/Implementation#Python
17+
adapted for MicroPython
18+
"""
19+
20+
rotate_amounts = [7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22,
21+
5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20,
22+
4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23,
23+
6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]
24+
25+
#constants = [int(abs(math.sin(i+1)) * 2**32) & 0xFFFFFFFF for i in range(64)] # precision is not enough
26+
constants = [3614090360, 3905402710, 606105819, 3250441966, 4118548399, 1200080426, 2821735955, 4249261313,
27+
1770035416, 2336552879, 4294925233, 2304563134, 1804603682, 4254626195, 2792965006, 1236535329,
28+
4129170786, 3225465664, 643717713, 3921069994, 3593408605, 38016083, 3634488961, 3889429448,
29+
568446438, 3275163606, 4107603335, 1163531501, 2850285829, 4243563512, 1735328473, 2368359562,
30+
4294588738, 2272392833, 1839030562, 4259657740, 2763975236, 1272893353, 4139469664, 3200236656,
31+
681279174, 3936430074, 3572445317, 76029189, 3654602809, 3873151461, 530742520, 3299628645,
32+
4096336452, 1126891415, 2878612391, 4237533241, 1700485571, 2399980690, 4293915773, 2240044497,
33+
1873313359, 4264355552, 2734768916, 1309151649, 4149444226, 3174756917, 718787259, 3951481745]
34+
35+
init_values = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476]
36+
37+
functions = 16*[lambda b, c, d: (b & c) | (~b & d)] + \
38+
16*[lambda b, c, d: (d & b) | (~d & c)] + \
39+
16*[lambda b, c, d: b ^ c ^ d] + \
40+
16*[lambda b, c, d: c ^ (b | ~d)]
41+
42+
index_functions = 16*[lambda i: i] + \
43+
16*[lambda i: (5*i + 1)%16] + \
44+
16*[lambda i: (3*i + 5)%16] + \
45+
16*[lambda i: (7*i)%16]
46+
47+
def left_rotate(x, amount):
48+
x &= 0xFFFFFFFF
49+
return ((x<<amount) | (x>>(32-amount))) & 0xFFFFFFFF
50+
51+
def md5(message):
52+
message = bytearray(message) #copy our input into a mutable buffer
53+
orig_len_in_bits = (8 * len(message)) & 0xffffffffffffffff
54+
message.append(0x80)
55+
while len(message)%64 != 56:
56+
message.append(0)
57+
message += orig_len_in_bits.to_bytes(8, 'little')
58+
#print (message)
59+
60+
hash_pieces = init_values[:]
61+
62+
for chunk_ofst in range(0, len(message), 64):
63+
a, b, c, d = hash_pieces
64+
chunk = message[chunk_ofst:chunk_ofst+64]
65+
#print(a, b, c, d)
66+
for i in range(64):
67+
f = functions[i](b, c, d)
68+
g = index_functions[i](i)
69+
#print(constants[i])
70+
to_rotate = a + f + constants[i] + int.from_bytes(chunk[4*g:4*g+4], 'little')
71+
new_b = (b + left_rotate(to_rotate, rotate_amounts[i])) & 0xFFFFFFFF
72+
a, b, c, d = d, new_b, b, c
73+
#print(to_rotate)
74+
75+
for i, val in enumerate([a, b, c, d]):
76+
hash_pieces[i] += val
77+
hash_pieces[i] &= 0xFFFFFFFF
78+
return sum(x<<(32*i) for i, x in enumerate(hash_pieces))
79+
80+
def digest(message):
81+
digest = md5(message)
82+
raw = digest.to_bytes(16, 'little')
83+
return '{:032x}'.format(int.from_bytes(raw, 'big'))
84+
#return raw

src/ugenpy/message.py

+132
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
from . import md5
2+
3+
class Message(object):
4+
5+
__slots__ = ['_connection_header']
6+
7+
def __init__(self, *args, **kwds):
8+
9+
if args and kwds:
10+
raise TypeError('Message constructor may only use args OR keywords, not both')
11+
if args:
12+
if len(args) != len(self.__slots__):
13+
raise TypeError('Invalid number of arguments, args should be %s' % str(self.__slots__) + ' args are' + str(args))
14+
for i, k in enumerate(self.__slots__):
15+
setattr(self, k, args[i])
16+
else:
17+
# validate kwds
18+
for k, v in kwds.items():
19+
if k not in self.__slots__:
20+
raise AttributeError('%s is not an attribute of %s' % (k, self.__class__.__name__))
21+
22+
for k in self.__slots__:
23+
if k in kwds:
24+
setattr(self, k, kwds[k])
25+
else:
26+
setattr(self, k, None)
27+
28+
class MessageGenerator(object):
29+
30+
def __init__(self, addr):
31+
32+
self.addr=addr
33+
34+
def create_message(self):
35+
def_types={'bool':'<B', 'byte':'<b', 'char':'<B', 'float32':'<f', 'float64':'<d', 'int8':'<b', 'int16':'<h', 'int32':'<i',
36+
'int64':'<q', 'string':'<I%ss', 'uint8':'<B', 'uint16':'<H', 'uint32':'<I', 'uint64':'<Q'}
37+
38+
#getting script name and dir
39+
script_addr = self.addr.split('/')[0]
40+
script_name= self.addr.split('/')[1].split('.')[0]
41+
42+
#script created
43+
script = open("{}/_{}.py".format(script_addr,script_name), 'w')
44+
#import input
45+
script.write('import ustruct as struct\nfrom ugenpy.message import Message\n')
46+
47+
#file with types and varibles is opened
48+
f = open(self.addr, 'r')
49+
md5string=''
50+
msgfile=f.read()
51+
data=msgfile.split('\n')
52+
md5string=data[0]
53+
54+
#md5 is calculated
55+
for i in range(1,len(data)-1):
56+
md5string+='\n{}'.format(data[i])
57+
58+
md5hash=md5.digest(md5string)
59+
classdef="""class {}(Message):
60+
_md5sum = "{}"
61+
_type = "{}"
62+
_has_header = False
63+
_full_text = '''{}'''\n""".format(script_name, md5hash, "{}/{}".format(script_addr,script_name), md5string)
64+
65+
#first part is written
66+
script.write(classdef)
67+
68+
#slots part
69+
slots="['{}'".format(data[0].split(' ')[1])
70+
for i in range(1,len(data)-1):
71+
slots+=",'{}'".format(data[i].split(' ')[1])
72+
slots+="]"
73+
74+
#slots type part
75+
slots_type="['{}'".format(data[0].split(' ')[0])
76+
for i in range(1,len(data)-1):
77+
slots_type+=",'{}'".format(data[i].split(' ')[0])
78+
slots_type+="]"
79+
80+
#slots types and args to define self attributes
81+
initdef="""
82+
__slots__ = {}
83+
_slots_types = {}
84+
85+
def __init__(self, *args, **kwds):
86+
87+
if args or kwds:
88+
super({}, self).__init__(*args, **kwds)\n""".format(slots, slots_type, script_name)
89+
script.write(initdef)
90+
print(len(slots))
91+
print(slots_type)
92+
93+
94+
for i in range(0,len(data)-1):
95+
temp=[data[i].split(' ')[0],data[i].split(' ')[1]]
96+
if 'bool' in temp[0]:
97+
val='False'
98+
elif 'string' in temp[0]:
99+
val="''"
100+
elif 'float' in temp[0]:
101+
val='0.'
102+
else:
103+
val='0'
104+
105+
106+
script.write("""
107+
if self.{} is None:
108+
self.{} = {}""".format(temp[0], temp[0], val))
109+
110+
script.write("""
111+
112+
def _get_types(self):
113+
return self._slot_types
114+
115+
def serialize(self, buff):
116+
try:""")
117+
118+
for i in range(0,len(data)-1):
119+
temp=data[i].split(' ')[1]
120+
if 'string' in data[i].split(' ')[0]:
121+
script.write("""
122+
buff.write(struct.pack('<I%ss'%len(self.{}),len(self.{}),self.{}))""".format(temp, temp, temp))
123+
124+
else:
125+
script.write("""
126+
buff.write(struct.pack('{}',self.{}))""".format(def_types.get(data[i].split(' ')[0]), data[i].split(' ')[1]))
127+
128+
script.write("""
129+
except Exception as e:
130+
print(e)""")
131+
132+
script.close()

0 commit comments

Comments
 (0)