Browse Source

添加电源控制

master
zhaohe 1 year ago
parent
commit
4f3fc2fb5c
  1. 4
      .vscode/settings.json
  2. 266
      app/app.uvoptx
  3. 50
      app/app.uvprojx
  4. 68
      app/src/basic/ssd1306/driver_ssd1306_interface.c
  5. 2
      app/src/ble_cmd_process_service.c
  6. 131
      app/src/board/board_eeprom_driver.c
  7. 18
      app/src/board/board_eeprom_driver.h
  8. 18
      app/src/board/board_power_mgr.c
  9. 12
      app/src/board/board_power_mgr.h
  10. 98
      app/src/board/board_ssd1306_interface.c
  11. 11
      app/src/board/board_ssd1306_interface.h
  12. 7
      app/src/display_manager.c
  13. 2
      app/src/heart_wave_sample_service.c
  14. 2
      app/src/heart_wave_sample_service.c.bak
  15. 3
      app/src/heart_wave_sample_service.h
  16. 231
      app/src/one_conduction_board.c
  17. 57
      app/src/one_conduction_board.h
  18. 7
      app/src/one_conduction_main.c
  19. 14
      app/src/zeeprom_fs.c

4
.vscode/settings.json

@ -185,7 +185,9 @@
"so_chen_detect.h": "c",
"adaptive_algorithm.h": "c",
"pan_tompkins_detect.h": "c",
"qrs_time_domain_zh.h": "c"
"qrs_time_domain_zh.h": "c",
"board_eeprom_driver.h": "c",
"board_power_mgr.h": "c"
},
"files.encoding": "gbk"
}

266
app/app.uvoptx

