Initial commit

This commit is contained in:
Jcen 2024-10-03 18:50:41 +08:00
parent 5bfbcadaf0
commit 88963161d2
73 changed files with 131674 additions and 0 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -0,0 +1 @@
d85b38ded3be2a5ad8d82c9bbd72bb83a77f67c6

View File

3
.vs/ProjectSettings.json Normal file
View File

@ -0,0 +1,3 @@
{
"CurrentProjectSetting": "\u65E0\u914D\u7F6E"
}

13
.vs/VSWorkspaceState.json Normal file
View File

@ -0,0 +1,13 @@
{
"ExpandedNodes": [
"",
"\\include",
"\\lib",
"\\src",
"\\src\\hal",
"\\src\\utils",
"\\test"
],
"SelectedNode": "\\src\\main.cpp",
"PreviewInSolutionExplorer": false
}

BIN
.vs/mini_printer/v17/.wsuo Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

Binary file not shown.

View File

@ -0,0 +1,449 @@
{
"Version": 1,
"WorkspaceRootPath": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\main.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:src\\main.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\em_config.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:src\\em_config.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\em_device.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:src\\em_device.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\em_device.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:src\\em_device.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\em_task.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:src\\em_task.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\em_task.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:src\\em_task.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\include\\README||{8B382828-6202-11D1-8870-0000F87579D2}",
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:include\\README||{8B382828-6202-11D1-8870-0000F87579D2}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\lib\\README||{8B382828-6202-11D1-8870-0000F87579D2}",
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:lib\\README||{8B382828-6202-11D1-8870-0000F87579D2}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_adc.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:src\\hal\\em_adc.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_adc.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:src\\hal\\em_adc.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_ble.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:src\\hal\\em_ble.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_button.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:src\\hal\\em_button.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_hal.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:src\\hal\\em_hal.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_hal.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:src\\hal\\em_hal.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_motor.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:src\\hal\\em_motor.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_printer.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:src\\hal\\em_printer.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_printer.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:src\\hal\\em_printer.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_spi.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:src\\hal\\em_spi.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_timer.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:src\\hal\\em_timer.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_spi.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:src\\hal\\em_spi.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_timer.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:src\\hal\\em_timer.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_motor.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:src\\hal\\em_motor.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_ble.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:src\\hal\\em_ble.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\platformio.ini||{3B902123-F8A7-4915-9F01-361F908088D0}",
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:platformio.ini||{3B902123-F8A7-4915-9F01-361F908088D0}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\.gitignore||{3B902123-F8A7-4915-9F01-361F908088D0}",
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:.gitignore||{3B902123-F8A7-4915-9F01-361F908088D0}"
}
],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 256,
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 9,
"Children": [
{
"$type": "Document",
"DocumentIndex": 6,
"Title": "README",
"DocumentMoniker": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\include\\README",
"RelativeDocumentMoniker": "include\\README",
"ToolTip": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\include\\README",
"RelativeToolTip": "include\\README",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|",
"WhenOpened": "2024-10-03T10:06:10.417Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 7,
"Title": "README",
"DocumentMoniker": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\lib\\README",
"RelativeDocumentMoniker": "lib\\README",
"ToolTip": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\lib\\README",
"RelativeToolTip": "lib\\README",
"ViewState": "AgIAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|",
"WhenOpened": "2024-10-03T10:06:06.216Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 8,
"Title": "em_adc.cpp",
"DocumentMoniker": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_adc.cpp",
"RelativeDocumentMoniker": "src\\hal\\em_adc.cpp",
"ToolTip": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_adc.cpp",
"RelativeToolTip": "src\\hal\\em_adc.cpp",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|",
"WhenOpened": "2024-10-03T10:05:56.489Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 9,
"Title": "em_adc.h",
"DocumentMoniker": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_adc.h",
"RelativeDocumentMoniker": "src\\hal\\em_adc.h",
"ToolTip": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_adc.h",
"RelativeToolTip": "src\\hal\\em_adc.h",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|",
"WhenOpened": "2024-10-03T10:05:55.763Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 10,
"Title": "em_ble.h",
"DocumentMoniker": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_ble.h",
"RelativeDocumentMoniker": "src\\hal\\em_ble.h",
"ToolTip": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_ble.h",
"RelativeToolTip": "src\\hal\\em_ble.h",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|",
"WhenOpened": "2024-10-03T10:05:54.649Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 11,
"Title": "em_button.h",
"DocumentMoniker": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_button.h",
"RelativeDocumentMoniker": "src\\hal\\em_button.h",
"ToolTip": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_button.h",
"RelativeToolTip": "src\\hal\\em_button.h",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|",
"WhenOpened": "2024-10-03T10:05:53.219Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 4,
"Title": "em_task.cpp",
"DocumentMoniker": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\em_task.cpp",
"RelativeDocumentMoniker": "src\\em_task.cpp",
"ToolTip": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\em_task.cpp",
"RelativeToolTip": "src\\em_task.cpp",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|",
"WhenOpened": "2024-10-03T10:04:13.335Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 5,
"Title": "em_task.h",
"DocumentMoniker": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\em_task.h",
"RelativeDocumentMoniker": "src\\em_task.h",
"ToolTip": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\em_task.h",
"RelativeToolTip": "src\\em_task.h",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAgAAAAYAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|",
"WhenOpened": "2024-10-03T10:04:11.427Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 15,
"Title": "em_printer.cpp",
"DocumentMoniker": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_printer.cpp",
"RelativeDocumentMoniker": "src\\hal\\em_printer.cpp",
"ToolTip": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_printer.cpp",
"RelativeToolTip": "src\\hal\\em_printer.cpp",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|",
"WhenOpened": "2024-10-03T09:49:10.295Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "main.cpp",
"DocumentMoniker": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\main.cpp",
"RelativeDocumentMoniker": "src\\main.cpp",
"ToolTip": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\main.cpp",
"RelativeToolTip": "src\\main.cpp",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|",
"WhenOpened": "2024-10-03T09:48:55.016Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "em_device.h",
"DocumentMoniker": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\em_device.h",
"RelativeDocumentMoniker": "src\\em_device.h",
"ToolTip": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\em_device.h",
"RelativeToolTip": "src\\em_device.h",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|",
"WhenOpened": "2024-10-03T10:04:14.105Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "em_device.cpp",
"DocumentMoniker": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\em_device.cpp",
"RelativeDocumentMoniker": "src\\em_device.cpp",
"ToolTip": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\em_device.cpp",
"RelativeToolTip": "src\\em_device.cpp",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|",
"WhenOpened": "2024-10-03T09:48:52.489Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "em_config.h",
"DocumentMoniker": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\em_config.h",
"RelativeDocumentMoniker": "src\\em_config.h",
"ToolTip": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\em_config.h",
"RelativeToolTip": "src\\em_config.h",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAARAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|",
"WhenOpened": "2024-10-03T09:48:50.814Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 16,
"Title": "em_printer.h",
"DocumentMoniker": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_printer.h",
"RelativeDocumentMoniker": "src\\hal\\em_printer.h",
"ToolTip": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_printer.h",
"RelativeToolTip": "src\\hal\\em_printer.h",
"ViewState": "AgIAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|",
"WhenOpened": "2024-10-03T09:49:23.194Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 17,
"Title": "em_spi.cpp",
"DocumentMoniker": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_spi.cpp",
"RelativeDocumentMoniker": "src\\hal\\em_spi.cpp",
"ToolTip": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_spi.cpp",
"RelativeToolTip": "src\\hal\\em_spi.cpp",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|",
"WhenOpened": "2024-10-03T09:49:24.404Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 18,
"Title": "em_timer.h",
"DocumentMoniker": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_timer.h",
"RelativeDocumentMoniker": "src\\hal\\em_timer.h",
"ToolTip": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_timer.h",
"RelativeToolTip": "src\\hal\\em_timer.h",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABoAAAADAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|",
"WhenOpened": "2024-10-03T09:49:35.039Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 14,
"Title": "em_motor.cpp",
"DocumentMoniker": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_motor.cpp",
"RelativeDocumentMoniker": "src\\hal\\em_motor.cpp",
"ToolTip": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_motor.cpp",
"RelativeToolTip": "src\\hal\\em_motor.cpp",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|",
"WhenOpened": "2024-10-03T09:49:10.909Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 13,
"Title": "em_hal.h",
"DocumentMoniker": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_hal.h",
"RelativeDocumentMoniker": "src\\hal\\em_hal.h",
"ToolTip": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_hal.h",
"RelativeToolTip": "src\\hal\\em_hal.h",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|",
"WhenOpened": "2024-10-03T09:49:08.216Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 12,
"Title": "em_hal.cpp",
"DocumentMoniker": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_hal.cpp",
"RelativeDocumentMoniker": "src\\hal\\em_hal.cpp",
"ToolTip": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_hal.cpp",
"RelativeToolTip": "src\\hal\\em_hal.cpp",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|",
"WhenOpened": "2024-10-03T09:49:03.898Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 19,
"Title": "em_spi.h",
"DocumentMoniker": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_spi.h",
"RelativeDocumentMoniker": "src\\hal\\em_spi.h",
"ToolTip": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_spi.h",
"RelativeToolTip": "src\\hal\\em_spi.h",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|",
"WhenOpened": "2024-10-03T09:49:29.82Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 20,
"Title": "em_timer.cpp",
"DocumentMoniker": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_timer.cpp",
"RelativeDocumentMoniker": "src\\hal\\em_timer.cpp",
"ToolTip": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_timer.cpp",
"RelativeToolTip": "src\\hal\\em_timer.cpp",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|",
"WhenOpened": "2024-10-03T09:49:30.567Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 21,
"Title": "em_motor.h",
"DocumentMoniker": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_motor.h",
"RelativeDocumentMoniker": "src\\hal\\em_motor.h",
"ToolTip": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_motor.h",
"RelativeToolTip": "src\\hal\\em_motor.h",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|",
"WhenOpened": "2024-10-03T09:49:06.988Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 22,
"Title": "em_ble.cpp",
"DocumentMoniker": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_ble.cpp",
"RelativeDocumentMoniker": "src\\hal\\em_ble.cpp",
"ToolTip": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\src\\hal\\em_ble.cpp",
"RelativeToolTip": "src\\hal\\em_ble.cpp",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|",
"WhenOpened": "2024-10-03T09:49:03.033Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 23,
"Title": "platformio.ini",
"DocumentMoniker": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\platformio.ini",
"RelativeDocumentMoniker": "platformio.ini",
"ToolTip": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\platformio.ini",
"RelativeToolTip": "platformio.ini",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.002768|",
"WhenOpened": "2024-10-03T09:48:59.273Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 24,
"Title": ".gitignore",
"DocumentMoniker": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\.gitignore",
"RelativeDocumentMoniker": ".gitignore",
"ToolTip": "C:\\Users\\Jcen\\Downloads\\mini_printer_v1.0.2\\mini_printer\\.gitignore",
"RelativeToolTip": ".gitignore",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "00000000-0000-0000-0000-000000000000.000000|iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAG/SURBVDhPrZRNTgIxFMerDIaEhHgU97JxwUKGGaNeQJdyCY0XUBDWGhg4AB\u002BuvQk7OQCRFTP1fXWmMxUMCT94ee177eu/LVQdFK31kTSJ0WgEIa0SMJ2A6QTHcF9iicQqlYpa/6zv2\u002B2HD5nuEkWR/l4udRzHZBtjGzFor1YrPR6P9WKx0MNhpN96vTuZThyLJ1AJLK/iJFFxjBanBsXIozqkWq2qev1c1Wq19063e0ZBwBNP4JaQ6WRC/i8ajQb5wWBAvnxyghpOqQPkC8L5IEEQKjgxaqOTFsCd65tb6nmlkur1\u002BxwXCgX58KfT7QptwvCK52wrSLcJvtUKOABkQ6HFXwbGsmMRBkchzpjNphLZDSrEn5G1qnsp\u002BPEtheloXouRnXDTTjhb5tXmeyg0IgzuliHp\u002By0OANbiOCDXp1IYo3mMUxBT8/mMA/8QhGH6ZzC4Zwi5ZqoQB9M3h62I/\u002B/SAQpniBmtPvdQyGeYUdgyX8pl05eIBSxmTzQYEYbc42AuJQWLGJNQEcrJG4A4BTHneSW2sqfKOyybkxXMPbAvrx3IsyLzkPJFmUcWYtDntjG6lIvnp8cvKXNIlPoFvstpJRlQPIAAAAAASUVORK5CYII=",
"WhenOpened": "2024-10-03T09:48:58.366Z",
"EditorCaption": ""
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{cce594b6-0c39-4442-ba28-10c64ac7e89f}"
}
]
}
]
}
]
}

