buffer.c 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. #include <gfambrtucom.h>
  2. #include "driverlib/sw_crc.h"
  3. /////////////////////////////////////////////////////////////////////////////
  4. /////////////////////////////////////////////////////////////////////////////
  5. void GfaBufCpyUnaligned_uint16_LE(void *pTo, const void *pFrom, size_t nCntWords)
  6. {
  7. size_t i, j;
  8. uint8_t *p1 = (uint8_t*)pTo;
  9. const uint8_t *p2 = (const uint8_t*)pFrom;
  10. for(i = 0; i < nCntWords; i++)
  11. {
  12. p2 += sizeof(uint16_t);
  13. for(j = 0; j < sizeof(uint16_t); j++)
  14. {
  15. *p1++ = *--p2;
  16. }
  17. p2 += sizeof(uint16_t);
  18. }
  19. }
  20. void GfaBufCpyUnaligned_uint16_BE(void *pTo, const void *pFrom, size_t nCntWords)
  21. {
  22. size_t i, j;
  23. uint8_t *p1 = (uint8_t*)pTo;
  24. const uint8_t *p2 = (const uint8_t*)pFrom;
  25. for(i = 0; i < nCntWords; i++)
  26. {
  27. for(j = 0; j < sizeof(uint16_t); j++)
  28. {
  29. *p1++ = *p2++;
  30. }
  31. }
  32. }
  33. /////////////////////////////////////////////////////////////////////////////
  34. void GfaBufCpyUnaligned_uint32_LE(void *pTo, const void *pFrom, size_t nCntDWords)
  35. {
  36. size_t i, j;
  37. uint8_t *p1 = (uint8_t*)pTo;
  38. const uint8_t *p2 = (const uint8_t*)pFrom;
  39. for(i = 0; i < nCntDWords; i++)
  40. {
  41. p2 += sizeof(uint32_t);
  42. for(j = 0; j < sizeof(uint32_t); j++)
  43. {
  44. *p1++ = *--p2;
  45. }
  46. p2 += sizeof(uint32_t);
  47. }
  48. }
  49. void GfaBufCpyUnaligned_uint32_BE(void *pTo, const void *pFrom, size_t nCntDWords)
  50. {
  51. size_t i, j;
  52. uint8_t *p1 = (uint8_t*)pTo;
  53. const uint8_t *p2 = (const uint8_t*)pFrom;
  54. for(i = 0; i < nCntDWords; i++)
  55. {
  56. for(j = 0; j < sizeof(uint32_t); j++)
  57. {
  58. *p1++ = *p2++;
  59. }
  60. }
  61. }
  62. /////////////////////////////////////////////////////////////////////////////
  63. uint16_t GfaBufGetUnaligned_uint16_LE(const void *pData)
  64. {
  65. uint16_t nRet;
  66. GfaBufCpyUnaligned_uint16_LE(&nRet, pData, 1);
  67. return nRet;
  68. }
  69. uint16_t GfaBufGetUnaligned_uint16_BE(const void *pData)
  70. {
  71. uint16_t nRet;
  72. GfaBufCpyUnaligned_uint16_BE(&nRet, pData, 1);
  73. return nRet;
  74. }
  75. /////////////////////////////////////////////////////////////////////////////
  76. void GfaBufSetUnaligned_uint16_LE(void *pData, uint16_t nVal)
  77. {
  78. GfaBufCpyUnaligned_uint16_LE(pData, &nVal, 1);
  79. }
  80. void GfaBufSetUnaligned_uint16_BE(void *pData, uint16_t nVal)
  81. {
  82. GfaBufCpyUnaligned_uint16_BE(pData, &nVal, 1);
  83. }
  84. /////////////////////////////////////////////////////////////////////////////
  85. uint32_t GfaBufGetUnaligned_uint32_LE(const void *pData)
  86. {
  87. uint32_t nRet;
  88. GfaBufCpyUnaligned_uint32_LE(&nRet, pData, 1);
  89. return nRet;
  90. }
  91. uint32_t GfaBufGetUnaligned_uint32_BE(const void *pData)
  92. {
  93. uint32_t nRet;
  94. GfaBufCpyUnaligned_uint32_BE(&nRet, pData, 1);
  95. return nRet;
  96. }
  97. /////////////////////////////////////////////////////////////////////////////
  98. void GfaBufSetUnaligned_uint32_LE(void *pData, uint16_t nVal)
  99. {
  100. GfaBufCpyUnaligned_uint32_LE(pData, &nVal, 1);
  101. }
  102. void GfaBufSetUnaligned_uint32_BE(void *pData, uint16_t nVal)
  103. {
  104. GfaBufCpyUnaligned_uint32_BE(pData, &nVal, 1);
  105. }
  106. /////////////////////////////////////////////////////////////////////////////
  107. float GfaBufGetUnaligned_float(const void *pData)
  108. {
  109. float fVal;
  110. uint8_t *p1 = (uint8_t*)pData;
  111. uint8_t *p2 = (uint8_t*)&fVal;
  112. memcpy(p2, p1, sizeof(float));
  113. return fVal;
  114. }
  115. /////////////////////////////////////////////////////////////////////////////
  116. void GfaBufSetUnaligned_float(void *pData, float fVal)
  117. {
  118. uint8_t *p1 = (uint8_t*)pData;
  119. uint8_t *p2 = (uint8_t*)&fVal;
  120. memcpy(p1, p2, sizeof(float));
  121. }
  122. /////////////////////////////////////////////////////////////////////////////
  123. double GfaBufGetUnaligned_double(const void *pData)
  124. {
  125. double fVal;
  126. uint8_t *p1 = (uint8_t*)pData;
  127. uint8_t *p2 = (uint8_t*)&fVal;
  128. memcpy(p2, p1, sizeof(double));
  129. return fVal;
  130. }
  131. /////////////////////////////////////////////////////////////////////////////
  132. void GfaBufSetUnaligned_double(void *pData, double fVal)
  133. {
  134. uint8_t *p1 = (uint8_t*)pData;
  135. uint8_t *p2 = (uint8_t*)&fVal;
  136. memcpy(p1, p2, sizeof(double));
  137. }
  138. /////////////////////////////////////////////////////////////////////////////
  139. bool GfaBufVerifyCRC(const void *pData, size_t nCbData, const void *pCRC)
  140. {
  141. uint16_t nCrc = Crc16(0xFFFF, (const uint8_t*)pData, nCbData);
  142. const uint8_t *pCrc = (const uint8_t*)pCRC;
  143. return ((pCrc[0] == (uint8_t)(nCrc & 0xff)) &&
  144. (pCrc[1] == (uint8_t)(nCrc >> 8)));
  145. }
  146. /////////////////////////////////////////////////////////////////////////////
  147. void GfaBufSetCRC(const void *pData, size_t nCbData, void *pCRC)
  148. {
  149. uint16_t nCrc = Crc16(0xFFFF, (const uint8_t*)pData, nCbData);
  150. uint8_t *pCrc = (uint8_t*)pCRC;
  151. pCrc[0] = (uint8_t)(nCrc & 0xff);
  152. pCrc[1] = (uint8_t)(nCrc >> 8);
  153. }