@ -446,18 +446,6 @@
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\src\basic\ssd1306\driver_ssd1306_interface.c</PathWithFileName>
<FilenameWithoutPath>driver_ssd1306_interface.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>8</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\src\basic\ssd1306\fontlib.c</PathWithFileName>
<FilenameWithoutPath>fontlib.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
@ -465,7 +453,7 @@
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>9</FileNumber>
<FileNumber>8</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -477,7 +465,7 @@
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>10</FileNumber>
<FileNumber>9</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -489,7 +477,7 @@
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>11</FileNumber>
<FileNumber>10</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -501,7 +489,7 @@
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>12</FileNumber>
<FileNumber>11</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -513,7 +501,7 @@
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>13</FileNumber>
<FileNumber>12</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -525,19 +513,7 @@
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>14</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\src\one_conduction_board.c</PathWithFileName>
<FilenameWithoutPath>one_conduction_board.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>15</FileNumber>
<FileNumber>13</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -549,7 +525,7 @@
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>16</FileNumber>
<FileNumber>14</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -561,7 +537,7 @@
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>17</FileNumber>
<FileNumber>15</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -573,7 +549,7 @@
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>18</FileNumber>
<FileNumber>16</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -585,7 +561,7 @@
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>19</FileNumber>
<FileNumber>17</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -597,7 +573,7 @@
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>20</FileNumber>
<FileNumber>18</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -609,7 +585,7 @@
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>21</FileNumber>
<FileNumber>19</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -621,7 +597,7 @@
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>22</FileNumber>
<FileNumber>20</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -633,7 +609,7 @@
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>23</FileNumber>
<FileNumber>21</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -645,7 +621,7 @@
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>24</FileNumber>
<FileNumber>22</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -657,7 +633,7 @@
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>25</FileNumber>
<FileNumber>23</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -669,7 +645,7 @@
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>26</FileNumber>
<FileNumber>24</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -681,7 +657,7 @@
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>27</FileNumber>
<FileNumber>25</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -693,7 +669,7 @@
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>28</FileNumber>
<FileNumber>26</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -705,7 +681,7 @@
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>29</FileNumber>
<FileNumber>27</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -717,7 +693,7 @@
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>30</FileNumber>
<FileNumber>28</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -727,6 +703,42 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>29</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\src\board\board_ssd1306_interface.c</PathWithFileName>
<FilenameWithoutPath>board_ssd1306_interface.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>30</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\src\board\board_eeprom_driver.c</PathWithFileName>
<FilenameWithoutPath>board_eeprom_driver.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>31</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\src\board\board_power_mgr.c</PathWithFileName>
<FilenameWithoutPath>board_power_mgr.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
@ -737,7 +749,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>31</FileNumber>
<FileNumber>32</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -757,7 +769,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>32</FileNumber>
<FileNumber>33</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -769,7 +781,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>33</FileNumber>
<FileNumber>34</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -789,7 +801,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>34</FileNumber>
<FileNumber>35</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -809,7 +821,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>35</FileNumber>
<FileNumber>36</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -821,7 +833,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>36</FileNumber>
<FileNumber>37</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -833,7 +845,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>37</FileNumber>
<FileNumber>38</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -845,7 +857,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>38</FileNumber>
<FileNumber>39</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -857,7 +869,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>39</FileNumber>
<FileNumber>40</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -869,7 +881,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>40</FileNumber>
<FileNumber>41</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -881,7 +893,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>41</FileNumber>
<FileNumber>42</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -893,7 +905,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>42</FileNumber>
<FileNumber>43</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -913,7 +925,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>43</FileNumber>
<FileNumber>44</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -933,7 +945,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>44</FileNumber>
<FileNumber>45</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -945,7 +957,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>45</FileNumber>
<FileNumber>46</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -957,7 +969,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>46</FileNumber>
<FileNumber>47</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -969,7 +981,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>47</FileNumber>
<FileNumber>48</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -981,7 +993,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>48</FileNumber>
<FileNumber>49</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -993,7 +1005,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>49</FileNumber>
<FileNumber>50</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1005,7 +1017,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>50</FileNumber>
<FileNumber>51</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1017,7 +1029,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>51</FileNumber>
<FileNumber>52</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1029,7 +1041,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>52</FileNumber>
<FileNumber>53</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1041,7 +1053,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>53</FileNumber>
<FileNumber>54</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1053,7 +1065,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>54</FileNumber>
<FileNumber>55</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1065,7 +1077,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>55</FileNumber>
<FileNumber>56</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1077,7 +1089,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>56</FileNumber>
<FileNumber>57</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1089,7 +1101,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>57</FileNumber>
<FileNumber>58</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1101,7 +1113,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>58</FileNumber>
<FileNumber>59</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1113,7 +1125,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>59</FileNumber>
<FileNumber>60</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1125,7 +1137,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>60</FileNumber>
<FileNumber>61</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1137,7 +1149,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>61</FileNumber>
<FileNumber>62</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1149,7 +1161,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>62</FileNumber>
<FileNumber>63</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1161,7 +1173,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>63</FileNumber>
<FileNumber>64</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1181,7 +1193,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>64</FileNumber>
<FileNumber>65</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1193,7 +1205,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>65</FileNumber>
<FileNumber>66</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1205,7 +1217,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>66</FileNumber>
<FileNumber>67</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1217,7 +1229,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>67</FileNumber>
<FileNumber>68</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1229,7 +1241,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>68</FileNumber>
<FileNumber>69</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1241,7 +1253,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>69</FileNumber>
<FileNumber>70</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1253,7 +1265,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>70</FileNumber>
<FileNumber>71</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1265,7 +1277,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>71</FileNumber>
<FileNumber>72</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1277,7 +1289,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>72</FileNumber>
<FileNumber>73</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1289,7 +1301,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>73</FileNumber>
<FileNumber>74</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1301,7 +1313,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>74</FileNumber>
<FileNumber>75</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1313,7 +1325,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>75</FileNumber>
<FileNumber>76</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1325,7 +1337,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>76</FileNumber>
<FileNumber>77</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1337,7 +1349,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>77</FileNumber>
<FileNumber>78</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1349,7 +1361,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>78</FileNumber>
<FileNumber>79</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1361,7 +1373,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>79</FileNumber>
<FileNumber>80</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1373,7 +1385,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>80</FileNumber>
<FileNumber>81</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1385,7 +1397,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>81</FileNumber>
<FileNumber>82</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1397,7 +1409,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>82</FileNumber>
<FileNumber>83</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1409,7 +1421,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>83</FileNumber>
<FileNumber>84</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1421,7 +1433,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>84</FileNumber>
<FileNumber>85</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1433,7 +1445,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>85</FileNumber>
<FileNumber>86</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1445,7 +1457,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>86</FileNumber>
<FileNumber>87</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1457,7 +1469,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>87</FileNumber>
<FileNumber>88</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1469,7 +1481,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>88</FileNumber>
<FileNumber>89</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1481,7 +1493,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>89</FileNumber>
<FileNumber>90</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1493,7 +1505,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>90</FileNumber>
<FileNumber>91</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1513,7 +1525,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>91</FileNumber>
<FileNumber>92</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1525,7 +1537,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>92</FileNumber>
<FileNumber>93</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1537,7 +1549,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>93</FileNumber>
<FileNumber>94</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1549,7 +1561,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>94</FileNumber>
<FileNumber>95</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1561,7 +1573,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>95</FileNumber>
<FileNumber>96</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1573,7 +1585,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>96</FileNumber>
<FileNumber>97</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1593,7 +1605,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>97</FileNumber>
<FileNumber>98</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1605,7 +1617,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>98</FileNumber>
<FileNumber>99</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1617,7 +1629,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>99</FileNumber>
<FileNumber>100</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1637,7 +1649,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>11</GroupNumber>
<FileNumber>100</FileNumber>
<FileNumber>101</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1649,7 +1661,7 @@
</File>
<File>
<GroupNumber>11</GroupNumber>
<FileNumber>101</FileNumber>
<FileNumber>102</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1661,7 +1673,7 @@
</File>
<File>
<GroupNumber>11</GroupNumber>
<FileNumber>102</FileNumber>
<FileNumber>103</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1675,13 +1687,13 @@
<Group>
<GroupName>libznordic</GroupName>
<tvExp>1</tvExp>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>103</FileNumber>
<FileNumber>104</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1693,7 +1705,7 @@
</File>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>104</FileNumber>
<FileNumber>105</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1705,7 +1717,7 @@
</File>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>105</FileNumber>
<FileNumber>106</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1725,7 +1737,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>13</GroupNumber>
<FileNumber>106</FileNumber>
<FileNumber>107</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1737,7 +1749,7 @@
</File>
<File>
<GroupNumber>13</GroupNumber>
<FileNumber>107</FileNumber>
<FileNumber>108</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1757,7 +1769,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>14</GroupNumber>
<FileNumber>108</FileNumber>
<FileNumber>109</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1769,7 +1781,7 @@
</File>
<File>
<GroupNumber>14</GroupNumber>
<FileNumber>109</FileNumber>
<FileNumber>110</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1781,7 +1793,7 @@
</File>
<File>
<GroupNumber>14</GroupNumber>
<FileNumber>110</FileNumber>
<FileNumber>111</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1793,7 +1805,7 @@
</File>
<File>
<GroupNumber>14</GroupNumber>
<FileNumber>111</FileNumber>
<FileNumber>112</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>

50
app/app.uvprojx