BIN
.vs/slnx.sqlite Normal file

Binary file not shown.

469
.vscode/c_cpp_properties.json vendored Normal file
View File

@ -0,0 +1,469 @@
//
// !!! WARNING !!! AUTO-GENERATED FILE!
// PLEASE DO NOT MODIFY IT AND USE "platformio.ini":
// https://docs.platformio.org/page/projectconf/section_env_build.html#build-flags
//
{
"configurations": [
{
"name": "PlatformIO",
"includePath": [
"g:/work/Arduino/mini_printer/include",
"g:/work/Arduino/mini_printer/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/BLE/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/Ticker/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/newlib/platform_include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include/esp_additions/freertos",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/port/xtensa/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include/esp_additions",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/include/soc",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/include/soc/esp32",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/port/esp32",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/port/esp32/private_include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/heap/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/log/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/include/apps",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/include/apps/sntp",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/lwip/src/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/port/esp32/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/port/esp32/include/arch",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/soc/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/soc/esp32",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/soc/esp32/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/hal/esp32/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/hal/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/hal/platform_port/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rom/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rom/include/esp32",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rom/esp32",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_common/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_system/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_system/port/soc",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_system/port/public_compat",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp32/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/xtensa/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/xtensa/esp32/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/driver/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/driver/esp32/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_pm/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_ringbuf/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/efuse/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/efuse/esp32/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/vfs/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_wifi/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_event/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_netif/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_eth/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/tcpip_adapter/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_phy/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_phy/esp32/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_ipc/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/app_trace/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_timer/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mbedtls/port/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mbedtls/mbedtls/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mbedtls/esp_crt_bundle/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/app_update/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/spi_flash/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bootloader_support/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/nvs_flash/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/pthread/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_gdbstub/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_gdbstub/xtensa",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_gdbstub/esp32",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espcoredump/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espcoredump/include/port/xtensa",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wpa_supplicant/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wpa_supplicant/port/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wpa_supplicant/esp_supplicant/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/ieee802154/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/console",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/asio/asio/asio/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/asio/port/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/osi/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/include/esp32/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/api/include/api",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/btc/profile/esp/blufi/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/btc/profile/esp/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/host/bluedroid/api/include/api",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/cbor/port/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/unity/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/unity/unity/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/cmock/CMock/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/coap/port/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/coap/libcoap/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/nghttp/port/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/nghttp/nghttp2/lib/includes",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-tls",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-tls/esp-tls-crypto",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_adc_cal/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hid/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/tcp_transport/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_http_client/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_http_server/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_https_ota/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_lcd/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_lcd/interface",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protobuf-c/protobuf-c",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protocomm/include/common",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protocomm/include/security",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protocomm/include/transports",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mdns/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_local_ctrl/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/sdmmc/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_serial_slave_link/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_websocket_client/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/expat/expat/expat/lib",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/expat/port/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wear_levelling/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fatfs/diskio",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fatfs/vfs",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fatfs/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freemodbus/common/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/idf_test/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/idf_test/include/esp32",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/jsmn/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json/cJSON",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/libsodium/libsodium/src/libsodium/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/libsodium/port_include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mqtt/esp-mqtt/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/openssl/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/perfmon/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/spiffs/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/ulp/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wifi_provisioning/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/button/button/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/rmaker_common/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json_parser/upstream/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json_parser/upstream",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json_generator/upstream",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_schedule/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rainmaker/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/qrcode/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/ws2812_led",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/dotprod/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/support/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/windows/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/windows/hann/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/windows/blackman/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/windows/blackman_harris/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/windows/blackman_nuttall/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/windows/nuttall/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/windows/flat_top/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/iir/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/fir/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/math/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/math/add/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/math/sub/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/math/mul/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/math/addc/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/math/mulc/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/math/sqrt/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/matrix/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/fft/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/dct/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/conv/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/common/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/kalman/ekf/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/kalman/ekf_imu13states/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_littlefs/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_littlefs/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/tool",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/typedef",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/image",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/math",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/nn",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/layer",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/detect",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/model_zoo",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-sr/esp-tts/esp_tts_chinese/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-sr/include/esp32",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp32-camera/driver/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp32-camera/conversions/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fb_gfx/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/qspi_qspi/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/cores/esp32",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/variants/esp32",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/ArduinoOTA/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/AsyncUDP/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/BluetoothSerial/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/DNSServer/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/EEPROM/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/ESP32/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/ESPmDNS/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/Ethernet/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/FFat/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/FS/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/HTTPClient/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdate/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdateServer/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/I2S/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/LittleFS/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/NetBIOS/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/Preferences/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/RainMaker/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/SD/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/SD_MMC/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/SPIFFS/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/SimpleBLE/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/USB/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/Update/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/WebServer/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/WiFi/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/WiFiClientSecure/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/WiFiProv/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/Wire/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/u8g2_wqy/src",
""
],
"browse": {
"limitSymbolsToIncludedHeaders": true,
"path": [
"g:/work/Arduino/mini_printer/include",
"g:/work/Arduino/mini_printer/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/BLE/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/Ticker/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/newlib/platform_include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include/esp_additions/freertos",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/port/xtensa/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include/esp_additions",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/include/soc",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/include/soc/esp32",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/port/esp32",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/port/esp32/private_include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/heap/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/log/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/include/apps",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/include/apps/sntp",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/lwip/src/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/port/esp32/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/port/esp32/include/arch",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/soc/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/soc/esp32",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/soc/esp32/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/hal/esp32/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/hal/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/hal/platform_port/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rom/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rom/include/esp32",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rom/esp32",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_common/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_system/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_system/port/soc",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_system/port/public_compat",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp32/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/xtensa/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/xtensa/esp32/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/driver/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/driver/esp32/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_pm/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_ringbuf/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/efuse/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/efuse/esp32/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/vfs/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_wifi/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_event/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_netif/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_eth/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/tcpip_adapter/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_phy/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_phy/esp32/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_ipc/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/app_trace/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_timer/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mbedtls/port/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mbedtls/mbedtls/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mbedtls/esp_crt_bundle/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/app_update/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/spi_flash/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bootloader_support/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/nvs_flash/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/pthread/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_gdbstub/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_gdbstub/xtensa",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_gdbstub/esp32",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espcoredump/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espcoredump/include/port/xtensa",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wpa_supplicant/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wpa_supplicant/port/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wpa_supplicant/esp_supplicant/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/ieee802154/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/console",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/asio/asio/asio/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/asio/port/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/osi/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/include/esp32/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/api/include/api",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/btc/profile/esp/blufi/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/btc/profile/esp/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/host/bluedroid/api/include/api",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/cbor/port/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/unity/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/unity/unity/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/cmock/CMock/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/coap/port/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/coap/libcoap/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/nghttp/port/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/nghttp/nghttp2/lib/includes",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-tls",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-tls/esp-tls-crypto",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_adc_cal/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hid/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/tcp_transport/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_http_client/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_http_server/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_https_ota/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_lcd/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_lcd/interface",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protobuf-c/protobuf-c",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protocomm/include/common",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protocomm/include/security",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protocomm/include/transports",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mdns/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_local_ctrl/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/sdmmc/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_serial_slave_link/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_websocket_client/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/expat/expat/expat/lib",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/expat/port/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wear_levelling/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fatfs/diskio",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fatfs/vfs",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fatfs/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freemodbus/common/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/idf_test/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/idf_test/include/esp32",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/jsmn/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json/cJSON",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/libsodium/libsodium/src/libsodium/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/libsodium/port_include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mqtt/esp-mqtt/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/openssl/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/perfmon/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/spiffs/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/ulp/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wifi_provisioning/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/button/button/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/rmaker_common/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json_parser/upstream/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json_parser/upstream",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json_generator/upstream",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_schedule/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rainmaker/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/qrcode/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/ws2812_led",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/dotprod/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/support/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/windows/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/windows/hann/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/windows/blackman/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/windows/blackman_harris/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/windows/blackman_nuttall/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/windows/nuttall/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/windows/flat_top/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/iir/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/fir/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/math/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/math/add/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/math/sub/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/math/mul/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/math/addc/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/math/mulc/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/math/sqrt/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/matrix/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/fft/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/dct/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/conv/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/common/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/kalman/ekf/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/kalman/ekf_imu13states/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_littlefs/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_littlefs/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/tool",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/typedef",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/image",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/math",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/nn",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/layer",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/detect",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/model_zoo",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-sr/esp-tts/esp_tts_chinese/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-sr/include/esp32",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp32-camera/driver/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp32-camera/conversions/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fb_gfx/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/qspi_qspi/include",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/cores/esp32",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/variants/esp32",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/ArduinoOTA/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/AsyncUDP/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/BluetoothSerial/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/DNSServer/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/EEPROM/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/ESP32/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/ESPmDNS/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/Ethernet/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/FFat/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/FS/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/HTTPClient/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdate/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdateServer/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/I2S/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/LittleFS/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/NetBIOS/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/Preferences/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/RainMaker/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/SD/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/SD_MMC/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/SPIFFS/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/SimpleBLE/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/USB/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/Update/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/WebServer/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/WiFi/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/WiFiClientSecure/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/WiFiProv/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/Wire/src",
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/u8g2_wqy/src",
""
]
},
"defines": [
"PLATFORMIO=60111",
"ARDUINO_ESP32_DEV",
"HAVE_CONFIG_H",
"MBEDTLS_CONFIG_FILE=\"mbedtls/esp_config.h\"",
"UNITY_INCLUDE_CONFIG_H",
"WITH_POSIX",
"_GNU_SOURCE",
"IDF_VER=\"v4.4.1-1-gb8050b365e\"",
"ESP_PLATFORM",
"_POSIX_READER_WRITER_LOCKS",
"ARDUINO_ARCH_ESP32",
"ESP32",
"F_CPU=240000000L",
"ARDUINO=10812",
"ARDUINO_VARIANT=\"esp32\"",
"ARDUINO_BOARD=\"Espressif ESP32 Dev Module\"",
"ARDUINO_PARTITION_default",
""
],
"cStandard": "gnu99",
"cppStandard": "gnu++11",
"compilerPath": "C:/Users/kemp/.platformio/packages/toolchain-xtensa-esp32/bin/xtensa-esp32-elf-gcc.exe",
"compilerArgs": [
"-mlongcalls",
""
]
}
],
"version": 4
}

