class Bitmap(): def __init__(self): self.shm = SharedMemory(None, flags = IPC_EXCL|IPC_CREAT, mode= 0o600, size = bitmap_size, init_character = b'\x00') # to show we are alive self.shm.write('\x01') # print(self.bytes()) # self.shm.attach() def get_key(self): return self.shm.key def get_id(self): return self.shm.id def get_size(self): return bitmap_size def bytes(self): buffer = self.shm.read(bitmap_size) n = 0 for i in range(bitmap_size): if buffer[i] != 0: n += 1 return n def has_new_bits(self): ret = 0 buffer = self.shm.read(bitmap_size) for i in range(bitmap_size): if buffer[i] and buffer[i] & virgin_bits[i]: virgin_bits[i] &= ~buffer[i] if virgin_bits[i] == 0xff: ret = 2 elif ret < 1: ret = 1 return ret def release(self): self.shm.remove()
def run(self): time.sleep(3) shared_mem = SharedMemory(6789, flags=sysv_ipc.IPC_CREAT, size=sysv_ipc.PAGE_SIZE, init_character='\0') try: while self.work: for i in range( len(stations) ): # convert position to integer then string and fill with 4 zero to align values shared_mem.write( ' '.join( str(pos).split(".")[0].zfill(4) for pos in stations[i].params["position"]) + ' ', i * 15) else: print(shared_mem.read(45)) shared_mem.remove() except: shared_mem.remove()
yawMem = SharedMemory(None, IPC_CREX) # Store the shared memory locations to a file with open('/var/tmpflyar/raw_shared_memory_keys.flyar', 'wb') as f: sharedMemoryKeys = '{},{},{}\n'.format(rollMem.key, pitchMem.key, yawMem.key) logging.info('[ARDUINO-READER] Storing the following shared memory keys to /var/tmpflyar/raw_shared_memory_keys.flyar: {}'.format(sharedMemoryKeys)) f.write(str.encode(sharedMemoryKeys)) while True: # Send a '1' byte to the Arduino to indicate that we want data ser.write(b'1') # Now that the Arduino should now be sending back data, read it in data = ser.readline().decode('utf-8') print(data) # Process the data and store it in shared memory orien = data.strip().split(',') yawMem.write(padString("{0:.4f}".format(float(orien[0]))).encode()) pitchMem.write(padString("{0:.4f}".format(float(orien[1]))).encode()) rollMem.write(padString("{0:.4f}".format(float(orien[2]))).encode()) gc.collect() system('clear') # Let's do it again! # endwhile # We should never get here unless it breaks out of an infinite loop somehow...
sense = SenseHat() # Set up the necessary shared memory locations rollMem = SharedMemory(None, IPC_CREX) pitchMem = SharedMemory(None, IPC_CREX) yawMem = SharedMemory(None, IPC_CREX) currentTime = time() # Store the shared memory locations to a file with open('/var/tmpflyar/raw_shared_memory_keys.flyar', 'wb') as f: sharedMemoryKeys = '{},{},{}\n'.format(rollMem.key, pitchMem.key, yawMem.key) logging.info(str(currentTime) + ':[SENSE-READER] Storing the following shared memory keys to /var/tmpflyar/raw_shared_memory_keys.flyar: {}'.format(sharedMemoryKeys)) f.write(str.encode(sharedMemoryKeys)) while True: # Process the data and store it in shared memory orien = sense.get_orientation_degrees() rollMem.write(padString("{0:.4f}".format(orien['roll'])).encode()) pitchMem.write(padString("{0:.4f}".format(orien['pitch'])).encode()) yawMem.write(padString("{0:.4f}".format(orien['yaw'])).encode()) gc.collect() # Let's do it again! # endwhile # We should never get here unless it breaks out of an infinite loop somehow...
# Calculate the distance traveled by calculating velocity and then position currentTime = time() timeDelta = currentTime - previousTime positionChangeX = filteredAcceleration[0] * timeDelta * timeDelta positionChangeY = filteredAcceleration[1] * timeDelta * timeDelta positionChangeZ = filteredAcceleration[2] * timeDelta * timeDelta # Update the data previousTime = currentTime xPosition += positionChangeX yPosition += positionChangeY zPosition += positionChangeZ # Store the data in the calculated shared memory xPosMem.write(padString("{0:.4f}".format(xPosition)).encode()) yPosMem.write(padString("{0:.4f}".format(yPosition)).encode()) zPosMem.write(padString("{0:.4f}".format(zPosition)).encode()) rollDegMemTo.write(padString("{0:.4f}".format(newRollDeg)).encode()) pitchDegMemTo.write(padString("{0:.4f}".format(newPitchDeg)).encode()) yawDegMemTo.write(padString("{0:.4f}".format(newYawDeg)).encode()) previousRollDeg = rollDeg previousRollRad = rollRad previousPitchDeg = pitchDeg previousPitchRad = pitchRad previousYawDeg = yawDeg previousYawRad = yawRad del positionChangeX del positionChangeY