Browse Source

update

3lead_uart_test_ok_version
zhaohe 1 year ago
parent
commit
33d6e7a1c3
  1. 3
      .vscode/settings.json
  2. 171
      README.md
  3. 200
      app/app.uvoptx
  4. 26
      app/app.uvprojx
  5. 14
      app/config/sdk_config.h
  6. 14
      app/main.hardtest.c
  7. 9
      app/src/one_conduction/display_manager.c
  8. 64
      app/src/one_conduction/one_conduction_board.c
  9. 4
      app/src/one_conduction/one_conduction_board.h
  10. 58
      app/src/one_conduction/one_conduction_main.c
  11. 82
      app/src/one_conduction/sample_data_manager.c
  12. 40
      app/src/one_conduction/sample_data_manager.h
  13. 539
      app/src/one_conduction/zeeprom_fs.c
  14. 60
      app/src/one_conduction/zeeprom_fs.h
  15. 2
      libznordic
  16. 2
      sdk

3
.vscode/settings.json

@ -82,7 +82,8 @@
"fontlib.h": "c",
"font.h": "c",
"display_manager.h": "c",
"wave_drawer.h": "c"
"wave_drawer.h": "c",
"sample_data_manager.h": "c"
},
"files.encoding": "gbk"
}

171
README.md

@ -1,34 +1,34 @@
# conduction1_dynamic_electrocardiograph
## 浣跨敤璇存槑
## 使用说明
```
https://iflytop1.feishu.cn/wiki/Fp0fwciUEibtm4kaUeXcraOCneg
```
```
寮€鍙戞澘IO璧勬簮璇存槑:
开发板IO资源说明:
#define BSP_LED_0 13
#define BSP_LED_1 14
#define BSP_LED_2 15
#define BSP_LED_3 16
#define BUTTON_1 11 // 涓婃媺浣庣數骞虫湁鏁�
#define BUTTON_2 12 // 涓婃媺浣庣數骞虫湁鏁�
#define BUTTON_3 24 // 涓婃媺浣庣數骞虫湁鏁�
#define BUTTON_4 25 // 涓婃媺浣庣數骞虫湁鏁�
#define BUTTON_1 11 // 上拉低电平有效
#define BUTTON_2 12 // 上拉低电平有效
#define BUTTON_3 24 // 上拉低电平有效
#define BUTTON_4 25 // 上拉低电平有效
sdk\components\boards\pca10100.h
娓呴�寮€鍙戞澘
清风开发板
AIN2 -> 鍏夋劅
AIN2 -> 光感
I2C
#define TWI_SCL_M 28 //I2C SCL寮曡剼
#define TWI_SDA_M 30 //I2C SDA寮曡剼
#define TWI_SCL_M 28 //I2C SCL引脚
#define TWI_SDA_M 30 //I2C SDA引脚
------------------------------------
@ -41,59 +41,59 @@ PIN4 PIN30/PIN31 PIN28/PIN29 PIN11/PIN20
```
```
璁惧�琛屼负:
1. 鎸変笅鎸夐敭鎴栬€呯數鏋佽Е鍙戝悗寮€濮嬪箍鎾�
设备行为:
1. 按下按键或者电极触发后开始广播
2. 褰撶數鏋佹病鏈夎Е鍙戯紝涓旇摑鐗欐病鏈夎繛鎺ワ紝涓旇秴鏃�10s鍚庯紝鍋滄�骞挎挱锛岃繘鍏ヤ綆鍔熻€楁ā寮�
2. 当电极没有触发,且蓝牙没有连接,且超时10s后,停止广播,进入低功耗模式
3. 璁惧�鐘舵€�
3. 设备状态
鍏虫満(浼戠湢)
寮€鏈鸿摑鐗欐湭杩炴帴(骞挎挱涓�)
钃濈墮宸茶繛鎺�
关机(休眠)
开机蓝牙未连接(广播中)
蓝牙已连接
```
```
闅剧偣:
1.閲囨牱闂撮殧2ms (500HZ)
2.鏁版嵁寰€flash涓�啓鍏ユ椂闂存秷鑰楋紝cache閫夋嫨澶氬ぇ锛屾暟鎹�粈涔堟椂鍊欎笂鎶ャ€�
1. ADC:鍗曟�閲囨牱锛岄樆濉炴嬁鏁板€�(50us)
2. 鐢垫睜鐢甸噺鐨勯噰闆咥DC鍜岀數鍘嬮噰闆咥DC鐢ㄧ殑鏄�悓涓€涓狝DC
难点:
1.采样间隔2ms (500HZ)
2.数据往flash中写入时间消耗,cache选择多大,数据什么时候上报。
1. ADC:单次采样,阻塞拿数值(50us)
2. 电池电量的采集ADC和电压采集ADC用的是同一个ADC
锛堣繖閲屽厛浣跨敤鏈€绠€鍗曠殑闃诲�寮廇DC閲囬泦锛岀數姹燗DC3娆★紝閲囨牱ADC3娆★級
(这里先使用最简单的阻塞式ADC采集,电池ADC3次,采样ADC3次)
```
```
灞忓箷椹卞姩:
屏幕驱动:
https://github.com/libdriver/ssd1306
1306椹卞姩鍜�1312鏄�竴鏍风殑锛屽彧涓嶈繃1312榛樿�鏄�暅鍍忕殑
1306驱动和1312是一样的,只不过1312默认是镜像的
```
```
UI鍏冪礌:
UI元素:
-------------------
1. 涓嶅悓澶у皬鐨勫瓧浣�
2. 杩涘害鏉�
1. 不同大小的字体
2. 进度条
3. [X]
4. APP
-------------------
1. 杩涘害鏉�
2. 鍦�,x
3. 鏃堕棿
1. 进度条
2. ,x
3. 时间
4. LOGO
5. [X]
6. HR
7. APP鏌ョ湅缁撴灉
8. 骞存湀鏃�/鏃跺垎绉�
9. 涓嶅悓澶у皬鐨勫瓧浣�
7. APP查看结果
8. 年月日/时分秒
9. 不同大小的字体
xxx
@ -101,26 +101,113 @@ xxx
LOGO
杩涘害鏉�
进度条
骞存湀鏃�
鏃跺垎绉�
年月日
时分秒
淇濇寔闈欐�
保持静止
___________
[===== ]
------------
蹇冪數鍥�
心电图
[===== ]
[X]
涓嶈冻30绉�
不足30秒
姝e湪淇濆瓨
正在保存
[===== ]
APP
鏌ョ湅缁撴灉
查看结果
```
```
存储:
1帧
2byte
200帧
400byte
1秒
400byte
30秒
12kbyte
120秒
48kbyte
----------------------------
2Mbit
256Kbyte
640秒 /120 = 5条记录
256kbyte
256byte索引
[
ID:[年月日]
packetOFF:[]
usage[]:
date:[]
]
48kbyte --> 一个扇区
256/4k = 64个扇区 10s数据
openStorage(年月日)
writeData(){
// 数据量是否大于最大数值
// 是否还有空间
// 擦除旧的空间
// 写入数据
// 写入缓存
// 是否刷新缓存?
找到空闲扇区,写入数据。
找不到空闲扇区,按照顺序释放旧的扇区
重新寻找扇区
}
// 倍数读取
readData(){
1. 判断数据在哪个扇区
3. 读取扇区数据信息
2. 读取数据
3. 拷贝数据
}
// Header
[
usage:
fileHeaderdata:
fileId:
dataoff:
datalen:
]
{
fileUUID:年月日时分秒
sector:[1,2,3,4,5]
datalen: 100
//分辨率
//总时长
//采样率
}
```
```
硬件异常:
1. eeprom读写失败
2. 电池电量低
```