10
.vscode/extensions.json vendored Normal file
View File

@ -0,0 +1,10 @@
{
// See http://go.microsoft.com/fwlink/?LinkId=827846
// for the documentation about the extensions.json format
"recommendations": [
"platformio.platformio-ide"
],
"unwantedRecommendations": [
"ms-vscode.cpptools-extension-pack"
]
}

44
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,44 @@
// AUTOMATICALLY GENERATED FILE. PLEASE DO NOT MODIFY IT MANUALLY
//
// PIO Unified Debugger
//
// Documentation: https://docs.platformio.org/page/plus/debugging.html
// Configuration: https://docs.platformio.org/page/projectconf/section_env_debug.html
{
"version": "0.2.0",
"configurations": [
{
"type": "platformio-debug",
"request": "launch",
"name": "PIO Debug",
"executable": "g:/work/Arduino/mini_printer/.pio/build/esp32dev/firmware.elf",
"projectEnvName": "esp32dev",
"toolchainBinDir": "C:/Users/kemp/.platformio/packages/toolchain-xtensa-esp32/bin",
"internalConsoleOptions": "openOnSessionStart",
"preLaunchTask": {
"type": "PlatformIO",
"task": "Pre-Debug"
}
},
{
"type": "platformio-debug",
"request": "launch",
"name": "PIO Debug (skip Pre-Debug)",
"executable": "g:/work/Arduino/mini_printer/.pio/build/esp32dev/firmware.elf",
"projectEnvName": "esp32dev",
"toolchainBinDir": "C:/Users/kemp/.platformio/packages/toolchain-xtensa-esp32/bin",
"internalConsoleOptions": "openOnSessionStart"
},
{
"type": "platformio-debug",
"request": "launch",
"name": "PIO Debug (without uploading)",
"executable": "g:/work/Arduino/mini_printer/.pio/build/esp32dev/firmware.elf",
"projectEnvName": "esp32dev",
"toolchainBinDir": "C:/Users/kemp/.platformio/packages/toolchain-xtensa-esp32/bin",
"internalConsoleOptions": "openOnSessionStart",
"loadMode": "manual"
}
]
}

7
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,7 @@
{
"files.associations": {
"array": "cpp",
"string": "cpp",
"string_view": "cpp"
}
}

42
.vscode/tasks.json vendored Normal file
View File

@ -0,0 +1,42 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "Build: HTML and binary",
"dependsOn": [
"Build: HTML only",
"Build: binary only"
],
"dependsOrder": "sequence",
"problemMatcher": [
"$platformio",
],
},
{
"type": "PlatformIO",
"label": "Build: binary only",
"task": "Build",
"group": {
"kind": "build",
"isDefault": true,
},
"problemMatcher": [
"$platformio"
],
"presentation": {
"panel": "shared"
}
},
{
"type": "npm",
"script": "build",
"group": "build",
"problemMatcher": [],
"label": "Build: HTML only",
"detail": "npm run build",
"presentation": {
"panel": "shared"
}
}
]
}

Binary file not shown.

39
include/README Normal file
View File

@ -0,0 +1,39 @@
This directory is intended for project header files.
A header file is a file containing C declarations and macro definitions
to be shared between several project source files. You request the use of a
header file in your project source file (C, C++, etc) located in `src` folder
by including it, with the C preprocessing directive `#include'.
```src/main.c
#include "header.h"
int main (void)
{
...
}
```
Including a header file produces the same results as copying the header file
into each source file that needs it. Such copying would be time-consuming
and error-prone. With a header file, the related declarations appear
in only one place. If they need to be changed, they can be changed in one
place, and programs that include the header file will automatically use the
new version when next recompiled. The header file eliminates the labor of
finding and changing all the copies as well as the risk that a failure to
find one copy will result in inconsistencies within a program.
In C, the usual convention is to give header files names that end with `.h'.
It is most portable to use only letters, digits, dashes, and underscores in
header file names, and at most one dot.
Read more about using header files in official GCC documentation:
* Include Syntax
* Include Operation
* Once-Only Headers
* Computed Includes
https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html

46
lib/README Normal file
View File

@ -0,0 +1,46 @@
This directory is intended for project specific (private) libraries.
PlatformIO will compile them to static libraries and link into executable file.
The source code of each library should be placed in a an own separate directory
("lib/your_library_name/[here are source files]").
For example, see a structure of the following two libraries `Foo` and `Bar`:
|--lib
| |
| |--Bar
| | |--docs
| | |--examples
| | |--src
| | |- Bar.c
| | |- Bar.h
| | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
| |
| |--Foo
| | |- Foo.c
| | |- Foo.h
| |
| |- README --> THIS FILE
|
|- platformio.ini
|--src
|- main.c
and a contents of `src/main.c`:
```
#include <Foo.h>
#include <Bar.h>
int main (void)
{
...
}
```
PlatformIO Library Dependency Finder will find automatically dependent
libraries scanning project source files.
More information about PlatformIO Library Dependency Finder
- https://docs.platformio.org/page/librarymanager/ldf.html

BIN
mini_printer_v1.0.2.zip Normal file

Binary file not shown.

BIN
mini_printer_v1.0.3_1.zip Normal file

Binary file not shown.

17
platformio.ini Normal file
View File

@ -0,0 +1,17 @@
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
; monitor_port = COM9
; upload_speed = 256000

87
src/em_config.h Normal file
View File

@ -0,0 +1,87 @@
#ifndef _EM_CONFIG_H_
#define _EM_CONFIG_H_
#include <Arduino.h>
#define _FREERTOS_OPEN_
#define SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b" // 自定义打印服务UUID
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8" // 自定义打印特征UUID
#define BLE_NAME "Mini-Printer"
//接收完成所有数据才开始打印
#define START_PRINTER_WHEN_FINISH_RAED 1
//按键引脚
//34 35 36 39仅可以作为输入INPUT,不支持INPUT_PULLUP
#define PIN_KEY 5
//缺纸检测引脚
#define PIN_PAPER 35
//电量相关引脚
#define PIN_BATTERY_ADC 34
#define PIN_ADC_EN 4
//set the resolution to 12 bits (0-4096)
#define BATTERY_ADC_BIT 12
//热敏电阻
#define PIN_TEMPERATRUE 36
//蜂鸣器
#define PIN_BEEP 18
#define PIN_LED 18
//V3 电机引脚
#define PIN_MOTOR_AP 23
#define PIN_MOTOR_AM 22
#define PIN_MOTOR_BP 21
#define PIN_MOTOR_BM 19
//打印头数据引脚
#define PIN_LAT 12
#define PIN_SCK 15
#define PIN_SDA 13
//原厂 V3
#define PIN_STB1 25
#define PIN_STB2 33
#define PIN_STB3 32
#define PIN_STB4 14
#define PIN_STB5 27
#define PIN_STB6 26
//拆机 V2
// #define PIN_STB1 14
// #define PIN_STB2 27
// #define PIN_STB3 26
// #define PIN_STB4 25
// #define PIN_STB5 33
// #define PIN_STB6 32
//打印头电源升压控制引脚
#define PIN_VHEN 17
#ifdef _FREERTOS_OPEN_
// #define MOTOR_WATI_TIME 4 //ms
// #define PRINT_TIME 2 //ms
// #define PRINT_END_TIME 2 //ms
#define PRINT_TIME 1700 //打印加热时间 5700
#define PRINT_END_TIME 200 //冷却时间
#define MOTOR_WATI_TIME 4000 //电机一步时间
#define LAT_TIME 1 //数据锁存时间
#else
//打印头电机参数
#define PRINT_TIME 1700 //打印加热时间
#define PRINT_END_TIME 200 //冷却时间
#define MOTOR_WATI_TIME 4000 //电机一步时间
#define LAT_TIME 1 //数据锁存时间
#endif
#ifdef _FREERTOS_OPEN_
// #define us_delay(ms) vTaskDelay(ms)
#define us_delay(ms) delayMicroseconds(ms)
#else
#define us_delay(ms) delayMicroseconds(ms)
#endif
#endif

24
src/em_device.cpp Normal file
View File

@ -0,0 +1,24 @@
#include "em_device.h"
device_state_t g_device_state;
device_state_t * get_device_state(){
return &g_device_state;
}
void set_device_paper_status(paper_state_e status){
g_device_state.paper_state = status;
}
void set_read_ble_finish(bool finish){
g_device_state.read_ble_finish = finish;
}
void init_device_state(){
memset(&g_device_state,0,sizeof(device_state_t));
g_device_state.printer_state = PRINTER_STATUS_INIT;
g_device_state.battery = 100;
g_device_state.temperature = 30;
g_device_state.paper_state = PAPER_STATUS_NORMAL;
g_device_state.read_ble_finish = false;
}

35
src/em_device.h Normal file
View File

@ -0,0 +1,35 @@
#ifndef _EM_DEVICE_H_
#define _EM_DEVICE_H_
#include "em_config.h"
typedef enum{
PRINTER_STATUS_INIT = 0,
PRINTER_STATUS_START,
PRINTER_STATUS_WORKING,
PRINTER_STATUS_FINISH,
}printer_state_e;
typedef enum{
PAPER_STATUS_NORMAL = 0,
PAPER_STATUS_LACK,
}paper_state_e;
typedef struct
{
uint8_t battery;
uint8_t temperature;
paper_state_e paper_state;
printer_state_e printer_state;
bool read_ble_finish;
}device_state_t;
void init_device_state();
device_state_t * get_device_state();
void set_read_ble_finish(bool finish);
void set_device_paper_status(paper_state_e status);
#endif

202
src/em_task.cpp Normal file
View File