@ -414,11 +414,6 @@
<FilePath>.\src\basic\ssd1306\driver_ssd1306_basic.c</FilePath>
</File>
<File>
<FileName>driver_ssd1306_interface.c</FileName>
<FileType>1</FileType>
<FilePath>.\src\basic\ssd1306\driver_ssd1306_interface.c</FilePath>
</File>
<File>
<FileName>fontlib.c</FileName>
<FileType>1</FileType>
<FilePath>.\src\basic\ssd1306\fontlib.c</FilePath>
@ -449,11 +444,6 @@
<FilePath>.\src\display_manager.c</FilePath>
</File>
<File>
<FileName>one_conduction_board.c</FileName>
<FileType>1</FileType>
<FilePath>.\src\one_conduction_board.c</FilePath>
</File>
<File>
<FileName>one_conduction_main.c</FileName>
<FileType>1</FileType>
<FilePath>.\src\one_conduction_main.c</FilePath>
@ -533,6 +523,21 @@
<FileType>1</FileType>
<FilePath>.\src\basic\qrs_time_domain_zh.c</FilePath>
</File>
<File>
<FileName>board_ssd1306_interface.c</FileName>
<FileType>1</FileType>
<FilePath>.\src\board\board_ssd1306_interface.c</FilePath>
</File>
<File>
<FileName>board_eeprom_driver.c</FileName>
<FileType>1</FileType>
<FilePath>.\src\board\board_eeprom_driver.c</FilePath>
</File>
<File>
<FileName>board_power_mgr.c</FileName>
<FileType>1</FileType>
<FilePath>.\src\board\board_power_mgr.c</FilePath>
</File>
</Files>
</Group>
<Group>
@ -4328,11 +4333,6 @@
<FilePath>.\src\basic\ssd1306\driver_ssd1306_basic.c</FilePath>
</File>
<File>
<FileName>driver_ssd1306_interface.c</FileName>
<FileType>1</FileType>
<FilePath>.\src\basic\ssd1306\driver_ssd1306_interface.c</FilePath>
</File>
<File>
<FileName>fontlib.c</FileName>
<FileType>1</FileType>
<FilePath>.\src\basic\ssd1306\fontlib.c</FilePath>
@ -4363,11 +4363,6 @@
<FilePath>.\src\display_manager.c</FilePath>
</File>
<File>
<FileName>one_conduction_board.c</FileName>
<FileType>1</FileType>
<FilePath>.\src\one_conduction_board.c</FilePath>
</File>
<File>
<FileName>one_conduction_main.c</FileName>
<FileType>1</FileType>
<FilePath>.\src\one_conduction_main.c</FilePath>
@ -4447,6 +4442,21 @@
<FileType>1</FileType>
<FilePath>.\src\basic\qrs_time_domain_zh.c</FilePath>
</File>
<File>
<FileName>board_ssd1306_interface.c</FileName>
<FileType>1</FileType>
<FilePath>.\src\board\board_ssd1306_interface.c</FilePath>
</File>
<File>
<FileName>board_eeprom_driver.c</FileName>
<FileType>1</FileType>
<FilePath>.\src\board\board_eeprom_driver.c</FilePath>
</File>
<File>
<FileName>board_power_mgr.c</FileName>
<FileType>1</FileType>
<FilePath>.\src\board\board_power_mgr.c</FilePath>
</File>
</Files>
</Group>
<Group>

68
app/src/basic/ssd1306/driver_ssd1306_interface.c

@ -1,68 +0,0 @@
/**
* Copyright (c) 2015 - present LibDriver All rights reserved
*
* The MIT License (MIT)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* @file driver_ssd1306_interface_template.c
* @brief driver ssd1306 interface template source file
* @version 2.0.0
* @author Shifeng Li
* @date 2021-03-30
*
* <h3>history</h3>
* <table>
* <tr><th>Date <th>Version <th>Author <th>Description
* <tr><td>2021/03/30 <td>2.0 <td>Shifeng Li <td>format the code
* <tr><td>2020/12/10 <td>1.0 <td>Shifeng Li <td>first upload
* </table>
*/
#include "basic/ssd1306/driver_ssd1306_interface.h"
extern uint8_t SingleLeadECG_spi_init(void);
extern uint8_t SingleLeadECG_spi_deinit(void);
extern uint8_t SingleLeadECG_spi_write_cmd(uint8_t *buf, uint16_t len);
extern void SingleLeadECG_delay_ms(uint32_t ms);
extern void SingleLeadECG_debug_print(const char *const fmt, ...);
extern uint8_t SingleLeadECG_spi_cmd_data_gpio_init(void);
extern uint8_t SingleLeadECG_spi_cmd_data_gpio_deinit(void);
extern uint8_t SingleLeadECG_spi_cmd_data_gpio_write(uint8_t value);
extern uint8_t SingleLeadECG_reset_gpio_init(void);
extern uint8_t SingleLeadECG_reset_gpio_deinit(void);
extern uint8_t SingleLeadECG_reset_gpio_write(uint8_t value);
uint8_t ssd1306_interface_iic_init(void) { return 0; }
uint8_t ssd1306_interface_iic_deinit(void) { return 0; }
uint8_t ssd1306_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len) { return 0; }
uint8_t ssd1306_interface_spi_init(void) { return SingleLeadECG_spi_init(); }
uint8_t ssd1306_interface_spi_deinit(void) { return SingleLeadECG_spi_deinit(); }
uint8_t ssd1306_interface_spi_write_cmd(uint8_t *buf, uint16_t len) { return SingleLeadECG_spi_write_cmd(buf, len); }
void ssd1306_interface_delay_ms(uint32_t ms) { SingleLeadECG_delay_ms(ms); }
void ssd1306_interface_debug_print(const char *const fmt, ...) { SingleLeadECG_debug_print(fmt); }
uint8_t ssd1306_interface_spi_cmd_data_gpio_init(void) { return SingleLeadECG_spi_cmd_data_gpio_init(); }
uint8_t ssd1306_interface_spi_cmd_data_gpio_deinit(void) { return SingleLeadECG_spi_cmd_data_gpio_deinit(); }
uint8_t ssd1306_interface_spi_cmd_data_gpio_write(uint8_t value) { return SingleLeadECG_spi_cmd_data_gpio_write(value); }
uint8_t ssd1306_interface_reset_gpio_init(void) { return SingleLeadECG_reset_gpio_init(); }
uint8_t ssd1306_interface_reset_gpio_deinit(void) { return SingleLeadECG_reset_gpio_deinit(); }
uint8_t ssd1306_interface_reset_gpio_write(uint8_t value) { return SingleLeadECG_reset_gpio_write(value); }

2
app/src/ble_cmd_process_service.c