200
app/app.uvoptx

@ -140,7 +140,7 @@
<SetRegEntry>
<Number>0</Number>
<Key>JL2CM3</Key>
<Name>-U150710864 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC4000 -FN2 -FF0nrf52xxx.flm -FS00 -FL0200000 -FP0($$Device:nRF52833_xxAA$Flash\nrf52xxx.flm) -FF1nrf52xxx_uicr.flm -FS110001000 -FL11000 -FP1($$Device:nRF52833_xxAA$Flash\nrf52xxx_uicr.flm)</Name>
<Name>-U150710864 -O78 -S1 -ZTIFSpeedSel10000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC4000 -FN2 -FF0nrf52xxx.flm -FS00 -FL0200000 -FP0($$Device:nRF52833_xxAA$Flash\nrf52xxx.flm) -FF1nrf52xxx_uicr.flm -FS110001000 -FL11000 -FP1($$Device:nRF52833_xxAA$Flash\nrf52xxx_uicr.flm)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
@ -152,18 +152,34 @@
<Bp>
<Number>0</Number>
<Type>0</Type>
<LineNumber>576</LineNumber>
<LineNumber>157</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>181920</Address>
<Address>206788</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>.\src\basic\ssd1306\driver_ssd1306_basic.c</Filename>
<Filename>.\src\one_conduction\zeeprom_fs.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\nrf52833_xxaa\src/basic/ssd1306/driver_ssd1306_basic.c\576</Expression>
<Expression>\\nrf52833_xxaa\src/one_conduction/zeeprom_fs.c\157</Expression>
</Bp>
<Bp>
<Number>1</Number>
<Type>0</Type>
<LineNumber>495</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>192364</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>.\src\one_conduction\zeeprom_fs.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\nrf52833_xxaa\src/one_conduction/zeeprom_fs.c\495</Expression>
</Bp>
</Breakpoint>
<Tracepoint>
@ -520,7 +536,7 @@
<GroupNumber>1</GroupNumber>
<FileNumber>12</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\src\basic\ads1293\ads1293.c</PathWithFileName>
@ -576,6 +592,30 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>17</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\src\one_conduction\sample_data_manager.c</PathWithFileName>
<FilenameWithoutPath>sample_data_manager.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>18</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\src\one_conduction\zeeprom_fs.c</PathWithFileName>
<FilenameWithoutPath>zeeprom_fs.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
@ -586,7 +626,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>17</FileNumber>
<FileNumber>19</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -606,7 +646,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>18</FileNumber>
<FileNumber>20</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -618,7 +658,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>19</FileNumber>
<FileNumber>21</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -638,7 +678,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>20</FileNumber>
<FileNumber>22</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -658,7 +698,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>21</FileNumber>
<FileNumber>23</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -670,7 +710,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>22</FileNumber>
<FileNumber>24</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -682,7 +722,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>23</FileNumber>
<FileNumber>25</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -694,7 +734,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>24</FileNumber>
<FileNumber>26</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -706,7 +746,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>25</FileNumber>
<FileNumber>27</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -718,7 +758,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>26</FileNumber>
<FileNumber>28</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -730,7 +770,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>27</FileNumber>
<FileNumber>29</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -742,7 +782,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>28</FileNumber>
<FileNumber>30</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -762,7 +802,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>29</FileNumber>
<FileNumber>31</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -782,7 +822,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>30</FileNumber>
<FileNumber>32</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -794,7 +834,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>31</FileNumber>
<FileNumber>33</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -806,7 +846,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>32</FileNumber>
<FileNumber>34</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -818,7 +858,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>33</FileNumber>
<FileNumber>35</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -830,7 +870,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>34</FileNumber>
<FileNumber>36</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -842,7 +882,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>35</FileNumber>
<FileNumber>37</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -854,7 +894,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>36</FileNumber>
<FileNumber>38</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -866,7 +906,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>37</FileNumber>
<FileNumber>39</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -878,7 +918,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>38</FileNumber>
<FileNumber>40</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -890,7 +930,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>39</FileNumber>
<FileNumber>41</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -902,7 +942,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>40</FileNumber>
<FileNumber>42</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -914,7 +954,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>41</FileNumber>
<FileNumber>43</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -926,7 +966,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>42</FileNumber>
<FileNumber>44</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -938,7 +978,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>43</FileNumber>
<FileNumber>45</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -950,7 +990,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>44</FileNumber>
<FileNumber>46</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -962,7 +1002,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>45</FileNumber>
<FileNumber>47</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -974,7 +1014,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>46</FileNumber>
<FileNumber>48</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -986,7 +1026,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>47</FileNumber>
<FileNumber>49</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -998,7 +1038,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>48</FileNumber>
<FileNumber>50</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1018,7 +1058,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>49</FileNumber>
<FileNumber>51</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1030,7 +1070,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>50</FileNumber>
<FileNumber>52</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1042,7 +1082,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>51</FileNumber>
<FileNumber>53</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1054,7 +1094,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>52</FileNumber>
<FileNumber>54</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1066,7 +1106,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>53</FileNumber>
<FileNumber>55</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1078,7 +1118,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>54</FileNumber>
<FileNumber>56</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1090,7 +1130,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>55</FileNumber>
<FileNumber>57</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1102,7 +1142,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>56</FileNumber>
<FileNumber>58</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1114,7 +1154,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>57</FileNumber>
<FileNumber>59</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1126,7 +1166,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>58</FileNumber>
<FileNumber>60</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1138,7 +1178,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>59</FileNumber>
<FileNumber>61</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1150,7 +1190,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>60</FileNumber>
<FileNumber>62</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1162,7 +1202,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>61</FileNumber>
<FileNumber>63</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1174,7 +1214,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>62</FileNumber>
<FileNumber>64</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1186,7 +1226,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>63</FileNumber>
<FileNumber>65</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1198,7 +1238,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>64</FileNumber>
<FileNumber>66</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1210,7 +1250,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>65</FileNumber>
<FileNumber>67</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1222,7 +1262,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>66</FileNumber>
<FileNumber>68</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1234,7 +1274,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>67</FileNumber>
<FileNumber>69</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1246,7 +1286,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>68</FileNumber>
<FileNumber>70</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1258,7 +1298,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>69</FileNumber>
<FileNumber>71</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1270,7 +1310,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>70</FileNumber>
<FileNumber>72</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1282,7 +1322,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>71</FileNumber>
<FileNumber>73</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1294,7 +1334,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>72</FileNumber>
<FileNumber>74</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1306,7 +1346,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>73</FileNumber>
<FileNumber>75</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1318,7 +1358,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>74</FileNumber>
<FileNumber>76</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1330,7 +1370,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>75</FileNumber>
<FileNumber>77</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1350,7 +1390,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>76</FileNumber>
<FileNumber>78</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1362,7 +1402,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>77</FileNumber>
<FileNumber>79</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1374,7 +1414,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>78</FileNumber>
<FileNumber>80</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1386,7 +1426,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>79</FileNumber>
<FileNumber>81</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1398,7 +1438,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>80</FileNumber>
<FileNumber>82</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1410,7 +1450,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>81</FileNumber>
<FileNumber>83</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1430,7 +1470,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>82</FileNumber>
<FileNumber>84</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1442,7 +1482,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>83</FileNumber>
<FileNumber>85</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1454,7 +1494,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>84</FileNumber>
<FileNumber>86</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1474,7 +1514,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>11</GroupNumber>
<FileNumber>85</FileNumber>
<FileNumber>87</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1486,7 +1526,7 @@
</File>
<File>
<GroupNumber>11</GroupNumber>
<FileNumber>86</FileNumber>
<FileNumber>88</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1498,7 +1538,7 @@
</File>
<File>
<GroupNumber>11</GroupNumber>
<FileNumber>87</FileNumber>
<FileNumber>89</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1518,7 +1558,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>88</FileNumber>
<FileNumber>90</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1538,7 +1578,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>13</GroupNumber>
<FileNumber>89</FileNumber>
<FileNumber>91</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1550,7 +1590,7 @@
</File>
<File>
<GroupNumber>13</GroupNumber>
<FileNumber>90</FileNumber>
<FileNumber>92</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>

