def __init__(self, data_area_size = DEFAULT_DATA_AREA_SIZE, code_area_size = DEFAULT_CODE_AREA_SIZE, max_threads = DEFAULT_MAX_THREADS ): self.mailbox = MailBox() self.mailbox.enable_qpu(1) self.memory = None try: self.data_area_size = data_area_size self.code_area_size = code_area_size self.max_threads = max_threads self.code_area_base = 0 self.data_area_base = self.code_area_base + self.code_area_size self.msg_area_base = self.data_area_base + self.data_area_size self.code_pos = self.code_area_base self.data_pos = self.data_area_base total = data_area_size + code_area_size + max_threads * 64 self.memory = Memory(self.mailbox, total) self.message = Array( address = self.memory.baseaddr + self.msg_area_base, buffer = self.memory.base, offset = self.msg_area_base, shape = (self.max_threads, 2), dtype = np.uint32) except: if self.memory: self.memory.close() self.mailbox.enable_qpu(0) self.mailbox.close() raise
def __init__(self, data_area_size = DEFAULT_DATA_AREA_SIZE, code_area_size = DEFAULT_CODE_AREA_SIZE, max_threads = DEFAULT_MAX_THREADS, cache_mode = rpi_vcsm.CACHE_NONE ): self.mailbox = MailBox() self.mailbox.enable_qpu(1) self.vcsm = rpi_vcsm.VCSM.VCSM() if cache_mode in [rpi_vcsm.CACHE_HOST, rpi_vcsm.CACHE_BOTH]: self.is_cacheop_needed = True else: self.is_cacheop_needed = False self.max_threads = max_threads message_area_size = max_threads * 2 * 4 try: # Non-cached memory area for code and message. self.ctlmem = Mempool({'message': message_area_size, 'code': code_area_size}, vcsm = self.vcsm, cache_mode = rpi_vcsm.CACHE_NONE) # Memory area for uniforms and data with cache mode cache_mode. self.datmem = Mempool({'data': data_area_size}, vcsm = self.vcsm, cache_mode = cache_mode) self.message = self.ctlmem.alloc('message', shape = (self.max_threads, 2), dtype = np.uint32) except: self.close() raise
from videocore.mailbox import MailBox with MailBox() as mb: print('firmware revision: %x' % mb.get_firmware_revision()) print('board model: %x' % mb.get_board_model()) print('board revision: %x' % mb.get_board_revision()) print('board serial: %016x' % mb.get_board_serial())