@ -6,7 +6,7 @@
#include "board/board_battery_state.h"
#include "board/board_ecg_sensor.h"
#include "config.h"
#include "one_conduction_board.h"
#include "sample_data_manager.h"
#include "zble_module.h"
#include "zdatachannel_service.h"

131
app/src/board/board_eeprom_driver.c

@ -0,0 +1,131 @@
#include "board_eeprom_driver.h"
#include "znordic.h"
//
#include "app_timer.h"
#include "diskio_blkdev.h"
#include "ff.h"
#include "nrf_block_dev_sdc.h"
#include "nrf_delay.h"
#include "nrf_drv_pwm.h"
#include "nrf_drv_saadc.h"
#include "nrf_drv_twi.h"
#include "nrf_drv_wdt.h"
#include "nrf_gpio.h"
//
#include "basic/ssd1306/driver_ssd1306.h"
#include "basic/ssd1306/driver_ssd1306_basic.h"
#define EEPROM_I2C_SCL_M 15 // I2C SCL引脚
#define EEPROM_I2C_SDA_M 17 // I2C SDA引脚
#define EEPROM_I2C_INSTANCE 1 // I2C使用的硬件控制器ID
/*******************************************************************************
* eeprom *
*******************************************************************************/
static const nrf_drv_twi_t m_eeprom_twi_master = NRF_DRV_TWI_INSTANCE(EEPROM_I2C_INSTANCE);
void board_eeprom_init() {
nrf_drv_twi_config_t config = NRF_DRV_TWI_DEFAULT_CONFIG;
config.scl = EEPROM_I2C_SCL_M;
config.sda = EEPROM_I2C_SDA_M;
config.frequency = NRF_DRV_TWI_FREQ_400K;
ZERROR_CHECK(nrf_drv_twi_init(&m_eeprom_twi_master, &config, NULL, NULL));
nrf_drv_twi_enable(&m_eeprom_twi_master);
}
void board_eeprom_uninit() {
nrf_drv_twi_disable(&m_eeprom_twi_master);
nrf_drv_twi_uninit(&m_eeprom_twi_master);
}
static uint8_t eeprom_cache[EEPROM_PAGE + 2];
static void assign_i2c_add(uint32_t add, bool wr, uint8_t *i2cadd, uint8_t *memadd0, uint8_t *memadd1) {
// DEVICE SELECT
// bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
// 1 0 1 0 E2 A17 A16 RW(W=0)
//
// PS: E2 0bit3为0
//
// MEM0
// bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8
// MEM1
// bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
//
*i2cadd = 0xA0;
uint8_t a16a17 = (add >> 16) & 0x03;
*i2cadd |= a16a17 << 1;
*i2cadd = *i2cadd >> 1;
*memadd0 = add >> 8;
*memadd1 = add & 0xFF;
}
void board_eeprom_write(uint32_t addr, const uint8_t *data, uint16_t len) { //
// uint32_t addr = page * EEPROM_PAGE;
// len = len > EEPROM_PAGE ? EEPROM_PAGE : len;
// ZASSERT(len == EEPROM_PAGE);
ZASSERT((addr % EEPROM_PAGE) == 0);
// ZLOGI_BLOCK("eeprom_write %d %d", addr, len);
uint8_t deviceSelect = 0;
assign_i2c_add(addr, true, &deviceSelect, &eeprom_cache[0], &eeprom_cache[1]);
memcpy(&eeprom_cache[2], data, len);
ret_code_t ecode = nrf_drv_twi_tx(&m_eeprom_twi_master, deviceSelect, eeprom_cache, len + 2, false);
if (ecode != NRF_SUCCESS) {
ZLOGE("nrf_drv_twi_tx error %x", ecode);
NRF_LOG_INTERNAL_FLUSH();
}
}
/**
* @brief eeprom是否正常
*/
void SingleLeadECG_eeprom_wr_check() {
/**
* @brief
* 256kbyte
*
*/
static uint8_t wdata_cache[256];
static uint8_t rdata_cache[256];
#define CHECKCODE (i % 21)
for (uint32_t i = 0; i < 1024; i++) {
uint32_t addr = i * EEPROM_PAGE;
for (uint32_t j = 0; j < EEPROM_PAGE; j++) {
wdata_cache[j] = CHECKCODE;
}
ZLOGI_BLOCK("write %d", i);
board_eeprom_write(addr, wdata_cache, EEPROM_PAGE);
nrf_delay_ms(15);
}
for (uint32_t i = 0; i < 1024; i++) {
uint32_t addr = i * EEPROM_PAGE;
ZLOGI_BLOCK("check %d", i);
board_eeprom_read(addr, rdata_cache, EEPROM_PAGE);
for (uint32_t j = 0; j < EEPROM_PAGE; j++) {
if (rdata_cache[j] != (CHECKCODE)) {
ZLOGE("SingleLeadECG_eeprom_wr_check error %d %d %d", i, j, rdata_cache[j]);
}
}
}
}
void board_eeprom_read(uint32_t add, uint8_t *data, uint16_t len) {
uint8_t deviceSelect = 0;
uint8_t wadd[2] = {0};
assign_i2c_add(add, false, &deviceSelect, &wadd[0], &wadd[1]);
nrf_drv_twi_tx(&m_eeprom_twi_master, deviceSelect, wadd, 2, false);
deviceSelect |= 0x01; // read
nrf_drv_twi_rx(&m_eeprom_twi_master, deviceSelect, data, len);
}

18
app/src/board/board_eeprom_driver.h

@ -0,0 +1,18 @@
#pragma once
/*******************************************************************************
* INCLUDE *
*******************************************************************************/
#include <stdbool.h>
#include "znordic.h"
/**
*
* PageSize 256byte
*
*/
#define EEPROM_PAGE 256
void board_eeprom_init();
void board_eeprom_uninit();
void board_eeprom_write(uint32_t page, const uint8_t* data, uint16_t len);
void board_eeprom_read(uint32_t add, uint8_t* data, uint16_t len);

