main.c 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. #include <board.h>
  2. #include <rtthread.h>
  3. #include <drv_gpio.h>
  4. #include <drv_usbh.h>
  5. #include <dfs_fs.h>
  6. #include <sys/socket.h>
  7. #include <netdb.h>
  8. #include <unistd.h>
  9. #include "web.h"
  10. #include "fs.h"
  11. #include "power.h"
  12. #include "cfg.h"
  13. //https://embedded-rd.blog.csdn.net/article/details/109643188
  14. extern void lwip_sys_init(void);
  15. #ifdef BOARD_EVB_ATK
  16. #define LED0_PIN GET_PIN(F, 9)
  17. #define LED1_PIN GET_PIN(F, 10)
  18. #else
  19. #define LED0_PIN GET_PIN(E, 6)
  20. #endif
  21. static void led_init(void)
  22. {
  23. #ifdef BOARD_EVB_ATK
  24. rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);
  25. rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT);
  26. #else
  27. rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);
  28. #endif
  29. }
  30. static void led_toggle(void)
  31. {
  32. static rt_ssize_t v=PIN_LOW;
  33. #ifdef BOARD_EVB_ATK
  34. rt_pin_write(LED0_PIN, v);
  35. rt_pin_write(LED1_PIN, v);
  36. #else
  37. rt_pin_write(LED0_PIN, v);
  38. #endif
  39. v = (v==PIN_LOW)?PIN_HIGH:PIN_LOW;
  40. }
  41. static rt_device_t serial;
  42. static int log_init(void)
  43. {
  44. serial = rt_device_find("uart1");
  45. return 0;
  46. }
  47. static void log_print(char *ss)
  48. {
  49. rt_device_write(serial, 0, ss, (sizeof(ss)));
  50. }
  51. static int net_init(const char *ip, int port)
  52. {
  53. #define SERVER_PORT 8080
  54. #define BUFF_SIZE 128
  55. int sock, client_fd;
  56. struct sockaddr_in server_addr, client_addr;
  57. socklen_t client_addr_len;
  58. char buff[BUFF_SIZE];
  59. int bytes_read;
  60. int ret;
  61. /* ??socket */
  62. sock = socket(AF_INET, SOCK_STREAM, 0);
  63. if (sock == -1) {
  64. rt_kprintf("socket create failed!\n");
  65. return -1;
  66. }
  67. /* ??????? */
  68. server_addr.sin_family = AF_INET;
  69. server_addr.sin_port = htons(port);
  70. server_addr.sin_addr.s_addr = inet_addr(ip);
  71. /* ??????? */
  72. ret = bind(sock, (struct sockaddr *)&server_addr, sizeof(server_addr));
  73. if (ret == -1) {
  74. rt_kprintf("bind failed!\n");
  75. goto __exit;
  76. }
  77. /* ?????? */
  78. ret = listen(sock, 5);
  79. if (ret == -1) {
  80. rt_kprintf("listen failed!\n");
  81. goto __exit;
  82. }
  83. rt_kprintf("TCP server waiting for client on port %d...\n", port);
  84. /* ??????? */
  85. client_addr_len = sizeof(client_addr);
  86. client_fd = accept(sock, (struct sockaddr *)&client_addr, &client_addr_len);
  87. if (client_fd == -1) {
  88. rt_kprintf("accept failed!\n");
  89. goto __exit;
  90. }
  91. rt_kprintf("Client accepted!\n");
  92. /* ????????? */
  93. while (1) {
  94. bytes_read = recv(client_fd, buff, BUFF_SIZE, 0);
  95. if (bytes_read <= 0) {
  96. rt_kprintf("recv failed, errno=%d\n", errno);
  97. break;
  98. }
  99. /* ????????????? */
  100. ret = send(client_fd, buff, bytes_read, 0);
  101. if (ret < 0) {
  102. rt_kprintf("send failed, errno=%d\n", errno);
  103. break;
  104. }
  105. }
  106. __exit:
  107. if (client_fd >= 0) close(client_fd);
  108. if (sock >= 0) close(sock);
  109. return ret;
  110. }
  111. static int sd_mount(void)
  112. {
  113. int r=1,n=0;
  114. r = mmcsd_wait_cd_changed(500);
  115. if(r==MMCSD_HOST_PLUGED) {
  116. r = fs_mount("sd", 1);
  117. }
  118. else if(r==MMCSD_HOST_UNPLUGED) {
  119. r = fs_mount("sd", 0);
  120. }
  121. return r;
  122. }
  123. static int user_init(void)
  124. {
  125. int r,n=0;
  126. led_init();
  127. //rt_hw_lcd_init();
  128. //net_init("0.0.0.0", SERVER_PORT);
  129. power_init();
  130. while(n<10) {
  131. r = sd_mount();
  132. if(r<=0) {
  133. break;
  134. }
  135. n++;
  136. }
  137. web_init();
  138. return 0;
  139. }
  140. #define THRAD_MAX 3
  141. static int flags[THRAD_MAX];
  142. static void my_thread(void *arg)
  143. {
  144. int i,j,p=*(int*)arg;
  145. while(1) {
  146. for(i=0; i<10; i++) {
  147. while(j++<100000);
  148. }
  149. sleep(1);
  150. }
  151. }
  152. static void my_start(void)
  153. {
  154. int i;
  155. for(i=0; i<THRAD_MAX; i++) {
  156. flags[i] = i;
  157. rt_thread_t tid = rt_thread_create(NULL, my_thread, &flags[i], 2048, 5, 20);
  158. if(tid==NULL) {
  159. rt_kprintf("___ thread %d create failed\n", i);
  160. }
  161. rt_thread_startup(tid);
  162. }
  163. }
  164. int main(void)
  165. {
  166. user_init();
  167. while (1) {
  168. led_toggle();
  169. rt_thread_mdelay(500);
  170. }
  171. }