esp-knx-ip-conversion.cpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /**
  2. * esp-knx-ip library for KNX/IP communication on an ESP8266
  3. * Author: Nico Weichbrodt <envy>
  4. * License: MIT
  5. */
  6. #include "esp-knx-ip.h"
  7. /**
  8. * Conversion functions
  9. */
  10. bool ESPKNXIP::data_to_bool(uint8_t *data)
  11. {
  12. return (data[0] & 0x01) == 1 ? true : false;
  13. }
  14. int8_t ESPKNXIP::data_to_1byte_int(uint8_t *data)
  15. {
  16. return (int8_t)data[1];
  17. }
  18. uint8_t ESPKNXIP::data_to_1byte_uint(uint8_t *data)
  19. {
  20. return data[1];
  21. }
  22. int16_t ESPKNXIP::data_to_2byte_int(uint8_t *data)
  23. {
  24. return (int16_t)((data[1] << 8) | data[2]);
  25. }
  26. uint16_t ESPKNXIP::data_to_2byte_uint(uint8_t *data)
  27. {
  28. return (uint16_t)((data[1] << 8) | data[2]);
  29. }
  30. float ESPKNXIP::data_to_2byte_float(uint8_t *data)
  31. {
  32. //uint8_t sign = (data[1] & 0b10000000) >> 7;
  33. uint8_t expo = (data[1] & 0b01111000) >> 3;
  34. int16_t mant = ((data[1] & 0b10000111) << 8) | data[2];
  35. return 0.01f * mant * pow(2, expo);
  36. }
  37. time_of_day_t ESPKNXIP::data_to_3byte_time(uint8_t *data)
  38. {
  39. time_of_day_t time;
  40. time.weekday = (weekday_t)((data[1] & 0b11100000) >> 5);
  41. time.hours = (data[1] & 0b00011111);
  42. time.minutes = (data[2] & 0b00111111);
  43. time.seconds = (data[3] & 0b00111111);
  44. return time;
  45. }
  46. date_t ESPKNXIP::data_to_3byte_data(uint8_t *data)
  47. {
  48. date_t date;
  49. date.day = (data[1] & 0b00011111);
  50. date.month = (data[2] & 0b00001111);
  51. date.year = (data[3] & 0b01111111);
  52. return date;
  53. }
  54. color_t ESPKNXIP::data_to_3byte_color(uint8_t *data)
  55. {
  56. color_t color;
  57. color.red = data[1];
  58. color.green = data[2];
  59. color.blue = data[3];
  60. return color;
  61. }
  62. int32_t ESPKNXIP::data_to_4byte_int(uint8_t *data)
  63. {
  64. return (int32_t)((data[1] << 24) | (data[2] << 16) | (data[3] << 8) | (data[4] << 0));
  65. }
  66. uint32_t ESPKNXIP::data_to_4byte_uint(uint8_t *data)
  67. {
  68. return (uint32_t)((data[1] << 24) | (data[2] << 16) | (data[3] << 8) | (data[4] << 0));
  69. }
  70. float ESPKNXIP::data_to_4byte_float(uint8_t *data)
  71. {
  72. return (float)((data[1] << 24) | (data[2] << 16) | (data[3] << 8) |data[4]);
  73. }