@ -0,0 +1,202 @@
#include "em_task.h"
#include "hal/em_button.h"
#include "hal/em_motor.h"
#include "hal/em_printer.h"
#include "hal/em_adc.h"
Button_t Button;
bool printer_test = false;
void Btn_Dowm_CallBack(void *btn)
{
Serial.print("Button 单击!");
printer_test = true;
// read_all_hal();
}
void Btn_Double_CallBack(void *btn)
{
Serial.print("Button 双击!");
}
void Btn_Long_CallBack(void *btn)
{
Serial.print("Button 长按!");
device_state_t *pdevice = get_device_state();
bool need_beep = false;
// 不缺纸且不在打印中才执行
if (pdevice->paper_state == PAPER_STATUS_NORMAL)
{
if (pdevice->printer_state == PRINTER_STATUS_FINISH ||
pdevice->printer_state == PRINTER_STATUS_INIT)
{
Serial.print("开始走纸\n");
motor_start();
}
else
{
need_beep = true;
}
}
else
need_beep = true;
if (need_beep)
{
run_beep(BEEP_WARN);
run_led(LED_WARN);
}
}
void Btn_Logn_Free_CallBack(void *btn)
{
Serial.print("停止走纸\n");
motor_stop();
}
uint8_t Read_Button_Level(void)
{
return digitalRead(PIN_KEY);
}
void init_key()
{
Button_Create("Button", // 按键名字
&Button, // 按键句柄
Read_Button_Level, // 按键电平检测函数接口
LOW); // 触发电平
Button_Attach(&Button, BUTTON_DOWM, Btn_Dowm_CallBack); // 按键单击
Button_Attach(&Button, BUTTON_DOUBLE, Btn_Double_CallBack); // 双击
Button_Attach(&Button, BUTTON_LONG, Btn_Long_CallBack); // 长按
Button_Attach(&Button, BUTTON_LONG_FREE, Btn_Logn_Free_CallBack); // 长按释放
}
/**
* @brief
*
*/
void run_report()
{
if (get_state_timeout())
{
clean_state_timeout();
read_all_hal();
if (get_ble_connect())
{
Serial.print("report device status report time up\n");
ble_report();
}
}
if (read_paper_irq_need_report_status())
{
// 缺纸中断产生,需要上报
Serial.print("report device status : paper irq\n");
ble_report();
}
}
/**
* @brief
*
*/
void run_printer()
{
device_state_t *pdevice = get_device_state();
#ifdef START_PRINTER_WHEN_FINISH_RAED
if (pdevice->read_ble_finish == true)
{
if (pdevice->printer_state == PRINTER_STATUS_FINISH ||
pdevice->printer_state == PRINTER_STATUS_INIT)
{
pdevice->read_ble_finish = false;
pdevice->printer_state = PRINTER_STATUS_START;
ble_report();
Serial.printf("report device status : printing start %d\n",get_ble_rx_leftline());
run_beep(BEEP_PRINTER_START);
run_led(LED_PRINTER_START);
}
}
#else
// 接收大于100条时才触发开始打印
if (get_ble_rx_leftline()> 100)
{
if (pdevice->printer_state == PRINTER_STATUS_FINISH ||
pdevice->printer_state == PRINTER_STATUS_INIT)
{
pdevice->printer_state = PRINTER_STATUS_START;
ble_report();
Serial.print("report device status : printing start\n");
run_beep(BEEP_PRINTER_START);
run_led(LED_PRINTER_START);
}
}
#endif
// 开始打印
if (pdevice->printer_state == PRINTER_STATUS_START)
{
// 正常打印
start_printing_by_queuebuf();
pdevice->printer_state = PRINTER_STATUS_FINISH;
}
}
void task_report(void *pvParameters)
{
for (;;) // A Task shall never return or exit.
{
run_report();
vTaskDelay(100);
}
}
void task_button(void *pvParameters)
{
for (;;) // A Task shall never return or exit.
{
Button_Process(); // 需要周期调用按键处理函数
vTaskDelay(20);
}
}
void printer_run(){
for (;;) // A Task shall never return or exit.
{
run_printer();
// vTaskDelay(10);
if(printer_test){
printer_test = false;
testSTB();
}
}
}
void init_task()
{
Serial.begin(115200);
Serial.print("init_task\n");
Serial.print("--mini printer V1.0.2--\n");
init_device_state();
init_timer();
init_hal();
init_queue();
adc_init();
init_ble();
init_key();
init_printer();
xTaskCreate(
task_report, // 任务函数
"TaskReport", // 任务名
1024*10, // 任务栈
NULL, // 任务参数
1, // 任务优先级, with 3 (configMAX_PRIORITIES - 1) 是最高的0是最低的.
NULL // 任务句柄
);
xTaskCreate(
task_button, // 任务函数
"TaskButton", // 任务名
1024*5, // 任务栈
NULL, // 任务参数
0, // 任务优先级, with 3 (configMAX_PRIORITIES - 1) 是最高的0是最低的.
NULL // 任务句柄
);
}

14
src/em_task.h Normal file
View File

@ -0,0 +1,14 @@
#ifndef _EM_TASK_H_
#define _EM_TASK_H_
#include "em_config.h"
#include "em_device.h"
#include "hal/em_timer.h"
#include "hal/em_ble.h"
#include "hal/em_hal.h"
#include "utils/em_queue.h"
void init_task();
void printer_run();
#endif

114
src/hal/em_adc.cpp Normal file
View File

@ -0,0 +1,114 @@
#include "em_config.h"
void adc_init() {
pinMode(PIN_ADC_EN, OUTPUT);
analogReadResolution(BATTERY_ADC_BIT);
digitalWrite(PIN_ADC_EN, HIGH);
}
void adc_test() {
// read the analog / millivolts value for pin 2:
int analogValue = analogRead(PIN_BATTERY_ADC);
int analogVolts = analogReadMilliVolts(PIN_BATTERY_ADC);
// print out the values you read:
Serial.printf("ADC analog value = %d\n",analogValue);
Serial.printf("ADC millivolts value = %d\n",analogVolts);
}
/**
* @brief ADC引脚电压值
*
* @return int
*/
int get_adc_volts(){
// int analogValue = analogRead(PIN_BATTERY_ADC);
// Serial.printf("ADC analog value = %d volts = %d\n",analogValue,analogValue*2.6/4095.0);
int analogVolts = analogReadMilliVolts(PIN_BATTERY_ADC);
Serial.printf("ADC millivolts value = %d\n",analogVolts);
return analogVolts;
}
/**
NTC Rt = Rp *EXP(B*(1/T1-1/T2))
T1与电阻Rt的关系T1=1/logRt/Rp/B+1/T2
T1和T2指的是K度,K度=273.15()+
T2=(273.15+25)
Rt T1温度下的阻值
Rp T2常温下的标称阻值100K的热敏电阻25100KR=100KT2=(273.15+25)
B值是热敏电阻的重要参数 B25/50= 3950K ±1%
t=T1-273.15,+0.5
ADC采样率8位 R1=10K R2= 3.3V
Rt = R*(3.3-VR)/VR
VR = 3.3*ADC_Value/1024
ADC_Value = VR*4096/3.3 =3.3*R/(Rt+R)*4096/3.3 = R/(Rt+R)*1024
ADC_Value=3.3/(C5+10)*10/3.3*1023
使RTR0*exp(B (1/T-1/T0))excel中计算得到步进值为0.1
Rt=100*exp(3950*(1/(273.15+T1)-1/(273.15+25)))
Rt=100*EXP(3990*(1/(273.15+T1)-1/(273.15+25)))
*/
/**
* @brief
*
* @param Rt
* @return float
*/
float em_temp_calculate(float Rt)
{
float Rp = 30000; // 30k
float T2 = 273.15 + 25;
float Bx = 3950; // B值
float Ka = 273.15;
float temp = 0.0f;
temp = 1 / (log(Rt / Rp) / Bx + 1 / T2) - Ka + 0.5;
return temp;
}
/**
* @brief Get the adc temperatrue object
*
* @return float
*/
float get_adc_temperatrue(){
float temp = 0.0f;
float Rt=0;
float vol=0;
//ADC转换为电压 vol=AD/4096*VCC
// vol=(float)((analogRead(PIN_TEMPERATRUE))*(3.3/4096));
// vol=(float)((analogRead(PIN_TEMPERATRUE))*(3900.0/4095.0));
// Serial.printf("ADC temperatrue analog value = %f %d\n",vol,analogRead(PIN_TEMPERATRUE));
vol = analogReadMilliVolts(PIN_TEMPERATRUE)/1000.0;
Serial.printf("ADC temperatrue analog value = %f\n",vol);
//电压转换为阻值 10k vol/VCC=Rt/(R+Rt) vol/3.3=Rt/(10000+Rt)
Rt=(vol*10000)/(3.3-vol);
Serial.printf("ADC temperatrue Rt = %f\n",Rt);
temp = em_temp_calculate(Rt);
return temp;
}
void em_adc_test(){
float Rt=0;
float vol=3.0f;
Rt=(vol*10000)/(3.3-vol);
Serial.printf("Rt = %f\n",Rt);
Rt = 60000; //60k 10°C
float temp = 0.0f;
temp = em_temp_calculate(Rt);
Serial.printf("temp = %f\n",temp);
if(temp >= 1e-7){
Serial.printf("\n");
}else{
Serial.printf("\n");
}
}

12
src/hal/em_adc.h Normal file
View File

@ -0,0 +1,12 @@
#ifndef _EM_ADC_H_
#define _EM_ADC_H_
void adc_init();
int get_adc_volts();
void em_adc_test();
float get_adc_temperatrue();
#endif

114
src/hal/em_ble.cpp Normal file
View File

@ -0,0 +1,114 @@
#include "em_ble.h"
#include "em_printer.h"
BLECharacteristic *pCharacteristic = NULL;
bool bleConnected = false;
uint32_t packcount = 0;
void clean_blepack_count(){
packcount = 0;
}
uint32_t get_blepack_count(){
return packcount;
}
bool get_ble_connect(){
return bleConnected;
}
void ble_report(){
if (get_ble_connect()){
device_state_t *pdevice = get_device_state();
uint8_t status[4];
status[0] = pdevice->battery;
status[1] = pdevice->temperature;
status[2] = pdevice->paper_state;
status[3] = pdevice->printer_state;
pCharacteristic->setValue((uint8_t*)&status,sizeof(status));
pCharacteristic->notify();
}
}
// Server回调函数声明
class bleServerCallbacks : public BLEServerCallbacks
{
void onConnect(BLEServer *pServer)
{
bleConnected = true;
packcount = 0;
Serial.println("现在有设备接入~");
run_beep(BEEP_CONNECT);
run_led(LED_CONNECT);
}
void onDisconnect(BLEServer *pServer)
{
bleConnected = false;
Serial.println("现在有设备断开连接~");
// 在有设备接入后Advertising广播会被停止所以要在设备断开连接时重新开启广播
// 不然的话只有重启ESP32后才能重新搜索到
pServer->startAdvertising(); // 该行效果同 BLEDevice::startAdvertising();
}
};
class bleCharacteristicCallbacks : public BLECharacteristicCallbacks
{
void onRead(BLECharacteristic *pCharacteristic)
{ // 客户端读取事件回调函数
Serial.println("触发读取事件");
}
void onWrite(BLECharacteristic *pCharacteristic)
{ // 客户端写入事件回调函数
size_t length = pCharacteristic->getLength();
uint8_t *pdata = pCharacteristic->getData();
if(length == 5){
if(pdata[0] == 0xA5 && pdata[1] == 0xA5 && pdata[2] == 0xA5 && pdata[3] == 0xA5){
if(pdata[4] == 1){
set_heat_density(30);
}else if(pdata[4] == 2){
set_heat_density(60);
}else{
set_heat_density(100);
}
return;
}
if(pdata[0] == 0xA6 && pdata[1] == 0xA6 && pdata[2] == 0xA6 && pdata[3] == 0xA6){
set_read_ble_finish(true);
Serial.printf("接收打印数据完成,总行数=%d\n",packcount);
}
}
packcount++;
write_to_printbuffer(pdata,length);
Serial.printf("触发写入事件 length=%d count=%d ", length, packcount);
for (int index = 0; index < length; index++)
{
Serial.printf(" %x", pdata[index]);
}
Serial.printf("\n");
}
};
void init_ble()
{
BLEDevice::init(BLE_NAME); // 填写自身对外显示的蓝牙设备名称,并初始化蓝牙功能
BLEDevice::startAdvertising(); // 开启Advertising广播
BLEServer *pServer = BLEDevice::createServer(); // 创建服务器
pServer->setCallbacks(new bleServerCallbacks()); // 绑定回调函数
BLEService *pService = pServer->createService(SERVICE_UUID); // 创建服务
pCharacteristic = pService->createCharacteristic( // 创建特征
CHARACTERISTIC_UUID,
BLECharacteristic::PROPERTY_READ |
BLECharacteristic::PROPERTY_NOTIFY |
BLECharacteristic::PROPERTY_WRITE |
BLECharacteristic::PROPERTY_WRITE_NR);
// 如果客户端连上设备后没有任何写入的情况下第一次读取到的数据应该是这里设置的值
pCharacteristic->setCallbacks(new bleCharacteristicCallbacks());
pCharacteristic->addDescriptor(new BLE2902()); // 添加描述
pService->start(); // 启动服务
BLEDevice::startAdvertising();
}

