master/canopen.c
changeset 657 7756b9f2eac2
parent 649 a4d3fffdaed7
child 739 4a02162a6301
equal deleted inserted replaced
656:370aa8c2d1b1 657:7756b9f2eac2
   296                                  )
   296                                  )
   297 {
   297 {
   298     off_t off = 0;
   298     off_t off = 0;
   299     unsigned int i;
   299     unsigned int i;
   300 
   300 
   301     if (entry->data_type == 0x0002 && entry->bit_length == 8) { // int8
   301     if (entry->data_type == 0x0002) { // int8
   302         off += sprintf(buffer + off, "%i\n", *((int8_t *) request->data));
   302         int8_t value;
   303     }
   303         if (entry->bit_length != 8)
   304     else if (entry->data_type == 0x0003 && entry->bit_length == 16) { // int16
   304             goto not_fit;
   305         off += sprintf(buffer + off, "%i\n", *((int16_t *) request->data));
   305         value = EC_READ_S8(request->data);
   306     }
   306         off += sprintf(buffer + off, "%i (0x%02X)\n", value, value);
   307     else if (entry->data_type == 0x0004 && entry->bit_length == 32) { // int32
   307     }
   308         off += sprintf(buffer + off, "%i\n", *((int32_t *) request->data));
   308     else if (entry->data_type == 0x0003) { // int16
   309     }
   309         int16_t value;
   310     else if (entry->data_type == 0x0005 && entry->bit_length == 8) { // uint8
   310         if (entry->bit_length != 16)
   311         off += sprintf(buffer + off, "%i\n", *((uint8_t *) request->data));
   311             goto not_fit;
   312     }
   312         value = EC_READ_S16(request->data);
   313     else if (entry->data_type == 0x0006 && entry->bit_length == 16) { // uint16
   313         off += sprintf(buffer + off, "%i (0x%04X)\n", value, value);
   314         off += sprintf(buffer + off, "%i\n", *((uint16_t *) request->data));
   314     }
   315     }
   315     else if (entry->data_type == 0x0004) { // int32
   316     else if (entry->data_type == 0x0007 && entry->bit_length == 32) { // uint32
   316         int32_t value;
   317         off += sprintf(buffer + off, "%i\n", *((uint32_t *) request->data));
   317         if (entry->bit_length != 32)
       
   318             goto not_fit;
       
   319         value = EC_READ_S16(request->data);
       
   320         off += sprintf(buffer + off, "%i (0x%08X)\n", value, value);
       
   321     }
       
   322     else if (entry->data_type == 0x0005) { // uint8
       
   323         uint8_t value;
       
   324         if (entry->bit_length != 8)
       
   325             goto not_fit;
       
   326         value = EC_READ_U8(request->data);
       
   327         off += sprintf(buffer + off, "%u (0x%02X)\n", value, value);
       
   328     }
       
   329     else if (entry->data_type == 0x0006) { // uint16
       
   330         uint16_t value;
       
   331         if (entry->bit_length != 16)
       
   332             goto not_fit;
       
   333         value = EC_READ_U16(request->data); 
       
   334         off += sprintf(buffer + off, "%u (0x%04X)\n", value, value);
       
   335     }
       
   336     else if (entry->data_type == 0x0007) { // uint32
       
   337         uint32_t value;
       
   338         if (entry->bit_length != 32)
       
   339             goto not_fit;
       
   340         value = EC_READ_U32(request->data);
       
   341         off += sprintf(buffer + off, "%i (0x%08X)\n", value, value);
   318     }
   342     }
   319     else if (entry->data_type == 0x0009) { // string
   343     else if (entry->data_type == 0x0009) { // string
   320         off += sprintf(buffer + off, "%s\n", request->data);
   344         off += sprintf(buffer + off, "%s\n", request->data);
   321     }
   345     }
   322     else {
   346     else {
   323         off += sprintf(buffer + off,
   347         off += sprintf(buffer + off, "Unknown data type %04X. Data:\n",
   324                 "Unknown data type %04X, bit size %u. Data:\n",
   348                 entry->data_type);
   325                 entry->data_type, entry->bit_length);
   349         goto raw_data;
   326         for (i = 0; i < request->size; i++)
   350     }
   327             off += sprintf(buffer + off, "%02X (%c)\n",
   351     return off;
   328                            request->data[i], request->data[i]);
   352 
   329     }
   353 not_fit:
   330 
   354     off += sprintf(buffer + off,
       
   355             "Invalid bit length %u for data type 0x%04X. Data:\n",
       
   356             entry->bit_length, entry->data_type);
       
   357 raw_data:
       
   358     for (i = 0; i < request->size; i++)
       
   359         off += sprintf(buffer + off, "%02X (%c)\n",
       
   360                 request->data[i], request->data[i]);
   331     return off;
   361     return off;
   332 }
   362 }
   333 
   363 
   334 /*****************************************************************************/
   364 /*****************************************************************************/
   335 
   365