1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2024-12-05 13:24:11 +01:00
LibrePilot/flight/libraries/PyMite/vm/mem.h

139 lines
3.9 KiB
C
Raw Normal View History

/*
# This file is Copyright 2003, 2006, 2007, 2009, 2010 Dean Hall.
#
# This file is part of the PyMite VM.
# The PyMite VM is free software: you can redistribute it and/or modify
# it under the terms of the GNU GENERAL PUBLIC LICENSE Version 2.
#
# The PyMite VM is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# A copy of the GNU GENERAL PUBLIC LICENSE Version 2
# is seen in the file COPYING in this directory.
*/
#ifndef __MEM_H__
#define __MEM_H__
/**
* \file
* \brief VM Memory
*
* VM memory header.
*/
/**
* Memory Space enum.
*
* Defines the different addressable areas of the system.
*/
typedef enum PmMemSpace_e
{
MEMSPACE_RAM = 0,
MEMSPACE_PROG,
MEMSPACE_EEPROM,
MEMSPACE_SEEPROM,
MEMSPACE_OTHER0,
MEMSPACE_OTHER1,
MEMSPACE_OTHER2,
MEMSPACE_OTHER3
} PmMemSpace_t, *pPmMemSpace_t;
/**
* Returns the byte at the given address in memspace.
*
* Increments the address (just like getc and read(1))
* to make image loading work (recursive).
*
* @param memspace memory space/type
* @param paddr ptr to address
* @return byte from memory.
* paddr - points to the next byte
*/
#define mem_getByte(memspace, paddr) plat_memGetByte((memspace), (paddr))
/**
* Returns the 2-byte word at the given address in memspace.
*
* Word obtained in LITTLE ENDIAN order (per Python convention).
* afterward, addr points one byte past the word.
*
* @param memspace memory space
* @param paddr ptr to address
* @return word from memory.
* addr - points one byte past the word
*/
uint16_t mem_getWord(PmMemSpace_t memspace, uint8_t const **paddr);
/**
* Returns the 4-byte int at the given address in memspace.
*
* Int obtained in LITTLE ENDIAN order (per Python convention).
* afterward, addr points one byte past the int.
*
* @param memspace memory space
* @param paddr ptr to address
* @return int from memory.
* addr - points one byte past the word
*/
uint32_t mem_getInt(PmMemSpace_t memspace, uint8_t const **paddr);
#ifdef HAVE_FLOAT
/**
* Returns the 4-byte float at the given address in memspace.
*
* Float obtained in LITTLE ENDIAN order (per Python convention).
* afterward, addr points one byte past the float.
*
* @param memspace memory space
* @param paddr ptr to address
* @return float from memory.
* addr - points one byte past the word
*/
float mem_getFloat(PmMemSpace_t memspace, uint8_t const **paddr);
#endif /* HAVE_FLOAT */
/**
* Copies count number of bytes from src in memspace to dest in RAM.
* Leaves dest and src pointing one byte past end of the data.
*
* @param memspace memory space/type of source
* @param pdest ptr to destination address
* @param psrc ptr to source address
* @param count number of bytes to copy
* @return nothing.
* src, dest - point 1 past end of data
* @see sli_memcpy
*/
void mem_copy(PmMemSpace_t memspace,
uint8_t **pdest, uint8_t const **psrc, uint16_t count);
/**
* Returns the number of bytes in the C string pointed to by pstr.
* Does not modify pstr
*
* @param memspace memory space/type of source
* @param pstr ptr to source C string
* @return Number of bytes in the string.
*/
uint16_t mem_getStringLength(PmMemSpace_t memspace,
uint8_t const *const pstr);
/**
* Compares a byte array in RAM to a byte array in the given memory space
*
* @param cname Pointer to byte array in RAM
* @param cnamelen Length of byte array to compare
* @param memspace Memory space of other byte array
* @param paddr Pointer to address of other byte array
* @return PM_RET_OK if all bytes in both arrays match; PM_RET_NO otherwise
*/
PmReturn_t mem_cmpn(uint8_t *cname, uint8_t cnamelen, PmMemSpace_t memspace,
uint8_t const **paddr);
#endif /* __MEM_H__ */