drivers/ec_device.c
changeset 19 a51289e6cb2d
parent 17 1b5aea4d5147
child 22 e8c2cd004e0b
equal deleted inserted replaced
18:5a42f6d1085c 19:a51289e6cb2d
   251    wurde. Wenn ja, wird diesem mit Hilfe eines Spin-Locks
   251    wurde. Wenn ja, wird diesem mit Hilfe eines Spin-Locks
   252    in den angegebenen Speicherbereich kopiert.
   252    in den angegebenen Speicherbereich kopiert.
   253 
   253 
   254    @param ecd EtherCAT-Gerät
   254    @param ecd EtherCAT-Gerät
   255    @param data Zeiger auf den Speicherbereich, in den die
   255    @param data Zeiger auf den Speicherbereich, in den die
   256    empfangenen Daten kopiert werden sollen
   256                empfangenen Daten kopiert werden sollen
   257    @param size Größe des angegebenen Speicherbereichs
       
   258 
   257 
   259    @return Anzahl der kopierten Bytes bei Erfolg, sonst < 0
   258    @return Anzahl der kopierten Bytes bei Erfolg, sonst < 0
   260 */
   259 */
   261 
   260 
   262 int EtherCAT_device_receive(EtherCAT_device_t *ecd,
   261 int EtherCAT_device_receive(EtherCAT_device_t *ecd,
   263                             unsigned char *data,
   262                             unsigned char *data)
   264                             unsigned int size)
   263 {
   265 {
       
   266   int cnt;
       
   267 
       
   268   if (ecd->state != ECAT_DS_RECEIVED)
   264   if (ecd->state != ECAT_DS_RECEIVED)
   269   {
   265   {
   270     EC_DBG(KERN_ERR "EtherCAT: receive - Nothing received!\n");
   266     EC_DBG(KERN_ERR "EtherCAT: receive - Nothing received!\n");
   271     return -1;
   267     return -1;
   272   }
   268   }
   273 
   269 
   274   cnt = min(ecd->rx_data_length, size);
   270   if (ecd->rx_data_length > ECAT_FRAME_BUFFER_SIZE)
   275   memcpy(data,ecd->rx_data, cnt);
   271   {
   276 
   272     EC_DBG(KERN_ERR "EtherCAT: receive - Reveived frame too long (%i Bytes)!\n",
   277   return cnt;
   273            ecd->rx_data_length);
       
   274     return -1;
       
   275   }
       
   276 
       
   277   memcpy(data, ecd->rx_data, ecd->rx_data_length);
       
   278 
       
   279   return ecd->rx_data_length;
   278 }
   280 }
   279 
   281 
   280 /***************************************************************/
   282 /***************************************************************/
   281 
   283 
   282 /**
   284 /**