44
src/hal/em_ble.h Normal file
View File

@ -0,0 +1,44 @@
#ifndef _EM_BLE_H_
#define _EM_BLE_H_
#include <BLEDevice.h>
#include <BLE2902.h>
#include "em_config.h"
#include "em_device.h"
#include "em_hal.h"
#include "utils/em_queue.h"
/**
* @brief BLE
*
*/
void init_ble();
/**
* @brief
*
*/
void clean_blepack_count();
/**
*
*/
uint32_t get_blepack_count();
/**
* @brief Get the ble connect object
*
* @return true
* @return false
*/
bool get_ble_connect();
/**
* @brief
*
*/
void ble_report();
#endif

486
src/hal/em_button.cpp Normal file
View File

@ -0,0 +1,486 @@
#include "em_button.h"
/*******************************************************************
*
*******************************************************************/
static struct button *Head_Button = NULL;
/*******************************************************************
*
*******************************************************************/
static char *StrnCopy(char *dst, const char *src, uint32_t n);
static void Print_Btn_Info(Button_t *btn);
static void Add_Button(Button_t *btn);
/************************************************************
* @brief
* @param name :
* @param btn :
* @param read_btn_level : uint8_t类型的电平
* @param btn_trigger_level :
* @return NULL
* @author jiejie
* @github https://github.com/jiejieTop
* @date 2018-xx-xx
* @version v1.0
* @note NULL
***********************************************************/
void Button_Create(const char *name,
Button_t *btn,
uint8_t (*read_btn_level)(void),
uint8_t btn_trigger_level)
{
if (btn == NULL)
{
Serial.print("struct button is null!");
return;
}
memset(btn, 0, sizeof(struct button)); // 清除结构体信息,建议用户在之前清除
StrnCopy(btn->Name, name, BTN_NAME_MAX); /* 创建按键名称 */
btn->Button_State = NONE_TRIGGER; // 按键状态
btn->Button_Last_State = NONE_TRIGGER; // 按键上一次状态
btn->Button_Trigger_Event = NONE_TRIGGER; // 按键触发事件
btn->Read_Button_Level = read_btn_level; // 按键读电平函数
btn->Button_Trigger_Level = btn_trigger_level; // 按键触发电平
btn->Button_Last_Level = btn->Read_Button_Level(); // 按键当前电平
btn->Debounce_Time = 0;
// Serial.print("button create success!");
Add_Button(btn); // 创建的时候添加到单链表中
// Print_Btn_Info(btn); // 打印信息
}
/************************************************************
* @brief
* @param btn :
* @param btn_event :
* @param btn_callback :
* @return NULL
* @author jiejie
* @github https://github.com/jiejieTop
* @date 2018-xx-xx
* @version v1.0
***********************************************************/
void Button_Attach(Button_t *btn, Button_Event btn_event, Button_CallBack btn_callback)
{
if (btn == NULL)
{
Serial.print("struct button is null!");
// ASSERT(ASSERT_ERR); //断言
}
if (BUTTON_ALL_RIGGER == btn_event)
{
for (uint8_t i = 0; i < number_of_event - 1; i++)
btn->CallBack_Function[i] = btn_callback; // 按键事件触发的回调函数,用于处理按键事件
}
else
{
btn->CallBack_Function[btn_event] = btn_callback; // 按键事件触发的回调函数,用于处理按键事件
}
}
/************************************************************
* @brief
* @param NULL
* @return NULL
* @author jiejie
* @github https://github.com/jiejieTop
* @date 2018-xx-xx
* @version v1.0
* @note NULL
***********************************************************/
void Button_Delete(Button_t *btn)
{
struct button **curr;
for (curr = &Head_Button; *curr;)
{
struct button *entry = *curr;
if (entry == btn)
{
*curr = entry->Next;
}
else
{
curr = &entry->Next;
}
}
}
/************************************************************
* @brief
* @param NULL
* @return NULL
* @author jiejie
* @github https://github.com/jiejieTop
* @date 2018-xx-xx
* @version v1.0
***********************************************************/
void Get_Button_EventInfo(Button_t *btn)
{
// 按键事件触发的回调函数,用于处理按键事件
for (uint8_t i = 0; i < number_of_event - 1; i++)
{
if (btn->CallBack_Function[i] != 0)
{
Serial.printf("Button_Event:%d", i);
}
}
}
uint8_t Get_Button_Event(Button_t *btn)
{
return (uint8_t)(btn->Button_Trigger_Event);
}
/************************************************************
* @brief
* @param NULL
* @return NULL
* @author jiejie
* @github https://github.com/jiejieTop
* @date 2018-xx-xx
* @version v1.0
***********************************************************/
uint8_t Get_Button_State(Button_t *btn)
{
return (uint8_t)(btn->Button_State);
}
/************************************************************
* @brief
* @param btn:
* @return NULL
* @author jiejie
* @github https://github.com/jiejieTop
* @date 2018-xx-xx
* @version v1.0
* @note 20~50ms
***********************************************************/
void Button_Cycle_Process(Button_t *btn)
{
uint8_t current_level = (uint8_t)btn->Read_Button_Level(); // 获取当前按键电平
if ((current_level != btn->Button_Last_Level) && (++(btn->Debounce_Time) >= BUTTON_DEBOUNCE_TIME)) // 按键电平发生变化,消抖
{
btn->Button_Last_Level = current_level; // 更新当前按键电平
btn->Debounce_Time = 0; // 确定了是按下
// 如果按键是没被按下的,改变按键状态为按下(首次按下/双击按下)
if ((btn->Button_State == NONE_TRIGGER) || (btn->Button_State == BUTTON_DOUBLE))
{
btn->Button_State = BUTTON_DOWM;
}
// 释放按键
else if (btn->Button_State == BUTTON_DOWM)
{
btn->Button_State = BUTTON_UP;
TRIGGER_CB(BUTTON_UP); // 触发释放
Serial.print("释放了按键");
}
}
switch (btn->Button_State)
{
case BUTTON_DOWM: // 按下状态
{
if (btn->Button_Last_Level == btn->Button_Trigger_Level) // 按键按下
{
#if CONTINUOS_TRIGGER // 支持连续触发
if (++(btn->Button_Cycle) >= BUTTON_CONTINUOS_CYCLE)
{
btn->Button_Cycle = 0;
btn->Button_Trigger_Event = BUTTON_CONTINUOS;
TRIGGER_CB(BUTTON_CONTINUOS); // 连按
Serial.print("连按");
}
#else
btn->Button_Trigger_Event = BUTTON_DOWM;
if (++(btn->Long_Time) >= BUTTON_LONG_TIME) // 释放按键前更新触发事件为长按
{
#if LONG_FREE_TRIGGER
btn->Button_Trigger_Event = BUTTON_LONG;
#else
if (++(btn->Button_Cycle) >= BUTTON_LONG_CYCLE) // 连续触发长按的周期
{
btn->Button_Cycle = 0;
btn->Button_Trigger_Event = BUTTON_LONG;
TRIGGER_CB(BUTTON_LONG); // 长按
}
#endif
if (btn->Long_Time == 0xFF) // 更新时间溢出
{
btn->Long_Time = BUTTON_LONG_TIME;
}
Serial.print("长按");
}
#endif
}
break;
}
case BUTTON_UP: // 弹起状态
{
if (btn->Button_Trigger_Event == BUTTON_DOWM) // 触发单击
{
if ((btn->Timer_Count <= BUTTON_DOUBLE_TIME) && (btn->Button_Last_State == BUTTON_DOUBLE)) // 双击
{
btn->Button_Trigger_Event = BUTTON_DOUBLE;
TRIGGER_CB(BUTTON_DOUBLE);
Serial.print("双击");
btn->Button_State = NONE_TRIGGER;
btn->Button_Last_State = NONE_TRIGGER;
}
else
{
btn->Timer_Count = 0;
btn->Long_Time = 0; // 检测长按失败清0
#if (SINGLE_AND_DOUBLE_TRIGGER == 0)
TRIGGER_CB(BUTTON_DOWM); // 单击
#endif
btn->Button_State = BUTTON_DOUBLE;
btn->Button_Last_State = BUTTON_DOUBLE;
}
}
else if (btn->Button_Trigger_Event == BUTTON_LONG)
{
#if LONG_FREE_TRIGGER
TRIGGER_CB(BUTTON_LONG); // 长按
#else
TRIGGER_CB(BUTTON_LONG_FREE); // 长按释放
#endif
btn->Long_Time = 0;
btn->Button_State = NONE_TRIGGER;
btn->Button_Last_State = BUTTON_LONG;
}
#if CONTINUOS_TRIGGER
else if (btn->Button_Trigger_Event == BUTTON_CONTINUOS) // 连按
{
btn->Long_Time = 0;
TRIGGER_CB(BUTTON_CONTINUOS_FREE); // 连发释放
btn->Button_State = NONE_TRIGGER;
btn->Button_Last_State = BUTTON_CONTINUOS;
}
#endif
break;
}
case BUTTON_DOUBLE:
{
btn->Timer_Count++; // 时间记录
if (btn->Timer_Count >= BUTTON_DOUBLE_TIME)
{
btn->Button_State = NONE_TRIGGER;
btn->Button_Last_State = NONE_TRIGGER;
}
#if SINGLE_AND_DOUBLE_TRIGGER
if ((btn->Timer_Count >= BUTTON_DOUBLE_TIME) && (btn->Button_Last_State != BUTTON_DOWM))
{
btn->Timer_Count = 0;
TRIGGER_CB(BUTTON_DOWM); // 单击
btn->Button_State = NONE_TRIGGER;
btn->Button_Last_State = BUTTON_DOWM;
}
#endif
break;
}
default:
break;
}
}
/************************************************************
* @brief
* @param NULL
* @return NULL
* @author jiejie
* @github https://github.com/jiejieTop
* @date 2018-xx-xx
* @version v1.0
* @note 20-50ms调用一次
***********************************************************/
void Button_Process(void)
{
struct button *pass_btn;
for (pass_btn = Head_Button; pass_btn != NULL; pass_btn = pass_btn->Next)
{
Button_Cycle_Process(pass_btn);
}
}
/************************************************************
* @brief
* @param NULL
* @return NULL
* @author jiejie
* @github https://github.com/jiejieTop
* @date 2018-xx-xx
* @version v1.0
* @note NULL
***********************************************************/
void Search_Button(void)
{
struct button *pass_btn;
for (pass_btn = Head_Button; pass_btn != NULL; pass_btn = pass_btn->Next)
{
Serial.printf("button node have %s", pass_btn->Name);
}
}
/************************************************************
* @brief
* @param NULL
* @return NULL
* @author jiejie
* @github https://github.com/jiejieTop
* @date 2018-xx-xx
* @version v1.0
* @note
***********************************************************/
void Button_Process_CallBack(void *btn)
{
uint8_t btn_event = Get_Button_Event((Button_t *)btn);
switch (btn_event)
{
case BUTTON_DOWM:
{
Serial.print("添加你的按下触发的处理逻辑");
break;
}
case BUTTON_UP:
{
Serial.print("添加你的释放触发的处理逻辑");
break;
}
case BUTTON_DOUBLE:
{
Serial.print("添加你的双击触发的处理逻辑");
break;
}
case BUTTON_LONG:
{
Serial.print("添加你的长按触发的处理逻辑");
break;
}
case BUTTON_LONG_FREE:
{
Serial.print("添加你的长按释放触发的处理逻辑");
break;
}
case BUTTON_CONTINUOS:
{
Serial.print("添加你的连续触发的处理逻辑");
break;
}
case BUTTON_CONTINUOS_FREE:
{
Serial.print("添加你的连续触发释放的处理逻辑");
break;
}
}
}
/**************************** 以下是内部调用函数 ********************/
/************************************************************
* @brief
* @param NULL
* @return NULL
* @author jiejie
* @github https://github.com/jiejieTop
* @date 2018-xx-xx
* @version v1.0
* @note NULL
***********************************************************/
static char *StrnCopy(char *dst, const char *src, uint32_t n)
{
if (n != 0)
{
char *d = dst;
const char *s = src;
do
{
if ((*d++ = *s++) == 0)
{
while (--n != 0)
*d++ = 0;
break;
}
} while (--n != 0);
}
return (dst);
}
/************************************************************
* @brief
* @param NULL
* @return NULL
* @author jiejie
* @github https://github.com/jiejieTop
* @date 2018-xx-xx
* @version v1.0
* @note NULL
***********************************************************/
static void Print_Btn_Info(Button_t *btn)
{
Serial.printf("button struct information:\n\
btn->Name:%s \n\
btn->Button_State:%d \n\
btn->Button_Trigger_Event:%d \n\
btn->Button_Trigger_Level:%d \n\
btn->Button_Last_Level:%d \n\
",
btn->Name,
btn->Button_State,
btn->Button_Trigger_Event,
btn->Button_Trigger_Level,
btn->Button_Last_Level);
Search_Button();
}
/************************************************************
* @brief 使
* @param NULL
* @return NULL
* @author jiejie
* @github https://github.com/jiejieTop
* @date 2018-xx-xx
* @version v1.0
* @note NULL
***********************************************************/
static void Add_Button(Button_t *btn)
{
btn->Next = Head_Button;
Head_Button = btn;
}

