Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.04 KB | None | 0 0
  1. #import socket
  2. from socket import *
  3. #import pandas as pd
  4. import os
  5. import struct
  6.  
  7. import sys
  8. #import numpy # Import numpy
  9. #import matplotlib.pyplot as plt #import matplotlib library
  10. from drawnow import *
  11.  
  12. encoder = []
  13.  
  14. #host = socket.gethostbyname(socket.gethostbyname())
  15. def sendeth(src, dst, eth_type, payload, interface = 'lo'):
  16.  
  17. s = socket(AF_PACKET, SOCK_RAW)
  18. s.bind((interface, 0))
  19. return s.send(src + dst + eth_type + payload)
  20.  
  21. #s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
  22.  
  23. def getData():
  24. dir_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))
  25. dat = pd.read_csv(dir_path + '/randomdata.csv')
  26. return 0
  27.  
  28. #def sendeth(src_mac, payload):
  29. def sendByteRequested(srcMac, instruction, int):
  30. #Src mac in integer
  31. #dstMac may/should be a program constant
  32. #instruction is single byte 0x1, 0x2, 0x3 or 0x4
  33. #payload is char array
  34.  
  35. src = "\x00\x00\x00\x00\x00" + chr(srcMac)
  36.  
  37. #dstMac = "\x89\x34\x55\xEF\xFE\x12"
  38.  
  39.  
  40. s.send(dstMac + src + "\x88\xB5" + instruction + bytearray(struct.pack("!c",chr(int))))
  41. def sendInt(srcMac, instruction, int):
  42. src = "\x00\x00\x00\x00\x00" + chr(srcMac)
  43. s.send(dstMac + src + "\x88\xB5" + instruction + bytearray(struct.pack("!i",int)))
  44. def sendPacket(srcMac, instruction, payload):
  45. #Src mac in integer
  46. #dstMac may/should be a program constant
  47. #instruction is single byte 0x1, 0x2, 0x3 or 0x4
  48. #payload is char array
  49. src = "\x00\x00\x00\x00\x00" + str(srcMac)
  50.  
  51. src = "\x00\x00\x00\x00\x00" + chr(srcMac)
  52.  
  53. #dstMac = "\x00\x0c\x29\x8F\xE0\x19"
  54.  
  55.  
  56. s.send(dstMac + src + "\x88\xB5" + instruction + bytearray(struct.pack("f",payload)))
  57. def sendPindriverPacket(srcMac, votlage, current, temperature):
  58. s.send( dstMac + "\x00\x00\x00\x00\x00" + chr(srcMac) + "\x88\xB5" + "\x04" + bytearray(struct.pack("=f", votlage)) + bytearray(struct.pack("=f", current)) + bytearray(struct.pack("=f", temperature)))
  59.  
  60.  
  61. def receiveHandler():
  62. #dstMac = "\x00\x25\x99\x03\x00\x06"
  63.  
  64. packet = s.recvfrom(1024)
  65. packet = packet[0]
  66. eth_length = 15
  67. eth_header = packet[:eth_length]
  68. eth = struct.unpack('!6s6sHc', eth_header)
  69.  
  70. eth_protocol = eth[2]
  71. instruction = eth[3]
  72. instruction = ord(instruction)
  73. destMac = eth[0]
  74. recevingMacIndex = ord(destMac[5])
  75. #print(ord(destMac[5]))
  76. print(eth_protocol)
  77. #print(':'.join(x.encode('hex') for x in eth[1]))
  78. #print((instruction))
  79.  
  80.  
  81. if(eth_protocol == 34997):
  82. if (instruction == 1):
  83. print("1 instruction received")
  84. sendByteRequested(recevingMacIndex, "\x01", 10)
  85.  
  86. elif(instruction == 2):
  87. #what do i do now?
  88. print("2 instruction received")
  89. #print(len(packet[eth_length:eth_length+4]))
  90. data = struct.unpack('i', packet[eth_length:eth_length+4])
  91. data2 = struct.unpack('!i', packet[eth_length:eth_length+4])
  92. print("Offset: ", data[0])
  93. sendInt(recevingMacIndex, "\x02", data2[0])
  94.  
  95. elif(instruction == 3):
  96. print("3 instruction received")
  97. index[recevingMacIndex] = 1
  98. elif(instruction == 4):
  99. print(len(packet))
  100. if (len(packet)>=60):
  101. data = struct.unpack_from('=ffffffff', packet[eth_length:eth_length+60])
  102. voltage = data[0]
  103. current = data[1]
  104. mode = data[2]
  105. print('time: ', data[0])
  106. print('Servo: ', data[1])
  107. print('Smooth servo: ', data[2])
  108. print('LVDT', data[3])
  109.  
  110. print('Encoder: ', data[4])
  111. print('Winch', data[5])
  112. print('Brake Sensor: ', data[6])
  113. print('Pressure: ', data[7])
  114.  
  115. # encodervals.append(data[10])
  116. # brakePressure.append(data[7])
  117. # global cnt
  118. # cnt=cnt+1
  119. # if(cnt>50): #If you have 50 or more points, delete the first one from the array
  120. # encodervals.pop(0) #This allows us to just see the last 50 data points
  121. # brakePressure.pop(0)
  122. # drawnow(makeFig) #Call drawnow to update our live graph
  123. # plt.pause(.000001) #Pause Briefly. Important to keep drawnow from crashing
  124.  
  125. #sendPindriverPacket(1,0, -0.03, 789.0)
  126. #sendPindriverPacket(2, 0, data[4])
  127.  
  128.  
  129.  
  130.  
  131. #print(packet[:eht_length+1])
  132. # print(':'.join(x.encode('hex') for x in packet[:eht_length+2]))
  133. # if (len(packet) == 15 ): #only instruction
  134. # instruction = struct.unpack('!c', packet[eth_length:])
  135. # print(instruction[0])
  136. # elif (len(packet) > 15):
  137. # print(len(packet))
  138. # data = struct.unpack('!cfff', packet)
  139. # #print(hex(struct.unpack()))
  140. #if (eth_protocol == 34997):
  141. #print(eth[3])
  142. # def makeFig(): #Create a function that makes our desired plot
  143. # plt.ylim(-5,5) #Set y min and max values
  144. # plt.title('My Live Streaming Sensor Data') #Plot the title
  145. # plt.grid(True) #Turn the grid on
  146. # plt.ylabel('Rotation') #Set ylabels
  147. # plt.plot(encodervals, 'ro-', label='rotation F') #plot the temperature
  148. # plt.legend(loc='upper left') #plot the legend
  149. # plt2=plt.twinx() #Create a second y axis
  150. # plt.ylim(0,200) #Set limits of second y axis- adjust to readings you are getting
  151. # plt2.plot(brakePressure, 'b^-', label='Pressure (Bars)') #plot pressure data
  152. # plt2.set_ylabel('Pressrue (Pa)') #label second y axis
  153. # plt2.ticklabel_format(useOffset=False) #Force matplotlib to NOT autoscale y axis
  154. # plt2.legend(loc='upper right') #plot the legend
  155.  
  156.  
  157. def float_to_hex(f):
  158.  
  159. #not used function
  160. return hex(struct.unpack('<I', struct.pack('<f', f))[0])
  161. if __name__ == "__main__":
  162. global dstMac
  163. global index
  164. index = []
  165. encodervals = []
  166. brakePressure = []
  167. plt.ion()
  168. global cnt
  169. cnt = 0
  170.  
  171. dstMac = "\x00\x25\x99\x03\x00\x06"
  172.  
  173.  
  174. interface = 'ens33'
  175. s = socket(AF_PACKET, SOCK_RAW)
  176. s.bind((interface, 3))
  177. #sendPacket(3,0x03, 1.3)
  178. #sendPindriverPacket(1,2.2,0,50)
  179. while True:
  180. receiveHandler()
  181.  
  182.  
  183. #sendInt(2, "\x02", 10)
  184. #sendeth("\x12\x34\x56\x78\xBE\xEF","\x89\x34\x55\xEF\xFE\x12", "\xF1\x12","hello")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement