You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

637 lines
22 KiB

1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
  1. #include "basic/zble_module.h"
  2. #include "basic/zdatachannel_service.h"
  3. #include "znordic.h"
  4. //
  5. #include <stdarg.h>
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <string.h>
  9. //
  10. #include "app_uart.h"
  11. #include "basic/ssd1306/driver_ssd1306_basic.h"
  12. #include "basic\zdatachannel_service.h"
  13. #include "one_conduction/one_conduction_board.h"
  14. #include "three_lead\three_lead_board.h"
  15. #if defined(UART_PRESENT)
  16. #include "nrf_uart.h"
  17. #endif
  18. #if defined(UARTE_PRESENT)
  19. #include "nrf_uarte.h"
  20. #endif
  21. #if 0
  22. static void test_tx_timer_cb(void* p_context) {
  23. static uint32_t data;
  24. data++;
  25. ZLOGI("tim cb %d", data);
  26. // ThreeLeadECG_sdcard_connect2_ext_usb_sdcard_driver_ic_reset();
  27. }
  28. extern uint32_t g_nrf_log_tx_pin;
  29. APP_TIMER_DEF(m_test_tx_timer);
  30. void main() {
  31. APP_SCHED_INIT(APP_TIMER_SCHED_EVENT_DATA_SIZE, 20);
  32. ThreeLeadECG_beep_init();
  33. ThreeLeadECG_sdcard_base_init();
  34. znordic_init();
  35. NRF_LOG_INFO("compile time :%s %d", __TIME__, APP_TIMER_TICKS(100));
  36. ZERROR_CHECK(app_timer_create(&m_test_tx_timer, APP_TIMER_MODE_REPEATED, test_tx_timer_cb));
  37. ZERROR_CHECK(app_timer_start(m_test_tx_timer, APP_TIMER_TICKS(3000), NULL));
  38. znordic_loop();
  39. }
  40. #endif
  41. // EEPROM_TEST
  42. #if 1
  43. static void test_tx_timer_cb(void* p_context) {
  44. static uint32_t data;
  45. data++;
  46. // ZLOGI("test_tx_timer_cb %d", data);
  47. static uint8_t eepromw_test_data[256];
  48. static uint8_t eepromw_rx_data[256];
  49. for (size_t i = 0; i < 256; i++) {
  50. eepromw_test_data[i] = i;
  51. }
  52. // SingleLeadECG_eeprom_write(0, eepromw_test_data, 256);
  53. SingleLeadECG_eeprom_read(0, eepromw_rx_data, 256);
  54. // for (size_t i = 0; i < 256; i++) {
  55. // ZLOGI("eepromw_rx_data[%d] = %d", i, eepromw_rx_data[i]);
  56. // NRF_LOG_INTERNAL_FLUSH();
  57. // }
  58. }
  59. extern uint32_t g_nrf_log_tx_pin;
  60. APP_TIMER_DEF(m_test_tx_timer);
  61. void main() {
  62. APP_SCHED_INIT(APP_TIMER_SCHED_EVENT_DATA_SIZE, 20);
  63. znordic_init();
  64. // SingleLeadECG_beep_init();
  65. // SingleLeadECG_beep_set_state(false);
  66. NRF_LOG_INFO("compile time :%s %d", __TIME__, APP_TIMER_TICKS(100));
  67. NRF_LOG_INTERNAL_FLUSH();
  68. SingleLeadECG_eeprom_init();
  69. // nrf_delay_ms(20);
  70. // SingleLeadECG_eeprom_read(0, eepromw_rx_data, 256);
  71. // for (size_t i = 0; i < 256; i++) {
  72. // ZLOGI("eepromw_rx_data[%d] = %d", i, eepromw_rx_data[i]);
  73. // NRF_LOG_INTERNAL_FLUSH();
  74. // }
  75. ZERROR_CHECK(app_timer_create(&m_test_tx_timer, APP_TIMER_MODE_REPEATED, test_tx_timer_cb));
  76. ZERROR_CHECK(app_timer_start(m_test_tx_timer, APP_TIMER_TICKS(100), NULL));
  77. znordic_loop();
  78. }
  79. #endif
  80. /*******************************************************************************
  81. * +LED测试 *
  82. *******************************************************************************/
  83. #if 0
  84. const unsigned char gImage_0[1024] = { /* 0X22,0X01,0X80,0X00,0X40,0X00, */
  85. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  86. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  87. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  88. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  89. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  90. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  91. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  92. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  93. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XF0,
  94. 0XF8,0XFC,0X1E,0X0E,0X0E,0X0E,0X1E,0XFC,0XF8,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,
  95. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  96. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  97. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  98. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  99. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  100. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  101. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,
  102. 0X03,0X07,0X0F,0X0E,0X0E,0X0E,0X0F,0X07,0X03,0X01,0X00,0X00,0X00,0X00,0X00,0X00,
  103. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  104. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  105. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  106. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  107. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  108. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  109. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  110. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  111. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  112. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  113. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  114. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  115. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  116. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  117. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  118. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  119. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  120. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  121. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  122. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  123. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  124. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  125. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  126. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  127. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  128. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  129. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  130. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  131. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  132. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  133. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  134. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  135. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  136. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  137. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  138. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  139. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  140. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  141. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  142. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  143. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  144. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  145. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  146. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  147. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  148. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  149. };
  150. static void test_tx_timer_cb(void* p_context) {
  151. static uint32_t data;
  152. data++;
  153. ZLOGI("test_tx_timer_cb %d", data);
  154. SingleLeadECG_led_green_set_state(data % 2 == 0);
  155. SingleLeadECG_led_blue_set_state(data % 3 == 0);
  156. }
  157. extern uint32_t g_nrf_log_tx_pin;
  158. APP_TIMER_DEF(m_test_tx_timer);
  159. int main() {
  160. APP_SCHED_INIT(APP_TIMER_SCHED_EVENT_DATA_SIZE, 20);
  161. znordic_init();
  162. NRF_LOG_INFO("compile time :%s %d", __TIME__, APP_TIMER_TICKS(100));
  163. NRF_LOG_INTERNAL_FLUSH();
  164. SingleLeadECG_screen_init();
  165. ssd1306_basic_init(SSD1306_INTERFACE_SPI, SSD1306_ADDR_SA0_0);
  166. ssd1306_basic_display_on();
  167. // ssd1306_basic_string(0, 0, "123456789123456789123", 21, 0, SSD1306_FONT_12);
  168. // ssd1306_basic_string(0, 16, "123456789123456789123", 21, 0, SSD1306_FONT_12);
  169. // ssd1306_basic_string(0, 32, "123456789123456789123", 21, 0, SSD1306_FONT_12);
  170. // ssd1306_basic_string(0, 48, "123456789123456789123", 21, 0, SSD1306_FONT_12);
  171. // gImage_0
  172. ssd1306_basic_draw_screen(gImage_0);
  173. // for (size_t i = 0; i < 127; i++) {
  174. // for (size_t j = 0; j < 64; j++)
  175. // {
  176. // ssd1306_basic_write_point(i, j, 1);
  177. // }
  178. // }
  179. ssd1306_gram_update(ssd1306_handler());
  180. SingleLeadECG_led_init();
  181. ZERROR_CHECK(app_timer_create(&m_test_tx_timer, APP_TIMER_MODE_REPEATED, test_tx_timer_cb));
  182. ZERROR_CHECK(app_timer_start(m_test_tx_timer, APP_TIMER_TICKS(100), NULL));
  183. znordic_loop();
  184. }
  185. #endif
  186. /*******************************************************************************
  187. * ECG *
  188. *******************************************************************************/
  189. #if 0
  190. #define UART_TX_BUF_SIZE 256 /**< UART TX buffer size. */
  191. #define UART_RX_BUF_SIZE 256 /**< UART RX buffer size. */
  192. uint32_t err_code;
  193. app_uart_comm_params_t const comm_params = //
  194. {
  195. .rx_pin_no = UART_PIN_DISCONNECTED,
  196. .tx_pin_no = 41,
  197. .rts_pin_no = UART_PIN_DISCONNECTED,
  198. .cts_pin_no = UART_PIN_DISCONNECTED,
  199. .flow_control = APP_UART_FLOW_CONTROL_DISABLED,
  200. .use_parity = false,
  201. .baud_rate = NRF_UARTE_BAUDRATE_921600,
  202. };
  203. void uart_error_handle(app_uart_evt_t* p_event) {}
  204. void uartinit() {
  205. APP_UART_FIFO_INIT(&comm_params, UART_RX_BUF_SIZE, UART_TX_BUF_SIZE, uart_error_handle, APP_IRQ_PRIORITY_LOWEST, err_code);
  206. APP_ERROR_CHECK(err_code);
  207. }
  208. void zchip_log(const char* fmt, ...) {
  209. static char tx[256] = {0};
  210. va_list args;
  211. va_start(args, fmt);
  212. vsprintf(tx, fmt, args);
  213. for (size_t i = 0; i < strlen(tx); i++) {
  214. app_uart_put(tx[i]);
  215. }
  216. va_end(args);
  217. }
  218. static void test_tx_timer_cb(void* p_context) {
  219. static uint32_t data;
  220. data++;
  221. // SingleLeadECG_ecg_nlod_get_connected_state();
  222. // SingleLeadECG_ecg_plod_get_connected_state();
  223. // SingleLeadECG_ecg_plod_get_ecg_val();
  224. // ZLOGI("%d nlod %d plod %d ecg:%d", data, SingleLeadECG_ecg_nlod_get_connected_state(), SingleLeadECG_ecg_plod_get_connected_state(), SingleLeadECG_ecg_plod_get_ecg_val());
  225. // ZLOGI("%d,%d,%d", SingleLeadECG_ecg_nlod_get_connected_state(), SingleLeadECG_ecg_plod_get_connected_state(), SingleLeadECG_ecg_plod_get_ecg_val());
  226. zchip_log("%d,%d,%d\n", SingleLeadECG_ecg_nlod_get_connected_state(), SingleLeadECG_ecg_plod_get_connected_state(), SingleLeadECG_ecg_plod_get_ecg_val());
  227. // app_uart_put('c');
  228. // app_uart_put('c');
  229. // app_uart_put('c');
  230. // app_uart_put('c');
  231. // app_uart_put('c');
  232. // NRF_LOG_INFO("......");
  233. }
  234. extern uint32_t g_nrf_log_tx_pin;
  235. APP_TIMER_DEF(m_test_tx_timer);
  236. void main() {
  237. // g_nrf_log_tx_pin = 41;
  238. APP_SCHED_INIT(APP_TIMER_SCHED_EVENT_DATA_SIZE, 20);
  239. znordic_init();
  240. SingleLeadECG_adc_module_init();
  241. uartinit();
  242. NRF_LOG_INFO("compile time :%s %d", __TIME__, APP_TIMER_TICKS(100));
  243. NRF_LOG_INTERNAL_FLUSH();
  244. SingleLeadECG_ecg_init();
  245. ZERROR_CHECK(app_timer_create(&m_test_tx_timer, APP_TIMER_MODE_REPEATED, test_tx_timer_cb));
  246. ZERROR_CHECK(app_timer_start(m_test_tx_timer, APP_TIMER_TICKS(5), NULL));
  247. znordic_loop();
  248. }
  249. #endif
  250. /*******************************************************************************
  251. * *
  252. *******************************************************************************/
  253. #if 0
  254. extern uint32_t g_nrf_log_tx_pin;
  255. APP_TIMER_DEF(m_test_tx_timer);
  256. ZDATACHANNEL_DEF(m_zhrs, 2 /*回调事件优先��?*/, 1 /*client num*/);
  257. static const char* hex2str(const uint8_t* data, int32_t len) {
  258. static char rx[64] = {0};
  259. memset(rx, 0, sizeof(rx));
  260. for (int32_t i = 0; i < len; i++) {
  261. sprintf(rx + i * 2, "%02X", data[i]);
  262. }
  263. return rx;
  264. }
  265. static void zdatachannel_data_handler(zdatachannel_evt_t* p_evt) {
  266. /**
  267. * @brief ?
  268. */
  269. if (p_evt->type == ZDATACHANNEL_EVT_RX_DATA) {
  270. ZLOGI("rx:%s", hex2str(p_evt->params.rx_data.p_data, p_evt->params.rx_data.length));
  271. }
  272. }
  273. static void on_service_init(void) {
  274. /**
  275. * @brief ?
  276. */
  277. ZLOGI("init zdatachannel service");
  278. zdatachannel_init_t zdatachannle_init;
  279. memset(&zdatachannle_init, 0, sizeof(zdatachannle_init));
  280. zdatachannle_init.data_handler = zdatachannel_data_handler;
  281. ZERROR_CHECK(zdatachannel_init(&m_zhrs, &zdatachannle_init));
  282. }
  283. void main() {
  284. APP_SCHED_INIT(APP_TIMER_SCHED_EVENT_DATA_SIZE, 20);
  285. ThreeLeadECG_sdcard_base_init();
  286. znordic_init(0, 20);
  287. NRF_LOG_INFO("compile time :%s", __TIME__);
  288. NRF_LOG_INFO("Version :%d", VERSION);
  289. NRF_LOG_INFO("Manufacturer :%s", MANUFACTURER_NAME);
  290. static zble_module_cfg_t cfg = //
  291. {
  292. .deviceName = BLE_NAME,
  293. .on_service_init = on_service_init,
  294. };
  295. zble_module_init(&cfg);
  296. zble_module_start_adv();
  297. znordic_loop();
  298. }
  299. #endif
  300. #if 0
  301. /*******************************************************************************
  302. * ADCTEST *
  303. *******************************************************************************/
  304. static void test_tx_timer_cb(void* p_context) {
  305. static uint32_t data;
  306. data++;
  307. // ZLOGI("test_tx_timer_cb %d", data);
  308. static uint8_t eepromw_test_data[256];
  309. static uint8_t eepromw_rx_data[256];
  310. for (size_t i = 0; i < 256; i++) {
  311. eepromw_test_data[i] = i;
  312. }
  313. int16_t adc = SingleLeadECG_battery_get_adc_val();
  314. int16_t mv = adc * 1.0 / 4096 * 3.6 * 1000 / 2.0 * 3;
  315. ZLOGI("battery:%d", mv);
  316. }
  317. extern uint32_t g_nrf_log_tx_pin;
  318. APP_TIMER_DEF(m_test_tx_timer);
  319. void main() {
  320. APP_SCHED_INIT(APP_TIMER_SCHED_EVENT_DATA_SIZE, 20);
  321. znordic_init();
  322. SingleLeadECG_adc_module_init();
  323. SingleLeadECG_battery_init();
  324. // SingleLeadECG_beep_init();
  325. // SingleLeadECG_beep_set_state(false);
  326. NRF_LOG_INFO("compile time :%s %d", __TIME__, APP_TIMER_TICKS(100));
  327. NRF_LOG_INTERNAL_FLUSH();
  328. // nrf_delay_ms(20);
  329. // SingleLeadECG_eeprom_read(0, eepromw_rx_data, 256);
  330. // for (size_t i = 0; i < 256; i++) {
  331. // ZLOGI("eepromw_rx_data[%d] = %d", i, eepromw_rx_data[i]);
  332. // NRF_LOG_INTERNAL_FLUSH();
  333. // }
  334. ZERROR_CHECK(app_timer_create(&m_test_tx_timer, APP_TIMER_MODE_REPEATED, test_tx_timer_cb));
  335. ZERROR_CHECK(app_timer_start(m_test_tx_timer, APP_TIMER_TICKS(100), NULL));
  336. znordic_loop();
  337. }
  338. #endif
  339. #if 0
  340. /*******************************************************************************
  341. * 3-ADS1293- *
  342. *******************************************************************************/
  343. extern uint32_t g_nrf_log_tx_pin;
  344. APP_TIMER_DEF(m_test_tx_timer);
  345. static void zdatachanel_send_log(const char* fmt, ...) {
  346. static char tx[256] = {0};
  347. static uint16_t len = 0;
  348. va_list args;
  349. va_start(args, fmt);
  350. len = vsprintf(tx, fmt, args);
  351. zdatachannel_data_send((uint8_t*)tx, &len);
  352. va_end(args);
  353. }
  354. static const char* dumplodstate(uint16_t lodstate) {
  355. static char buf[64];
  356. memset(buf, 0, sizeof(buf));
  357. /**
  358. * @brief
  359. * 1111_0000_0000_0000
  360. */
  361. sprintf(buf, "%d%d%d%d_%d%d%d%d_%d%d%d%d_%d%d%d%d", //
  362. lodstate >> 15 & 0x1, lodstate >> 14 & 0x1, lodstate >> 13 & 0x1, lodstate >> 12 & 0x1, //
  363. lodstate >> 11 & 0x1, lodstate >> 10 & 0x1, lodstate >> 9 & 0x1, lodstate >> 8 & 0x1, //
  364. lodstate >> 7 & 0x1, lodstate >> 6 & 0x1, lodstate >> 5 & 0x1, lodstate >> 4 & 0x1, //
  365. lodstate >> 3 & 0x1, lodstate >> 2 & 0x1, lodstate >> 1 & 0x1, lodstate >> 0 & 0x1);
  366. return buf;
  367. }
  368. static void test_tx_timer_cb(void* p_context) {
  369. static uint32_t data;
  370. data++;
  371. uint16_t val;
  372. ThreeLeadECG_ads1293_get_lod_state(&val);
  373. #if 0
  374. uint32_t sample0;
  375. uint32_t sample1;
  376. uint32_t sample2;
  377. ThreeLeadECG_ads1293_sample(&sample0, &sample1, &sample2);
  378. zdatachanel_send_log("%d,%d,%d\n", sample0, sample1, sample2);
  379. #endif
  380. uint32_t sample0;
  381. uint32_t sample1;
  382. uint32_t sample2;
  383. uint32_t sample10;
  384. uint32_t sample11;
  385. uint32_t sample12;
  386. ThreeLeadECG_ads1293_sample_all(&sample0, &sample1, &sample2, &sample10, &sample11, &sample12);
  387. zdatachanel_send_log("%d,%d,%d,%d,%d,%d\n", sample0, sample1, sample2, sample10, sample11, sample12);
  388. // zdatachanel_send_log("%d,%d\n", sample0, sample1);
  389. // zdatachanel_send_log("%d,%d,%d\n", data, data, data);
  390. // zdatachanel_send_log("%d %d %s\n", ThreeLeadECG_ready_pin_state_get(), ThreeLeadECG_LineInputDet_get_state(), dumplodstate(val));
  391. // zdatachannel_data_send(tx, &p_length);
  392. }
  393. ZDATACHANNEL_DEF(m_zhrs, 2 /*回调事件优先��?*/, 1 /*client num*/);
  394. static const char* hex2str(const uint8_t* data, int32_t len) {
  395. static char rx[64] = {0};
  396. memset(rx, 0, sizeof(rx));
  397. for (int32_t i = 0; i < len; i++) {
  398. sprintf(rx + i * 2, "%02X", data[i]);
  399. }
  400. return rx;
  401. }
  402. char cmdcache[256] = {0};
  403. static void zdatachannel_data_handler(zdatachannel_evt_t* p_evt) {
  404. /**
  405. * @brief ?
  406. */
  407. if (p_evt->type == ZDATACHANNEL_EVT_RX_DATA) {
  408. }
  409. }
  410. static void on_service_init(void) {
  411. /**
  412. * @brief ?
  413. */
  414. ZLOGI("init zdatachannel service");
  415. zdatachannel_init_t zdatachannle_init;
  416. memset(&zdatachannle_init, 0, sizeof(zdatachannle_init));
  417. zdatachannle_init.data_handler = zdatachannel_data_handler;
  418. ZERROR_CHECK(zdatachannel_init(&m_zhrs, &zdatachannle_init));
  419. }
  420. void main() {
  421. APP_SCHED_INIT(APP_TIMER_SCHED_EVENT_DATA_SIZE, 20);
  422. ThreeLeadECG_sdcard_base_init();
  423. znordic_init(0, 20);
  424. NRF_LOG_INFO("compile time :%s", __TIME__);
  425. NRF_LOG_INFO("Version :%d", VERSION);
  426. NRF_LOG_INFO("Manufacturer :%s", MANUFACTURER_NAME);
  427. static zble_module_cfg_t cfg = //
  428. {
  429. .deviceName = BLE_NAME,
  430. .on_service_init = on_service_init,
  431. };
  432. zble_module_init(&cfg);
  433. ThreeLeadECG_ecg_init();
  434. ThreeLeadECG_LineInputDet_init();
  435. ZERROR_CHECK(app_timer_create(&m_test_tx_timer, APP_TIMER_MODE_REPEATED, test_tx_timer_cb));
  436. ZERROR_CHECK(app_timer_start(m_test_tx_timer, APP_TIMER_TICKS(5), NULL));
  437. zble_module_start_adv();
  438. znordic_loop();
  439. }
  440. #endif
  441. #if 0
  442. /*******************************************************************************
  443. * 3-led测试 *
  444. *******************************************************************************/
  445. static void test_tx_timer_cb(void* p_context) {
  446. static uint32_t data;
  447. data++;
  448. ZLOGI("test_tx_timer_cb %d", data);
  449. ThreeLeadECG_led_green_set_state(data % 2 == 0);
  450. }
  451. extern uint32_t g_nrf_log_tx_pin;
  452. APP_TIMER_DEF(m_test_tx_timer);
  453. void main() {
  454. APP_SCHED_INIT(APP_TIMER_SCHED_EVENT_DATA_SIZE, 20);
  455. znordic_init();
  456. NRF_LOG_INFO("compile time :%s %d", __TIME__, APP_TIMER_TICKS(100));
  457. NRF_LOG_INTERNAL_FLUSH();
  458. ThreeLeadECG_led_init();
  459. ZERROR_CHECK(app_timer_create(&m_test_tx_timer, APP_TIMER_MODE_REPEATED, test_tx_timer_cb));
  460. ZERROR_CHECK(app_timer_start(m_test_tx_timer, APP_TIMER_TICKS(100), NULL));
  461. znordic_loop();
  462. }
  463. #endif
  464. #if 0
  465. /*******************************************************************************
  466. * 3- *
  467. *******************************************************************************/
  468. static void test_tx_timer_cb(void* p_context) {
  469. static uint32_t data;
  470. data++;
  471. int16_t mv = ThreeLeadECG_battery_get_adc_val() * 1.0 / 4096 * 3.3 * 1000 / 2.0 * 3;
  472. ZLOGI("battery:%d", mv);
  473. }
  474. extern uint32_t g_nrf_log_tx_pin;
  475. APP_TIMER_DEF(m_test_tx_timer);
  476. void main() {
  477. APP_SCHED_INIT(APP_TIMER_SCHED_EVENT_DATA_SIZE, 20);
  478. znordic_init();
  479. NRF_LOG_INFO("compile time :%s %d", __TIME__, APP_TIMER_TICKS(100));
  480. NRF_LOG_INTERNAL_FLUSH();
  481. ThreeLeadECG_adc_module_init();
  482. ThreeLeadECG_battery_init();
  483. ZERROR_CHECK(app_timer_create(&m_test_tx_timer, APP_TIMER_MODE_REPEATED, test_tx_timer_cb));
  484. ZERROR_CHECK(app_timer_start(m_test_tx_timer, APP_TIMER_TICKS(100), NULL));
  485. znordic_loop();
  486. }
  487. #endif
  488. #if 0
  489. /*******************************************************************************
  490. * 3-flash测试 *
  491. *******************************************************************************/
  492. static void test_tx_timer_cb(void* p_context) {
  493. static uint32_t data;
  494. data++;
  495. }
  496. extern uint32_t g_nrf_log_tx_pin;
  497. APP_TIMER_DEF(m_test_tx_timer);
  498. void main() {
  499. APP_SCHED_INIT(APP_TIMER_SCHED_EVENT_DATA_SIZE, 20);
  500. znordic_init();
  501. NRF_LOG_INFO("compile time :%s %d", __TIME__, APP_TIMER_TICKS(100));
  502. NRF_LOG_INTERNAL_FLUSH();
  503. ThreeLeadECG_sdcard_base_init();
  504. ThreeLeadECG_sdcard_mount();
  505. ThreeLeadECG_sdcard_umount();
  506. ThreeLeadECG_sdcard_mount();
  507. ThreeLeadECG_sdcard_umount();
  508. ZERROR_CHECK(app_timer_create(&m_test_tx_timer, APP_TIMER_MODE_REPEATED, test_tx_timer_cb));
  509. ZERROR_CHECK(app_timer_start(m_test_tx_timer, APP_TIMER_TICKS(100), NULL));
  510. znordic_loop();
  511. }
  512. #endif
  513. #if 0
  514. /*******************************************************************************
  515. * 3-flash测试 *
  516. *******************************************************************************/
  517. static void test_tx_timer_cb(void* p_context) {
  518. static uint32_t data;
  519. data++;
  520. ZLOGI("button %d", ThreeLeadECG_button_get_state());
  521. }
  522. extern uint32_t g_nrf_log_tx_pin;
  523. APP_TIMER_DEF(m_test_tx_timer);
  524. void main() {
  525. APP_SCHED_INIT(APP_TIMER_SCHED_EVENT_DATA_SIZE, 20);
  526. znordic_init();
  527. NRF_LOG_INFO("compile time :%s %d", __TIME__, APP_TIMER_TICKS(100));
  528. NRF_LOG_INTERNAL_FLUSH();
  529. ThreeLeadECG_button_init();
  530. ZERROR_CHECK(app_timer_create(&m_test_tx_timer, APP_TIMER_MODE_REPEATED, test_tx_timer_cb));
  531. ZERROR_CHECK(app_timer_start(m_test_tx_timer, APP_TIMER_TICKS(300), NULL));
  532. znordic_loop();
  533. }
  534. #endif