def _handleReadRequest(self, request): requestHeader = request.getHeader() words = IPbusHeader.getWords(requestHeader) baseAddr = request.getBody()[0] chipsLog.debug("Read requested on Addr=0x" + uInt32HexStr(baseAddr)) # Response header is the request header but with the Info Code field changed to INFO_CODE_RESPONSE responseHeader = IPbusHeader.updateInfoCode( requestHeader, IPbusHeader.INFO_CODE_RESPONSE) # The (baseAddr & 0xffffffff) forces baseAddr to be in unsigned form (i.e. 0xfffffffc, say, rather than -4) if ( baseAddr & 0xffffffff ) == 0xffffffff: # A read on this register is a Dummy Hardware Reset Request. chipsLog.info( "** Dummy Hardware reset request received! Zeroing all registers. **" ) self._registers.clear() responseBody = [] appendToResponseBody = responseBody.append # This is for a speed optimisation for offset in range(words): currentReg = baseAddr + offset # Create these registers if they don't already exist. if currentReg not in self._registers: self._registers[currentReg] = 0 appendToResponseBody(self._registers[currentReg]) return TransactionElement.makeFromHeaderAndBody( responseHeader, responseBody)
def _handleWriteRequest(self, request): requestHeader = request.getHeader() words = IPbusHeader.getWords(requestHeader) requestBody = request.getBody() baseAddr = requestBody[0] chipsLog.debug("Write requested on Addr=0x" + uInt32HexStr(baseAddr)) # Response header is the request header with direction bit changed responseHeader = IPbusHeader.updateDirection(requestHeader, 1) for offset in range(words): currentReg = baseAddr + offset self._registers[currentReg] = requestBody[offset + 1] return TransactionElement.makeFromHeaderAndBody(responseHeader)
def _handleWriteRequest(self, request): requestHeader = request.getHeader() words = IPbusHeader.getWords(requestHeader) requestBody = request.getBody() baseAddr = requestBody[0] chipsLog.debug("Write requested on Addr=0x" + uInt32HexStr(baseAddr)) # Response header is the request header but with the Info Code field changed to INFO_CODE_RESPONSE responseHeader = IPbusHeader.updateInfoCode(requestHeader, IPbusHeader.INFO_CODE_RESPONSE) for offset in range(words): currentReg = baseAddr + offset self._registers[currentReg] = requestBody[offset + 1] return TransactionElement.makeFromHeaderAndBody(responseHeader)
def _handleWriteRequest(self, request): requestHeader = request.getHeader() words = IPbusHeader.getWords(requestHeader) requestBody = request.getBody() baseAddr = requestBody[0] chipsLog.debug("Write requested on Addr=0x" + uInt32HexStr(baseAddr)) # Response header is the request header but with the Info Code field changed to INFO_CODE_RESPONSE responseHeader = IPbusHeader.updateInfoCode( requestHeader, IPbusHeader.INFO_CODE_RESPONSE) for offset in range(words): currentReg = baseAddr + offset self._registers[currentReg] = requestBody[offset + 1] return TransactionElement.makeFromHeaderAndBody(responseHeader)
def _handleFifoReadRequest(self, request): requestHeader = request.getHeader() words = IPbusHeader.getWords(requestHeader) fifoAddr = request.getBody()[0] chipsLog.debug("FIFO read requested on Addr=0x" + uInt32HexStr(fifoAddr)) # Response header is the request header with direction bit changed responseHeader = IPbusHeader.updateDirection(requestHeader, 1) # Create the register if they don't already exist in our memory space if fifoAddr not in self._registers: self._registers[fifoAddr] = 0 # Obviously we don't really have a FIFO, so we'll just have to return the value stored # at the FIFO's address many times... value = self._registers[fifoAddr] responseBody = [value for iReads in range(words)] return TransactionElement.makeFromHeaderAndBody(responseHeader, responseBody)
def _handleFifoReadRequest(self, request): requestHeader = request.getHeader() words = IPbusHeader.getWords(requestHeader) fifoAddr = request.getBody()[0] chipsLog.debug("FIFO read requested on Addr=0x" + uInt32HexStr(fifoAddr)) # Response header is the request header but with the Info Code field changed to INFO_CODE_RESPONSE responseHeader = IPbusHeader.updateInfoCode( requestHeader, IPbusHeader.INFO_CODE_RESPONSE) # Create the register if they don't already exist in our memory space if fifoAddr not in self._registers: self._registers[fifoAddr] = 0 # Obviously we don't really have a FIFO, so we'll just have to return the value stored # at the FIFO's address many times... value = self._registers[fifoAddr] responseBody = [value for iReads in range(words)] return TransactionElement.makeFromHeaderAndBody( responseHeader, responseBody)
def _handleReadRequest(self, request): requestHeader = request.getHeader() words = IPbusHeader.getWords(requestHeader) baseAddr = request.getBody()[0] chipsLog.debug("Read requested on Addr=0x" + uInt32HexStr(baseAddr)) # Response header is the request header with direction bit changed responseHeader = IPbusHeader.updateDirection(requestHeader, 1) # The (baseAddr & 0xffffffff) forces baseAddr to be in unsigned form (i.e. 0xfffffffc, say, rather than -4) if (baseAddr & 0xffffffff) == 0xffffffff: # A read on this register is a Dummy Hardware Reset Request. chipsLog.info("** Dummy Hardware reset request received! Zeroing all registers. **") self._registers.clear() responseBody = [] appendToResponseBody = responseBody.append # This is for a speed optimisation for offset in range(words): currentReg = baseAddr + offset # Create these registers if they don't already exist. if currentReg not in self._registers: self._registers[currentReg] = 0 appendToResponseBody(self._registers[currentReg]) return TransactionElement.makeFromHeaderAndBody(responseHeader, responseBody)