Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.30-rc4 506 lines 16 kB view raw
1/**************************************************************************** 2 3 (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29 4 www.systec-electronic.com 5 6 Project: openPOWERLINK 7 8 Description: source file for Epl-Obd-Userspace-module 9 10 License: 11 12 Redistribution and use in source and binary forms, with or without 13 modification, are permitted provided that the following conditions 14 are met: 15 16 1. Redistributions of source code must retain the above copyright 17 notice, this list of conditions and the following disclaimer. 18 19 2. Redistributions in binary form must reproduce the above copyright 20 notice, this list of conditions and the following disclaimer in the 21 documentation and/or other materials provided with the distribution. 22 23 3. Neither the name of SYSTEC electronic GmbH nor the names of its 24 contributors may be used to endorse or promote products derived 25 from this software without prior written permission. For written 26 permission, please contact info@systec-electronic.com. 27 28 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 29 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 30 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 31 FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 32 COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 33 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 34 BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 35 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 36 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 37 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 38 ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 39 POSSIBILITY OF SUCH DAMAGE. 40 41 Severability Clause: 42 43 If a provision of this License is or becomes illegal, invalid or 44 unenforceable in any jurisdiction, that shall not affect: 45 1. the validity or enforceability in that jurisdiction of any other 46 provision of this License; or 47 2. the validity or enforceability in other jurisdictions of that or 48 any other provision of this License. 49 50 ------------------------------------------------------------------------- 51 52 $RCSfile: EplObdu.c,v $ 53 54 $Author: D.Krueger $ 55 56 $Revision: 1.5 $ $Date: 2008/10/17 15:32:32 $ 57 58 $State: Exp $ 59 60 Build Environment: 61 GCC V3.4 62 63 ------------------------------------------------------------------------- 64 65 Revision History: 66 67 2006/06/19 k.t.: start of the implementation 68 69****************************************************************************/ 70 71#include "EplInc.h" 72#include "user/EplObdu.h" 73#include "user/EplObduCal.h" 74 75#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDU)) != 0) 76/***************************************************************************/ 77/* */ 78/* */ 79/* G L O B A L D E F I N I T I O N S */ 80/* */ 81/* */ 82/***************************************************************************/ 83 84//--------------------------------------------------------------------------- 85// const defines 86//--------------------------------------------------------------------------- 87 88//--------------------------------------------------------------------------- 89// local types 90//--------------------------------------------------------------------------- 91 92//--------------------------------------------------------------------------- 93// modul globale vars 94//--------------------------------------------------------------------------- 95 96//--------------------------------------------------------------------------- 97// local function prototypes 98//--------------------------------------------------------------------------- 99 100//=========================================================================// 101// // 102// P U B L I C F U N C T I O N S // 103// // 104//=========================================================================// 105 106//--------------------------------------------------------------------------- 107// 108// Function: EplObduWriteEntry() 109// 110// Description: Function writes data to an OBD entry. Strings 111// are stored with added '\0' character. 112// 113// Parameters: uiIndex_p = Index of the OD entry 114// uiSubIndex_p = Subindex of the OD Entry 115// pSrcData_p = Pointer to the data to write 116// Size_p = Size of the data in Byte 117// 118// Return: tEplKernel = Errorcode 119// 120// 121// State: 122// 123//--------------------------------------------------------------------------- 124tEplKernel EplObduWriteEntry(unsigned int uiIndex_p, 125 unsigned int uiSubIndex_p, 126 void *pSrcData_p, tEplObdSize Size_p) 127{ 128 tEplKernel Ret; 129 130 Ret = EplObduCalWriteEntry(uiIndex_p, uiSubIndex_p, pSrcData_p, Size_p); 131 132 return Ret; 133} 134 135//--------------------------------------------------------------------------- 136// 137// Function: EplObduReadEntry() 138// 139// Description: The function reads an object entry. The application 140// can always read the data even if attrib kEplObdAccRead 141// is not set. The attrib is only checked up for SDO transfer. 142// 143// Parameters: uiIndex_p = Index oof the OD entry to read 144// uiSubIndex_p = Subindex to read 145// pDstData_p = pointer to the buffer for data 146// Offset_p = offset in data for read access 147// pSize_p = IN: Size of the buffer 148// OUT: number of readed Bytes 149// 150// Return: tEplKernel = errorcode 151// 152// State: 153// 154//--------------------------------------------------------------------------- 155tEplKernel EplObduReadEntry(unsigned int uiIndex_p, 156 unsigned int uiSubIndex_p, 157 void *pDstData_p, 158 tEplObdSize *pSize_p) 159{ 160 tEplKernel Ret; 161 162 Ret = EplObduCalReadEntry(uiIndex_p, uiSubIndex_p, pDstData_p, pSize_p); 163 164 return Ret; 165} 166 167//--------------------------------------------------------------------------- 168// 169// Function: EplObdAccessOdPart() 170// 171// Description: restores default values of one part of OD 172// 173// Parameters: ObdPart_p = od-part to reset 174// Direction_p = directory flag for 175// 176// Return: tEplKernel = errorcode 177// 178// State: 179// 180//--------------------------------------------------------------------------- 181tEplKernel EplObduAccessOdPart(tEplObdPart ObdPart_p, tEplObdDir Direction_p) 182{ 183 tEplKernel Ret; 184 185 Ret = EplObduCalAccessOdPart(ObdPart_p, Direction_p); 186 187 return Ret; 188} 189 190//--------------------------------------------------------------------------- 191// 192// Function: EplObduDefineVar() 193// 194// Description: defines a variable in OD 195// 196// Parameters: pEplVarParam_p = varentry 197// 198// Return: tEplKernel = errorcode 199// 200// State: 201// 202//--------------------------------------------------------------------------- 203tEplKernel EplObduDefineVar(tEplVarParam *pVarParam_p) 204{ 205 tEplKernel Ret; 206 207 Ret = EplObduCalDefineVar(pVarParam_p); 208 209 return Ret; 210} 211 212//--------------------------------------------------------------------------- 213// 214// Function: EplObduGetObjectDataPtr() 215// 216// Description: It returnes the current data pointer. But if object is an 217// constant object it returnes the default pointer. 218// 219// Parameters: uiIndex_p = Index of the entry 220// uiSubindex_p = Subindex of the entry 221// 222// Return: void * = pointer to object data 223// 224// State: 225// 226//--------------------------------------------------------------------------- 227void *EplObduGetObjectDataPtr(unsigned int uiIndex_p, unsigned int uiSubIndex_p) 228{ 229 void *pData; 230 231 pData = EplObduCalGetObjectDataPtr(uiIndex_p, uiSubIndex_p); 232 233 return pData; 234} 235 236//--------------------------------------------------------------------------- 237// 238// Function: EplObduRegisterUserOd() 239// 240// Description: function registers the user OD 241// 242// Parameters: pUserOd_p =pointer to user ODd 243// 244// Return: tEplKernel = errorcode 245// 246// State: 247// 248//--------------------------------------------------------------------------- 249#if (defined (EPL_OBD_USER_OD) && (EPL_OBD_USER_OD != FALSE)) 250tEplKernel EplObduRegisterUserOd(tEplObdEntryPtr pUserOd_p) 251{ 252 tEplKernel Ret; 253 254 Ret = EplObduCalRegisterUserOd(pUserOd_p); 255 256 return Ret; 257 258} 259#endif 260//--------------------------------------------------------------------------- 261// 262// Function: EplObduInitVarEntry() 263// 264// Description: function to initialize VarEntry dependened on object type 265// 266// Parameters: pVarEntry_p = pointer to var entry structure 267// bType_p = object type 268// ObdSize_p = size of object data 269// 270// Returns: none 271// 272// State: 273// 274//--------------------------------------------------------------------------- 275void EplObduInitVarEntry(tEplObdVarEntry *pVarEntry_p, u8 bType_p, tEplObdSize ObdSize_p) 276{ 277 EplObduCalInitVarEntry(pVarEntry_p, bType_p, ObdSize_p); 278} 279 280//--------------------------------------------------------------------------- 281// 282// Function: EplObduGetDataSize() 283// 284// Description: function to initialize VarEntry dependened on object type 285// 286// gets the data size of an object 287// for string objects it returnes the string length 288// 289// Parameters: uiIndex_p = Index 290// uiSubIndex_p= Subindex 291// 292// Return: tEplObdSize 293// 294// State: 295// 296//--------------------------------------------------------------------------- 297tEplObdSize EplObduGetDataSize(unsigned int uiIndex_p, unsigned int uiSubIndex_p) 298{ 299 tEplObdSize Size; 300 301 Size = EplObduCalGetDataSize(uiIndex_p, uiSubIndex_p); 302 303 return Size; 304} 305 306//--------------------------------------------------------------------------- 307// 308// Function: EplObduGetNodeId() 309// 310// Description: function returns nodeid from entry 0x1F93 311// 312// 313// Parameters: 314// 315// Return: unsigned int = Node Id 316// 317// State: 318// 319//--------------------------------------------------------------------------- 320unsigned int EplObduGetNodeId(void) 321{ 322 unsigned int uiNodeId; 323 324 uiNodeId = EplObduCalGetNodeId(); 325 326 return uiNodeId; 327} 328 329//--------------------------------------------------------------------------- 330// 331// Function: EplObduSetNodeId() 332// 333// Description: function sets nodeid in entry 0x1F93 334// 335// 336// Parameters: uiNodeId_p = Node Id to set 337// NodeIdType_p= Type on which way the Node Id was set 338// 339// Return: tEplKernel = Errorcode 340// 341// State: 342// 343//--------------------------------------------------------------------------- 344tEplKernel EplObduSetNodeId(unsigned int uiNodeId_p, tEplObdNodeIdType NodeIdType_p) 345{ 346 tEplKernel Ret; 347 348 Ret = EplObduCalSetNodeId(uiNodeId_p, NodeIdType_p); 349 350 return Ret; 351} 352 353//--------------------------------------------------------------------------- 354// 355// Function: EplObduGetAccessType() 356// 357// Description: Function returns accesstype of the entry 358// 359// Parameters: uiIndex_p = Index of the OD entry 360// uiSubIndex_p = Subindex of the OD Entry 361// pAccessTyp_p = pointer to buffer to store accesstyp 362// 363// Return: tEplKernel = Errorcode 364// 365// 366// State: 367// 368//--------------------------------------------------------------------------- 369tEplKernel EplObduGetAccessType(unsigned int uiIndex_p, 370 unsigned int uiSubIndex_p, 371 tEplObdAccess *pAccessTyp_p) 372{ 373 tEplObdAccess AccessType; 374 375 AccessType = 376 EplObduCalGetAccessType(uiIndex_p, uiSubIndex_p, pAccessTyp_p); 377 378 return AccessType; 379} 380 381//--------------------------------------------------------------------------- 382// 383// Function: EplObdReaduEntryToLe() 384// 385// Description: The function reads an object entry from the byteoder 386// of the system to the little endian byteorder for numeric values. 387// For other types a normal read will be processed. This is usefull for 388// the PDO and SDO module. The application 389// can always read the data even if attrib kEplObdAccRead 390// is not set. The attrib is only checked up for SDO transfer. 391// 392// Parameters: EPL_MCO_DECL_INSTANCE_PTR_ 393// uiIndex_p = Index of the OD entry to read 394// uiSubIndex_p = Subindex to read 395// pDstData_p = pointer to the buffer for data 396// Offset_p = offset in data for read access 397// pSize_p = IN: Size of the buffer 398// OUT: number of readed Bytes 399// 400// Return: tEplKernel 401// 402// State: 403// 404//--------------------------------------------------------------------------- 405tEplKernel EplObduReadEntryToLe(unsigned int uiIndex_p, 406 unsigned int uiSubIndex_p, 407 void *pDstData_p, 408 tEplObdSize *pSize_p) 409{ 410 tEplKernel Ret; 411 412 Ret = 413 EplObduCalReadEntryToLe(uiIndex_p, uiSubIndex_p, pDstData_p, 414 pSize_p); 415 416 return Ret; 417} 418 419//--------------------------------------------------------------------------- 420// 421// Function: EplObduWriteEntryFromLe() 422// 423// Description: Function writes data to an OBD entry from a source with 424// little endian byteorder to the od with system specuific 425// byteorder. Not numeric values will only by copied. Strings 426// are stored with added '\0' character. 427// 428// Parameters: EPL_MCO_DECL_INSTANCE_PTR_ 429// uiIndex_p = Index of the OD entry 430// uiSubIndex_p = Subindex of the OD Entry 431// pSrcData_p = Pointer to the data to write 432// Size_p = Size of the data in Byte 433// 434// Return: tEplKernel = Errorcode 435// 436// 437// State: 438// 439//--------------------------------------------------------------------------- 440tEplKernel EplObduWriteEntryFromLe(unsigned int uiIndex_p, 441 unsigned int uiSubIndex_p, 442 void *pSrcData_p, 443 tEplObdSize Size_p) 444{ 445 tEplKernel Ret; 446 447 Ret = 448 EplObduCalWriteEntryFromLe(uiIndex_p, uiSubIndex_p, pSrcData_p, 449 Size_p); 450 451 return Ret; 452} 453 454//--------------------------------------------------------------------------- 455// 456// Function: EplObduSearchVarEntry() 457// 458// Description: gets variable from OD 459// 460// Parameters: uiIndex_p = index of the var entry to search 461// uiSubindex_p = subindex of var entry to search 462// ppVarEntry_p = pointer to the pointer to the varentry 463// 464// Return: tEplKernel 465// 466// State: 467// 468//--------------------------------------------------------------------------- 469tEplKernel EplObduSearchVarEntry(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p, 470 unsigned int uiSubindex_p, 471 tEplObdVarEntry **ppVarEntry_p) 472{ 473 tEplKernel Ret; 474 475 Ret = EplObduCalSearchVarEntry(uiIndex_p, uiSubindex_p, ppVarEntry_p); 476 477 return Ret; 478} 479 480//=========================================================================// 481// // 482// P R I V A T E F U N C T I O N S // 483// // 484//=========================================================================// 485 486//--------------------------------------------------------------------------- 487// 488// Function: 489// 490// Description: 491// 492// 493// 494// Parameters: 495// 496// 497// Returns: 498// 499// 500// State: 501// 502//--------------------------------------------------------------------------- 503 504#endif // #if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDU)) != 0) 505 506// EOF