105
src/hal/em_button.h Normal file
View File

@ -0,0 +1,105 @@
#ifndef _EM_KEY_H_
#define _EM_KEY_H_
#include "em_config.h"
#define BTN_NAME_MAX 32 //名字最大为32字节
/* 按键消抖时间40ms, 建议调用周期为20ms
40ms状态不变才认为有效
*/
#define CONTINUOS_TRIGGER 0 //是否支持连续触发,连发的话就不要检测单双击与长按了
/* 是否支持单击&双击同时存在触发,如果选择开启宏定义的话,单双击都回调,只不过单击会延迟响应,
BUTTON_DOUBLE_TIME
/
*/
#define SINGLE_AND_DOUBLE_TRIGGER 1
/* 是否支持长按释放才触发,如果打开这个宏定义,那么长按释放之后才触发单次长按,
BUTTON_LONG_CYCLE */
#define LONG_FREE_TRIGGER 0
#define BUTTON_DEBOUNCE_TIME 2 //消抖时间 (n-1)*调用周期
#define BUTTON_CONTINUOS_CYCLE 1 //连按触发周期时间 (n-1)*调用周期
#define BUTTON_LONG_CYCLE 1 //长按触发周期时间 (n-1)*调用周期
#define BUTTON_DOUBLE_TIME 15 //双击间隔时间 (n-1)*调用周期 建议在200-600ms
#define BUTTON_LONG_TIME 50 /* 持续n秒((n-1)*调用周期 ms),认为长按事件 */
#define TRIGGER_CB(event) \
if(btn->CallBack_Function[event]) \
btn->CallBack_Function[event]((Button_t*)btn)
typedef void (*Button_CallBack)(void*); /* 按键触发回调函数,需要用户实现 */
typedef enum {
BUTTON_DOWM = 0,
BUTTON_UP,
BUTTON_DOUBLE,
BUTTON_LONG,
BUTTON_LONG_FREE,
BUTTON_CONTINUOS,
BUTTON_CONTINUOS_FREE,
BUTTON_ALL_RIGGER,
number_of_event, /* 触发回调的事件 */
NONE_TRIGGER
}Button_Event;
/*
1
*/
typedef struct button
{
/* 下面是一个函数指针,指向判断按键手否按下的函数 */
uint8_t (*Read_Button_Level)(void); /* 读取按键电平函数,需要用户实现 */
char Name[BTN_NAME_MAX];
uint8_t Button_State : 4; /* 按键当前状态(按下还是弹起) */
uint8_t Button_Last_State : 4; /* 上一次的按键状态,用于判断双击 */
uint8_t Button_Trigger_Level : 2; /* 按键触发电平 */
uint8_t Button_Last_Level : 2; /* 按键当前电平 */
uint8_t Button_Trigger_Event; /* 按键触发事件,单击,双击,长按等 */
Button_CallBack CallBack_Function[number_of_event];
uint8_t Button_Cycle; /* 连续按键周期 */
uint8_t Timer_Count; /* 计时 */
uint8_t Debounce_Time; /* 消抖时间 */
uint8_t Long_Time; /* 按键按下持续时间 */
struct button *Next;
}Button_t;
/* 供外部调用的函数声明 */
void Button_Create(const char *name,
Button_t *btn,
uint8_t(*read_btn_level)(void),
uint8_t btn_trigger_level);
void Button_Attach(Button_t *btn,Button_Event btn_event,Button_CallBack btn_callback);
void Button_Cycle_Process(Button_t *btn);
void Button_Process(void);
void Button_Delete(Button_t *btn);
void Search_Button(void);
void Get_Button_EventInfo(Button_t *btn);
uint8_t Get_Button_Event(Button_t *btn);
uint8_t Get_Button_State(Button_t *btn);
void Button_Process_CallBack(void *btn);
#endif

148
src/hal/em_hal.cpp Normal file
View File

@ -0,0 +1,148 @@
#include "em_hal.h"
#include "em_adc.h"
int freq = 2000; //设置频率2000kHz
int channel = 0; //通道号取值0 ~ 15
int resolution = 8; //分辨率取值0~20占空比duty最大取值为2^resolution-1
bool need_report = false;
#define EPISON 1e-7
void read_battery()
{
get_device_state()->battery = map(get_adc_volts()*2,3300,4200,0,100);
if(get_device_state()->battery > 100)
get_device_state()->battery = 100;
Serial.printf("battery = %d\n",get_device_state()->battery);
}
void read_temperature()
{
float temperatrue = get_adc_temperatrue();
Serial.printf("temperature = %f\n",temperatrue);
if(temperatrue >= EPISON){
get_device_state()->temperature = temperatrue;
}else{
get_device_state()->temperature = 0;
}
}
void run_beep(beep_type_e type){
#ifdef BEEP_MODE
switch (type)
{
case BEEP_CONNECT:
ledcWriteNote(channel,NOTE_F,5);
delay(100);
ledcWrite(channel, 0);
break;
case BEEP_WARN:
ledcWriteNote(channel,NOTE_D,5);
delay(100);
ledcWrite(channel, 0);
delay(100);
ledcWriteNote(channel,NOTE_D,5);
delay(100);
ledcWrite(channel, 0);
delay(100);
ledcWriteNote(channel,NOTE_D,5);
delay(100);
ledcWrite(channel, 0);
break;
case BEEP_PRINTER_START:
ledcWriteNote(channel,NOTE_D,5);
delay(100);
ledcWrite(channel, 0);
break;
default:
break;
}
#endif
}
void run_led(led_type_e type){
switch (type)
{
case LED_CONNECT:
digitalWrite(PIN_LED, 0);
delay(100);
digitalWrite(PIN_LED, 1);
break;
case LED_WARN:
digitalWrite(PIN_LED, 0);
delay(100);
digitalWrite(PIN_LED, 1);
delay(100);
digitalWrite(PIN_LED, 0);
delay(100);
digitalWrite(PIN_LED, 1);
delay(100);
digitalWrite(PIN_LED, 0);
delay(100);
digitalWrite(PIN_LED, 1);
break;
case LED_PRINTER_START:
digitalWrite(PIN_LED, 0);
delay(100);
digitalWrite(PIN_LED, 1);
break;
default:
break;
}
}
void ARDUINO_ISR_ATTR paper_isr()
{
need_report = true;
set_device_paper_status(PAPER_STATUS_LACK);
detachInterrupt(PIN_PAPER);
}
void read_paper_statue()
{
if(digitalRead(PIN_PAPER) == PAPER_STATUS_NORMAL){
get_device_state()->paper_state = PAPER_STATUS_NORMAL;
attachInterrupt(PIN_PAPER, paper_isr, RISING);
}else{
get_device_state()->paper_state = PAPER_STATUS_LACK;
}
Serial.printf("paper_state = %d %d\n",get_device_state()->paper_state,digitalRead(PIN_PAPER));
}
bool read_paper_irq_need_report_status()
{
if (need_report)
{
need_report = false;
return true;
}
else
return false;
}
void read_all_hal()
{
read_battery();
read_temperature();
read_paper_statue();
}
void init_hal()
{
//缺纸IO初始化
pinMode(PIN_PAPER, INPUT);
attachInterrupt(PIN_PAPER, paper_isr, RISING);
#ifdef BEEP_MODE
//蜂鸣器初始化
//设置通道频率和分辨率
ledcSetup(channel, freq, resolution);
//将通道0与引脚15连接
ledcAttachPin(PIN_BEEP, channel);
#endif
pinMode(PIN_LED, OUTPUT);
digitalWrite(PIN_LED, 1);
}

