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 |