src/sdo.c
changeset 666 9febdd6fdc71
parent 665 90e6cf84a0d7
child 667 f48424ce2a5e
equal deleted inserted replaced
665:90e6cf84a0d7 666:9febdd6fdc71
   237  **
   237  **
   238  ** @return
   238  ** @return
   239  **/
   239  **/
   240 UNS32 objdictToSDOline (CO_Data* d, UNS8 line)
   240 UNS32 objdictToSDOline (CO_Data* d, UNS8 line)
   241 {
   241 {
   242 	UNS32  size = 0;
   242     UNS32  size = SDO_MAX_LENGTH_TRANSFERT;
   243 	UNS8  dataType;
   243 	UNS8  dataType;
   244 	UNS32 errorCode;
   244 	UNS32 errorCode;
   245 
   245 
   246 	MSG_WAR(0x3A05, "objdict->line index : ", d->transfers[line].index);
   246 	MSG_WAR(0x3A05, "objdict->line index : ", d->transfers[line].index);
   247 	MSG_WAR(0x3A06, "  subIndex : ", d->transfers[line].subIndex);
   247 	MSG_WAR(0x3A06, "  subIndex : ", d->transfers[line].subIndex);
   248 
   248 
   249 #ifdef SDO_DYNAMIC_BUFFER_ALLOCATION
   249 #ifdef SDO_DYNAMIC_BUFFER_ALLOCATION
   250 	//TODO: Read the size of the object. Depending o it put data into data or dynamicData
   250     /* Try to use the static buffer.                                            */
   251 	errorCode = getODentry(d, 	d->transfers[line].index,
   251 	errorCode = getODentry(d, 	d->transfers[line].index,
   252 			d->transfers[line].subIndex,
   252 			d->transfers[line].subIndex,
   253 			(void *)d->transfers[line].data,
   253 			(void *)d->transfers[line].data,
   254 			&size, &dataType, 1);
   254 			&size, &dataType, 1);
       
   255     if (errorCode == SDOABT_OUT_OF_MEMORY) {
       
   256         /* The static buffer is too small, try again using a dynamic buffer.      *
       
   257         * 'size' now contains the real size of the requested object.             */
       
   258         if (size <= SDO_DYNAMIC_BUFFER_ALLOCATION_SIZE) {
       
   259             d->transfers[line].dynamicData = (UNS8 *) malloc(size * sizeof(UNS8));
       
   260             if (d->transfers[line].dynamicData != NULL) {
       
   261                 d->transfers[line].dynamicDataSize = size;
       
   262                 errorCode = getODentry(d,
       
   263                 d->transfers[line].index,
       
   264                 d->transfers[line].subIndex,
       
   265                 (void *) d->transfers[line].dynamicData,
       
   266                 &d->transfers[line].dynamicDataSize,
       
   267                 &dataType,
       
   268                 1);
       
   269             }
       
   270         }
       
   271     }
   255 #else //SDO_DYNAMIC_BUFFER_ALLOCATION
   272 #else //SDO_DYNAMIC_BUFFER_ALLOCATION
   256 	errorCode = getODentry(d, 	d->transfers[line].index,
   273 	errorCode = getODentry(d, 	d->transfers[line].index,
   257 			d->transfers[line].subIndex,
   274 			d->transfers[line].subIndex,
   258 			(void *)d->transfers[line].data,
   275 			(void *)d->transfers[line].data,
   259 			&size, &dataType, 1);
   276 			&size, &dataType, 1);