diff options
Diffstat (limited to 'drivers/staging/epl/EplObd.c')
-rw-r--r-- | drivers/staging/epl/EplObd.c | 3192 |
1 files changed, 0 insertions, 3192 deletions
diff --git a/drivers/staging/epl/EplObd.c b/drivers/staging/epl/EplObd.c deleted file mode 100644 index 1e463234d81e..000000000000 --- a/drivers/staging/epl/EplObd.c +++ /dev/null @@ -1,3192 +0,0 @@ -/**************************************************************************** - - (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29 - www.systec-electronic.com - - Project: openPOWERLINK - - Description: source file for api function of EplOBD-Module - - License: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. Neither the name of SYSTEC electronic GmbH nor the names of its - contributors may be used to endorse or promote products derived - from this software without prior written permission. For written - permission, please contact info@systec-electronic.com. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - - Severability Clause: - - If a provision of this License is or becomes illegal, invalid or - unenforceable in any jurisdiction, that shall not affect: - 1. the validity or enforceability in that jurisdiction of any other - provision of this License; or - 2. the validity or enforceability in other jurisdictions of that or - any other provision of this License. - - ------------------------------------------------------------------------- - - $RCSfile: EplObd.c,v $ - - $Author: D.Krueger $ - - $Revision: 1.12 $ $Date: 2008/10/17 15:32:32 $ - - $State: Exp $ - - Build Environment: - Microsoft VC7 - - ------------------------------------------------------------------------- - - Revision History: - - 2006/06/02 k.t.: start of the implementation, version 1.00 - ->based on CANopen OBD-Modul - -****************************************************************************/ - -#include "EplInc.h" -#include "kernel/EplObdk.h" // function prototyps of the EplOBD-Modul - -#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDK)) != 0) - -/***************************************************************************/ -/* */ -/* */ -/* G L O B A L D E F I N I T I O N S */ -/* */ -/* */ -/***************************************************************************/ - -//--------------------------------------------------------------------------- -// const defines -//--------------------------------------------------------------------------- - -// float definitions and macros -#define _SHIFTED_EXPONENT_MASK_SP 0xff -#define _BIAS_SP 126 -#define T_SP 23 -#define EXPONENT_DENORM_SP (-_BIAS_SP) -#define BASE_TO_THE_T_SP ((float) 8388608.0) -#define GET_EXPONENT_SP(x) ((((x) >> T_SP) & _SHIFTED_EXPONENT_MASK_SP) - _BIAS_SP) - -//--------------------------------------------------------------------------- -// local types -//--------------------------------------------------------------------------- - -// struct for instance table -INSTANCE_TYPE_BEGIN EPL_MCO_DECL_INSTANCE_MEMBER() - -STATIC tEplObdInitParam m_ObdInitParam; -STATIC tEplObdStoreLoadObjCallback m_fpStoreLoadObjCallback; - -INSTANCE_TYPE_END -// decomposition of float -typedef union { - tEplObdReal32 m_flRealPart; - int m_nIntegerPart; - -} tEplObdRealParts; - -//--------------------------------------------------------------------------- -// modul globale vars -//--------------------------------------------------------------------------- - -// This macro replace the unspecific pointer to an instance through -// the modul specific type for the local instance table. This macro -// must defined in each modul. -//#define tEplPtrInstance tEplInstanceInfo * - -EPL_MCO_DECL_INSTANCE_VAR() - -u8 abEplObdTrashObject_g[8]; - -//--------------------------------------------------------------------------- -// local function prototypes -//--------------------------------------------------------------------------- - -EPL_MCO_DEFINE_INSTANCE_FCT() - -static tEplKernel EplObdCallObjectCallback(EPL_MCO_DECL_INSTANCE_PTR_ - tEplObdCallback fpCallback_p, - tEplObdCbParam *pCbParam_p); - -static tEplObdSize EplObdGetDataSizeIntern(tEplObdSubEntryPtr pSubIndexEntry_p); - -static tEplObdSize EplObdGetStrLen(void *pObjData_p, - tEplObdSize ObjLen_p, tEplObdType ObjType_p); - -#if (EPL_OBD_CHECK_OBJECT_RANGE != FALSE) -static tEplKernel EplObdCheckObjectRange(tEplObdSubEntryPtr pSubindexEntry_p, - void *pData_p); -#endif - -static tEplKernel EplObdGetVarEntry(tEplObdSubEntryPtr pSubindexEntry_p, - tEplObdVarEntry **ppVarEntry_p); - -static tEplKernel EplObdGetEntry(EPL_MCO_DECL_INSTANCE_PTR_ - unsigned int uiIndex_p, - unsigned int uiSubindex_p, - tEplObdEntryPtr * ppObdEntry_p, - tEplObdSubEntryPtr * ppObdSubEntry_p); - -static tEplObdSize EplObdGetObjectSize(tEplObdSubEntryPtr pSubIndexEntry_p); - -static tEplKernel EplObdGetIndexIntern(tEplObdInitParam *pInitParam_p, - unsigned int uiIndex_p, - tEplObdEntryPtr * ppObdEntry_p); - -static tEplKernel EplObdGetSubindexIntern(tEplObdEntryPtr pObdEntry_p, - unsigned int uiSubIndex_p, - tEplObdSubEntryPtr * ppObdSubEntry_p); - -static tEplKernel EplObdAccessOdPartIntern(EPL_MCO_DECL_INSTANCE_PTR_ - tEplObdPart CurrentOdPart_p, - tEplObdEntryPtr pObdEnty_p, - tEplObdDir Direction_p); - -static void *EplObdGetObjectDefaultPtr(tEplObdSubEntryPtr pSubIndexEntry_p); -static void *EplObdGetObjectCurrentPtr(tEplObdSubEntryPtr pSubIndexEntry_p); - -#if (EPL_OBD_USE_STORE_RESTORE != FALSE) - -static tEplKernel EplObdCallStoreCallback(EPL_MCO_DECL_INSTANCE_PTR_ tEplObdCbStoreParam *pCbStoreParam_p); - -#endif // (EPL_OBD_USE_STORE_RESTORE != FALSE) - -static void EplObdCopyObjectData(void *pDstData_p, - void *pSrcData_p, - tEplObdSize ObjSize_p, tEplObdType ObjType_p); - -void *EplObdGetObjectDataPtrIntern(tEplObdSubEntryPtr pSubindexEntry_p); - -static tEplKernel EplObdIsNumericalIntern(tEplObdSubEntryPtr pObdSubEntry_p, - BOOL * pfEntryNumerical_p); - -static tEplKernel EplObdWriteEntryPre(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p, - unsigned int uiSubIndex_p, - void *pSrcData_p, - void **ppDstData_p, - tEplObdSize Size_p, - tEplObdEntryPtr *ppObdEntry_p, - tEplObdSubEntryPtr *ppSubEntry_p, - tEplObdCbParam *pCbParam_p, - tEplObdSize *pObdSize_p); - -static tEplKernel EplObdWriteEntryPost(EPL_MCO_DECL_INSTANCE_PTR_ tEplObdEntryPtr pObdEntry_p, - tEplObdSubEntryPtr pSubEntry_p, - tEplObdCbParam *pCbParam_p, - void *pSrcData_p, - void *pDstData_p, - tEplObdSize ObdSize_p); - -//=========================================================================// -// // -// P U B L I C F U N C T I O N S // -// // -//=========================================================================// - -//--------------------------------------------------------------------------- -// -// Function: EplObdInit() -// -// Description: initializes the first instance -// -// Parameters: pInitParam_p = init parameter -// -// Return: tEplKernel = errorcode -// -// State: -// -//--------------------------------------------------------------------------- - -tEplKernel EplObdInit(EPL_MCO_DECL_PTR_INSTANCE_PTR_ tEplObdInitParam *pInitParam_p) -{ - - tEplKernel Ret; - EPL_MCO_DELETE_INSTANCE_TABLE(); - - if (pInitParam_p == NULL) { - Ret = kEplSuccessful; - goto Exit; - } - - Ret = EplObdAddInstance(EPL_MCO_PTR_INSTANCE_PTR_ pInitParam_p); - - Exit: - return Ret; - -} - -//--------------------------------------------------------------------------- -// -// Function: EplObdAddInstance() -// -// Description: adds a new instance -// -// Parameters: pInitParam_p -// -// Return: tEplKernel -// -// State: -// -//--------------------------------------------------------------------------- - -tEplKernel EplObdAddInstance(EPL_MCO_DECL_PTR_INSTANCE_PTR_ tEplObdInitParam *pInitParam_p) -{ - - EPL_MCO_DECL_INSTANCE_PTR_LOCAL tEplKernel Ret; - - // check if pointer to instance pointer valid - // get free instance and set the globale instance pointer - // set also the instance addr to parameterlist - EPL_MCO_CHECK_PTR_INSTANCE_PTR(); - EPL_MCO_GET_FREE_INSTANCE_PTR(); - EPL_MCO_SET_PTR_INSTANCE_PTR(); - - // save init parameters - EPL_MEMCPY(&EPL_MCO_GLB_VAR(m_ObdInitParam), pInitParam_p, - sizeof(tEplObdInitParam)); - - // clear callback function for command LOAD and STORE - EPL_MCO_GLB_VAR(m_fpStoreLoadObjCallback) = NULL; - - // sign instance as used - EPL_MCO_WRITE_INSTANCE_STATE(kStateUsed); - - // initialize object dictionary - // so all all VarEntries will be initialized to trash object and default values will be set to current data - Ret = EplObdAccessOdPart(EPL_MCO_INSTANCE_PTR_ - kEplObdPartAll, kEplObdDirInit); - - return Ret; - -} - -//--------------------------------------------------------------------------- -// -// Function: EplObdDeleteInstance() -// -// Description: delete instance -// -// Parameters: EPL_MCO_DECL_INSTANCE_PTR -// -// Return: tEplKernel -// -// State: -// -//--------------------------------------------------------------------------- -#if (EPL_USE_DELETEINST_FUNC != FALSE) -tEplKernel EplObdDeleteInstance(EPL_MCO_DECL_INSTANCE_PTR) -{ - // check for all API function if instance is valid - EPL_MCO_CHECK_INSTANCE_STATE(); - - // sign instance as unused - EPL_MCO_WRITE_INSTANCE_STATE(kStateUnused); - - return kEplSuccessful; - -} -#endif // (EPL_USE_DELETEINST_FUNC != FALSE) - -//--------------------------------------------------------------------------- -// -// Function: EplObdWriteEntry() -// -// Description: Function writes data to an OBD entry. Strings -// are stored with added '\0' character. -// -// Parameters: EPL_MCO_DECL_INSTANCE_PTR_ -// uiIndex_p = Index of the OD entry -// uiSubIndex_p = Subindex of the OD Entry -// pSrcData_p = Pointer to the data to write -// Size_p = Size of the data in Byte -// -// Return: tEplKernel = Errorcode -// -// -// State: -// -//--------------------------------------------------------------------------- - -tEplKernel EplObdWriteEntry(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p, - unsigned int uiSubIndex_p, - void *pSrcData_p, tEplObdSize Size_p) -{ - - tEplKernel Ret; - tEplObdEntryPtr pObdEntry; - tEplObdSubEntryPtr pSubEntry; - tEplObdCbParam CbParam; - void *pDstData; - tEplObdSize ObdSize; - - Ret = EplObdWriteEntryPre(EPL_MCO_INSTANCE_PTR_ - uiIndex_p, - uiSubIndex_p, - pSrcData_p, - &pDstData, - Size_p, - &pObdEntry, &pSubEntry, &CbParam, &ObdSize); - if (Ret != kEplSuccessful) { - goto Exit; - } - - Ret = EplObdWriteEntryPost(EPL_MCO_INSTANCE_PTR_ - pObdEntry, - pSubEntry, - &CbParam, pSrcData_p, pDstData, ObdSize); - if (Ret != kEplSuccessful) { - goto Exit; - } - - Exit: - - return Ret; - -} - -//--------------------------------------------------------------------------- -// -// Function: EplObdReadEntry() -// -// Description: The function reads an object entry. The application -// can always read the data even if attrib kEplObdAccRead -// is not set. The attrib is only checked up for SDO transfer. -// -// Parameters: EPL_MCO_DECL_INSTANCE_PTR_ -// uiIndex_p = Index oof the OD entry to read -// uiSubIndex_p = Subindex to read -// pDstData_p = pointer to the buffer for data -// Offset_p = offset in data for read access -// pSize_p = IN: Size of the buffer -// OUT: number of readed Bytes -// -// Return: tEplKernel -// -// State: -// -//--------------------------------------------------------------------------- - -tEplKernel EplObdReadEntry(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p, - unsigned int uiSubIndex_p, - void *pDstData_p, tEplObdSize *pSize_p) -{ - - tEplKernel Ret; - tEplObdEntryPtr pObdEntry; - tEplObdSubEntryPtr pSubEntry; - tEplObdCbParam CbParam; - void *pSrcData; - tEplObdSize ObdSize; - - // check for all API function if instance is valid - EPL_MCO_CHECK_INSTANCE_STATE(); - - ASSERT(pDstData_p != NULL); - ASSERT(pSize_p != NULL); - - // get address of index and subindex entry - Ret = EplObdGetEntry(EPL_MCO_INSTANCE_PTR_ - uiIndex_p, uiSubIndex_p, &pObdEntry, &pSubEntry); - if (Ret != kEplSuccessful) { - goto Exit; - } - // get pointer to object data - pSrcData = EplObdGetObjectDataPtrIntern(pSubEntry); - - // check source pointer - if (pSrcData == NULL) { - Ret = kEplObdReadViolation; - goto Exit; - } - //------------------------------------------------------------------------ - // address of source data to structure of callback parameters - // so callback function can change this data before reading - CbParam.m_uiIndex = uiIndex_p; - CbParam.m_uiSubIndex = uiSubIndex_p; - CbParam.m_pArg = pSrcData; - CbParam.m_ObdEvent = kEplObdEvPreRead; - Ret = EplObdCallObjectCallback(EPL_MCO_INSTANCE_PTR_ - pObdEntry->m_fpCallback, &CbParam); - if (Ret != kEplSuccessful) { - goto Exit; - } - // get size of data and check if application has reserved enough memory - ObdSize = EplObdGetDataSizeIntern(pSubEntry); - // check if offset given and calc correct number of bytes to read - if (*pSize_p < ObdSize) { - Ret = kEplObdValueLengthError; - goto Exit; - } - // read value from object - EPL_MEMCPY(pDstData_p, pSrcData, ObdSize); - *pSize_p = ObdSize; - - // write address of destination data to structure of callback parameters - // so callback function can change this data after reading - CbParam.m_pArg = pDstData_p; - CbParam.m_ObdEvent = kEplObdEvPostRead; - Ret = EplObdCallObjectCallback(EPL_MCO_INSTANCE_PTR_ - pObdEntry->m_fpCallback, &CbParam); - - Exit: - - return Ret; - -} - -//--------------------------------------------------------------------------- -// -// Function: EplObdAccessOdPart() -// -// Description: restores default values of one part of OD -// -// Parameters: ObdPart_p -// Direction_p -// -// Return: tEplKernel -// -// State: -// -//--------------------------------------------------------------------------- - -tEplKernel EplObdAccessOdPart(EPL_MCO_DECL_INSTANCE_PTR_ tEplObdPart ObdPart_p, - tEplObdDir Direction_p) -{ - - tEplKernel Ret = kEplSuccessful; - BOOL fPartFount; - tEplObdEntryPtr pObdEntry; - - // check for all API function if instance is valid - EPL_MCO_CHECK_INSTANCE_STATE(); - - // part always has to be unequal to NULL - pObdEntry = EPL_MCO_GLB_VAR(m_ObdInitParam.m_pPart); - ASSERTMSG(pObdEntry != NULL, - "EplObdAccessOdPart(): no OD part is defined!\n"); - - // if ObdPart_p is not valid fPartFound keeps FALSE and function returns kEplObdIllegalPart - fPartFount = FALSE; - - // access to part - if ((ObdPart_p & kEplObdPartGen) != 0) { - fPartFount = TRUE; - - Ret = EplObdAccessOdPartIntern(EPL_MCO_INSTANCE_PTR_ - kEplObdPartGen, pObdEntry, - Direction_p); - if (Ret != kEplSuccessful) { - goto Exit; - } - } - // access to manufacturer part - pObdEntry = EPL_MCO_GLB_VAR(m_ObdInitParam.m_pManufacturerPart); - - if (((ObdPart_p & kEplObdPartMan) != 0) && (pObdEntry != NULL)) { - fPartFount = TRUE; - - Ret = EplObdAccessOdPartIntern(EPL_MCO_INSTANCE_PTR_ - kEplObdPartMan, pObdEntry, - Direction_p); - if (Ret != kEplSuccessful) { - goto Exit; - } - } - // access to device part - pObdEntry = EPL_MCO_GLB_VAR(m_ObdInitParam.m_pDevicePart); - - if (((ObdPart_p & kEplObdPartDev) != 0) && (pObdEntry != NULL)) { - fPartFount = TRUE; - - Ret = EplObdAccessOdPartIntern(EPL_MCO_INSTANCE_PTR_ - kEplObdPartDev, pObdEntry, - Direction_p); - if (Ret != kEplSuccessful) { - goto Exit; - } - } -#if (defined (EPL_OBD_USER_OD) && (EPL_OBD_USER_OD != FALSE)) - { - // access to user part - pObdEntry = EPL_MCO_GLB_VAR(m_ObdInitParam.m_pUserPart); - - if (((ObdPart_p & kEplObdPartUsr) != 0) && (pObdEntry != NULL)) { - fPartFount = TRUE; - - Ret = EplObdAccessOdPartIntern(EPL_MCO_INSTANCE_PTR_ - kEplObdPartUsr, - pObdEntry, Direction_p); - if (Ret != kEplSuccessful) { - goto Exit; - } - } - } -#endif - - // no access to an OD part was done? illegal OD part was specified! - if (fPartFount == FALSE) { - Ret = kEplObdIllegalPart; - } - - Exit: - - return Ret; - -} - -//--------------------------------------------------------------------------- -// -// Function: EplObdDefineVar() -// -// Description: defines a variable in OD -// -// Parameters: pEplVarParam_p -// -// Return: tEplKernel -// -// State: -// -//--------------------------------------------------------------------------- - -tEplKernel EplObdDefineVar(EPL_MCO_DECL_INSTANCE_PTR_ tEplVarParam *pVarParam_p) -{ - - tEplKernel Ret; - tEplObdVarEntry *pVarEntry; - tEplVarParamValid VarValid; - tEplObdSubEntryPtr pSubindexEntry; - - // check for all API function if instance is valid - EPL_MCO_CHECK_INSTANCE_STATE(); - - ASSERT(pVarParam_p != NULL); // is not allowed to be NULL - - // get address of subindex entry - Ret = EplObdGetEntry(EPL_MCO_INSTANCE_PTR_ - pVarParam_p->m_uiIndex, - pVarParam_p->m_uiSubindex, NULL, &pSubindexEntry); - if (Ret != kEplSuccessful) { - goto Exit; - } - // get var entry - Ret = EplObdGetVarEntry(pSubindexEntry, &pVarEntry); - if (Ret != kEplSuccessful) { - goto Exit; - } - - VarValid = pVarParam_p->m_ValidFlag; - - // copy only this values, which valid flag is set - if ((VarValid & kVarValidSize) != 0) { - if (pSubindexEntry->m_Type != kEplObdTypDomain) { - tEplObdSize DataSize; - - // check passed size parameter - DataSize = EplObdGetObjectSize(pSubindexEntry); - if (DataSize != pVarParam_p->m_Size) { // size of variable does not match - Ret = kEplObdValueLengthError; - goto Exit; - } - } else { // size can be set only for objects of type DOMAIN - pVarEntry->m_Size = pVarParam_p->m_Size; - } - } - - if ((VarValid & kVarValidData) != 0) { - pVarEntry->m_pData = pVarParam_p->m_pData; - } -/* - #if (EPL_PDO_USE_STATIC_MAPPING == FALSE) - { - if ((VarValid & kVarValidCallback) != 0) - { - pVarEntry->m_fpCallback = pVarParam_p->m_fpCallback; - } - - if ((VarValid & kVarValidArg) != 0) - { - pVarEntry->m_pArg = pVarParam_p->m_pArg; - } - } - #endif -*/ - // Ret is already set to kEplSuccessful from ObdGetVarIntern() - - Exit: - - return Ret; - -} - -//--------------------------------------------------------------------------- -// -// Function: EplObdGetObjectDataPtr() -// -// Description: It returnes the current data pointer. But if object is an -// constant object it returnes the default pointer. -// -// Parameters: uiIndex_p = Index of the entry -// uiSubindex_p = Subindex of the entry -// -// Return: void * = pointer to object data -// -// State: -// -//--------------------------------------------------------------------------- - -void *EplObdGetObjectDataPtr(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p, - unsigned int uiSubIndex_p) -{ - tEplKernel Ret; - void *pData; - tEplObdEntryPtr pObdEntry; - tEplObdSubEntryPtr pObdSubEntry; - - // get pointer to index structure - Ret = EplObdGetIndexIntern(&EPL_MCO_GLB_VAR(m_ObdInitParam), - uiIndex_p, &pObdEntry); - if (Ret != kEplSuccessful) { - pData = NULL; - goto Exit; - } - // get pointer to subindex structure - Ret = EplObdGetSubindexIntern(pObdEntry, uiSubIndex_p, &pObdSubEntry); - if (Ret != kEplSuccessful) { - pData = NULL; - goto Exit; - } - // get Datapointer - pData = EplObdGetObjectDataPtrIntern(pObdSubEntry); - - Exit: - return pData; - -} - -#if (defined (EPL_OBD_USER_OD) && (EPL_OBD_USER_OD != FALSE)) - -//--------------------------------------------------------------------------- -// -// Function: EplObdRegisterUserOd() -// -// Description: function registers the user OD -// -// Parameters: pUserOd_p =pointer to user ODd -// -// Return: tEplKernel = errorcode -// -// State: -// -//--------------------------------------------------------------------------- -tEplKernel EplObdRegisterUserOd(EPL_MCO_DECL_INSTANCE_PTR_ tEplObdEntryPtr pUserOd_p) -{ - - EPL_MCO_CHECK_INSTANCE_STATE(); - - EPL_MCO_GLB_VAR(m_ObdInitParam.m_pUserPart) = pUserOd_p; - - return kEplSuccessful; - -} - -#endif - -//--------------------------------------------------------------------------- -// -// Function: EplObdInitVarEntry() -// -// Description: function to initialize VarEntry dependened on object type -// -// Parameters: pVarEntry_p = pointer to var entry structure -// Type_p = object type -// ObdSize_p = size of object data -// -// Returns: none -// -// State: -// -//--------------------------------------------------------------------------- - -void EplObdInitVarEntry(EPL_MCO_DECL_INSTANCE_PTR_ tEplObdVarEntry *pVarEntry_p, - tEplObdType Type_p, tEplObdSize ObdSize_p) -{ -/* - #if (EPL_PDO_USE_STATIC_MAPPING == FALSE) - { - // reset pointer to VAR callback and argument - pVarEntry_p->m_fpCallback = NULL; - pVarEntry_p->m_pArg = NULL; - } - #endif -*/ - -// 10-dec-2004 r.d.: this function will not be used for strings - if ((Type_p == kEplObdTypDomain)) -// (bType_p == kEplObdTypVString) /* || -// (bType_p == kEplObdTypOString) || -// (bType_p == kEplObdTypUString) */ ) - { - // variables which are defined as DOMAIN or VSTRING should not point to - // trash object, because this trash object contains only 8 bytes. DOMAINS or - // STRINGS can be longer. - pVarEntry_p->m_pData = NULL; - pVarEntry_p->m_Size = 0; - } else { - // set address to variable data to trash object - // This prevents an access violation if user forgets to call EplObdDefineVar() - // for this variable but mappes it in a PDO. - pVarEntry_p->m_pData = &abEplObdTrashObject_g[0]; - pVarEntry_p->m_Size = ObdSize_p; - } - -} - -//--------------------------------------------------------------------------- -// -// Function: EplObdGetDataSize() -// -// Description: function to initialize VarEntry dependened on object type -// -// gets the data size of an object -// for string objects it returnes the string length -// -// Parameters: EPL_MCO_DECL_INSTANCE_PTR_ = Instancepointer -// uiIndex_p = Index -// uiSubIndex_p= Subindex -// -// Return: tEplObdSize -// -// State: -// -//--------------------------------------------------------------------------- -tEplObdSize EplObdGetDataSize(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p, - unsigned int uiSubIndex_p) -{ - tEplKernel Ret; - tEplObdSize ObdSize; - tEplObdEntryPtr pObdEntry; - tEplObdSubEntryPtr pObdSubEntry; - - // get pointer to index structure - Ret = EplObdGetIndexIntern(&EPL_MCO_GLB_VAR(m_ObdInitParam), - uiIndex_p, &pObdEntry); - if (Ret != kEplSuccessful) { - ObdSize = 0; - goto Exit; - } - // get pointer to subindex structure - Ret = EplObdGetSubindexIntern(pObdEntry, uiSubIndex_p, &pObdSubEntry); - if (Ret != kEplSuccessful) { - ObdSize = 0; - goto Exit; - } - // get size - ObdSize = EplObdGetDataSizeIntern(pObdSubEntry); - Exit: - return ObdSize; -} - -//--------------------------------------------------------------------------- -// -// Function: EplObdGetNodeId() -// -// Description: function returns nodeid from entry 0x1F93 -// -// -// Parameters: EPL_MCO_DECL_INSTANCE_PTR = Instancepointer -// -// Return: unsigned int = Node Id -// -// State: -// -//--------------------------------------------------------------------------- -unsigned int EplObdGetNodeId(EPL_MCO_DECL_INSTANCE_PTR) -{ - tEplKernel Ret; - tEplObdSize ObdSize; - u8 bNodeId; - - bNodeId = 0; - ObdSize = sizeof(bNodeId); - Ret = EplObdReadEntry(EPL_MCO_PTR_INSTANCE_PTR_ - EPL_OBD_NODE_ID_INDEX, - EPL_OBD_NODE_ID_SUBINDEX, &bNodeId, &ObdSize); - if (Ret != kEplSuccessful) { - bNodeId = EPL_C_ADR_INVALID; - goto Exit; - } - - Exit: - return (unsigned int)bNodeId; - -} - -//--------------------------------------------------------------------------- -// -// Function: EplObdSetNodeId() -// -// Description: function sets nodeid in entry 0x1F93 -// -// -// Parameters: EPL_MCO_DECL_INSTANCE_PTR_ = Instancepointer -// uiNodeId_p = Node Id to set -// NodeIdType_p= Type on which way the Node Id was set -// -// Return: tEplKernel = Errorcode -// -// State: -// -//--------------------------------------------------------------------------- -tEplKernel EplObdSetNodeId(EPL_MCO_DECL_PTR_INSTANCE_PTR_ unsigned int uiNodeId_p, - tEplObdNodeIdType NodeIdType_p) -{ - tEplKernel Ret; - tEplObdSize ObdSize; - u8 fHwBool; - u8 bNodeId; - - // check Node Id - if (uiNodeId_p == EPL_C_ADR_INVALID) { - Ret = kEplInvalidNodeId; - goto Exit; - } - bNodeId = (u8) uiNodeId_p; - ObdSize = sizeof(u8); - // write NodeId to OD entry - Ret = EplObdWriteEntry(EPL_MCO_PTR_INSTANCE_PTR_ - EPL_OBD_NODE_ID_INDEX, - EPL_OBD_NODE_ID_SUBINDEX, &bNodeId, ObdSize); - if (Ret != kEplSuccessful) { - goto Exit; - } - // set HWBOOL-Flag in Subindex EPL_OBD_NODE_ID_HWBOOL_SUBINDEX - switch (NodeIdType_p) { - // type unknown - case kEplObdNodeIdUnknown: - { - fHwBool = OBD_FALSE; - break; - } - - case kEplObdNodeIdSoftware: - { - fHwBool = OBD_FALSE; - break; - } - - case kEplObdNodeIdHardware: - { - fHwBool = OBD_TRUE; - break; - } - - default: - { - fHwBool = OBD_FALSE; - } - - } // end of switch (NodeIdType_p) - - // write flag - ObdSize = sizeof(fHwBool); - Ret = EplObdWriteEntry(EPL_MCO_PTR_INSTANCE_PTR - EPL_OBD_NODE_ID_INDEX, - EPL_OBD_NODE_ID_HWBOOL_SUBINDEX, - &fHwBool, ObdSize); - if (Ret != kEplSuccessful) { - goto Exit; - } - - Exit: - return Ret; -} - -//--------------------------------------------------------------------------- -// -// Function: EplObdIsNumerical() -// -// Description: function checks if a entry is numerical or not -// -// -// Parameters: EPL_MCO_DECL_INSTANCE_PTR_ = Instancepointer -// uiIndex_p = Index -// uiSubIndex_p = Subindex -// pfEntryNumerical_p = pointer to BOOL for returnvalue -// -> TRUE if entry a numerical value -// -> FALSE if entry not a numerical value -// -// Return: tEplKernel = Errorcode -// -// State: -// -//--------------------------------------------------------------------------- -tEplKernel EplObdIsNumerical(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p, - unsigned int uiSubIndex_p, - BOOL *pfEntryNumerical_p) -{ - tEplKernel Ret; - tEplObdEntryPtr pObdEntry; - tEplObdSubEntryPtr pObdSubEntry; - - // get pointer to index structure - Ret = EplObdGetIndexIntern(&EPL_MCO_GLB_VAR(m_ObdInitParam), - uiIndex_p, &pObdEntry); - if (Ret != kEplSuccessful) { - goto Exit; - } - // get pointer to subindex structure - Ret = EplObdGetSubindexIntern(pObdEntry, uiSubIndex_p, &pObdSubEntry); - if (Ret != kEplSuccessful) { - goto Exit; - } - - Ret = EplObdIsNumericalIntern(pObdSubEntry, pfEntryNumerical_p); - - Exit: - return Ret; - -} - -//--------------------------------------------------------------------------- -// -// Function: EplObdReadEntryToLe() -// -// Description: The function reads an object entry from the byteoder -// of the system to the little endian byteorder for numerical values. -// For other types a normal read will be processed. This is usefull for -// the PDO and SDO module. The application -// can always read the data even if attrib kEplObdAccRead -// is not set. The attrib is only checked up for SDO transfer. -// -// Parameters: EPL_MCO_DECL_INSTANCE_PTR_ -// uiIndex_p = Index of the OD entry to read -// uiSubIndex_p = Subindex to read -// pDstData_p = pointer to the buffer for data -// Offset_p = offset in data for read access -// pSize_p = IN: Size of the buffer -// OUT: number of readed Bytes -// -// Return: tEplKernel -// -// State: -// -//--------------------------------------------------------------------------- -tEplKernel EplObdReadEntryToLe(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p, - unsigned int uiSubIndex_p, - void *pDstData_p, tEplObdSize *pSize_p) -{ - tEplKernel Ret; - tEplObdEntryPtr pObdEntry; - tEplObdSubEntryPtr pSubEntry; - tEplObdCbParam CbParam; - void *pSrcData; - tEplObdSize ObdSize; - - // check for all API function if instance is valid - EPL_MCO_CHECK_INSTANCE_STATE(); - - ASSERT(pDstData_p != NULL); - ASSERT(pSize_p != NULL); - - // get address of index and subindex entry - Ret = EplObdGetEntry(EPL_MCO_INSTANCE_PTR_ - uiIndex_p, uiSubIndex_p, &pObdEntry, &pSubEntry); - if (Ret != kEplSuccessful) { - goto Exit; - } - // get pointer to object data - pSrcData = EplObdGetObjectDataPtrIntern(pSubEntry); - - // check source pointer - if (pSrcData == NULL) { - Ret = kEplObdReadViolation; - goto Exit; - } - //------------------------------------------------------------------------ - // address of source data to structure of callback parameters - // so callback function can change this data before reading - CbParam.m_uiIndex = uiIndex_p; - CbParam.m_uiSubIndex = uiSubIndex_p; - CbParam.m_pArg = pSrcData; - CbParam.m_ObdEvent = kEplObdEvPreRead; - Ret = EplObdCallObjectCallback(EPL_MCO_INSTANCE_PTR_ - pObdEntry->m_fpCallback, &CbParam); - if (Ret != kEplSuccessful) { - goto Exit; - } - // get size of data and check if application has reserved enough memory - ObdSize = EplObdGetDataSizeIntern(pSubEntry); - // check if offset given and calc correct number of bytes to read - if (*pSize_p < ObdSize) { - Ret = kEplObdValueLengthError; - goto Exit; - } - // check if numerical type - switch (pSubEntry->m_Type) { - //----------------------------------------------- - // types without ami - case kEplObdTypVString: - case kEplObdTypOString: - case kEplObdTypDomain: - default: - { - // read value from object - EPL_MEMCPY(pDstData_p, pSrcData, ObdSize); - break; - } - - //----------------------------------------------- - // numerical type which needs ami-write - // 8 bit or smaller values - case kEplObdTypBool: - case kEplObdTypInt8: - case kEplObdTypUInt8: - { - AmiSetByteToLe(pDstData_p, *((u8 *) pSrcData)); - break; - } - - // 16 bit values - case kEplObdTypInt16: - case kEplObdTypUInt16: - { - AmiSetWordToLe(pDstData_p, *((u16 *) pSrcData)); - break; - } - - // 24 bit values - case kEplObdTypInt24: - case kEplObdTypUInt24: - { - AmiSetDword24ToLe(pDstData_p, *((u32 *) pSrcData)); - break; - } - - // 32 bit values - case kEplObdTypInt32: - case kEplObdTypUInt32: - case kEplObdTypReal32: - { - AmiSetDwordToLe(pDstData_p, *((u32 *) pSrcData)); - break; - } - - // 40 bit values - case kEplObdTypInt40: - case kEplObdTypUInt40: - { - AmiSetQword40ToLe(pDstData_p, *((u64 *) pSrcData)); - break; - } - - // 48 bit values - case kEplObdTypInt48: - case kEplObdTypUInt48: - { - AmiSetQword48ToLe(pDstData_p, *((u64 *) pSrcData)); - break; - } - - // 56 bit values - case kEplObdTypInt56: - case kEplObdTypUInt56: - { - AmiSetQword56ToLe(pDstData_p, *((u64 *) pSrcData)); - break; - } - - // 64 bit values - case kEplObdTypInt64: - case kEplObdTypUInt64: - case kEplObdTypReal64: - { - AmiSetQword64ToLe(pDstData_p, *((u64 *) pSrcData)); - break; - } - - // time of day - case kEplObdTypTimeOfDay: - case kEplObdTypTimeDiff: - { - AmiSetTimeOfDay(pDstData_p, ((tTimeOfDay *) pSrcData)); - break; - } - - } // end of switch(pSubEntry->m_Type) - - *pSize_p = ObdSize; - - // write address of destination data to structure of callback parameters - // so callback function can change this data after reading - CbParam.m_pArg = pDstData_p; - CbParam.m_ObdEvent = kEplObdEvPostRead; - Ret = EplObdCallObjectCallback(EPL_MCO_INSTANCE_PTR_ - pObdEntry->m_fpCallback, & |