amessage_decode_from_file.c 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #include <rtthread.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <dfs_posix.h>
  5. #include "amessage.pb-c.h"
  6. static void protobuf_decode_from_file(int argc, char *argv[])
  7. {
  8. rt_kprintf("---- Reading ---\n");
  9. // Get file size first
  10. int ret;
  11. struct stat buf;
  12. ret = stat("/amessage.onnx", &buf);
  13. if(ret == 0)
  14. {
  15. rt_kprintf("amessage.onnx file size = %d\n", buf.st_size);
  16. }
  17. else
  18. {
  19. rt_kprintf("amessage.onnx file not fonud\n");
  20. return;
  21. }
  22. // Read protobuf file
  23. size_t msg_len = buf.st_size;
  24. uint8_t buffer[128];
  25. int fd = open("/amessage.onnx", O_RDONLY);
  26. if (fd>= 0)
  27. {
  28. int size = read(fd, buffer, msg_len);
  29. close(fd);
  30. rt_kprintf("Read from file amessage.onnx \n");
  31. if (size < 0)
  32. {
  33. return ;
  34. }
  35. }
  36. {
  37. rt_kprintf("---- Decoding ---\n");
  38. AMessage* decode_msg;
  39. decode_msg = amessage__unpack(NULL, msg_len, buffer);
  40. if (decode_msg == NULL)
  41. {
  42. rt_kprintf("Error unpacking incoming message\n");
  43. return;
  44. }
  45. rt_kprintf("Received: a=%d b=%d \n",decode_msg->a, decode_msg->b); // required field
  46. amessage__free_unpacked(decode_msg, NULL);
  47. }
  48. return;
  49. }
  50. MSH_CMD_EXPORT(protobuf_decode_from_file, protobuf-c decode from file);