2
0

msgrs.c 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. #include <rtthread.h>
  2. #include "../ipmsg.h"
  3. #include <string.h>
  4. #define DBG_TAG "msgrs"
  5. #define DBG_LVL DBG_LOG
  6. #include <rtdbg.h>
  7. #if (defined(SOC_W600_A8xx))
  8. #include "wm_fwup.h"
  9. static T_BOOTER _booter;
  10. static int file_notify(struct ipmsg_filehandler *h, ipmsg_fileevent_t e, void *arg)
  11. {
  12. LOG_I("notify %d", e);
  13. switch (e)
  14. {
  15. case IPMSG_FE_OPEN:
  16. h->usrdata = 0;
  17. h->param = 0;
  18. break;
  19. case IPMSG_FE_COMPLETE:
  20. tls_fwup_img_update_header(&_booter);
  21. break;
  22. }
  23. return 0;
  24. }
  25. static int file_data(struct ipmsg_filehandler *h, void *buf, int size)
  26. {
  27. if (h->usrdata == 0)
  28. {
  29. memcpy(&_booter, buf, sizeof(_booter));
  30. tls_fwup_img_write(h->usrdata, (char*)buf + sizeof(_booter), size - sizeof(_booter));
  31. h->usrdata += (size - sizeof(_booter));
  32. }
  33. else
  34. {
  35. tls_fwup_img_write(h->usrdata, buf, size);
  36. h->usrdata += size;
  37. }
  38. return size;
  39. }
  40. #else
  41. static int file_notify(struct ipmsg_filehandler *h, ipmsg_fileevent_t e, void *arg)
  42. {
  43. LOG_I("notify %d", e);
  44. return 0;
  45. }
  46. static int file_data(struct ipmsg_filehandler *h, void *buf, int size)
  47. {
  48. LOG_I("data %d", size);
  49. return size;
  50. }
  51. #endif
  52. static void text_msg(ipmsg_t *im, uint32_t ip, const char *buf)
  53. {
  54. if (strncmp(buf, "rename ", 7) == 0)
  55. {
  56. ipmsg_user_set(im, buf + 7);
  57. ipmsg_msg_send(im, ip, "YiJingGaiLe");
  58. return;
  59. }
  60. if (strncmp(buf, "reboot", 7) == 0)
  61. {
  62. ipmsg_msg_send(im, ip, "ShaoHouChongQi");
  63. rt_thread_mdelay(100);
  64. rt_hw_cpu_reset();
  65. return;
  66. }
  67. ipmsg_msg_send(im, ip, "ShouDao");
  68. }
  69. static int fileattach_msg(ipmsg_t *im, ipmsg_filehandler_t *fh)
  70. {
  71. int ret = 0;
  72. fh->data = file_data;
  73. fh->notify = file_notify;
  74. return ret;
  75. }
  76. static const ipmsg_msghandler_t _h =
  77. {
  78. text_msg,
  79. fileattach_msg,
  80. };
  81. static void msg_server(void *p)
  82. {
  83. ipmsg_t im;
  84. rt_tick_t t = 0;
  85. while (1)
  86. {
  87. rt_thread_mdelay(5000);
  88. if (ipmsg_msgserver_init(&im, 2425) == 0)
  89. break;
  90. }
  91. LOG_D("login");
  92. ipmsg_login(&im);
  93. while (1)
  94. {
  95. if ((rt_tick_get() - t) > (RT_TICK_PER_SECOND * 60))
  96. {
  97. t = rt_tick_get();
  98. ipmsg_login(&im);
  99. }
  100. ipmsg_msg_recv(&im, 100, &_h);
  101. }
  102. ipmsg_msgserver_deinit(&im);
  103. }
  104. int ipmsg_msgrs_init(void)
  105. {
  106. rt_thread_t tid;
  107. int ret = -1;
  108. tid = rt_thread_create("ipmsg-m",
  109. msg_server,
  110. 0,
  111. 2048,
  112. 22,
  113. 20);
  114. if (tid)
  115. {
  116. ret = rt_thread_startup(tid);
  117. }
  118. return ret;
  119. }
  120. INIT_APP_EXPORT(ipmsg_msgrs_init);