capnp_decode_from_file.c 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #include <rtthread.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include "capnp_c.h"
  5. #include "myschema.capnp.h"
  6. static capn_text chars_to_text(const char *chars) {
  7. return (capn_text) {
  8. .len = (int) strlen(chars),
  9. .str = chars,
  10. .seg = NULL,
  11. };
  12. }
  13. void capnp_decode_from_file_entry(void* parameters)
  14. {
  15. uint8_t buf[4096];
  16. ssize_t sz = 0;
  17. const char *name = "Han Wu";
  18. const char *email = "wuhanstudio@domain.com";
  19. const char *school = "Huazhong Univ. of Sci. and Tech.";
  20. printf("--- Read from File ---\n");
  21. {
  22. // Read serialized object from file system.
  23. FILE *fp;
  24. // Get File Size
  25. fp = fopen("/person.bin", "rb");
  26. fseek(fp, 0L, SEEK_END);
  27. sz = ftell(fp);
  28. fseek(fp, 0L, SEEK_SET);
  29. fread(buf, sz, 1, fp);
  30. fclose(fp);
  31. }
  32. printf("\n");
  33. printf("--- Decoding ---\n");
  34. {
  35. struct capn rc;
  36. int init_mem_ret = capn_init_mem(&rc, buf, sz, 0 /* packed */);
  37. Person_ptr rroot;
  38. struct Person rp;
  39. // Read data out
  40. rroot.p = capn_getp(capn_root(&rc), 0 /* off */, 1 /* resolve */);
  41. read_Person(&rp, rroot);
  42. printf("Person ID: %d\n", rp.id);
  43. printf("Person Name: %s\n", rp.name.str);
  44. printf("Person Email: %s\n", rp.email.str);
  45. switch(rp.employment_which)
  46. {
  47. case Person_employment_unemployed:
  48. printf("Unemployed\n");
  49. break;
  50. case Person_employment_selfEmployed:
  51. printf("Self Employed\n");
  52. break;
  53. case Person_employment_employer:
  54. printf("Employer: %s\n", rp.employment.employer.str);
  55. break;
  56. case Person_employment_school:
  57. printf("School: %s\n", rp.employment.school.str);
  58. break;
  59. default:
  60. printf("Unknown Employment Status\n");
  61. break;
  62. }
  63. struct Person_PhoneNumber rpn0;
  64. get_Person_PhoneNumber(&rpn0, rp.phones, 0);
  65. printf("Phone Number 0: %s\n", rpn0.number.str);
  66. struct Person_PhoneNumber rpn1;
  67. get_Person_PhoneNumber(&rpn1, rp.phones, 1);
  68. printf("Phone Number 1: %s\n", rpn1.number.str);
  69. capn_free(&rc);
  70. }
  71. printf("\n");
  72. printf("\n");
  73. }
  74. static void capnp_decode_from_file(int argc,char *argv[])
  75. {
  76. rt_thread_t thread = rt_thread_create("capnp", capnp_decode_from_file_entry, RT_NULL, 10240, 25, 10);
  77. if(thread != RT_NULL)
  78. {
  79. rt_thread_startup(thread);
  80. rt_kprintf("[capnp] New thread capnp\n");
  81. }
  82. else
  83. {
  84. rt_kprintf("[capnp] Failed to create thread capnp\n");
  85. }
  86. }
  87. MSH_CMD_EXPORT(capnp_decode_from_file, capnp decode from file example)