src/objacces.c
changeset 175 e255529b6f7d
parent 161 c4908cc776a9
child 208 05d95c45b388
--- a/src/objacces.c	Tue Apr 24 16:16:03 2007 +0200
+++ b/src/objacces.c	Tue Apr 24 16:49:40 2007 +0200
@@ -65,13 +65,14 @@
 }	
 
 
-UNS32 getODentry( CO_Data* d, 
+UNS32 _getODentry( CO_Data* d, 
                   UNS16 wIndex,
 		  UNS8 bSubindex,
 		  void * pDestData,
 		  UNS8 * pExpectedSize,
 		  UNS8 * pDataType,
-		  UNS8 checkAccess)
+		  UNS8 checkAccess,
+		  UNS8 endianize)
 { /* DO NOT USE MSG_ERR because the macro may send a PDO -> infinite loop if it fails. */
   UNS32 errorCode;
   UNS8 szData;
@@ -102,7 +103,7 @@
   	(*pDataType == visible_string && *pExpectedSize < szData)) {/* We allow to fetch a shorter string than expected */
      
 #  ifdef CANOPEN_BIG_ENDIAN
-     if(*pDataType > boolean && *pDataType < visible_string) {
+     if(endianize && *pDataType > boolean && *pDataType < visible_string) {
        /* data must be transmited with low byte first */
        UNS8 i, j = 0;
        MSG_WAR(boolean, "data type ", *pDataType);
@@ -141,12 +142,49 @@
    }
 }
 
-UNS32 setODentry( CO_Data* d, 
+UNS32 getODentry( CO_Data* d, 
+                  UNS16 wIndex,
+		  UNS8 bSubindex,
+		  void * pDestData,
+		  UNS8 * pExpectedSize,
+		  UNS8 * pDataType,
+		  UNS8 checkAccess)
+{
+	return _getODentry( d, 
+                  wIndex,
+		  bSubindex,
+		  pDestData,
+		  pExpectedSize,
+		  pDataType,
+		  checkAccess,
+		  1);//endianize
+}
+
+UNS32 readLocalDict( CO_Data* d, 
+                  UNS16 wIndex,
+		  UNS8 bSubindex,
+		  void * pDestData,
+		  UNS8 * pExpectedSize,
+		  UNS8 * pDataType,
+		  UNS8 checkAccess)
+{
+		return _getODentry( d, 
+                  wIndex,
+		  bSubindex,
+		  pDestData,
+		  pExpectedSize,
+		  pDataType,
+		  checkAccess,
+		  0);//do not endianize
+}
+
+UNS32 _setODentry( CO_Data* d, 
                   UNS16 wIndex,
 		  UNS8 bSubindex, 
 		  void * pSourceData, 
 		  UNS8 * pExpectedSize, 
-		  UNS8 checkAccess)
+		  UNS8 checkAccess,
+		  UNS8 endianize)
 {
   UNS8 szData;
   UNS8 dataType;
@@ -178,7 +216,7 @@
   	(dataType == visible_string && *pExpectedSize < szData)) /* We allow to store a shorter string than entry size */
   {
       #ifdef CANOPEN_BIG_ENDIAN
-	      if(dataType > boolean && dataType < visible_string)
+	      if(endianize && dataType > boolean && dataType < visible_string)
 	      {
 			/* we invert the data source directly. This let us do range testing without */
 			/* additional temp variable */
@@ -216,6 +254,40 @@
   }
 }
 
+UNS32 setODentry( CO_Data* d, 
+                  UNS16 wIndex,
+		  UNS8 bSubindex, 
+		  void * pSourceData, 
+		  UNS8 * pExpectedSize, 
+		  UNS8 checkAccess)
+{
+	return _setODentry( d, 
+                  wIndex,
+		  bSubindex, 
+		  pSourceData, 
+		  pExpectedSize, 
+		  checkAccess,
+		  1);//endianize
+}
+
+UNS32 writeLocalDict( CO_Data* d, 
+                  UNS16 wIndex,
+		  UNS8 bSubindex, 
+		  void * pSourceData, 
+		  UNS8 * pExpectedSize, 
+		  UNS8 checkAccess)
+{
+	return _setODentry( d, 
+                  wIndex,
+		  bSubindex, 
+		  pSourceData, 
+		  pExpectedSize, 
+		  checkAccess,
+		  0);//do not endianize
+}
+
+
+
 
 const indextable * scanIndexOD (CO_Data* d, UNS16 wIndex, UNS32 *errorCode, ODCallback_t **Callback)
 {