summaryrefslogtreecommitdiffstats
path: root/drivers/staging/epl/EplObd.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/epl/EplObd.c')
-rw-r--r--drivers/staging/epl/EplObd.c3192
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, &