26
app/app.uvprojx
File diff suppressed because it is too large
View File

14
app/config/sdk_config.h

@ -6306,7 +6306,7 @@
// <i> will fail.
#ifndef APP_TIMER_CONFIG_OP_QUEUE_SIZE
#define APP_TIMER_CONFIG_OP_QUEUE_SIZE 10
#define APP_TIMER_CONFIG_OP_QUEUE_SIZE 20
#endif
// <q> APP_TIMER_CONFIG_USE_SCHEDULER - Enable scheduling app_timer events to app_scheduler
@ -7824,7 +7824,7 @@
// <i> a timestamp and up to 2 arguments in a single memory object.
#ifndef NRF_LOG_MSGPOOL_ELEMENT_SIZE
#define NRF_LOG_MSGPOOL_ELEMENT_SIZE 20
#define NRF_LOG_MSGPOOL_ELEMENT_SIZE 40
#endif
// <o> NRF_LOG_MSGPOOL_ELEMENT_COUNT - Number of elements in the pool of memory objects
@ -7834,7 +7834,7 @@
// <i> RAM memory usage.
#ifndef NRF_LOG_MSGPOOL_ELEMENT_COUNT
#define NRF_LOG_MSGPOOL_ELEMENT_COUNT 8
#define NRF_LOG_MSGPOOL_ELEMENT_COUNT 20
#endif
// </h>
@ -7865,7 +7865,7 @@
// <16384=> 16384
#ifndef NRF_LOG_BUFSIZE
#define NRF_LOG_BUFSIZE 1024
#define NRF_LOG_BUFSIZE 2048
#endif
// <q> NRF_LOG_CLI_CMDS - Enable CLI commands for the module.
@ -7911,7 +7911,7 @@
// <i> but system will spend significant amount of time in critical section
#ifndef NRF_LOG_NON_DEFFERED_CRITICAL_REGION_ENABLED
#define NRF_LOG_NON_DEFFERED_CRITICAL_REGION_ENABLED 0
#define NRF_LOG_NON_DEFFERED_CRITICAL_REGION_ENABLED 1
#endif
// <o> NRF_LOG_STR_PUSH_BUFFER_SIZE - Size of the buffer dedicated for strings stored using @ref NRF_LOG_PUSH.
@ -7925,7 +7925,7 @@
// <1024=> 1024
#ifndef NRF_LOG_STR_PUSH_BUFFER_SIZE
#define NRF_LOG_STR_PUSH_BUFFER_SIZE 128
#define NRF_LOG_STR_PUSH_BUFFER_SIZE 256
#endif
// <o> NRF_LOG_STR_PUSH_BUFFER_SIZE - Size of the buffer dedicated for strings stored using @ref NRF_LOG_PUSH.
@ -7939,7 +7939,7 @@
// <1024=> 1024
#ifndef NRF_LOG_STR_PUSH_BUFFER_SIZE
#define NRF_LOG_STR_PUSH_BUFFER_SIZE 128
#define NRF_LOG_STR_PUSH_BUFFER_SIZE 256
#endif
// <e> NRF_LOG_USES_COLORS - If enabled then ANSI escape code for colors is prefixed to every string

14
app/main.hardtest.c