32
src/hal/em_hal.h Normal file
View File

@ -0,0 +1,32 @@
#ifndef _EM_HAL_H_
#define _EM_HAL_H_
#include "em_config.h"
#include "em_device.h"
typedef enum{
BEEP_CONNECT = 0,
BEEP_WARN,
BEEP_PRINTER_START,
}beep_type_e;
typedef enum{
LED_CONNECT = 0,
LED_WARN,
LED_PRINTER_START,
}led_type_e;
void run_beep(beep_type_e type);
void run_led(led_type_e type);
void read_all_hal();
void init_hal();
bool read_paper_irq_need_report_status();
#endif

116
src/hal/em_motor.cpp Normal file
View File

@ -0,0 +1,116 @@
#include "em_motor.h"
#include <Ticker.h>
/*
step A B A- B-
AN BN AP BP
1 1 0 0 1
2 0 0 0 1
3 0 0 1 1
4 0 0 1 0
5 0 1 1 0
6 0 1 0 0
7 1 1 0 0
8 1 0 0 0
4step
PIN
A- A B- B
0 1 1 0
0 0 1 0
1 0 1 0
1 0 0 0
1 0 0 1
0 0 0 1
0 1 0 1
0 1 0 0
*/
uint8_t motor_pos = 0;
uint8_t motor_table[8][4] =
{
{0, 1, 1, 0},
{0, 0, 1, 0},
{1, 0, 1, 0},
{1, 0, 0, 0},
{1, 0, 0, 1},
{0, 0, 0, 1},
{0, 1, 0, 1},
{0, 1, 0, 0}};
Ticker timer_motor;
void timer_motor_callbackfun()
{
digitalWrite(PIN_MOTOR_AP, motor_table[motor_pos][0]);
digitalWrite(PIN_MOTOR_AM, motor_table[motor_pos][1]);
digitalWrite(PIN_MOTOR_BP, motor_table[motor_pos][2]);
digitalWrite(PIN_MOTOR_BM, motor_table[motor_pos][3]);
motor_pos++;
if (motor_pos >= 8)
{
motor_pos = 0;
}
}
void motor_start()
{
if (timer_motor.active() == false){
digitalWrite(PIN_VHEN, HIGH);
timer_motor.attach_ms(2, timer_motor_callbackfun);
}
}
void motor_stop()
{
digitalWrite(PIN_MOTOR_AP, 0);
digitalWrite(PIN_MOTOR_AM, 0);
digitalWrite(PIN_MOTOR_BP, 0);
digitalWrite(PIN_MOTOR_BM, 0);
digitalWrite(PIN_VHEN, LOW);
if (timer_motor.active())
timer_motor.detach();
}
void motor_run()
{
digitalWrite(PIN_MOTOR_AP, motor_table[motor_pos][0]);
digitalWrite(PIN_MOTOR_AM, motor_table[motor_pos][1]);
digitalWrite(PIN_MOTOR_BP, motor_table[motor_pos][2]);
digitalWrite(PIN_MOTOR_BM, motor_table[motor_pos][3]);
motor_pos++;
if (motor_pos >= 8)
{
motor_pos = 0;
}
}
void motor_run_step(uint32_t steps)
{
while (steps)
{
digitalWrite(PIN_MOTOR_AP, motor_table[motor_pos][0]);
digitalWrite(PIN_MOTOR_AM, motor_table[motor_pos][1]);
digitalWrite(PIN_MOTOR_BP, motor_table[motor_pos][2]);
digitalWrite(PIN_MOTOR_BM, motor_table[motor_pos][3]);
motor_pos++;
if (motor_pos >= 8)
{
motor_pos = 0;
}
us_delay(MOTOR_WATI_TIME);
steps--;
}
}
void init_motor()
{
pinMode(PIN_MOTOR_AP, OUTPUT);
pinMode(PIN_MOTOR_AM, OUTPUT);
pinMode(PIN_MOTOR_BP, OUTPUT);
pinMode(PIN_MOTOR_BM, OUTPUT);
digitalWrite(PIN_MOTOR_AP, 0);
digitalWrite(PIN_MOTOR_AM, 0);
digitalWrite(PIN_MOTOR_BP, 0);
digitalWrite(PIN_MOTOR_BM, 0);
}

12
src/hal/em_motor.h Normal file
View File

@ -0,0 +1,12 @@
#ifndef _EM_MOTOR_H_
#define _EM_MOTOR_H_
#include "em_config.h"
void motor_run_step(uint32_t steps);
void motor_start();
void motor_stop();
void init_motor();
void motor_run();
#endif

402
src/hal/em_printer.cpp Normal file
View File

@ -0,0 +1,402 @@
#include "em_printer.h"
#include "em_timer.h"
float addTime[6] = {0};
// 点数-增加时间系数
#define kAddTime 0.001
// 根据打印头实际打印效果修改打印时间偏移值
// #define STB1_ADDTIME 200
// #define STB2_ADDTIME 200
// #define STB3_ADDTIME -200
// #define STB4_ADDTIME 0
// #define STB5_ADDTIME 100
// #define STB6_ADDTIME 500
#define STB1_ADDTIME 0
#define STB2_ADDTIME 0
#define STB3_ADDTIME 0
#define STB4_ADDTIME 0
#define STB5_ADDTIME 0
#define STB6_ADDTIME 0
// 热密度
uint8_t heat_density = 64;
/**
* @brief
*
*/
static void set_stb_idle()
{
digitalWrite(PIN_STB1, LOW);
digitalWrite(PIN_STB2, LOW);
digitalWrite(PIN_STB3, LOW);
digitalWrite(PIN_STB4, LOW);
digitalWrite(PIN_STB5, LOW);
digitalWrite(PIN_STB6, LOW);
}
/**
* @brief
*
*/
static void init_printing()
{
// 开启打印超时监听
open_printer_timeout_timer();
set_stb_idle();
digitalWrite(PIN_LAT, HIGH);
// POWER ON
digitalWrite(PIN_VHEN, HIGH);
}
/**
* @brief
*
*/
static void stop_printing()
{
// 关闭打印超时监听
close_printer_timeout_timer();
// POWER OFF
digitalWrite(PIN_VHEN, LOW);
set_stb_idle();
digitalWrite(PIN_LAT, HIGH);
}
/**
* @brief Set the heat density object密度设置
*
* @param density
*/
void set_heat_density(uint8_t density)
{
Serial.printf("打印密度设置:%d\n", density);
heat_density = density;
}
void clearAddTime()
{
addTime[0] = addTime[1] = addTime[2] = addTime[3] = addTime[4] = addTime[5] = 0;
}
/**
* @brief
*
* @param data
*/
static void send_one_line_data(uint8_t *data)
{
float tmpAddTime = 0;
clearAddTime();
for (uint8_t i = 0; i < 6; ++i)
{
for (uint8_t j = 0; j < 8; ++j)
{
addTime[i] += data[i * 8 + j];
}
tmpAddTime = addTime[i] * addTime[i];
addTime[i] = kAddTime * tmpAddTime;
}
// Serial.printf("data %d\n", data[0]);
/* Send one dot line data. */
spiCommand(data, TPH_DI_LEN);
/* After send one dot line, send LAT signal low pulse.*/
digitalWrite(PIN_LAT, LOW);
us_delay(LAT_TIME);
digitalWrite(PIN_LAT, HIGH);
}
/**
* @brief
*
* @param now_stb_num
*/
static void run_stb(uint8_t now_stb_num)
{
switch (now_stb_num)
{
case 0:
digitalWrite(PIN_STB1, 1);
us_delay((PRINT_TIME + addTime[0] + STB1_ADDTIME) * ((double)heat_density / 100));
digitalWrite(PIN_STB1, 0);
us_delay(PRINT_END_TIME);
break;
case 1:
digitalWrite(PIN_STB2, 1);
us_delay((PRINT_TIME + addTime[1] + STB2_ADDTIME) * ((double)heat_density / 100));
digitalWrite(PIN_STB2, 0);
us_delay(PRINT_END_TIME);
break;
case 2:
digitalWrite(PIN_STB3, 1);
us_delay((PRINT_TIME + addTime[2] + STB3_ADDTIME) * ((double)heat_density / 100));
digitalWrite(PIN_STB3, 0);
us_delay(PRINT_END_TIME);
break;
case 3:
digitalWrite(PIN_STB4, 1);
us_delay((PRINT_TIME + addTime[3] + STB4_ADDTIME) * ((double)heat_density / 100));
digitalWrite(PIN_STB4, 0);
us_delay(PRINT_END_TIME);
break;
case 4:
digitalWrite(PIN_STB5, 1);
us_delay((PRINT_TIME + addTime[4] + STB5_ADDTIME) * ((double)heat_density / 100));
digitalWrite(PIN_STB5, 0);
us_delay(PRINT_END_TIME);
break;
case 5:
digitalWrite(PIN_STB6, 1);
us_delay((PRINT_TIME + addTime[5] + STB6_ADDTIME) * ((double)heat_density / 100));
digitalWrite(PIN_STB6, 0);
us_delay(PRINT_END_TIME);
break;
default:
break;
}
}
/**
* @brief &
*
* @param need_stop
* @param stbnum
*/
bool move_and_start_std(bool need_stop, uint8_t stbnum)
{
if (need_stop == true)
{
Serial.print("打印停止\n");
motor_stop();
stop_printing();
return true;
}
// 4step一行
motor_run();
if (stbnum == ALL_STB_NUM)
{
// 所有通道打印
for (uint8_t index = 0; index < 6; index++)
{
run_stb(index);
// 把电机运行信号插入通道加热中,减少打印卡顿和耗时
if (index == 1 || index == 3 || index == 5)
{
motor_run();
}
}
// motor_run_step(3);
}
else
{
// 单通道打印
run_stb(stbnum);
motor_run_step(3);
}
return false;
}
/**
* @brief
*
* @param need_report BLE上报
* @return true
* @return false
*/
bool printing_error_check(bool need_report)
{
if (get_printer_timeout_status())
{
Serial.print("打印超时\n");
return true;
}
if (get_device_state()->paper_state == PAPER_STATUS_LACK)
{
if(need_report){
// 停止打印
clean_printbuffer();
ble_report();
}
// 停止打印
Serial.print("缺纸\n");
run_beep(BEEP_WARN);
run_led(LED_WARN);
return true;
}
if (get_device_state()->temperature > 65)
{
if(need_report){
// 停止打印
clean_printbuffer();
ble_report();
}
// 停止打印
Serial.print("温度异常\n");
run_beep(BEEP_WARN);
run_led(LED_WARN);
return true;
}
return false;
}
/**
* @brief
*
* @param data
* @param length 48*n
*/
void start_printing(uint8_t *data, uint32_t len)
{
uint32_t offset = 0;
uint8_t *ptr = data;
bool need_stop = false;
init_printing();
while (1)
{
if (len > offset)
{
// 发送一行数据 48byte*8=384bit
send_one_line_data(ptr);
offset += TPH_DI_LEN;
ptr += TPH_DI_LEN;
}
else
need_stop = true;
if (move_and_start_std(need_stop, ALL_STB_NUM))
break;
if(printing_error_check(false))
break;
}
motor_run_step(40);
motor_stop();
Serial.printf("打印完成\n");
}
/**
* @brief
*
*/
void start_printing_by_queuebuf()
{
uint8_t *pdata = NULL;
bool need_stop = false;
uint32_t printer_count = 0;
init_printing();
while (1)
{
if (get_ble_rx_leftline() > 0)
{
// Serial.printf("printing...\n");
pdata = read_to_printer();
if (pdata != NULL)
{
printer_count ++;
send_one_line_data(pdata);
if (move_and_start_std(false, ALL_STB_NUM))
break;
}
}
else
{
if (move_and_start_std(true, ALL_STB_NUM))
break;
}
if (get_printer_timeout_status())
break;
if(printing_error_check(true))
break;
}
motor_run_step(140);
motor_stop();
Serial.printf("打印完成 接收总行数:%d 打印总行数:%d\n",get_blepack_count(),printer_count);
clean_blepack_count();
}
/**
* @brief
*
* @param stbnum
* @param data
* @param len
*/
void start_printing_by_onestb(uint8_t stbnum, uint8_t *data, uint32_t len)
{
uint32_t offset = 0;
uint8_t *ptr = data;
bool need_stop = false;
init_printing();
while (1)
{
Serial.printf("printer %d\n", offset);
if (len > offset)
{
// 发送一行数据 48byte*8=384bit
send_one_line_data(ptr);
offset += TPH_DI_LEN;
ptr += TPH_DI_LEN;
}
else
need_stop = true;
if (move_and_start_std(need_stop, stbnum))
break;
if (get_printer_timeout_status())
break;
if(printing_error_check(false))
break;
}
motor_run_step(40);
motor_stop();
}
static void setDebugData(uint8_t *print_data)
{
for (uint32_t cleardata = 0; cleardata < 48 * 5; ++cleardata)
{
print_data[cleardata] = 0x55;
}
}
void testSTB()
{
uint8_t print_data[48 * 10];
uint32_t print_len;
Serial.println("开始打印打印头选通引脚测试\n顺序: 1 2 3 4 5 6");
print_len = 48 * 5;
setDebugData(print_data);
start_printing_by_onestb(0, print_data, print_len);
setDebugData(print_data);
start_printing_by_onestb(1, print_data, print_len);
setDebugData(print_data);
start_printing_by_onestb(2, print_data, print_len);
setDebugData(print_data);
start_printing_by_onestb(3, print_data, print_len);
setDebugData(print_data);
start_printing_by_onestb(4, print_data, print_len);
setDebugData(print_data);
start_printing_by_onestb(5, print_data, print_len);
Serial.println("测试完成");
}
void init_printer()
{
init_motor();
pinMode(PIN_LAT, OUTPUT);
pinMode(PIN_SCK, OUTPUT);
pinMode(PIN_SDA, OUTPUT);
pinMode(PIN_STB1, OUTPUT);
pinMode(PIN_STB2, OUTPUT);
pinMode(PIN_STB3, OUTPUT);
pinMode(PIN_STB4, OUTPUT);
pinMode(PIN_STB5, OUTPUT);
pinMode(PIN_STB6, OUTPUT);
set_stb_idle();
digitalWrite(PIN_LAT, HIGH);
pinMode(PIN_VHEN, OUTPUT);
digitalWrite(PIN_VHEN, LOW);
init_spi();
}