18
app/src/board/board_power_mgr.c

@ -0,0 +1,18 @@
#include "board_power_mgr.h"
#define SCREEN_RESET_PIN 7
void board_power_mgr_init() { //
znrf_gpio_cfg_output(SCREEN_RESET_PIN, NRF_GPIO_PIN_NOPULL);
}
void board_power_mgr_deinit() { //
nrf_gpio_cfg_default(SCREEN_RESET_PIN);
}
void board_power_mgr_main_power_supply_set(bool val) {
if (val) {
nrf_gpio_pin_set(SCREEN_RESET_PIN);
} else {
nrf_gpio_pin_clear(SCREEN_RESET_PIN);
}
}

12
app/src/board/board_power_mgr.h

@ -0,0 +1,12 @@
#pragma once
/*******************************************************************************
* INCLUDE *
*******************************************************************************/
#include <stdbool.h>
#include "znordic.h"
void board_power_mgr_init();
void board_power_mgr_deinit();
void board_power_mgr_main_power_supply_set(bool val);

98
app/src/board/board_ssd1306_interface.c

@ -0,0 +1,98 @@
#include "board_ssd1306_interface.h"
#include <stdint.h>
#include "basic/ssd1306/driver_ssd1306_interface.h"
#include "znordic.h"
//
#include "app_timer.h"
#include "ff.h"
#include "nrf_block_dev_sdc.h"
#include "nrf_delay.h"
#include "nrf_gpio.h"
//
#include "basic/ssd1306/driver_ssd1306.h"
#include "basic/ssd1306/driver_ssd1306_basic.h"
#define SCREEN_SPI_INSTANCE 0
#define SCREEN_RESET_PIN 20
#define SCREEN_POWER_PIN 30
#define SCREEN_A0PIN 31
#define SCREEN_CS_PIN 29
#define SCREEN_CLK_PIN 4
#define SCREEN_MOSI_PIN 11
/*******************************************************************************
* SCREEN *
*******************************************************************************/
static const nrf_drv_spi_t m_screen_spi = NRF_DRV_SPI_INSTANCE(SCREEN_SPI_INSTANCE); /**< SPI instance. */
void board_screen_init() {
znrf_gpio_cfg_output(SCREEN_RESET_PIN, NRF_GPIO_PIN_NOPULL);
znrf_gpio_cfg_output(SCREEN_POWER_PIN, NRF_GPIO_PIN_NOPULL);
znrf_gpio_cfg_output(SCREEN_A0PIN, NRF_GPIO_PIN_NOPULL);
nrf_gpio_pin_set(SCREEN_POWER_PIN);
//
// OLED驱动程序 : https://iflytop1.feishu.cn/wiki/OQ4Iwv0DpiQDJvkjftjcQHJBnCg
// nRF5_SDK-使: https://iflytop1.feishu.cn/wiki/ThaAwZEGVi2bspkfGU9cbl9Enqd
nrf_drv_spi_config_t spi_config = NRF_DRV_SPI_DEFAULT_CONFIG;
spi_config.ss_pin = SCREEN_CS_PIN; // NRF_DRV_SPI_PIN_NOT_USED
spi_config.miso_pin = NRF_DRV_SPI_PIN_NOT_USED;
spi_config.mosi_pin = SCREEN_MOSI_PIN;
spi_config.sck_pin = SCREEN_CLK_PIN;
spi_config.frequency = NRF_DRV_SPI_FREQ_8M;
spi_config.mode = NRF_DRV_SPI_MODE_3;
ZERROR_CHECK(nrf_drv_spi_init(&m_screen_spi, &spi_config, NULL, NULL));
ssd1306_basic_init(SSD1306_INTERFACE_SPI, SSD1306_ADDR_SA0_0);
}
void board_screen_deinit() {
nrf_gpio_cfg_default(SCREEN_RESET_PIN);
nrf_gpio_cfg_default(SCREEN_POWER_PIN);
nrf_gpio_cfg_default(SCREEN_A0PIN);
ssd1306_basic_deinit();
nrf_drv_spi_uninit(&m_screen_spi);
}
uint8_t board_screen_spi_write_cmd(uint8_t *buf, uint16_t len) { //
ZERROR_CHECK(nrf_drv_spi_transfer(&m_screen_spi, buf, len, NULL, 0));
return 0;
}
void board_screen_delay_ms(uint32_t ms) { nrf_delay_ms(ms); }
uint8_t board_spi_cmd_data_gpio_write(uint8_t value) {
if (value) {
nrf_gpio_pin_set(SCREEN_A0PIN);
} else {
nrf_gpio_pin_clear(SCREEN_A0PIN);
}
return 0;
}
uint8_t board_reset_gpio_write(uint8_t value) {
if (value) {
nrf_gpio_pin_set(SCREEN_RESET_PIN);
} else {
nrf_gpio_pin_clear(SCREEN_RESET_PIN);
}
return 0;
}
/***********************************************************************************************************************
* *
***********************************************************************************************************************/
uint8_t ssd1306_interface_iic_init(void) { return 0; }
uint8_t ssd1306_interface_iic_deinit(void) { return 0; }
uint8_t ssd1306_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len) { return 0; }
uint8_t ssd1306_interface_spi_init(void) { return 0; }
uint8_t ssd1306_interface_spi_deinit(void) { return 0; }
uint8_t ssd1306_interface_spi_write_cmd(uint8_t *buf, uint16_t len) { return board_screen_spi_write_cmd(buf, len); }
void ssd1306_interface_delay_ms(uint32_t ms) { board_screen_delay_ms(ms); }
void ssd1306_interface_debug_print(const char *const fmt, ...) {}
uint8_t ssd1306_interface_spi_cmd_data_gpio_init(void) { return 0; }
uint8_t ssd1306_interface_spi_cmd_data_gpio_deinit(void) { return 0; }
uint8_t ssd1306_interface_spi_cmd_data_gpio_write(uint8_t value) { return board_spi_cmd_data_gpio_write(value); }
uint8_t ssd1306_interface_reset_gpio_init(void) { return 0; }
uint8_t ssd1306_interface_reset_gpio_deinit(void) { return 0; }
uint8_t ssd1306_interface_reset_gpio_write(uint8_t value) { return board_reset_gpio_write(value); }