@ -47,7 +47,7 @@ void main() {
#endif
// EEPROM_TEST
#if 0
#if 1
static void test_tx_timer_cb(void* p_context) {
static uint32_t data;
data++;
@ -297,7 +297,7 @@ void main() {
extern uint32_t g_nrf_log_tx_pin;
APP_TIMER_DEF(m_test_tx_timer);
ZDATACHANNEL_DEF(m_zhrs, 2 /*回调事件优先级*/, 1 /*client num*/);
ZDATACHANNEL_DEF(m_zhrs, 2 /*回调事件优先�*/, 1 /*client num*/);
static const char* hex2str(const uint8_t* data, int32_t len) {
static char rx[64] = {0};
memset(rx, 0, sizeof(rx));
@ -309,7 +309,7 @@ static const char* hex2str(const uint8_t* data, int32_t len) {
static void zdatachannel_data_handler(zdatachannel_evt_t* p_evt) {
/**
* @brief 接æåˆ°æŒä»¤æ°æ®
* @brief 接æåˆ°æŒä»¤æ°æ?
*/
if (p_evt->type == ZDATACHANNEL_EVT_RX_DATA) {
ZLOGI("rx:%s", hex2str(p_evt->params.rx_data.p_data, p_evt->params.rx_data.length));
@ -317,7 +317,7 @@ static void zdatachannel_data_handler(zdatachannel_evt_t* p_evt) {
}
static void on_service_init(void) {
/**
* @brief æ°æ®éšéåˆå§åŒ
* @brief æ°æ®éšéåˆå§åŒ?
*/
ZLOGI("init zdatachannel service");
zdatachannel_init_t zdatachannle_init;
@ -459,7 +459,7 @@ static void test_tx_timer_cb(void* p_context) {
// zdatachannel_data_send(tx, &p_length);
}
ZDATACHANNEL_DEF(m_zhrs, 2 /*回调事件优先级*/, 1 /*client num*/);
ZDATACHANNEL_DEF(m_zhrs, 2 /*回调事件优先�*/, 1 /*client num*/);
static const char* hex2str(const uint8_t* data, int32_t len) {
static char rx[64] = {0};
memset(rx, 0, sizeof(rx));
@ -473,7 +473,7 @@ static const char* hex2str(const uint8_t* data, int32_t len) {
char cmdcache[256] = {0};
static void zdatachannel_data_handler(zdatachannel_evt_t* p_evt) {
/**
* @brief 接æåˆ°æŒä»¤æ°æ®
* @brief 接æåˆ°æŒä»¤æ°æ?
*/
if (p_evt->type == ZDATACHANNEL_EVT_RX_DATA) {
@ -481,7 +481,7 @@ static void zdatachannel_data_handler(zdatachannel_evt_t* p_evt) {
}
static void on_service_init(void) {
/**
* @brief æ°æ®éšéåˆå§åŒ
* @brief æ°æ®éšéåˆå§åŒ?
*/
ZLOGI("init zdatachannel service");
zdatachannel_init_t zdatachannle_init;

9
app/src/one_conduction/display_manager.c

@ -66,15 +66,6 @@ void dsp_mgr_change_to_welcome() {
dsp_mgr_change_to_page(kPage_welcome);
}
const char* fmt(const char* format, ...) {
static char buf[128];
va_list args;
va_start(args, format);
vsprintf(buf, format, args);
va_end(args);
ZLOGI("fmt:%s", buf);
return buf;
}
int compute_x_pos_by_center(int16_t x, int16_t width) { return x - width / 2; }
int compute_y_pos_by_center(int16_t y, int16_t height) { return y - height / 2; }

64
app/src/one_conduction/one_conduction_board.c

@ -214,18 +214,16 @@ void SingleLeadECG_eeprom_init() {
config.scl = EEPROM_I2C_SCL_M;
config.sda = EEPROM_I2C_SDA_M;
config.frequency = NRF_DRV_TWI_FREQ_100K;
// {
// .scl = EEPROM_I2C_SCL_M,
// .sda = EEPROM_I2C_SDA_M,
// .frequency = NRF_DRV_TWI_FREQ_100K,
// .interrupt_priority = APP_IRQ_PRIORITY_HIGH,
// .clear_bus_init = false,
// };
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) {
@ -250,18 +248,59 @@ static void assign_i2c_add(uint32_t add, bool wr, uint8_t *i2cadd, uint8_t *mema
*memadd1 = add & 0xFF;
}
void SingleLeadECG_eeprom_write(uint16_t page, uint8_t *data, uint16_t len) { //
uint32_t addr = page * EEPROM_PAGE;
len = len > EEPROM_PAGE ? EEPROM_PAGE : len;
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);
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();
}
nrf_delay_ms(10);
}
/**
* @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) {
@ -274,4 +313,3 @@ void SingleLeadECG_eeprom_read(uint32_t add, uint8_t *data, uint16_t len) {
deviceSelect |= 0x01; // read
nrf_drv_twi_rx(&m_eeprom_twi_master, deviceSelect, data, len);
}

4
app/src/one_conduction/one_conduction_board.h

@ -9,6 +9,7 @@
#include <stdbool.h>
#include "basic/ssd1306/driver_ssd1306_interface.h"
#include "znordic.h"
/*******************************************************************************
* basic *
@ -31,7 +32,8 @@ void SingleLeadECG_beep_set_state(bool state);
*/
#define EEPROM_PAGE 256
void SingleLeadECG_eeprom_init();
void SingleLeadECG_eeprom_write(uint16_t page, uint8_t* data, uint16_t len);
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);
/*******************************************************************************

58
app/src/one_conduction/one_conduction_main.c

@ -2,8 +2,9 @@
#include "basic/zble_module.h"
#include "basic/zdatachannel_service.h"
#include "one_conduction_board.h"
#include "display_manager.h"
#include "one_conduction_board.h"
#include "sample_data_manager.h"
#include "znordic.h"
ZDATACHANNEL_DEF(m_zhrs, 2 /*»Øµ÷ʼþÓÅÏÈ??*/, 1 /*client num*/);
@ -11,14 +12,6 @@ ZDATACHANNEL_DEF(m_zhrs, 2 /*
/*******************************************************************************
* TOOLS *
*******************************************************************************/
static const char* hex2str(const uint8_t* data, int32_t len) {
static char rx[64] = {0};
memset(rx, 0, sizeof(rx));
for (int32_t i = 0; i < len; i++) {
sprintf(rx + i * 2, "%02X", data[i]);
}
return rx;
}
void zdatachannel_data_handler(zdatachannel_evt_t* p_evt) {
/**
@ -32,13 +25,28 @@ void zdatachannel_data_handler(zdatachannel_evt_t* p_evt) {
#define SAMPLES 100
#define AMPLITUDE 50
static void test_tx_timer_cb(void* p_context) {
static int i;
float val = 50 + AMPLITUDE * sin(2 * PI * i / SAMPLES);
// NRF_LOG_FLOAT(val);
// static int i;
// float val = 50 + AMPLITUDE * sin(2 * PI * i / SAMPLES);
// // NRF_LOG_FLOAT(val);
// ZLOGI("tx:" NRF_LOG_FLOAT_MARKER, NRF_LOG_FLOAT(val));
// i++;
// dsp_mgr_draw_point(val);
// SingleLeadECG_eeprom_init();
// static uint8_t eepromw_test_data[256];
// static uint8_t eepromw_rx_data[256];
// for (size_t i = 0; i < 256; i++) {
// eepromw_test_data[i] = i;
// }
// SingleLeadECG_eeprom_write(0, eepromw_test_data, 256);
// SingleLeadECG_eeprom_read(0, eepromw_rx_data, 256);
// NRF_LOG_HEXDUMP_INFO(eepromw_rx_data, 48);
// NRF_LOG_HEXDUMP_INFO(eepromw_rx_data+64, 64);
ZLOGI("tx:" NRF_LOG_FLOAT_MARKER, NRF_LOG_FLOAT(val));
i++;
dsp_mgr_draw_point(val);
// for (size_t i = 0; i < 256; i++) {
// ZLOGI_BLOCK("eepromw_rx_data[%d] = %d", i, eepromw_rx_data[i]);
// }
}
extern uint32_t g_nrf_log_tx_pin;
@ -78,8 +86,24 @@ void one_conduction_main() {
dsp_mgr_poweron();
dsp_mgr_change_to_sampling();
ZERROR_CHECK(app_timer_create(&m_drawpoint_timer, APP_TIMER_MODE_REPEATED, test_tx_timer_cb));
ZERROR_CHECK(app_timer_start(m_drawpoint_timer, APP_TIMER_TICKS(30), NULL));
sample_data_mgr_init();
static sample_data_filename_t filename = {0x01, 0x02, 0x03, 0x04, 0x05};
static uint8_t wd[256];
for (size_t i = 0; i < 256; i++) wd[i] = i;
int fd = sample_data_mgr_open(&filename);
sample_data_mgr_write(fd, wd, 256);
sample_data_mgr_close(fd);
zeeprom_fs_dump_sector_state();
// sample_data_mgr_dump_fileinfo_list();
sample_data_mgr_uninit();
// SingleLeadECG_eeprom_write(0, eepromw_test_data, 256);
ZERROR_CHECK(app_timer_create(&m_drawpoint_timer, APP_TIMER_MODE_SINGLE_SHOT, test_tx_timer_cb));
ZERROR_CHECK(app_timer_start(m_drawpoint_timer, APP_TIMER_TICKS(100), NULL));
znordic_loop();
}

82
app/src/one_conduction/sample_data_manager.c

@ -0,0 +1,82 @@
#include "sample_data_manager.h"
#include <stdarg.h>
#include "zeeprom_fs.h"
#include "znordic.h"
static sample_data_fileinfo_t fileinfocache[FILE_MAX_COUNT];
static uint8_t fileinfocache_count = 0;
void sample_data_mgr_init() { zeeprom_fs_init(); }
void sample_data_mgr_uninit() { zeeprom_fs_uinit(); }
sample_data_fileinfo_list_t* sample_data_mgr_get_fileinfo_list() { //
static sample_data_fileinfo_list_t fileinfo_list;
//
zeeprom_header_t* header = zeeprom_fs_get_header();
uint16_t fileoff = 0;
for (uint16_t i = 0; i < ZARRAY_SIZE(header->sectorinfos); i++) {
zeeprom_sector_info_t* sectorinfo = &header->sectorinfos[i];
if (sectorinfo->usage == 1 && sectorinfo->sector_index_in_file == 0) {
//
sample_data_fileinfo_t* fileinfo = &fileinfocache[fileoff];
fileinfo->fileuuid = sectorinfo->fileuuid;
memcpy(fileinfo->filename, sectorinfo->filename, sizeof(fileinfo->filename));
fileinfo->size = zeeprom_fs_get_filesize(fileinfo->fileuuid);
fileoff += sectorinfo->datalen;
fileinfo_list.fileinfo[fileoff] = fileinfo;
fileinfo_list.count++;
}
}
// uuid排序uuid最大的排在最前面
for (uint16_t i = 0; i < fileoff; i++) {
for (uint16_t j = i + 1; j < fileoff; j++) {
if (fileinfo_list.fileinfo[i]->fileuuid < fileinfo_list.fileinfo[j]->fileuuid) {
sample_data_fileinfo_t* tmp = fileinfo_list.fileinfo[i];
fileinfo_list.fileinfo[i] = fileinfo_list.fileinfo[j];
fileinfo_list.fileinfo[j] = tmp;
}
}
}
return &fileinfo_list;
}
#if 1
static const char* filename2str(uint8_t* filename) {
static char filename_str[17];
for (size_t i = 0; i < 8; i++) {
filename_str[i * 2] = (filename[i] >> 4) + '0';
filename_str[i * 2 + 1] = (filename[i] & 0x0f) + '0';
}
return filename_str;
}
#endif
void sample_data_mgr_dump_fileinfo_list() {
sample_data_fileinfo_list_t* fileinfo_list = sample_data_mgr_get_fileinfo_list();
ZLOGI_BLOCK("fileinfo_list->count=%d\n", fileinfo_list->count);
for (uint16_t i = 0; i < fileinfo_list->count; i++) {
sample_data_fileinfo_t* fileinfo = fileinfo_list->fileinfo[i];
ZLOGI_BLOCK("[%d]: filename=%s, fileuuid=%d, size=%d", i, filename2str(fileinfo->filename), fileinfo->fileuuid, fileinfo->size);
}
}
int32_t sample_data_mgr_open(sample_data_filename_t* filename) {
/**
* @brief
*/
if (zeeprom_fs_get_file_num() >= FILE_MAX_COUNT) {
zeeprom_fs_delete_the_oldest_file();
}
return zeeprom_fs_open((uint8_t*)filename, NULL, 0);
}
int32_t sample_data_mgr_close(int32_t fileId) { return zeeprom_fs_close(fileId); }
int32_t sample_data_mgr_write(int32_t fileId, const uint8_t* data, int32_t size) { return zeeprom_fs_write(fileId, data, size); }
int32_t sample_data_mgr_read(int32_t fileId, uint8_t* data, int32_t size) { return zeeprom_fs_read(fileId, data, size); }
int32_t sample_data_mgr_delete_file(sample_data_filename_t* filename) { return zeeprom_fs_delete_by_name((uint8_t*)filename); }

40
app/src/one_conduction/sample_data_manager.h

@ -0,0 +1,40 @@
#pragma once
#include <stdint.h>
void sample_data_mgr_init();
#define FILE_MAX_COUNT 10
typedef struct {
uint8_t year;
uint8_t month;
uint8_t day;
uint8_t hour;
uint8_t min;
uint8_t sec;
uint8_t placeholder[2];
} sample_data_filename_t;
typedef struct {
uint8_t filename[8];
int32_t fileuuid;
int32_t size;
} sample_data_fileinfo_t;
typedef struct {
sample_data_fileinfo_t* fileinfo[FILE_MAX_COUNT];
int count;
} sample_data_fileinfo_list_t;
void sample_data_mgr_init();
void sample_data_mgr_uninit();
sample_data_fileinfo_list_t* sample_data_mgr_get_fileinfo_list();
int32_t sample_data_mgr_open(sample_data_filename_t* filename);
int32_t sample_data_mgr_close(int32_t fileId);
int32_t sample_data_mgr_write(int32_t fileId, const uint8_t* data, int32_t size);
int32_t sample_data_mgr_read(int32_t fileId, uint8_t* data, int32_t size);
int32_t sample_data_mgr_delete_file(sample_data_filename_t* filename);

539
app/src/one_conduction/zeeprom_fs.c

@ -0,0 +1,539 @@
#include "zeeprom_fs.h"
#include "one_conduction_board.h"
static zeeprom_header_t m_eeprom_header;
static bool m_is_init = false;
static filehandler_t m_filehandler[2];
static int m_fd_off;
/*******************************************************************************
* *
*******************************************************************************/
static filehandler_t* filehandler_find(int fd);
static filehandler_t* filehandler_alloc();
static void filehandler_rlease(int fd);
static int32_t sector_mgr_find_earliest_file_created_index();
static int32_t sector_mgr_free_sector(int32_t fileuuid);
static zeeprom_sector_info_t* sector_mgr_find_idle_sector();
static bool sector_mgr_sector_is_open(int32_t fileuuid);
static zeeprom_sector_info_t* sector_mgr_force_find_idle_sector();
static void sector_mgr_open_sector(int32_t fileuuid);
static void sector_mgr_close_sector(int32_t fileuuid);
// static zeeprom_sector_info_t* sector_mgr_find_fileheader(int32_t fileuuid);
static zeeprom_sector_info_t* sector_mgr_find_end_sector(int32_t fileuuid);
static zeeprom_sector_info_t* sector_mgr_find_sector(int32_t fileuuid, int32_t sector_index_in_file);
static int32_t sector_mgr_file_get_size(int32_t fileuuid);
static zeeprom_sector_info_t* sector_mgr_find_fileheader_by_filename(uint8_t* fileid);
static int32_t sector_mgr_get_sector_offset(zeeprom_sector_info_t* sector);
static int32_t sector_mgr_get_sector_rom_add(zeeprom_sector_info_t* sector);
static void zeeprom_read(int32_t add, uint8_t* data, uint16_t len);
static void zeeprom_write(int32_t add, const uint8_t* data, uint16_t len);
static int32_t compute_checksum(uint8_t* data, uint16_t len);
/*******************************************************************************
* CODE *
*******************************************************************************/
int zeeprom_fs_init() { //
SingleLeadECG_eeprom_init();
zeeprom_read(0, (uint8_t*)&m_eeprom_header, sizeof(m_eeprom_header));
int32_t checksum_val = compute_checksum((uint8_t*)&m_eeprom_header, sizeof(m_eeprom_header) - sizeof(m_eeprom_header.checksum));
if (checksum_val != m_eeprom_header.checksum) {
memset(&m_eeprom_header, 0, sizeof(m_eeprom_header));
}
m_is_init = true;
return 0;
}
int zeeprom_fs_uinit() { //
zeeprom_write(0, (uint8_t*)&m_eeprom_header, sizeof(m_eeprom_header));
SingleLeadECG_eeprom_uninit();
m_is_init = false;
return 0;
}
zeeprom_header_t* zeeprom_fs_get_header() { return &m_eeprom_header; }
int zeeprom_fs_open(uint8_t* filename, uint8_t* usrdata[], uint8_t usrdata_len) {
ZASSERT(m_is_init);
/**
* @brief
* 1.
* 2.
*
* :
* 1.
* 2.
*/
filehandler_t* fileHander = filehandler_alloc();
if (!fileHander) {
ZLOGI("fileHander_alloc fail");
return -1;
}
zeeprom_sector_info_t* sectorHeaderInfo = sector_mgr_find_fileheader_by_filename(filename);
if (sectorHeaderInfo) {
/**
* @brief
*/
//
fileHander->fileuuid = sectorHeaderInfo->fileuuid;
fileHander->file_offset = 0;
fileHander->fd = fileHander->fd;
fileHander->sector_header = sectorHeaderInfo;
fileHander->file_size = sector_mgr_file_get_size(fileHander->fileuuid);
memcpy(fileHander->filename, filename, 8);
memcpy(fileHander->usrdata, sectorHeaderInfo->usrdata, sizeof(sectorHeaderInfo->usrdata));
sector_mgr_open_sector(fileHander->fileuuid);
return fileHander->fd;
} else {
/**
* @brief
*/
sectorHeaderInfo = sector_mgr_force_find_idle_sector();
if (!sectorHeaderInfo) {
ZLOGE("sector_mgr_force_find_idle_sector fail");
filehandler_rlease(fileHander->fd);
return -1;
}
memset(sectorHeaderInfo, 0, sizeof(zeeprom_sector_info_t));
sectorHeaderInfo->usage = 1;
sectorHeaderInfo->opened = 1;
memcpy(sectorHeaderInfo->filename, filename, 8);
sectorHeaderInfo->sector_index_in_file = 0;
sectorHeaderInfo->datalen = 0;
sectorHeaderInfo->fileuuid = m_eeprom_header.fileuuid++;
if (usrdata) memcpy(sectorHeaderInfo->usrdata, usrdata, usrdata_len);
fileHander->fileuuid = sectorHeaderInfo->fileuuid;
fileHander->sector_header = sectorHeaderInfo;
fileHander->file_offset = 0;
fileHander->file_size = 0;
return fileHander->fd;
}
}
int zeeprom_fs_write(int fileid, const uint8_t* data, int32_t size) {
ZASSERT(m_is_init);
filehandler_t* fileHander = NULL;
zeeprom_sector_info_t* header_sinfo = NULL;
zeeprom_sector_info_t* endsector = NULL;
int32_t wadd = 0;
ZASSERT(size == 256);
fileHander = filehandler_find(fileid);
if (!fileHander) {
ZLOGE("fileHander_find fail");
return -1;
}
header_sinfo = fileHander->sector_header;
if (!header_sinfo) {
ZLOGE("header_sinfo fail");
return -1;
}
endsector = sector_mgr_find_end_sector(fileHander->fileuuid);
if (!endsector) {
ZLOGE("sector_mgr_find_end_sector fail");
return -1;
}
if (endsector->datalen + size > EEPROM_SECTOR_SIZE) {
ZLOGE("endsector->datalen + size > EEPROM_SECTOR_SIZE");
return -1;
}
wadd = sector_mgr_get_sector_rom_add(endsector);
if (wadd < 0) {
ZLOGE("sector_mgr_get_sector_rom_add fail");
return -1;
}
ZLOGI("wadd=%d", wadd);
ZASSERT(wadd % 256 == 0);
ZASSERT(wadd >= EEPROM_SECTOR_SIZE);
zeeprom_write(wadd + endsector->datalen, data, size);
endsector->datalen = endsector->datalen + size;
fileHander->file_offset += size;
fileHander->file_size += size;
if (endsector->datalen == EEPROM_SECTOR_SIZE) {
zeeprom_sector_info_t* newsector = sector_mgr_force_find_idle_sector();
if (!newsector) {
return -1;
}
memset(newsector, 0, sizeof(zeeprom_sector_info_t));
newsector->usage = 1;
newsector->opened = 1;
memcpy(newsector->filename, header_sinfo->filename, 8);
newsector->sector_index_in_file = endsector->sector_index_in_file + 1;
newsector->datalen = 0;
newsector->fileuuid = header_sinfo->fileuuid;
}
return size;
}
int zeeprom_fs_close(int fileid) {
ZASSERT(m_is_init);
filehandler_t* fileHander = filehandler_find(fileid);
if (!fileHander) {
ZLOGE("zeeprom_fs_close fileHander_find fail");
return -1;
}
sector_mgr_close_sector(fileHander->fileuuid);
int32_t checksum_val = compute_checksum((uint8_t*)&m_eeprom_header, sizeof(m_eeprom_header) - sizeof(m_eeprom_header.checksum));
m_eeprom_header.checksum = checksum_val;
zeeprom_write(0, (uint8_t*)&m_eeprom_header, sizeof(m_eeprom_header));
filehandler_rlease(fileid);
return 0;
}
int zeeprom_fs_read(int fileid, uint8_t* data, int32_t size) {
ZASSERT(m_is_init);
/**
* @brief
*
*/
ZASSERT(size == 256);
filehandler_t* fileHander = filehandler_find(fileid);
if (!fileHander) return -1;
zeeprom_sector_info_t* header_sinfo = fileHander->sector_header;
if (!header_sinfo) {
return -1;
}
int32_t sector_idx = fileHander->file_offset / EEPROM_SECTOR_SIZE;
int32_t sector_off = fileHander->file_offset % EEPROM_SECTOR_SIZE;
zeeprom_sector_info_t* sector = sector_mgr_find_sector(fileHander->fileuuid, sector_idx);
if (!sector) {
return -1;
}
int32_t radd = sector_mgr_get_sector_rom_add(sector);
ZASSERT(radd % 256 == 0);
radd += sector_off;
int32_t readlen = size;
zeeprom_read(radd, data, readlen);
return readlen;
}
int zeeprom_fs_delete(int32_t fileuuid) {
ZASSERT(m_is_init);
sector_mgr_free_sector(fileuuid);
return 0;
}
int zeeprom_fs_delete_by_name(uint8_t* filename) {
ZASSERT(m_is_init);
zeeprom_sector_info_t* sectorHeaderInfo = sector_mgr_find_fileheader_by_filename(filename);
if (sectorHeaderInfo) {
sector_mgr_free_sector(sectorHeaderInfo->fileuuid);
}
return 0;
}
int zeeprom_fs_get_file_num() {
ZASSERT(m_is_init);
int count = 0;
for (int i = 0; i < MAX_SECTOR_NUM; i++) {
zeeprom_sector_info_t* sinfo = &m_eeprom_header.sectorinfos[i];
if (sinfo->usage == 1 && sinfo->sector_index_in_file == 0) {
count++;
}
}
return count;
}
int zeeprom_fs_delete_the_oldest_file() {
ZASSERT(m_is_init);
int32_t earliest_file_created_index = sector_mgr_find_earliest_file_created_index();
sector_mgr_free_sector(earliest_file_created_index);
return 0;
}
int zeeprom_fs_get_filesize(int32_t fileuuid) {
ZASSERT(m_is_init);
return sector_mgr_file_get_size(fileuuid);
}
static void zeeprom_read(int32_t add, uint8_t* data, uint16_t len) { //
int wrsize = EEPROM_SECTOR_MIN_WR_SIZE;
int readTimes = len / wrsize;
int readRemain = len % wrsize;
for (int i = 0; i < readTimes; i++) {
SingleLeadECG_eeprom_read(add + i * wrsize, data + i * wrsize, wrsize);
}
if (readRemain > 0) {
SingleLeadECG_eeprom_read(add + readTimes * wrsize, data + readTimes * wrsize, readRemain);
}
}
static void zeeprom_write(int32_t add, const uint8_t* data, uint16_t len) {
int wrsize = EEPROM_SECTOR_MIN_WR_SIZE;
int writeTimes = len / wrsize;
int writeRemain = len % wrsize;
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);
}
if (writeRemain > 0) {
int32_t writeadd = add + writeTimes * wrsize;
SingleLeadECG_eeprom_write(writeadd, data + writeTimes * wrsize, writeRemain);
}
}
static int32_t compute_checksum(uint8_t* data, uint16_t len) {
int32_t sum = 0;
for (int i = 0; i < len; i++) {
sum += data[i];
}
return sum;
}
/*******************************************************************************
* filehandler *
*******************************************************************************/
static filehandler_t* filehandler_find(int fd) {
for (int i = 0; i < ZARRAY_SIZE(m_filehandler); i++) {
if (m_filehandler[i].fd == fd) {
return &m_filehandler[i];
}
}
return NULL;
}
static filehandler_t* filehandler_alloc() {
for (int i = 0; i < ZARRAY_SIZE(m_filehandler); i++) {
if (m_filehandler[i].fd == 0) {
m_filehandler[i].fd = ++m_fd_off;
return &m_filehandler[i];
}
}
return NULL;
}
static void filehandler_rlease(int fd) {
for (int i = 0; i < ZARRAY_SIZE(m_filehandler); i++) {
if (m_filehandler[i].fd == fd) {
m_filehandler[i].fd = 0;
return;
}
}
}
/*******************************************************************************
* sector_mgr *
*******************************************************************************/
// file_created_index
static int32_t sector_mgr_find_earliest_file_created_index() {
int32_t earliest_file_created_index = 0xFFFFFFFF;
for (int i = 0; i < MAX_SECTOR_NUM; i++) {
zeeprom_sector_info_t* sinfo = &m_eeprom_header.sectorinfos[i];
if (sinfo->usage == 1) {
if (sinfo->fileuuid < earliest_file_created_index) {
earliest_file_created_index = sinfo->fileuuid;
}
}
}
return earliest_file_created_index;
}
//
static int32_t sector_mgr_free_sector(int32_t fileuuid) {
for (int i = 0; i < MAX_SECTOR_NUM; i++) {
zeeprom_sector_info_t* sinfo = &m_eeprom_header.sectorinfos[i];
if (sinfo->usage == 1 && sinfo->fileuuid == fileuuid) {
sinfo->usage = 0;
}
}
return 0;
}
//
static zeeprom_sector_info_t* sector_mgr_find_idle_sector() {
for (int i = 0; i < MAX_SECTOR_NUM; i++) {
zeeprom_sector_info_t* sinfo = &m_eeprom_header.sectorinfos[i];
if (sinfo->usage == 0) {
return sinfo;
}
}
return NULL;
}
static bool sector_mgr_sector_is_open(int32_t fileuuid) {
for (int i = 0; i < MAX_SECTOR_NUM; i++) {
zeeprom_sector_info_t* sinfo = &m_eeprom_header.sectorinfos[i];
if (sinfo->usage == 1 && sinfo->fileuuid == fileuuid) {
return sinfo->opened;
}
}
return false;
}
static zeeprom_sector_info_t* sector_mgr_force_find_idle_sector() {
/**
* @brief
*/
zeeprom_sector_info_t* ret_sinfo = sector_mgr_find_idle_sector();
if (ret_sinfo) return ret_sinfo;
/**
* @brief
*/
int32_t earliest_file_created_index = sector_mgr_find_earliest_file_created_index();
if (sector_mgr_sector_is_open(earliest_file_created_index)) {
return NULL;
}
/**
* @brief
*/
sector_mgr_free_sector(earliest_file_created_index);
/**
* @brief
*/
ret_sinfo = sector_mgr_find_idle_sector();
if (ret_sinfo) return ret_sinfo;
return NULL;
}
static void sector_mgr_open_sector(int32_t fileuuid) {
for (int i = 0; i < MAX_SECTOR_NUM; i++) {
zeeprom_sector_info_t* sinfo = &m_eeprom_header.sectorinfos[i];
if (sinfo->usage == 1 && sinfo->fileuuid == fileuuid) {
sinfo->opened = true;
}
}
}
static void sector_mgr_close_sector(int32_t fileuuid) {
for (int i = 0; i < MAX_SECTOR_NUM; i++) {
zeeprom_sector_info_t* sinfo = &m_eeprom_header.sectorinfos[i];
if (sinfo->usage == 1 && sinfo->fileuuid == fileuuid) {
sinfo->opened = false;
}
}
}
// static zeeprom_sector_info_t* sector_mgr_find_fileheader(int32_t fileuuid) {
// for (int i = 0; i < MAX_SECTOR_NUM; i++) {
// zeeprom_sector_info_t* sinfo = &m_eeprom_header.sectorinfos[i];
// if (sinfo->usage == 1 && sinfo->sector_index_in_file == 0 && sinfo->fileuuid == fileuuid) {
// return sinfo;
// }
// }
// return NULL;
// }
static zeeprom_sector_info_t* sector_mgr_find_sector(int32_t fileuuid, int32_t sector_index_in_file) {
for (int i = 0; i < MAX_SECTOR_NUM; i++) {
zeeprom_sector_info_t* sinfo = &m_eeprom_header.sectorinfos[i];
if (sinfo->usage == 1 && sinfo->sector_index_in_file == sector_index_in_file && sinfo->fileuuid == fileuuid) {
return sinfo;
}
}
return NULL;
}
static zeeprom_sector_info_t* sector_mgr_find_end_sector(int32_t fileuuid) {
int32_t maxsectorindex = 0;
for (int i = 0; i < MAX_SECTOR_NUM; i++) {
zeeprom_sector_info_t* sinfo = &m_eeprom_header.sectorinfos[i];
if (sinfo->usage == 1 && sinfo->fileuuid == fileuuid) {
if (sinfo->sector_index_in_file >= maxsectorindex) {
maxsectorindex = sinfo->sector_index_in_file;
}
}
}
return sector_mgr_find_sector(fileuuid, maxsectorindex);
}
static zeeprom_sector_info_t* sector_mgr_find_fileheader_by_filename(uint8_t* fileid) {
for (int i = 0; i < MAX_SECTOR_NUM; i++) {
zeeprom_sector_info_t* sinfo = &m_eeprom_header.sectorinfos[i];
if (sinfo->usage == 1 && sinfo->sector_index_in_file == 0 && memcmp(sinfo->filename, fileid, 8) == 0) {
return sinfo;
}
}
return NULL;
}
static int32_t sector_mgr_get_sector_offset(zeeprom_sector_info_t* sector) {
for (int i = 0; i < MAX_SECTOR_NUM; i++) {
zeeprom_sector_info_t* sinfo = &m_eeprom_header.sectorinfos[i];
if (sinfo == sector) {
return i;
}
}
return -1;
}
static int32_t sector_mgr_get_sector_rom_add(zeeprom_sector_info_t* sector) {
int32_t offset = sector_mgr_get_sector_offset(sector);
if (offset < 0) return -1;
return (offset + 1) * EEPROM_SECTOR_SIZE;
}
static int32_t sector_mgr_file_get_size(int32_t fileuuid) {
int32_t filesize = 0;
for (int i = 0; i < MAX_SECTOR_NUM; i++) {
zeeprom_sector_info_t* sinfo = &m_eeprom_header.sectorinfos[i];
if (sinfo->usage == 1 && sinfo->fileuuid == fileuuid) {
filesize += sinfo->datalen;
}
}
return filesize;
}
static const char* filename2str(uint8_t* filename) {
static char filename_str[32];
sprintf(filename_str, "%02x%02x%02x%02x%02x%02x%02x%02x", filename[0], filename[1], filename[2], filename[3], filename[4], filename[5], filename[6], filename[7]);
return filename_str;
}
int zeeprom_fs_dump_sector_state() {
ZLOGI_BLOCK("zeeprom_fs_dump_sector_state\n");
for (int i = 0; i < MAX_SECTOR_NUM; i++) {
zeeprom_sector_info_t* sinfo = &m_eeprom_header.sectorinfos[i];
#if 0
uint8_t usage;
uint8_t opened;
uint8_t filename[8]; //
int32_t sector_index_in_file; //
int32_t datalen; //
int32_t fileuuid; // index判断文件创建的先后顺序
uint8_t usrdata[20];
#endif
if (sinfo->usage == 1) {
ZLOGI_BLOCK("[%d]: usage=%d opened=%d", i, sinfo->usage, sinfo->opened);
ZLOGI_BLOCK(" fname=%s, index_in_file=%d, datalen=%d, fileuuid=%d\n", filename2str(sinfo->filename), sinfo->sector_index_in_file, sinfo->datalen, sinfo->fileuuid);
} else {
ZLOGI_BLOCK("[%d]: usage=%d\n", i, sinfo->usage);
}
}
return 0;
}

60
app/src/one_conduction/zeeprom_fs.h

@ -0,0 +1,60 @@
#pragma once
#include <stdint.h>
#define EEPROM_SIZE (256 * 1024)
#define EEPROM_SECTOR_MIN_WR_SIZE (256)
#define EEPROM_SECTOR_SIZE (8 * 1024)
#define MAX_SECTOR_NUM (EEPROM_SIZE / EEPROM_SECTOR_SIZE - 1)
#define EEPROM_FILE_SIZE (EEPROM_SECTOR_SIZE * MAX_SECTOR_NUM)
//
#pragma pack(1)
typedef struct {
uint8_t usage;
uint8_t opened;
uint8_t filename[8]; //
int32_t sector_index_in_file; //
int32_t datalen; //
int32_t fileuuid; // index判断文件创建的先后顺序
uint8_t usrdata[20];
} zeeprom_sector_info_t;
typedef struct {
uint8_t filename[8];
uint8_t usrdata[20];
zeeprom_sector_info_t* sector_header;
int32_t file_offset;
int32_t file_size;
int fd;
int32_t fileuuid;
} filehandler_t;
typedef struct {
zeeprom_sector_info_t sectorinfos[MAX_SECTOR_NUM];
int32_t fileuuid;
int32_t checksum;
} zeeprom_header_t;
#pragma pack()
int zeeprom_fs_init();
int zeeprom_fs_uinit();
zeeprom_header_t* zeeprom_fs_get_header();
int zeeprom_fs_open(uint8_t* filename, uint8_t* usrdata[], uint8_t usrdata_len);
int zeeprom_fs_close(int fileid);
int zeeprom_fs_write(int fileid, const uint8_t* data, int32_t size);
int zeeprom_fs_read(int fileid, uint8_t* data, int32_t size);
int zeeprom_fs_get_filesize(int32_t fileuuid);
int zeeprom_fs_get_file_num();
int zeeprom_fs_delete_the_oldest_file();
int zeeprom_fs_delete(int32_t fileuuid);
int zeeprom_fs_delete_by_name(uint8_t* filename);
int zeeprom_fs_dump_sector_state();

2
libznordic

@ -1 +1 @@
Subproject commit 75bac4942446a40e70c2e5d1cbfe5171a869fd69
Subproject commit c0196969d9981245400057e8c8ef8567fc6c93ab

2
sdk

@ -1 +1 @@
Subproject commit 869a0e4412889897e7ae801ae96e4491f0897798
Subproject commit 45186701cdfa870204e0975dbf12a0feb50be71d
Loading…
Cancel
Save