53
src/hal/em_printer.h Normal file
View File

@ -0,0 +1,53 @@
#ifndef _EM_PRINTER_H_
#define _EM_PRINTER_H_
#include "em_config.h"
#include "em_motor.h"
#include "em_spi.h"
#include "em_ble.h"
#include "utils/em_queue.h"
//每行总点数
#define TPH_DOTS_PER_LINE 384
//每行字节长度 384/8
#define TPH_DI_LEN 48
//所有通道打印
#define ALL_STB_NUM 0xFF
/**
* @brief
*
*/
void set_heat_density(uint8_t density);
/**
* @brief
*
* @param data
* @param length 48*n
*/
void start_printing(uint8_t *data, uint32_t len);
/**
* @brief
*
*/
void start_printing_by_queuebuf();
/**
* @brief
*
* @param stbnum
* @param data
* @param len
*/
void start_printing_by_onestb(uint8_t stbnum, uint8_t *data, uint32_t len);
/**
* @brief
*
*/
void init_printer();
void testSTB();
#endif

23
src/hal/em_spi.cpp Normal file
View File

@ -0,0 +1,23 @@
#include "em_spi.h"
static const int spiClk = 1000000; // 1 MHz
SPIClass hspi = SPIClass(HSPI);
SPISettings printerSPISettings = SPISettings(spiClk, SPI_MSBFIRST, SPI_MODE0);
void spiCommand(uint8_t *data_buffer, uint8_t data_len)
{
// use it as you would the regular arduino SPI API
hspi.beginTransaction(printerSPISettings);
hspi.transfer(data_buffer, data_len);
hspi.endTransaction();
}
void init_spi()
{
// hspi = SPIClass(HSPI);
// alternatively route through GPIO pins
hspi.begin(PIN_SCK, 16, PIN_SDA, -1); // SCLK, MISO, MOSI, SS
hspi.setFrequency(spiClk);
}

13
src/hal/em_spi.h Normal file
View File

@ -0,0 +1,13 @@
#ifndef _EM_SPI_H_
#define _EM_SPI_H_
#include "em_config.h"
#include <SPI.h>
void spiCommand(byte data);
void spiCommand(uint8_t *data_buffer, uint8_t data_len);
void init_spi();
#endif

46
src/hal/em_timer.cpp Normal file
View File

@ -0,0 +1,46 @@
#include <Ticker.h>
#include "em_config.h"
#include "em_timer.h"
Ticker read_state_timer;
Ticker printer_timer;
bool read_state_timeout = true;
bool printer_timeout = false;
static void read_state_timer_callbackfun(){
Serial.println("read_state now...");
read_state_timeout = true;
}
void init_timer(){
read_state_timer.attach_ms(10000,read_state_timer_callbackfun);
}
bool get_state_timeout(){
return read_state_timeout;
}
void clean_state_timeout(){
read_state_timeout = false;
}
static void printer_timeout_callbackfun(){
Serial.println("触发打印超时错误...");
printer_timeout = true;
}
bool get_printer_timeout_status(){
return printer_timeout;
}
void open_printer_timeout_timer(){
printer_timeout = false;
printer_timer.once_ms(20000, printer_timeout_callbackfun);
}
void close_printer_timeout_timer(){
if(printer_timer.active())
printer_timer.detach();
}

44
src/hal/em_timer.h Normal file
View File

@ -0,0 +1,44 @@
#ifndef _EM_TIMER_H_
#define _EM_TIMER_H_
/**
* @brief Timer
*
*/
void init_timer();
/**
* @brief Get the state timeout objectd
*
* @return true
* @return false
*/
bool get_state_timeout();
/**
* @brief
*
*/
void clean_state_timeout();
/**
* @brief
*
*/
void open_printer_timeout_timer();
/**
* @brief
*
*/
void close_printer_timeout_timer();
/**
* @brief Get the printer timeout status object
*
* @return true
* @return false
*/
bool get_printer_timeout_status();
#endif

15
src/main.cpp Normal file
View File

@ -0,0 +1,15 @@
#include "em_config.h"
#include "em_task.h"
void setup()
{
init_task();
}
void loop()
{
printer_run();
}

81
src/utils/em_queue.cpp Normal file
View File

@ -0,0 +1,81 @@
#include "em_queue.h"
ble_rx_t g_ble_rx;
SemaphoreHandle_t xHandler = NULL;
void init_queue()
{
xHandler = xSemaphoreCreateMutex();
}
/**
* @brief
*
* @param pdata
* @param length
*/
void write_to_printbuffer(uint8_t *pdata, size_t length)
{
if (length == 0)
return;
if (g_ble_rx.left_line >= MAX_LINE)
return;
if (length > MAX_ONELINE_BYTE)
length = MAX_ONELINE_BYTE;
// 查看是否可以获得信号量如果信号量不可用则用10个时钟滴答来查看信号量是否可用
if (xSemaphoreTake(xHandler, (portTickType)10) == pdPASS)
{
memcpy(&g_ble_rx.printer_buffer[g_ble_rx.w_index], pdata, length);
g_ble_rx.w_index++;
g_ble_rx.left_line++;
if (g_ble_rx.w_index >= MAX_LINE)
g_ble_rx.w_index = 0;
if (g_ble_rx.left_line >= MAX_LINE)
g_ble_rx.left_line = MAX_LINE;
xSemaphoreGive(xHandler);
}
}
/**
* @brief
*
* @return uint8_t*
*/
uint8_t *read_to_printer()
{
uint32_t index = 0;
// 查看是否可以获得信号量如果信号量不可用则用10个时钟滴答来查看信号量是否可用
if (xSemaphoreTake(xHandler, (portTickType)10) == pdPASS)
{
if (g_ble_rx.left_line > 0)
{
g_ble_rx.left_line--;
index = g_ble_rx.r_index;
g_ble_rx.r_index++;
if (g_ble_rx.r_index >= MAX_LINE)
g_ble_rx.r_index = 0;
xSemaphoreGive(xHandler);
return g_ble_rx.printer_buffer[index].buffer;
}
xSemaphoreGive(xHandler);
return NULL;
}else
return NULL;
}
/**
* @brief
*
*/
void clean_printbuffer()
{
g_ble_rx.w_index = 0;
g_ble_rx.r_index = 0;
g_ble_rx.left_line = 0;
}
uint32_t get_ble_rx_leftline()
{
return g_ble_rx.left_line;
}

32
src/utils/em_queue.h Normal file
View File

@ -0,0 +1,32 @@
#ifndef _EM_QUEUE_H_
#define _EM_QUEUE_H_
#include "em_config.h"
//一行最大byte
#define MAX_ONELINE_BYTE 48
//最大行数
#define MAX_LINE 1000
typedef struct{
uint8_t buffer[MAX_ONELINE_BYTE];
}ble_rx_buffer_t;
typedef struct{
ble_rx_buffer_t printer_buffer[MAX_LINE];
uint32_t r_index;
uint32_t w_index;
uint32_t left_line;
}ble_rx_t;
void write_to_printbuffer(uint8_t *pdata,size_t length);
uint32_t get_ble_rx_leftline();
void clean_printbuffer();
uint8_t * read_to_printer();
void init_queue();
#endif

11
test/README Normal file
View File

@ -0,0 +1,11 @@
This directory is intended for PlatformIO Test Runner and project tests.
Unit Testing is a software testing method by which individual units of
source code, sets of one or more MCU program modules together with associated
control data, usage procedures, and operating procedures, are tested to
determine whether they are fit for use. Unit testing finds problems early
in the development cycle.
More information about PlatformIO Unit Testing:
- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html