gfabootlmast.c 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4. #include <errno.h>
  5. #include <unistd.h>
  6. #include <gfaserial.h>
  7. #include <gfamininetmst.h>
  8. #include <byteswap.h>
  9. #include "bl_commands.h"
  10. #include "gfabootlmast.h"
  11. /////////////////////////////////////////////////////////////////////////////
  12. uint8_t GfaBLM_BU_DataCheckSum(const void *pData, size_t nCbData)
  13. {
  14. uint8_t chk = 0;
  15. const uint8_t *pbData = (const uint8_t*)pData;
  16. while(nCbData--) {
  17. chk += *pbData++;
  18. }
  19. return chk;
  20. }
  21. /////////////////////////////////////////////////////////////////////////////
  22. size_t GfaBLM_BuildCmdDataPacket(const char *pszCmd, const void *pCmdData, size_t nCbCmdData, void *pPacket, size_t nCbPacket, bool bAddLenAndCheck)
  23. {
  24. size_t nLen = strlen(pszCmd);
  25. uint8_t *pbPacket = (uint8_t*)pPacket;
  26. if(nCbPacket < (nLen + nCbCmdData + ((pCmdData && nCbCmdData && bAddLenAndCheck) ? 2 : 0)))
  27. return 0;
  28. memcpy(pbPacket, pszCmd, nLen);
  29. pbPacket += nLen;
  30. if(pCmdData && nCbCmdData)
  31. {
  32. if(bAddLenAndCheck)
  33. {
  34. *pbPacket++ = nCbCmdData + 2;
  35. *pbPacket++ = GfaBLM_BU_DataCheckSum(pCmdData, nCbCmdData);
  36. nLen += 2;
  37. }
  38. memcpy(pbPacket, pCmdData, nCbCmdData);
  39. nLen += nCbCmdData;
  40. }
  41. return nLen;
  42. }