11
app/src/board/board_ssd1306_interface.h

@ -0,0 +1,11 @@
#pragma once
/*******************************************************************************
* INCLUDE *
*******************************************************************************/
#include <stdbool.h>
#include "znordic.h"
void board_screen_init();
void board_screen_deinit();

7
app/src/display_manager.c

@ -8,10 +8,9 @@
#include "basic/ssd1306/driver_ssd1306_basic.h"
#include "basic/ssd1306/wave_drawer.h"
#include "board/board_battery_state.h"
#include "board/board_ssd1306_interface.h"
#include "config.h"
#include "font.h"
#include "heart_wave_sample_service.h"
#include "one_conduction_board.h"
PageState_t g_pageState;
void dsp_mgr_change_to_page(page_t page) { //
@ -433,7 +432,7 @@ static void dsp_mgr_schedule_tmr_cb(void* p_context) { //
void dsp_mgr_init(void) {
static bool timer_inited = false;
SingleLeadECG_screen_init();
board_screen_init();
if (!timer_inited) {
ZERROR_CHECK(app_timer_create(&m_dsp_mgr_schedule_tmr, APP_TIMER_MODE_REPEATED, dsp_mgr_schedule_tmr_cb));
}
@ -443,5 +442,5 @@ void dsp_mgr_init(void) {
}
void dsp_mgr_uninit(void) {
app_timer_stop(m_dsp_mgr_schedule_tmr);
SingleLeadECG_screen_deinit();
board_screen_deinit();
}

2
app/src/heart_wave_sample_service.c

@ -5,7 +5,7 @@
#include "basic/qrs_time_domain_zh.h"
#include "board/board_ecg_sensor.h"
#include "nrfx_timer.h"
#include "one_conduction_board.h"
static uint16_t m_capture_buffer_a[128];
static uint16_t m_capture_buffer_b[128];

2
app/src/heart_wave_sample_service.c.bak

@ -9,7 +9,7 @@
#include "basic/Pan_Tompkins_detect.h"
#include "board/board_ecg_sensor.h"
#include "nrfx_timer.h"
#include "one_conduction_board.h"
static uint16_t m_capture_buffer_a[128];
static uint16_t m_capture_buffer_b[128];

3
app/src/heart_wave_sample_service.h

@ -1,5 +1,6 @@
#pragma once
#include "one_conduction_board.h"
#include <stdint.h>
// 256
typedef void (*heart_wave_sample_service_callback_t)(uint16_t *p_data, uint16_t length);

231
app/src/one_conduction_board.c

@ -1,231 +0,0 @@
#include "one_conduction_board.h"
#include "znordic.h"
//
#include "app_timer.h"
#include "diskio_blkdev.h"
#include "ff.h"
#include "nrf_block_dev_sdc.h"
#include "nrf_delay.h"
#include "nrf_drv_pwm.h"
#include "nrf_drv_saadc.h"
#include "nrf_drv_twi.h"
#include "nrf_drv_wdt.h"
#include "nrf_gpio.h"
//
#include "basic/ssd1306/driver_ssd1306.h"
#include "basic/ssd1306/driver_ssd1306_basic.h"
#define SCREEN_SPI_INSTANCE 0
#define SCREEN_RESET_PIN 20
#define SCREEN_POWER_PIN 30
#define SCREEN_A0PIN 31
#define SCREEN_CS_PIN 29
#define SCREEN_CLK_PIN 4
#define SCREEN_MOSI_PIN 11
#define EEPROM_I2C_SCL_M 15 // I2C SCL引脚
#define EEPROM_I2C_SDA_M 17 // I2C SDA引脚
#define EEPROM_I2C_INSTANCE 1 // I2C使用的硬件控制器ID
/*******************************************************************************
* TOOLS *
*******************************************************************************/
/*******************************************************************************
* SCREEN *
*******************************************************************************/
static const nrf_drv_spi_t m_screen_spi = NRF_DRV_SPI_INSTANCE(SCREEN_SPI_INSTANCE); /**< SPI instance. */
void SingleLeadECG_screen_init() {
znrf_gpio_cfg_output(SCREEN_RESET_PIN, NRF_GPIO_PIN_NOPULL);
znrf_gpio_cfg_output(SCREEN_POWER_PIN, NRF_GPIO_PIN_NOPULL);
znrf_gpio_cfg_output(SCREEN_A0PIN, NRF_GPIO_PIN_NOPULL);
nrf_gpio_pin_set(SCREEN_POWER_PIN);
//
// OLED驱动程序 : https://iflytop1.feishu.cn/wiki/OQ4Iwv0DpiQDJvkjftjcQHJBnCg
// nRF5_SDK-使: https://iflytop1.feishu.cn/wiki/ThaAwZEGVi2bspkfGU9cbl9Enqd
nrf_drv_spi_config_t spi_config = NRF_DRV_SPI_DEFAULT_CONFIG;
spi_config.ss_pin = SCREEN_CS_PIN; // NRF_DRV_SPI_PIN_NOT_USED
spi_config.miso_pin = NRF_DRV_SPI_PIN_NOT_USED;
spi_config.mosi_pin = SCREEN_MOSI_PIN;
spi_config.sck_pin = SCREEN_CLK_PIN;
spi_config.frequency = NRF_DRV_SPI_FREQ_8M;
spi_config.mode = NRF_DRV_SPI_MODE_3;
ZERROR_CHECK(nrf_drv_spi_init(&m_screen_spi, &spi_config, NULL, NULL));
ssd1306_basic_init(SSD1306_INTERFACE_SPI, SSD1306_ADDR_SA0_0);
}
void SingleLeadECG_screen_deinit() {
nrf_gpio_cfg_default(SCREEN_RESET_PIN);
nrf_gpio_cfg_default(SCREEN_POWER_PIN);
nrf_gpio_cfg_default(SCREEN_A0PIN);
ssd1306_basic_deinit();
nrf_drv_spi_uninit(&m_screen_spi);
}
uint8_t SingleLeadECG_spi_init(void) { return 0; }
uint8_t SingleLeadECG_spi_deinit(void) { return 0; }
uint8_t SingleLeadECG_spi_cmd_data_gpio_init(void) { return 0; }
uint8_t SingleLeadECG_spi_cmd_data_gpio_deinit(void) { return 0; }
void SingleLeadECG_debug_print(const char *const fmt, ...) {}
uint8_t SingleLeadECG_reset_gpio_init(void) { return 0; }
uint8_t SingleLeadECG_reset_gpio_deinit(void) { return 0; }
uint8_t SingleLeadECG_spi_write_cmd(uint8_t *buf, uint16_t len) { //
ZERROR_CHECK(nrf_drv_spi_transfer(&m_screen_spi, buf, len, NULL, 0));
return 0;
}
void SingleLeadECG_delay_ms(uint32_t ms) { nrf_delay_ms(ms); }
uint8_t SingleLeadECG_spi_cmd_data_gpio_write(uint8_t value) {
if (value) {
nrf_gpio_pin_set(SCREEN_A0PIN);
} else {
nrf_gpio_pin_clear(SCREEN_A0PIN);
}
return 0;
}
uint8_t SingleLeadECG_reset_gpio_write(uint8_t value) {
if (value) {
nrf_gpio_pin_set(SCREEN_RESET_PIN);
} else {
nrf_gpio_pin_clear(SCREEN_RESET_PIN);
}
return 0;
}
#if 0
/*******************************************************************************
* LED *
*******************************************************************************/
static bool io_init = false;
void SingleLeadECG_led_init() {
if (io_init) {
return;
}
znrf_gpio_cfg_output(LED_GREEN_PIN, NRF_GPIO_PIN_NOPULL);
znrf_gpio_cfg_output(LED_BLUE_PIN, NRF_GPIO_PIN_NOPULL);
// nrf_gpio_pin_write(LED_GREEN_PIN, 1);
// nrf_gpio_pin_write(LED_GREEN_PIN, 1);
io_init = true;
}
#endif
/*******************************************************************************
* eeprom *
*******************************************************************************/
static const nrf_drv_twi_t m_eeprom_twi_master = NRF_DRV_TWI_INSTANCE(EEPROM_I2C_INSTANCE);
void SingleLeadECG_eeprom_init() {
nrf_drv_twi_config_t config = NRF_DRV_TWI_DEFAULT_CONFIG;
config.scl = EEPROM_I2C_SCL_M;
config.sda = EEPROM_I2C_SDA_M;
config.frequency = NRF_DRV_TWI_FREQ_400K;
ZERROR_CHECK(nrf_drv_twi_init(&m_eeprom_twi_master, &config, NULL, NULL));
nrf_drv_twi_enable(&m_eeprom_twi_master);
}
void SingleLeadECG_eeprom_uninit() {
nrf_drv_twi_disable(&m_eeprom_twi_master);
nrf_drv_twi_uninit(&m_eeprom_twi_master);
}
static uint8_t eeprom_cache[EEPROM_PAGE + 2];
static void assign_i2c_add(uint32_t add, bool wr, uint8_t *i2cadd, uint8_t *memadd0, uint8_t *memadd1) {
// DEVICE SELECT
// bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
// 1 0 1 0 E2 A17 A16 RW(W=0)
//
// PS: E2 0bit3为0
//
// MEM0
// bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8
// MEM1
// bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
//
*i2cadd = 0xA0;
uint8_t a16a17 = (add >> 16) & 0x03;
*i2cadd |= a16a17 << 1;
*i2cadd = *i2cadd >> 1;
*memadd0 = add >> 8;
*memadd1 = add & 0xFF;
}
void SingleLeadECG_eeprom_write(uint32_t addr, const uint8_t *data, uint16_t len) { //
// uint32_t addr = page * EEPROM_PAGE;
// len = len > EEPROM_PAGE ? EEPROM_PAGE : len;
// ZASSERT(len == EEPROM_PAGE);
ZASSERT((addr % EEPROM_PAGE) == 0);
// ZLOGI_BLOCK("eeprom_write %d %d", addr, len);
uint8_t deviceSelect = 0;
assign_i2c_add(addr, true, &deviceSelect, &eeprom_cache[0], &eeprom_cache[1]);
memcpy(&eeprom_cache[2], data, len);
ret_code_t ecode = nrf_drv_twi_tx(&m_eeprom_twi_master, deviceSelect, eeprom_cache, len + 2, false);
if (ecode != NRF_SUCCESS) {
ZLOGE("nrf_drv_twi_tx error %x", ecode);
NRF_LOG_INTERNAL_FLUSH();
}
}
/**
* @brief eeprom是否正常
*/
void SingleLeadECG_eeprom_wr_check() {
/**
* @brief
* 256kbyte
*
*/
static uint8_t wdata_cache[256];
static uint8_t rdata_cache[256];
#define CHECKCODE (i % 21)
for (uint32_t i = 0; i < 1024; i++) {
uint32_t addr = i * EEPROM_PAGE;
for (uint32_t j = 0; j < EEPROM_PAGE; j++) {
wdata_cache[j] = CHECKCODE;
}
ZLOGI_BLOCK("write %d", i);
SingleLeadECG_eeprom_write(addr, wdata_cache, EEPROM_PAGE);
nrf_delay_ms(15);
}
for (uint32_t i = 0; i < 1024; i++) {
uint32_t addr = i * EEPROM_PAGE;
ZLOGI_BLOCK("check %d", i);
SingleLeadECG_eeprom_read(addr, rdata_cache, EEPROM_PAGE);
for (uint32_t j = 0; j < EEPROM_PAGE; j++) {
if (rdata_cache[j] != (CHECKCODE)) {
ZLOGE("SingleLeadECG_eeprom_wr_check error %d %d %d", i, j, rdata_cache[j]);
}
}
}
}
void SingleLeadECG_eeprom_read(uint32_t add, uint8_t *data, uint16_t len) {
uint8_t deviceSelect = 0;
uint8_t wadd[2] = {0};
assign_i2c_add(add, false, &deviceSelect, &wadd[0], &wadd[1]);
nrf_drv_twi_tx(&m_eeprom_twi_master, deviceSelect, wadd, 2, false);
deviceSelect |= 0x01; // read
nrf_drv_twi_rx(&m_eeprom_twi_master, deviceSelect, data, len);
}

57
app/src/one_conduction_board.h

@ -1,57 +0,0 @@
#pragma once
#define VERSION 1
#define MANUFACTURER_NAME "iflytop"
/*******************************************************************************
* INCLUDE *
*******************************************************************************/
#include <stdbool.h>
#include "basic/ssd1306/driver_ssd1306_interface.h"
#include "znordic.h"
/*******************************************************************************
* basic *
*******************************************************************************/
void SingleLeadECG_adc_module_init();
void SingleLeadECG_adc_module_deinit();
/*******************************************************************************
* EEPROM *
*******************************************************************************/
/**
*
* PageSize 256byte
*
*/
#define EEPROM_PAGE 256
void SingleLeadECG_eeprom_init();
void SingleLeadECG_eeprom_uninit();
void SingleLeadECG_eeprom_write(uint32_t page, const uint8_t* data, uint16_t len);
void SingleLeadECG_eeprom_read(uint32_t add, uint8_t* data, uint16_t len);
/*******************************************************************************
* SCREEN *
*******************************************************************************/
void SingleLeadECG_screen_init();
void SingleLeadECG_screen_deinit();
#if 0
/*******************************************************************************
* LED *
*******************************************************************************/
void SingleLeadECG_led_init();
#endif
#if 0
/*******************************************************************************
* ECG *
*******************************************************************************/
/*******************************************************************************
* BATTERY *
*******************************************************************************/
#endif

7
app/src/one_conduction_main.c

@ -9,10 +9,10 @@
#include "board/board_beep_ctrl.h"
#include "board/board_ecg_sensor.h"
#include "board/board_light_ctrl.h"
#include "board/board_power_mgr.h"
#include "config.h"
#include "display_manager.h"
#include "heart_wave_sample_service.h"
#include "one_conduction_board.h"
#include "sample_data_manager.h"
#include "zble_module.h"
#include "zdatachannel_service.h"
@ -96,6 +96,8 @@ static void power_off() {
ble_cmder_stop_adv();
ble_cmder_uninit();
board_power_mgr_main_power_supply_set(false);
m_poweronflag = false;
}
void ENTER_DEEP_SLEEP() {
@ -422,6 +424,9 @@ void one_conduction_main() {
BoardBeepCtrl_init();
AppEvent_regListener(app_event_listener);
board_power_mgr_init();
board_power_mgr_main_power_supply_set(true);
BoardBattery_init();
BoardEcgSensor_init();
BoardLight_Init();

14
app/src/zeeprom_fs.c

@ -1,6 +1,6 @@
#include "zeeprom_fs.h"
#include "one_conduction_board.h"
#include "board/board_eeprom_driver.h"
static zeeprom_header_t m_eeprom_header;
static bool m_is_init = false;
@ -43,7 +43,7 @@ static uint32_t compute_checksum(const uint8_t* data, uint16_t len);
static bool m_eeprom_header_inited = false;
int zeeprom_fs_init() { //
SingleLeadECG_eeprom_init();
board_eeprom_init();
if (!m_eeprom_header_inited) {
zeeprom_read(0, (uint8_t*)&m_eeprom_header, sizeof(m_eeprom_header));
uint32_t checksum_val = compute_checksum((uint8_t*)&m_eeprom_header, sizeof(m_eeprom_header) - sizeof(m_eeprom_header.sector_info_headers_checksum));
@ -57,7 +57,7 @@ int zeeprom_fs_init() { //
}
int zeeprom_fs_uinit() { //
// zeeprom_write(0, (uint8_t*)&m_eeprom_header, sizeof(m_eeprom_header));
SingleLeadECG_eeprom_uninit();
board_eeprom_uninit();
m_is_init = false;
return 0;
}
@ -317,10 +317,10 @@ static void zeeprom_read(int32_t add, uint8_t* data, uint16_t len) { //
int readRemain = len % wrsize;
for (int i = 0; i < readTimes; i++) {
SingleLeadECG_eeprom_read(add + i * wrsize, data + i * wrsize, wrsize);
board_eeprom_read(add + i * wrsize, data + i * wrsize, wrsize);
}
if (readRemain > 0) {
SingleLeadECG_eeprom_read(add + readTimes * wrsize, data + readTimes * wrsize, readRemain);
board_eeprom_read(add + readTimes * wrsize, data + readTimes * wrsize, readRemain);
}
}
static void zeeprom_write(int32_t add, const uint8_t* data, uint16_t len) {
@ -332,11 +332,11 @@ static void zeeprom_write(int32_t add, const uint8_t* data, uint16_t len) {
for (int i = 0; i < writeTimes; i++) {
// int pageoff = add / wrsize + i;
int32_t writeadd = add + i * wrsize;
SingleLeadECG_eeprom_write(writeadd, data + i * wrsize, wrsize);
board_eeprom_write(writeadd, data + i * wrsize, wrsize);
}
if (writeRemain > 0) {
int32_t writeadd = add + writeTimes * wrsize;
SingleLeadECG_eeprom_write(writeadd, data + writeTimes * wrsize, writeRemain);
board_eeprom_write(writeadd, data + writeTimes * wrsize, writeRemain);
}
}

Loading…
Cancel
Save