Пример #1
0
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()
Пример #2
0
    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()
Пример #3
0
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...
Пример #4
0

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...
Пример #5
0
    # 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