From dc118a3d9d9fbedbd603236df8aecacb2edde7ea Mon Sep 17 00:00:00 2001 From: Wessel Date: Thu, 6 Mar 2025 14:48:58 +0100 Subject: [PATCH] chore: Add latest version, clean up repo --- .gitignore | 40 +- .vscode/settings.json | 3 +- assets/essay.pdf | Bin 0 -> 211477 bytes picamp-potentiometer.X/picamp-potentiometer.c | 141 -- picamp-potentiometer.X/picamp-potentiometer.h | 52 - picamp-rotary.X/picamp-rotary.c | 128 -- picamp-rotary.X/picamp-rotary.h | 26 - picamp.X/LICENSES/.gitkeep | 0 picamp.X/include/HCMS2913.h | 45 - picamp.X/include/initialisation.h | 117 -- picamp.X/include/potentiometer.h | 52 - picamp.X/include/rotary_encoder.h | 26 - picamp.X/nbproject/Makefile-default.mk | 194 --- picamp.X/scripts/Build-Samples.cmd | 4 - picamp.X/scripts/Build.cmd | 4 - picamp.X/scripts/clean.cmd | 2 - picamp.X/src/HCMS2913.c | 152 -- picamp.X/src/initialisation.c | 134 -- picamp.X/src/main.c | 101 -- src/1829demonstration.X/.gitignore | 6 + .../1829demonstration.X}/Makefile | 0 src/1829demonstration.X/config.h | 27 + src/1829demonstration.X/main.c | 76 + .../nbproject/Makefile-default.mk | 160 +++ .../nbproject/Makefile-genesis.properties | 13 + .../nbproject/Makefile-impl.mk | 69 + .../nbproject/Makefile-local-default.mk | 37 + .../nbproject/Makefile-variables.mk | 10 + .../nbproject/configurations.xml | 336 +++++ .../SuppressibleMessageMemo.properties | 2 +- .../nbproject/private/configurations.xml | 25 + .../nbproject/private/private.xml | 4 +- src/1829demonstration.X/nbproject/project.xml | 30 + .../887demonstration.X}/Makefile | 0 src/887demonstration.X/config.h | 24 + src/887demonstration.X/main.c | 87 ++ .../nbproject/Makefile-default.mk | 160 +++ .../nbproject/Makefile-genesis.properties | 13 + .../nbproject/Makefile-impl.mk | 69 + .../nbproject/Makefile-local-default.mk | 37 + .../nbproject/Makefile-variables.mk | 10 + .../nbproject/configurations.xml | 336 +++++ .../nbproject/private/configurations.xml | 25 + .../nbproject/private/private.xml | 10 + .../887demonstration.X}/nbproject/project.xml | 10 +- src/887demonstration.X/queuelogs/debugtool | 1038 ++++++++++++++ src/global/picamp-potentiometer.h | 57 + src/global/picamp-rotary.h | 44 + src/global/registers.c | 25 + src/global/registers.h | 19 + .../picamp-potentiometer.X}/Makefile | 0 .../nbproject/Makefile-default.mk | 0 .../nbproject/Makefile-genesis.properties | 0 .../nbproject/Makefile-impl.mk | 0 .../nbproject/Makefile-local-default.mk | 0 .../nbproject/Makefile-variables.mk | 0 .../nbproject/configurations.xml | 0 .../nbproject/private/.LCKconfigurations.xml~ | 0 .../nbproject/private/configurations.xml | 0 .../nbproject/private/private.xml | 0 .../nbproject/project.xml | 0 .../picamp-potentiometer.c | 113 ++ src/picamp-rotary.X/Makefile | 113 ++ .../nbproject/.LCKconfigurations.xml~ | 0 .../nbproject/Makefile-default.mk | 0 .../nbproject/Makefile-genesis.properties | 0 .../nbproject/Makefile-impl.mk | 0 .../nbproject/Makefile-local-default.mk | 0 .../nbproject/Makefile-variables.mk | 0 .../nbproject/configurations.xml | 0 .../nbproject/private/configurations.xml | 0 .../nbproject/private/private.xml | 0 .../picamp-rotary.X}/nbproject/project.xml | 0 src/picamp-rotary.X/picamp-rotary.c | 115 ++ src/picamp.X/Makefile | 113 ++ src/picamp.X/config.h | 104 ++ src/picamp.X/libs/887demonstration.X/Makefile | 113 ++ .../libs/887demonstration.X}/config.h | 44 +- src/picamp.X/libs/887demonstration.X/main.c | 87 ++ .../nbproject/Makefile-default.mk | 162 +++ .../nbproject/Makefile-genesis.properties | 13 + .../nbproject/Makefile-impl.mk | 69 + .../nbproject/Makefile-local-default.mk | 1 + .../nbproject/Makefile-variables.mk | 10 + .../nbproject/configurations.xml | 130 +- .../nbproject/private/configurations.xml | 25 + .../nbproject/private/private.xml | 7 + .../887demonstration.X/nbproject/project.xml | 30 + .../887demonstration.X/queuelogs/debugtool | 1038 ++++++++++++++ src/picamp.X/libs/HCMS2913.X/Makefile | 113 ++ src/picamp.X/libs/HCMS2913.X/h/HCMS2913.h | 106 ++ .../picamp.X/libs/HCMS2913.X/h/HCMS_ASCII.h | 53 +- .../libs/HCMS2913.X/h/HCMS_brightness.h | 136 ++ .../HCMS2913.X/nbproject/Makefile-default.mk | 156 ++ .../nbproject/Makefile-genesis.properties | 13 + .../HCMS2913.X}/nbproject/Makefile-impl.mk | 2 +- .../nbproject/Makefile-local-default.mk | 36 + .../nbproject/Makefile-variables.mk | 4 +- .../HCMS2913.X/nbproject/configurations.xml | 321 +++++ .../nbproject/private/configurations.xml | 25 + .../HCMS2913.X/nbproject/private/private.xml | 9 + .../libs/HCMS2913.X/nbproject/project.xml | 26 + src/picamp.X/libs/HCMS2913.X/src/HCMS2913.c | 177 +++ .../libs/HCMS2913.X/src/HCMSset16f887.txt | 53 + src/picamp.X/libs/IR_LIB/IRBind1829.c | 83 ++ src/picamp.X/libs/IR_LIB/IRBind887.c | 83 ++ .../libs/IR_LIB/IRLib_v7.X/IRBind1829.c | 83 ++ .../libs/IR_LIB/IRLib_v7.X/IRBind887.c | 83 ++ .../libs/IR_LIB/IRLib_v7.X/IRLib_v7.c | 74 + .../libs/IR_LIB/IRLib_v7.X/IRLib_v7.h | 53 + src/picamp.X/libs/IR_LIB/IRLib_v7.X/Makefile | 113 ++ .../IRLib_v7.X/nbproject/Makefile-default.mk | 188 +++ .../nbproject/Makefile-genesis.properties | 13 + .../IRLib_v7.X/nbproject/Makefile-impl.mk | 69 + .../nbproject/Makefile-local-default.mk | 36 + .../nbproject/Makefile-variables.mk | 10 + .../IRLib_v7.X/nbproject/configurations.xml | 176 +++ .../nbproject/private/configurations.xml | 25 + .../IRLib_v7.X/nbproject/private/private.xml | 12 + .../IR_LIB/IRLib_v7.X/nbproject/project.xml | 25 + src/picamp.X/libs/IR_LIB/IRLib_v7.c | 74 + src/picamp.X/libs/IR_LIB/IRLib_v7.h | 53 + .../libs/IR_LIB/IRLib_v7_1829.X/Makefile | 113 ++ .../libs/IR_LIB/IRLib_v7_1829.X/main.c | 124 ++ .../nbproject/Makefile-default.mk | 156 ++ .../nbproject/Makefile-genesis.properties | 13 + .../nbproject/Makefile-impl.mk | 69 + .../nbproject/Makefile-local-default.mk | 37 + .../nbproject/Makefile-variables.mk | 10 + .../nbproject/configurations.xml | 299 ++++ .../nbproject/private/configurations.xml | 25 + .../nbproject/private/private.xml | 7 + .../IRLib_v7_1829.X/nbproject/project.xml | 25 + .../libs/IR_LIB/IRLib_v7_887.X/Makefile | 113 ++ .../libs/IR_LIB/IRLib_v7_887.X/main.c | 118 ++ .../nbproject/Makefile-default.mk | 156 ++ .../nbproject/Makefile-genesis.properties | 13 + .../IRLib_v7_887.X/nbproject/Makefile-impl.mk | 69 + .../nbproject/Makefile-local-default.mk | 37 + .../nbproject/Makefile-variables.mk | 10 + .../nbproject/configurations.xml | 299 ++++ .../nbproject/private/configurations.xml | 25 + .../nbproject/private/private.xml | 7 + .../IRLib_v7_887.X/nbproject/project.xml | 25 + src/picamp.X/libs/global/new-potlib.h | 57 + src/picamp.X/libs/global/new-rotlib.h | 44 + src/picamp.X/libs/global/registers.c | 25 + src/picamp.X/libs/global/registers.h | 19 + src/picamp.X/libs/new-potlib.X/Makefile | 113 ++ .../nbproject/Makefile-default.mk | 172 +++ .../nbproject/Makefile-genesis.properties | 13 + .../new-potlib.X/nbproject/Makefile-impl.mk | 69 + .../nbproject/Makefile-local-default.mk | 36 + .../nbproject/Makefile-variables.mk | 10 + .../new-potlib.X/nbproject/configurations.xml | 177 +++ .../nbproject/private/configurations.xml | 25 + .../nbproject/private/private.xml | 7 + .../libs/new-potlib.X/nbproject/project.xml | 26 + src/picamp.X/libs/new-potlib.X/new-potlib.c | 113 ++ src/picamp.X/libs/new-rotlib.X/Makefile | 113 ++ .../nbproject/Makefile-default.mk | 172 +++ .../nbproject/Makefile-genesis.properties | 13 + .../new-rotlib.X/nbproject/Makefile-impl.mk | 69 + .../nbproject/Makefile-local-default.mk | 36 + .../nbproject/Makefile-variables.mk | 10 + .../new-rotlib.X/nbproject/configurations.xml | 177 +++ .../nbproject/private/configurations.xml | 25 + .../nbproject/private/private.xml | 7 + .../libs/new-rotlib.X/nbproject/project.xml | 26 + src/picamp.X/libs/new-rotlib.X/new-rotlib.c | 116 ++ src/picamp.X/main.c | 212 +++ src/picamp.X/nbproject/Makefile-default.mk | 158 +++ .../nbproject/Makefile-genesis.properties | 8 +- src/picamp.X/nbproject/Makefile-impl.mk | 69 + .../nbproject/Makefile-local-default.mk | 36 + src/picamp.X/nbproject/Makefile-variables.mk | 10 + src/picamp.X/nbproject/configurations.xml | 1260 +++++++++++++++++ .../nbproject/private/configurations.xml | 0 src/picamp.X/nbproject/private/private.xml | 10 + src/picamp.X/nbproject/project.xml | 27 + 180 files changed, 12571 insertions(+), 1389 deletions(-) create mode 100644 assets/essay.pdf delete mode 100644 picamp-potentiometer.X/picamp-potentiometer.c delete mode 100644 picamp-potentiometer.X/picamp-potentiometer.h delete mode 100644 picamp-rotary.X/picamp-rotary.c delete mode 100644 picamp-rotary.X/picamp-rotary.h delete mode 100644 picamp.X/LICENSES/.gitkeep delete mode 100644 picamp.X/include/HCMS2913.h delete mode 100644 picamp.X/include/initialisation.h delete mode 100644 picamp.X/include/potentiometer.h delete mode 100644 picamp.X/include/rotary_encoder.h delete mode 100644 picamp.X/nbproject/Makefile-default.mk delete mode 100644 picamp.X/scripts/Build-Samples.cmd delete mode 100644 picamp.X/scripts/Build.cmd delete mode 100644 picamp.X/scripts/clean.cmd delete mode 100644 picamp.X/src/HCMS2913.c delete mode 100644 picamp.X/src/initialisation.c delete mode 100644 picamp.X/src/main.c create mode 100644 src/1829demonstration.X/.gitignore rename {picamp-potentiometer.X => src/1829demonstration.X}/Makefile (100%) create mode 100644 src/1829demonstration.X/config.h create mode 100644 src/1829demonstration.X/main.c create mode 100644 src/1829demonstration.X/nbproject/Makefile-default.mk create mode 100644 src/1829demonstration.X/nbproject/Makefile-genesis.properties create mode 100644 src/1829demonstration.X/nbproject/Makefile-impl.mk create mode 100644 src/1829demonstration.X/nbproject/Makefile-local-default.mk create mode 100644 src/1829demonstration.X/nbproject/Makefile-variables.mk create mode 100644 src/1829demonstration.X/nbproject/configurations.xml rename {picamp.X => src/1829demonstration.X}/nbproject/private/SuppressibleMessageMemo.properties (58%) create mode 100644 src/1829demonstration.X/nbproject/private/configurations.xml rename {picamp.X => src/1829demonstration.X}/nbproject/private/private.xml (73%) create mode 100644 src/1829demonstration.X/nbproject/project.xml rename {picamp-rotary.X => src/887demonstration.X}/Makefile (100%) create mode 100644 src/887demonstration.X/config.h create mode 100644 src/887demonstration.X/main.c create mode 100644 src/887demonstration.X/nbproject/Makefile-default.mk create mode 100644 src/887demonstration.X/nbproject/Makefile-genesis.properties create mode 100644 src/887demonstration.X/nbproject/Makefile-impl.mk create mode 100644 src/887demonstration.X/nbproject/Makefile-local-default.mk create mode 100644 src/887demonstration.X/nbproject/Makefile-variables.mk create mode 100644 src/887demonstration.X/nbproject/configurations.xml create mode 100644 src/887demonstration.X/nbproject/private/configurations.xml create mode 100644 src/887demonstration.X/nbproject/private/private.xml rename {picamp.X => src/887demonstration.X}/nbproject/project.xml (70%) create mode 100644 src/887demonstration.X/queuelogs/debugtool create mode 100644 src/global/picamp-potentiometer.h create mode 100644 src/global/picamp-rotary.h create mode 100644 src/global/registers.c create mode 100644 src/global/registers.h rename {picamp.X => src/picamp-potentiometer.X}/Makefile (100%) rename {picamp-potentiometer.X => src/picamp-potentiometer.X}/nbproject/Makefile-default.mk (100%) rename {picamp-potentiometer.X => src/picamp-potentiometer.X}/nbproject/Makefile-genesis.properties (100%) rename {picamp-potentiometer.X => src/picamp-potentiometer.X}/nbproject/Makefile-impl.mk (100%) rename {picamp-potentiometer.X => src/picamp-potentiometer.X}/nbproject/Makefile-local-default.mk (100%) rename {picamp-potentiometer.X => src/picamp-potentiometer.X}/nbproject/Makefile-variables.mk (100%) rename {picamp-potentiometer.X => src/picamp-potentiometer.X}/nbproject/configurations.xml (100%) rename {picamp-potentiometer.X => src/picamp-potentiometer.X}/nbproject/private/.LCKconfigurations.xml~ (100%) rename {picamp-potentiometer.X => src/picamp-potentiometer.X}/nbproject/private/configurations.xml (100%) rename {picamp-potentiometer.X => src/picamp-potentiometer.X}/nbproject/private/private.xml (100%) rename {picamp-potentiometer.X => src/picamp-potentiometer.X}/nbproject/project.xml (100%) create mode 100644 src/picamp-potentiometer.X/picamp-potentiometer.c create mode 100644 src/picamp-rotary.X/Makefile rename {picamp-rotary.X => src/picamp-rotary.X}/nbproject/.LCKconfigurations.xml~ (100%) rename {picamp-rotary.X => src/picamp-rotary.X}/nbproject/Makefile-default.mk (100%) rename {picamp-rotary.X => src/picamp-rotary.X}/nbproject/Makefile-genesis.properties (100%) rename {picamp-rotary.X => src/picamp-rotary.X}/nbproject/Makefile-impl.mk (100%) rename {picamp-rotary.X => src/picamp-rotary.X}/nbproject/Makefile-local-default.mk (100%) rename {picamp-rotary.X => src/picamp-rotary.X}/nbproject/Makefile-variables.mk (100%) rename {picamp-rotary.X => src/picamp-rotary.X}/nbproject/configurations.xml (100%) rename {picamp-rotary.X => src/picamp-rotary.X}/nbproject/private/configurations.xml (100%) rename {picamp-rotary.X => src/picamp-rotary.X}/nbproject/private/private.xml (100%) rename {picamp-rotary.X => src/picamp-rotary.X}/nbproject/project.xml (100%) create mode 100644 src/picamp-rotary.X/picamp-rotary.c create mode 100644 src/picamp.X/Makefile create mode 100644 src/picamp.X/config.h create mode 100644 src/picamp.X/libs/887demonstration.X/Makefile rename {picamp.X/include => src/picamp.X/libs/887demonstration.X}/config.h (62%) create mode 100644 src/picamp.X/libs/887demonstration.X/main.c create mode 100644 src/picamp.X/libs/887demonstration.X/nbproject/Makefile-default.mk create mode 100644 src/picamp.X/libs/887demonstration.X/nbproject/Makefile-genesis.properties create mode 100644 src/picamp.X/libs/887demonstration.X/nbproject/Makefile-impl.mk rename {picamp.X => src/picamp.X/libs/887demonstration.X}/nbproject/Makefile-local-default.mk (97%) create mode 100644 src/picamp.X/libs/887demonstration.X/nbproject/Makefile-variables.mk rename {picamp.X => src/picamp.X/libs/887demonstration.X}/nbproject/configurations.xml (72%) create mode 100644 src/picamp.X/libs/887demonstration.X/nbproject/private/configurations.xml create mode 100644 src/picamp.X/libs/887demonstration.X/nbproject/private/private.xml create mode 100644 src/picamp.X/libs/887demonstration.X/nbproject/project.xml create mode 100644 src/picamp.X/libs/887demonstration.X/queuelogs/debugtool create mode 100644 src/picamp.X/libs/HCMS2913.X/Makefile create mode 100644 src/picamp.X/libs/HCMS2913.X/h/HCMS2913.h rename picamp.X/include/ascii.h => src/picamp.X/libs/HCMS2913.X/h/HCMS_ASCII.h (78%) mode change 100755 => 100644 create mode 100644 src/picamp.X/libs/HCMS2913.X/h/HCMS_brightness.h create mode 100644 src/picamp.X/libs/HCMS2913.X/nbproject/Makefile-default.mk create mode 100644 src/picamp.X/libs/HCMS2913.X/nbproject/Makefile-genesis.properties rename {picamp.X => src/picamp.X/libs/HCMS2913.X}/nbproject/Makefile-impl.mk (98%) create mode 100644 src/picamp.X/libs/HCMS2913.X/nbproject/Makefile-local-default.mk rename {picamp.X => src/picamp.X/libs/HCMS2913.X}/nbproject/Makefile-variables.mk (51%) create mode 100644 src/picamp.X/libs/HCMS2913.X/nbproject/configurations.xml create mode 100644 src/picamp.X/libs/HCMS2913.X/nbproject/private/configurations.xml create mode 100644 src/picamp.X/libs/HCMS2913.X/nbproject/private/private.xml create mode 100644 src/picamp.X/libs/HCMS2913.X/nbproject/project.xml create mode 100644 src/picamp.X/libs/HCMS2913.X/src/HCMS2913.c create mode 100644 src/picamp.X/libs/HCMS2913.X/src/HCMSset16f887.txt create mode 100644 src/picamp.X/libs/IR_LIB/IRBind1829.c create mode 100644 src/picamp.X/libs/IR_LIB/IRBind887.c create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7.X/IRBind1829.c create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7.X/IRBind887.c create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7.X/IRLib_v7.c create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7.X/IRLib_v7.h create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7.X/Makefile create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/Makefile-default.mk create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/Makefile-genesis.properties create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/Makefile-impl.mk create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/Makefile-local-default.mk create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/Makefile-variables.mk create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/configurations.xml create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/private/configurations.xml create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/private/private.xml create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/project.xml create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7.c create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7.h create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/Makefile create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/main.c create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/Makefile-default.mk create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/Makefile-genesis.properties create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/Makefile-impl.mk create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/Makefile-local-default.mk create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/Makefile-variables.mk create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/configurations.xml create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/private/configurations.xml create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/private/private.xml create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/project.xml create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/Makefile create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/main.c create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/Makefile-default.mk create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/Makefile-genesis.properties create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/Makefile-impl.mk create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/Makefile-local-default.mk create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/Makefile-variables.mk create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/configurations.xml create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/private/configurations.xml create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/private/private.xml create mode 100644 src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/project.xml create mode 100644 src/picamp.X/libs/global/new-potlib.h create mode 100644 src/picamp.X/libs/global/new-rotlib.h create mode 100644 src/picamp.X/libs/global/registers.c create mode 100644 src/picamp.X/libs/global/registers.h create mode 100644 src/picamp.X/libs/new-potlib.X/Makefile create mode 100644 src/picamp.X/libs/new-potlib.X/nbproject/Makefile-default.mk create mode 100644 src/picamp.X/libs/new-potlib.X/nbproject/Makefile-genesis.properties create mode 100644 src/picamp.X/libs/new-potlib.X/nbproject/Makefile-impl.mk create mode 100644 src/picamp.X/libs/new-potlib.X/nbproject/Makefile-local-default.mk create mode 100644 src/picamp.X/libs/new-potlib.X/nbproject/Makefile-variables.mk create mode 100644 src/picamp.X/libs/new-potlib.X/nbproject/configurations.xml create mode 100644 src/picamp.X/libs/new-potlib.X/nbproject/private/configurations.xml create mode 100644 src/picamp.X/libs/new-potlib.X/nbproject/private/private.xml create mode 100644 src/picamp.X/libs/new-potlib.X/nbproject/project.xml create mode 100644 src/picamp.X/libs/new-potlib.X/new-potlib.c create mode 100644 src/picamp.X/libs/new-rotlib.X/Makefile create mode 100644 src/picamp.X/libs/new-rotlib.X/nbproject/Makefile-default.mk create mode 100644 src/picamp.X/libs/new-rotlib.X/nbproject/Makefile-genesis.properties create mode 100644 src/picamp.X/libs/new-rotlib.X/nbproject/Makefile-impl.mk create mode 100644 src/picamp.X/libs/new-rotlib.X/nbproject/Makefile-local-default.mk create mode 100644 src/picamp.X/libs/new-rotlib.X/nbproject/Makefile-variables.mk create mode 100644 src/picamp.X/libs/new-rotlib.X/nbproject/configurations.xml create mode 100644 src/picamp.X/libs/new-rotlib.X/nbproject/private/configurations.xml create mode 100644 src/picamp.X/libs/new-rotlib.X/nbproject/private/private.xml create mode 100644 src/picamp.X/libs/new-rotlib.X/nbproject/project.xml create mode 100644 src/picamp.X/libs/new-rotlib.X/new-rotlib.c create mode 100644 src/picamp.X/main.c create mode 100644 src/picamp.X/nbproject/Makefile-default.mk rename {picamp.X => src/picamp.X}/nbproject/Makefile-genesis.properties (64%) create mode 100644 src/picamp.X/nbproject/Makefile-impl.mk create mode 100644 src/picamp.X/nbproject/Makefile-local-default.mk create mode 100644 src/picamp.X/nbproject/Makefile-variables.mk create mode 100644 src/picamp.X/nbproject/configurations.xml rename {picamp.X => src/picamp.X}/nbproject/private/configurations.xml (100%) create mode 100644 src/picamp.X/nbproject/private/private.xml create mode 100644 src/picamp.X/nbproject/project.xml diff --git a/.gitignore b/.gitignore index a50307f..871ca37 100644 --- a/.gitignore +++ b/.gitignore @@ -1,22 +1,22 @@ -output/ -.hex -.as -.cmf -.cof -.d -.hex -.hxl -.p1 -.pre -.sdb -.sym -.lst -.obj -.rlf -build/ -dist/ -debug/ -tmp/ -src/tmp +**/output/ +**/.hex +**/.as +**/.cmf +**/.cof +**/.d +**/.hex +**/.hxl +**/.p1 +**/.pre +**/.sdb +**/.sym +**/.lst +**/.obj +**/.rlf +**/build/ +**/dist/ +**/debug/ +**/tmp/ +**/src/tmp !.gitkeep diff --git a/.vscode/settings.json b/.vscode/settings.json index 256cbc5..dbfe19f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -5,6 +5,7 @@ "initialisation.h": "c", "config.h": "c", "rotary_encoder.h": "c", - "potentiometer.h": "c" + "potentiometer.h": "c", + "picamp-potentiometer.h": "c" } } diff --git a/assets/essay.pdf b/assets/essay.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fc605825a64b5f65078692f1e5fc235101e0aab8 GIT binary patch literal 211477 zcmeFabzD@>_dia9gdhzftc3Kk%fjv=9U>(lAt0c1DBV(ml!SCQC@9h`h*E--3ZjzI zA<_a0O8o9F@&e=ae)*2i($K%f4J9pxoGjnI=Jm<`TO;tvg7YY_6Wb1y@(oZM= zf`Dv|t`UlefcVrweCKU7Y(ac7APz@UV<$^n8!(g;Bql~^YGZ;*g!rDALl1_40~bOM z0)fb*0vlA|gbEx`fh{U9K?TmJz!(*v-&&&XOgRqIr%g_b6orvnl${Y4a-H#7@Bi4h9_6B2$DrqJ(5ko&7Hv|P|Fh?WPs>H~^o z{}P4OU+EqHk_SKJPl$mXZCQTU?}*X-s~U9IIjqb5uUgSfaX=PYP-wb;h?e;)^+7^4 zR1CUN(FLQkpc%Y@dU23S1@&NeH0IZmerhsw|AC{jphbj!M4}$~QGw8*i2nAgJKALg zeh|@bzddyQXhP9EX`rf+LInp*Sfd`$tfHF{&F{fGw3N`yA4=fh-9HwL{v6O{9=660 zrMv!BGg`EVT?t(+&ru=|+w3qEI@1rIs}U*-x<(h&9Xi4OcYu0CC;fqd!?F&TLN^6E zKpZy3-wr`Xn?mqtQ^0;Z4xv9>G;e4s4!;^Sq3B`I4n-*X?GKEhn+N^wfY4t_|J$wv z`=ikZ{saBL9epnRCEmk6gC_llj{@B<(9vkB(QR`0VWM-QIk)*sz_7m^o4(I5Ka2#h z-wsRaDB92!n*Ak0bpJZ+xae9BI|2FyTBhjWCz=HQW{A=iKsBuzh)>qiN&m>aCwMSE ziHH#LDVf@sJ6V9BFhL;@`i~GuZsla^0A#Z=bTXAOHMTV|B?M+oM<)kULu*2}!D($> z+aWlm_i}MJOF&DQj2fj7ar0o&94-ev>&WNsMafF-^LI?>$QLuWHbkdRpBlYobFLb1 zUYa>dL?mHZZ<;5GUFXyG#m`BzF>`l&VMWn(_jveZ_`NbXFpJMdh4eCa##pA+vCT?% z(9W5gG4z?y4sn^LcJ&_Pqq_0FFaKSEXk)ivXo=T|Zh6UtQM&7R)tb>vuj_M*$zO6# ziX@e!eyo$(rQz(oSDnWrFZgJWDXP7^rJ#7Vmbu;|Tdcraux)*Ny4Q|4#P`8<5I)o( zPT7I%B4wA3py92KreIAC%Rr+&IVu)|7)xJV?)D0u3H`>ZWor5>iVdAtzs}KmTv$_* z3DK#S^Gzu<`<##x%SkCYyJp-acsF|(vbROMmfFiR6uF&5HISqK7B2w#f^Bs1NnbL0gwEY`(P4Xaef`YCoAmvL9~dl>%qyl^ z;*)E>e379H`xxdyGj%#MmvJkp_v^KuuuUV?FA1Sv$mHUz&8TeF6`fwil}1gR8?Abq z-8wz_xilAWE!)~()t-i%=Zw(@!W0Bf= zmXTBjM?Y*Zv!V8)aZPFHfHV0x49E0q_6_m$Sz^we+M*j~NO;gvkT+HCV~ki8hYOqD;()hsu*O1)vu~euugE{J!T|CZW@@uUkf=(ro!m+GMvNB zG4hHo+=)$Kl9WTJ7575p7^_*-+ZP0GQxP=$#dkOy1Qpxt3I#oD5Tht-1)Ff|LFb#PO{);+gsz& zuUHg>n=^D_63B2n%-#_4BId=(Z`2d&6c*g);=MwHx<}Q%-rVT-6X8>+S#?^d{u1a^ zwX8>-`mISro4v8#`~uO%C+tD9pBgb%>mAqoHaJPeb_z=i8_%39uOcMc3&vy_I%k!* zvTIi3fwz_3S*{25ikwjsQ$^M*m@v5C-JTtZ>^aFC{|Z6FxgI=6AyeIatoxPqaAgFS zNydE&U*(1pr<0aT^gGAW8_ls|4Mm818{K`vDL>4Q$>nr-rN~?q8Sdvhwl~qwhcyTx z!C-)7lH}){Isx7*tqkZa?S5Cg8Gg2-J|28^NrH}HbI?ij(wTAZyY0u6O7NaiI3N-k z->~eS8rzm|w6ndG*04|<(4Uqh^s*~q$73F^@8p+a`b`AzVP^{BQ#CXO4ZvrtFOie5erEJ|mx~Mq;4lL#oLj3xKKmiUw zP7oY5djZKLZES3Ta&$og=zJgn)Qq485P;qo#)g>JMk|1M1PW5%NjdI+&O`pb3NM^U3ka^GO2_P!JTLPYswoLAnAE zey|V}34-$@z=D8&BnTA*!vSjG0x+1$fGmhzKFjQ`Mm-Vx`yA=jN%#c7tMkI zi9!fKW(cqVL=Xh!M}ma};ehbqU>Fn*B$EXFYi0BZRfp^7pG5Z`Qw4*81p%UjAYcSP z6lh-oFiZ&fFNxY$tBw$Lu)IPo7XCX?As|3&0#xt=L;(vur~p6kiv&6!KNto>_0r#n z>gcj{UwJ=5+TmL4e?=M;fD#aJ5L6HXhM*{gfCZ3^oY<7HH80>&|pYGpmzy@U`Qw!f<%H~LU2Hce;~DejqnI* z2dm}(ozxI8FajX}f&x-Q2m%xefZ_aqAhdl2>5ww?aQEYo{GW~&-#-Ev912E4g#gNc z9tWskFa$ps4*vt8?dv{ANIOv9{(GT)AIe}bpo;;$9|}A};6Qr<9|J-_==WXi2d(D_ zRY!+18DM1pu8C;tTn3@5fq@V}+d$z$ARA{ZtD_SLFkT&Cc!U6S_hVK#FxUcFVS->7 z1o2B&_|duN_gMvmkYIjb+WMu|BUwSfOlxK9pl)YqYzo?+8G#AZ3DAjbK>PD0-#Is@ z^Xg83dIZd0sEH6znt;g}J<`hpLmDsvpkn!C0R>QSfBxi?1?F18{YjKh7N7voxAxNj zvpIZ!ItAkSfl2!y9sz=XuU(cOm=yOXXP``AV&9*k0eSPOI@lVkn*x(3uu71T1@UQ^ zx;cT4$`gSq`=IZB*Y;o#B>a!HJ$n6!;i}ag@0NF@0n{sVtP0FIlwK=+LN@ySPaawN zvT`_aFM(}0O5a|i*!JO5LijnDED*D^q30R;_i@;(baqF@1yKJil9In4ims1SuSSXFU>GzMF1e z?uRNy@r9H`N-^KEum?{-Xq?tHAB(7vQ)!rGHby9BVZCSi=pgMgRF*4gY~!}}bUA*O zne@_E37_l2Z-b~9M?Omg;zg6uNNjbhAm_ezyuf$FHVy@mRwWnPcBI|>@Z2;WH|Orf z-Y+Hh=P%_JyvUM)v%ikw-yEVCxpuiDDqr%8e?}i>J;N%?2@qebDnrn@Gx9R=x}Ztf z;z&+K3n^N8VkaH)It#MavIkuHCpJ^Q*jYO^lxMY&4)RDiJITu?h~ydiwc$YV=}TPc zB29w*=F>jUqkAd- z@wcuHejXjIWlIq)N-26Zh@}?}=%RqN;@6j(#wPL1w2;T1SLW}e*D-qUW1ZY&BZXS`EE($NTqM$dg|Shk+fLhx7|lf-J9pAhbMI4wV#%(&EEFDet7-FMz^c8^)$w&?j+bpvzzHO zds}?rHPKY^;5*00&TjM=(1TRy1xbmhY*$Fm+`~Dm(&&RcVF(rqAbk1MHi3h*>q#VM zAgRen;!Cf`T`@Yf3i{N_$l12BR@@9KKC2Buc3PTaU3XN(IBGYTsr~tm*VVmWss5OU z)V{49$oztO_G020J(caCDH_5YYQ}#3b~Di{cjrHHi$LRfmptr~I3xDf9^ICvGe;7X z%ba+3|2d=7Sgz4%P!g6WNUeW3J=cISbdhB z%fUb?xN@X)^Thh+w=nug)U7K`45BptR4)NcWrfs281|JtRlH0d>BT(W!eKno>7-TbM#XSDBmFtSlLI}(!XL&rFV8oFEiH53 z+P}%hSzdlt&|-2d!42}^^LpiM7JkuVKaz@gkwod7^Ct_wjuTZ__=(=DF>DKTD`hcf zubMtD!jN_XVxJ7Xzp{h>aY;uxhLhdcxEP_${HjU(BUke*oi4A3MaRRBr5F~=%kR>> zOKhu#9pmLVSQCN@-x0UAdS8`#$z=)VC!iIm)1`Kk1If02;(zrv<~dG@k?%6G=5gxa zW;dypIK=twW16X;mrnA+>|*8CNb4GsXJ`$1T~#M;jjgZEdf)%#< zx=AL+$RqF+D}lFgGUErkP!G#fD}s4B&I-P7dYI#*$5o519w}ccW%uxWmdzewaZNxH zuZ@#9SpD1U7Q))xCzmKNmOq~)>G^1qpnrpri%RHrmtTFI*Ul8D?`8`DM-jW3&&kUh zTX(JF9cA9Ga2qbyx@xn&irR(~`OPGE- zK2{TzN5O!|y_M+6oFhWmOq4y7&D(iqSnO-&dGnWd^@UdvuzqAiKs$eU+AgKI$xP#0 zHA+<^udf_Im)f8e{=DtyilxsN3>SCZB58V44CzgKLm8F15MvWKLF%|6<#|{w18El4 z7a@3B6cdS|L<|n1q<1A>L6qZ!8X(udwneh>TwS%VuGnI{>r6PYR*1Nx#x=OuJ|s+> zPVioLEV{WOJ^8d}Cti#~+=TM!SxO}qf+ap z!XRAEH?NGd1ry(8cB~w#q&u!#&bXeZ6{zGdFF@_rPcm&n;f6`DeLJh`$;@f1*Fs7z zN(kIq26b8Q>XsV8k(i2P@6l4e3+oRt^z(N5Cd+T7=sgk9^*k>g;q=_Q<;F5y{jpC1 z=}#23k9#(>n8r&KYs)1K&IWR5NOey}PlUV3Tp@GNnxirhx*FBcK*Y|#MP&RTkY#y8 zUs;@(R0+9pnz~f3S>$4=&75ipBJ)^J7Lqv2c7q0DGgDFMEO2S@pDrMm2AY zEv3QwtueoKJ%8qo8AeXAq8V-f8(_wJGeH*EPV@nm$~PBA=u8BHn~E8HI|TxDO%oNA zrDGl3HrVtagiS>7x@x&gnOe8Oz01E7N|WxLx>j zPUxB)*2TTS&U_noIfyH&o3Z(Rqoa2S5=mFISRr-nw5N7gi0VAeMTbKrcQ8dsRn23sIw1}V*rD}{5{GoEiF)kV{BGjhM3 z81=>r=L}+FKlyRjd4oIX#MVVOZ9EwsFlJyTnVvV8f!+STsRle@t*wdkR z|Cp0idM9~L0EF|XtSmlec1zTB`X(mCa4`K>uo6(<4z-JYc<3jv60Lvy09FDzC7}8I z`(Pz}Uz0kj+@PZll$-w!or1yujU3Rkpa60wAOv6r0E__#NQEL0V3@$~K?5sGM<+`g zbFi_Y9ooF)XB-HD(&Y}w0~AuUv;e*EPt@Rlk@H_`!AD!<=Q{Uu3JL)@E1-7%tOUc3 z!dAb}Du9v(?ANS_qloJ7v%-Xg0LX*?ms$Z}=I@2HPcRH32<8XS>7NM(pt^s`$`7E8 zPyjglCF?))3Iz}f0iXx`oE6=FzqjiD5Gy#U;{%|o=9}A+UP)&X@nF$lRprVHdCA8d4`RE)dhC2`=?6~+FQ)v) zh}ls%WyC8|@3Rf6O3V!Qz8VS!NZIIo3jyKH-RG?I(xcTS$1iBEw}+=D_0Z;|p6~sz z(|D7yizfH>!#AsOpV#8<$+0={K4rZV&lF#&+^M5mC2#Zy&J;W>|6T$J@J4=v>F|Dxnu!=m#>EH(Y({%@azua=Xv0N9A3M zh1feb_p9^s9TYXB%d1*foi_vHXGzH@3KgOz;;_jWa$L~J#_5%l3r4OIG~CO8%3oBN ze%CNuELk154o?);J(euOo139;>6Ao8vDmqG?&ADwO%TCmYuTH-gPLVYbQ2wG5QF51 zA}+0`U1IK+r3;C)xHedeeF_-Gv7p3LMB{lxw1dSon3Gfk=h<0s&g)qTOpHvMRgrtu z53pAI+?j{%^uo7xhWxhljZc()e0bs3Y9i|-jreM#3v*psiMQ~$k5(D)p7Ri%8bL`D zk75*t>pWKB^JaPbCl3%Y>V+&qFUgGa83Vs4hI7Trl{vOUr z8Lw+!ExOCB!l|a=e0Rb)#_;t`SWAu+E7efFsm~;n!s&UJu#KxX?M{=Kx-r?(oz=Bm z3TfOoXfyV8hg7)4>Xg%{6`9l3#JK5} z)`EgPqdV&TK~utQYy^_XV>L2+PpF;~+Lx`x7QHa-ZmTbQ=zZ0^a^(89$ty&h@8_%1 zt1=+)=F18eL!wA6hg1;pja@$q8wE^t?yI;lyN+;0y31>cJD`(>3KFvOU(SD3DOEbb ziX6(Pozr|f&|zlWH(fVa#D24a^QrKSfR>XvQ=!lOi@wx~^~N~!E$!C2A15_hdsWVp z!6+7+Q>|;vIb16`8mswblpf;qP_Fk>VkPLdnk`Yqp69DaQqha|b*ih?KDu9|PU-Nl z3asMX=-urk#M7zMn18TWrGZ1BRsNh5F3+pR@qG+ zOGwJUI>WS`Tx%D=-CTT}=w?}^!@{+s8-@3rSl25(C@t)s5rkj$I4f?>lCZ85TroB+ z#A92wK!_vH$y20A7Fg1h8QYTJ{=wZrJUdZEPbEq>K(hC3Hiy%A2a}`fC8)5IpeQ{V z-BtG+kE>L2YTC;(M4I?TqDEW*KWzAia|yeslMsgN1^sBx84Oa#uMGW z(py)7^T3HG$Kft-c$O`L3(hx$+g}mC?soJkf)qhT$@s^yvs#BU3yp2? z9?41uYu||BHF(+RedYRd8?g+_2skz0C-?08V|rGjCAgAfq}W~&Ys0>oo6+6r2UElN6~lOhv;4`B${XY(G-tjp+H+4tZR)kBr9^H!*SF&bP{a|JBnx zZDz71?Xxqb%RnXnc;UjRg!C(kQ&P_|(k{}K<&a=E=cUhOk2WaZ2_t~nl$AL!%ih;a zyP>q1+iA7%t!Q}7O042xP_~v{6y}F(;&m6Z3+Y~25!GHfjp&)=S#vVW`f_G(Eaeu} zt=q)6Zxd8}i1t4|wBT=sS4II6-V5QlSLoV?g%f2&)vDoKL;Kd3@A^bAc=Ft! zo#R68l^xE|;zEhc(|3b1Sks~Dr~W{qC=&nUyJV}fv9F&Z+XAdQS+87ZNel0K^kwaw&?nD& z!l$iKk2ajoetf2!0XikDZV>>N=+>CeH_(Qgspvmf!vB^^ckkxX*VIN|BMk6hDp zpxtB6t&Q6Y$6f@2m=rh8?F^+)w^Z;a`C1kD>(raA$J0=#Qyq`UeGf57H(op|yEYMo zQ{JB4)sPx^W6|=CqYA-9+3ITi?s^B;Tbyg^_`(7n5R;}d79R?cz*ZPlZAClde;H0|1`8;sA>K)2L|3zEJ4?_D*W+^MS#x#|vkb^xX+2-2-su%v+BqPy2k-#V%1N zQ(XPJ{@Az=(Iwg<(UzOlbuY{H-s|zjd4nKn+X<~snMbSCW~F6mYs$7;zC(uYNzoA- zr`k?q5b=0qVkep1lBYSVDcl#xF-2k8IVTmw@BqH?s*h&v+^Mpnu?J#o2v7q#Fd_*L6&*L@QsLsE@3S&@l}`P=BD#>7mG_Ox%rJY)$K z)3B->vaacvW;X}g>qWQg1%k$7!gdpa?69UjEX9O9s|z0=eJneq1W9LTjcM+84Ql+{ zYPeqi=Du32TwWr80({4vt`G?|;cyle?8!IRZ#>!%?cBqhwxRO<6+ZwpvqR0|xA*~C_xJ%n zK%#d=|9$)bxxdSb+}~hD?(0!P`;kXM1$4Rtt^L0P6#(lIupo#Z4(y-KN!Qa~>{7l}@h8*bD{vVOIZ}h8~wl*UkCu=(0~7Ii@&J< z-jM=9cJtL$dzG->JetBw86=Qii8lWvYI>16)m-BVMLVM7m8UE$=SHuj-DRnoml6A> zTyyu!n6U0UdG5s^mz&(3JVJ`v4v(5Y3AeF&oGvl(jPJTBA~rm*yg2Mtpp@NkjbDCQ z-~@44eDDmp-0gb^xhpOUOZg))e7ub7F5aV(U*g#k<#1aav`$GX#-!E_-Pj6Y!~XJ~ zqK{N3#xwP;XTn?A616k7F|)$rLbU>HS_yQPL~PHsj33=oJ40PC!F5;dF_b{>9(j1W z*zjmQYo){_u|La7r|BivtY>d8Tycq#e^*lvIdRV2o>vYme3RbmlwM4`1RK65ULtGut7-UwAP!f?bWzcz%9qmD`E4L{ zZ4+ln&s?)D5If@+bRjUR+`}X$D-1Vlwl3^>oDOlGF8kdrWxS!ikTl|gh?dNfmTsJQ zC#TS?N*07GfB2V(%b`7&!}bbW`bVB~bQ;_)X;dwG$~j@Q-ABN|ekYuoO_FO_&~s$S zfFRX}b1^7$o6N+G;Pu9<(1AK53#g@mTrfF-0=-HiA%!enBG}Ys*26npIij~*NUsp_l;F2fyG-x*Td;ohz#rnVzWzBtFzM%{^5-r%p}gQaSSvtdGB zvBA(}2R{!zo|?yRV*GTL+;no~!`MJ$k7VVr^AJ4m zRwD$dhmgxHKH$81jO!}pLsLm4SJW-POyJXtT_bT~Ba-qHB0K(&Rp?d)j~^~81MW1p zWEJVmH@r0vgSdhKIG4{4Hx-*-{}|EdlWn(#PZK_mh~|uZNGT|R_aSwdD}M5PP&KvW z*QUo2Y;3J0I>B^23zt;y$S06>PucfuwQRD!UyPT0S|`Lf}$*WAqR4~RMDO(KMa z+WWFg_`s~bcIp>dZH^na^abCyDf8HJVG{tk zIUTu+N8of5LVG`^{fwFEVxypJhv&(d@%v6O8jP36l)${Ah8r{l(E}m;H&T)aGZrbN zu*%B}tD36qz1`2s-!C+Hb)h}<4!O5t-W#cxiMTm$vc(y~I|DqrT4pNW5HL&hCTr z|5?t`y679xl>oZ#w5;K^hR>HCz}c5rLFX%9)INY`VdaEcze}yT^t!oLi`Mpv1NOrU z!&@dDD(ma7zRZC{-&0#Xjfxyjs8M2&@u|G2BU`~Di6qL*)uVaCdPc(W%6WpIM9eP_ zaRVu+CPzc@#_T&Kx%JO4Ip+JY3Q{z7GT(PwIfWo5HsYZ4Q~@+^G7f>`I6CK6{toF@RMns?r z3@LQLg5e)W4NrX~#Y$#!S6AEV3a3`3vLEG#d+jT&ym($j{Q2+1gh#eD`xXdXFe4m*ukCE+2w9c&?i40zLQb_58xTU2H z7M?rSeh_1M-**jx(;0vP>(8q|z#jMSEB(HJgaa1h zK)PSD9#Q`OkCt-3Uz+h9F{u5cWf~OFKMuM4zE0yu0w*v3aGmyqPTz5;ZSj4*R4@BO zQK;V1CvI1-6)gr=hpPEUUKY{q-LEgt=rC)B)GEDq`Pvs+oFgY6Z2Y|4@0mW&ZQK$J zY7D3t>E|&-TJaS2T z`n^C#pykXo#@e;VIC8KsW4^0ARzll$8#HGgZ1aTNHh|Cu464MLUA~5VE&nks;l=%l zrI#;596BOLgR(w9d^j^umt0^*ZIGq))=`G}wc**eZJy)CSp{lW@6)M|Wbg*vg$Sfq zZj_aZT!C-hIv=20xFu9HmgG($nL0S_MzA(S?|MO$EO1P~@QuQVQ!x+iAO@F6N_O&4 z>&2kcq@N>>n~s+4x#$bt*x{?5d4%bF`85yN0^}DH$d0=Z<5qI+$z=h>n@E1ik2_w8 z*-BkAR@XY&u7x=HnUj^wbQ`X8`(!G-u0Cxryusz{_}gpYuOfA%CGGfM zg+?cg;&*g0obJr8XDPOGs@gt=8SJXt?_PF^bz-FFlGL+z+Y^+rkF01v2a|marb^Wv zSM;~jyqtSFMW@wbOCdmPpnap-BncuR7;`ZfGxZYXjT`MmR;&b!lkn@(jV<#@xQ4h9 z8Ms5@L#9N`ScTl=#Hknc&PkY-ngwR;sAKdVD~~*0OZH5-scp9D7VLri$a>P(=5gyQ z%8NxYvZ1hx3;L;7kE<{0pCXHH-|i-s^|h_=f3kOi;SCe3-|watR zTC-n5n43G^vfl3E#5E^x_*u^hZfFCf)G9xgHf?hHOk2Yqz3kGplVfSHNl0|&>1;#hPtW)- zjrPk6h3}-hEaiJvO}RlTLv>!34w=XBdz&eVOJ!s~XYCm@HmI9}VvwJ?(NvV$@E%@T z_R`zOPyc?Q(d2Wk%Nd_{!+U+&3^71R@YD4&s9{?G!0)Nsgdb#V$WwI?Pz-6AagF7O?Q@!;Y#o6 z37p(&-pN|&^V)me_ReavH+nMHWRqNRE;mx*(6~!Rwp~;@XCv2tDODfqi_A0b#Mc7r zJ!wnP5>{PJ?{2TT%WHc)*YemKR;P`{yOznk$X-e(b9w7b2j1k?$Yat*1FX=J`r>k@ zm0;Cb>_zT7V$hRy@4s=gk9t+#ni3|GVy05iBNMdtNQ8TnSNQ5OG>*pkMo^BK5jMFd zZssWxO36Q?>1-jMn9|DWCqLIiRJ?^}Yzg2lV{Ib@+jxy`a4BGKi69J9yw=Ym1)p^oyMYgE4{^nTM`3Y(D%gO zIY{uLS|RrFW_nNCD;Kgdw-&=2V+ERH)U31@DH#YxICyFkiHw4XLhq?-gO2Mi(f8Gy zD0Y5NaGI5sG$sDdR(4`(tgOd*UN^1R^s3Rdif*;{G0s&EKvg=fb@-LWo*Qc`6R4~v zcd~z1h-+|`4{6-?A?<}EPU?mV#n;l^uuMb1^;j+x0# zOUlfT5-IjK{fGP_Pu3Rclb({dK<1L^Bktk>xi-Kl-|-rxt8SVwd2fjg(GRmP z>$#bPe0C#!^q5)cf`O59gF!6~#_%F{Q|x8`H;nPRBJr~4>Y;s&+Zz)vb}>osS3S9u zk9+BKGMC&$U5D#Es~uo3-iuqVp7z$)wZy!n zy_i|_#@(4E!HE3ohtg{=J{iC25j^Gkre=4Re&JLK)Cv|9IYS~@D6}is;*2R@%9~tl zdDoE}F}SchCwE-@a^L0TvsZ`G9Q|#%pdpv}Y3>JcdB^3pKYc}{VK=GJ_s}iF|4ZXA zW5*&D4O!VL>-`GW5XKRu97DX6bE@x|hCZ{+xf6ap-dx%e9U3L05b=yku;_zaEgLa* zD#fuY=e9gQJ`8Jmf*-buu@FGMQ;YS!uZ-lTq>ryNu^tUu?$^B42U5X9wU0Vaxn3ae zi*TZ_H%Kk;cyfyFnlNv?w#h=9$67m1nAhAw^gMm<+0MXaf$BmUyR6gcm)hJpKMdpc zshvyG7n_wUdJ%9jKSh7uvx!t#Zi;X;7qEyd4eAfl$G*;Xm%n(g6z?<#j@S^Re@B%x zCsq%2n1cQ>$*Km{oXbWO4dJ23M39xqeR+IX%atb$lLGwQ185pk>xrSqgJg?NU#~8t zh|g~0IEJ;%q#2~*QnR5di+`xbcYvNdO+SL%@8e2>UfmRu{*!e5scf@0_ zZC{(orrwBOCaP9kzD_sFK^m9oU#%H%X7LHF?dO3VMuTz&T>P-6h5XK*&GKoBAt&Kw z`X!os1p zkL&R+VAX!&);OyFQtJT=!<~FvwZ`6uEL6GPk@sFj>Pd$z#oSpr|A?bsyjH~f+gA^& zw+~9i#cFcBpPezRm^RgB^;D_ZT`zosrM8n|&Q;1()Eyhb$*~PWV4aCEXuk6j^ksW} zhoN1hz^`GGOF6wc>ee%rY^INL_1m9VL^yX&q-@XL@Vvi>?F8=KJ#SAigU8n^umX#z z8Fp?~+9h>;!F~2ubqNXp{D%we-|9>IYw;fxCMd8?@NZ~Lhv(mg_6_2M_HE&S4G~l^ zKOCP!r}$5I3{c10508rT!+|rrfC-);a2y-8Wx$UBj-vu6{se(Di2{PZw=gxfbTS27 zTN(qW{46Z(1fcvvP&2gmnw%=fXgBTfsnCS(a4iXZ~v7{Lq`i z(O1*W0knQ=we9sM>yr|wyN2x;tLteV+u?CJm#`8OPVm58_#Hv7#|@Fz$oeb3r{*Vy zPtd!!Y}!3gDfkdxx6t}=5Uzja^Kf4U^^4DAN|8Xfsya9$D_V@w1EF`S~%h|a(|%u zA@lc<9dK#G|JzaS=LzX|nV~|!!GvGWG(eAd&LsRV0oA`7Yk-3uP{5T8s`>v6IsHqJ zhbxvttobnRaC`=V`0UKh>>SLEK)QeVUEq^JH=5dcsiU6kfP*Oe&GeU-2$ZWk)c1kv zh=5O$fA#i2(7(@nFjM{Z?O&hU@8AAQs-Qr}{!SL);|PrMa`c~vDEkTo=xB%ljCc?~ zl(`>+06HAtIRgR%14lnlew9E7z|#h>90g*5MJO0J90DA70bR zG(vl1;s+stBT`^_{Bbfm*+<$yszhxxY|#5H0e!exO4P)Zj` zfmv8UqZrR{kq@|UU+}qppWdUoc z6iI+FiiQMRen|!Em;7gOWv9s5BKC^R)=IY6-Fw|2A8P(d^3kJa$!1OIdsNQAd+y?0j(ZV^RVivgW?-)M1t~y{Cut@z=hV{dtD2C77lsl2A zh@|Ou*1DA&B7>`r;urKFCo|h%`r```h44uJmWi{+@^~1D_g-a)WB2y5EUo!G9xRdX zC*I1OlR87Kxqh$mGkb@F+I2WIuja$OPq?E+Us&?2gbXiS>p1yhhj&^%5TE&K=A`1i zr?k)EqQEjkAGB>b#z5MBk@kr$B3fmfKaEX@4lHjCbuTf@C}VAL)X2~zLPrTf-(u<*RIXvlVGx?e2al0Qud zv_4Kn85wtFg(@Wvk4WV8`Yl^d1ETwR;v6R%LnTRlxwYn#s`jN{wd3U4M&%{ z1qIX~Wf~BEbvfu1*AzcLZU|NjZ>Cy%jh=G4-q&$L*<8J^j1u->FO{nS(b=yxz+U$; z%yFf`UNiv~(zt%wU=5uJHZMYck=S1;;!!uyk z`0EG-*ogiq&-yP#kKd9Y!yPl{QOeD#GzMpO-a7MI?pCs#VRl?VshT3u9TyyA@`yi+ zwi;-DMLp?7Umc>H?$xPzI^l&?x$^n)*)^TsJHvVY$5m=)oN^${mFBJr*Lb0M7R?dg z)}*+G!P+sGKS`E5-m_>gaR6~(sAsZ&Z6U)BE=Xv@(8aNMaZZiM;n^Ji)g(l&e>)eg zWtfsC$;lk6-B4k9#a*Iga~4bbd3__*Q3ElDP=-jXiV%zQ;%&7uUw$WygGJ!c4gdfI ze=3asZ3hSd251Dx7!S`I6mM=|P=Y-{58B0kCQeIBD-Jl6#)f{wCYTY&X#7M%W<}a0 zk+Y$yhyQFZlhy) zovDkjV2Klgj_*F#vCf0A&J^&I8?(niD8v>bPLj7cwMEOc6ScQTE43rBtv#eoGHwI@ zRO(eFC;e$jCcXxLz#mzoTkPL+S~$h)aSY-9D82UB6)NqZ^qZSzQhk-jggqlhr>c9} zy2D1swiF=0lfc2c{ip;0!$-xrkf)=pf zM!6kD4Jk+N0d*dgN($|!7I3J?3jlk-umb?%z?(ytwkWTuKRdURw+0;HN`cTSAb>hK zI66sN7&-vHX@T+C@cV-xf{;(k(!|Na5pZgbT2KN2$2l9oi8jjyf%lFtx*3Go>U zLVybjT>QWV11smq3*oT!a)T<0f37BopVC~l7ym{oq!mCB7ui}c7X=~ zI|tx&w19w0fCuzu2r3y$$45I$TmT)t zU*LX-O0r+g;oZ?xFaRq=`J6?C=;Du*05~WCh&(I@_5M$;qxJ9K@7E{*IA`St9AO_a zfMN{+pauYlQvhGH09FE|L%DiIp*)9t!hyaZ1Vv*hsB+Mh@8{jW zN5FvnH{iSzO0eI{N2LQUV51Wyb9D8k=8@U?&tU( zi>_-w=6h4@_XLzU_wUdtU_vMm1tx@saP}MI$lHAe1kow?!^1uS><<3WGDmvf!O}}t z5ZLPbrwiDrLcvG-As`ndnifF-Yy!lH4);f-73@Mo171_Mu5TObth;5I}=}sEs?ocewxpkidRf`)|>*I?^}?OGRCjPajm% zqr&e!9JoihsRqvOfdIEjKymx``)~i7aKD_RAp%{O08keUSOcKK{TKw`WEuGO0O6nz zN5H!{;P?g*4mvd)c!va92Jlf0e0ivJFu+TbAmFwgaIFKR02oK-5CYuwelKS~A3FSA zK5!Bd)hU4-`=#&KhYo=qW#F{jK~{7W99{TPG5mUeGzL|$08k15TB7eztpS4qEsP#Q zP;vXI(QyC)2jWKlMb=?TLG*jTu|5ED0(;2^O$C&(|7M?o{rm4}Q8gcF>w`tHt{}SC z|GOa!U>=b1eh8d{1wJj5S9M?j`Ty8^$0)m-ZeO&Kbf<0GY1>RYZQHi(?zC;&wvo1# zwr$%wE6MZj{hV{}82iKdbjP?KR*hPPS)OzLt7`s=?RNwJxPL>~exp+11MXD+c9{WJ zBLIsKa99H9%0FWTSjMb?yZ~%!fcu-({Jy0C*t@3xJ)Z0UTTuX8{No246a&m_|4GF5 zcf|qD%m48KmMQ>S={H(GKHG0-C_o`>fYg5r2kg!N&iYSH{?z9;QvfWnKlNt;>?E`N z5<>zEP(a^R?D9<*#Gd7 ze{%jS{ogc9faU-u2VjpMfSdoPH~*&m6Z@}0`_D$I`tOZ(K*9gN`~STj_}6g$XWLkv z_0K$F0^BtKtc&0Ne7KrBGF0jyfUy9a<=fcU@k{^tCLHh_@;<~HDf;2+w*QvrSetpd_pn-8g=|+1+bvIDTy~bX}Y0Quv>s&S4=?nVQ{g zoShdoy_W1I)(>7jO5MXKT(a)9%G?#d2^E$Pd^Iz&28pe0vez{*)Y}3LrVKT$s|8X~ zSxf=^;7f{UyJ=XmKZX!Wn7&C(=(uzK^i~b#^!1^!W`M{ZP0Pvcz~P&i1M3=r)!EzD z-`m&M1+K2CzI-42wH^Y859|P%28^5nWOwg`Z!Ab*>kckWRvl0pc<_D6WaMyHyzi(8^(%M=EgvrU6 z!G!^V;3$v{c$*4{!nX;0GS+B}&8S3RF+TNQ8x`~fa=^3H-4ovAv!~;ltG-hBU1?ol z7Lc{}UiP*PjG*km>$RY>1}H#yIDAgt7?iJuT|kd7HbCVPUJH?|YQy##V5fZ)K}Z z_RrG8R^F39;~P-?P>&lbV)xc@P$0iv84sVS(y0oqJ5@e-qh7LTK0XRxqrQGr{do7L zjJ0d1d6JjDN$UQH!Zm?vyn0>PwzSjKTyNx?dbdP7eXlA(J*=8TscWKt>EuvF+gzau zURGUveL(M?kkf&SPGMN=pS`ZKeG;#{8q8htIpZ6-pV;KhLaa{Ixm&r} zdS!|8F6FZxz3C(;Ig>aWe_v#1Y{CNLU~ieyMD9}1s;=dx~H+G z@oC!k0N%fs3ie+8iiYN+dI~qC-3OzC`ax@32byg7A(5}bLa_tsg2`J{6opVzcU)N z%i@W4_Y>WZj{s}O#n&I!P`wrpv>u}tAKJSvW!Gm2A4$*DO}(9$)H9vOI-aAuue2VV zx=G$6USX$tN1vX_mRH6Z+L~8BMz_woGyp`F);{_^T3qCn$%>i|E+*$Z(n3Ejv#hDV z>;f|gX(TtW?tK_2zLo4%%EkZ6ur*e&2{jX;3`m@E?=G3U14f~VX(S{v89x$cvdxC_ zbQO=?S2KvYU3w|50Xw&sZx_4Cn~ak!2S9-_ZofXh{H*aKn#$_v`yv>AOxVUV8Of9C zJO3*p`piy&J+hLkc*Ir3`J8(im)Bi9F;KwRS;2|2c{e6gj1(h}iSP~-s;I+^KdqYCkD5@iNq<@;|8CRsn`(|F#IP7QEmD*Fz#Qv(UbVya02()Je zJJ+`}>c%YMAkG8LTW&i^8=A0}(S`SZX>MD_>(s|xuMroitWb>4GoZ-JHD5Vv*Cb~$ zESMw*mGSXsqWH9F1F%$({=Q!DyBGuxA#58758#@a*OO&n4utA%ZgDz zz>s*|HKVO&WE|M)(-Emtj|E%Ia!h`{OkaH?o{GS%=#Z9M4&>sYSro*EWE47*@b#tX zAk*jf#;LC)KIV_aY0f0&2U?Iq)$A6bd=+iR8o|7>>1&N@A*U9kps~-HuUnp=88_!V zBfBoytr!>e=r$erAlzRKWNF>d(Zy2?WXG3Z4I;scIhG%qx1#Ijq?z7287kQwBX^$`zdMSq}~qha#$+&nalm2wy?eW~f#&GQ%} zbuy{Z*zq#eTO&|R3GhcQzRml!8p^vYkxV!cn4Wpk9N#<&V)jt>@Wu?b_I7;qo#Fix zBI=LS5f+M-hyC_Jyji@^(~--&h%y)jLY~hzXL(kYOis2-n=3WRmx0Te_37Gl*z~lh zo-+$MyM({;;AW$tiw@0$6~^9NBz`a`jT2wh=g8Ek`W1OgHWAnz^uOm^a^ATRE<8vd zSPYL|^sJQV9GN0kO_zg)mt7IhYbBSx*4AMqkwJqSamm*I#n^T}HiLu36=lP7oQIL#Z#Vkh z>%A2<>bw8V2aTv2Rp;GLC6NA+O8&%EB=r|Yg6mqrj7c0vaVwRFhK64}Y;^_ZTj)3- zSfhCi*F*VJ4dTg{?uUYk8oWLPcM^3|>@#IVSEeGf$o-udLa7Fj>{ZfTvxUtU7UhwB z;*uJL>(H%Y1f{`Hq>QGE1x-H`@XVHUG&qYk2J|r9s^>T+_=22J2TZpx6AyY-<9;o3 zG)Xu~)zKSBGiii<1Z8rlL6h|rj<*gUW-U#F)}hF3TxUDJP4_>&Orj^`)^c z*6Dg0Q-5>%&K-~zt5U-|bPn2|b;}hf!ZmW%+J{4KMn2muDRHR0$yvd^4|NHvSzX@{slB(n1TH+w+Sv}* zHuUb-PBy-G`faWQ(M5}jEm3#f14X5am7C{B{b)5oxw{r^?MrrO1r-=->nbkqvy)T% zE@~k;a~`dksit9;oHA@%WM((0z%wib%KmBixu!eb6&i^u2uc&b7VOum{RLWV`=&-; z6Ch4pHNB9rUS^~p+EA)CRUpPhm`tdg3pWpCOrHnvmSTx8v!E^$+a(rtRU4xND>1HS znJGKeDd5k;4JPymp?Oale5)<`yezG9iA9ijZ3QVb{ec=eaeLNTAt4%|{A!_=6t@R4 zW_YSyq{=gpcML`3HAcJ5fmJpalzP6j+~En(X-=?@CS5J%A%6Ov*CwKVd61@K6ZWgs z$n#cVhNaY>4b(8NnkT`4V@{jMJzG6d-7VHq)f~3uF3H|IQK(hE=@h(lP+Pxh5fA3m zx>sl+xyU?&{d{x>5*MROvY3$aZHk{{7;{|P%mTTr5Ou;mG+)^PUEVis`R7)l*-gp! z^?fZ~Y#p67?TNgQWH)eECmJ`>uWU{S4lut~S#CRXR%-5=3xU_(@t>)SH&|7^JAK5? zP%9-F_8`%%v*koEq?M{@EU6)>2C{26hd>BB1Zzo$WWVh>D21o*G2=k(Zwo~%T=lK!v@>NSa(bZv1AqmV{&K0^tCM<+kkRMABFqOAHUWVe1;c9PDR?XH0RVr_s8gbQ96-{2WEP^?_j&r?=*OSs} zy98qfgihPKb^7T0k`_w3@(|Esv8uG?TW}F8E-I^8J}q{|9s}_&yq>WQ^Z*U2T^4lFA2$lBZ0kjJ7D( zRO^TgWH_|uS*G}BJX|WF7{dM7^81Mivob=k`4@li%SY`f`}u22xhtgya<~5?5i3pQ z-TQSv()^9>q*MR2v?P*sfTG6X8By~^)95WuG*PF=hW#0nu<;Z2aDztQ?UTJw*trf& z=Jk#4_tGke@hh-ZZf;M5YWog20p{0rsKt6XP;F$|U|soWf@Kgosf?t3%!7rga8fll zToGgcd|@KD*xt2m1s*t+9K%i>c)ot_cw@UQ8N(DXK6&KV>#~S%Vz7A6%}`+=Fn+18 zh%Zl|Hs2zc&mPbZ8FiY(A%{`=m*6ELoo&#!Rd;ZEqh+v8gYdoHsVA)E8)zq*1AH%+ zLb;N?az29E9g#yJ$4<-@c!&EMzB24+as#*gvL%5muEEJzw96&!+~sX znoN5m={PWu;2_xxo0bt`G179^qq_E9VJ6*_?__&MES{>y_rzx_eZjn^Pj%JBe2hUl z0OQh7UirR%FrSUtxF57G$A^l<$m3W;b14*ky8NvS<`-O?tk4k_L6R6Z7XTgL^|bDk z-D&^0DbG(=)oks2AP0g~F&Z?)-iN$ujwyB6UN(MnqdyV_<|&vy@5X=)Z`38Xo^L0O z|1^vVY0?3s>@!V2Fsg(XA+o;%91Sul1<57W#IJz;M_@MY3T}CRJcR2_Z6O>!s#~a0 zI>U*WB|ORkvJl)t#5(R`{asuUudIT^0jGOxG3P1Dl*`fe82?Ugi$d3MS2Uv5kQ14z zFRH+v_sDBMbK0Y#Tr+Q4ZAOyIE$TA9m_edWL%g(oLR0QY zB~OUi68RpXZ6N5vU!&jxFC*mzKmc=HlmSOX zC7jSo$jN#RQMH1s6rbCzh^aeb#iX-%kyZ?0^EC;TvCO|ebnA6&&O*&aJ&1scF2$bp zFTw2M5kPpL;emI%Y`T#AbPmyi^7(?1w8b_9eBjIs!f#;egj8&GiA`zhfS+S5SyGDR z_11*)e2a<=(thb7OF6%UAQ>m#udVnOVhGyfsG7#Mvn+nx6F$)u_B~t-T+KzB#~R9v z4P7!pJHpS1w=YA+x(wt}>$QY4YoVwJ!Cx1JAX;6ouG1S*3OzkZtH7u-v_}v0A}l{U zmzyjuOBZJL&{m`HCG(TKOoJI%ow@c`-E2YWD6C~_(t5_Wk_ipfTyR_f-aMRGUQbfu zyTMk_-hHRWZ*gdRn%;U88kKG*y;xTQ|B$nRtM4}uzVm4xCA@vk@P;XSGxy})yARm< zst^hPLkbM3W_HJpAJ{;R1;xP6fz=ABQ4tH2x$npw=2*4?kA%u3sKh^}fZWWG2-Wgg z9Y!;1t3-qniS9O$OCqag7!1eVO706!O{4 zkzCMx`_eAVJ5w_E2Q~>-z_09OMHDf3KP`~m1EH^;sKoUnazurd$q5NwKN+#54T|(* zI@e*j4qdg*%ZlzY{AiLmW$N*>@^?KpTje}`RWd7U4<3TNyR;!5B% z7ka&VA%qA21u95i|KJhHFh-t{zu&JW{%!};`A`;5QKiY(IS zYfFOgBzecH9&{T=Z;rnON-Iiyql-0nC-&QE9~^gJ5D?IT$wows8P}8;9YoX^|JZe- zfl{)4@p^Sax{$O9D+_F1SDSovHb#jXLeB|o+cbw&xjQIswUtcO))IBoY~;f9L%i)g zJu#U34%hnBb(b{GL)W1EIH~hlUorX@iIoTFv?!6s@zf$H4x{>c{n5Ml_h|eXO|!I^ zBz){-rn7eL{3V2;nSmFSAA|8N(i}AQzk+*cZg@`71Vw9B7fxtQ4A0w|1w#p9t4eQS z3Nf(?`i_sWqM20d^BtvQuLF(56_{~$JGEyClXu<4YfC(vad_J%MR|87i+BxWE6u%9 zWJWC0ylZMQcI^yil3?z%r6VoW0?|!*Y4G8YfNN*&@%Qn+QP^IL+I|oRq^#@g(X6K= zR9)r9?GCE9;bC|8(lr*@k#=LspcEFmMV%~#U@7HRB$OAo$Q)5>aoI_8FvOcq{nWOQ z8vj+r%j@pcLX$nYYL8v5ke3l8PdbKT%2Vpii;rRBVMwdb;)j$F_?Gk$2sCca><=e*!6+Al|<@U zL=O|55m7es+>!Bf^a4`_m$i zqe>pV0(Dmgv-s@Q$#pb2Z$@6|Y{(IQhe}ss<%DGPUdMM$|NIzAC6lUjY>8QqYl3R~z%Lsq(>8{yOd;FqZhGH1M3BmgI$`u08bL~tpyDFXb zJ9gwtD-OjGA+MS~;U=Hp?KfNk$wk6eC}Hw>`dc~-0D^fcct+zv*>e+uzm|M3>{voB zvSPyk{Zlu>Pa^ZkSMgIr=11a<&t6Wx`31e*YQDV&KB<8OvnGAY?m?8dsmk_tQV3ID z{M*-{kVH-eL_u@YSSnOG#-p^qBadpJ8e_~(P={|uK%3dC@b`?uVHAKj7@xO$ozIBB z^mQMkV)e6Qh>8u;Q~={7G2~L~L0TdhL7SnRU2Df}t(j1el%|+hqM}HM(Z9kG?vJrd zqAH9&Cgslr1o+ymr5>AL(Pjp|h#OYjp*}TwotO^HwOYiyVD0GgAXM+HujJYl4pWpm ze;$f-GGZz-5y!|Z={&JMB@qsv6W{IY?4i;g@wk`!Or!mlN~q*j>NSxi&X>jc%5XT9 zL_jnBiilBlNJo+Vz#M8Q(R_$;8-^#Q{C0Uv=_y)Ms+D<{A#|alJ4?wTb@|B(1fC^7 zqrDGdu6o4azP;AcG6&Ds>SP%2V{h^3-es$&C_SnQR})EzT=-PKC=l(qt2TU?U8a?v zAFN^9KQ=73S16|dwS#}+Q!Q$Z(7nQURA~>E-Wt>);;hi_U&?`0$oRMiAtrHOCf^7~ z=ecl0S_izM8=Ui!X${a`88GC+Yj(smBJ@^TK;$r?e8!{#5Ow#!gG0D+chaAar+1}x z5GnL)ocSPAyq5x5Xy>I<9KV&=Bt>7=pxWItf^vuc4yd8f+RPCu=%#$!SPY zRm!U$4(WT2EfiisvxKuOZN#11B$G_dFl5ypoebmXF5v~EF;sWdln3p7{04rWN8k4S zAlMp$-&ha^U?&w0Rt9@CY`s)M_57rOVob!#>-4ceG){-3c{ZL;XI}oitl^0)T+pG zc8WOXH~bYz`+MJmOL~`nj^xoAm#9ZSp&ljI4yQPYmR_lmiQJOkyZSrY-}rqH>bND~gc@bk6HJZFG() z_Gbv#llxBQI&f9BNt;k0H!x|hZ@;eknxHdjo5Daumq=}g&o&AA!y3bT8uNEuNHg2A zg1{HstCl-YQgZdH!9=!S`RRgYaUZ9@!~~}_ZLMiF(zc=dktZxf(W&$iW~59ZG}e63 zcZxxTRCOB^9?9EOAoIM~%|B2PVP;bC@aV%yOKOVsoGuPJ(@}1r%FQ^sj~;zPBW0j) zGhE#1Cq^@vy9cH`65WMo!fr$>Heq`ePvYdKpc9Y%MxgfcN(a8saXUt=x^Jk;0|N4$ zb+XT46MludImdH^>D0>lPAgz(jDf?mR>wgJc>qDZ6OW5eMhEPj)-gy#{_PpAPn)Wd z?#5`usz+3Pe6VFWmEjBMy1Xa(K3;<(q1~uh>K-&sH8!7}vRdnDHcR7o>BJtBY~u z1C8MM+E$p{HT~OO`9=MVdIYF`L8x%jfgQRIL_q}64s3X4*nY=o3ViSZpK0hyAeLVO zIW7cJKr+wE`^+05dBVkl(ifE7Wuz5QT<>Jjxj0a{tlpMM)ZWhnOry21l}R~$p;9vR zwGJYe=hW0;YGBoP&{*hrF`u`~s$n8BeEqSw_WZ({M=pS8DEcJ#VGKiTg*x!pTfNp-)iG$Iv6up|O{K5Tp_pWh+8_%&zEaeJIeCOEmz+P z*Y0w=7OaEQfz;lbyoq>>6nc#NCid+VYUtV$z7&j7LZJC!Ru!;Jo~>7@CDQA5?D# zVN^QYgSOK^W0*sk73;mECJzlVPz-SF_~FO16IrQV(DMols3h6Q5#$buHARX`)N|*9 zYVAiv{IU&_8>Ape3YW~vC%~fQVnu(LZ$W?46*D|6)k#M6pPr|3B`k5F(W^R~m%?k( zqxaa((of3Qz;ee}@;gaG&}yRCnN!#`!4DTy=aA-)s~n&9oe-Q0q-|uGP7e-?lz9*$ zX&l!tyvLt!Xc?8Ro!}zP6k4ZX|EVDS?p_Rdi_4v5DA5u#+{>HHCGZy3x|#M>0&hd! zoDWLu3Mb+j@-pQcE2>&K@dACa$9%1;$B1n0^kIRyZ2Uq2p5@nmT-e9==pb_zqhO(W zEbpg9mZ0=nPR~RKi757P)!5Jm7G@h%gI*aoWa4t|+cE)*EWPVmFO2C`_R4$BLSs1~ zYkuZVIaINV?%VeA6H*>hr+iAk8l|V=ag4X*c6{rnoCsuu+}82Ye6o?-P0WDCr&hcP z^SRA6t;(YBx2qWAA!YZn0by9ofkN(%ez3|H>q{NY)_mHFbE01H{-*ld$t4H6J3Gt! zCTc~q+c%6Ja=fHG1q+9nDs26a%9+q&36e0?E`{kXKa<`S z9?c$Fj!_1pnlow~b7_W>=RiqJrwBmWXFQ7?#GG;R3cS#}l5gFPg?mY!&%HUEyO0}i z`@?Ehd^>vC*Bn@-ysSHiW-rqRePiW5hxX?v3=c_`9iw}Y-Wed-!+8W&6N=#5)c69I z^&Y@6G>lX7J)1$ip2-gJ2UgPP^li5*BZ+PCtwe#|&X;4Nz41Kt)Is4V=4z)J*_!l+ z6V!q!Her)Yxjqm}RuDn3QK6=Nsg|!H+OWWClcg6kho0bC53k_e+m8dQHG&VY4pI0~ zDHkQ5)F0(NwlkL-35TWkZU%EP`L>G@H&LX%eM)^%#677PXYWDcAjO0bAa?BB`N8_) zs;ReROvAY?*JeVj>c|RFJ7Z*J%(h!~*6HS92_>+7eBncIzoWbr?}=wqO}&qi0&Ryj z{4guMv$0}H?K5K#kVQUj)HNr$G;>kzuz6YV%x6#>8E!B*nVi_u9wFZ^(*yZXwE$bo zg?ke}cCy?;dBCo0;&FnQahZz>Pq*YTnrU+OS$~;16W%og))9Wh^Y!dYNy~X#96T*i z&f+*RkpIYvO}_}{cMt>Wp+}Lc_;0epgr28Sac&~G@#eP1!y82uyiJX_@B0cmWdrQv zeclpPJanUS9eTWLFdQ{rV%!Y-!ktC#Ib74ib0(f!#3KVbVdTz+uFl4A#uJ)#GAIS% zX!{h7tTvcMeIbS6TQ31hfnqRWFw>_(eK+SI@w8%Zm8>S) zK}Dk~nA)(_Dd6AET|oE1SNVpmJAqASF5k6<)un_Gv7z)P+PuSunAllgq;CP6PHVN{ z_};NJv?`OQEtHk~d_8pv!sU)nixJPl68@;wSwD)F;+$wj=-R5Y?Meb81>U*1p-6Bp z=VX_qhrn7ChDde=L|)9#$%|YO@$;J|--ujcA`B>Y)P2brh|h-cG1Avln57hOmTAyk65+i;5&RJW-7%~O-_#Hd%X8wf0s3(`YAqEyJ$d_t{DGvt% zbdpv6t`m_6_#J}pv&onIy{u54k;btQC=;?g^3 z2+k1tTQ4k}3nF*sT%AdG;l3ktWWhWuKFgqJO-6}U= z;4Y4;%eI|=+HWwthIEE#PY5yb0Y<`*-g(&=-os0s-aGT^GZ7(~zF3fT(Oio#RUx>N zNszs9doZJtzM_ArX%Pu~s_8lrK*iPyXGsZm%EIA(gY;-J2&oL6%zWZ=G#CH5mPLmz zZ{oa+$};OaYqOtMlX+3K|9>y?0u!> zJM=m?;zi}+uj%rWnUR>)WYhb#7l%ANlBip&+3wLGdR`ZQVy*rQY?I;%K}FqF&Ok_v zAdvQLoLSW67hc1;PpLB#dV=WQ!KVZ55Zs4c16f8Nh6N1rj5;mfY|EK#(H7rwL@wX@ z#1hD)T-$j1k6FA~!p0Uai@icxhHB4s4kE(19*Mc<#)pgUo4-QG${2@YgWj&P@*7bw z;0dw@f!MRPCQG2ZE9#L%Lz3~8A^8V&Gj+AQ*_Yp9V1^YgZH&iJMI$TG=z28__=rD5 zj$%wlln+h_gmR<2zZ;Cg%TMWlCCgXT1lg6rzzsfn>nCs;qZFVN#(vH}Ze`fekL<6X z%@9cujMF_r-s?gXTf|51H^Rq+UGse(^pJa45=xZ>ZZ_Z?sSs;oy+y{T6t$I@P!I-{Na+2kPNJ;yzX*#o}( zO4_QL1`)UYyI5?6{ypzb={}8(x3E_38?I92k~g;U|=(v?v%sWy#O^tu=AcHYAz%RE!G; zjG6ed3Q(S=&}lYs2Z0o|5$VrV=Q*}QsV3t2DRyIg=Q(m&Z)*C67E{I?&fbwZqTkvSqBB z3iAp>O6Fu}HN0v$z?^GF)h7=-dgUushsLygzuk$Q8`<}gti)qSN%XHL3pbVHC=%TG z#72Gw+lZLePj56N@75N?n*5qdtDxY6wt!<55*Q%Kqx5=D^W@(7lfmMbyJF%X-ZCDJ z$pz?FqF;z?SGj0TopXIQVZ^+A-|KKUB8y5ZGn#G)OtZgr?^CStD_lVvM? zIAde9?lM9FR`d`zKS&$N%)S__F(syU7k zZuPUD*LG2Z_==koh@Z!-u9s?4lXd`^)UaixIe%_yy%vn)D}z^S*&o7x(D802uiJ}8 zZ!Ek|bc}m2B08J9>3VWA^_AM^T#5;DSx{LA45D%5Z2KXh5V+FFG!hdno?Me&3%tF| z$?08|P;=|C_EUdBhShu%tg-*#@UXoiqyZjqazB4&#cV3U*-Dl{X{vr_#Lxq*f{ej1 zvEc|QG~%|@rl0o%))arm`=a_qITz0M#9+TPI-|{8X3NP*{u&HDVR8|DKy$(?O8d{% zu4m7>F9SO}$afkVLQ!tsHKdv}a1Mf>48AG2#5U(8ng!$x(6yZTmC>lx9A{_U2(?Zd z?8XQ;sq#MAPFDf-Hn;dNpB1}%(J4Y`)Sr{!rDQ8zH_#`dy*nP*`NJs=8SO7LyZ`EC3!o?IaUCF^j6(cPvhfNgbc_c~wJ-TFhRa5rN;X0d3*$-NP^S#1ZE7YZ7ak?a2$#f;bybIm0VsJp7rY$!&pc!~Etq#geA{tm>2NYC)pwp( zWce}k3btI#CN!F{%8di@Akri)-F(9=$$$r$SJH!(Nq-U@ZG(7u<{jZYC1LFeP3Iw` z$`gNbbNe>jHD&slmVztuAYM5yrYwIi0lu3;OQjVBomiLIqxTK2Q~Nu}lba$}CV9=2 zC*8d_A>eY^RP5bE1I}6_@5Zg_l#?(R{s@p2R%`u~I)ki^jhF%o>|M|RT>uY)aA~ci z5AQNtgxC4*%lCTRx9r|7i3mcgGJ5%fQ{%@%ndi4n*-c^s5TI1LCw$3Q$H zKW;bc(om5P)MdGU85;EGd|kT!IW$<=l^&daC{bRog}P1lB%}R&K4}iYJa}ZQ2+h#; zMDuRlMgSCHPpqj1rT``eD}7)cLm4ii4LSyLT#Q>J-*EUmLPvMub26S4YG-?2Hyd+Y z_64N&*B25<{&8>al3kK&vV=fb^L9A{3^?p_xiObX?%~51zAtu&L*RtrMi?6hNb0B( znD|*O=r}P9JnU9y(R6`F4;qVnU+97uzF{GfI+Xx1H{}dlDs&@G9woIsXkF#a9Js$p ze7X#zDW&^_c&DkML7EP@`cSX!F(Igil}_!Gw`Z(PcflJr;*xXbUAxokiukfF|^K`^`Ab^uh8<^LImft!;$$3 zW;AH3v+Yd>u5QIx6tf&?6Ap@JJegEbF9`gkb?v)(beEfKWIt?%$#;3G+wZ>L_nVuE zsxQa6*^Z)dcbrzzc08bm(v$?WSy`-6F0r>W;hqNf3l;MH)3bSu1u>?J=Rkg zI6b@Mb_7dMC4$UVn*ziR?7w?ex zzS)vzfGBzD-wxeD65q$ki>qYU3FlG~vO;49g$_*+$XNJ@=UCr>!)@>MVh!u^R6y+J zo0=aWwh8u*Ew(ga7BLl4>znS%C7G&Y@A5*89Ar)Wx#$56%N&KFGE83YGU#DUH1YvP zJ4b_c-lCRc?+~;vov%`ZLcqj!Dy#%4TX?X$hbRY8J!8du%?u7Sq!^lfIwm$%j$Zfq zu~n{J&HCCL$I1bX5zUB8oP;cI4K#6_q+{et^dv^V*l!SDV{Y`sV?*t3>M0*aK9uCS zLcOIh1LEX@%2q6!MMiwBEv4e}OFZ00{fm z`ig1_FIl)ttOB$wFtU)Wh&~otPWQal#a$;C(1E;I_LvrKcECaj)pVea zR8#75d4#{T&1@i#{y?Let^OR%2$l@%)i`>s&JVE%9Rz zFiyy*vs5KKnV&O+p&Bjjt+tk`CU-*?O>B6^en~icMC7fks(sJ-XI9i2?#@v!73khG zib^RpNEP333cQ68!zvn z3ssd27KHE{RK1=q@5rmD^@WS0q%=-vzE?;YC%`SX|J=)uaA}{9OgozP-;?{?9Gk9q0qlk>RK8bF~x|GX8n3fz2N z5m>?Q=d)d3$2`ULL|0nmxNfN`K{Fza#yKWsFF`|`M_k`F#j8~4p{(Vt@QihPD}k0Y z!@A4_T<6!NM{%Eo)m0Sv%*ic*D5lNZ)Ih)X`ZRc&DNw@6HYE9-NHCZx@Gu6>>8gE* ze5i1dtb~io@qEdFeSv-ZM@=)axU3?R5EMgO~>x>~12X&M; z&HFhKts)fVl!{a0``8&~Zw__O_DR9GS7gL1AwpfUvFa7JyAj%AxPAq;+`YM!kNX69 zBXRbxu1uOe0%lj-6WahNboGG=*@@2exj}ZKOtyz7s7VbNQMx>+^l0W_G5C-+d z14bT5EYQIhay1ddqNf|@MsB#xcL7gFf5FtJzLK-XEHx&%pTW;9C!ff20|Dzlw?RLe z^iO&`X1#+EE%*{}+Buk~nfLvZ2eB-C7YBDMy>$}ry zamr()e;H(qo_G+G^NrxW7T9E$OyiCm;`m-0)H24MtCvaRVS-JBV=M@WXAwyZq|<_5 zsGr|w5{|fpm`6T$Ue76)+$WYTwl+*(veXS}%uO~W@elwjUF1<_6r0oq{s`OBvK5b^Y3(xC@35iad(H60{kU4ZyeBcypy zB4b!yQ5HJiSfR4skODRRL+PC$rs$4o;MW#^h+p-u7ER@TV@5f>Bu=c);hucx!N>!< z?DY1X>Xt?yvzWOWS#9PoG9qP%3XM)`)5b9y^alQ&9qCOZs`*~CO@ z(l-T40ZD!pdVrOku!XL%JwDUl6o2uFr~z6Tn|KfXUwPVt&U_1K^AyX}>$@TA1p8vof|Y{B6W1?_g-D1Rw;6QTZnm z015*@1As*&Z|H#km6o4Yfc87B46PikJgqXVF0CG|KCJ<*A*~Uuk+q{8tud_$ttqVq ztre{`t+kaQtqrXmtv#&+t%Hf3p&_kH{#j4FUFoe<6MT1r-En%76FI zUxPz{`Qe|+|Hu50orUGUj1m7g>q9!$f56WGMf?wt-w{op71E9X4?4D)hk*qVez$QZ zKR*x1Cg|1-Ym;BCU=tFzrB!M-@#Xi``wWTvH9*{We{78XqjSE4(wtEgLZ zuqbDo+z`eaI3}ofmAzX7U)LwRwB8pU=+pKVh;MUEa;ZAAI~D^!{y-pa#_3XBEJu8bBm$ z(A$Ci#Guaiwhc`U_TCaVSt3AXC|E#L#Kc`!L7aRe5Zh+fh7h2|YOO2Z(s3EpRQZ9I zZ7AJ?+a|pObWj@Xot;s^Kswsno2fEZn>Q;Pw=J-NXx*JTeNg*gwvQodz+SD;vyF~E zJ=HPNP?7pXW^}A%*;zJ6v?Uc#e!BeXv#kD2$0`aJm(Dzxa+98&PhIwN_Bpign`!xV z5is~>)e=yb#%5>l+uj>zH1{c-u{b4Vb6g$C*dVSERCP@dKhW_tg~s{%IW~}Z@}0GS zcrn)N)W-D8G_Kjx_S9z72sQAvTq@A$AlQf5_G^9UL^! z+xzRA!Lul>IUDrxP1Fbi416Dt6g?K3Ksmf+p4cfT`X$|Xs!+hy?*ev6@OVSV zS5U7X5_h~B?;q&zoFg9*yC3S&?cm7IL8*6eZyzF-M+R_rPotYL^|phE!_AbVca=+Oi-_udDIoW_37$1bIc5rOC?RMkZ7U=`O z1m(5LW$t@{g9P=_plg1~gW9ZV0rG)aMLBtJ<*~#5dZT^|j<^d9)bJt9AH^~19Ssj; za>wdMjPwf<)|2XmH+EwVwBqA)HxT|V-pk++%YEhtq75(PCT``2oeNXV8`>@?(Amdl zycy0n(C(<=_k_QEBiXSAiyp!vjZ6r^|b`VL_P_N?9*EX?wzIcs z{4fTmB=y4Uc_W3)eB8q|sDVk6cb0NX~w5e@(uOo}jigoE%t+u2DC^r&9wAZMazw%n_<@C9TIPM0r zI@?o;C>}5Q%Hqc&QEZSW<@b&2hcj&IHrurFde7!x;;%}kkj!?)b3-tUc#qzoNv@;3 z681vG5Nh^VW{tuuw>2LVY1$(kxJPppckmhqvOJjKVoG{8GDAe`r(eg2-`*(|+Ol6D zWOd{C`cG-AT_F~I1{J3zNe4KVgswY z4;^k})~aB=dW1QfA~X7;&d0aDo(_m}JCrKZtxtI~cV({P(WI8TlU|@I@BRM_U_{@pDV2%Cm9fE3x@hL}%3|xrQ$5;j8 zFkwK4txAR1<)$xEq@^n1!_hO7moh!tA}aDrZ`KXA9?TL@1tn;dXSL1n37|Dz2}XrV z(j?8@Xe!cE3WOBX;9c>S znF!fKyAcTQ@4#m`C3sqtJZgG;wYLer)5oY^A#rpmref{L&jYlgEnL59mQ~>#~bjdE2qT?ZdGh-NkO9i2F zD4XM9j-+%y5QJP+h8&UT$?!w*6?n@j&XsQiL*&Q#fl!xn z=y|L)W?&sdhp1)jmSG$p7I!3abkKWJmR6Ux@JR=*ui4z)4V;Ht&;%k^Xx*q@gj90( z%x?EbsI3ZhTC?$aD1Y_Rdu7|#?~2obSICNA3%}?nbfh?rk+JLcRQJJmgB=`(15wBm zA^T@R!I;b^6Q~~SW=FUV*eC9d6p(P}tu?J38#(|9^WsmuNp%Q#kXTQ(-?OI-c#loZ zF&V_O+W;e6PFRAk%x`k((Uv>tBaP8z&!qtT23a7W3Gd*_E1gQJ+-JyHmV12C4emkNygl=ga29f{I}^H#@JjMe_L>hKx+<*sWJ zte|RImO|(6CRpL-rN4=((2WaE<%_bNc@88=h0h?5XS57L1=)+F568tJ~aBUE=zsoS#y zpRj2ts%E7)yc{zekJ@GfLbXYnDq@A39)k;i_uwjT+aU^FjuuZ-O2R=`DT99tuRrqg z2kk05aUKqtk=CoSi{`REtY3ea*u`CFAB5~G?Ka!1jeaag#?-nemAdg1DkQQqs%wfF zBJ z>~F?TonS@qbQ~ZOzZf;ocVH&(+!z$%4v(G-k?y*^Wr+H?U$;~1EDq)&cy0D zoYtfm&Q3>7&|F!+p8jO^e3F$jqn}%ITgBla)!dx8kyY zJOvpJ9%FTNJ!^clvLH;cNslH^1TA`<=eNOXC&-$m*J`63N2SSBETKTyH_}S=8}xFO zjT*vrHI$PKYp-H1=r`P(=V)MF6LaBkr^K0VPw(d_Y#%GMibFR$*7~`1w3|M3_mC|6 z%Qx30W8HL0a&64FG*+*suk?WOMpkViqD!ab6#$CLgr1>Rb|E4Cua_=R~PAYS3ELbbJh(T0hYg@wQ$)k{=jZ@?NK<4mk}*@aeTz1=Ntn| zz1q$5VAja2+JuuG@O;lX**8TDxhd*+6z4{$Hd*x;BZWSI=HXIdmpY0s8Y~E;*Obnj z#e*4ivox4!)40!vZ|rD7#N5L$*_4M^Wm(Y5LZrp^CQV>!@*6r?jU66slEw08W&~KJ zOi-%G+S_v(@NX#vPE738cf(4*WLupw0;iU;-tjcMkDM^lPG(SVgQb22H3a&R$TNLl zQv6%tjQw3eL2|3;xw(}NX^O`lMS`dDThfj)d zIu2!`hFNh%lkM@_{v&L{sjWj}ysB6LrCuy047UHO%4eo?E>Glv6pGt0uG4Y5O_T~D z`VB+dimgZ5AJ9r$U3y$Dw8M$yY=rwQ1uiF3GAh&pcFYY=LYlCNWA&mHIxUGwEusDR zMW)}2x2B61j&=5-^v6;42aP^4mC2lYYH)h2?a(~ZNL?pF{cuEQ3T&Um6LXV}O9iD1 znU;nm77+*(1|#sT5fghEKB&0_7Y9uJZmV6RS#~>#Bp+2xzd2 zk>hz+plyqdeJ4bqCfB; z;(f@AP2FKkF()GburK$&el*Eh_P%@2FP&2g zU04FyL&W>l^n$tQ%YuBAab!I0Y8PXmP9I5|2mhiB&D3N6^McVwqIU&#S;s0uvcRI6 z*TnWf_7<&HJ9~+Q`kBGKtcN(1_KAUp;7S(`)vR^j!F#f2OSgStYRP?Jo+`R=e_*eM zbYr(<1g`FZF&;Nv^W0Zxl+%(vI8?-t9P8nYxI?jqh}dGx(C0+VDrNZ_T1I!1?8hWk z`-(N67^&dV${?8>a@0VGxJ?6#v28zMz6p4>+U58wWK1gYjf8gMJh7AJ5wz!U^E$11 z^hBy{&Fh#ox0_W{0Hf+Wd34~Z`xQ9ZNJK(k?Rsi*h(cs#-iTT~Jd`2m5?NlRz)^AdxHC?arESMSy(S954tpM)7*-#z(RiOlhrL3Si_X% z%Jl_(#uJQ(9#p6MR9|?7N z>vodIY++u_C!qOd3UGfyXS<&ZFSf0z`EZm$ppA$qkO?bXQ*I0Svgh?IS0BW59|8)j`3!8kKUs2w%{y1eZ&~QR4qBCFIVlrEc%7=YUEK%`h@9bh+PFyPA5M z940Xjeo5oWn%q8YE)Yy~4`Cq{&=?Ba*ML5KaeKK4eG!UvWMOc+<|lKZ(8KBF66vDK z&5*fwjB*cTdRkH!*))|J6+&a|VRQv-l#zr$Q8U?77=*3l)7?lK&%*6Uxnj1@(U$Y+ zV_^V>&R~Tv#kAs6#^teO^W|&l37xSRoZJg|b27#*f92As85<2QSi#;-|F!W0wc8ch z1On&ObihwD$vYq_v+gg}pt~g8a7{+Zrsl|0OKOO5S_EynfV>UM!mo98zRuoly;5XQ z=h3!#iO|iXLuE?g_Xf|r4l%AaXxLuhO5$xY9Zz6&`&gi;MA@uf5?JvdeI)v!oxISV zlq&1k3G%9xM-vUjA|y{DDyiWKLh?)?)$v9D$gmrU0IBLft;}W z!VnQXqh2OKX$ne~@y%2U`(=U_$e^;kbo>iW1cl26nTGs|TX&(eI8K?gj1;oWSv>NA zjn}mpjl4G1o`6n`=j({-lUZR@Krm*Sj0TubHM-RkUyeqNuAHZ z9i|cPyqzXFb4K-V6P(|%*gn(Y!cbZnf)gO#RW`%+LMCS8PH<#`Ia}P`y2Mc)zYe=K zBCU}dFV*ehV@K<{C#*wYy~Nm{S&?U%e6J+xB>@Ii%L}DEcotG-C)@W}dDzggzm5*c_S5Ww9|TJZq|z~H+2mtBNSj+8Pcv%Q^+OezI-Z0&*s=z8*(cR zT`L()d>6lPeM{s7aVYdIfa5ehg6X=5zKeLGW8~~{Nw{#=ikS&em-fK6;?3>7e`++; z9nrX8GJM|Z!#aIvTZyGo2uh9fEv4Lk%UjcE5I8U+Wu_&koQ-c1@2RZa2_mBXxzl^ zHLoy@j}NE;2_Fe9ZQ44Q|ICCz<~kov7r8nZ|Gcy^p0IuqClj7(Yh^$lFDw-9CziID zXR(^Lc+S;PDFa8KbM`^oz>TxXC}ny02b)Z-(%B~6;exIeL~T>gxiRATo3K zF!0Z-az|;}p9=@ht7b{eyqA)7Lz{Ni*=`y1gpKtO%Zl{qM8_V)vFqf*Dx|{a!5!aZ z6BsO=)n@>51#_9WWAXHlsBTBte`|+O7kMz-zxWz>&{v^I1AGqKY@T~C0_&+CJ{@xe23#%KZAP>&e!Wb9&XEf*0HsOX(9#x!U*x)$HtcRx>wE|`Mes@Zg~pf|Ac71Bip=G ze)+b|t_(Ly^)kY}Icl-2WAUjR5j6_g=Ico`@xw>t-Hv}CRcbBtD0})|4?}D&H=X0GivU+4>tPCLi}G-9&fv;_KjsB&lx;M`k{W`v=^Ph{-P~ z>28vRGD|1Jqb$$l@iXMq+sxFmeI(%GmBmCQ04+x`U+d8P&bm`n@&E~Xw_3x}qAEQ3 z_H1NX!%3Q+lzo;kX}yEkH>ZIi^MKowt7-7#w&Ezt`-pkZkV}4KYa`S9p*xW0g5}-4 zaX`z%*`K60B%w%~d&P(a)sVp?qi-NZ?uMCZIk)jR z_BGvMD46YPLZ0!#D3M&EWO|%#?2A2(glx1#PfWT{_BH~QZKJ477Pz7bD+VJ5CJC3{ z4C%f=2@Z=;T0~HMV~ELW3X4F!QO74@6 zJoczQV%xPljPb!*#J@BER6r9x`H^q=^K@hi2lS&90ycG^f-Jrbp|f&fFN~ zgNvpzqv-vd4G6WEy6JxA6KM4J08z^MaU%KVOPPmMtlR1CNN(trzKNtrKtB38@SaX` zteI{#7rFC~@aQQ#p0{>lds;Qd8x9sEzc3w?!bny1sgDndi}02xC=WEZ{xR>X#Kxwu zVw^I_^tJW*Dk%!)09i>4c7(d+sI#>Bdi}RYXB$`Zl3Fy?Q!hp=HvIIugesRT+2dlo z4brA5vVn+EsJtOr?JfB`pzgZMkvqa473WtK)R7=<)IY%14*|V4+EBLI>lUjdx~n)qPvt%x-eTu<0cy!P@fI9!SkM3bo_{;#)bO(749-mY@YHu1AtZv@xBtC`<#JMsUsV< z@*FDFUmcFCpOipmHvokVrS}c-IY1R|09-YQdn!S^l<>IF9ex-U25FV@iFSYDkmz2- zn>_0If_BSE)!~gD<*S`(R1i|QIr>Dg;bq7q${N#3w;-|XCiGKwmeeZIB!rhom@+*n zp>7o#V~-ph4-GPL>U+7<7>E^J8^m@W{8nD2og6rcHlWRE4W->>`Zs0`T{zK24TfoP ztj-Wv0*j?Gc10KG+o8O>t>Rl()RC+v1@DYD8z;sy#!$!#mA9;dUm+L-kbgu|pV+y6 zUn7U}CQLV;$+swqHjxNwsWP64_-d=B_0s3nnp%;_?&Q7(&fXjOh;Buj_lG^{KlqfaH(V32Ptj)?IQj>mI>} zDKyfQvMQK(HZh=EvxSB_exhu6E4!$_nvQJhEl!dcachBgz=!P96IpmEi%a!H$hW*o znK4`GC3LKXOl5_q6Muv}k>DQ?bQ!?)3)Pk)FopBZYqn&{b8}qXCf0c|w>+=8%SJod zdqrjC9tfUzVxYJYs#Ksgf{p9`1$~2NUGxeE#KoNXurs+?X2BGpz8$P$&PePthCg%q zaoV>2=9o2?+$V$IMBqEJ@fP5{;vAr0!{rJP>58h);YJ*MLlzvdq~tcT@nR>L6jJYp z`phS8AJP=eBRjSvVw%u9&?QddEf24j154A0Pv5dy%Fc%OW>hJnQKRpY|vo-^vPj z-hzlZ?8Z=htDkIs>N_*4m=)^D`a%2dK2uRI>PeCHxmxHprD5{shSO(|afMoa_dM_f zYe^vQ$ywJZl1I_o^NJYKnalZFh}iuq_~ma&^-dB_b7N)Nw5HgP&2;z3R}~thdDZXU zX%JCJCSRH`Gh3Q;97@XbQyCGYIpRhD2TR#FKOow&JqDDKrX#1TSe{-1!UFF7g6*o( zG^zVqPFcmfnT?CYTmU#!`&yre@k9|>h%M_GDnywkv4DaK(CrbwVlxJ^K^(REs(~jWr$zCLoEf#T2Q!V#JMPRx) z5LWWo3K&ieReC(%`|tJJyL6|zbGmkdN!qv zaGs2uo+HSkr@4YL3s9~2L1IM~U29!K&GvcsCxXTHlAPRq^Q47j`5|)v5=p;ajQ`N( zkg#GV#}>zq$I77Gb2n9KKBB!~6KE+l6rNc%D|-O0*I_{zgiX*{r1= zUOc~SzlK5=+P4fAt0U3POvgA#LMBnnoX68(oz67eEtm z>{F)UW*Bx&2R!cuPx{LioO)yLz63@V&I17ZB&`Bd>bcr?g!rbTc)w2! zD$fo`BQQphasK7$2ZHMz5ul(klzXo2I24i6+!b}IIDDJ+tGM111 zSxJnI6D4SnaKMd*djki%)*fd-an<5RD}Tub(7dD&H`3 zQbk~i6tj@v;y1n9wNjwU*>4jPw+Z#sEiPj})dc421;}xYI1NMKIFo0&JoLfHR*w^|!zxwTG(5I8}42Oo);jP_0?4<<{-) z?3>zTqi|HDV>%M?%f|suJb;k52>DEf3lUh zY{R?CQkndsJgz|t^O|eK{;i`SbBEceTcFl!^AO!uk+O0(;GxAm!RfbwB8`8l1rr*_ zmj>tBW7*|)td* za~_?wZeRB3!KPWAA2xBI)C>0IP5W)WC_y=UdMO*d&uW|5BZ(-#@U|ReAx@ACyU7@$ z?o?qjCdQj>T_ZRb?CXMi*k(tLQTdS$xLaV4W&Z_NWST7e-+Q8r|B93U%bxz6qx87{68SyaMj9FZ3wb^XNVr|VV zZLpj1n1B4~vy1i;ACd5Ns_S4_)w2qVmQW0l8ylK|ps+Q&lo=J79fL(kKvqOFGy-8@ zYMf(cVj4_HsL3wMp(0#FoIher0t;T71JK|2ExCo}p-NX!jQZ@v=F`11gyjHv*S z(b2)LcW(d)vGa>U8VYCyX6Dv$%pVix*XFSDjm)e8onPMa5R$u3W@cWtU|?)*ZJ$Ef z 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ℜ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 E3lR`la^W9>v_w7u7*+vuRep1@yV3Y(DZBjE+4 zRE3l@O5~1qOZQ6p(9uB$g;3>;h~L3!%ms@a|B~Ty6(@WNquM(vl<*?L6TEkFW0Yjy ze(+=Safgz{;M(>+x6^E%=b}=G?rFq`vRzcq@R%0ujm;SJa}fBu@>-wYcpRimX`qeDH@(5CP?Cr0c8-JS8&62p{TpSQ0)g<@sio zZ+#dq$eDMr7uD`g#SdA!UQgX=&C`OC;VBZ&0s>5F`Ve9=w;+O^zojk!dq$~NbBU`+ zVra<+VooE55#F{Da)Z~+Nq$N1fAgjA%4s3+_*HT~aOm994$;Pu3lKOIT^vBxvlWvt z4`XycjdzL88mct)WuETrdG0e=X~_P$m)x~GXx8@hNXsFcR-Qi1cm4Qj2-X+~Ost=#l@%gFypgAe6ep zTG3{d{%(dKtXlJ1r?OfK#?)4{b=e-cb`qV!I1Pvt|D6=k=?hR0$Po5*E@nuye4Yv5 z1FP);{(N5-$ZAW$XQn@0OFc4@SDaXH)QI>DiLS$+%h;>l7ZE=RPDE5h^z6}r`);Eq z88C07Uz9`C;Abx}gx`e4Xg^j}=M{D1kXPVlSXODuFqNpK9D-|66CE&^e;Z-0+|p*$ z!10!(M&(u$Z=QgI|JxrK>{AH}ma2v8Sb6-TrL*j~i9(OVB-vE6HjLBcvytPjs2WW) z<`0=F{Z_*rM)Y*(8IvDlkf^cH#vFIQQ&Yph`ljQr(nvw!x%(fMbTxX8eFBWLOfWC3*tKZf&_5q5L75!e;yQ(m=L+pN}yj}HG zOAbmliDRPl+G(<@X9t6FqiXf-H)d&oXqe*WQcX&UMDP%I_a1&Hv-eUVQMbL&bKnYLDt5;|(^g)GhLpnwByJV zc?0%gGU}Y_&OJk^<}a&Sp29vJ|0Ls*Qv0dU`#gP;T?(V$@?iJJ(vqC`#+aKH+$Fi6 zJAn?vvFU`_=458Vx4fRcHy9D;i!F_KVS`Z2Fo8Ain&TjM*x*BVg|(HYJt;Ggj-z+u zS!($_IxPR3q?kHeUzej~yXArWv?Gd>mpH%3n|Z;d4CB*1s;@e$n(W}qb!Xt~3Fy@4 zqD;Hq9*XzM|%v(r0UVoQN@h^tIe4wXj z27+S-{bXQ=t{y3d>F@=iK;{0qB=SDC{A@&VmSFDa!-I4| zIWn9>MprE|xx87Vz6#8@n{zsz<8$CvShVCuvQi;Vw3tG7CP{ur@U;gNV%aO47(l0_ zqs1=_GH}rFU*D1CDZs>);hc^d-(o<5xHbrev z_q;+lhgFhlH$*tzxP)LQxVjvfcv83UGeJQ+j>SXk5gWD@aKzFx298JDt;>u8TCyEm zkbl_N#GNGp)bTkm@;wt&jwOxucnfZ4#e!7gU<2%m)1VK+_L-MvsP+!Vt0&V}?}DH2 z&KK9i$f-^tjOBevtn|< zv$h7->MW7>7GU4dK9Dd2&m*&H^Z;7wngcs*1LHl_(eU4=dz@0Yz=@4Pm(w zZ0d`-QT3?8ue(%pgzusbfkU!am2IqS{)D~DPJF=_DDg8KXGU{@G0m3;7$UB?jK_ad zy^O%WU1ggX-zKSoO6M=j!!yfg7|F#i>?#ruJ}{>4fsHh;vOAFfG-CyF;~lDu#i4E# z*Q^Gu+MCm&1%1vDo-!1&W7xsOLxu{aoO0;Ena0a<4_`(wL2^~=z`xbQdlYkr9u3BN zlVgPta>KK%G?5e^c5Iyo-fmOn^6(3$^VmuZvKH1zK+8jeL$C#T2a5)$_ndvIxTEWb z`oUuYC;2~U>0rJ<&%>}Loqt?l$jymDo$lmi&U)-*)xIx_FnD0o>zh!btXs%nHiu~_ zbj^1`wnsM*;*E}dxXM|T365^TlWl9lQ5>DL9b}k5lE{*hN|pgnrDxpaEkZV0)$a8{lR4vqa*Zv&+-e z8q07HVd4iSx(faTC+gfZ&l3|v$miKjMwG;;Hc zmDI4H@BTRpBixv^UA~3{ch=B$?>I$;V!@H8{V-YZ>vbsntULdrdlf&de�IkNx98 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�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 UJ+NyCkPLT%Ju6nM+q%BzKe~irH2?qr literal 0 HcmV?d00001 diff --git a/picamp-potentiometer.X/picamp-potentiometer.c b/picamp-potentiometer.X/picamp-potentiometer.c deleted file mode 100644 index 69e3bd2..0000000 --- a/picamp-potentiometer.X/picamp-potentiometer.c +++ /dev/null @@ -1,141 +0,0 @@ -#include "picamp-potentiometer.h" - -#define PIC887A -// #[config:887a] -#ifdef PIC887A - int __get_pod_data(void) { - // Combines the high and low registers to give one 16 bit value - return (ADRESH << 8 | ADRESL); - } - - int __init_adc(ADCChannelSelect analogPin) { - // ADC enable - ADCON0bits.ADON = 1; // ADC_ON - // ADC cycle enable - ADCON0bits.GO_nDONE = 1; // ADC_IN_PROGRESS - // Analog channel select - ADCON0bits.CHS = analogPin; // ADC_AN07 - // ADC clock select - ADCON0bits.ADCS = 0; // ADC_FOSC02 - - // ADC result alignment - ADCON1bits.ADFM = 1; // ADC_RIGHT - // ADC voltage reference configuration - ADCON1bits.VCFG1 = 0; // VREF_PLUSPIN - ADCON1bits.VCFG0 = 0; // VREF_MINPIN - - // Set the analog pin to analog mode - switch (analogPin) { - case ADC_AN00: ANSELbits.ANS0 = 1; break; - case ADC_AN01: ANSELbits.ANS1 = 1; break; - case ADC_AN02: ANSELbits.ANS2 = 1; break; - case ADC_AN03: ANSELbits.ANS3 = 1; break; - case ADC_AN04: ANSELbits.ANS5 = 1; break; - case ADC_AN05: ANSELbits.ANS5 = 1; break; - case ADC_AN06: ANSELbits.ANS6 = 1; break; - case ADC_AN07: ANSELbits.ANS7 = 1; break; - case ADC_AN08: ANSELHbits.ANS8 = 1; break; - case ADC_AN09: ANSELHbits.ANS9 = 1; break; - case ADC_AN10: ANSELHbits.ANS10 = 1; break; - case ADC_AN11: ANSELHbits.ANS11 = 1; break; - case ADC_AN12: ANSELHbits.ANS12 = 1; break; - case ADC_AN13: ANSELHbits.ANS13 = 1; break; - default: break; - } - - return 1; - } -#elif PIC1829 -int __get_pod_data(void) { - return ADRES; -} - -void __init_adc(ADCChannelSelect analogPin) { - // ADCON0 = 0b00001111; - ADCON0bits.ADON = 1; // ADC_ON - ADCON0bits.GO_nDONE = 1; // ADC_IN_PROGRESS - ADCON0bits.CHS = analogPin; // ADC_CGANNEL_SELECT - - ADCON1bits.ADFM = 1; - - // A line = input line - // todo: fix! tris and ansel - // A4 = potmeter pin, set as input - // TRISAbits.TRISA4 = 1; - - // // A4 = potmeter = analog, set to 1 - // ANSELAbits.ANSA4 = 1; - switch (analogPin) { - case ADC_16F_AN00: ANSELAbits.ANSA0 = 1; break; - case ADC_16F_AN01: ANSELAbits.ANSA1 = 1; break; - case ADC_16F_AN02: ANSELAbits.ANSA2 = 1; break; - case ADC_16F_AN04: ANSELCbits.ANSC0 = 1; break; - case ADC_16F_AN05: ANSELCbits.ANSC1 = 1; break; - case ADC_16F_AN06: ANSELCbits.ANSC2 = 1; break; - case ADC_16F_AN10: ANSELBbits.ANSB4 = 1; break; - case ADC_16F_AN11: ANSELBbits.ANSB5 = 1; break; - - } -} -#endif - -/** @brief Initialize the potentiometer - * - * This function initializes the potentiometer by setting the config bits - * according to the current PIC microcontroller used. It also sets the pin - * connected to the potentiometer to output mode. - * - * @param analogPort The analog port to use - * @param pinAddress The address of the pin to use - * - * @return void - */ -void init_pot(ADCChannelSelect analogPort, volatile unsigned char* pinAddress) { - // Set up ADC based on the PIC used - __init_adc(analogPort); - // Set the pin connected to the potentiometer to output mode - *pinAddress = 1; -} - -/** @brief Populate an array with step values - * - * This function populates an array with step values, based on the size of the - * array and the potentiometer limit. The first value in the array is the - * maximum value, the last value is the minimum value. - * - * @param array The array to populate - * @param size The size of the array - * @param potLimit The maximum value of the potentiometer - * - * @return void - */ -void populate_step_array(int *array, int size, int potLimit) { - // All subsequent steps are based off of the first array entry - array[0] = potLimit / (size + 1); - // Populate the array with equally divided step values - for (int i = 0; i < size; i++) { - array[i] = array[0] * (i + 1); - } -} - - -/** @brief Read the potentiometer - * - * This function reads the potentiometer by setting the `GO` bit to `1` and - * waiting for the ADC to finish. It then returns the value of the ADC. - * - * @return int The value of the ADC - */ -int read_pot(void) { - // Wait for regulating capacitor to charge - __delay_us(5); - - // Bit 2 of `ADCON0` is set to `1`, meaning `GO` will wait until - // ADC got a signal, converted analog to digital, etc. - GO = 1; - while (GO) continue; - - // Read the data from the potmeter pin (`E2`) registers, and combine - // them into a single integer - return __get_pod_data(); -} diff --git a/picamp-potentiometer.X/picamp-potentiometer.h b/picamp-potentiometer.X/picamp-potentiometer.h deleted file mode 100644 index b0dee6b..0000000 --- a/picamp-potentiometer.X/picamp-potentiometer.h +++ /dev/null @@ -1,52 +0,0 @@ -#ifndef PICAMP_POT_H -#define PICAMP_POT_H - -// #[declarations:xc8] -#include -#ifndef _XTAL_FREQ - #define _XTAL_FREQ 500000 -#endif - -// #[declarations:adc] -typedef enum { - // PIC16F887 - ADC_AN00 = 0b0000, - ADC_AN01 = 0b0001, - ADC_AN02 = 0b0010, - ADC_AN03 = 0b0011, - ADC_AN04 = 0b0100, - ADC_AN05 = 0b0101, - ADC_AN06 = 0b0110, - ADC_AN07 = 0b0111, - ADC_AN08 = 0b1000, - ADC_AN09 = 0b1001, - ADC_AN10 = 0b1010, - ADC_AN11 = 0b1011, - ADC_AN12 = 0b1100, - ADC_AN13 = 0b1101, - ADC_CVREF = 0b1110, // CVREF - ADC_FXREF = 0b1111, // Fixed Ref (0.6V fixed voltage reference) - // PIC16F1829 - ADC_16F_AN00 = 0b00000, - ADC_16F_AN01 = 0b00001, - ADC_16F_AN02 = 0b00010, - ADC_16F_AN03 = 0b00011, - ADC_16F_AN04 = 0b00100, - ADC_16F_AN05 = 0b00101, - ADC_16F_AN06 = 0b00110, - ADC_16F_AN07 = 0b00111, - ADC_16F_AN08 = 0b01000, - ADC_16F_AN09 = 0b01001, - ADC_16F_AN10 = 0b01010, - ADC_16F_AN11 = 0b01011, - ADC_16F_TEMP = 0b11101, - ADC_16F_DACO = 0b11110, - ADC_16F_FVRB = 0b11111, -} ADCChannelSelect; - -// #[declarations:functions] -void populate_step_array(int *array, int size, int potLimit); -void init_pot(ADCChannelSelect analogPort, volatile unsigned char *pinAddress); -int read_pot(void); - -#endif diff --git a/picamp-rotary.X/picamp-rotary.c b/picamp-rotary.X/picamp-rotary.c deleted file mode 100644 index b84f7d4..0000000 --- a/picamp-rotary.X/picamp-rotary.c +++ /dev/null @@ -1,128 +0,0 @@ -// Rotary encoder structs and enums -#include "./picamp-rotary.h" - - -#define PIC16887A -#ifdef PIC16887A -void __init_int(IOCPin RBA, IOCPin RBB) { - // Global interrupt enable - INTCONbits.GIE = 1; - // External interrupt enable - INTCONbits.INTE = 1; - // Peripheral interrupt enable - INTCONbits.PEIE = 1; - - // PORTB Change Interrupt Enable - INTCONbits.RBIE = 1; - - switch (RBA) { - case IOCRB0: IOCBbits.IOCB0 = 1; break; - case IOCRB1: IOCBbits.IOCB1 = 1; break; - case IOCRB2: IOCBbits.IOCB2 = 1; break; - case IOCRB3: IOCBbits.IOCB3 = 1; break; - case IOCRB4: IOCBbits.IOCB4 = 1; break; - case IOCRB5: IOCBbits.IOCB5 = 1; break; - case IOCRB6: IOCBbits.IOCB6 = 1; break; - case IOCRB7: IOCBbits.IOCB7 = 1; break; - } - - switch (RBB) { - case IOCRB0: IOCBbits.IOCB0 = 1; break; - case IOCRB1: IOCBbits.IOCB1 = 1; break; - case IOCRB2: IOCBbits.IOCB2 = 1; break; - case IOCRB3: IOCBbits.IOCB3 = 1; break; - case IOCRB4: IOCBbits.IOCB4 = 1; break; - case IOCRB5: IOCBbits.IOCB5 = 1; break; - case IOCRB6: IOCBbits.IOCB6 = 1; break; - case IOCRB7: IOCBbits.IOCB7 = 1; break; - } - - // Set interrupt edge - OPTION_REGbits.INTEDG = 0; - - // Clear interrupt flag - INTCONbits.INTF = 0; - INTCONbits.RBIF = 0; -} - -void __init_pin(volatile unsigned char* trisA, volatile unsigned char* trisB) { - // Set `trisA` and `trisB` as inputs - *trisA = 1; - *trisB = 1; - - // Set all channels to digital - ANSEL = 0; - ANSELH = 0; -} -#elif PIC1829 -void __init_int(IOCPin RBA, IOCPin RBB) {} -void __init_pin(volatile unsigned char* trisA, volatile unsigned char* trisB) { - // Set `trisA` and `trisB` as inputs - *trisA = 1; - *trisB = 1; - - // Set all channels to digital - ANSELA = 0; - ANSELB = 0; - ANSELC = 0; -} -#endif - -/** @brief Initialize the rotary encoder - * - * This function initializes the rotary encoder by setting the `trisA` and `trisB` - * as inputs. - * - * @param trisA The address of the TRISA register - * @param trisB The address of the TRISB register - * - * @return void -*/ -void init_rotary(IOCPin RBA, IOCPin RBB, volatile unsigned char* trisA, volatile unsigned char* trisB) { - // Initialize the interrupt - __init_int(RBA, RBB); - - // Initialize the pins - __init_pin(trisA, trisB); -}; - -/** @brief Parse the rotary encoder - * - * This function parses the rotary encoder by reading the `REA` and `REB` pins - * and updating the `counter` accordingly. It also checks if the `counter` is - * at the maximum or minimum value and loops around if so. - * - * @param REA The REA pin - * @param REB The REB pin - * @param counter The counter to update - * @param max The maximum value of the counter - * @param min The minimum value of the counter - * - * @return void -*/ -void parse_rotary(char REA, char REB, char* counter, char max, char min) { - // static values retain their state, even on end of scope - static unsigned char prevState; - unsigned char state; - - // Delay for 1ms to avoid switch bounce - __delay_ms(1); - - // Read the pin status from `REA` and `REB`, cast to correct data type - state = (unsigned char)(REB << 1 | REA); - - // Check if state changed, if so increase/decrease `counter` accordingly - if (prevState == 0) { - if (state == ROTATE_LEFT) (*counter)++; - else if (state == ROTATE_RIGHT) (*counter)--; - } - - // Loop around if at max/min - if (*counter > max) *counter = min; - else if (*counter < min) *counter = max; - - // Update `prevState` for next call, - // write to `PORTB` avoids a mismatch condition - prevState = state; - PORTB = PORTB; -} diff --git a/picamp-rotary.X/picamp-rotary.h b/picamp-rotary.X/picamp-rotary.h deleted file mode 100644 index 7f14b3a..0000000 --- a/picamp-rotary.X/picamp-rotary.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef PICAMP_ROTARY_H -#define PICAMP_ROTARY_H - -#include -#ifndef _XTAL_FREQ - #define _XTAL_FREQ 500000 -#endif - -// #[declarations:rotary] -typedef enum { ROTATE_LEFT = 1, ROTATE_RIGHT = 2 } RotaryEncoderStates; -typedef enum { - IOCRB0 = 0, - IOCRB1 = 1, - IOCRB2 = 2, - IOCRB3 = 3, - IOCRB4 = 4, - IOCRB5 = 5, - IOCRB6 = 6, - IOCRB7 = 7 -} IOCPin; - -// #[declarations:functions] -void parse_rotary(char REA, char REB, char* counter, char max, char min); -void init_rotary(IOCPin RBA, IOCPin RBB, volatile unsigned char* trisA, volatile unsigned char* trisB); - -#endif diff --git a/picamp.X/LICENSES/.gitkeep b/picamp.X/LICENSES/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/picamp.X/include/HCMS2913.h b/picamp.X/include/HCMS2913.h deleted file mode 100644 index fb10b6d..0000000 --- a/picamp.X/include/HCMS2913.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef HCMS2913_H -#define HCMS2913_H - -#include "./HCMS2913.h" -#include "./config.h" - -typedef enum { - MST_OSC_DIV_04, // 0x0: 0000 - MST_OSC_DIV_16, // 0x1: 0001 - MST_OSC_DIV_64, // 0x2: 0010 - MST_OSC_DIV_T2, // 0x3: 0011 - SLV_SS_EN, // 0x4: 0100 - not used in this version of our lib ... - SLV_SS_DIS // 0x5: 0101 -} sspmode; - -// Datasheet SMP (Sample Timing) behavior in (SPI MASTER MODE ONLY): -// 1 = Input data sampled (received) at end of data output time -// 0 = Input data sampled (recieved) at middle of data output time - -typedef enum { - SMP0_SDI_MIDDLE, SMP1_SDI_END -} rxsmpmoment; - -// Datasheet CKP (Clock Polarity) select bit behavior (SPI mode): -// 1 = Idle state for clock is a high level -// 0 = Idle state for clock is a low level - -typedef enum { - CKP0_CPOL0_IDLE_LOW, CKP1_CPOL1_IDLE_HIGH -} clkpol; - -// Datasheet CKE (Clock Edge) select bit behavior (SPI mode): -// 1 = Transmit occurs on transition from active to Idle clock state -// 0 = Transmit occurs on transition from Idle to active clock state -// ! NOTE: Microchip CKE bit is always the inverse of Motorola CPHA bit! - -typedef enum { - CKE0_CPHA1_TRSMIT_IDL2ACT, CKE1_CPHA0_TRSMIT_ACT2IDL -} txclkedge; - -void HCMS_init(volatile unsigned char *port, uint8_t _RESET, uint8_t _CENABLE, uint8_t _RSELECT); -void HCMS_load_word(const char *_string, char *bufferSelected, volatile unsigned char *port, uint8_t _CENABLE); -void HCMS_spi_init(sspmode mst_slv_oscdiv, rxsmpmoment sdi_rx_smp, clkpol clock_pol, txclkedge sdo_tx_edge); - -#endif \ No newline at end of file diff --git a/picamp.X/include/initialisation.h b/picamp.X/include/initialisation.h deleted file mode 100644 index 20b4926..0000000 --- a/picamp.X/include/initialisation.h +++ /dev/null @@ -1,117 +0,0 @@ -/* -Defines: -#define NPN // For inverted input ports (NPN transistor) - -Tested with: - - PIC16F877A -*/ -#ifndef INITIALISATION_H -#define INITIALISATION_H - -// #[declarations:init_gpio] -#ifdef NPN - typedef enum { ON = 0, OFF = 1 } PinStates; -#else - typedef enum { OFF = 0, ON = 1 } PinStates; -#endif - -typedef enum { OUTPUT = 0, INPUT = 1 } PinDirection; -typedef enum { DIGITAL = 0, ANALOG = 1 } PinMode; - -typedef struct { - volatile unsigned char* tris; - volatile unsigned char* lat; - volatile unsigned char* ansel; - PinDirection direction; - PinMode mode; -} PinConfig; - -// #[declarations:init_osc] -typedef enum { CONFIG_FOSC = 0, INTERNAL_FOSC = 1 } OscStartupTime; -typedef enum { CONFIG_CLK = 0, INTERNAL_CLK = 1 } SysClockSelect; -typedef enum { HTS_UNSTABLE = 0, HTS_STABLE = 1 } HFINTOSCStatus; -typedef enum { LTS_UNSTABLE = 0, LTS_STABLE = 1 } LFINTOSCStable; -typedef enum { - KHZ032 = 0b000, // LFINTOSC - KHZ125 = 0b001, - KHZ250 = 0b010, - KHZ500 = 0b011, // Default - MHZ001 = 0b100, - MHZ002 = 0b101, - MHZ004 = 0b110, - MHZ008 = 0b111 -} InternalFrequency; - -typedef struct { - SysClockSelect SCS; - InternalFrequency IRCF; - OscStartupTime OSTS; -} OscillatorConfig; - -// #[declarations:interupt] -typedef enum { GIE_DISABLED = 0, GIE_ENABLED = 1 } GlobalInterrupt; -typedef enum { EINT_DISABLED = 0, EINT_ENABLED = 1 } ExternalInterrupt; -typedef enum { PEIE_DISABLED = 0, PEIE_ENABLED = 1 } PeripheralInterrupt; -typedef enum { T0INT_DISABLED = 0, T0INT_ENABLED = 1 } Timer0OverflowInterrupt; -typedef enum { RBINT_DISABLED = 0, RBINT_ENABLED = 1 } PortBInterrupt; -typedef enum { FALLING_EDGE = 0, RISING_EDGE = 1 } InterruptEdge; -typedef enum { INT_AWAITING = 0, INT_OCCURED = 1 } InterruptFlag; - -typedef struct { - GlobalInterrupt GIE; - ExternalInterrupt EINT; - PeripheralInterrupt PEIE; - Timer0OverflowInterrupt T0IE; - PortBInterrupt RBIE; - InterruptEdge INTEDG; -} InterruptConfig; - -// #[declarations:adc] -// typedef enum { ADC_OFF = 0, ADC_ON = 1 } ADCEnable; -// typedef enum { VREF_MINPIN = 0, VREF_VSS = 1 } ADCVoltageReference1; -// typedef enum { VREF_PLUSPIN = 0, VREF_VDD = 1 } ADCVoltageReference0; -// typedef enum { ADC_LEFT = 0, ADC_RIGHT = 1 } ADCResultFormat; -// typedef enum { ADC_DONE = 0, ADC_IN_PROGRESS = 1 } ADCConversionStatus; -// typedef enum { -// ADC_AN00 = 0b0000, -// ADC_AN01 = 0b0001, -// ADC_AN02 = 0b0010, -// ADC_AN03 = 0b0011, -// ADC_AN04 = 0b0100, -// ADC_AN05 = 0b0101, -// ADC_AN06 = 0b0110, -// ADC_AN07 = 0b0111, -// ADC_AN08 = 0b1000, -// ADC_AN09 = 0b1001, -// ADC_AN10 = 0b1010, -// ADC_AN11 = 0b1011, -// ADC_AN12 = 0b1100, -// ADC_AN13 = 0b1101, -// ADC_CVREF = 0b1110, // CVREF -// ADC_FXREF = 0b1111 // Fixed Ref (0.6V fixed voltage reference) -// } ADCChannelSelect; - -// typedef enum { -// ADC_FOSC02 = 0b00, -// ADC_FOSC08 = 0b01, -// ADC_FOSC32 = 0b10, -// ADC_INTOSC = 0b11 // (FRC) from a dedicated internal oscillator = 500 kHz max -// } ADCConversionClock; - -// typedef struct { -// ADCEnable ADON; -// ADCResultFormat ADFM; -// ADCChannelSelect CHS; -// ADCConversionClock ADCS; -// ADCVoltageReference0 VCFG0; -// ADCVoltageReference1 VCFG1; -// ADCConversionStatus GO_nDONE; -// } ADCConfig; - -// #[declarations:functions] -void init_osc(OscillatorConfig config); -void init_int(InterruptConfig config); -void init_gpio(PinConfig ports[], int size); -// void init_adc(ADCConfig config); - -#endif diff --git a/picamp.X/include/potentiometer.h b/picamp.X/include/potentiometer.h deleted file mode 100644 index b0dee6b..0000000 --- a/picamp.X/include/potentiometer.h +++ /dev/null @@ -1,52 +0,0 @@ -#ifndef PICAMP_POT_H -#define PICAMP_POT_H - -// #[declarations:xc8] -#include -#ifndef _XTAL_FREQ - #define _XTAL_FREQ 500000 -#endif - -// #[declarations:adc] -typedef enum { - // PIC16F887 - ADC_AN00 = 0b0000, - ADC_AN01 = 0b0001, - ADC_AN02 = 0b0010, - ADC_AN03 = 0b0011, - ADC_AN04 = 0b0100, - ADC_AN05 = 0b0101, - ADC_AN06 = 0b0110, - ADC_AN07 = 0b0111, - ADC_AN08 = 0b1000, - ADC_AN09 = 0b1001, - ADC_AN10 = 0b1010, - ADC_AN11 = 0b1011, - ADC_AN12 = 0b1100, - ADC_AN13 = 0b1101, - ADC_CVREF = 0b1110, // CVREF - ADC_FXREF = 0b1111, // Fixed Ref (0.6V fixed voltage reference) - // PIC16F1829 - ADC_16F_AN00 = 0b00000, - ADC_16F_AN01 = 0b00001, - ADC_16F_AN02 = 0b00010, - ADC_16F_AN03 = 0b00011, - ADC_16F_AN04 = 0b00100, - ADC_16F_AN05 = 0b00101, - ADC_16F_AN06 = 0b00110, - ADC_16F_AN07 = 0b00111, - ADC_16F_AN08 = 0b01000, - ADC_16F_AN09 = 0b01001, - ADC_16F_AN10 = 0b01010, - ADC_16F_AN11 = 0b01011, - ADC_16F_TEMP = 0b11101, - ADC_16F_DACO = 0b11110, - ADC_16F_FVRB = 0b11111, -} ADCChannelSelect; - -// #[declarations:functions] -void populate_step_array(int *array, int size, int potLimit); -void init_pot(ADCChannelSelect analogPort, volatile unsigned char *pinAddress); -int read_pot(void); - -#endif diff --git a/picamp.X/include/rotary_encoder.h b/picamp.X/include/rotary_encoder.h deleted file mode 100644 index 7782ca9..0000000 --- a/picamp.X/include/rotary_encoder.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef PICAMP_ROTARY_H -#define PICAMP_ROTARY_H - -#include -#ifndef _XTAL_FREQ - #define _XTAL_FREQ 500000 -#endif - -// #[declarations:rotary] -typedef enum { ROTATE_LEFT = 1, ROTATE_RIGHT = 2 } RotaryEncoderStates; -typedef enum { - IOCRB0 = 0, - IOCRB1 = 1, - IOCRB2 = 2, - IOCRB3 = 3, - IOCRB4 = 4, - IOCRB5 = 5, - IOCRB6 = 6, - IOCRB7 = 7 -} IOCPin; - -// #[declarations:functions] -void parse_rotary(char A, char B, char* counter, char max, char min); -void init_rotary(IOCPin RBA, IOCPin RBB, volatile unsigned char* trisA, volatile unsigned char* trisB); - -#endif diff --git a/picamp.X/nbproject/Makefile-default.mk b/picamp.X/nbproject/Makefile-default.mk deleted file mode 100644 index db8cd6f..0000000 --- a/picamp.X/nbproject/Makefile-default.mk +++ /dev/null @@ -1,194 +0,0 @@ -# -# Generated Makefile - do not edit! -# -# Edit the Makefile in the project folder instead (../Makefile). Each target -# has a -pre and a -post target defined where you can add customized code. -# -# This makefile implements configuration specific macros and targets. - - -# Include project Makefile -ifeq "${IGNORE_LOCAL}" "TRUE" -# do not include local makefile. User is passing all local related variables already -else -include Makefile -# Include makefile containing local settings -ifeq "$(wildcard nbproject/Makefile-local-default.mk)" "nbproject/Makefile-local-default.mk" -include nbproject/Makefile-local-default.mk -endif -endif - -# Environment -MKDIR=mkdir -p -RM=rm -f -MV=mv -CP=cp - -# Macros -CND_CONF=default -ifeq ($(TYPE_IMAGE), DEBUG_RUN) -IMAGE_TYPE=debug -OUTPUT_SUFFIX=elf -DEBUGGABLE_SUFFIX=elf -FINAL_IMAGE=${DISTDIR}/picamp.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} -else -IMAGE_TYPE=production -OUTPUT_SUFFIX=hex -DEBUGGABLE_SUFFIX=elf -FINAL_IMAGE=${DISTDIR}/picamp.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} -endif - -ifeq ($(COMPARE_BUILD), true) -COMPARISON_BUILD=-mafrlcsj -else -COMPARISON_BUILD= -endif - -# Object Directory -OBJECTDIR=build/${CND_CONF}/${IMAGE_TYPE} - -# Distribution Directory -DISTDIR=dist/${CND_CONF}/${IMAGE_TYPE} - -# Source Files Quoted if spaced -SOURCEFILES_QUOTED_IF_SPACED=src/initialisation.c src/main.c src/HCMS2913.c - -# Object Files Quoted if spaced -OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/src/initialisation.p1 ${OBJECTDIR}/src/main.p1 ${OBJECTDIR}/src/HCMS2913.p1 -POSSIBLE_DEPFILES=${OBJECTDIR}/src/initialisation.p1.d ${OBJECTDIR}/src/main.p1.d ${OBJECTDIR}/src/HCMS2913.p1.d - -# Object Files -OBJECTFILES=${OBJECTDIR}/src/initialisation.p1 ${OBJECTDIR}/src/main.p1 ${OBJECTDIR}/src/HCMS2913.p1 - -# Source Files -SOURCEFILES=src/initialisation.c src/main.c src/HCMS2913.c - - - -CFLAGS= -ASFLAGS= -LDLIBSOPTIONS= - -############# Tool locations ########################################## -# If you copy a project from one host to another, the path where the # -# compiler is installed may be different. # -# If you open this project with MPLAB X in the new host, this # -# makefile will be regenerated and the paths will be corrected. # -####################################################################### -# fixDeps replaces a bunch of sed/cat/printf statements that slow down the build -FIXDEPS=fixDeps - -.build-conf: ${BUILD_SUBPROJECTS} -ifneq ($(INFORMATION_MESSAGE), ) - @echo $(INFORMATION_MESSAGE) -endif - ${MAKE} -f nbproject/Makefile-default.mk ${DISTDIR}/picamp.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} - -MP_PROCESSOR_OPTION=16F887 -# ------------------------------------------------------------------------------------ -# Rules for buildStep: compile -ifeq ($(TYPE_IMAGE), DEBUG_RUN) -${OBJECTDIR}/src/initialisation.p1: src/initialisation.c nbproject/Makefile-${CND_CONF}.mk - @${MKDIR} "${OBJECTDIR}/src" - @${RM} ${OBJECTDIR}/src/initialisation.p1.d - @${RM} ${OBJECTDIR}/src/initialisation.p1 - ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -mdebugger=none -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/src/initialisation.p1 src/initialisation.c - @-${MV} ${OBJECTDIR}/src/initialisation.d ${OBJECTDIR}/src/initialisation.p1.d - @${FIXDEPS} ${OBJECTDIR}/src/initialisation.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ - -${OBJECTDIR}/src/main.p1: src/main.c nbproject/Makefile-${CND_CONF}.mk - @${MKDIR} "${OBJECTDIR}/src" - @${RM} ${OBJECTDIR}/src/main.p1.d - @${RM} ${OBJECTDIR}/src/main.p1 - ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -mdebugger=none -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/src/main.p1 src/main.c - @-${MV} ${OBJECTDIR}/src/main.d ${OBJECTDIR}/src/main.p1.d - @${FIXDEPS} ${OBJECTDIR}/src/main.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ - -${OBJECTDIR}/src/HCMS2913.p1: src/HCMS2913.c nbproject/Makefile-${CND_CONF}.mk - @${MKDIR} "${OBJECTDIR}/src" - @${RM} ${OBJECTDIR}/src/HCMS2913.p1.d - @${RM} ${OBJECTDIR}/src/HCMS2913.p1 - ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -mdebugger=none -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/src/HCMS2913.p1 src/HCMS2913.c - @-${MV} ${OBJECTDIR}/src/HCMS2913.d ${OBJECTDIR}/src/HCMS2913.p1.d - @${FIXDEPS} ${OBJECTDIR}/src/HCMS2913.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ - -else -${OBJECTDIR}/src/initialisation.p1: src/initialisation.c nbproject/Makefile-${CND_CONF}.mk - @${MKDIR} "${OBJECTDIR}/src" - @${RM} ${OBJECTDIR}/src/initialisation.p1.d - @${RM} ${OBJECTDIR}/src/initialisation.p1 - ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/src/initialisation.p1 src/initialisation.c - @-${MV} ${OBJECTDIR}/src/initialisation.d ${OBJECTDIR}/src/initialisation.p1.d - @${FIXDEPS} ${OBJECTDIR}/src/initialisation.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ - -${OBJECTDIR}/src/main.p1: src/main.c nbproject/Makefile-${CND_CONF}.mk - @${MKDIR} "${OBJECTDIR}/src" - @${RM} ${OBJECTDIR}/src/main.p1.d - @${RM} ${OBJECTDIR}/src/main.p1 - ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/src/main.p1 src/main.c - @-${MV} ${OBJECTDIR}/src/main.d ${OBJECTDIR}/src/main.p1.d - @${FIXDEPS} ${OBJECTDIR}/src/main.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ - -${OBJECTDIR}/src/HCMS2913.p1: src/HCMS2913.c nbproject/Makefile-${CND_CONF}.mk - @${MKDIR} "${OBJECTDIR}/src" - @${RM} ${OBJECTDIR}/src/HCMS2913.p1.d - @${RM} ${OBJECTDIR}/src/HCMS2913.p1 - ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/src/HCMS2913.p1 src/HCMS2913.c - @-${MV} ${OBJECTDIR}/src/HCMS2913.d ${OBJECTDIR}/src/HCMS2913.p1.d - @${FIXDEPS} ${OBJECTDIR}/src/HCMS2913.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ - -endif - -# ------------------------------------------------------------------------------------ -# Rules for buildStep: assemble -ifeq ($(TYPE_IMAGE), DEBUG_RUN) -else -endif - -# ------------------------------------------------------------------------------------ -# Rules for buildStep: assembleWithPreprocess -ifeq ($(TYPE_IMAGE), DEBUG_RUN) -else -endif - -# ------------------------------------------------------------------------------------ -# Rules for buildStep: link -ifeq ($(TYPE_IMAGE), DEBUG_RUN) -${DISTDIR}/picamp.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk ../picamp-rotary.X/dist/default/debug/picamp-rotary.X.a ../picamp-potentiometer.X/dist/default/debug/picamp-potentiometer.X.a - @${MKDIR} ${DISTDIR} - ${MP_CC} $(MP_EXTRA_LD_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -Wl,-Map=${DISTDIR}/picamp.X.${IMAGE_TYPE}.map -D__DEBUG=1 -mdebugger=none -DXPRJ_default=$(CND_CONF) -Wl,--defsym=__MPLAB_BUILD=1 -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -mrom=default,-1f00-1ffe -mram=default,-0-0,-70-70,-80-80,-f0-f0,-100-100,-170-170,-180-180,-1e5-1f0 $(COMPARISON_BUILD) -Wl,--memorysummary,${DISTDIR}/memoryfile.xml -o ${DISTDIR}/picamp.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED} ../picamp-rotary.X/dist/default/debug/picamp-rotary.X.a ../picamp-potentiometer.X/dist/default/debug/picamp-potentiometer.X.a - @${RM} ${DISTDIR}/picamp.X.${IMAGE_TYPE}.hex - - -else -${DISTDIR}/picamp.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk ../picamp-rotary.X/dist/default/production/picamp-rotary.X.a ../picamp-potentiometer.X/dist/default/production/picamp-potentiometer.X.a - @${MKDIR} ${DISTDIR} - ${MP_CC} $(MP_EXTRA_LD_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -Wl,-Map=${DISTDIR}/picamp.X.${IMAGE_TYPE}.map -DXPRJ_default=$(CND_CONF) -Wl,--defsym=__MPLAB_BUILD=1 -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits -std=c99 -gdwarf-3 -mstack=compiled:auto:auto $(COMPARISON_BUILD) -Wl,--memorysummary,${DISTDIR}/memoryfile.xml -o ${DISTDIR}/picamp.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED} ../picamp-rotary.X/dist/default/production/picamp-rotary.X.a ../picamp-potentiometer.X/dist/default/production/picamp-potentiometer.X.a - - -endif - - -# Subprojects -.build-subprojects: - cd ../picamp-rotary.X && ${MAKE} -f Makefile CONF=default - cd ../picamp-potentiometer.X && ${MAKE} -f Makefile CONF=default - - -# Subprojects -.clean-subprojects: - cd ../picamp-rotary.X && rm -rf "build/default" "dist/default" - cd ../picamp-potentiometer.X && rm -rf "build/default" "dist/default" - -# Clean Targets -.clean-conf: ${CLEAN_SUBPROJECTS} - ${RM} -r ${OBJECTDIR} - ${RM} -r ${DISTDIR} - -# Enable dependency checking -.dep.inc: .depcheck-impl - -DEPFILES=$(wildcard ${POSSIBLE_DEPFILES}) -ifneq (${DEPFILES},) -include ${DEPFILES} -endif diff --git a/picamp.X/scripts/Build-Samples.cmd b/picamp.X/scripts/Build-Samples.cmd deleted file mode 100644 index f5c6e74..0000000 --- a/picamp.X/scripts/Build-Samples.cmd +++ /dev/null @@ -1,4 +0,0 @@ - -mkdir output - -%XC_DIR%\xc8.exe --chip=%1 --outdir=".\output" ".\samples\LedBlink.c" \ No newline at end of file diff --git a/picamp.X/scripts/Build.cmd b/picamp.X/scripts/Build.cmd deleted file mode 100644 index eaea6c3..0000000 --- a/picamp.X/scripts/Build.cmd +++ /dev/null @@ -1,4 +0,0 @@ - -mkdir output - -%XC_DIR%\xc8.exe --chip=%1 --outdir=".\output" ".\main.c" \ No newline at end of file diff --git a/picamp.X/scripts/clean.cmd b/picamp.X/scripts/clean.cmd deleted file mode 100644 index 4eca8d9..0000000 --- a/picamp.X/scripts/clean.cmd +++ /dev/null @@ -1,2 +0,0 @@ - -DEL /F /Q output \ No newline at end of file diff --git a/picamp.X/src/HCMS2913.c b/picamp.X/src/HCMS2913.c deleted file mode 100644 index 9b409bf..0000000 --- a/picamp.X/src/HCMS2913.c +++ /dev/null @@ -1,152 +0,0 @@ -#include "../include/HCMS2913.h" -#include "../include/ascii.h" -#include "../include/config.h" - -void HCMS_spi_init(sspmode mst_slv_oscdiv, rxsmpmoment sdi_rx_smp, clkpol clock_pol, txclkedge sdo_tx_edge) { - //Todo Burhan: remove this dirty fix - TRISC = 0; - TRISD = 0; - PORTC = 0; - PORTD = 0; - // 1. Set `SSPM' datafield (SPI master / slave mode and prescaler - // selection) - SSPM = mst_slv_oscdiv; - // 2. Set SDO_DDIR for SDO to behave as an output - SDO_DDIR = 0; - SDI_DDIR = 0; - // 3. If a slave mode was selected: - // 3a. The SMP bit MUST remain clear (see datasheet) - // 3b. Set SCK_DDIR for SCK to behave like an input - // 3c. The data line `idle state' (CKP bit) must match the - // master's clock idle state. To achieve this, set the - // CKP bit to whatever value can be read on the SCK_PIN. - // 3d. Set up the recieve interrupt (PIE1.SSPIE). Don't - // forget PEIE and GIE (interrupt masking hierarchy). - if (mst_slv_oscdiv > 3) { - SMP = 0; - SCK_DDIR = 1; - CKP = SCK_PIN; - }// 4. Else (if a master mode was selected): - // 4a. The SMP bit needs to be set according to argument - // `sdi_rx_smp' - // 4b. Set SCK_DDIR for SCK to behave like an output - // 4c. The data line `idle state' (CKP bit) needs to be set - // according to argument `clock_pol' - else { - SMP = sdi_rx_smp; - SCK_DDIR = 0; - CKP = clock_pol; - } - //SSPIE = 1; - // 5. Set the CKE bit according to the `sdo_tx_edge' and `clock_pol' - // parameters (i.e. if `sdo_tx_edge' and `clock_pol' select - // mode 0 (CKE 1, CKP 0), then the CKE bit must be set, etc. - - // (handle all SPI modes ... !) - CKE = sdo_tx_edge; - if (clock_pol == 1 || SCK_PIN == 1) { - CKE ^= 1; - } - // 6. Enable the SPI module (by setting SSPEN bit). - SSPEN = 1; -} - -void delayNanoSeconds(unsigned long nanoSeconds); - -#define BUFFER SSPBUF - -void spi_transmit(char c) { - // FILL. THAT. BUFFER. - BUFFER = c; -} - -void setpin(volatile unsigned char *port, unsigned char pin, int value) { - if (value == 0) - *port &= ~(1 << pin); - else - *port |= 1 << pin; -} - -void HCMS_init(volatile unsigned char *port, uint8_t _RESET, uint8_t _CENABLE, uint8_t _RSELECT) { - setpin(port, _RESET, 0); - delayNanoSeconds(200); - setpin(port, _RESET, 1); - - setpin(port, _RSELECT, 0); - setpin(port, _CENABLE, 0); - for (int i = 0; i < 40; i++) { - spi_transmit(0b00000000); - delayNanoSeconds(200); - } - setpin(port, _CENABLE, 1); - - setpin(port, _RSELECT, 1); - setpin(port, _CENABLE, 0); - spi_transmit(0b01111111); - delayNanoSeconds(200); - setpin(port, _CENABLE, 1); - setpin(port, _CENABLE, 0); - spi_transmit(0b10000000); - delayNanoSeconds(200); - setpin(port, _CENABLE, 1); - - setpin(port, _CENABLE, 0); - spi_transmit(0b01111111); - delayNanoSeconds(200); - setpin(port, _CENABLE, 1); - setpin(port, _CENABLE, 0); - spi_transmit(0b10000000); - delayNanoSeconds(200); - setpin(port, _CENABLE, 1); - - setpin(port, _RSELECT, 0); - -} - -void load_buffer(int character, int position, char *bufferSelected) { - for (int i = 0; i < 5; i++) { - bufferSelected[position * 5 + i] = ascii[character][i]; - } -} - -int TableLookup(char lookup) { - for (int i = 0; i < 128; ++i) { - if (ascii[i][5] == lookup) { - return i; - } - } - return 127; // Character not found in the ASCII table -} - -void HCMS_load_word(const char *_string, char *bufferSelected, volatile unsigned char *port, uint8_t _CENABLE) { - short length = 0; - setpin(port, _CENABLE, 0); - - while (_string[length] != '\0' && length < 8) { - load_buffer(TableLookup(_string[length]), length, bufferSelected); - length++; - } - - while (length < 8) { - load_buffer(TableLookup(' '), length, bufferSelected); - length++; - } - - for (int i = 0; i < 40; i++) { - spi_transmit(bufferSelected[i]); - } - - delayNanoSeconds(200); - setpin(port, _CENABLE, 1); -} - -void delayNanoSeconds(unsigned long nanoSeconds) { - const unsigned long cyclesPerNanoSecond = 10; - - unsigned long cyclesToDelay = nanoSeconds * cyclesPerNanoSecond; - - TMR1 = 0; - - while (cyclesToDelay > 0) { - cyclesToDelay--; - } -} diff --git a/picamp.X/src/initialisation.c b/picamp.X/src/initialisation.c deleted file mode 100644 index 19846e1..0000000 --- a/picamp.X/src/initialisation.c +++ /dev/null @@ -1,134 +0,0 @@ -// PIC hardware mapping, global config -#include "../include/config.h" - -// Configuration bit structs and enums -#include "../include/initialisation.h" - -// #[initialisation:gpio] -/** @brief Initialize GPIO pins on the PIC - * - * This function simplifies the configuration of GPIO pins on the - * MicroChip PIC Microcontroller. - * The code has been tested on the following microcontrollers: - * > PIC16F887A - * - * @param config `PinConfig` struct containing the configuration for the pins - * - * @return void - */ -//todo (wessel): Find a fix for `bitfield` addressess -void init_gpio(PinConfig config[], int size) { - // Calculate the size of `config` - // uint8_t size = sizeof(config) / sizeof(config[0]); - - // Loop through each pin, set their values - for (int i = 0; i < size; i++) { - // Set port direction and analog/digital select registers - *config[i].tris = config[i].direction; - *config[i].ansel = config[i].mode; - - if (config[i].direction == OUTPUT) { - // Initialize output pins to low - *config[i].lat = OFF; - } - } -} - -/** @brief Initialize the oscillator on the PIC - * - * This function simplifies the configuration of the oscillator on the - * MicroChip PIC Microcontroller. - * The code has been tested on the following microcontrollers: - * > PIC16F887A - * - * @param config `OscillatorConfig` struct containing the configuration for the oscillator - * - * @return void -*/ -void init_osc(OscillatorConfig config) { - // System Clock Select (SCS) - OSCCONbits.SCS = config.SCS; - // Internal Resistor-Capacitor Frequency select (IRCF) - OSCCONbits.IRCF = config.IRCF; - // OSC startup time - OSCCONbits.OSTS = config.OSTS; - - // Halt boot until clock is stable - if (OSCCONbits.IRCF == KHZ032) { - while (OSCCONbits.LTS != LTS_STABLE); - } else { - while (OSCCONbits.HTS != HTS_STABLE); - } -} - -/** @brief Initialize interrupts on the PIC - * - * This function simplifies the configuration of interrupts on the - * MicroChip PIC Microcontroller. - * The code has been tested on the following microcontrollers: - * > PIC16F887A - * - * @param config `InterruptConfig` struct containing the configuration for the interrupts - * - * @return void - */ -void init_int(InterruptConfig config) { - // Global interrupt enable - INTCONbits.GIE = config.GIE; - // External interrupt enable - INTCONbits.INTE = config.EINT; - // Peripheral interrupt enable - // todo(wessel): Add PIR1, PIR2 registers - INTCONbits.PEIE = config.PEIE; - // Timer0 Overflow Interrupt enable - INTCONbits.T0IE = config.T0IE; - - // PORTB Change Interrupt Enable - INTCONbits.RBIE = config.RBIE; - - // todo(wessel): make modulair - IOCBbits.IOCB4 = 1; - IOCBbits.IOCB5 = 1; - - // Set interrupt edge - OPTION_REGbits.INTEDG = config.INTEDG; - - // Clear interrupt flag - if (INTCONbits.INTE == EINT_ENABLED) { - INTCONbits.INTF = INT_AWAITING; - } - if (INTCONbits.RBIE == RBINT_ENABLED) { - INTCONbits.RBIF = INT_AWAITING; - } - if (INTCONbits.T0IE == T0INT_ENABLED) { - INTCONbits.T0IF = INT_AWAITING; - } -} - -/** @brief Initialize the ADC on the PIC - * - * This function simplifies the configuration of the analog to - * digital function on the MicroChip PIC Microcontroller. - * The code has been tested on the following microcontrollers: - * > PIC16F887A - * - * @param config `ADCConfig` struct containing the configuration for the ADC - * - * @return void -*/ -// void init_adc(ADCConfig config) { -// // ADC enable -// ADCON0bits.ADON = config.ADON; -// // ADC cycle enable -// ADCON0bits.GO_nDONE = config.GO_nDONE; -// // Analog channel select -// ADCON0bits.CHS = config.CHS; -// // ADC clock select -// ADCON0bits.ADCS = config.ADCS; - -// // ADC result alignment -// ADCON1bits.ADFM = config.ADFM; -// // ADC voltage reference configuration -// ADCON1bits.VCFG1 = config.VCFG1; -// ADCON1bits.VCFG0 = config.VCFG0; -// } \ No newline at end of file diff --git a/picamp.X/src/main.c b/picamp.X/src/main.c deleted file mode 100644 index 22f1295..0000000 --- a/picamp.X/src/main.c +++ /dev/null @@ -1,101 +0,0 @@ -/* main.c */ -// Include all global config variables -#include "../include/config.h" - -// Include library header files -#include "../include/initialisation.h" -#include "../include/rotary_encoder.h" -#include "../include/potentiometer.h" -#include "../include/HCMS2913.h" - -// Rotary encoder position -char count = 0; - -// Function declarations -void pic_init(void); -void pic_loop(void); - -void main(void) { - // Do all initialisation here - pic_init(); - // Start indefinite program loop - pic_loop(); -} - -void pic_loop(void) { - int stepArray[LED_AMOUNT] = {0}; - populate_step_array(stepArray, LED_AMOUNT, POT_LIMIT); - short calcVolume; - - while (1) { - HCMS_load_word(selLoadString, selectBuffer, &PORTD, CENABLE_PINNUM); - HCMS_load_word(volLoadString, volumeBuffer, &PORTC, CENABLE_PINNUM); - // if (count == 0) { - // Parse result from potentiometer - int result = read_pot(); - - // Loop through all `stepArray`, check if the output of the potmeter - // (on `ADRES`) falls inbetween the steps - `DEADZONE`, if so execute - // An OR/AND bitshift operation in order to turn on the corresponding - // LED on `PORTA`. - // for (int i = 0; i < LED_AMOUNT; i++) { - // if (result > (stepArray[i] - DEADZONE)) { - // PORTA = (unsigned char) (PORTA & ~(1 << i)); - // } else if (result <= (stepArray[i] - DEADZONE)) { - // PORTA = (unsigned char) (PORTA | (1 << i)); - // } - // } - // } - calcVolume = result / POT_STEP_AMOUNT; - - if (calcVolume > 100) { - calcVolume = 100; - } - if (calcVolume < 0) { - calcVolume = 0; - } - - selLoadString[6] = '0' + count / 10; - selLoadString[7] = '0' + (count % 10); - - volLoadString[5] = '0' + (char) (calcVolume / 100); - volLoadString[6] = '0' + (char) (calcVolume / 10 > 9 ? 0 : calcVolume / 10); - volLoadString[7] = '0' + (char) (calcVolume % 10); - } -} - -void pic_init(void) { - OscillatorConfig osc_config = {INTERNAL_CLK, MHZ008, INTERNAL_FOSC}; - init_osc(osc_config); - - PinConfig pin_config[] = { - { &TRISA, &PORTA, &ANSEL, OUTPUT, DIGITAL} - }; - init_gpio(pin_config, 1); - - // Moved to rotary_encoder.c - // InterruptConfig int_config = { GIE_ENABLED, EINT_ENABLED, PEIE_ENABLED, - // T0INT_ENABLED, RBINT_ENABLED, FALLING_EDGE }; - // init_int(int_config); - - init_rotary(IOCRB4, IOCRB5, TRISBbits.TRISB4, TRISBbits.TRISB5); - init_pot(ADC_AN07, TRISEbits.TRISE2); - HCMS_spi_init(MST_OSC_DIV_04, SMP1_SDI_END, CKP0_CPOL0_IDLE_LOW, CKE1_CPHA0_TRSMIT_ACT2IDL); - HCMS_init(&PORTC, RESET_PINNUM, CENABLE_PINNUM, RSELECT_PINNUM); - HCMS_init(&PORTD, RESET_PINNUM, CENABLE_PINNUM, RSELECT_PINNUM); -} - -// #[routine:interrupt_service] - -void __interrupt() isr(void) { - if (INTCONbits.RBIF == INT_OCCURED) { - // Parse rotary changes into `count`, shift it into `PORTA` - parse_rotary(REA, REB, &count, LED_AMOUNT, 0); - - //PORTA = (unsigned char) (~(1 << count)); - - // Clear the Port B change interrupt flag - INTCONbits.RBIF = INT_AWAITING; - INTCONbits.INTF = INT_AWAITING; - } -} diff --git a/src/1829demonstration.X/.gitignore b/src/1829demonstration.X/.gitignore new file mode 100644 index 0000000..39fe081 --- /dev/null +++ b/src/1829demonstration.X/.gitignore @@ -0,0 +1,6 @@ +!.gitkeep + +build/* +debug/* +dist/* +queuelogs/* diff --git a/picamp-potentiometer.X/Makefile b/src/1829demonstration.X/Makefile similarity index 100% rename from picamp-potentiometer.X/Makefile rename to src/1829demonstration.X/Makefile diff --git a/src/1829demonstration.X/config.h b/src/1829demonstration.X/config.h new file mode 100644 index 0000000..bfe8b38 --- /dev/null +++ b/src/1829demonstration.X/config.h @@ -0,0 +1,27 @@ +#ifndef CONFIG_H +#define CONFIG_H + +// CONFIG WORD 1 @ flash program memory location 0x8007 +// For acceptable values use both datasheet and this file: +// /opt/microchip/xc8/v/docs/pic_chipinfo.html +#pragma config FOSC = INTOSC +#pragma config WDTE = OFF +#pragma config PWRTE = OFF +#pragma config MCLRE = OFF +#pragma config CP = OFF +#pragma config CPD = OFF +#pragma config BOREN = ON +#pragma config CLKOUTEN = OFF +#pragma config IESO = OFF +#pragma config FCMEN = OFF +#pragma config WRT = OFF +#pragma config PLLEN = OFF +#pragma config STVREN = OFF +#pragma config BORV = LO +#pragma config LVP = OFF + +#define LED_AMOUNT 4 +#define POT_LIMIT 1023 +#define DEADZONE 20 + +#endif \ No newline at end of file diff --git a/src/1829demonstration.X/main.c b/src/1829demonstration.X/main.c new file mode 100644 index 0000000..ae363c9 --- /dev/null +++ b/src/1829demonstration.X/main.c @@ -0,0 +1,76 @@ +#include "config.h" + +#include +#include "../global/picamp-potentiometer.h" +#include "../global/picamp-rotary.h" + +// Function declarations +void pic_init(void); +void init_osc(void); +void init_gpio(void); +void pic_loop(void); + +int count = 0; + +void main(void) { + // Do all initialisation here + pic_init(); + // Start the main program loop + pic_loop(); +} + +void pic_loop(void) { + // Initalize and populate the `PotSteps` array, divides `POT_LIMIT` + // into increments based on `LED_AMOUNT`. `PotSteps[0]` is different + // than the rest, therefore it is defined first. + int PotSteps[LED_AMOUNT]; + populate_step_array(PotSteps, LED_AMOUNT, POT_LIMIT); + + while (1) { + // Do not display the LEDs if input selector is > 0 + if (count != 0) continue; + + int result = read_potentiometer(); + // Loop through all `PotSteps`, check if the output of the potmeter + // (on `ADRES`) falls inbetween the steps - `DEADZONE`, if so execute + // An OR/AND bitshift operation in order to turn on the corresponding + // LED on `LATC`. + for (int i = 0; i < LED_AMOUNT; i++) { + if (result > (PotSteps[i] - DEADZONE)) { + LATC = (unsigned char)(LATC & ~(1 << i)); + } else if (result <= (PotSteps[i] - DEADZONE)) { + LATC = (unsigned char)(LATC | (1 << i)); + } + } + } +} + +void pic_init(void) { + init_osc(); + init_gpio(); + init_pot(PIC16F1829, P1829_AN03); + init_rot(PIC16F1829); +} + +void init_gpio(void) { + // LED => output + TRISC = 0; + LATC = 0; +} + +void init_osc(void) { + // System Clock Select (SCS) + OSCCONbits.SCS = 0b00; // Clk determined by FOSC in Conf-1 + // Internal Resistor-Capacitor Frequency select (IRCF) + OSCCONbits.IRCF = 0b0111; // 500 kHz clock speed + // Software Phase-Locked Loop ENable (SPLLEN) + OSCCONbits.SPLLEN = 0b0; // 4 x Phase-Locked Loop disabled +} + +void __interrupt() isr() { + if (INTCONbits.IOCIF) { + count = read_rotary(); + PORTC = (unsigned char)(~(1 << count)); + INTCONbits.IOCIF = 0; + } +} \ No newline at end of file diff --git a/src/1829demonstration.X/nbproject/Makefile-default.mk b/src/1829demonstration.X/nbproject/Makefile-default.mk new file mode 100644 index 0000000..128344e --- /dev/null +++ b/src/1829demonstration.X/nbproject/Makefile-default.mk @@ -0,0 +1,160 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a -pre and a -post target defined where you can add customized code. +# +# This makefile implements configuration specific macros and targets. + + +# Include project Makefile +ifeq "${IGNORE_LOCAL}" "TRUE" +# do not include local makefile. User is passing all local related variables already +else +include Makefile +# Include makefile containing local settings +ifeq "$(wildcard nbproject/Makefile-local-default.mk)" "nbproject/Makefile-local-default.mk" +include nbproject/Makefile-local-default.mk +endif +endif + +# Environment +MKDIR=gnumkdir -p +RM=rm -f +MV=mv +CP=cp + +# Macros +CND_CONF=default +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +IMAGE_TYPE=debug +OUTPUT_SUFFIX=elf +DEBUGGABLE_SUFFIX=elf +FINAL_IMAGE=${DISTDIR}/1829demonstration.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +else +IMAGE_TYPE=production +OUTPUT_SUFFIX=hex +DEBUGGABLE_SUFFIX=elf +FINAL_IMAGE=${DISTDIR}/1829demonstration.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +endif + +ifeq ($(COMPARE_BUILD), true) +COMPARISON_BUILD=-mafrlcsj +else +COMPARISON_BUILD= +endif + +# Object Directory +OBJECTDIR=build/${CND_CONF}/${IMAGE_TYPE} + +# Distribution Directory +DISTDIR=dist/${CND_CONF}/${IMAGE_TYPE} + +# Source Files Quoted if spaced +SOURCEFILES_QUOTED_IF_SPACED=main.c + +# Object Files Quoted if spaced +OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/main.p1 +POSSIBLE_DEPFILES=${OBJECTDIR}/main.p1.d + +# Object Files +OBJECTFILES=${OBJECTDIR}/main.p1 + +# Source Files +SOURCEFILES=main.c + + + +CFLAGS= +ASFLAGS= +LDLIBSOPTIONS= + +############# Tool locations ########################################## +# If you copy a project from one host to another, the path where the # +# compiler is installed may be different. # +# If you open this project with MPLAB X in the new host, this # +# makefile will be regenerated and the paths will be corrected. # +####################################################################### +# fixDeps replaces a bunch of sed/cat/printf statements that slow down the build +FIXDEPS=fixDeps + +.build-conf: ${BUILD_SUBPROJECTS} +ifneq ($(INFORMATION_MESSAGE), ) + @echo $(INFORMATION_MESSAGE) +endif + ${MAKE} -f nbproject/Makefile-default.mk ${DISTDIR}/1829demonstration.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} + +MP_PROCESSOR_OPTION=16F1829 +# ------------------------------------------------------------------------------------ +# Rules for buildStep: compile +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +${OBJECTDIR}/main.p1: main.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/main.p1.d + @${RM} ${OBJECTDIR}/main.p1 + ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -mdebugger=pickit5 -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/main.p1 main.c + @-${MV} ${OBJECTDIR}/main.d ${OBJECTDIR}/main.p1.d + @${FIXDEPS} ${OBJECTDIR}/main.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ + +else +${OBJECTDIR}/main.p1: main.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/main.p1.d + @${RM} ${OBJECTDIR}/main.p1 + ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/main.p1 main.c + @-${MV} ${OBJECTDIR}/main.d ${OBJECTDIR}/main.p1.d + @${FIXDEPS} ${OBJECTDIR}/main.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ + +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: assemble +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: assembleWithPreprocess +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: link +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +${DISTDIR}/1829demonstration.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk ../new-potlib.X/dist/default/debug/new-potlib.X.a ../new-rotlib.X/dist/default/debug/new-rotlib.X.a + @${MKDIR} ${DISTDIR} + ${MP_CC} $(MP_EXTRA_LD_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -Wl,-Map=${DISTDIR}/1829demonstration.X.${IMAGE_TYPE}.map -D__DEBUG=1 -mdebugger=pickit5 -DXPRJ_default=$(CND_CONF) -Wl,--defsym=__MPLAB_BUILD=1 -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits -std=c99 -gdwarf-3 -mstack=compiled:auto:auto $(COMPARISON_BUILD) -Wl,--memorysummary,${DISTDIR}/memoryfile.xml -o ${DISTDIR}/1829demonstration.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED} ..\new-potlib.X\dist\default\debug\new-potlib.X.a ..\new-rotlib.X\dist\default\debug\new-rotlib.X.a + @${RM} ${DISTDIR}/1829demonstration.X.${IMAGE_TYPE}.hex + +else +${DISTDIR}/1829demonstration.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk ../new-potlib.X/dist/default/production/new-potlib.X.a ../new-rotlib.X/dist/default/production/new-rotlib.X.a + @${MKDIR} ${DISTDIR} + ${MP_CC} $(MP_EXTRA_LD_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -Wl,-Map=${DISTDIR}/1829demonstration.X.${IMAGE_TYPE}.map -DXPRJ_default=$(CND_CONF) -Wl,--defsym=__MPLAB_BUILD=1 -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits -std=c99 -gdwarf-3 -mstack=compiled:auto:auto $(COMPARISON_BUILD) -Wl,--memorysummary,${DISTDIR}/memoryfile.xml -o ${DISTDIR}/1829demonstration.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED} ..\new-potlib.X\dist\default\production\new-potlib.X.a ..\new-rotlib.X\dist\default\production\new-rotlib.X.a + +endif + + +# Subprojects +.build-subprojects: + cd ../new-potlib.X && ${MAKE} -f Makefile CONF=default + cd ../new-rotlib.X && ${MAKE} -f Makefile CONF=default + + +# Subprojects +.clean-subprojects: + cd ../new-potlib.X && rm -rf "build/default" "dist/default" + cd ../new-rotlib.X && rm -rf "build/default" "dist/default" + +# Clean Targets +.clean-conf: ${CLEAN_SUBPROJECTS} + ${RM} -r ${OBJECTDIR} + ${RM} -r ${DISTDIR} + +# Enable dependency checking +.dep.inc: .depcheck-impl + +DEPFILES=$(wildcard ${POSSIBLE_DEPFILES}) +ifneq (${DEPFILES},) +include ${DEPFILES} +endif diff --git a/src/1829demonstration.X/nbproject/Makefile-genesis.properties b/src/1829demonstration.X/nbproject/Makefile-genesis.properties new file mode 100644 index 0000000..3fc5d74 --- /dev/null +++ b/src/1829demonstration.X/nbproject/Makefile-genesis.properties @@ -0,0 +1,13 @@ +# +#Tue Mar 26 21:33:58 CET 2024 +default.languagetoolchain.version=2.45 +default.Pack.dfplocation=C\:\\Program Files\\Microchip\\MPLABX\\v6.15\\packs\\Microchip\\PIC12-16F1xxx_DFP\\1.6.241 +default.com-microchip-mplab-mdbcore-PK5Tool-PK5ToolImpl.md5=723771b957e0f1e0ec1761a42d8bb5e8 +conf.ids=default +default.languagetoolchain.dir=C\:\\Program Files\\Microchip\\xc8\\v2.45\\bin +host.id=2cdp-lqgb-i2 +configurations-xml=e5612ad2ba7e2c8d55fb15abc05950be +com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=e62346c0c0ecee2637e613b49cb7b7fa +default.com-microchip-mplab-nbide-toolchain-xc8-XC8LanguageToolchain.md5=486b02ed36e5bdffb1f797e38fa058e5 +proj.dir=C\:\\Users\\wesse\\OneDrive - Hogeschool Inholland\\herkansing es\\1829demonstration.X +host.platform=windows diff --git a/src/1829demonstration.X/nbproject/Makefile-impl.mk b/src/1829demonstration.X/nbproject/Makefile-impl.mk new file mode 100644 index 0000000..0daa866 --- /dev/null +++ b/src/1829demonstration.X/nbproject/Makefile-impl.mk @@ -0,0 +1,69 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a pre- and a post- target defined where you can add customization code. +# +# This makefile implements macros and targets common to all configurations. +# +# NOCDDL + + +# Building and Cleaning subprojects are done by default, but can be controlled with the SUB +# macro. If SUB=no, subprojects will not be built or cleaned. The following macro +# statements set BUILD_SUB-CONF and CLEAN_SUB-CONF to .build-reqprojects-conf +# and .clean-reqprojects-conf unless SUB has the value 'no' +SUB_no=NO +SUBPROJECTS=${SUB_${SUB}} +BUILD_SUBPROJECTS_=.build-subprojects +BUILD_SUBPROJECTS_NO= +BUILD_SUBPROJECTS=${BUILD_SUBPROJECTS_${SUBPROJECTS}} +CLEAN_SUBPROJECTS_=.clean-subprojects +CLEAN_SUBPROJECTS_NO= +CLEAN_SUBPROJECTS=${CLEAN_SUBPROJECTS_${SUBPROJECTS}} + + +# Project Name +PROJECTNAME=1829demonstration.X + +# Active Configuration +DEFAULTCONF=default +CONF=${DEFAULTCONF} + +# All Configurations +ALLCONFS=default + + +# build +.build-impl: .build-pre + ${MAKE} -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .build-conf + + +# clean +.clean-impl: .clean-pre + ${MAKE} -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .clean-conf + +# clobber +.clobber-impl: .clobber-pre .depcheck-impl + ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=default clean + + + +# all +.all-impl: .all-pre .depcheck-impl + ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=default build + + + +# dependency checking support +.depcheck-impl: +# @echo "# This code depends on make tool being used" >.dep.inc +# @if [ -n "${MAKE_VERSION}" ]; then \ +# echo "DEPFILES=\$$(wildcard \$$(addsuffix .d, \$${OBJECTFILES}))" >>.dep.inc; \ +# echo "ifneq (\$${DEPFILES},)" >>.dep.inc; \ +# echo "include \$${DEPFILES}" >>.dep.inc; \ +# echo "endif" >>.dep.inc; \ +# else \ +# echo ".KEEP_STATE:" >>.dep.inc; \ +# echo ".KEEP_STATE_FILE:.make.state.\$${CONF}" >>.dep.inc; \ +# fi diff --git a/src/1829demonstration.X/nbproject/Makefile-local-default.mk b/src/1829demonstration.X/nbproject/Makefile-local-default.mk new file mode 100644 index 0000000..db161d6 --- /dev/null +++ b/src/1829demonstration.X/nbproject/Makefile-local-default.mk @@ -0,0 +1,37 @@ +# +# Generated Makefile - do not edit! +# +# +# This file contains information about the location of compilers and other tools. +# If you commmit this file into your revision control server, you will be able to +# to checkout the project and build it from the command line with make. However, +# if more than one person works on the same project, then this file might show +# conflicts since different users are bound to have compilers in different places. +# In that case you might choose to not commit this file and let MPLAB X recreate this file +# for each user. The disadvantage of not commiting this file is that you must run MPLAB X at +# least once so the file gets created and the project can be built. Finally, you can also +# avoid using this file at all if you are only building from the command line with make. +# You can invoke make with the values of the macros: +# $ makeMP_CC="/opt/microchip/mplabc30/v3.30c/bin/pic30-gcc" ... +# +SHELL=cmd.exe +PATH_TO_IDE_BIN=C:/Program Files/Microchip/MPLABX/v6.15/mplab_platform/platform/../mplab_ide/modules/../../bin/ +# Adding MPLAB X bin directory to path. +PATH:=C:/Program Files/Microchip/MPLABX/v6.15/mplab_platform/platform/../mplab_ide/modules/../../bin/:$(PATH) +# Path to java used to run MPLAB X when this makefile was created +MP_JAVA_PATH="C:\Program Files\Microchip\MPLABX\v6.15\sys\java\zulu8.64.0.19-ca-fx-jre8.0.345-win_x64/bin/" +OS_CURRENT="$(shell uname -s)" +MP_CC="C:\Program Files\Microchip\xc8\v2.45\bin\xc8-cc.exe" +# MP_CPPC is not defined +# MP_BC is not defined +MP_AS="C:\Program Files\Microchip\xc8\v2.45\bin\xc8-cc.exe" +MP_LD="C:\Program Files\Microchip\xc8\v2.45\bin\xc8-cc.exe" +MP_AR="C:\Program Files\Microchip\xc8\v2.45\bin\xc8-ar.exe" +DEP_GEN=${MP_JAVA_PATH}java -jar "C:/Program Files/Microchip/MPLABX/v6.15/mplab_platform/platform/../mplab_ide/modules/../../bin/extractobjectdependencies.jar" +MP_CC_DIR="C:\Program Files\Microchip\xc8\v2.45\bin" +# MP_CPPC_DIR is not defined +# MP_BC_DIR is not defined +MP_AS_DIR="C:\Program Files\Microchip\xc8\v2.45\bin" +MP_LD_DIR="C:\Program Files\Microchip\xc8\v2.45\bin" +MP_AR_DIR="C:\Program Files\Microchip\xc8\v2.45\bin" +DFP_DIR=C:/Program Files/Microchip/MPLABX/v6.15/packs/Microchip/PIC12-16F1xxx_DFP/1.6.241 diff --git a/src/1829demonstration.X/nbproject/Makefile-variables.mk b/src/1829demonstration.X/nbproject/Makefile-variables.mk new file mode 100644 index 0000000..e0f2c11 --- /dev/null +++ b/src/1829demonstration.X/nbproject/Makefile-variables.mk @@ -0,0 +1,10 @@ +# +# Generated - do not edit! +# +# NOCDDL +# +CND_BASEDIR=`pwd` +# default configuration +CND_ARTIFACT_DIR_default=dist/default/production +CND_ARTIFACT_NAME_default=1829demonstration.X.production.hex +CND_ARTIFACT_PATH_default=dist/default/production/1829demonstration.X.production.hex diff --git a/src/1829demonstration.X/nbproject/configurations.xml b/src/1829demonstration.X/nbproject/configurations.xml new file mode 100644 index 0000000..77aa71e --- /dev/null +++ b/src/1829demonstration.X/nbproject/configurations.xml @@ -0,0 +1,336 @@ + + + + + config.h + ../global/picamp-potentiometer.h + ../global/picamp-rotary.h + + + + + main.c + + + Makefile + + + + ../../../../../Downloads/picamp-potentiometer.X + ../new-potlib.X + ../global + + Makefile + + + + localhost + PIC16F1829 + + + PK5Tool + XC8 + 2.45 + 3 + + + + + + + + + + + + + + + + + + + + + + + false + false + + + + + + + false + false + + false + + false + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/picamp.X/nbproject/private/SuppressibleMessageMemo.properties b/src/1829demonstration.X/nbproject/private/SuppressibleMessageMemo.properties similarity index 58% rename from picamp.X/nbproject/private/SuppressibleMessageMemo.properties rename to src/1829demonstration.X/nbproject/private/SuppressibleMessageMemo.properties index 355dead..487d39a 100644 --- a/picamp.X/nbproject/private/SuppressibleMessageMemo.properties +++ b/src/1829demonstration.X/nbproject/private/SuppressibleMessageMemo.properties @@ -1,3 +1,3 @@ # -#Wed Mar 06 16:15:12 CET 2024 +#Mon Mar 18 16:41:41 CET 2024 PICkit\ 4/CHECK_4_HIGH_VOLTAGE_VPP=true diff --git a/src/1829demonstration.X/nbproject/private/configurations.xml b/src/1829demonstration.X/nbproject/private/configurations.xml new file mode 100644 index 0000000..1ddea8d --- /dev/null +++ b/src/1829demonstration.X/nbproject/private/configurations.xml @@ -0,0 +1,25 @@ + + + Makefile + 0 + + + :=MPLABComm-USB-Microchip:=<vid>04D8:=<pid>9036:=<rev>0100:=<man>Microchip Technology Incorporated:=<prod>MPLAB PICkit 5:=<sn>020026702RYN005435:=<drv>x:=<xpt>b:=end + C:\Program Files\Microchip\xc8\v2.45\bin + + place holder 1 + place holder 2 + + + + + true + 0 + 0 + 0 + + + + + + diff --git a/picamp.X/nbproject/private/private.xml b/src/1829demonstration.X/nbproject/private/private.xml similarity index 73% rename from picamp.X/nbproject/private/private.xml rename to src/1829demonstration.X/nbproject/private/private.xml index 927cf0e..6807a2b 100644 --- a/picamp.X/nbproject/private/private.xml +++ b/src/1829demonstration.X/nbproject/private/private.xml @@ -2,8 +2,6 @@ - - file:/home/burhan/Desktop/PICAMP-main/picamp.X/src/main.c - + diff --git a/src/1829demonstration.X/nbproject/project.xml b/src/1829demonstration.X/nbproject/project.xml new file mode 100644 index 0000000..f96b0ea --- /dev/null +++ b/src/1829demonstration.X/nbproject/project.xml @@ -0,0 +1,30 @@ + + + com.microchip.mplab.nbide.embedded.makeproject + + + 1829demonstration + 39bc1cd3-d891-4527-a614-b6edf723a84a + 0 + ISO-8859-1 + + ../new-potlib.X + ../new-rotlib.X + + + ../../../../../Downloads/picamp-potentiometer.X + ../new-potlib.X + ../global + + + + default + 2 + + + + false + + + + diff --git a/picamp-rotary.X/Makefile b/src/887demonstration.X/Makefile similarity index 100% rename from picamp-rotary.X/Makefile rename to src/887demonstration.X/Makefile diff --git a/src/887demonstration.X/config.h b/src/887demonstration.X/config.h new file mode 100644 index 0000000..8724f32 --- /dev/null +++ b/src/887demonstration.X/config.h @@ -0,0 +1,24 @@ +#ifndef CONFIG_H +#define CONFIG_H + +// PIC16F887 Configuration Bit Settings +// #pragma config statements should precede project file includes. +#pragma config FOSC = INTRC_NOCLKOUT // Oscillator Selection bits (INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN) +#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register) +#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT disabled) +#pragma config MCLRE = OFF // RE3/MCLR pin function select bit (RE3/MCLR pin function is digital input, MCLR internally tied to VDD) +#pragma config CP = OFF // Code Protection bit (Program memory code protection is disabled) +#pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled) +#pragma config BOREN = ON // Brown Out Reset Selection bits (BOR enabled) +#pragma config IESO = OFF // Internal External Switchover bit (Internal/External Switchover mode is disabled) +#pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is disabled) +#pragma config LVP = OFF // Low Voltage Programming Enable bit (RB3 pin has digital I/O, HV on MCLR must be used for programming) +#pragma config BOR4V = BOR21V // Brown-out Reset Selection bit (Brown-out Reset set to 4.0V) +#pragma config WRT = OFF // Flash Program Memory Self Write Enable bits (Write protection off) + +#define LED_AMOUNT 4 + +#define POT_LIMIT 1023 +#define DEADZONE 2 + +#endif diff --git a/src/887demonstration.X/main.c b/src/887demonstration.X/main.c new file mode 100644 index 0000000..2af629f --- /dev/null +++ b/src/887demonstration.X/main.c @@ -0,0 +1,87 @@ +#include "./config.h" + +#include +#include "../global/picamp-potentiometer.h" +#include "../global/picamp-rotary.h" + +// Function declarations +void pic_init(void); +void init_gpio(void); +void init_osc(void); +void pic_loop(void); + +int count = 0; + +void main(void) { + // Do all initialisation here + pic_init(); + // Start indefinite program loop + pic_loop(); +} + +void pic_loop(void) { + // Initialize potentiometer step array + int stepArray[LED_AMOUNT] = { 0 }; + populate_step_array(stepArray, LED_AMOUNT, POT_LIMIT); + + while (1) { + // Do not display the LEDs if input selector is > 0 + if (count != 0) continue; + // Parse result from potentiometer + int result = read_potentiometer(); + // Read the data from the potmeter pin (`E2`) registers, and combine + // them into a single integer + // Loop through all `stepArray`, check if the output of the potmeter + // (on `ADRES`) falls inbetween the steps - `DEADZONE`, if so execute + // An OR/AND bitshift operation in order to turn on the corresponding + // LED on `PORTA`. + for (int i = 0; i < LED_AMOUNT; i++) { + if (result > (stepArray[i] - DEADZONE)) { + PORTA = (unsigned char)(PORTA & ~(1 << i)); + } else if (result <= (stepArray[i] - DEADZONE)) { + PORTA = (unsigned char)(PORTA | (1 << i)); + } + } + // int step = adc_to_step(*stepArray, LED_AMOUNT, DEADZONE); + // PORTA = (unsigned char)(PORTA | (1 << step)); + } +} + +void pic_init(void) { + init_osc(); + init_pot(PIC16F887A, P887A_AN07); + init_rot(PIC16F887A); + init_gpio(); +} + +// #[initialisation:gpio] +void init_gpio(void) { + // LED => output, digital (transistors) + TRISA = 0x00; + PORTA = 0xFF; + ANSEL = 0; +} + +// #[initialisation:osc] +void init_osc(void) { + // System Clock Select (SCS) + OSCCONbits.SCS = 0b1; // Internal Clock selected + // Internal Resistor-Capacitor Frequency select (IRCF) + OSCCONbits.IRCF = 0b011; // 500 kHz clock speed + OSCCONbits.OSTS = 0b1; // OSC startup time + + // Halt boot until clock is stable + while (OSCCONbits.HTS != 0b1); +} + +// #[routine:interrupt_service] +void __interrupt() isr(void) { + if (INTCONbits.RBIF == 1) { + // Parse rotary changes into `count`, shift it into `PORTA` + count = read_rotary(); + PORTA = (unsigned char)(~(1 << count)); + + // Clear the Port B change interrupt flag + INTCONbits.RBIF = 0; + } +} diff --git a/src/887demonstration.X/nbproject/Makefile-default.mk b/src/887demonstration.X/nbproject/Makefile-default.mk new file mode 100644 index 0000000..ace7d6d --- /dev/null +++ b/src/887demonstration.X/nbproject/Makefile-default.mk @@ -0,0 +1,160 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a -pre and a -post target defined where you can add customized code. +# +# This makefile implements configuration specific macros and targets. + + +# Include project Makefile +ifeq "${IGNORE_LOCAL}" "TRUE" +# do not include local makefile. User is passing all local related variables already +else +include Makefile +# Include makefile containing local settings +ifeq "$(wildcard nbproject/Makefile-local-default.mk)" "nbproject/Makefile-local-default.mk" +include nbproject/Makefile-local-default.mk +endif +endif + +# Environment +MKDIR=gnumkdir -p +RM=rm -f +MV=mv +CP=cp + +# Macros +CND_CONF=default +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +IMAGE_TYPE=debug +OUTPUT_SUFFIX=elf +DEBUGGABLE_SUFFIX=elf +FINAL_IMAGE=${DISTDIR}/887demonstration.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +else +IMAGE_TYPE=production +OUTPUT_SUFFIX=hex +DEBUGGABLE_SUFFIX=elf +FINAL_IMAGE=${DISTDIR}/887demonstration.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +endif + +ifeq ($(COMPARE_BUILD), true) +COMPARISON_BUILD=-mafrlcsj +else +COMPARISON_BUILD= +endif + +# Object Directory +OBJECTDIR=build/${CND_CONF}/${IMAGE_TYPE} + +# Distribution Directory +DISTDIR=dist/${CND_CONF}/${IMAGE_TYPE} + +# Source Files Quoted if spaced +SOURCEFILES_QUOTED_IF_SPACED=main.c + +# Object Files Quoted if spaced +OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/main.p1 +POSSIBLE_DEPFILES=${OBJECTDIR}/main.p1.d + +# Object Files +OBJECTFILES=${OBJECTDIR}/main.p1 + +# Source Files +SOURCEFILES=main.c + + + +CFLAGS= +ASFLAGS= +LDLIBSOPTIONS= + +############# Tool locations ########################################## +# If you copy a project from one host to another, the path where the # +# compiler is installed may be different. # +# If you open this project with MPLAB X in the new host, this # +# makefile will be regenerated and the paths will be corrected. # +####################################################################### +# fixDeps replaces a bunch of sed/cat/printf statements that slow down the build +FIXDEPS=fixDeps + +.build-conf: ${BUILD_SUBPROJECTS} +ifneq ($(INFORMATION_MESSAGE), ) + @echo $(INFORMATION_MESSAGE) +endif + ${MAKE} -f nbproject/Makefile-default.mk ${DISTDIR}/887demonstration.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} + +MP_PROCESSOR_OPTION=16F887 +# ------------------------------------------------------------------------------------ +# Rules for buildStep: compile +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +${OBJECTDIR}/main.p1: main.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/main.p1.d + @${RM} ${OBJECTDIR}/main.p1 + ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -mdebugger=pickit5 -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/main.p1 main.c + @-${MV} ${OBJECTDIR}/main.d ${OBJECTDIR}/main.p1.d + @${FIXDEPS} ${OBJECTDIR}/main.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ + +else +${OBJECTDIR}/main.p1: main.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/main.p1.d + @${RM} ${OBJECTDIR}/main.p1 + ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/main.p1 main.c + @-${MV} ${OBJECTDIR}/main.d ${OBJECTDIR}/main.p1.d + @${FIXDEPS} ${OBJECTDIR}/main.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ + +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: assemble +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: assembleWithPreprocess +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: link +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +${DISTDIR}/887demonstration.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk ../new-potlib.X/dist/default/debug/new-potlib.X.a ../new-rotlib.X/dist/default/debug/new-rotlib.X.a + @${MKDIR} ${DISTDIR} + ${MP_CC} $(MP_EXTRA_LD_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -Wl,-Map=${DISTDIR}/887demonstration.X.${IMAGE_TYPE}.map -D__DEBUG=1 -mdebugger=pickit5 -DXPRJ_default=$(CND_CONF) -Wl,--defsym=__MPLAB_BUILD=1 -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -mrom=default,-1f00-1ffe -mram=default,-0-0,-70-70,-80-80,-f0-f0,-100-100,-170-170,-180-180,-1e5-1f0 $(COMPARISON_BUILD) -Wl,--memorysummary,${DISTDIR}/memoryfile.xml -o ${DISTDIR}/887demonstration.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED} ..\new-potlib.X\dist\default\debug\new-potlib.X.a ..\new-rotlib.X\dist\default\debug\new-rotlib.X.a + @${RM} ${DISTDIR}/887demonstration.X.${IMAGE_TYPE}.hex + +else +${DISTDIR}/887demonstration.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk ../new-potlib.X/dist/default/production/new-potlib.X.a ../new-rotlib.X/dist/default/production/new-rotlib.X.a + @${MKDIR} ${DISTDIR} + ${MP_CC} $(MP_EXTRA_LD_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -Wl,-Map=${DISTDIR}/887demonstration.X.${IMAGE_TYPE}.map -DXPRJ_default=$(CND_CONF) -Wl,--defsym=__MPLAB_BUILD=1 -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits -std=c99 -gdwarf-3 -mstack=compiled:auto:auto $(COMPARISON_BUILD) -Wl,--memorysummary,${DISTDIR}/memoryfile.xml -o ${DISTDIR}/887demonstration.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED} ..\new-potlib.X\dist\default\production\new-potlib.X.a ..\new-rotlib.X\dist\default\production\new-rotlib.X.a + +endif + + +# Subprojects +.build-subprojects: + cd ../new-potlib.X && ${MAKE} -f Makefile CONF=default + cd ../new-rotlib.X && ${MAKE} -f Makefile CONF=default + + +# Subprojects +.clean-subprojects: + cd ../new-potlib.X && rm -rf "build/default" "dist/default" + cd ../new-rotlib.X && rm -rf "build/default" "dist/default" + +# Clean Targets +.clean-conf: ${CLEAN_SUBPROJECTS} + ${RM} -r ${OBJECTDIR} + ${RM} -r ${DISTDIR} + +# Enable dependency checking +.dep.inc: .depcheck-impl + +DEPFILES=$(wildcard ${POSSIBLE_DEPFILES}) +ifneq (${DEPFILES},) +include ${DEPFILES} +endif diff --git a/src/887demonstration.X/nbproject/Makefile-genesis.properties b/src/887demonstration.X/nbproject/Makefile-genesis.properties new file mode 100644 index 0000000..7e17df5 --- /dev/null +++ b/src/887demonstration.X/nbproject/Makefile-genesis.properties @@ -0,0 +1,13 @@ +# +#Wed Mar 27 13:48:00 CET 2024 +default.languagetoolchain.version=2.45 +default.Pack.dfplocation=C\:\\Program Files\\Microchip\\MPLABX\\v6.15\\packs\\Microchip\\PIC16Fxxx_DFP\\1.4.149 +default.com-microchip-mplab-mdbcore-PK5Tool-PK5ToolImpl.md5=723771b957e0f1e0ec1761a42d8bb5e8 +conf.ids=default +default.languagetoolchain.dir=C\:\\Program Files\\Microchip\\xc8\\v2.45\\bin +host.id=2cdp-lqgb-i2 +configurations-xml=18e0c414c420d68db98a32f1eb3cfb83 +com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=e62346c0c0ecee2637e613b49cb7b7fa +default.com-microchip-mplab-nbide-toolchain-xc8-XC8LanguageToolchain.md5=486b02ed36e5bdffb1f797e38fa058e5 +proj.dir=C\:\\Users\\wesse\\OneDrive - Hogeschool Inholland\\herkansing es\\887demonstration.X +host.platform=windows diff --git a/src/887demonstration.X/nbproject/Makefile-impl.mk b/src/887demonstration.X/nbproject/Makefile-impl.mk new file mode 100644 index 0000000..73fd138 --- /dev/null +++ b/src/887demonstration.X/nbproject/Makefile-impl.mk @@ -0,0 +1,69 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a pre- and a post- target defined where you can add customization code. +# +# This makefile implements macros and targets common to all configurations. +# +# NOCDDL + + +# Building and Cleaning subprojects are done by default, but can be controlled with the SUB +# macro. If SUB=no, subprojects will not be built or cleaned. The following macro +# statements set BUILD_SUB-CONF and CLEAN_SUB-CONF to .build-reqprojects-conf +# and .clean-reqprojects-conf unless SUB has the value 'no' +SUB_no=NO +SUBPROJECTS=${SUB_${SUB}} +BUILD_SUBPROJECTS_=.build-subprojects +BUILD_SUBPROJECTS_NO= +BUILD_SUBPROJECTS=${BUILD_SUBPROJECTS_${SUBPROJECTS}} +CLEAN_SUBPROJECTS_=.clean-subprojects +CLEAN_SUBPROJECTS_NO= +CLEAN_SUBPROJECTS=${CLEAN_SUBPROJECTS_${SUBPROJECTS}} + + +# Project Name +PROJECTNAME=887demonstration.X + +# Active Configuration +DEFAULTCONF=default +CONF=${DEFAULTCONF} + +# All Configurations +ALLCONFS=default + + +# build +.build-impl: .build-pre + ${MAKE} -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .build-conf + + +# clean +.clean-impl: .clean-pre + ${MAKE} -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .clean-conf + +# clobber +.clobber-impl: .clobber-pre .depcheck-impl + ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=default clean + + + +# all +.all-impl: .all-pre .depcheck-impl + ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=default build + + + +# dependency checking support +.depcheck-impl: +# @echo "# This code depends on make tool being used" >.dep.inc +# @if [ -n "${MAKE_VERSION}" ]; then \ +# echo "DEPFILES=\$$(wildcard \$$(addsuffix .d, \$${OBJECTFILES}))" >>.dep.inc; \ +# echo "ifneq (\$${DEPFILES},)" >>.dep.inc; \ +# echo "include \$${DEPFILES}" >>.dep.inc; \ +# echo "endif" >>.dep.inc; \ +# else \ +# echo ".KEEP_STATE:" >>.dep.inc; \ +# echo ".KEEP_STATE_FILE:.make.state.\$${CONF}" >>.dep.inc; \ +# fi diff --git a/src/887demonstration.X/nbproject/Makefile-local-default.mk b/src/887demonstration.X/nbproject/Makefile-local-default.mk new file mode 100644 index 0000000..2ac66a5 --- /dev/null +++ b/src/887demonstration.X/nbproject/Makefile-local-default.mk @@ -0,0 +1,37 @@ +# +# Generated Makefile - do not edit! +# +# +# This file contains information about the location of compilers and other tools. +# If you commmit this file into your revision control server, you will be able to +# to checkout the project and build it from the command line with make. However, +# if more than one person works on the same project, then this file might show +# conflicts since different users are bound to have compilers in different places. +# In that case you might choose to not commit this file and let MPLAB X recreate this file +# for each user. The disadvantage of not commiting this file is that you must run MPLAB X at +# least once so the file gets created and the project can be built. Finally, you can also +# avoid using this file at all if you are only building from the command line with make. +# You can invoke make with the values of the macros: +# $ makeMP_CC="/opt/microchip/mplabc30/v3.30c/bin/pic30-gcc" ... +# +SHELL=cmd.exe +PATH_TO_IDE_BIN=C:/Program Files/Microchip/MPLABX/v6.15/mplab_platform/platform/../mplab_ide/modules/../../bin/ +# Adding MPLAB X bin directory to path. +PATH:=C:/Program Files/Microchip/MPLABX/v6.15/mplab_platform/platform/../mplab_ide/modules/../../bin/:$(PATH) +# Path to java used to run MPLAB X when this makefile was created +MP_JAVA_PATH="C:\Program Files\Microchip\MPLABX\v6.15\sys\java\zulu8.64.0.19-ca-fx-jre8.0.345-win_x64/bin/" +OS_CURRENT="$(shell uname -s)" +MP_CC="C:\Program Files\Microchip\xc8\v2.45\bin\xc8-cc.exe" +# MP_CPPC is not defined +# MP_BC is not defined +MP_AS="C:\Program Files\Microchip\xc8\v2.45\bin\xc8-cc.exe" +MP_LD="C:\Program Files\Microchip\xc8\v2.45\bin\xc8-cc.exe" +MP_AR="C:\Program Files\Microchip\xc8\v2.45\bin\xc8-ar.exe" +DEP_GEN=${MP_JAVA_PATH}java -jar "C:/Program Files/Microchip/MPLABX/v6.15/mplab_platform/platform/../mplab_ide/modules/../../bin/extractobjectdependencies.jar" +MP_CC_DIR="C:\Program Files\Microchip\xc8\v2.45\bin" +# MP_CPPC_DIR is not defined +# MP_BC_DIR is not defined +MP_AS_DIR="C:\Program Files\Microchip\xc8\v2.45\bin" +MP_LD_DIR="C:\Program Files\Microchip\xc8\v2.45\bin" +MP_AR_DIR="C:\Program Files\Microchip\xc8\v2.45\bin" +DFP_DIR=C:/Program Files/Microchip/MPLABX/v6.15/packs/Microchip/PIC16Fxxx_DFP/1.4.149 diff --git a/src/887demonstration.X/nbproject/Makefile-variables.mk b/src/887demonstration.X/nbproject/Makefile-variables.mk new file mode 100644 index 0000000..984bf92 --- /dev/null +++ b/src/887demonstration.X/nbproject/Makefile-variables.mk @@ -0,0 +1,10 @@ +# +# Generated - do not edit! +# +# NOCDDL +# +CND_BASEDIR=`pwd` +# default configuration +CND_ARTIFACT_DIR_default=dist/default/production +CND_ARTIFACT_NAME_default=887demonstration.X.production.hex +CND_ARTIFACT_PATH_default=dist/default/production/887demonstration.X.production.hex diff --git a/src/887demonstration.X/nbproject/configurations.xml b/src/887demonstration.X/nbproject/configurations.xml new file mode 100644 index 0000000..3be7c26 --- /dev/null +++ b/src/887demonstration.X/nbproject/configurations.xml @@ -0,0 +1,336 @@ + + + + + config.h + ../global/picamp-potentiometer.h + ../global/picamp-rotary.h + + + + + main.c + + + Makefile + + + + ../new-potlib.X + . + ../global + + Makefile + + + + localhost + PIC16F887 + + + PK5Tool + XC8 + 2.45 + 3 + + + + + + + + + + + + + + + + + + + + + + + false + false + + + + + + + false + false + + false + + false + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/887demonstration.X/nbproject/private/configurations.xml b/src/887demonstration.X/nbproject/private/configurations.xml new file mode 100644 index 0000000..1ddea8d --- /dev/null +++ b/src/887demonstration.X/nbproject/private/configurations.xml @@ -0,0 +1,25 @@ + + + Makefile + 0 + + + :=MPLABComm-USB-Microchip:=<vid>04D8:=<pid>9036:=<rev>0100:=<man>Microchip Technology Incorporated:=<prod>MPLAB PICkit 5:=<sn>020026702RYN005435:=<drv>x:=<xpt>b:=end + C:\Program Files\Microchip\xc8\v2.45\bin + + place holder 1 + place holder 2 + + + + + true + 0 + 0 + 0 + + + + + + diff --git a/src/887demonstration.X/nbproject/private/private.xml b/src/887demonstration.X/nbproject/private/private.xml new file mode 100644 index 0000000..e082e3b --- /dev/null +++ b/src/887demonstration.X/nbproject/private/private.xml @@ -0,0 +1,10 @@ + + + + + + file:/C:/Users/wesse/OneDrive%20-%20Hogeschool%20Inholland/herkansing%20es/887demonstration.X/main.c + file:/C:/Users/wesse/OneDrive%20-%20Hogeschool%20Inholland/herkansing%20es/887demonstration.X/init.c + + + diff --git a/picamp.X/nbproject/project.xml b/src/887demonstration.X/nbproject/project.xml similarity index 70% rename from picamp.X/nbproject/project.xml rename to src/887demonstration.X/nbproject/project.xml index 953b35e..411a56d 100644 --- a/picamp.X/nbproject/project.xml +++ b/src/887demonstration.X/nbproject/project.xml @@ -3,16 +3,18 @@ com.microchip.mplab.nbide.embedded.makeproject - PICAMP - 6e82f017-1e11-4f32-aea4-27829d036f6c + 887demonstration + 189ceae8-574f-4402-aade-2932cf45a0a7 0 ISO-8859-1 - ../picamp-potentiometer.X - ../picamp-rotary.X + ../new-potlib.X + ../new-rotlib.X + ../new-potlib.X . + ../global diff --git a/src/887demonstration.X/queuelogs/debugtool b/src/887demonstration.X/queuelogs/debugtool new file mode 100644 index 0000000..2759a99 --- /dev/null +++ b/src/887demonstration.X/queuelogs/debugtool @@ -0,0 +1,1038 @@ +1060 1710847534790 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End + +1060 1710847534801 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1060 1710847534801 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1060 1710847534801 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1060 1710847534801 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = erase, Mask = 00000000, Erase = false, Production Mode = true +1060 1710847534801 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 0, End = 1fff, Buffer Length = 0, Type = Pgm, Mask = 00000000 +1060 1710847534801 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2007, End = 2008, Buffer Length = 0, Type = Cfg, Mask = 00000000 +1060 1710847534801 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 0, End = ff, Buffer Length = 0, Type = EEData, Mask = 00000000 +1060 1710847534801 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2000, End = 2003, Buffer Length = 0, Type = UserID, Mask = 00000000 +1060 1710847534801 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1060 1710847534801 XXXX 1710847534801, Thread 1060: XXXX 1710847534801, Entering Thread 1060: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1060 1710847534803 XXXX 1710847534803, Thread 1060: XXXX 1710847534803, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534803 XXXX 1710847534803, Thread 1060: XXXX 1710847534803, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1060 1710847534804 XXXX 1710847534804, Thread 1060: XXXX 1710847534804, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534804 XXXX 1710847534804, Thread 1060: XXXX 1710847534804, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1060 1710847534805 XXXX 1710847534805, Thread 1060: XXXX 1710847534805, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534805 XXXX 1710847534805, Thread 1060: XXXX 1710847534805, Entering Thread 1060: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1060 1710847534835 XXXX 1710847534835, Thread 1060: XXXX 1710847534835, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534835 XXXX 1710847534835, Thread 1060: XXXX 1710847534835, Entering Thread 1060: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1060 1710847534836 XXXX 1710847534836, Thread 1060: XXXX 1710847534836, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534837 XXXX 1710847534837, Thread 1060: XXXX 1710847534836, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1060 1710847534837 XXXX 1710847534837, Thread 1060: XXXX 1710847534837, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534838 XXXX 1710847534838, Thread 1060: XXXX 1710847534838, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1060 1710847534838 XXXX 1710847534838, Thread 1060: XXXX 1710847534838, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534838 XXXX 1710847534838, Thread 1060: XXXX 1710847534838, Entering Thread 1060: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1060 1710847534868 XXXX 1710847534868, Thread 1060: XXXX 1710847534868, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534868 XXXX 1710847534868, Thread 1060: XXXX 1710847534868, Entering Thread 1060: Commands::runScriptBasic, script name = EraseChip, timeOut = 30000 ms +1060 1710847534875 XXXX 1710847534875, Thread 1060: XXXX 1710847534875, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534875 XXXX 1710847534875, Thread 1060: XXXX 1710847534875, Entering Thread 1060: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1060 1710847534877 XXXX 1710847534877, Thread 1060: XXXX 1710847534877, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534877 XXXX 1710847534877, Thread 1060: XXXX 1710847534877, Entering Thread 1060: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1060 1710847534878 XXXX 1710847534878, Thread 1060: XXXX 1710847534878, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534878 XXXX 1710847534878, Thread 1060: XXXX 1710847534878, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1060 1710847534879 XXXX 1710847534879, Thread 1060: XXXX 1710847534879, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534879 XXXX 1710847534879, Thread 1060: XXXX 1710847534879, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1060 1710847534880 XXXX 1710847534880, Thread 1060: XXXX 1710847534880, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534880 XXXX 1710847534880, Thread 1060: XXXX 1710847534880, Entering Thread 1060: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1060 1710847534910 XXXX 1710847534910, Thread 1060: XXXX 1710847534910, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534910 XXXX 1710847534910, Thread 1060: XXXX 1710847534910, Entering Thread 1060: Commands::runScriptBasic, script name = EraseDataEEmem, timeOut = 30000 ms +1060 1710847534917 XXXX 1710847534917, Thread 1060: XXXX 1710847534917, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534917 XXXX 1710847534917, Thread 1060: XXXX 1710847534917, Entering Thread 1060: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1060 1710847534919 XXXX 1710847534919, Thread 1060: XXXX 1710847534919, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534919 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1060 1710847534919 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1060 1710847534919 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1060 1710847534919 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1060 1710847534919 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1060 1710847534919 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1060 1710847534919 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1060 1710847534919 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = write, Mask = 00000000, Erase = false, Production Mode = true +1060 1710847534919 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2007, End = 2008, Buffer Length = 4, Type = Cfg, Mask = 00000000 +1060 1710847534919 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1060 1710847534919 XXXX 1710847534919, Thread 1060: XXXX 1710847534919, Entering Thread 1060: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1060 1710847534921 XXXX 1710847534921, Thread 1060: XXXX 1710847534921, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534921 XXXX 1710847534921, Thread 1060: XXXX 1710847534921, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1060 1710847534922 XXXX 1710847534922, Thread 1060: XXXX 1710847534922, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534922 XXXX 1710847534922, Thread 1060: XXXX 1710847534922, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1060 1710847534922 XXXX 1710847534922, Thread 1060: XXXX 1710847534922, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534922 XXXX 1710847534922, Thread 1060: XXXX 1710847534922, Entering Thread 1060: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1060 1710847534952 XXXX 1710847534952, Thread 1060: XXXX 1710847534952, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534953 XXXX 1710847534953, Thread 1060: XXXX 1710847534953, Entering Thread 1060: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1060 1710847534953 XXXX 1710847534953, Thread 1060: XXXX 1710847534953, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534953 XXXX 1710847534953, Thread 1060: XXXX 1710847534953, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1060 1710847534954 XXXX 1710847534954, Thread 1060: XXXX 1710847534954, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534954 XXXX 1710847534954, Thread 1060: XXXX 1710847534954, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1060 1710847534955 XXXX 1710847534955, Thread 1060: XXXX 1710847534955, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534955 XXXX 1710847534955, Thread 1060: XXXX 1710847534955, Entering Thread 1060: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1060 1710847534985 XXXX 1710847534985, Thread 1060: XXXX 1710847534985, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534985 XXXX 1710847534985, Thread 1060: XXXX 1710847534985, Entering Thread 1060: Commands::runScriptWithDownload, script name = WriteConfigmem +1060 1710847534999 XXXX 1710847534999, Thread 1060: XXXX 1710847534999, Exiting Thread 1060: Commands::runScriptWithDownload(WriteConfigmem) +1060 1710847534999 XXXX 1710847534999, Thread 1060: XXXX 1710847534999, Entering Thread 1060: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1060 1710847535001 XXXX 1710847535001, Thread 1060: XXXX 1710847535001, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535001 XXXX 1710847535001, Thread 1060: XXXX 1710847535001, Entering Thread 1060: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1060 1710847535002 XXXX 1710847535002, Thread 1060: XXXX 1710847535002, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535002 XXXX 1710847535002, Thread 1060: XXXX 1710847535002, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1060 1710847535003 XXXX 1710847535003, Thread 1060: XXXX 1710847535003, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535003 XXXX 1710847535003, Thread 1060: XXXX 1710847535003, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1060 1710847535004 XXXX 1710847535004, Thread 1060: XXXX 1710847535004, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535004 XXXX 1710847535004, Thread 1060: XXXX 1710847535004, Entering Thread 1060: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1060 1710847535033 XXXX 1710847535033, Thread 1060: XXXX 1710847535033, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535033 XXXX 1710847535033, Thread 1060: XXXX 1710847535033, Entering Thread 1060: Commands::runScriptWithUpload, script name = ReadConfigmem +1060 1710847535033 XXXX 1710847535033, Thread 1060: XXXX 1710847535033, Entering Thread 1060: ToolCommUsb::readTransfer, sideData is 0x55 bytes long, transferDataLength is 0x4 bytes long +1060 1710847535036 XXXX 1710847535036, Thread 1060: XXXX 1710847535036, Exiting Thread 1060: ToolCommUsb::readTransfer, cr.status = 0x0 +1060 1710847535036 XXXX 1710847535036, Thread 1060: XXXX 1710847535036, Exiting Thread 1060: Commands::runScriptWithUpload +1060 1710847535036 XXXX 1710847535036, Thread 1060: XXXX 1710847535036, Entering Thread 1060: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1060 1710847535038 XXXX 1710847535038, Thread 1060: XXXX 1710847535038, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535038 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1060 1710847535038 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1060 1710847535038 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1060 1710847535038 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1060 1710847535040 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1060 1710847535040 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1060 1710847535040 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1060 1710847535040 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = write, Mask = 00000000, Erase = false, Production Mode = true +1060 1710847535040 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 0, End = 65f, Buffer Length = 3264, Type = Pgm, Mask = 00000000 +1060 1710847535040 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2007, End = 2008, Buffer Length = 4, Type = Cfg, Mask = 00000000 +1060 1710847535040 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1060 1710847535040 XXXX 1710847535040, Thread 1060: XXXX 1710847535040, Entering Thread 1060: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1060 1710847535041 XXXX 1710847535041, Thread 1060: XXXX 1710847535041, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535041 XXXX 1710847535041, Thread 1060: XXXX 1710847535041, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1060 1710847535042 XXXX 1710847535042, Thread 1060: XXXX 1710847535042, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535042 XXXX 1710847535042, Thread 1060: XXXX 1710847535042, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1060 1710847535043 XXXX 1710847535043, Thread 1060: XXXX 1710847535043, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535043 XXXX 1710847535043, Thread 1060: XXXX 1710847535043, Entering Thread 1060: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1060 1710847535073 XXXX 1710847535073, Thread 1060: XXXX 1710847535073, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535073 XXXX 1710847535073, Thread 1060: XXXX 1710847535073, Entering Thread 1060: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1060 1710847535075 XXXX 1710847535075, Thread 1060: XXXX 1710847535075, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535075 XXXX 1710847535075, Thread 1060: XXXX 1710847535075, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1060 1710847535076 XXXX 1710847535076, Thread 1060: XXXX 1710847535076, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535076 XXXX 1710847535076, Thread 1060: XXXX 1710847535076, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1060 1710847535076 XXXX 1710847535076, Thread 1060: XXXX 1710847535076, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535077 XXXX 1710847535077, Thread 1060: XXXX 1710847535077, Entering Thread 1060: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1060 1710847535106 XXXX 1710847535106, Thread 1060: XXXX 1710847535106, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535106 XXXX 1710847535106, Thread 1060: XXXX 1710847535106, Entering Thread 1060: Commands::runScriptWithDownload, script name = WriteProgmem +1060 1710847535795 XXXX 1710847535795, Thread 1060: XXXX 1710847535795, Exiting Thread 1060: Commands::runScriptWithDownload(WriteProgmem) +1060 1710847535795 XXXX 1710847535795, Thread 1060: XXXX 1710847535795, Entering Thread 1060: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1060 1710847535796 XXXX 1710847535796, Thread 1060: XXXX 1710847535796, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535796 XXXX 1710847535796, Thread 1060: XXXX 1710847535796, Entering Thread 1060: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1060 1710847535797 XXXX 1710847535797, Thread 1060: XXXX 1710847535797, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535797 XXXX 1710847535797, Thread 1060: XXXX 1710847535797, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1060 1710847535798 XXXX 1710847535798, Thread 1060: XXXX 1710847535798, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535798 XXXX 1710847535798, Thread 1060: XXXX 1710847535798, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1060 1710847535799 XXXX 1710847535799, Thread 1060: XXXX 1710847535799, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535799 XXXX 1710847535799, Thread 1060: XXXX 1710847535799, Entering Thread 1060: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1060 1710847535829 XXXX 1710847535829, Thread 1060: XXXX 1710847535829, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535829 XXXX 1710847535829, Thread 1060: XXXX 1710847535829, Entering Thread 1060: Commands::runScriptWithUpload, script name = ReadProgmem +1060 1710847535829 XXXX 1710847535829, Thread 1060: XXXX 1710847535829, Entering Thread 1060: ToolCommUsb::readTransfer, sideData is 0x3d bytes long, transferDataLength is 0xcc0 bytes long +1060 1710847535902 XXXX 1710847535902, Thread 1060: XXXX 1710847535902, Exiting Thread 1060: ToolCommUsb::readTransfer, cr.status = 0x0 +1060 1710847535902 XXXX 1710847535902, Thread 1060: XXXX 1710847535902, Exiting Thread 1060: Commands::runScriptWithUpload +1060 1710847535903 XXXX 1710847535903, Thread 1060: XXXX 1710847535903, Entering Thread 1060: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1060 1710847535904 XXXX 1710847535904, Thread 1060: XXXX 1710847535904, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535905 XXXX 1710847535905, Thread 1060: XXXX 1710847535905, Entering Thread 1060: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1060 1710847535905 XXXX 1710847535905, Thread 1060: XXXX 1710847535905, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535905 XXXX 1710847535905, Thread 1060: XXXX 1710847535905, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1060 1710847535906 XXXX 1710847535906, Thread 1060: XXXX 1710847535906, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535907 XXXX 1710847535907, Thread 1060: XXXX 1710847535907, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1060 1710847535907 XXXX 1710847535907, Thread 1060: XXXX 1710847535907, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535908 XXXX 1710847535908, Thread 1060: XXXX 1710847535907, Entering Thread 1060: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1060 1710847535937 XXXX 1710847535937, Thread 1060: XXXX 1710847535937, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535937 XXXX 1710847535937, Thread 1060: XXXX 1710847535937, Entering Thread 1060: Commands::runScriptWithDownload, script name = WriteConfigmem +1060 1710847535952 XXXX 1710847535952, Thread 1060: XXXX 1710847535952, Exiting Thread 1060: Commands::runScriptWithDownload(WriteConfigmem) +1060 1710847535952 XXXX 1710847535952, Thread 1060: XXXX 1710847535952, Entering Thread 1060: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1060 1710847535953 XXXX 1710847535953, Thread 1060: XXXX 1710847535953, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535954 XXXX 1710847535954, Thread 1060: XXXX 1710847535954, Entering Thread 1060: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1060 1710847535954 XXXX 1710847535954, Thread 1060: XXXX 1710847535954, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535955 XXXX 1710847535955, Thread 1060: XXXX 1710847535955, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1060 1710847535955 XXXX 1710847535955, Thread 1060: XXXX 1710847535955, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535956 XXXX 1710847535956, Thread 1060: XXXX 1710847535956, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1060 1710847535956 XXXX 1710847535956, Thread 1060: XXXX 1710847535956, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535957 XXXX 1710847535957, Thread 1060: XXXX 1710847535957, Entering Thread 1060: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1060 1710847535987 XXXX 1710847535987, Thread 1060: XXXX 1710847535987, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535987 XXXX 1710847535987, Thread 1060: XXXX 1710847535987, Entering Thread 1060: Commands::runScriptWithUpload, script name = ReadConfigmem +1060 1710847535987 XXXX 1710847535987, Thread 1060: XXXX 1710847535987, Entering Thread 1060: ToolCommUsb::readTransfer, sideData is 0x55 bytes long, transferDataLength is 0x4 bytes long +1060 1710847535990 XXXX 1710847535990, Thread 1060: XXXX 1710847535990, Exiting Thread 1060: ToolCommUsb::readTransfer, cr.status = 0x0 +1060 1710847535990 XXXX 1710847535990, Thread 1060: XXXX 1710847535990, Exiting Thread 1060: Commands::runScriptWithUpload +1060 1710847535990 XXXX 1710847535990, Thread 1060: XXXX 1710847535990, Entering Thread 1060: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1060 1710847535992 XXXX 1710847535992, Thread 1060: XXXX 1710847535992, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535992 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1060 1710847535992 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1060 1710847535992 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1060 1710847535992 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1060 1710847535992 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:endOfOperations +1060 1710847535992 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1060 1710847535992 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 null +1060 1710847535992 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1060 1710847535992 XXXX 1710847535992, Thread 1060: XXXX 1710847535992, Entering Thread 1060: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1060 1710847535993 XXXX 1710847535993, Thread 1060: XXXX 1710847535993, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535993 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:endOfOperations +1060 1710847535993 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1060 1710847535993 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1060 1710847535993 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1060 1710847535996 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1060 1710847535996 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1060 1710847535996 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1060 1710847535996 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = releasefromreset, Mask = 00000000, Erase = false, Production Mode = true +1060 1710847535996 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1060 1710847535996 XXXX 1710847535996, Thread 1060: XXXX 1710847535996, Entering Thread 1060: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1060 1710847535998 XXXX 1710847535998, Thread 1060: XXXX 1710847535998, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535998 XXXX 1710847535998, Thread 1060: XXXX 1710847535998, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0x42, ... +1060 1710847535999 XXXX 1710847535999, Thread 1060: XXXX 1710847535999, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535999 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1060 1710847535999 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1060 1710847535999 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1060 1710847535999 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1074 1710847555172 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:EstablishCommunincations +1074 1710847555172 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1074 1710847555172 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 com.microchip.mplab.mdbcore.PK5Tool.PK5Com@2e5a1960 +1074 1710847555172 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1074 1710847555172 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:EstablishCommunincations +1074 1710847555172 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1074 1710847555172 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 true +1074 1710847555172 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End + +1074 1710847555172 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:GetFirmwareInfo +1074 1710847555172 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1074 1710847555172 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 null +1074 1710847555172 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1074 1710847555180 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:GetFirmwareInfo +1074 1710847555180 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1074 1710847555180 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 FirmwareInfo: Values: +1074 1710847555180 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 FirmwareInfo: boot = false, bootVer = 00.00.10, apVer = 02.00.84, fpgaVer = ff.ff.ff, scriptVer = 00.05.85, macAddress = 0504883548174844852485054485057, devID = a1020e01, devID1 = 2, devSN0 = ffffffff, devSN1 = ffffffff, serialNumber = 020026702RYN005435, appCommitID = null, scriptCommitID = d33d758f73, PCB_ID = 2 +1074 1710847555180 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End +1074 1710847555180 XXXX 1710847555180, Thread 1074: XXXX 1710847555180, Entering Thread 1074: Commands::runScriptWithUpload with script contents. contents[0] = 0x5e, ... +1074 1710847555180 XXXX 1710847555180, Thread 1074: XXXX 1710847555180, Entering Thread 1074: ToolCommUsb::readTransfer, sideData is 0xd bytes long, transferDataLength is 0x4 bytes long +1074 1710847555183 XXXX 1710847555183, Thread 1074: XXXX 1710847555183, Exiting Thread 1074: ToolCommUsb::readTransfer, cr.status = 0x0 +1074 1710847555183 XXXX 1710847555183, Thread 1074: XXXX 1710847555183, Exiting Thread 1074: Commands::runScriptWithUpload + +1074 1710847555183 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:SetPowerInfo +1074 1710847555183 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1074 1710847555183 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 PowerInfo: Values: +1074 1710847555183 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 PowerInfo: shotDownSystem = false, isToolPower = true, voltage = 5,000000, useVppFirst = false, useLowVoltageProgramming = false, useMaintainActivePower = false +1074 1710847555183 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1074 1710847555183 XXXX 1710847555183, Thread 1074: XXXX 1710847555183, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0x39, ... +1074 1710847555184 XXXX 1710847555184, Thread 1074: XXXX 1710847555184, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555184 XXXX 1710847555184, Thread 1074: XXXX 1710847555184, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0x46, ... +1074 1710847555185 XXXX 1710847555185, Thread 1074: XXXX 1710847555185, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555185 XXXX 1710847555185, Thread 1074: XXXX 1710847555185, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0x44, ... +1074 1710847555198 XXXX 1710847555198, Thread 1074: XXXX 1710847555198, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555198 XXXX 1710847555198, Thread 1074: XXXX 1710847555198, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0x40, ... +1074 1710847555378 XXXX 1710847555378, Thread 1074: XXXX 1710847555378, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555378 XXXX 1710847555378, Thread 1074: XXXX 1710847555378, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0x47, ... +1074 1710847555383 XXXX 1710847555383, Thread 1074: XXXX 1710847555383, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555383 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:SetPowerInfo +1074 1710847555383 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1074 1710847555383 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 none +1074 1710847555383 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End + +1074 1710847555383 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:SetLEDBrightness +1074 1710847555383 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1074 1710847555383 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 5 +1074 1710847555383 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1074 1710847555383 XXXX 1710847555383, Thread 1074: XXXX 1710847555383, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xcf, ... +1074 1710847555384 XXXX 1710847555384, Thread 1074: XXXX 1710847555384, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555384 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:SetLEDBrightness +1074 1710847555384 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1074 1710847555384 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 none +1074 1710847555384 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End + +1074 1710847555384 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:SetToolInfo +1074 1710847555384 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1074 1710847555384 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 ToolInfo: Values: +1074 1710847555384 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 ToolInfo: speedLevel = 1, PGCResistance = 4700, PGDResistance = 4700, PGCPullDir = PullDown, PGDPullDir = PullDown, ICSPSelected = Wire2 +1074 1710847555384 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1074 1710847555384 XXXX 1710847555384, Thread 1074: XXXX 1710847555384, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0x27, ... +1074 1710847555385 XXXX 1710847555385, Thread 1074: XXXX 1710847555385, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555385 XXXX 1710847555385, Thread 1074: XXXX 1710847555385, Entering Thread 1074: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1074 1710847555386 XXXX 1710847555386, Thread 1074: XXXX 1710847555386, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555386 XXXX 1710847555386, Thread 1074: XXXX 1710847555386, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1074 1710847555387 XXXX 1710847555387, Thread 1074: XXXX 1710847555387, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555387 XXXX 1710847555387, Thread 1074: XXXX 1710847555387, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1074 1710847555388 XXXX 1710847555388, Thread 1074: XXXX 1710847555388, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555388 XXXX 1710847555388, Thread 1074: XXXX 1710847555388, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xd4, ... +1074 1710847555388 XXXX 1710847555388, Thread 1074: XXXX 1710847555388, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555388 XXXX 1710847555388, Thread 1074: XXXX 1710847555388, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xcd, ... +1074 1710847555389 XXXX 1710847555389, Thread 1074: XXXX 1710847555389, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555389 XXXX 1710847555389, Thread 1074: XXXX 1710847555389, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xce, ... +1074 1710847555390 XXXX 1710847555390, Thread 1074: XXXX 1710847555390, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555390 XXXX 1710847555390, Thread 1074: XXXX 1710847555390, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xcd, ... +1074 1710847555392 XXXX 1710847555392, Thread 1074: XXXX 1710847555392, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555392 XXXX 1710847555392, Thread 1074: XXXX 1710847555392, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xce, ... +1074 1710847555393 XXXX 1710847555393, Thread 1074: XXXX 1710847555393, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555393 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:SetToolInfo +1074 1710847555393 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1074 1710847555393 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 none +1074 1710847555393 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End + +1074 1710847555398 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1074 1710847555398 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1074 1710847555398 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1074 1710847555398 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = erase, Mask = 00000000, Erase = false, Production Mode = true +1074 1710847555398 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 0, End = 1fff, Buffer Length = 0, Type = Pgm, Mask = 00000000 +1074 1710847555398 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2007, End = 2008, Buffer Length = 0, Type = Cfg, Mask = 00000000 +1074 1710847555398 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 0, End = ff, Buffer Length = 0, Type = EEData, Mask = 00000000 +1074 1710847555398 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2000, End = 2003, Buffer Length = 0, Type = UserID, Mask = 00000000 +1074 1710847555398 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1074 1710847555398 XXXX 1710847555398, Thread 1074: XXXX 1710847555398, Entering Thread 1074: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1074 1710847555399 XXXX 1710847555399, Thread 1074: XXXX 1710847555399, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555399 XXXX 1710847555399, Thread 1074: XXXX 1710847555399, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1074 1710847555400 XXXX 1710847555400, Thread 1074: XXXX 1710847555400, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555400 XXXX 1710847555400, Thread 1074: XXXX 1710847555400, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1074 1710847555401 XXXX 1710847555401, Thread 1074: XXXX 1710847555401, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555401 XXXX 1710847555401, Thread 1074: XXXX 1710847555401, Entering Thread 1074: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1074 1710847555431 XXXX 1710847555431, Thread 1074: XXXX 1710847555431, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555431 XXXX 1710847555431, Thread 1074: XXXX 1710847555431, Entering Thread 1074: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1074 1710847555432 XXXX 1710847555432, Thread 1074: XXXX 1710847555432, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555432 XXXX 1710847555432, Thread 1074: XXXX 1710847555432, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1074 1710847555433 XXXX 1710847555433, Thread 1074: XXXX 1710847555433, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555433 XXXX 1710847555433, Thread 1074: XXXX 1710847555433, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1074 1710847555434 XXXX 1710847555434, Thread 1074: XXXX 1710847555434, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555434 XXXX 1710847555434, Thread 1074: XXXX 1710847555434, Entering Thread 1074: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1074 1710847555463 XXXX 1710847555463, Thread 1074: XXXX 1710847555463, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555463 XXXX 1710847555463, Thread 1074: XXXX 1710847555463, Entering Thread 1074: Commands::runScriptBasic, script name = EraseChip, timeOut = 30000 ms +1074 1710847555470 XXXX 1710847555470, Thread 1074: XXXX 1710847555470, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555470 XXXX 1710847555470, Thread 1074: XXXX 1710847555470, Entering Thread 1074: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1074 1710847555472 XXXX 1710847555472, Thread 1074: XXXX 1710847555472, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555472 XXXX 1710847555472, Thread 1074: XXXX 1710847555472, Entering Thread 1074: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1074 1710847555473 XXXX 1710847555473, Thread 1074: XXXX 1710847555473, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555473 XXXX 1710847555473, Thread 1074: XXXX 1710847555473, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1074 1710847555474 XXXX 1710847555474, Thread 1074: XXXX 1710847555474, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555474 XXXX 1710847555474, Thread 1074: XXXX 1710847555474, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1074 1710847555475 XXXX 1710847555475, Thread 1074: XXXX 1710847555475, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555475 XXXX 1710847555475, Thread 1074: XXXX 1710847555475, Entering Thread 1074: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1074 1710847555505 XXXX 1710847555505, Thread 1074: XXXX 1710847555505, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555505 XXXX 1710847555505, Thread 1074: XXXX 1710847555505, Entering Thread 1074: Commands::runScriptBasic, script name = EraseDataEEmem, timeOut = 30000 ms +1074 1710847555512 XXXX 1710847555512, Thread 1074: XXXX 1710847555512, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555512 XXXX 1710847555512, Thread 1074: XXXX 1710847555512, Entering Thread 1074: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1074 1710847555514 XXXX 1710847555514, Thread 1074: XXXX 1710847555514, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555514 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1074 1710847555514 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1074 1710847555514 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1074 1710847555514 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1074 1710847555514 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1074 1710847555514 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1074 1710847555514 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1074 1710847555514 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = write, Mask = 00000000, Erase = false, Production Mode = true +1074 1710847555514 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2007, End = 2008, Buffer Length = 4, Type = Cfg, Mask = 00000000 +1074 1710847555514 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1074 1710847555514 XXXX 1710847555514, Thread 1074: XXXX 1710847555514, Entering Thread 1074: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1074 1710847555515 XXXX 1710847555515, Thread 1074: XXXX 1710847555515, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555515 XXXX 1710847555515, Thread 1074: XXXX 1710847555515, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1074 1710847555516 XXXX 1710847555516, Thread 1074: XXXX 1710847555516, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555516 XXXX 1710847555516, Thread 1074: XXXX 1710847555516, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1074 1710847555517 XXXX 1710847555517, Thread 1074: XXXX 1710847555517, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555517 XXXX 1710847555517, Thread 1074: XXXX 1710847555517, Entering Thread 1074: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1074 1710847555546 XXXX 1710847555546, Thread 1074: XXXX 1710847555546, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555546 XXXX 1710847555546, Thread 1074: XXXX 1710847555546, Entering Thread 1074: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1074 1710847555547 XXXX 1710847555547, Thread 1074: XXXX 1710847555547, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555547 XXXX 1710847555547, Thread 1074: XXXX 1710847555547, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1074 1710847555548 XXXX 1710847555548, Thread 1074: XXXX 1710847555548, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555548 XXXX 1710847555548, Thread 1074: XXXX 1710847555548, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1074 1710847555549 XXXX 1710847555549, Thread 1074: XXXX 1710847555549, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555549 XXXX 1710847555549, Thread 1074: XXXX 1710847555549, Entering Thread 1074: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1074 1710847555579 XXXX 1710847555579, Thread 1074: XXXX 1710847555579, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555579 XXXX 1710847555579, Thread 1074: XXXX 1710847555579, Entering Thread 1074: Commands::runScriptWithDownload, script name = WriteConfigmem +1074 1710847555593 XXXX 1710847555593, Thread 1074: XXXX 1710847555593, Exiting Thread 1074: Commands::runScriptWithDownload(WriteConfigmem) +1074 1710847555593 XXXX 1710847555593, Thread 1074: XXXX 1710847555593, Entering Thread 1074: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1074 1710847555595 XXXX 1710847555595, Thread 1074: XXXX 1710847555595, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555595 XXXX 1710847555595, Thread 1074: XXXX 1710847555595, Entering Thread 1074: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1074 1710847555596 XXXX 1710847555596, Thread 1074: XXXX 1710847555596, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555596 XXXX 1710847555596, Thread 1074: XXXX 1710847555596, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1074 1710847555597 XXXX 1710847555597, Thread 1074: XXXX 1710847555597, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555597 XXXX 1710847555597, Thread 1074: XXXX 1710847555597, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1074 1710847555598 XXXX 1710847555598, Thread 1074: XXXX 1710847555598, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555598 XXXX 1710847555598, Thread 1074: XXXX 1710847555598, Entering Thread 1074: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1074 1710847555627 XXXX 1710847555627, Thread 1074: XXXX 1710847555627, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555627 XXXX 1710847555627, Thread 1074: XXXX 1710847555627, Entering Thread 1074: Commands::runScriptWithUpload, script name = ReadConfigmem +1074 1710847555627 XXXX 1710847555627, Thread 1074: XXXX 1710847555627, Entering Thread 1074: ToolCommUsb::readTransfer, sideData is 0x55 bytes long, transferDataLength is 0x4 bytes long +1074 1710847555629 XXXX 1710847555629, Thread 1074: XXXX 1710847555629, Exiting Thread 1074: ToolCommUsb::readTransfer, cr.status = 0x0 +1074 1710847555629 XXXX 1710847555629, Thread 1074: XXXX 1710847555629, Exiting Thread 1074: Commands::runScriptWithUpload +1074 1710847555629 XXXX 1710847555629, Thread 1074: XXXX 1710847555629, Entering Thread 1074: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1074 1710847555631 XXXX 1710847555631, Thread 1074: XXXX 1710847555631, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555631 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1074 1710847555631 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1074 1710847555631 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1074 1710847555631 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1074 1710847555632 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1074 1710847555632 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1074 1710847555632 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1074 1710847555632 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = write, Mask = 00000000, Erase = false, Production Mode = true +1074 1710847555632 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 0, End = 65f, Buffer Length = 3264, Type = Pgm, Mask = 00000000 +1074 1710847555632 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2007, End = 2008, Buffer Length = 4, Type = Cfg, Mask = 00000000 +1074 1710847555632 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1074 1710847555632 XXXX 1710847555632, Thread 1074: XXXX 1710847555632, Entering Thread 1074: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1074 1710847555633 XXXX 1710847555633, Thread 1074: XXXX 1710847555633, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555633 XXXX 1710847555633, Thread 1074: XXXX 1710847555633, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1074 1710847555634 XXXX 1710847555634, Thread 1074: XXXX 1710847555634, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555634 XXXX 1710847555634, Thread 1074: XXXX 1710847555634, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1074 1710847555635 XXXX 1710847555635, Thread 1074: XXXX 1710847555635, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555635 XXXX 1710847555635, Thread 1074: XXXX 1710847555635, Entering Thread 1074: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1074 1710847555665 XXXX 1710847555665, Thread 1074: XXXX 1710847555665, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555666 XXXX 1710847555666, Thread 1074: XXXX 1710847555666, Entering Thread 1074: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1074 1710847555666 XXXX 1710847555666, Thread 1074: XXXX 1710847555666, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555666 XXXX 1710847555666, Thread 1074: XXXX 1710847555666, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1074 1710847555667 XXXX 1710847555667, Thread 1074: XXXX 1710847555667, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555667 XXXX 1710847555667, Thread 1074: XXXX 1710847555667, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1074 1710847555669 XXXX 1710847555669, Thread 1074: XXXX 1710847555669, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555669 XXXX 1710847555669, Thread 1074: XXXX 1710847555669, Entering Thread 1074: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1074 1710847555698 XXXX 1710847555698, Thread 1074: XXXX 1710847555698, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555698 XXXX 1710847555698, Thread 1074: XXXX 1710847555698, Entering Thread 1074: Commands::runScriptWithDownload, script name = WriteProgmem +1074 1710847556386 XXXX 1710847556386, Thread 1074: XXXX 1710847556386, Exiting Thread 1074: Commands::runScriptWithDownload(WriteProgmem) +1074 1710847556386 XXXX 1710847556386, Thread 1074: XXXX 1710847556386, Entering Thread 1074: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1074 1710847556388 XXXX 1710847556388, Thread 1074: XXXX 1710847556388, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556388 XXXX 1710847556388, Thread 1074: XXXX 1710847556388, Entering Thread 1074: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1074 1710847556388 XXXX 1710847556388, Thread 1074: XXXX 1710847556388, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556388 XXXX 1710847556388, Thread 1074: XXXX 1710847556388, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1074 1710847556389 XXXX 1710847556389, Thread 1074: XXXX 1710847556389, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556390 XXXX 1710847556390, Thread 1074: XXXX 1710847556390, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1074 1710847556390 XXXX 1710847556390, Thread 1074: XXXX 1710847556390, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556391 XXXX 1710847556391, Thread 1074: XXXX 1710847556391, Entering Thread 1074: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1074 1710847556420 XXXX 1710847556420, Thread 1074: XXXX 1710847556420, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556420 XXXX 1710847556420, Thread 1074: XXXX 1710847556420, Entering Thread 1074: Commands::runScriptWithUpload, script name = ReadProgmem +1074 1710847556420 XXXX 1710847556420, Thread 1074: XXXX 1710847556420, Entering Thread 1074: ToolCommUsb::readTransfer, sideData is 0x3d bytes long, transferDataLength is 0xcc0 bytes long +1074 1710847556493 XXXX 1710847556493, Thread 1074: XXXX 1710847556493, Exiting Thread 1074: ToolCommUsb::readTransfer, cr.status = 0x0 +1074 1710847556494 XXXX 1710847556494, Thread 1074: XXXX 1710847556493, Exiting Thread 1074: Commands::runScriptWithUpload +1074 1710847556494 XXXX 1710847556494, Thread 1074: XXXX 1710847556494, Entering Thread 1074: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1074 1710847556495 XXXX 1710847556495, Thread 1074: XXXX 1710847556495, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556496 XXXX 1710847556496, Thread 1074: XXXX 1710847556496, Entering Thread 1074: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1074 1710847556497 XXXX 1710847556497, Thread 1074: XXXX 1710847556497, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556497 XXXX 1710847556497, Thread 1074: XXXX 1710847556497, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1074 1710847556498 XXXX 1710847556497, Thread 1074: XXXX 1710847556497, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556498 XXXX 1710847556498, Thread 1074: XXXX 1710847556498, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1074 1710847556498 XXXX 1710847556498, Thread 1074: XXXX 1710847556498, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556498 XXXX 1710847556498, Thread 1074: XXXX 1710847556498, Entering Thread 1074: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1074 1710847556528 XXXX 1710847556528, Thread 1074: XXXX 1710847556528, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556528 XXXX 1710847556528, Thread 1074: XXXX 1710847556528, Entering Thread 1074: Commands::runScriptWithDownload, script name = WriteConfigmem +1074 1710847556542 XXXX 1710847556542, Thread 1074: XXXX 1710847556542, Exiting Thread 1074: Commands::runScriptWithDownload(WriteConfigmem) +1074 1710847556542 XXXX 1710847556542, Thread 1074: XXXX 1710847556542, Entering Thread 1074: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1074 1710847556544 XXXX 1710847556544, Thread 1074: XXXX 1710847556544, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556544 XXXX 1710847556544, Thread 1074: XXXX 1710847556544, Entering Thread 1074: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1074 1710847556544 XXXX 1710847556544, Thread 1074: XXXX 1710847556544, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556544 XXXX 1710847556544, Thread 1074: XXXX 1710847556544, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1074 1710847556545 XXXX 1710847556545, Thread 1074: XXXX 1710847556545, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556545 XXXX 1710847556545, Thread 1074: XXXX 1710847556545, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1074 1710847556546 XXXX 1710847556546, Thread 1074: XXXX 1710847556546, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556546 XXXX 1710847556546, Thread 1074: XXXX 1710847556546, Entering Thread 1074: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1074 1710847556577 XXXX 1710847556576, Thread 1074: XXXX 1710847556576, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556577 XXXX 1710847556577, Thread 1074: XXXX 1710847556577, Entering Thread 1074: Commands::runScriptWithUpload, script name = ReadConfigmem +1074 1710847556577 XXXX 1710847556577, Thread 1074: XXXX 1710847556577, Entering Thread 1074: ToolCommUsb::readTransfer, sideData is 0x55 bytes long, transferDataLength is 0x4 bytes long +1074 1710847556578 XXXX 1710847556578, Thread 1074: XXXX 1710847556578, Exiting Thread 1074: ToolCommUsb::readTransfer, cr.status = 0x0 +1074 1710847556578 XXXX 1710847556578, Thread 1074: XXXX 1710847556578, Exiting Thread 1074: Commands::runScriptWithUpload +1074 1710847556578 XXXX 1710847556578, Thread 1074: XXXX 1710847556578, Entering Thread 1074: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1074 1710847556581 XXXX 1710847556581, Thread 1074: XXXX 1710847556581, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556581 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1074 1710847556581 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1074 1710847556581 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1074 1710847556581 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1074 1710847556581 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:endOfOperations +1074 1710847556581 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1074 1710847556581 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 null +1074 1710847556581 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1074 1710847556581 XXXX 1710847556581, Thread 1074: XXXX 1710847556581, Entering Thread 1074: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1074 1710847556583 XXXX 1710847556583, Thread 1074: XXXX 1710847556583, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556583 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:endOfOperations +1074 1710847556583 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1074 1710847556583 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1074 1710847556583 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1074 1710847556585 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1074 1710847556585 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1074 1710847556585 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1074 1710847556585 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = releasefromreset, Mask = 00000000, Erase = false, Production Mode = true +1074 1710847556585 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1074 1710847556585 XXXX 1710847556585, Thread 1074: XXXX 1710847556585, Entering Thread 1074: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1074 1710847556587 XXXX 1710847556587, Thread 1074: XXXX 1710847556587, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556587 XXXX 1710847556587, Thread 1074: XXXX 1710847556587, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0x42, ... +1074 1710847556588 XXXX 1710847556588, Thread 1074: XXXX 1710847556588, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556588 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1074 1710847556588 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1074 1710847556588 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1074 1710847556588 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1087 1710847572781 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:EstablishCommunincations +1087 1710847572781 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1087 1710847572781 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 com.microchip.mplab.mdbcore.PK5Tool.PK5Com@2e5a1960 +1087 1710847572781 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1087 1710847572781 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:EstablishCommunincations +1087 1710847572781 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1087 1710847572781 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 true +1087 1710847572781 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End + +1087 1710847572781 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:GetFirmwareInfo +1087 1710847572781 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1087 1710847572781 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 null +1087 1710847572781 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1087 1710847572789 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:GetFirmwareInfo +1087 1710847572789 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1087 1710847572789 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 FirmwareInfo: Values: +1087 1710847572789 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 FirmwareInfo: boot = false, bootVer = 00.00.10, apVer = 02.00.84, fpgaVer = ff.ff.ff, scriptVer = 00.05.85, macAddress = 0504883548174844852485054485057, devID = a1020e01, devID1 = 2, devSN0 = ffffffff, devSN1 = ffffffff, serialNumber = 020026702RYN005435, appCommitID = null, scriptCommitID = d33d758f73, PCB_ID = 2 +1087 1710847572789 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End +1087 1710847572789 XXXX 1710847572789, Thread 1087: XXXX 1710847572789, Entering Thread 1087: Commands::runScriptWithUpload with script contents. contents[0] = 0x5e, ... +1087 1710847572789 XXXX 1710847572789, Thread 1087: XXXX 1710847572789, Entering Thread 1087: ToolCommUsb::readTransfer, sideData is 0xd bytes long, transferDataLength is 0x4 bytes long +1087 1710847572792 XXXX 1710847572792, Thread 1087: XXXX 1710847572792, Exiting Thread 1087: ToolCommUsb::readTransfer, cr.status = 0x0 +1087 1710847572792 XXXX 1710847572792, Thread 1087: XXXX 1710847572792, Exiting Thread 1087: Commands::runScriptWithUpload + +1087 1710847572792 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:SetPowerInfo +1087 1710847572792 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1087 1710847572792 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 PowerInfo: Values: +1087 1710847572792 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 PowerInfo: shotDownSystem = false, isToolPower = true, voltage = 5,000000, useVppFirst = false, useLowVoltageProgramming = false, useMaintainActivePower = false +1087 1710847572792 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1087 1710847572792 XXXX 1710847572792, Thread 1087: XXXX 1710847572792, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0x39, ... +1087 1710847572793 XXXX 1710847572793, Thread 1087: XXXX 1710847572793, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847572793 XXXX 1710847572793, Thread 1087: XXXX 1710847572793, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0x46, ... +1087 1710847572794 XXXX 1710847572794, Thread 1087: XXXX 1710847572794, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847572794 XXXX 1710847572794, Thread 1087: XXXX 1710847572794, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0x44, ... +1087 1710847572806 XXXX 1710847572806, Thread 1087: XXXX 1710847572806, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847572806 XXXX 1710847572806, Thread 1087: XXXX 1710847572806, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0x40, ... +1087 1710847572986 XXXX 1710847572986, Thread 1087: XXXX 1710847572986, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847572986 XXXX 1710847572986, Thread 1087: XXXX 1710847572986, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0x47, ... +1087 1710847572991 XXXX 1710847572991, Thread 1087: XXXX 1710847572991, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847572991 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:SetPowerInfo +1087 1710847572991 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1087 1710847572991 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 none +1087 1710847572991 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End + +1087 1710847572991 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:SetLEDBrightness +1087 1710847572991 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1087 1710847572991 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 5 +1087 1710847572991 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1087 1710847572991 XXXX 1710847572991, Thread 1087: XXXX 1710847572991, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xcf, ... +1087 1710847572991 XXXX 1710847572991, Thread 1087: XXXX 1710847572991, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847572993 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:SetLEDBrightness +1087 1710847572993 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1087 1710847572993 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 none +1087 1710847572993 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End + +1087 1710847572993 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:SetToolInfo +1087 1710847572993 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1087 1710847572993 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 ToolInfo: Values: +1087 1710847572993 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 ToolInfo: speedLevel = 1, PGCResistance = 4700, PGDResistance = 4700, PGCPullDir = PullDown, PGDPullDir = PullDown, ICSPSelected = Wire2 +1087 1710847572993 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1087 1710847572993 XXXX 1710847572993, Thread 1087: XXXX 1710847572993, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0x27, ... +1087 1710847572993 XXXX 1710847572993, Thread 1087: XXXX 1710847572993, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847572993 XXXX 1710847572993, Thread 1087: XXXX 1710847572993, Entering Thread 1087: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1087 1710847572994 XXXX 1710847572994, Thread 1087: XXXX 1710847572994, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847572994 XXXX 1710847572994, Thread 1087: XXXX 1710847572994, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1087 1710847572995 XXXX 1710847572995, Thread 1087: XXXX 1710847572995, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847572995 XXXX 1710847572995, Thread 1087: XXXX 1710847572995, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1087 1710847572996 XXXX 1710847572996, Thread 1087: XXXX 1710847572996, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847572996 XXXX 1710847572996, Thread 1087: XXXX 1710847572996, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xd4, ... +1087 1710847572997 XXXX 1710847572997, Thread 1087: XXXX 1710847572997, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847572997 XXXX 1710847572997, Thread 1087: XXXX 1710847572997, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xcd, ... +1087 1710847572998 XXXX 1710847572998, Thread 1087: XXXX 1710847572998, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847572998 XXXX 1710847572998, Thread 1087: XXXX 1710847572998, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xce, ... +1087 1710847572999 XXXX 1710847572999, Thread 1087: XXXX 1710847572999, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847572999 XXXX 1710847572999, Thread 1087: XXXX 1710847572999, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xcd, ... +1087 1710847573000 XXXX 1710847573000, Thread 1087: XXXX 1710847573000, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573000 XXXX 1710847573000, Thread 1087: XXXX 1710847573000, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xce, ... +1087 1710847573001 XXXX 1710847573001, Thread 1087: XXXX 1710847573001, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573001 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:SetToolInfo +1087 1710847573001 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1087 1710847573001 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 none +1087 1710847573001 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End + +1087 1710847573007 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1087 1710847573007 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1087 1710847573007 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1087 1710847573007 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = erase, Mask = 00000000, Erase = false, Production Mode = true +1087 1710847573007 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 0, End = 1fff, Buffer Length = 0, Type = Pgm, Mask = 00000000 +1087 1710847573007 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2007, End = 2008, Buffer Length = 0, Type = Cfg, Mask = 00000000 +1087 1710847573007 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 0, End = ff, Buffer Length = 0, Type = EEData, Mask = 00000000 +1087 1710847573007 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2000, End = 2003, Buffer Length = 0, Type = UserID, Mask = 00000000 +1087 1710847573007 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1087 1710847573007 XXXX 1710847573007, Thread 1087: XXXX 1710847573007, Entering Thread 1087: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1087 1710847573008 XXXX 1710847573008, Thread 1087: XXXX 1710847573008, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573008 XXXX 1710847573008, Thread 1087: XXXX 1710847573008, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1087 1710847573009 XXXX 1710847573009, Thread 1087: XXXX 1710847573009, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573009 XXXX 1710847573009, Thread 1087: XXXX 1710847573009, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1087 1710847573010 XXXX 1710847573010, Thread 1087: XXXX 1710847573010, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573010 XXXX 1710847573010, Thread 1087: XXXX 1710847573010, Entering Thread 1087: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1087 1710847573040 XXXX 1710847573040, Thread 1087: XXXX 1710847573040, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573040 XXXX 1710847573040, Thread 1087: XXXX 1710847573040, Entering Thread 1087: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1087 1710847573041 XXXX 1710847573041, Thread 1087: XXXX 1710847573041, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573041 XXXX 1710847573041, Thread 1087: XXXX 1710847573041, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1087 1710847573042 XXXX 1710847573042, Thread 1087: XXXX 1710847573042, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573042 XXXX 1710847573042, Thread 1087: XXXX 1710847573042, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1087 1710847573043 XXXX 1710847573043, Thread 1087: XXXX 1710847573043, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573043 XXXX 1710847573043, Thread 1087: XXXX 1710847573043, Entering Thread 1087: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1087 1710847573072 XXXX 1710847573072, Thread 1087: XXXX 1710847573072, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573072 XXXX 1710847573072, Thread 1087: XXXX 1710847573072, Entering Thread 1087: Commands::runScriptBasic, script name = EraseChip, timeOut = 30000 ms +1087 1710847573079 XXXX 1710847573079, Thread 1087: XXXX 1710847573079, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573079 XXXX 1710847573079, Thread 1087: XXXX 1710847573079, Entering Thread 1087: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1087 1710847573081 XXXX 1710847573081, Thread 1087: XXXX 1710847573081, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573081 XXXX 1710847573081, Thread 1087: XXXX 1710847573081, Entering Thread 1087: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1087 1710847573082 XXXX 1710847573082, Thread 1087: XXXX 1710847573082, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573082 XXXX 1710847573082, Thread 1087: XXXX 1710847573082, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1087 1710847573083 XXXX 1710847573083, Thread 1087: XXXX 1710847573083, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573083 XXXX 1710847573083, Thread 1087: XXXX 1710847573083, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1087 1710847573084 XXXX 1710847573084, Thread 1087: XXXX 1710847573084, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573084 XXXX 1710847573084, Thread 1087: XXXX 1710847573084, Entering Thread 1087: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1087 1710847573114 XXXX 1710847573114, Thread 1087: XXXX 1710847573114, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573114 XXXX 1710847573114, Thread 1087: XXXX 1710847573114, Entering Thread 1087: Commands::runScriptBasic, script name = EraseDataEEmem, timeOut = 30000 ms +1087 1710847573121 XXXX 1710847573121, Thread 1087: XXXX 1710847573121, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573121 XXXX 1710847573121, Thread 1087: XXXX 1710847573121, Entering Thread 1087: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1087 1710847573123 XXXX 1710847573123, Thread 1087: XXXX 1710847573123, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573123 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1087 1710847573123 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1087 1710847573123 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1087 1710847573123 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1087 1710847573123 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1087 1710847573123 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1087 1710847573123 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1087 1710847573123 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = write, Mask = 00000000, Erase = false, Production Mode = true +1087 1710847573123 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2007, End = 2008, Buffer Length = 4, Type = Cfg, Mask = 00000000 +1087 1710847573123 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1087 1710847573123 XXXX 1710847573123, Thread 1087: XXXX 1710847573123, Entering Thread 1087: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1087 1710847573124 XXXX 1710847573124, Thread 1087: XXXX 1710847573124, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573124 XXXX 1710847573124, Thread 1087: XXXX 1710847573124, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1087 1710847573125 XXXX 1710847573125, Thread 1087: XXXX 1710847573125, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573125 XXXX 1710847573125, Thread 1087: XXXX 1710847573125, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1087 1710847573126 XXXX 1710847573126, Thread 1087: XXXX 1710847573126, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573126 XXXX 1710847573126, Thread 1087: XXXX 1710847573126, Entering Thread 1087: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1087 1710847573155 XXXX 1710847573155, Thread 1087: XXXX 1710847573155, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573155 XXXX 1710847573155, Thread 1087: XXXX 1710847573155, Entering Thread 1087: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1087 1710847573156 XXXX 1710847573156, Thread 1087: XXXX 1710847573156, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573156 XXXX 1710847573156, Thread 1087: XXXX 1710847573156, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1087 1710847573157 XXXX 1710847573157, Thread 1087: XXXX 1710847573157, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573157 XXXX 1710847573157, Thread 1087: XXXX 1710847573157, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1087 1710847573158 XXXX 1710847573158, Thread 1087: XXXX 1710847573158, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573158 XXXX 1710847573158, Thread 1087: XXXX 1710847573158, Entering Thread 1087: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1087 1710847573188 XXXX 1710847573188, Thread 1087: XXXX 1710847573188, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573188 XXXX 1710847573188, Thread 1087: XXXX 1710847573188, Entering Thread 1087: Commands::runScriptWithDownload, script name = WriteConfigmem +1087 1710847573202 XXXX 1710847573202, Thread 1087: XXXX 1710847573202, Exiting Thread 1087: Commands::runScriptWithDownload(WriteConfigmem) +1087 1710847573202 XXXX 1710847573202, Thread 1087: XXXX 1710847573202, Entering Thread 1087: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1087 1710847573204 XXXX 1710847573204, Thread 1087: XXXX 1710847573204, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573204 XXXX 1710847573204, Thread 1087: XXXX 1710847573204, Entering Thread 1087: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1087 1710847573205 XXXX 1710847573205, Thread 1087: XXXX 1710847573205, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573205 XXXX 1710847573205, Thread 1087: XXXX 1710847573205, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1087 1710847573206 XXXX 1710847573206, Thread 1087: XXXX 1710847573206, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573206 XXXX 1710847573206, Thread 1087: XXXX 1710847573206, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1087 1710847573207 XXXX 1710847573207, Thread 1087: XXXX 1710847573207, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573207 XXXX 1710847573207, Thread 1087: XXXX 1710847573207, Entering Thread 1087: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1087 1710847573236 XXXX 1710847573236, Thread 1087: XXXX 1710847573236, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573236 XXXX 1710847573236, Thread 1087: XXXX 1710847573236, Entering Thread 1087: Commands::runScriptWithUpload, script name = ReadConfigmem +1087 1710847573236 XXXX 1710847573236, Thread 1087: XXXX 1710847573236, Entering Thread 1087: ToolCommUsb::readTransfer, sideData is 0x55 bytes long, transferDataLength is 0x4 bytes long +1087 1710847573239 XXXX 1710847573239, Thread 1087: XXXX 1710847573239, Exiting Thread 1087: ToolCommUsb::readTransfer, cr.status = 0x0 +1087 1710847573239 XXXX 1710847573239, Thread 1087: XXXX 1710847573239, Exiting Thread 1087: Commands::runScriptWithUpload +1087 1710847573239 XXXX 1710847573239, Thread 1087: XXXX 1710847573239, Entering Thread 1087: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1087 1710847573241 XXXX 1710847573241, Thread 1087: XXXX 1710847573241, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573241 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1087 1710847573241 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1087 1710847573241 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1087 1710847573241 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1087 1710847573244 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1087 1710847573244 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1087 1710847573244 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1087 1710847573244 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = write, Mask = 00000000, Erase = false, Production Mode = true +1087 1710847573244 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 0, End = 65f, Buffer Length = 3264, Type = Pgm, Mask = 00000000 +1087 1710847573244 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2007, End = 2008, Buffer Length = 4, Type = Cfg, Mask = 00000000 +1087 1710847573244 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1087 1710847573244 XXXX 1710847573244, Thread 1087: XXXX 1710847573244, Entering Thread 1087: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1087 1710847573245 XXXX 1710847573245, Thread 1087: XXXX 1710847573245, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573245 XXXX 1710847573245, Thread 1087: XXXX 1710847573245, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1087 1710847573246 XXXX 1710847573246, Thread 1087: XXXX 1710847573246, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573246 XXXX 1710847573246, Thread 1087: XXXX 1710847573246, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1087 1710847573247 XXXX 1710847573247, Thread 1087: XXXX 1710847573247, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573247 XXXX 1710847573247, Thread 1087: XXXX 1710847573247, Entering Thread 1087: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1087 1710847573277 XXXX 1710847573277, Thread 1087: XXXX 1710847573277, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573277 XXXX 1710847573277, Thread 1087: XXXX 1710847573277, Entering Thread 1087: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1087 1710847573278 XXXX 1710847573278, Thread 1087: XXXX 1710847573278, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573278 XXXX 1710847573278, Thread 1087: XXXX 1710847573278, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1087 1710847573279 XXXX 1710847573279, Thread 1087: XXXX 1710847573279, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573279 XXXX 1710847573279, Thread 1087: XXXX 1710847573279, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1087 1710847573280 XXXX 1710847573280, Thread 1087: XXXX 1710847573280, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573280 XXXX 1710847573280, Thread 1087: XXXX 1710847573280, Entering Thread 1087: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1087 1710847573309 XXXX 1710847573309, Thread 1087: XXXX 1710847573309, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573309 XXXX 1710847573309, Thread 1087: XXXX 1710847573309, Entering Thread 1087: Commands::runScriptWithDownload, script name = WriteProgmem +1087 1710847573999 XXXX 1710847573999, Thread 1087: XXXX 1710847573999, Exiting Thread 1087: Commands::runScriptWithDownload(WriteProgmem) +1087 1710847573999 XXXX 1710847573999, Thread 1087: XXXX 1710847573999, Entering Thread 1087: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1087 1710847574000 XXXX 1710847574000, Thread 1087: XXXX 1710847574000, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574000 XXXX 1710847574000, Thread 1087: XXXX 1710847574000, Entering Thread 1087: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1087 1710847574001 XXXX 1710847574001, Thread 1087: XXXX 1710847574001, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574001 XXXX 1710847574001, Thread 1087: XXXX 1710847574001, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1087 1710847574002 XXXX 1710847574002, Thread 1087: XXXX 1710847574002, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574002 XXXX 1710847574002, Thread 1087: XXXX 1710847574002, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1087 1710847574003 XXXX 1710847574003, Thread 1087: XXXX 1710847574003, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574003 XXXX 1710847574003, Thread 1087: XXXX 1710847574003, Entering Thread 1087: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1087 1710847574033 XXXX 1710847574033, Thread 1087: XXXX 1710847574033, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574033 XXXX 1710847574033, Thread 1087: XXXX 1710847574033, Entering Thread 1087: Commands::runScriptWithUpload, script name = ReadProgmem +1087 1710847574033 XXXX 1710847574033, Thread 1087: XXXX 1710847574033, Entering Thread 1087: ToolCommUsb::readTransfer, sideData is 0x3d bytes long, transferDataLength is 0xcc0 bytes long +1087 1710847574106 XXXX 1710847574106, Thread 1087: XXXX 1710847574106, Exiting Thread 1087: ToolCommUsb::readTransfer, cr.status = 0x0 +1087 1710847574106 XXXX 1710847574106, Thread 1087: XXXX 1710847574106, Exiting Thread 1087: Commands::runScriptWithUpload +1087 1710847574106 XXXX 1710847574106, Thread 1087: XXXX 1710847574106, Entering Thread 1087: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1087 1710847574108 XXXX 1710847574108, Thread 1087: XXXX 1710847574108, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574108 XXXX 1710847574108, Thread 1087: XXXX 1710847574108, Entering Thread 1087: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1087 1710847574109 XXXX 1710847574109, Thread 1087: XXXX 1710847574109, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574109 XXXX 1710847574109, Thread 1087: XXXX 1710847574109, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1087 1710847574110 XXXX 1710847574110, Thread 1087: XXXX 1710847574110, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574110 XXXX 1710847574110, Thread 1087: XXXX 1710847574110, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1087 1710847574111 XXXX 1710847574111, Thread 1087: XXXX 1710847574111, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574111 XXXX 1710847574111, Thread 1087: XXXX 1710847574111, Entering Thread 1087: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1087 1710847574140 XXXX 1710847574140, Thread 1087: XXXX 1710847574140, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574140 XXXX 1710847574140, Thread 1087: XXXX 1710847574140, Entering Thread 1087: Commands::runScriptWithDownload, script name = WriteConfigmem +1087 1710847574155 XXXX 1710847574155, Thread 1087: XXXX 1710847574155, Exiting Thread 1087: Commands::runScriptWithDownload(WriteConfigmem) +1087 1710847574155 XXXX 1710847574155, Thread 1087: XXXX 1710847574155, Entering Thread 1087: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1087 1710847574157 XXXX 1710847574157, Thread 1087: XXXX 1710847574157, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574157 XXXX 1710847574157, Thread 1087: XXXX 1710847574157, Entering Thread 1087: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1087 1710847574158 XXXX 1710847574158, Thread 1087: XXXX 1710847574158, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574158 XXXX 1710847574158, Thread 1087: XXXX 1710847574158, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1087 1710847574159 XXXX 1710847574159, Thread 1087: XXXX 1710847574159, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574159 XXXX 1710847574159, Thread 1087: XXXX 1710847574159, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1087 1710847574160 XXXX 1710847574160, Thread 1087: XXXX 1710847574160, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574160 XXXX 1710847574160, Thread 1087: XXXX 1710847574160, Entering Thread 1087: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1087 1710847574190 XXXX 1710847574190, Thread 1087: XXXX 1710847574190, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574190 XXXX 1710847574190, Thread 1087: XXXX 1710847574190, Entering Thread 1087: Commands::runScriptWithUpload, script name = ReadConfigmem +1087 1710847574190 XXXX 1710847574190, Thread 1087: XXXX 1710847574190, Entering Thread 1087: ToolCommUsb::readTransfer, sideData is 0x55 bytes long, transferDataLength is 0x4 bytes long +1087 1710847574193 XXXX 1710847574193, Thread 1087: XXXX 1710847574193, Exiting Thread 1087: ToolCommUsb::readTransfer, cr.status = 0x0 +1087 1710847574193 XXXX 1710847574193, Thread 1087: XXXX 1710847574193, Exiting Thread 1087: Commands::runScriptWithUpload +1087 1710847574193 XXXX 1710847574193, Thread 1087: XXXX 1710847574193, Entering Thread 1087: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1087 1710847574195 XXXX 1710847574195, Thread 1087: XXXX 1710847574195, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574195 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1087 1710847574195 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1087 1710847574195 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1087 1710847574195 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1087 1710847574195 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:endOfOperations +1087 1710847574195 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1087 1710847574195 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 null +1087 1710847574195 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1087 1710847574195 XXXX 1710847574195, Thread 1087: XXXX 1710847574195, Entering Thread 1087: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1087 1710847574197 XXXX 1710847574197, Thread 1087: XXXX 1710847574197, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574197 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:endOfOperations +1087 1710847574197 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1087 1710847574197 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1087 1710847574197 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1087 1710847574200 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1087 1710847574200 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1087 1710847574200 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1087 1710847574200 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = releasefromreset, Mask = 00000000, Erase = false, Production Mode = true +1087 1710847574200 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1087 1710847574200 XXXX 1710847574200, Thread 1087: XXXX 1710847574200, Entering Thread 1087: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1087 1710847574202 XXXX 1710847574202, Thread 1087: XXXX 1710847574202, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574202 XXXX 1710847574202, Thread 1087: XXXX 1710847574202, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0x42, ... +1087 1710847574203 XXXX 1710847574203, Thread 1087: XXXX 1710847574203, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574203 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1087 1710847574203 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1087 1710847574203 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1087 1710847574203 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1098 1710847584856 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:EstablishCommunincations +1098 1710847584856 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1098 1710847584856 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 com.microchip.mplab.mdbcore.PK5Tool.PK5Com@2e5a1960 +1098 1710847584856 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1098 1710847584856 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:EstablishCommunincations +1098 1710847584856 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1098 1710847584856 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 true +1098 1710847584856 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End + +1098 1710847584856 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:GetFirmwareInfo +1098 1710847584856 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1098 1710847584856 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 null +1098 1710847584856 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1098 1710847584863 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:GetFirmwareInfo +1098 1710847584863 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1098 1710847584863 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 FirmwareInfo: Values: +1098 1710847584863 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 FirmwareInfo: boot = false, bootVer = 00.00.10, apVer = 02.00.84, fpgaVer = ff.ff.ff, scriptVer = 00.05.85, macAddress = 0504883548174844852485054485057, devID = a1020e01, devID1 = 2, devSN0 = ffffffff, devSN1 = ffffffff, serialNumber = 020026702RYN005435, appCommitID = null, scriptCommitID = d33d758f73, PCB_ID = 2 +1098 1710847584863 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End +1098 1710847584863 XXXX 1710847584863, Thread 1098: XXXX 1710847584863, Entering Thread 1098: Commands::runScriptWithUpload with script contents. contents[0] = 0x5e, ... +1098 1710847584863 XXXX 1710847584863, Thread 1098: XXXX 1710847584863, Entering Thread 1098: ToolCommUsb::readTransfer, sideData is 0xd bytes long, transferDataLength is 0x4 bytes long +1098 1710847584867 XXXX 1710847584867, Thread 1098: XXXX 1710847584867, Exiting Thread 1098: ToolCommUsb::readTransfer, cr.status = 0x0 +1098 1710847584867 XXXX 1710847584867, Thread 1098: XXXX 1710847584867, Exiting Thread 1098: Commands::runScriptWithUpload + +1098 1710847584867 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:SetPowerInfo +1098 1710847584867 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1098 1710847584867 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 PowerInfo: Values: +1098 1710847584867 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 PowerInfo: shotDownSystem = false, isToolPower = true, voltage = 5,000000, useVppFirst = false, useLowVoltageProgramming = false, useMaintainActivePower = false +1098 1710847584867 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1098 1710847584867 XXXX 1710847584867, Thread 1098: XXXX 1710847584867, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0x39, ... +1098 1710847584867 XXXX 1710847584867, Thread 1098: XXXX 1710847584867, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847584868 XXXX 1710847584868, Thread 1098: XXXX 1710847584868, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0x46, ... +1098 1710847584868 XXXX 1710847584868, Thread 1098: XXXX 1710847584868, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847584869 XXXX 1710847584869, Thread 1098: XXXX 1710847584869, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0x44, ... +1098 1710847584881 XXXX 1710847584881, Thread 1098: XXXX 1710847584881, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847584881 XXXX 1710847584881, Thread 1098: XXXX 1710847584881, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0x40, ... +1098 1710847585060 XXXX 1710847585060, Thread 1098: XXXX 1710847585060, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585060 XXXX 1710847585060, Thread 1098: XXXX 1710847585060, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0x47, ... +1098 1710847585066 XXXX 1710847585066, Thread 1098: XXXX 1710847585066, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:SetPowerInfo +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 none +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End + +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:SetLEDBrightness +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 5 +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1098 1710847585066 XXXX 1710847585066, Thread 1098: XXXX 1710847585066, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xcf, ... +1098 1710847585066 XXXX 1710847585066, Thread 1098: XXXX 1710847585066, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:SetLEDBrightness +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 none +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End + +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:SetToolInfo +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 ToolInfo: Values: +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 ToolInfo: speedLevel = 1, PGCResistance = 4700, PGDResistance = 4700, PGCPullDir = PullDown, PGDPullDir = PullDown, ICSPSelected = Wire2 +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1098 1710847585066 XXXX 1710847585066, Thread 1098: XXXX 1710847585066, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0x27, ... +1098 1710847585067 XXXX 1710847585067, Thread 1098: XXXX 1710847585067, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585067 XXXX 1710847585067, Thread 1098: XXXX 1710847585067, Entering Thread 1098: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1098 1710847585068 XXXX 1710847585068, Thread 1098: XXXX 1710847585068, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585068 XXXX 1710847585068, Thread 1098: XXXX 1710847585068, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1098 1710847585069 XXXX 1710847585069, Thread 1098: XXXX 1710847585069, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585069 XXXX 1710847585069, Thread 1098: XXXX 1710847585069, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1098 1710847585070 XXXX 1710847585070, Thread 1098: XXXX 1710847585070, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585070 XXXX 1710847585070, Thread 1098: XXXX 1710847585070, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xd4, ... +1098 1710847585071 XXXX 1710847585071, Thread 1098: XXXX 1710847585071, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585071 XXXX 1710847585071, Thread 1098: XXXX 1710847585071, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xcd, ... +1098 1710847585072 XXXX 1710847585072, Thread 1098: XXXX 1710847585072, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585072 XXXX 1710847585072, Thread 1098: XXXX 1710847585072, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xce, ... +1098 1710847585074 XXXX 1710847585074, Thread 1098: XXXX 1710847585074, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585074 XXXX 1710847585074, Thread 1098: XXXX 1710847585074, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xcd, ... +1098 1710847585074 XXXX 1710847585074, Thread 1098: XXXX 1710847585074, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585074 XXXX 1710847585074, Thread 1098: XXXX 1710847585074, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xce, ... +1098 1710847585076 XXXX 1710847585076, Thread 1098: XXXX 1710847585076, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585076 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:SetToolInfo +1098 1710847585076 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1098 1710847585076 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 none +1098 1710847585076 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End + +1098 1710847585085 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1098 1710847585085 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1098 1710847585085 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1098 1710847585085 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = erase, Mask = 00000000, Erase = false, Production Mode = true +1098 1710847585085 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 0, End = 1fff, Buffer Length = 0, Type = Pgm, Mask = 00000000 +1098 1710847585085 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2007, End = 2008, Buffer Length = 0, Type = Cfg, Mask = 00000000 +1098 1710847585085 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 0, End = ff, Buffer Length = 0, Type = EEData, Mask = 00000000 +1098 1710847585085 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2000, End = 2003, Buffer Length = 0, Type = UserID, Mask = 00000000 +1098 1710847585085 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1098 1710847585085 XXXX 1710847585085, Thread 1098: XXXX 1710847585085, Entering Thread 1098: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1098 1710847585086 XXXX 1710847585086, Thread 1098: XXXX 1710847585086, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585086 XXXX 1710847585086, Thread 1098: XXXX 1710847585086, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1098 1710847585087 XXXX 1710847585087, Thread 1098: XXXX 1710847585087, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585087 XXXX 1710847585087, Thread 1098: XXXX 1710847585087, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1098 1710847585088 XXXX 1710847585088, Thread 1098: XXXX 1710847585088, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585088 XXXX 1710847585088, Thread 1098: XXXX 1710847585088, Entering Thread 1098: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1098 1710847585118 XXXX 1710847585118, Thread 1098: XXXX 1710847585118, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585118 XXXX 1710847585118, Thread 1098: XXXX 1710847585118, Entering Thread 1098: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1098 1710847585120 XXXX 1710847585120, Thread 1098: XXXX 1710847585120, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585120 XXXX 1710847585120, Thread 1098: XXXX 1710847585120, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1098 1710847585122 XXXX 1710847585122, Thread 1098: XXXX 1710847585122, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585122 XXXX 1710847585122, Thread 1098: XXXX 1710847585122, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1098 1710847585123 XXXX 1710847585123, Thread 1098: XXXX 1710847585123, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585123 XXXX 1710847585123, Thread 1098: XXXX 1710847585123, Entering Thread 1098: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1098 1710847585152 XXXX 1710847585152, Thread 1098: XXXX 1710847585152, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585152 XXXX 1710847585152, Thread 1098: XXXX 1710847585152, Entering Thread 1098: Commands::runScriptBasic, script name = EraseChip, timeOut = 30000 ms +1098 1710847585159 XXXX 1710847585159, Thread 1098: XXXX 1710847585159, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585159 XXXX 1710847585159, Thread 1098: XXXX 1710847585159, Entering Thread 1098: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1098 1710847585161 XXXX 1710847585161, Thread 1098: XXXX 1710847585161, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585161 XXXX 1710847585161, Thread 1098: XXXX 1710847585161, Entering Thread 1098: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1098 1710847585162 XXXX 1710847585162, Thread 1098: XXXX 1710847585162, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585162 XXXX 1710847585162, Thread 1098: XXXX 1710847585162, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1098 1710847585163 XXXX 1710847585163, Thread 1098: XXXX 1710847585163, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585163 XXXX 1710847585163, Thread 1098: XXXX 1710847585163, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1098 1710847585164 XXXX 1710847585164, Thread 1098: XXXX 1710847585164, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585164 XXXX 1710847585164, Thread 1098: XXXX 1710847585164, Entering Thread 1098: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1098 1710847585193 XXXX 1710847585193, Thread 1098: XXXX 1710847585193, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585193 XXXX 1710847585193, Thread 1098: XXXX 1710847585193, Entering Thread 1098: Commands::runScriptBasic, script name = EraseDataEEmem, timeOut = 30000 ms +1098 1710847585200 XXXX 1710847585200, Thread 1098: XXXX 1710847585200, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585200 XXXX 1710847585200, Thread 1098: XXXX 1710847585200, Entering Thread 1098: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1098 1710847585202 XXXX 1710847585202, Thread 1098: XXXX 1710847585202, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585202 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1098 1710847585202 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1098 1710847585202 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1098 1710847585202 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1098 1710847585203 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1098 1710847585203 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1098 1710847585203 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1098 1710847585203 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = write, Mask = 00000000, Erase = false, Production Mode = true +1098 1710847585203 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2007, End = 2008, Buffer Length = 4, Type = Cfg, Mask = 00000000 +1098 1710847585203 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1098 1710847585203 XXXX 1710847585203, Thread 1098: XXXX 1710847585203, Entering Thread 1098: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1098 1710847585203 XXXX 1710847585203, Thread 1098: XXXX 1710847585203, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585203 XXXX 1710847585203, Thread 1098: XXXX 1710847585203, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1098 1710847585204 XXXX 1710847585204, Thread 1098: XXXX 1710847585204, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585204 XXXX 1710847585204, Thread 1098: XXXX 1710847585204, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1098 1710847585205 XXXX 1710847585205, Thread 1098: XXXX 1710847585205, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585205 XXXX 1710847585205, Thread 1098: XXXX 1710847585205, Entering Thread 1098: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1098 1710847585234 XXXX 1710847585234, Thread 1098: XXXX 1710847585234, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585235 XXXX 1710847585235, Thread 1098: XXXX 1710847585235, Entering Thread 1098: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1098 1710847585235 XXXX 1710847585235, Thread 1098: XXXX 1710847585235, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585235 XXXX 1710847585235, Thread 1098: XXXX 1710847585235, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1098 1710847585236 XXXX 1710847585236, Thread 1098: XXXX 1710847585236, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585236 XXXX 1710847585236, Thread 1098: XXXX 1710847585236, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1098 1710847585237 XXXX 1710847585237, Thread 1098: XXXX 1710847585237, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585237 XXXX 1710847585237, Thread 1098: XXXX 1710847585237, Entering Thread 1098: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1098 1710847585267 XXXX 1710847585267, Thread 1098: XXXX 1710847585267, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585267 XXXX 1710847585267, Thread 1098: XXXX 1710847585267, Entering Thread 1098: Commands::runScriptWithDownload, script name = WriteConfigmem +1098 1710847585283 XXXX 1710847585283, Thread 1098: XXXX 1710847585283, Exiting Thread 1098: Commands::runScriptWithDownload(WriteConfigmem) +1098 1710847585283 XXXX 1710847585283, Thread 1098: XXXX 1710847585283, Entering Thread 1098: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1098 1710847585285 XXXX 1710847585284, Thread 1098: XXXX 1710847585284, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585285 XXXX 1710847585285, Thread 1098: XXXX 1710847585285, Entering Thread 1098: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1098 1710847585285 XXXX 1710847585285, Thread 1098: XXXX 1710847585285, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585285 XXXX 1710847585285, Thread 1098: XXXX 1710847585285, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1098 1710847585286 XXXX 1710847585286, Thread 1098: XXXX 1710847585286, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585286 XXXX 1710847585286, Thread 1098: XXXX 1710847585286, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1098 1710847585287 XXXX 1710847585287, Thread 1098: XXXX 1710847585287, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585287 XXXX 1710847585287, Thread 1098: XXXX 1710847585287, Entering Thread 1098: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1098 1710847585317 XXXX 1710847585317, Thread 1098: XXXX 1710847585317, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585317 XXXX 1710847585317, Thread 1098: XXXX 1710847585317, Entering Thread 1098: Commands::runScriptWithUpload, script name = ReadConfigmem +1098 1710847585317 XXXX 1710847585317, Thread 1098: XXXX 1710847585317, Entering Thread 1098: ToolCommUsb::readTransfer, sideData is 0x55 bytes long, transferDataLength is 0x4 bytes long +1098 1710847585320 XXXX 1710847585320, Thread 1098: XXXX 1710847585320, Exiting Thread 1098: ToolCommUsb::readTransfer, cr.status = 0x0 +1098 1710847585320 XXXX 1710847585320, Thread 1098: XXXX 1710847585320, Exiting Thread 1098: Commands::runScriptWithUpload +1098 1710847585320 XXXX 1710847585320, Thread 1098: XXXX 1710847585320, Entering Thread 1098: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1098 1710847585321 XXXX 1710847585321, Thread 1098: XXXX 1710847585321, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585322 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1098 1710847585322 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1098 1710847585322 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1098 1710847585322 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1098 1710847585323 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1098 1710847585323 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1098 1710847585323 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1098 1710847585323 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = write, Mask = 00000000, Erase = false, Production Mode = true +1098 1710847585323 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 0, End = 65f, Buffer Length = 3264, Type = Pgm, Mask = 00000000 +1098 1710847585323 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2007, End = 2008, Buffer Length = 4, Type = Cfg, Mask = 00000000 +1098 1710847585323 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1098 1710847585323 XXXX 1710847585323, Thread 1098: XXXX 1710847585323, Entering Thread 1098: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1098 1710847585324 XXXX 1710847585324, Thread 1098: XXXX 1710847585324, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585324 XXXX 1710847585324, Thread 1098: XXXX 1710847585324, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1098 1710847585325 XXXX 1710847585325, Thread 1098: XXXX 1710847585325, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585325 XXXX 1710847585325, Thread 1098: XXXX 1710847585325, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1098 1710847585326 XXXX 1710847585326, Thread 1098: XXXX 1710847585326, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585326 XXXX 1710847585326, Thread 1098: XXXX 1710847585326, Entering Thread 1098: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1098 1710847585356 XXXX 1710847585356, Thread 1098: XXXX 1710847585356, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585356 XXXX 1710847585356, Thread 1098: XXXX 1710847585356, Entering Thread 1098: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1098 1710847585357 XXXX 1710847585357, Thread 1098: XXXX 1710847585357, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585357 XXXX 1710847585357, Thread 1098: XXXX 1710847585357, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1098 1710847585358 XXXX 1710847585358, Thread 1098: XXXX 1710847585358, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585358 XXXX 1710847585358, Thread 1098: XXXX 1710847585358, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1098 1710847585359 XXXX 1710847585359, Thread 1098: XXXX 1710847585359, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585359 XXXX 1710847585359, Thread 1098: XXXX 1710847585359, Entering Thread 1098: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1098 1710847585388 XXXX 1710847585388, Thread 1098: XXXX 1710847585388, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585388 XXXX 1710847585388, Thread 1098: XXXX 1710847585388, Entering Thread 1098: Commands::runScriptWithDownload, script name = WriteProgmem +1098 1710847586077 XXXX 1710847586077, Thread 1098: XXXX 1710847586077, Exiting Thread 1098: Commands::runScriptWithDownload(WriteProgmem) +1098 1710847586077 XXXX 1710847586077, Thread 1098: XXXX 1710847586077, Entering Thread 1098: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1098 1710847586079 XXXX 1710847586079, Thread 1098: XXXX 1710847586079, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586079 XXXX 1710847586079, Thread 1098: XXXX 1710847586079, Entering Thread 1098: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1098 1710847586080 XXXX 1710847586080, Thread 1098: XXXX 1710847586080, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586080 XXXX 1710847586080, Thread 1098: XXXX 1710847586080, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1098 1710847586081 XXXX 1710847586081, Thread 1098: XXXX 1710847586081, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586081 XXXX 1710847586081, Thread 1098: XXXX 1710847586081, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1098 1710847586082 XXXX 1710847586082, Thread 1098: XXXX 1710847586082, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586082 XXXX 1710847586082, Thread 1098: XXXX 1710847586082, Entering Thread 1098: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1098 1710847586112 XXXX 1710847586112, Thread 1098: XXXX 1710847586112, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586112 XXXX 1710847586112, Thread 1098: XXXX 1710847586112, Entering Thread 1098: Commands::runScriptWithUpload, script name = ReadProgmem +1098 1710847586112 XXXX 1710847586112, Thread 1098: XXXX 1710847586112, Entering Thread 1098: ToolCommUsb::readTransfer, sideData is 0x3d bytes long, transferDataLength is 0xcc0 bytes long +1098 1710847586187 XXXX 1710847586187, Thread 1098: XXXX 1710847586187, Exiting Thread 1098: ToolCommUsb::readTransfer, cr.status = 0x0 +1098 1710847586187 XXXX 1710847586187, Thread 1098: XXXX 1710847586187, Exiting Thread 1098: Commands::runScriptWithUpload +1098 1710847586187 XXXX 1710847586187, Thread 1098: XXXX 1710847586187, Entering Thread 1098: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1098 1710847586189 XXXX 1710847586189, Thread 1098: XXXX 1710847586189, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586189 XXXX 1710847586189, Thread 1098: XXXX 1710847586189, Entering Thread 1098: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1098 1710847586190 XXXX 1710847586190, Thread 1098: XXXX 1710847586190, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586190 XXXX 1710847586190, Thread 1098: XXXX 1710847586190, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1098 1710847586191 XXXX 1710847586191, Thread 1098: XXXX 1710847586191, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586191 XXXX 1710847586191, Thread 1098: XXXX 1710847586191, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1098 1710847586192 XXXX 1710847586192, Thread 1098: XXXX 1710847586192, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586192 XXXX 1710847586192, Thread 1098: XXXX 1710847586192, Entering Thread 1098: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1098 1710847586221 XXXX 1710847586221, Thread 1098: XXXX 1710847586221, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586221 XXXX 1710847586221, Thread 1098: XXXX 1710847586221, Entering Thread 1098: Commands::runScriptWithDownload, script name = WriteConfigmem +1098 1710847586235 XXXX 1710847586235, Thread 1098: XXXX 1710847586235, Exiting Thread 1098: Commands::runScriptWithDownload(WriteConfigmem) +1098 1710847586235 XXXX 1710847586235, Thread 1098: XXXX 1710847586235, Entering Thread 1098: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1098 1710847586237 XXXX 1710847586237, Thread 1098: XXXX 1710847586237, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586238 XXXX 1710847586238, Thread 1098: XXXX 1710847586238, Entering Thread 1098: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1098 1710847586238 XXXX 1710847586238, Thread 1098: XXXX 1710847586238, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586238 XXXX 1710847586238, Thread 1098: XXXX 1710847586238, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1098 1710847586239 XXXX 1710847586239, Thread 1098: XXXX 1710847586239, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586239 XXXX 1710847586239, Thread 1098: XXXX 1710847586239, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1098 1710847586240 XXXX 1710847586240, Thread 1098: XXXX 1710847586240, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586240 XXXX 1710847586240, Thread 1098: XXXX 1710847586240, Entering Thread 1098: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1098 1710847586270 XXXX 1710847586270, Thread 1098: XXXX 1710847586270, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586270 XXXX 1710847586270, Thread 1098: XXXX 1710847586270, Entering Thread 1098: Commands::runScriptWithUpload, script name = ReadConfigmem +1098 1710847586270 XXXX 1710847586270, Thread 1098: XXXX 1710847586270, Entering Thread 1098: ToolCommUsb::readTransfer, sideData is 0x55 bytes long, transferDataLength is 0x4 bytes long +1098 1710847586273 XXXX 1710847586273, Thread 1098: XXXX 1710847586273, Exiting Thread 1098: ToolCommUsb::readTransfer, cr.status = 0x0 +1098 1710847586273 XXXX 1710847586273, Thread 1098: XXXX 1710847586273, Exiting Thread 1098: Commands::runScriptWithUpload +1098 1710847586273 XXXX 1710847586273, Thread 1098: XXXX 1710847586273, Entering Thread 1098: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1098 1710847586275 XXXX 1710847586275, Thread 1098: XXXX 1710847586275, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586275 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1098 1710847586275 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1098 1710847586275 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1098 1710847586275 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1098 1710847586275 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:endOfOperations +1098 1710847586275 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1098 1710847586275 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 null +1098 1710847586275 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1098 1710847586275 XXXX 1710847586275, Thread 1098: XXXX 1710847586275, Entering Thread 1098: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1098 1710847586277 XXXX 1710847586277, Thread 1098: XXXX 1710847586277, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586277 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:endOfOperations +1098 1710847586277 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1098 1710847586277 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1098 1710847586277 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1098 1710847586279 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1098 1710847586279 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1098 1710847586279 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1098 1710847586279 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = releasefromreset, Mask = 00000000, Erase = false, Production Mode = true +1098 1710847586279 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1098 1710847586280 XXXX 1710847586280, Thread 1098: XXXX 1710847586280, Entering Thread 1098: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1098 1710847586281 XXXX 1710847586281, Thread 1098: XXXX 1710847586281, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586282 XXXX 1710847586282, Thread 1098: XXXX 1710847586282, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0x42, ... +1098 1710847586282 XXXX 1710847586282, Thread 1098: XXXX 1710847586282, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586283 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1098 1710847586283 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1098 1710847586283 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1098 1710847586283 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End +105 1710847718083 GEN4_CONNECT_DIAGNOSTICS:Calling Update on plug and play observer com.microchip.mplab.mdbcore.RI4Tool.RI4ToolBase$RI4PlugNPlayObserver@658e9694 +105 1710847718083 GEN4_CONNECT_DIAGNOSTICS:Entering plug and play Update(). Attached PID = 9036 +105 1710847718083 GEN4_CONNECT_DIAGNOSTICS:Entering MPLABCommEvent handler +105 1710847718083 GEN4_CONNECT_DIAGNOSTICS:MPLABCommEvent.pid = 9036 +105 1710847718083 GEN4_CONNECT_DIAGNOSTICS:eventType = MPLABCOMM_TOOL_UNPLUGGED +105 1710847718084 GEN4_CONNECT_DIAGNOSTICS:Exiting plug and play Update() +105 1710847718597 XXXX 1710847718596, Thread 105: com.Send returned false +105 1710847718600 XXXX 1710847718600, Thread 105: execCommand: exception after writeSideChanel null +105 1710847718600 GEN4_CONNECT_DIAGNOSTICS:Before MPLABCommTool.Connect() +105 1710847718600 GEN4_CONNECT_DIAGNOSTICS:After MPLABCommTool.Connect() +105 1710847718604 GEN4_CONNECT_DIAGNOSTICS:Calling Update on plug and play observer com.microchip.mplab.mdbcore.RI4Tool.RI4ToolBase$RI4PlugNPlayObserver@658e9694 +105 1710847718604 GEN4_CONNECT_DIAGNOSTICS:Entering plug and play Update(). Attached PID = 9036 +105 1710847718604 GEN4_CONNECT_DIAGNOSTICS:Entering MPLABCommEvent handler +105 1710847718604 GEN4_CONNECT_DIAGNOSTICS:MPLABCommEvent.pid = 9036 +105 1710847718604 GEN4_CONNECT_DIAGNOSTICS:eventType = MPLABCOMM_TOOL_PLUGGEDIN + +105 1710847718604 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:GetFirmwareInfo +105 1710847718604 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +105 1710847718604 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 null +105 1710847718604 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +105 1710847718617 XXXX 1710847718617, Thread 105: com.Send returned false +105 1710847718617 XXXX 1710847718617, Thread 105: execCommand: exception after writeSideChanel null +105 1710847718617 GEN4_CONNECT_DIAGNOSTICS:Exiting plug and play Update() + +1124 1710848256983 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:EstablishCommunincations +1124 1710848256983 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1124 1710848256983 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 com.microchip.mplab.mdbcore.PK5Tool.PK5Com@2e5a1960 +1124 1710848256983 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1124 1710848256983 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:EstablishCommunincations +1124 1710848256983 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1124 1710848256983 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 true +1124 1710848256983 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End + +1124 1710848256983 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:GetFirmwareInfo +1124 1710848256983 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1124 1710848256983 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 null +1124 1710848256983 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1124 1710848256984 XXXX 1710848256984, Thread 1124: com.Send returned false +1124 1710848256984 XXXX 1710848256984, Thread 1124: execCommand: exception after writeSideChanel null diff --git a/src/global/picamp-potentiometer.h b/src/global/picamp-potentiometer.h new file mode 100644 index 0000000..a1dd2b6 --- /dev/null +++ b/src/global/picamp-potentiometer.h @@ -0,0 +1,57 @@ +#ifndef POTENTIOMETER_H +#define POTENTIOMETER_H + +#include "registers.h" +// #[declarations:adc] +typedef enum _ADCChannelSelect { + // PIC16F887 + P887A_AN00 = 0b0000, + P887A_AN01 = 0b0001, + P887A_AN02 = 0b0010, + P887A_AN03 = 0b0011, + P887A_AN04 = 0b0100, + P887A_AN05 = 0b0101, + P887A_AN06 = 0b0110, + P887A_AN07 = 0b0111, + P887A_AN08 = 0b1000, + P887A_AN09 = 0b1001, + P887A_AN10 = 0b1010, + P887A_AN11 = 0b1011, + P887A_AN12 = 0b1100, + P887A_AN13 = 0b1101, + P887A_CVREF = 0b1110, // CVREF + P887A_FXREF = 0b1111, // Fixed Ref (0.6V fixed voltage reference) + // PIC16F1829 + P1829_AN00 = 0b00000, + P1829_AN01 = 0b00001, + P1829_AN02 = 0b00010, + P1829_AN03 = 0b00011, + P1829_AN04 = 0b00100, + P1829_AN05 = 0b00101, + P1829_AN06 = 0b00110, + P1829_AN07 = 0b00111, + P1829_AN08 = 0b01000, + P1829_AN09 = 0b01001, + P1829_AN10 = 0b01010, + P1829_AN11 = 0b01011, + P1829_TEMP = 0b11101, + P1829_DACO = 0b11110, + P1829_FVRB = 0b11111, +} ADCChannelSelect; + +typedef struct _ADCPins { + Reg GOnDONE; + Reg ADRESH; + Reg ADRESL; +} ADCPins; + +ADCPins ADC; + +void init_pot(picId id, ADCChannelSelect channel); +void _pot_init_887(ADCChannelSelect channel); +void _pot_init_1829(ADCChannelSelect channel); +int read_potentiometer(void); +void populate_step_array(int *array, int size, int potLimit); +int adc_to_step(int *stepArray, int size, int deadzone); + +#endif \ No newline at end of file diff --git a/src/global/picamp-rotary.h b/src/global/picamp-rotary.h new file mode 100644 index 0000000..75d889d --- /dev/null +++ b/src/global/picamp-rotary.h @@ -0,0 +1,44 @@ +#ifndef ROTARY_H +#define ROTARY_H + +#include "registers.h" + +// intcon = 0x0B +// OPTION_REG = 0x81 +// IOCB = 0x96 +// pin 17 = int pin? + +typedef enum { ROTATE_LEFT = 1, ROTATE_RIGHT = 2 } RotaryEncoderStates; +typedef enum { + IOCRB0 = 0, + IOCRB1 = 1, + IOCRB2 = 2, + IOCRB3 = 3, + IOCRB4 = 4, + IOCRB5 = 5, + IOCRB6 = 6, + IOCRB7 = 7 +} IOCPin; + +typedef struct _Encoder { + int LastState; + int Steps; + int Input; + int min; + int max; + int stepReq; + Reg pinA; + Reg pinB; + Reg encoderRail; + picId host; +} Encoder; + +Encoder encoder = {0, 0, 0}; + +void _rot_init_887(IOCPin pinA, IOCPin pinB); +void _rot_init_1829(); +void init_rot(picId id); +//void read_rotary(char pA, char pB, char *counter, char max, char min); +int read_rotary(void); + +#endif \ No newline at end of file diff --git a/src/global/registers.c b/src/global/registers.c new file mode 100644 index 0000000..aba7580 --- /dev/null +++ b/src/global/registers.c @@ -0,0 +1,25 @@ +#include "registers.h" + +void SetReg(Reg* R, unsigned char V) { + unsigned char bitMask; + V = (unsigned char) (V << R->offset); + bitMask = (unsigned char) (((1 << R->size) - 1) << R->offset); + *(R->address) &= ~bitMask; + *(R->address) |= V & bitMask; +} + +unsigned char GetReg(Reg* R) { + unsigned char V, bitMask; + bitMask = (unsigned char) (((1 << R->size) - 1) << R->offset); + V = *(R->address) & bitMask; + V = V >> R->offset; + return V; +} + +unsigned char SetRawReg(unsigned char* address, unsigned char size, unsigned char offset, unsigned char V) { + unsigned char bitMask; + V = (unsigned char) (V << offset); + bitMask = (unsigned char) (((1 << size) - 1) << offset); + *(address) &= ~bitMask; + *(address) |= V & bitMask; +} \ No newline at end of file diff --git a/src/global/registers.h b/src/global/registers.h new file mode 100644 index 0000000..1140550 --- /dev/null +++ b/src/global/registers.h @@ -0,0 +1,19 @@ +#ifndef REGISTERS_H +#define REGISTERS_H + +typedef enum _picId { + PIC16F1829, + PIC16F887A +} picId; + +typedef struct _Reg { + unsigned char* address; + unsigned char size; + unsigned char offset; +} Reg; + +void SetReg(Reg* R, unsigned char V); +unsigned char SetRawReg(unsigned char* address, unsigned char size, unsigned char offset, unsigned char V); +unsigned char GetReg(Reg* R); + +#endif \ No newline at end of file diff --git a/picamp.X/Makefile b/src/picamp-potentiometer.X/Makefile similarity index 100% rename from picamp.X/Makefile rename to src/picamp-potentiometer.X/Makefile diff --git a/picamp-potentiometer.X/nbproject/Makefile-default.mk b/src/picamp-potentiometer.X/nbproject/Makefile-default.mk similarity index 100% rename from picamp-potentiometer.X/nbproject/Makefile-default.mk rename to src/picamp-potentiometer.X/nbproject/Makefile-default.mk diff --git a/picamp-potentiometer.X/nbproject/Makefile-genesis.properties b/src/picamp-potentiometer.X/nbproject/Makefile-genesis.properties similarity index 100% rename from picamp-potentiometer.X/nbproject/Makefile-genesis.properties rename to src/picamp-potentiometer.X/nbproject/Makefile-genesis.properties diff --git a/picamp-potentiometer.X/nbproject/Makefile-impl.mk b/src/picamp-potentiometer.X/nbproject/Makefile-impl.mk similarity index 100% rename from picamp-potentiometer.X/nbproject/Makefile-impl.mk rename to src/picamp-potentiometer.X/nbproject/Makefile-impl.mk diff --git a/picamp-potentiometer.X/nbproject/Makefile-local-default.mk b/src/picamp-potentiometer.X/nbproject/Makefile-local-default.mk similarity index 100% rename from picamp-potentiometer.X/nbproject/Makefile-local-default.mk rename to src/picamp-potentiometer.X/nbproject/Makefile-local-default.mk diff --git a/picamp-potentiometer.X/nbproject/Makefile-variables.mk b/src/picamp-potentiometer.X/nbproject/Makefile-variables.mk similarity index 100% rename from picamp-potentiometer.X/nbproject/Makefile-variables.mk rename to src/picamp-potentiometer.X/nbproject/Makefile-variables.mk diff --git a/picamp-potentiometer.X/nbproject/configurations.xml b/src/picamp-potentiometer.X/nbproject/configurations.xml similarity index 100% rename from picamp-potentiometer.X/nbproject/configurations.xml rename to src/picamp-potentiometer.X/nbproject/configurations.xml diff --git a/picamp-potentiometer.X/nbproject/private/.LCKconfigurations.xml~ b/src/picamp-potentiometer.X/nbproject/private/.LCKconfigurations.xml~ similarity index 100% rename from picamp-potentiometer.X/nbproject/private/.LCKconfigurations.xml~ rename to src/picamp-potentiometer.X/nbproject/private/.LCKconfigurations.xml~ diff --git a/picamp-potentiometer.X/nbproject/private/configurations.xml b/src/picamp-potentiometer.X/nbproject/private/configurations.xml similarity index 100% rename from picamp-potentiometer.X/nbproject/private/configurations.xml rename to src/picamp-potentiometer.X/nbproject/private/configurations.xml diff --git a/picamp-potentiometer.X/nbproject/private/private.xml b/src/picamp-potentiometer.X/nbproject/private/private.xml similarity index 100% rename from picamp-potentiometer.X/nbproject/private/private.xml rename to src/picamp-potentiometer.X/nbproject/private/private.xml diff --git a/picamp-potentiometer.X/nbproject/project.xml b/src/picamp-potentiometer.X/nbproject/project.xml similarity index 100% rename from picamp-potentiometer.X/nbproject/project.xml rename to src/picamp-potentiometer.X/nbproject/project.xml diff --git a/src/picamp-potentiometer.X/picamp-potentiometer.c b/src/picamp-potentiometer.X/picamp-potentiometer.c new file mode 100644 index 0000000..bca6eb2 --- /dev/null +++ b/src/picamp-potentiometer.X/picamp-potentiometer.c @@ -0,0 +1,113 @@ +#include "../global/picamp-potentiometer.h" +#include "../global/registers.h" +// #include + +void _pot_delay() { + unsigned char counter = 1; // Delay Cycle to achieve 500Us delay (165) + while (--counter != 0) // Delay Timing is approximately 3 (3*2*2*2=24) usec per loop + continue; // Note this routine is for 4MHz (500khz) crystal frequency +} + +void init_pot(picId id, ADCChannelSelect channel) { + switch (id) { + case PIC16F1829: _pot_init_1829(channel); break; + case PIC16F887A: _pot_init_887(channel); break; + } +} + +//todo: add tris and ansel bit fields +void _pot_init_887(ADCChannelSelect channel) { + + SetRawReg((unsigned char *)0x01F, 1, 0, 1); // ADON + SetRawReg((unsigned char *)0x01F, 4, 2, channel); // CHS + SetRawReg((unsigned char *)0x01F, 2, 6, 0b00); // ADCS + SetRawReg((unsigned char *)0x09F, 2, 4, 0b00); // VCFG + SetRawReg((unsigned char *)0x09F, 1, 7, 1); // ADFM + + ADC = (ADCPins) { + .GOnDONE = { (unsigned char*) 0x01F, 1, 1 }, + .ADRESH = { (unsigned char*) 0x01E, 8, 0 }, + .ADRESL = { (unsigned char*) 0x09E, 8, 0 }, + }; + + // Memory space is limited on the pic, so we group the registers with the same value. + // .VCFG0 = { (unsigned char*) 0x01F, 1, 4 }, + // .VCFG1 = { (unsigned char*) 0x01F, 1, 5 }, + // .ADCS = { (unsigned char*) 0x01F, 1, 6 }, + // SetReg(&ADC.ADCS, 0); + // SetReg(&ADC.VCFG0, 0); + // SetReg(&ADC.VCFG1, 0); +// .ADON = { (unsigned char*) 0x01F, 1, 0 }, +// .CHS = { (unsigned char*) 0x01F, 4, 2 }, +// .ADCS = { (unsigned char*) 0x01F, 2, 6 }, +// .VCFG = { (unsigned char*) 0x09F, 2, 4 }, +// .ADFM = { (unsigned char*) 0x09F, 1, 7 }, + + // SetRawReg((unsigned char*) 0x01F, 1, 0, 1); + +// SetReg(&ADC.ADON, 1); + SetReg(&ADC.GOnDONE, 1); +// SetReg(&ADC.CHS, channel); +// SetReg(&ADC.VCFGADCS, 0b000); +// SetReg(&ADC.ADFM, 1); +} + +void _pot_init_1829(ADCChannelSelect channel) { + + SetRawReg((unsigned char *)0x09D, 1, 0, 1); // ADON + SetRawReg((unsigned char *)0x09D, 5, 2, channel); // CHS + SetRawReg((unsigned char *)0x09E, 5, 0, 0b00000); // VCFGADCS + SetRawReg((unsigned char *)0x09E, 1, 7, 1); // ADFM + + ADC = (ADCPins) { + .GOnDONE = { (unsigned char*) 0x09D, 1, 1 }, + .ADRESH = { (unsigned char*) 0x09C, 8, 0 }, + .ADRESL = { (unsigned char*) 0x09B, 8, 0 }, + }; + + // Just like the 887, memory space is limited. Structs take up a lot of space, + // so we group the registers with the same value. + // .ADON = { (unsigned char*) 0x09D, 1, 0 }, + // .CHS = { (unsigned char*) 0x09D, 5, 2 }, + // .VCFGADCS = { (unsigned char*) 0x09E, 5, 0 }, + // .ADFM = { (unsigned char*) 0x09E, 1, 7 }, + // .VCFG0 = { (unsigned char*) 0x09E, 2, 0 }, + // .VCFG1 = { (unsigned char*) 0x09E, 1, 2 }, + // .ADCS = { (unsigned char*) 0x09E, 3, 4 }, + // SetReg(&ADC.VCFG0, 0); + // SetReg(&ADC.VCFG1, 0); + // SetReg(&ADC.ADCS, 0); + // structs are only needed for re-used values outside of this function + +// SetReg(&ADC.ADON, 1); + SetReg(&ADC.GOnDONE, 1); +// SetReg(&ADC.CHS, channel); +// SetReg(&ADC.VCFGADCS, 0b00000); +// SetReg(&ADC.ADFM, 1); +} + +void populate_step_array(int *array, int size, int potLimit) { + array[0] = potLimit / (size + 1); + for (int i = 0; i < size; i++) { + array[i] = array[0] * (i + 1); + } +} + +int read_potentiometer() { + // Wait for regulating capacitor to charge + _pot_delay(); + + // Bit 2 of `ADCON0` is set to `1`, meaning `GO` will wait until + // ADC got a signal, converted analog to digital, etc. + SetReg(&ADC.GOnDONE, 1); + while (GetReg(&ADC.GOnDONE)) continue; + + // Read the data from the potmeter pin (`E2`) registers, and combine + // them into a single integer + return (GetReg(&ADC.ADRESH) << 8 | GetReg(&ADC.ADRESL)); +} + +//todo: fix! +int adc_to_step(int *stepArray, int size, int deadzone) { + return 0; +} \ No newline at end of file diff --git a/src/picamp-rotary.X/Makefile b/src/picamp-rotary.X/Makefile new file mode 100644 index 0000000..fca8e2c --- /dev/null +++ b/src/picamp-rotary.X/Makefile @@ -0,0 +1,113 @@ +# +# There exist several targets which are by default empty and which can be +# used for execution of your targets. These targets are usually executed +# before and after some main targets. They are: +# +# .build-pre: called before 'build' target +# .build-post: called after 'build' target +# .clean-pre: called before 'clean' target +# .clean-post: called after 'clean' target +# .clobber-pre: called before 'clobber' target +# .clobber-post: called after 'clobber' target +# .all-pre: called before 'all' target +# .all-post: called after 'all' target +# .help-pre: called before 'help' target +# .help-post: called after 'help' target +# +# Targets beginning with '.' are not intended to be called on their own. +# +# Main targets can be executed directly, and they are: +# +# build build a specific configuration +# clean remove built files from a configuration +# clobber remove all built files +# all build all configurations +# help print help mesage +# +# Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and +# .help-impl are implemented in nbproject/makefile-impl.mk. +# +# Available make variables: +# +# CND_BASEDIR base directory for relative paths +# CND_DISTDIR default top distribution directory (build artifacts) +# CND_BUILDDIR default top build directory (object files, ...) +# CONF name of current configuration +# CND_ARTIFACT_DIR_${CONF} directory of build artifact (current configuration) +# CND_ARTIFACT_NAME_${CONF} name of build artifact (current configuration) +# CND_ARTIFACT_PATH_${CONF} path to build artifact (current configuration) +# CND_PACKAGE_DIR_${CONF} directory of package (current configuration) +# CND_PACKAGE_NAME_${CONF} name of package (current configuration) +# CND_PACKAGE_PATH_${CONF} path to package (current configuration) +# +# NOCDDL + + +# Environment +MKDIR=mkdir +CP=cp +CCADMIN=CCadmin +RANLIB=ranlib + + +# build +build: .build-post + +.build-pre: +# Add your pre 'build' code here... + +.build-post: .build-impl +# Add your post 'build' code here... + + +# clean +clean: .clean-post + +.clean-pre: +# Add your pre 'clean' code here... +# WARNING: the IDE does not call this target since it takes a long time to +# simply run make. Instead, the IDE removes the configuration directories +# under build and dist directly without calling make. +# This target is left here so people can do a clean when running a clean +# outside the IDE. + +.clean-post: .clean-impl +# Add your post 'clean' code here... + + +# clobber +clobber: .clobber-post + +.clobber-pre: +# Add your pre 'clobber' code here... + +.clobber-post: .clobber-impl +# Add your post 'clobber' code here... + + +# all +all: .all-post + +.all-pre: +# Add your pre 'all' code here... + +.all-post: .all-impl +# Add your post 'all' code here... + + +# help +help: .help-post + +.help-pre: +# Add your pre 'help' code here... + +.help-post: .help-impl +# Add your post 'help' code here... + + + +# include project implementation makefile +include nbproject/Makefile-impl.mk + +# include project make variables +include nbproject/Makefile-variables.mk diff --git a/picamp-rotary.X/nbproject/.LCKconfigurations.xml~ b/src/picamp-rotary.X/nbproject/.LCKconfigurations.xml~ similarity index 100% rename from picamp-rotary.X/nbproject/.LCKconfigurations.xml~ rename to src/picamp-rotary.X/nbproject/.LCKconfigurations.xml~ diff --git a/picamp-rotary.X/nbproject/Makefile-default.mk b/src/picamp-rotary.X/nbproject/Makefile-default.mk similarity index 100% rename from picamp-rotary.X/nbproject/Makefile-default.mk rename to src/picamp-rotary.X/nbproject/Makefile-default.mk diff --git a/picamp-rotary.X/nbproject/Makefile-genesis.properties b/src/picamp-rotary.X/nbproject/Makefile-genesis.properties similarity index 100% rename from picamp-rotary.X/nbproject/Makefile-genesis.properties rename to src/picamp-rotary.X/nbproject/Makefile-genesis.properties diff --git a/picamp-rotary.X/nbproject/Makefile-impl.mk b/src/picamp-rotary.X/nbproject/Makefile-impl.mk similarity index 100% rename from picamp-rotary.X/nbproject/Makefile-impl.mk rename to src/picamp-rotary.X/nbproject/Makefile-impl.mk diff --git a/picamp-rotary.X/nbproject/Makefile-local-default.mk b/src/picamp-rotary.X/nbproject/Makefile-local-default.mk similarity index 100% rename from picamp-rotary.X/nbproject/Makefile-local-default.mk rename to src/picamp-rotary.X/nbproject/Makefile-local-default.mk diff --git a/picamp-rotary.X/nbproject/Makefile-variables.mk b/src/picamp-rotary.X/nbproject/Makefile-variables.mk similarity index 100% rename from picamp-rotary.X/nbproject/Makefile-variables.mk rename to src/picamp-rotary.X/nbproject/Makefile-variables.mk diff --git a/picamp-rotary.X/nbproject/configurations.xml b/src/picamp-rotary.X/nbproject/configurations.xml similarity index 100% rename from picamp-rotary.X/nbproject/configurations.xml rename to src/picamp-rotary.X/nbproject/configurations.xml diff --git a/picamp-rotary.X/nbproject/private/configurations.xml b/src/picamp-rotary.X/nbproject/private/configurations.xml similarity index 100% rename from picamp-rotary.X/nbproject/private/configurations.xml rename to src/picamp-rotary.X/nbproject/private/configurations.xml diff --git a/picamp-rotary.X/nbproject/private/private.xml b/src/picamp-rotary.X/nbproject/private/private.xml similarity index 100% rename from picamp-rotary.X/nbproject/private/private.xml rename to src/picamp-rotary.X/nbproject/private/private.xml diff --git a/picamp-rotary.X/nbproject/project.xml b/src/picamp-rotary.X/nbproject/project.xml similarity index 100% rename from picamp-rotary.X/nbproject/project.xml rename to src/picamp-rotary.X/nbproject/project.xml diff --git a/src/picamp-rotary.X/picamp-rotary.c b/src/picamp-rotary.X/picamp-rotary.c new file mode 100644 index 0000000..2dace3a --- /dev/null +++ b/src/picamp-rotary.X/picamp-rotary.c @@ -0,0 +1,115 @@ +#include "../global/picamp-rotary.h" +#include "../global/registers.h" + +void init_rot(picId id) { + switch (id) { + case PIC16F1829: _rot_init_1829(); break; + case PIC16F887A: _rot_init_887(IOCRB4, IOCRB5); break; + } + + encoder.LastState = 1; + encoder.Input = 1; + encoder.min = 0; + encoder.max = 4; + encoder.stepReq = 1; +} + + +void _rot_init_887(IOCPin pinA, IOCPin pinB) { + encoder.host = PIC16F887A; + //todo: Add anselb, trisb + SetRawReg((unsigned char*) 0x189, 1, 5, 0); // ANSEL.13 + SetRawReg((unsigned char*) 0x189, 1, 3, 0); // ANSEL.11 + SetRawReg((unsigned char*) 0x086, 1, 4, 1); // TRISB.4 + SetRawReg((unsigned char*) 0x086, 1, 5, 1); // TRISB.5 + + encoder.encoderRail = (Reg) { (unsigned char*) 0x006, 8, 0 }; + + SetRawReg((unsigned char*) 0x00B, 2, 3, 0b11); // RBIE, INTE + SetRawReg((unsigned char*) 0x00B, 2, 6, 0b11); // GIE, PEIE + SetRawReg((unsigned char*) 0x096, 1, pinA, 1); // IOC Pin A + SetRawReg((unsigned char*) 0x096, 1, pinB, 1); // IOC Pin B + SetRawReg((unsigned char*) 0x081, 1, 6, 0); // INTEDG + + encoder.pinA = (Reg) { (unsigned char*) 0x006, 1, 4 }; + encoder.pinB = (Reg) { (unsigned char*) 0x006, 1, 5 }; + // ROT = (ROTPins) { + // .RBIEINTE = { (unsigned char*) 0x00B, 2, 3 }, + // .RBIE = { (unsigned char*) 0x00B, 1, 3 }, + // .INTE = { (unsigned char*) 0x00B, 1, 4 }, + // .GIEPEIE = { (unsigned char*) 0x00B, 2, 6 }, + // .PEIE = { (unsigned char*) 0x00B, 1, 6 }, + // .GIE = { (unsigned char*) 0x00B, 1, 7 }, + // .IOCBA = { (unsigned char*) 0x096, 1, pinA }, // 0x0D + // .IOCBB = { (unsigned char*) 0x096, 1, pinB }, + // .INTEDG = { (unsigned char*) 0x081, 1, 6 }, + // .PORTB = { (unsigned char*) 0x106, 8, 0 }, + // .INTF = { (unsigned char*) 0x00B, 1, 1 }, + // .RBIF = { (unsigned char*) 0x00B, 1, 0 } + // }; + + // SetReg(&ROT.INTF, 0); + // SetReg(&ROT.RBIF, 0); + + // SetReg(&ROT.GIEPEIE, 0b11); + // SetReg(&ROT.RBIEINTE, 0b11); + // SetReg(&ROT.GIE, 1); + // SetReg(&ROT.INTE, 1); + // SetReg(&ROT.PEIE, 1); + // SetReg(&ROT.RBIE, 1); + // SetReg(&ROT.IOCBA, 1); + // SetReg(&ROT.IOCBB, 1); + // SetReg(&ROT.INTEDG, 0); + +} + +void _rot_init_1829() { + SetRawReg((unsigned char *)0x18C, 1, 0, 0); // ANSELA.0 + SetRawReg((unsigned char *)0x18C, 1, 1, 0); // ANSELA.1 + + SetRawReg((unsigned char *)0x08C, 1, 0, 1); // TRISA.0 + SetRawReg((unsigned char *)0x08C, 1, 1, 1); // TRISA.1 + + SetRawReg((unsigned char *)0x391, 1, 0, 1); // IOCAP.0 + SetRawReg((unsigned char *)0x391, 1, 1, 1); // IOCAP.1 + + SetRawReg((unsigned char *)0x00B, 1, 3, 1); // IOCIE + SetRawReg((unsigned char *)0x00B, 1, 4, 1); // INTE + SetRawReg((unsigned char *)0x00B, 1, 6, 1); // PEIE + SetRawReg((unsigned char *)0x00B, 1, 7, 1); // GIE + + encoder.pinA = (Reg) { (unsigned char*) 0x00C, 1, 0 }; + encoder.pinB = (Reg) { (unsigned char*) 0x00C, 1, 1 }; +} + +int read_rotary(void) { + // Only check for a change in the CLK pin to identify "full click" + int a = GetReg(&encoder.pinA); + + // If state changed, a movement is registered + if (a != encoder.LastState) { + int b = GetReg(&encoder.pinB); + + if (b != a) encoder.Steps++; // Clockwise + else encoder.Steps--; // Anti-clockwise + + // Only change counter if correct amount of clicks have been registered + if (encoder.Steps > (encoder.stepReq * 2)) { + encoder.Input++; + encoder.Steps = 0; + } else if (encoder.Steps < (-(encoder.stepReq * 2))) { + encoder.Input--; + encoder.Steps = 0; + } + + // Adjust counter for boundaries + if (encoder.Input < encoder.min) encoder.Input = encoder.max; + else if (encoder.Input > encoder.max) encoder.Input = encoder.min; + + encoder.LastState = a; + } + + if (encoder.host == PIC16F887A) SetReg(&encoder.encoderRail, GetReg(&encoder.encoderRail)); + + return encoder.Input; +} \ No newline at end of file diff --git a/src/picamp.X/Makefile b/src/picamp.X/Makefile new file mode 100644 index 0000000..fca8e2c --- /dev/null +++ b/src/picamp.X/Makefile @@ -0,0 +1,113 @@ +# +# There exist several targets which are by default empty and which can be +# used for execution of your targets. These targets are usually executed +# before and after some main targets. They are: +# +# .build-pre: called before 'build' target +# .build-post: called after 'build' target +# .clean-pre: called before 'clean' target +# .clean-post: called after 'clean' target +# .clobber-pre: called before 'clobber' target +# .clobber-post: called after 'clobber' target +# .all-pre: called before 'all' target +# .all-post: called after 'all' target +# .help-pre: called before 'help' target +# .help-post: called after 'help' target +# +# Targets beginning with '.' are not intended to be called on their own. +# +# Main targets can be executed directly, and they are: +# +# build build a specific configuration +# clean remove built files from a configuration +# clobber remove all built files +# all build all configurations +# help print help mesage +# +# Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and +# .help-impl are implemented in nbproject/makefile-impl.mk. +# +# Available make variables: +# +# CND_BASEDIR base directory for relative paths +# CND_DISTDIR default top distribution directory (build artifacts) +# CND_BUILDDIR default top build directory (object files, ...) +# CONF name of current configuration +# CND_ARTIFACT_DIR_${CONF} directory of build artifact (current configuration) +# CND_ARTIFACT_NAME_${CONF} name of build artifact (current configuration) +# CND_ARTIFACT_PATH_${CONF} path to build artifact (current configuration) +# CND_PACKAGE_DIR_${CONF} directory of package (current configuration) +# CND_PACKAGE_NAME_${CONF} name of package (current configuration) +# CND_PACKAGE_PATH_${CONF} path to package (current configuration) +# +# NOCDDL + + +# Environment +MKDIR=mkdir +CP=cp +CCADMIN=CCadmin +RANLIB=ranlib + + +# build +build: .build-post + +.build-pre: +# Add your pre 'build' code here... + +.build-post: .build-impl +# Add your post 'build' code here... + + +# clean +clean: .clean-post + +.clean-pre: +# Add your pre 'clean' code here... +# WARNING: the IDE does not call this target since it takes a long time to +# simply run make. Instead, the IDE removes the configuration directories +# under build and dist directly without calling make. +# This target is left here so people can do a clean when running a clean +# outside the IDE. + +.clean-post: .clean-impl +# Add your post 'clean' code here... + + +# clobber +clobber: .clobber-post + +.clobber-pre: +# Add your pre 'clobber' code here... + +.clobber-post: .clobber-impl +# Add your post 'clobber' code here... + + +# all +all: .all-post + +.all-pre: +# Add your pre 'all' code here... + +.all-post: .all-impl +# Add your post 'all' code here... + + +# help +help: .help-post + +.help-pre: +# Add your pre 'help' code here... + +.help-post: .help-impl +# Add your post 'help' code here... + + + +# include project implementation makefile +include nbproject/Makefile-impl.mk + +# include project make variables +include nbproject/Makefile-variables.mk diff --git a/src/picamp.X/config.h b/src/picamp.X/config.h new file mode 100644 index 0000000..2378569 --- /dev/null +++ b/src/picamp.X/config.h @@ -0,0 +1,104 @@ +#ifndef CONFIG_H +#define CONFIG_H + +// PIC16F887 Configuration Bit Settings +// #pragma config statements should precede project file includes. +#pragma config FOSC = INTRC_NOCLKOUT // Oscillator Selection bits (INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN) +#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register) +#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT disabled) +#pragma config MCLRE = OFF // RE3/MCLR pin function select bit (RE3/MCLR pin function is digital input, MCLR internally tied to VDD) +#pragma config CP = OFF // Code Protection bit (Program memory code protection is disabled) +#pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled) +#pragma config BOREN = ON // Brown Out Reset Selection bits (BOR enabled) +#pragma config IESO = OFF // Internal External Switchover bit (Internal/External Switchover mode is disabled) +#pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is disabled) +#pragma config LVP = OFF // Low Voltage Programming Enable bit (RB3 pin has digital I/O, HV on MCLR must be used for programming) +#pragma config BOR4V = BOR21V // Brown-out Reset Selection bit (Brown-out Reset set to 4.0V) +#pragma config WRT = OFF // Flash Program Memory Self Write Enable bits (Write protection off) + +// Used by the XC8 delay_ms(x) macro +#define _XTAL_FREQ 8000000 + +#define LED_AMOUNT 4 + +#define POT_LIMIT 1023 +#define DEADZONE 2 + +#include +#include "./libs/HCMS2913.X/h/HCMS2913.h" +#include "./libs/global/picamp-potentiometer.h" +#include "./libs/global/picamp-rotary.h" +#include "./libs/IR_LIB/IRLib_v7.X/IRLib_v7.h" + +//P moves right, M moves left +#define MOTOR_P PORTCbits.RC1 +#define MOTOR_Ptris TRISCbits.TRISC1 +#define MOTOR_M PORTCbits.RC0 +#define MOTOR_Mtris TRISCbits.TRISC0 + +#define LED1 PORTAbits.RA0 +#define LED2 PORTAbits.RA1 +#define LED3 PORTAbits.RA2 +#define LED4 PORTAbits.RA3 + +char selLoadString[8] = "SEL. 00"; +char volLoadString[8] = "VOL. 000"; + +//The screen on the right uses portc +const HCMS_settings screenSettings_1 = { + 1, + //spi buffer + &SSPBUF, + {&SSPCON, 0}, + {&SSPSTAT, 0}, + //spi data + {&PORTC, 3}, + {&TRISC, 4}, //SDI + {&TRISC, 5}, + {&TRISC, 3}, + //spi int + {&PIE1, 3}, + {&PIR1, 3}, + //spi settings + {&SSPCON, 4}, + {&SSPSTAT, 6}, + {&SSPCON, 5}, + {&SSPSTAT, 7}, + //screen pins + {&PORTC, 2}, + {&PORTC, 6}, + {&PORTC, 4}, + {&PORTC, 7} +}; + +const HCMS_settings screenSettings_2 = { + 1, + //spi buffer + &SSPBUF, + {&SSPCON, 0}, + {&SSPSTAT, 0}, + //spi data + {&PORTC, 3}, + {&TRISC, 4}, //SDI + {&TRISC, 5}, + {&TRISC, 3}, + //spi int + {&PIE1, 3}, + {&PIR1, 3}, + //spi settings + {&SSPCON, 4}, + {&SSPSTAT, 6}, + {&SSPCON, 5}, + {&SSPSTAT, 7}, + //screen pins + {&PORTD, 2}, + {&PORTD, 6}, + {&PORTD, 4}, + {&PORTD, 7} +}; + +#define _MTPR 211 +#define _MTPrSc 0b01 +#define _MTPoSc 0b0001 +#define _TTPrSc 0b11 +#endif diff --git a/src/picamp.X/libs/887demonstration.X/Makefile b/src/picamp.X/libs/887demonstration.X/Makefile new file mode 100644 index 0000000..fca8e2c --- /dev/null +++ b/src/picamp.X/libs/887demonstration.X/Makefile @@ -0,0 +1,113 @@ +# +# There exist several targets which are by default empty and which can be +# used for execution of your targets. These targets are usually executed +# before and after some main targets. They are: +# +# .build-pre: called before 'build' target +# .build-post: called after 'build' target +# .clean-pre: called before 'clean' target +# .clean-post: called after 'clean' target +# .clobber-pre: called before 'clobber' target +# .clobber-post: called after 'clobber' target +# .all-pre: called before 'all' target +# .all-post: called after 'all' target +# .help-pre: called before 'help' target +# .help-post: called after 'help' target +# +# Targets beginning with '.' are not intended to be called on their own. +# +# Main targets can be executed directly, and they are: +# +# build build a specific configuration +# clean remove built files from a configuration +# clobber remove all built files +# all build all configurations +# help print help mesage +# +# Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and +# .help-impl are implemented in nbproject/makefile-impl.mk. +# +# Available make variables: +# +# CND_BASEDIR base directory for relative paths +# CND_DISTDIR default top distribution directory (build artifacts) +# CND_BUILDDIR default top build directory (object files, ...) +# CONF name of current configuration +# CND_ARTIFACT_DIR_${CONF} directory of build artifact (current configuration) +# CND_ARTIFACT_NAME_${CONF} name of build artifact (current configuration) +# CND_ARTIFACT_PATH_${CONF} path to build artifact (current configuration) +# CND_PACKAGE_DIR_${CONF} directory of package (current configuration) +# CND_PACKAGE_NAME_${CONF} name of package (current configuration) +# CND_PACKAGE_PATH_${CONF} path to package (current configuration) +# +# NOCDDL + + +# Environment +MKDIR=mkdir +CP=cp +CCADMIN=CCadmin +RANLIB=ranlib + + +# build +build: .build-post + +.build-pre: +# Add your pre 'build' code here... + +.build-post: .build-impl +# Add your post 'build' code here... + + +# clean +clean: .clean-post + +.clean-pre: +# Add your pre 'clean' code here... +# WARNING: the IDE does not call this target since it takes a long time to +# simply run make. Instead, the IDE removes the configuration directories +# under build and dist directly without calling make. +# This target is left here so people can do a clean when running a clean +# outside the IDE. + +.clean-post: .clean-impl +# Add your post 'clean' code here... + + +# clobber +clobber: .clobber-post + +.clobber-pre: +# Add your pre 'clobber' code here... + +.clobber-post: .clobber-impl +# Add your post 'clobber' code here... + + +# all +all: .all-post + +.all-pre: +# Add your pre 'all' code here... + +.all-post: .all-impl +# Add your post 'all' code here... + + +# help +help: .help-post + +.help-pre: +# Add your pre 'help' code here... + +.help-post: .help-impl +# Add your post 'help' code here... + + + +# include project implementation makefile +include nbproject/Makefile-impl.mk + +# include project make variables +include nbproject/Makefile-variables.mk diff --git a/picamp.X/include/config.h b/src/picamp.X/libs/887demonstration.X/config.h similarity index 62% rename from picamp.X/include/config.h rename to src/picamp.X/libs/887demonstration.X/config.h index ab30f18..c8437cd 100644 --- a/picamp.X/include/config.h +++ b/src/picamp.X/libs/887demonstration.X/config.h @@ -1,9 +1,6 @@ #ifndef CONFIG_H #define CONFIG_H -// PIC hardware mapping -#include - // PIC16F887 Configuration Bit Settings // #pragma config statements should precede project file includes. #pragma config FOSC = INTRC_NOCLKOUT // Oscillator Selection bits (INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN) @@ -22,48 +19,9 @@ // Used by the XC8 delay_ms(x) macro #define _XTAL_FREQ 500000 -#define REA PORTBbits.RB4 -#define REB PORTBbits.RB5 - -#define NPN -#define PIC887A - -#define ENABLED 1 -#define DISABLED 0 - #define LED_AMOUNT 4 -#define POT_STEP_AMOUNT 10 #define POT_LIMIT 1023 -#define DEADZONE 15 - -#define SCK_PIN PORTCbits.RC3 -#define SDO_DDIR TRISCbits.TRISC5 // DDIR = Data DIRection -#define SDI_DDIR TRISCbits.TRISC4 -#define SCK_DDIR TRISCbits.TRISC3 -#define SSPM SSPCONbits.SSPM - -char selLoadString[8] = "SEL. 00"; -char volLoadString[8] = "VOL. 000"; -char volumeBuffer[40]; -char selectBuffer[40]; - - -//screen 1, right side -#define RESET_1 PORTCbits.RC2 -#define CENABLE_1 PORTCbits.RC4 -#define BLANK_1 PORTCbits.RC6 -#define RSELECT_1 PORTCbits.RC7 - -#define RESET_PINNUM 2 -#define CENABLE_PINNUM 4 -#define BLANK_PINNUM 6 -#define RSELECT_PINNUM 7 - -//screen 2, left side -#define RESET_2 PORTDbits.RD2 -#define CENABLE_2 PORTDbits.RD4 -#define BLANK_2 PORTDbits.RD6 -#define RSELECT_2 PORTDbits.RD7 +#define DEADZONE 2 #endif diff --git a/src/picamp.X/libs/887demonstration.X/main.c b/src/picamp.X/libs/887demonstration.X/main.c new file mode 100644 index 0000000..2af629f --- /dev/null +++ b/src/picamp.X/libs/887demonstration.X/main.c @@ -0,0 +1,87 @@ +#include "./config.h" + +#include +#include "../global/picamp-potentiometer.h" +#include "../global/picamp-rotary.h" + +// Function declarations +void pic_init(void); +void init_gpio(void); +void init_osc(void); +void pic_loop(void); + +int count = 0; + +void main(void) { + // Do all initialisation here + pic_init(); + // Start indefinite program loop + pic_loop(); +} + +void pic_loop(void) { + // Initialize potentiometer step array + int stepArray[LED_AMOUNT] = { 0 }; + populate_step_array(stepArray, LED_AMOUNT, POT_LIMIT); + + while (1) { + // Do not display the LEDs if input selector is > 0 + if (count != 0) continue; + // Parse result from potentiometer + int result = read_potentiometer(); + // Read the data from the potmeter pin (`E2`) registers, and combine + // them into a single integer + // Loop through all `stepArray`, check if the output of the potmeter + // (on `ADRES`) falls inbetween the steps - `DEADZONE`, if so execute + // An OR/AND bitshift operation in order to turn on the corresponding + // LED on `PORTA`. + for (int i = 0; i < LED_AMOUNT; i++) { + if (result > (stepArray[i] - DEADZONE)) { + PORTA = (unsigned char)(PORTA & ~(1 << i)); + } else if (result <= (stepArray[i] - DEADZONE)) { + PORTA = (unsigned char)(PORTA | (1 << i)); + } + } + // int step = adc_to_step(*stepArray, LED_AMOUNT, DEADZONE); + // PORTA = (unsigned char)(PORTA | (1 << step)); + } +} + +void pic_init(void) { + init_osc(); + init_pot(PIC16F887A, P887A_AN07); + init_rot(PIC16F887A); + init_gpio(); +} + +// #[initialisation:gpio] +void init_gpio(void) { + // LED => output, digital (transistors) + TRISA = 0x00; + PORTA = 0xFF; + ANSEL = 0; +} + +// #[initialisation:osc] +void init_osc(void) { + // System Clock Select (SCS) + OSCCONbits.SCS = 0b1; // Internal Clock selected + // Internal Resistor-Capacitor Frequency select (IRCF) + OSCCONbits.IRCF = 0b011; // 500 kHz clock speed + OSCCONbits.OSTS = 0b1; // OSC startup time + + // Halt boot until clock is stable + while (OSCCONbits.HTS != 0b1); +} + +// #[routine:interrupt_service] +void __interrupt() isr(void) { + if (INTCONbits.RBIF == 1) { + // Parse rotary changes into `count`, shift it into `PORTA` + count = read_rotary(); + PORTA = (unsigned char)(~(1 << count)); + + // Clear the Port B change interrupt flag + INTCONbits.RBIF = 0; + } +} diff --git a/src/picamp.X/libs/887demonstration.X/nbproject/Makefile-default.mk b/src/picamp.X/libs/887demonstration.X/nbproject/Makefile-default.mk new file mode 100644 index 0000000..6ca2286 --- /dev/null +++ b/src/picamp.X/libs/887demonstration.X/nbproject/Makefile-default.mk @@ -0,0 +1,162 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a -pre and a -post target defined where you can add customized code. +# +# This makefile implements configuration specific macros and targets. + + +# Include project Makefile +ifeq "${IGNORE_LOCAL}" "TRUE" +# do not include local makefile. User is passing all local related variables already +else +include Makefile +# Include makefile containing local settings +ifeq "$(wildcard nbproject/Makefile-local-default.mk)" "nbproject/Makefile-local-default.mk" +include nbproject/Makefile-local-default.mk +endif +endif + +# Environment +MKDIR=mkdir -p +RM=rm -f +MV=mv +CP=cp + +# Macros +CND_CONF=default +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +IMAGE_TYPE=debug +OUTPUT_SUFFIX=elf +DEBUGGABLE_SUFFIX=elf +FINAL_IMAGE=${DISTDIR}/887demonstration.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +else +IMAGE_TYPE=production +OUTPUT_SUFFIX=hex +DEBUGGABLE_SUFFIX=elf +FINAL_IMAGE=${DISTDIR}/887demonstration.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +endif + +ifeq ($(COMPARE_BUILD), true) +COMPARISON_BUILD=-mafrlcsj +else +COMPARISON_BUILD= +endif + +# Object Directory +OBJECTDIR=build/${CND_CONF}/${IMAGE_TYPE} + +# Distribution Directory +DISTDIR=dist/${CND_CONF}/${IMAGE_TYPE} + +# Source Files Quoted if spaced +SOURCEFILES_QUOTED_IF_SPACED=main.c + +# Object Files Quoted if spaced +OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/main.p1 +POSSIBLE_DEPFILES=${OBJECTDIR}/main.p1.d + +# Object Files +OBJECTFILES=${OBJECTDIR}/main.p1 + +# Source Files +SOURCEFILES=main.c + + + +CFLAGS= +ASFLAGS= +LDLIBSOPTIONS= + +############# Tool locations ########################################## +# If you copy a project from one host to another, the path where the # +# compiler is installed may be different. # +# If you open this project with MPLAB X in the new host, this # +# makefile will be regenerated and the paths will be corrected. # +####################################################################### +# fixDeps replaces a bunch of sed/cat/printf statements that slow down the build +FIXDEPS=fixDeps + +.build-conf: ${BUILD_SUBPROJECTS} +ifneq ($(INFORMATION_MESSAGE), ) + @echo $(INFORMATION_MESSAGE) +endif + ${MAKE} -f nbproject/Makefile-default.mk ${DISTDIR}/887demonstration.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} + +MP_PROCESSOR_OPTION=16F887 +# ------------------------------------------------------------------------------------ +# Rules for buildStep: compile +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +${OBJECTDIR}/main.p1: main.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/main.p1.d + @${RM} ${OBJECTDIR}/main.p1 + ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -mdebugger=pickit5 -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/main.p1 main.c + @-${MV} ${OBJECTDIR}/main.d ${OBJECTDIR}/main.p1.d + @${FIXDEPS} ${OBJECTDIR}/main.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ + +else +${OBJECTDIR}/main.p1: main.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/main.p1.d + @${RM} ${OBJECTDIR}/main.p1 + ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/main.p1 main.c + @-${MV} ${OBJECTDIR}/main.d ${OBJECTDIR}/main.p1.d + @${FIXDEPS} ${OBJECTDIR}/main.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ + +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: assemble +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: assembleWithPreprocess +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: link +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +${DISTDIR}/887demonstration.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk ../new-potlib.X/dist/default/debug/new-potlib.X.a ../new-rotlib.X/dist/default/debug/new-rotlib.X.a + @${MKDIR} ${DISTDIR} + ${MP_CC} $(MP_EXTRA_LD_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -Wl,-Map=${DISTDIR}/887demonstration.X.${IMAGE_TYPE}.map -D__DEBUG=1 -mdebugger=pickit5 -DXPRJ_default=$(CND_CONF) -Wl,--defsym=__MPLAB_BUILD=1 -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -mrom=default,-1f00-1ffe -mram=default,-0-0,-70-70,-80-80,-f0-f0,-100-100,-170-170,-180-180,-1e5-1f0 $(COMPARISON_BUILD) -Wl,--memorysummary,${DISTDIR}/memoryfile.xml -o ${DISTDIR}/887demonstration.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED} ../new-potlib.X/dist/default/debug/new-potlib.X.a ../new-rotlib.X/dist/default/debug/new-rotlib.X.a + @${RM} ${DISTDIR}/887demonstration.X.${IMAGE_TYPE}.hex + + +else +${DISTDIR}/887demonstration.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk ../new-potlib.X/dist/default/production/new-potlib.X.a ../new-rotlib.X/dist/default/production/new-rotlib.X.a + @${MKDIR} ${DISTDIR} + ${MP_CC} $(MP_EXTRA_LD_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -Wl,-Map=${DISTDIR}/887demonstration.X.${IMAGE_TYPE}.map -DXPRJ_default=$(CND_CONF) -Wl,--defsym=__MPLAB_BUILD=1 -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits -std=c99 -gdwarf-3 -mstack=compiled:auto:auto $(COMPARISON_BUILD) -Wl,--memorysummary,${DISTDIR}/memoryfile.xml -o ${DISTDIR}/887demonstration.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED} ../new-potlib.X/dist/default/production/new-potlib.X.a ../new-rotlib.X/dist/default/production/new-rotlib.X.a + + +endif + + +# Subprojects +.build-subprojects: + cd ../new-potlib.X && ${MAKE} -f Makefile CONF=default + cd ../new-rotlib.X && ${MAKE} -f Makefile CONF=default + + +# Subprojects +.clean-subprojects: + cd ../new-potlib.X && rm -rf "build/default" "dist/default" + cd ../new-rotlib.X && rm -rf "build/default" "dist/default" + +# Clean Targets +.clean-conf: ${CLEAN_SUBPROJECTS} + ${RM} -r ${OBJECTDIR} + ${RM} -r ${DISTDIR} + +# Enable dependency checking +.dep.inc: .depcheck-impl + +DEPFILES=$(wildcard ${POSSIBLE_DEPFILES}) +ifneq (${DEPFILES},) +include ${DEPFILES} +endif diff --git a/src/picamp.X/libs/887demonstration.X/nbproject/Makefile-genesis.properties b/src/picamp.X/libs/887demonstration.X/nbproject/Makefile-genesis.properties new file mode 100644 index 0000000..c8e994b --- /dev/null +++ b/src/picamp.X/libs/887demonstration.X/nbproject/Makefile-genesis.properties @@ -0,0 +1,13 @@ +# +#Thu Mar 28 15:09:41 CET 2024 +default.languagetoolchain.version=2.46 +default.Pack.dfplocation=/home/burhan/.mchp_packs/Microchip/PIC16Fxxx_DFP/1.4.149 +default.com-microchip-mplab-mdbcore-PK5Tool-PK5ToolImpl.md5=8ed9aa4326bfc0c1a849e697826741b7 +conf.ids=default +default.languagetoolchain.dir=/home/burhan/.local/share/microchip/xc8/v2.46/bin +host.id=1odb-89vf-4o +configurations-xml=3c69dd47796b61a74071670903c16b5b +com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=f612087c95360c842296d189edfe3321 +default.com-microchip-mplab-nbide-toolchain-xc8-XC8LanguageToolchain.md5=bf89cdcdd6c0a49174fe4b605ef2b42d +proj.dir=/home/burhan/Desktop/PROJ ES/(WIP)Definitive/PIC16F887_AMPINTERFACE.X/libs/887demonstration.X +host.platform=linux diff --git a/src/picamp.X/libs/887demonstration.X/nbproject/Makefile-impl.mk b/src/picamp.X/libs/887demonstration.X/nbproject/Makefile-impl.mk new file mode 100644 index 0000000..73fd138 --- /dev/null +++ b/src/picamp.X/libs/887demonstration.X/nbproject/Makefile-impl.mk @@ -0,0 +1,69 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a pre- and a post- target defined where you can add customization code. +# +# This makefile implements macros and targets common to all configurations. +# +# NOCDDL + + +# Building and Cleaning subprojects are done by default, but can be controlled with the SUB +# macro. If SUB=no, subprojects will not be built or cleaned. The following macro +# statements set BUILD_SUB-CONF and CLEAN_SUB-CONF to .build-reqprojects-conf +# and .clean-reqprojects-conf unless SUB has the value 'no' +SUB_no=NO +SUBPROJECTS=${SUB_${SUB}} +BUILD_SUBPROJECTS_=.build-subprojects +BUILD_SUBPROJECTS_NO= +BUILD_SUBPROJECTS=${BUILD_SUBPROJECTS_${SUBPROJECTS}} +CLEAN_SUBPROJECTS_=.clean-subprojects +CLEAN_SUBPROJECTS_NO= +CLEAN_SUBPROJECTS=${CLEAN_SUBPROJECTS_${SUBPROJECTS}} + + +# Project Name +PROJECTNAME=887demonstration.X + +# Active Configuration +DEFAULTCONF=default +CONF=${DEFAULTCONF} + +# All Configurations +ALLCONFS=default + + +# build +.build-impl: .build-pre + ${MAKE} -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .build-conf + + +# clean +.clean-impl: .clean-pre + ${MAKE} -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .clean-conf + +# clobber +.clobber-impl: .clobber-pre .depcheck-impl + ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=default clean + + + +# all +.all-impl: .all-pre .depcheck-impl + ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=default build + + + +# dependency checking support +.depcheck-impl: +# @echo "# This code depends on make tool being used" >.dep.inc +# @if [ -n "${MAKE_VERSION}" ]; then \ +# echo "DEPFILES=\$$(wildcard \$$(addsuffix .d, \$${OBJECTFILES}))" >>.dep.inc; \ +# echo "ifneq (\$${DEPFILES},)" >>.dep.inc; \ +# echo "include \$${DEPFILES}" >>.dep.inc; \ +# echo "endif" >>.dep.inc; \ +# else \ +# echo ".KEEP_STATE:" >>.dep.inc; \ +# echo ".KEEP_STATE_FILE:.make.state.\$${CONF}" >>.dep.inc; \ +# fi diff --git a/picamp.X/nbproject/Makefile-local-default.mk b/src/picamp.X/libs/887demonstration.X/nbproject/Makefile-local-default.mk similarity index 97% rename from picamp.X/nbproject/Makefile-local-default.mk rename to src/picamp.X/libs/887demonstration.X/nbproject/Makefile-local-default.mk index 305de11..33e01a1 100644 --- a/picamp.X/nbproject/Makefile-local-default.mk +++ b/src/picamp.X/libs/887demonstration.X/nbproject/Makefile-local-default.mk @@ -33,3 +33,4 @@ MP_CC_DIR="/home/burhan/.local/share/microchip/xc8/v2.46/bin" MP_AS_DIR="/home/burhan/.local/share/microchip/xc8/v2.46/bin" MP_LD_DIR="/home/burhan/.local/share/microchip/xc8/v2.46/bin" MP_AR_DIR="/home/burhan/.local/share/microchip/xc8/v2.46/bin" +DFP_DIR=/home/burhan/.mchp_packs/Microchip/PIC16Fxxx_DFP/1.4.149 diff --git a/src/picamp.X/libs/887demonstration.X/nbproject/Makefile-variables.mk b/src/picamp.X/libs/887demonstration.X/nbproject/Makefile-variables.mk new file mode 100644 index 0000000..984bf92 --- /dev/null +++ b/src/picamp.X/libs/887demonstration.X/nbproject/Makefile-variables.mk @@ -0,0 +1,10 @@ +# +# Generated - do not edit! +# +# NOCDDL +# +CND_BASEDIR=`pwd` +# default configuration +CND_ARTIFACT_DIR_default=dist/default/production +CND_ARTIFACT_NAME_default=887demonstration.X.production.hex +CND_ARTIFACT_PATH_default=dist/default/production/887demonstration.X.production.hex diff --git a/picamp.X/nbproject/configurations.xml b/src/picamp.X/libs/887demonstration.X/nbproject/configurations.xml similarity index 72% rename from picamp.X/nbproject/configurations.xml rename to src/picamp.X/libs/887demonstration.X/nbproject/configurations.xml index 6944ca5..d39b246 100644 --- a/picamp.X/nbproject/configurations.xml +++ b/src/picamp.X/libs/887demonstration.X/nbproject/configurations.xml @@ -4,14 +4,9 @@ - - include/config.h - include/initialisation.h - include/rotary_encoder.h - include/potentiometer.h - include/HCMS2913.h - include/ascii.h - + config.h + ../global/picamp-potentiometer.h + ../global/picamp-rotary.h - - src/initialisation.c - src/main.c - src/HCMS2913.c - + main.c + ../new-potlib.X . + ../global Makefile @@ -43,10 +36,10 @@ PIC16F887 - pk4hybrid + PK5Tool XC8 2.46 - 2 + 3 @@ -57,37 +50,37 @@ - + OP="dist/default/production/new-potlib.X.a" + DOP="dist/default/debug/new-potlib.X.a" + FL="dist/default/production/new-potlib.X.a" + PD="dist/default/production/new-potlib.X.a" + DD="dist/default/debug/new-potlib.X.a"> - + OP="dist/default/production/new-rotlib.X.a" + DOP="dist/default/debug/new-rotlib.X.a" + FL="dist/default/production/new-rotlib.X.a" + PD="dist/default/production/new-rotlib.X.a" + DD="dist/default/debug/new-rotlib.X.a"> @@ -227,9 +220,7 @@ - - + @@ -272,11 +263,9 @@ - - @@ -293,9 +282,7 @@ - - + @@ -306,14 +293,11 @@ - - @@ -347,72 +331,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/picamp.X/libs/887demonstration.X/nbproject/private/configurations.xml b/src/picamp.X/libs/887demonstration.X/nbproject/private/configurations.xml new file mode 100644 index 0000000..bc01067 --- /dev/null +++ b/src/picamp.X/libs/887demonstration.X/nbproject/private/configurations.xml @@ -0,0 +1,25 @@ + + + Makefile + 0 + + + :=MPLABComm-USB-Microchip:=<vid>04D8:=<pid>9036:=<rev>0100:=<man>Microchip Technology Incorporated:=<prod>MPLAB PICkit 5:=<sn>020026702RYN005435:=<drv>x:=<xpt>b:=end + /home/burhan/.local/share/microchip/xc8/v2.46/bin + + place holder 1 + place holder 2 + + + + + true + 0 + 0 + 0 + + + + + + diff --git a/src/picamp.X/libs/887demonstration.X/nbproject/private/private.xml b/src/picamp.X/libs/887demonstration.X/nbproject/private/private.xml new file mode 100644 index 0000000..6807a2b --- /dev/null +++ b/src/picamp.X/libs/887demonstration.X/nbproject/private/private.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/picamp.X/libs/887demonstration.X/nbproject/project.xml b/src/picamp.X/libs/887demonstration.X/nbproject/project.xml new file mode 100644 index 0000000..411a56d --- /dev/null +++ b/src/picamp.X/libs/887demonstration.X/nbproject/project.xml @@ -0,0 +1,30 @@ + + + com.microchip.mplab.nbide.embedded.makeproject + + + 887demonstration + 189ceae8-574f-4402-aade-2932cf45a0a7 + 0 + ISO-8859-1 + + ../new-potlib.X + ../new-rotlib.X + + + ../new-potlib.X + . + ../global + + + + default + 2 + + + + false + + + + diff --git a/src/picamp.X/libs/887demonstration.X/queuelogs/debugtool b/src/picamp.X/libs/887demonstration.X/queuelogs/debugtool new file mode 100644 index 0000000..2759a99 --- /dev/null +++ b/src/picamp.X/libs/887demonstration.X/queuelogs/debugtool @@ -0,0 +1,1038 @@ +1060 1710847534790 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End + +1060 1710847534801 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1060 1710847534801 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1060 1710847534801 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1060 1710847534801 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = erase, Mask = 00000000, Erase = false, Production Mode = true +1060 1710847534801 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 0, End = 1fff, Buffer Length = 0, Type = Pgm, Mask = 00000000 +1060 1710847534801 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2007, End = 2008, Buffer Length = 0, Type = Cfg, Mask = 00000000 +1060 1710847534801 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 0, End = ff, Buffer Length = 0, Type = EEData, Mask = 00000000 +1060 1710847534801 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2000, End = 2003, Buffer Length = 0, Type = UserID, Mask = 00000000 +1060 1710847534801 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1060 1710847534801 XXXX 1710847534801, Thread 1060: XXXX 1710847534801, Entering Thread 1060: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1060 1710847534803 XXXX 1710847534803, Thread 1060: XXXX 1710847534803, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534803 XXXX 1710847534803, Thread 1060: XXXX 1710847534803, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1060 1710847534804 XXXX 1710847534804, Thread 1060: XXXX 1710847534804, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534804 XXXX 1710847534804, Thread 1060: XXXX 1710847534804, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1060 1710847534805 XXXX 1710847534805, Thread 1060: XXXX 1710847534805, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534805 XXXX 1710847534805, Thread 1060: XXXX 1710847534805, Entering Thread 1060: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1060 1710847534835 XXXX 1710847534835, Thread 1060: XXXX 1710847534835, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534835 XXXX 1710847534835, Thread 1060: XXXX 1710847534835, Entering Thread 1060: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1060 1710847534836 XXXX 1710847534836, Thread 1060: XXXX 1710847534836, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534837 XXXX 1710847534837, Thread 1060: XXXX 1710847534836, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1060 1710847534837 XXXX 1710847534837, Thread 1060: XXXX 1710847534837, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534838 XXXX 1710847534838, Thread 1060: XXXX 1710847534838, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1060 1710847534838 XXXX 1710847534838, Thread 1060: XXXX 1710847534838, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534838 XXXX 1710847534838, Thread 1060: XXXX 1710847534838, Entering Thread 1060: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1060 1710847534868 XXXX 1710847534868, Thread 1060: XXXX 1710847534868, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534868 XXXX 1710847534868, Thread 1060: XXXX 1710847534868, Entering Thread 1060: Commands::runScriptBasic, script name = EraseChip, timeOut = 30000 ms +1060 1710847534875 XXXX 1710847534875, Thread 1060: XXXX 1710847534875, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534875 XXXX 1710847534875, Thread 1060: XXXX 1710847534875, Entering Thread 1060: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1060 1710847534877 XXXX 1710847534877, Thread 1060: XXXX 1710847534877, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534877 XXXX 1710847534877, Thread 1060: XXXX 1710847534877, Entering Thread 1060: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1060 1710847534878 XXXX 1710847534878, Thread 1060: XXXX 1710847534878, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534878 XXXX 1710847534878, Thread 1060: XXXX 1710847534878, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1060 1710847534879 XXXX 1710847534879, Thread 1060: XXXX 1710847534879, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534879 XXXX 1710847534879, Thread 1060: XXXX 1710847534879, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1060 1710847534880 XXXX 1710847534880, Thread 1060: XXXX 1710847534880, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534880 XXXX 1710847534880, Thread 1060: XXXX 1710847534880, Entering Thread 1060: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1060 1710847534910 XXXX 1710847534910, Thread 1060: XXXX 1710847534910, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534910 XXXX 1710847534910, Thread 1060: XXXX 1710847534910, Entering Thread 1060: Commands::runScriptBasic, script name = EraseDataEEmem, timeOut = 30000 ms +1060 1710847534917 XXXX 1710847534917, Thread 1060: XXXX 1710847534917, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534917 XXXX 1710847534917, Thread 1060: XXXX 1710847534917, Entering Thread 1060: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1060 1710847534919 XXXX 1710847534919, Thread 1060: XXXX 1710847534919, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534919 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1060 1710847534919 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1060 1710847534919 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1060 1710847534919 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1060 1710847534919 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1060 1710847534919 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1060 1710847534919 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1060 1710847534919 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = write, Mask = 00000000, Erase = false, Production Mode = true +1060 1710847534919 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2007, End = 2008, Buffer Length = 4, Type = Cfg, Mask = 00000000 +1060 1710847534919 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1060 1710847534919 XXXX 1710847534919, Thread 1060: XXXX 1710847534919, Entering Thread 1060: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1060 1710847534921 XXXX 1710847534921, Thread 1060: XXXX 1710847534921, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534921 XXXX 1710847534921, Thread 1060: XXXX 1710847534921, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1060 1710847534922 XXXX 1710847534922, Thread 1060: XXXX 1710847534922, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534922 XXXX 1710847534922, Thread 1060: XXXX 1710847534922, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1060 1710847534922 XXXX 1710847534922, Thread 1060: XXXX 1710847534922, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534922 XXXX 1710847534922, Thread 1060: XXXX 1710847534922, Entering Thread 1060: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1060 1710847534952 XXXX 1710847534952, Thread 1060: XXXX 1710847534952, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534953 XXXX 1710847534953, Thread 1060: XXXX 1710847534953, Entering Thread 1060: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1060 1710847534953 XXXX 1710847534953, Thread 1060: XXXX 1710847534953, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534953 XXXX 1710847534953, Thread 1060: XXXX 1710847534953, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1060 1710847534954 XXXX 1710847534954, Thread 1060: XXXX 1710847534954, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534954 XXXX 1710847534954, Thread 1060: XXXX 1710847534954, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1060 1710847534955 XXXX 1710847534955, Thread 1060: XXXX 1710847534955, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534955 XXXX 1710847534955, Thread 1060: XXXX 1710847534955, Entering Thread 1060: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1060 1710847534985 XXXX 1710847534985, Thread 1060: XXXX 1710847534985, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847534985 XXXX 1710847534985, Thread 1060: XXXX 1710847534985, Entering Thread 1060: Commands::runScriptWithDownload, script name = WriteConfigmem +1060 1710847534999 XXXX 1710847534999, Thread 1060: XXXX 1710847534999, Exiting Thread 1060: Commands::runScriptWithDownload(WriteConfigmem) +1060 1710847534999 XXXX 1710847534999, Thread 1060: XXXX 1710847534999, Entering Thread 1060: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1060 1710847535001 XXXX 1710847535001, Thread 1060: XXXX 1710847535001, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535001 XXXX 1710847535001, Thread 1060: XXXX 1710847535001, Entering Thread 1060: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1060 1710847535002 XXXX 1710847535002, Thread 1060: XXXX 1710847535002, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535002 XXXX 1710847535002, Thread 1060: XXXX 1710847535002, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1060 1710847535003 XXXX 1710847535003, Thread 1060: XXXX 1710847535003, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535003 XXXX 1710847535003, Thread 1060: XXXX 1710847535003, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1060 1710847535004 XXXX 1710847535004, Thread 1060: XXXX 1710847535004, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535004 XXXX 1710847535004, Thread 1060: XXXX 1710847535004, Entering Thread 1060: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1060 1710847535033 XXXX 1710847535033, Thread 1060: XXXX 1710847535033, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535033 XXXX 1710847535033, Thread 1060: XXXX 1710847535033, Entering Thread 1060: Commands::runScriptWithUpload, script name = ReadConfigmem +1060 1710847535033 XXXX 1710847535033, Thread 1060: XXXX 1710847535033, Entering Thread 1060: ToolCommUsb::readTransfer, sideData is 0x55 bytes long, transferDataLength is 0x4 bytes long +1060 1710847535036 XXXX 1710847535036, Thread 1060: XXXX 1710847535036, Exiting Thread 1060: ToolCommUsb::readTransfer, cr.status = 0x0 +1060 1710847535036 XXXX 1710847535036, Thread 1060: XXXX 1710847535036, Exiting Thread 1060: Commands::runScriptWithUpload +1060 1710847535036 XXXX 1710847535036, Thread 1060: XXXX 1710847535036, Entering Thread 1060: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1060 1710847535038 XXXX 1710847535038, Thread 1060: XXXX 1710847535038, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535038 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1060 1710847535038 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1060 1710847535038 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1060 1710847535038 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1060 1710847535040 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1060 1710847535040 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1060 1710847535040 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1060 1710847535040 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = write, Mask = 00000000, Erase = false, Production Mode = true +1060 1710847535040 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 0, End = 65f, Buffer Length = 3264, Type = Pgm, Mask = 00000000 +1060 1710847535040 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2007, End = 2008, Buffer Length = 4, Type = Cfg, Mask = 00000000 +1060 1710847535040 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1060 1710847535040 XXXX 1710847535040, Thread 1060: XXXX 1710847535040, Entering Thread 1060: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1060 1710847535041 XXXX 1710847535041, Thread 1060: XXXX 1710847535041, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535041 XXXX 1710847535041, Thread 1060: XXXX 1710847535041, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1060 1710847535042 XXXX 1710847535042, Thread 1060: XXXX 1710847535042, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535042 XXXX 1710847535042, Thread 1060: XXXX 1710847535042, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1060 1710847535043 XXXX 1710847535043, Thread 1060: XXXX 1710847535043, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535043 XXXX 1710847535043, Thread 1060: XXXX 1710847535043, Entering Thread 1060: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1060 1710847535073 XXXX 1710847535073, Thread 1060: XXXX 1710847535073, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535073 XXXX 1710847535073, Thread 1060: XXXX 1710847535073, Entering Thread 1060: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1060 1710847535075 XXXX 1710847535075, Thread 1060: XXXX 1710847535075, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535075 XXXX 1710847535075, Thread 1060: XXXX 1710847535075, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1060 1710847535076 XXXX 1710847535076, Thread 1060: XXXX 1710847535076, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535076 XXXX 1710847535076, Thread 1060: XXXX 1710847535076, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1060 1710847535076 XXXX 1710847535076, Thread 1060: XXXX 1710847535076, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535077 XXXX 1710847535077, Thread 1060: XXXX 1710847535077, Entering Thread 1060: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1060 1710847535106 XXXX 1710847535106, Thread 1060: XXXX 1710847535106, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535106 XXXX 1710847535106, Thread 1060: XXXX 1710847535106, Entering Thread 1060: Commands::runScriptWithDownload, script name = WriteProgmem +1060 1710847535795 XXXX 1710847535795, Thread 1060: XXXX 1710847535795, Exiting Thread 1060: Commands::runScriptWithDownload(WriteProgmem) +1060 1710847535795 XXXX 1710847535795, Thread 1060: XXXX 1710847535795, Entering Thread 1060: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1060 1710847535796 XXXX 1710847535796, Thread 1060: XXXX 1710847535796, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535796 XXXX 1710847535796, Thread 1060: XXXX 1710847535796, Entering Thread 1060: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1060 1710847535797 XXXX 1710847535797, Thread 1060: XXXX 1710847535797, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535797 XXXX 1710847535797, Thread 1060: XXXX 1710847535797, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1060 1710847535798 XXXX 1710847535798, Thread 1060: XXXX 1710847535798, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535798 XXXX 1710847535798, Thread 1060: XXXX 1710847535798, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1060 1710847535799 XXXX 1710847535799, Thread 1060: XXXX 1710847535799, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535799 XXXX 1710847535799, Thread 1060: XXXX 1710847535799, Entering Thread 1060: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1060 1710847535829 XXXX 1710847535829, Thread 1060: XXXX 1710847535829, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535829 XXXX 1710847535829, Thread 1060: XXXX 1710847535829, Entering Thread 1060: Commands::runScriptWithUpload, script name = ReadProgmem +1060 1710847535829 XXXX 1710847535829, Thread 1060: XXXX 1710847535829, Entering Thread 1060: ToolCommUsb::readTransfer, sideData is 0x3d bytes long, transferDataLength is 0xcc0 bytes long +1060 1710847535902 XXXX 1710847535902, Thread 1060: XXXX 1710847535902, Exiting Thread 1060: ToolCommUsb::readTransfer, cr.status = 0x0 +1060 1710847535902 XXXX 1710847535902, Thread 1060: XXXX 1710847535902, Exiting Thread 1060: Commands::runScriptWithUpload +1060 1710847535903 XXXX 1710847535903, Thread 1060: XXXX 1710847535903, Entering Thread 1060: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1060 1710847535904 XXXX 1710847535904, Thread 1060: XXXX 1710847535904, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535905 XXXX 1710847535905, Thread 1060: XXXX 1710847535905, Entering Thread 1060: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1060 1710847535905 XXXX 1710847535905, Thread 1060: XXXX 1710847535905, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535905 XXXX 1710847535905, Thread 1060: XXXX 1710847535905, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1060 1710847535906 XXXX 1710847535906, Thread 1060: XXXX 1710847535906, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535907 XXXX 1710847535907, Thread 1060: XXXX 1710847535907, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1060 1710847535907 XXXX 1710847535907, Thread 1060: XXXX 1710847535907, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535908 XXXX 1710847535908, Thread 1060: XXXX 1710847535907, Entering Thread 1060: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1060 1710847535937 XXXX 1710847535937, Thread 1060: XXXX 1710847535937, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535937 XXXX 1710847535937, Thread 1060: XXXX 1710847535937, Entering Thread 1060: Commands::runScriptWithDownload, script name = WriteConfigmem +1060 1710847535952 XXXX 1710847535952, Thread 1060: XXXX 1710847535952, Exiting Thread 1060: Commands::runScriptWithDownload(WriteConfigmem) +1060 1710847535952 XXXX 1710847535952, Thread 1060: XXXX 1710847535952, Entering Thread 1060: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1060 1710847535953 XXXX 1710847535953, Thread 1060: XXXX 1710847535953, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535954 XXXX 1710847535954, Thread 1060: XXXX 1710847535954, Entering Thread 1060: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1060 1710847535954 XXXX 1710847535954, Thread 1060: XXXX 1710847535954, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535955 XXXX 1710847535955, Thread 1060: XXXX 1710847535955, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1060 1710847535955 XXXX 1710847535955, Thread 1060: XXXX 1710847535955, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535956 XXXX 1710847535956, Thread 1060: XXXX 1710847535956, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1060 1710847535956 XXXX 1710847535956, Thread 1060: XXXX 1710847535956, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535957 XXXX 1710847535957, Thread 1060: XXXX 1710847535957, Entering Thread 1060: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1060 1710847535987 XXXX 1710847535987, Thread 1060: XXXX 1710847535987, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535987 XXXX 1710847535987, Thread 1060: XXXX 1710847535987, Entering Thread 1060: Commands::runScriptWithUpload, script name = ReadConfigmem +1060 1710847535987 XXXX 1710847535987, Thread 1060: XXXX 1710847535987, Entering Thread 1060: ToolCommUsb::readTransfer, sideData is 0x55 bytes long, transferDataLength is 0x4 bytes long +1060 1710847535990 XXXX 1710847535990, Thread 1060: XXXX 1710847535990, Exiting Thread 1060: ToolCommUsb::readTransfer, cr.status = 0x0 +1060 1710847535990 XXXX 1710847535990, Thread 1060: XXXX 1710847535990, Exiting Thread 1060: Commands::runScriptWithUpload +1060 1710847535990 XXXX 1710847535990, Thread 1060: XXXX 1710847535990, Entering Thread 1060: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1060 1710847535992 XXXX 1710847535992, Thread 1060: XXXX 1710847535992, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535992 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1060 1710847535992 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1060 1710847535992 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1060 1710847535992 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1060 1710847535992 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:endOfOperations +1060 1710847535992 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1060 1710847535992 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 null +1060 1710847535992 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1060 1710847535992 XXXX 1710847535992, Thread 1060: XXXX 1710847535992, Entering Thread 1060: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1060 1710847535993 XXXX 1710847535993, Thread 1060: XXXX 1710847535993, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535993 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:endOfOperations +1060 1710847535993 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1060 1710847535993 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1060 1710847535993 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1060 1710847535996 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1060 1710847535996 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1060 1710847535996 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1060 1710847535996 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = releasefromreset, Mask = 00000000, Erase = false, Production Mode = true +1060 1710847535996 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1060 1710847535996 XXXX 1710847535996, Thread 1060: XXXX 1710847535996, Entering Thread 1060: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1060 1710847535998 XXXX 1710847535998, Thread 1060: XXXX 1710847535998, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535998 XXXX 1710847535998, Thread 1060: XXXX 1710847535998, Entering Thread 1060: Commands::runScriptBasic with script contents. contents[0] = 0x42, ... +1060 1710847535999 XXXX 1710847535999, Thread 1060: XXXX 1710847535999, Exiting Thread 1060: Commands::runScriptBasic +1060 1710847535999 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1060 1710847535999 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1060 1710847535999 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1060 1710847535999 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1074 1710847555172 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:EstablishCommunincations +1074 1710847555172 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1074 1710847555172 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 com.microchip.mplab.mdbcore.PK5Tool.PK5Com@2e5a1960 +1074 1710847555172 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1074 1710847555172 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:EstablishCommunincations +1074 1710847555172 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1074 1710847555172 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 true +1074 1710847555172 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End + +1074 1710847555172 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:GetFirmwareInfo +1074 1710847555172 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1074 1710847555172 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 null +1074 1710847555172 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1074 1710847555180 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:GetFirmwareInfo +1074 1710847555180 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1074 1710847555180 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 FirmwareInfo: Values: +1074 1710847555180 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 FirmwareInfo: boot = false, bootVer = 00.00.10, apVer = 02.00.84, fpgaVer = ff.ff.ff, scriptVer = 00.05.85, macAddress = 0504883548174844852485054485057, devID = a1020e01, devID1 = 2, devSN0 = ffffffff, devSN1 = ffffffff, serialNumber = 020026702RYN005435, appCommitID = null, scriptCommitID = d33d758f73, PCB_ID = 2 +1074 1710847555180 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End +1074 1710847555180 XXXX 1710847555180, Thread 1074: XXXX 1710847555180, Entering Thread 1074: Commands::runScriptWithUpload with script contents. contents[0] = 0x5e, ... +1074 1710847555180 XXXX 1710847555180, Thread 1074: XXXX 1710847555180, Entering Thread 1074: ToolCommUsb::readTransfer, sideData is 0xd bytes long, transferDataLength is 0x4 bytes long +1074 1710847555183 XXXX 1710847555183, Thread 1074: XXXX 1710847555183, Exiting Thread 1074: ToolCommUsb::readTransfer, cr.status = 0x0 +1074 1710847555183 XXXX 1710847555183, Thread 1074: XXXX 1710847555183, Exiting Thread 1074: Commands::runScriptWithUpload + +1074 1710847555183 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:SetPowerInfo +1074 1710847555183 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1074 1710847555183 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 PowerInfo: Values: +1074 1710847555183 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 PowerInfo: shotDownSystem = false, isToolPower = true, voltage = 5,000000, useVppFirst = false, useLowVoltageProgramming = false, useMaintainActivePower = false +1074 1710847555183 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1074 1710847555183 XXXX 1710847555183, Thread 1074: XXXX 1710847555183, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0x39, ... +1074 1710847555184 XXXX 1710847555184, Thread 1074: XXXX 1710847555184, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555184 XXXX 1710847555184, Thread 1074: XXXX 1710847555184, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0x46, ... +1074 1710847555185 XXXX 1710847555185, Thread 1074: XXXX 1710847555185, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555185 XXXX 1710847555185, Thread 1074: XXXX 1710847555185, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0x44, ... +1074 1710847555198 XXXX 1710847555198, Thread 1074: XXXX 1710847555198, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555198 XXXX 1710847555198, Thread 1074: XXXX 1710847555198, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0x40, ... +1074 1710847555378 XXXX 1710847555378, Thread 1074: XXXX 1710847555378, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555378 XXXX 1710847555378, Thread 1074: XXXX 1710847555378, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0x47, ... +1074 1710847555383 XXXX 1710847555383, Thread 1074: XXXX 1710847555383, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555383 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:SetPowerInfo +1074 1710847555383 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1074 1710847555383 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 none +1074 1710847555383 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End + +1074 1710847555383 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:SetLEDBrightness +1074 1710847555383 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1074 1710847555383 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 5 +1074 1710847555383 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1074 1710847555383 XXXX 1710847555383, Thread 1074: XXXX 1710847555383, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xcf, ... +1074 1710847555384 XXXX 1710847555384, Thread 1074: XXXX 1710847555384, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555384 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:SetLEDBrightness +1074 1710847555384 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1074 1710847555384 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 none +1074 1710847555384 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End + +1074 1710847555384 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:SetToolInfo +1074 1710847555384 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1074 1710847555384 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 ToolInfo: Values: +1074 1710847555384 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 ToolInfo: speedLevel = 1, PGCResistance = 4700, PGDResistance = 4700, PGCPullDir = PullDown, PGDPullDir = PullDown, ICSPSelected = Wire2 +1074 1710847555384 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1074 1710847555384 XXXX 1710847555384, Thread 1074: XXXX 1710847555384, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0x27, ... +1074 1710847555385 XXXX 1710847555385, Thread 1074: XXXX 1710847555385, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555385 XXXX 1710847555385, Thread 1074: XXXX 1710847555385, Entering Thread 1074: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1074 1710847555386 XXXX 1710847555386, Thread 1074: XXXX 1710847555386, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555386 XXXX 1710847555386, Thread 1074: XXXX 1710847555386, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1074 1710847555387 XXXX 1710847555387, Thread 1074: XXXX 1710847555387, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555387 XXXX 1710847555387, Thread 1074: XXXX 1710847555387, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1074 1710847555388 XXXX 1710847555388, Thread 1074: XXXX 1710847555388, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555388 XXXX 1710847555388, Thread 1074: XXXX 1710847555388, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xd4, ... +1074 1710847555388 XXXX 1710847555388, Thread 1074: XXXX 1710847555388, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555388 XXXX 1710847555388, Thread 1074: XXXX 1710847555388, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xcd, ... +1074 1710847555389 XXXX 1710847555389, Thread 1074: XXXX 1710847555389, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555389 XXXX 1710847555389, Thread 1074: XXXX 1710847555389, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xce, ... +1074 1710847555390 XXXX 1710847555390, Thread 1074: XXXX 1710847555390, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555390 XXXX 1710847555390, Thread 1074: XXXX 1710847555390, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xcd, ... +1074 1710847555392 XXXX 1710847555392, Thread 1074: XXXX 1710847555392, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555392 XXXX 1710847555392, Thread 1074: XXXX 1710847555392, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xce, ... +1074 1710847555393 XXXX 1710847555393, Thread 1074: XXXX 1710847555393, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555393 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:SetToolInfo +1074 1710847555393 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1074 1710847555393 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 none +1074 1710847555393 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End + +1074 1710847555398 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1074 1710847555398 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1074 1710847555398 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1074 1710847555398 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = erase, Mask = 00000000, Erase = false, Production Mode = true +1074 1710847555398 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 0, End = 1fff, Buffer Length = 0, Type = Pgm, Mask = 00000000 +1074 1710847555398 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2007, End = 2008, Buffer Length = 0, Type = Cfg, Mask = 00000000 +1074 1710847555398 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 0, End = ff, Buffer Length = 0, Type = EEData, Mask = 00000000 +1074 1710847555398 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2000, End = 2003, Buffer Length = 0, Type = UserID, Mask = 00000000 +1074 1710847555398 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1074 1710847555398 XXXX 1710847555398, Thread 1074: XXXX 1710847555398, Entering Thread 1074: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1074 1710847555399 XXXX 1710847555399, Thread 1074: XXXX 1710847555399, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555399 XXXX 1710847555399, Thread 1074: XXXX 1710847555399, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1074 1710847555400 XXXX 1710847555400, Thread 1074: XXXX 1710847555400, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555400 XXXX 1710847555400, Thread 1074: XXXX 1710847555400, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1074 1710847555401 XXXX 1710847555401, Thread 1074: XXXX 1710847555401, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555401 XXXX 1710847555401, Thread 1074: XXXX 1710847555401, Entering Thread 1074: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1074 1710847555431 XXXX 1710847555431, Thread 1074: XXXX 1710847555431, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555431 XXXX 1710847555431, Thread 1074: XXXX 1710847555431, Entering Thread 1074: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1074 1710847555432 XXXX 1710847555432, Thread 1074: XXXX 1710847555432, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555432 XXXX 1710847555432, Thread 1074: XXXX 1710847555432, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1074 1710847555433 XXXX 1710847555433, Thread 1074: XXXX 1710847555433, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555433 XXXX 1710847555433, Thread 1074: XXXX 1710847555433, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1074 1710847555434 XXXX 1710847555434, Thread 1074: XXXX 1710847555434, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555434 XXXX 1710847555434, Thread 1074: XXXX 1710847555434, Entering Thread 1074: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1074 1710847555463 XXXX 1710847555463, Thread 1074: XXXX 1710847555463, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555463 XXXX 1710847555463, Thread 1074: XXXX 1710847555463, Entering Thread 1074: Commands::runScriptBasic, script name = EraseChip, timeOut = 30000 ms +1074 1710847555470 XXXX 1710847555470, Thread 1074: XXXX 1710847555470, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555470 XXXX 1710847555470, Thread 1074: XXXX 1710847555470, Entering Thread 1074: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1074 1710847555472 XXXX 1710847555472, Thread 1074: XXXX 1710847555472, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555472 XXXX 1710847555472, Thread 1074: XXXX 1710847555472, Entering Thread 1074: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1074 1710847555473 XXXX 1710847555473, Thread 1074: XXXX 1710847555473, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555473 XXXX 1710847555473, Thread 1074: XXXX 1710847555473, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1074 1710847555474 XXXX 1710847555474, Thread 1074: XXXX 1710847555474, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555474 XXXX 1710847555474, Thread 1074: XXXX 1710847555474, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1074 1710847555475 XXXX 1710847555475, Thread 1074: XXXX 1710847555475, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555475 XXXX 1710847555475, Thread 1074: XXXX 1710847555475, Entering Thread 1074: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1074 1710847555505 XXXX 1710847555505, Thread 1074: XXXX 1710847555505, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555505 XXXX 1710847555505, Thread 1074: XXXX 1710847555505, Entering Thread 1074: Commands::runScriptBasic, script name = EraseDataEEmem, timeOut = 30000 ms +1074 1710847555512 XXXX 1710847555512, Thread 1074: XXXX 1710847555512, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555512 XXXX 1710847555512, Thread 1074: XXXX 1710847555512, Entering Thread 1074: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1074 1710847555514 XXXX 1710847555514, Thread 1074: XXXX 1710847555514, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555514 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1074 1710847555514 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1074 1710847555514 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1074 1710847555514 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1074 1710847555514 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1074 1710847555514 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1074 1710847555514 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1074 1710847555514 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = write, Mask = 00000000, Erase = false, Production Mode = true +1074 1710847555514 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2007, End = 2008, Buffer Length = 4, Type = Cfg, Mask = 00000000 +1074 1710847555514 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1074 1710847555514 XXXX 1710847555514, Thread 1074: XXXX 1710847555514, Entering Thread 1074: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1074 1710847555515 XXXX 1710847555515, Thread 1074: XXXX 1710847555515, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555515 XXXX 1710847555515, Thread 1074: XXXX 1710847555515, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1074 1710847555516 XXXX 1710847555516, Thread 1074: XXXX 1710847555516, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555516 XXXX 1710847555516, Thread 1074: XXXX 1710847555516, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1074 1710847555517 XXXX 1710847555517, Thread 1074: XXXX 1710847555517, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555517 XXXX 1710847555517, Thread 1074: XXXX 1710847555517, Entering Thread 1074: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1074 1710847555546 XXXX 1710847555546, Thread 1074: XXXX 1710847555546, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555546 XXXX 1710847555546, Thread 1074: XXXX 1710847555546, Entering Thread 1074: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1074 1710847555547 XXXX 1710847555547, Thread 1074: XXXX 1710847555547, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555547 XXXX 1710847555547, Thread 1074: XXXX 1710847555547, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1074 1710847555548 XXXX 1710847555548, Thread 1074: XXXX 1710847555548, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555548 XXXX 1710847555548, Thread 1074: XXXX 1710847555548, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1074 1710847555549 XXXX 1710847555549, Thread 1074: XXXX 1710847555549, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555549 XXXX 1710847555549, Thread 1074: XXXX 1710847555549, Entering Thread 1074: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1074 1710847555579 XXXX 1710847555579, Thread 1074: XXXX 1710847555579, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555579 XXXX 1710847555579, Thread 1074: XXXX 1710847555579, Entering Thread 1074: Commands::runScriptWithDownload, script name = WriteConfigmem +1074 1710847555593 XXXX 1710847555593, Thread 1074: XXXX 1710847555593, Exiting Thread 1074: Commands::runScriptWithDownload(WriteConfigmem) +1074 1710847555593 XXXX 1710847555593, Thread 1074: XXXX 1710847555593, Entering Thread 1074: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1074 1710847555595 XXXX 1710847555595, Thread 1074: XXXX 1710847555595, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555595 XXXX 1710847555595, Thread 1074: XXXX 1710847555595, Entering Thread 1074: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1074 1710847555596 XXXX 1710847555596, Thread 1074: XXXX 1710847555596, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555596 XXXX 1710847555596, Thread 1074: XXXX 1710847555596, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1074 1710847555597 XXXX 1710847555597, Thread 1074: XXXX 1710847555597, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555597 XXXX 1710847555597, Thread 1074: XXXX 1710847555597, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1074 1710847555598 XXXX 1710847555598, Thread 1074: XXXX 1710847555598, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555598 XXXX 1710847555598, Thread 1074: XXXX 1710847555598, Entering Thread 1074: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1074 1710847555627 XXXX 1710847555627, Thread 1074: XXXX 1710847555627, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555627 XXXX 1710847555627, Thread 1074: XXXX 1710847555627, Entering Thread 1074: Commands::runScriptWithUpload, script name = ReadConfigmem +1074 1710847555627 XXXX 1710847555627, Thread 1074: XXXX 1710847555627, Entering Thread 1074: ToolCommUsb::readTransfer, sideData is 0x55 bytes long, transferDataLength is 0x4 bytes long +1074 1710847555629 XXXX 1710847555629, Thread 1074: XXXX 1710847555629, Exiting Thread 1074: ToolCommUsb::readTransfer, cr.status = 0x0 +1074 1710847555629 XXXX 1710847555629, Thread 1074: XXXX 1710847555629, Exiting Thread 1074: Commands::runScriptWithUpload +1074 1710847555629 XXXX 1710847555629, Thread 1074: XXXX 1710847555629, Entering Thread 1074: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1074 1710847555631 XXXX 1710847555631, Thread 1074: XXXX 1710847555631, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555631 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1074 1710847555631 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1074 1710847555631 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1074 1710847555631 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1074 1710847555632 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1074 1710847555632 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1074 1710847555632 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1074 1710847555632 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = write, Mask = 00000000, Erase = false, Production Mode = true +1074 1710847555632 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 0, End = 65f, Buffer Length = 3264, Type = Pgm, Mask = 00000000 +1074 1710847555632 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2007, End = 2008, Buffer Length = 4, Type = Cfg, Mask = 00000000 +1074 1710847555632 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1074 1710847555632 XXXX 1710847555632, Thread 1074: XXXX 1710847555632, Entering Thread 1074: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1074 1710847555633 XXXX 1710847555633, Thread 1074: XXXX 1710847555633, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555633 XXXX 1710847555633, Thread 1074: XXXX 1710847555633, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1074 1710847555634 XXXX 1710847555634, Thread 1074: XXXX 1710847555634, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555634 XXXX 1710847555634, Thread 1074: XXXX 1710847555634, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1074 1710847555635 XXXX 1710847555635, Thread 1074: XXXX 1710847555635, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555635 XXXX 1710847555635, Thread 1074: XXXX 1710847555635, Entering Thread 1074: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1074 1710847555665 XXXX 1710847555665, Thread 1074: XXXX 1710847555665, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555666 XXXX 1710847555666, Thread 1074: XXXX 1710847555666, Entering Thread 1074: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1074 1710847555666 XXXX 1710847555666, Thread 1074: XXXX 1710847555666, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555666 XXXX 1710847555666, Thread 1074: XXXX 1710847555666, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1074 1710847555667 XXXX 1710847555667, Thread 1074: XXXX 1710847555667, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555667 XXXX 1710847555667, Thread 1074: XXXX 1710847555667, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1074 1710847555669 XXXX 1710847555669, Thread 1074: XXXX 1710847555669, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555669 XXXX 1710847555669, Thread 1074: XXXX 1710847555669, Entering Thread 1074: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1074 1710847555698 XXXX 1710847555698, Thread 1074: XXXX 1710847555698, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847555698 XXXX 1710847555698, Thread 1074: XXXX 1710847555698, Entering Thread 1074: Commands::runScriptWithDownload, script name = WriteProgmem +1074 1710847556386 XXXX 1710847556386, Thread 1074: XXXX 1710847556386, Exiting Thread 1074: Commands::runScriptWithDownload(WriteProgmem) +1074 1710847556386 XXXX 1710847556386, Thread 1074: XXXX 1710847556386, Entering Thread 1074: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1074 1710847556388 XXXX 1710847556388, Thread 1074: XXXX 1710847556388, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556388 XXXX 1710847556388, Thread 1074: XXXX 1710847556388, Entering Thread 1074: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1074 1710847556388 XXXX 1710847556388, Thread 1074: XXXX 1710847556388, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556388 XXXX 1710847556388, Thread 1074: XXXX 1710847556388, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1074 1710847556389 XXXX 1710847556389, Thread 1074: XXXX 1710847556389, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556390 XXXX 1710847556390, Thread 1074: XXXX 1710847556390, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1074 1710847556390 XXXX 1710847556390, Thread 1074: XXXX 1710847556390, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556391 XXXX 1710847556391, Thread 1074: XXXX 1710847556391, Entering Thread 1074: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1074 1710847556420 XXXX 1710847556420, Thread 1074: XXXX 1710847556420, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556420 XXXX 1710847556420, Thread 1074: XXXX 1710847556420, Entering Thread 1074: Commands::runScriptWithUpload, script name = ReadProgmem +1074 1710847556420 XXXX 1710847556420, Thread 1074: XXXX 1710847556420, Entering Thread 1074: ToolCommUsb::readTransfer, sideData is 0x3d bytes long, transferDataLength is 0xcc0 bytes long +1074 1710847556493 XXXX 1710847556493, Thread 1074: XXXX 1710847556493, Exiting Thread 1074: ToolCommUsb::readTransfer, cr.status = 0x0 +1074 1710847556494 XXXX 1710847556494, Thread 1074: XXXX 1710847556493, Exiting Thread 1074: Commands::runScriptWithUpload +1074 1710847556494 XXXX 1710847556494, Thread 1074: XXXX 1710847556494, Entering Thread 1074: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1074 1710847556495 XXXX 1710847556495, Thread 1074: XXXX 1710847556495, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556496 XXXX 1710847556496, Thread 1074: XXXX 1710847556496, Entering Thread 1074: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1074 1710847556497 XXXX 1710847556497, Thread 1074: XXXX 1710847556497, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556497 XXXX 1710847556497, Thread 1074: XXXX 1710847556497, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1074 1710847556498 XXXX 1710847556497, Thread 1074: XXXX 1710847556497, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556498 XXXX 1710847556498, Thread 1074: XXXX 1710847556498, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1074 1710847556498 XXXX 1710847556498, Thread 1074: XXXX 1710847556498, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556498 XXXX 1710847556498, Thread 1074: XXXX 1710847556498, Entering Thread 1074: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1074 1710847556528 XXXX 1710847556528, Thread 1074: XXXX 1710847556528, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556528 XXXX 1710847556528, Thread 1074: XXXX 1710847556528, Entering Thread 1074: Commands::runScriptWithDownload, script name = WriteConfigmem +1074 1710847556542 XXXX 1710847556542, Thread 1074: XXXX 1710847556542, Exiting Thread 1074: Commands::runScriptWithDownload(WriteConfigmem) +1074 1710847556542 XXXX 1710847556542, Thread 1074: XXXX 1710847556542, Entering Thread 1074: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1074 1710847556544 XXXX 1710847556544, Thread 1074: XXXX 1710847556544, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556544 XXXX 1710847556544, Thread 1074: XXXX 1710847556544, Entering Thread 1074: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1074 1710847556544 XXXX 1710847556544, Thread 1074: XXXX 1710847556544, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556544 XXXX 1710847556544, Thread 1074: XXXX 1710847556544, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1074 1710847556545 XXXX 1710847556545, Thread 1074: XXXX 1710847556545, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556545 XXXX 1710847556545, Thread 1074: XXXX 1710847556545, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1074 1710847556546 XXXX 1710847556546, Thread 1074: XXXX 1710847556546, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556546 XXXX 1710847556546, Thread 1074: XXXX 1710847556546, Entering Thread 1074: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1074 1710847556577 XXXX 1710847556576, Thread 1074: XXXX 1710847556576, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556577 XXXX 1710847556577, Thread 1074: XXXX 1710847556577, Entering Thread 1074: Commands::runScriptWithUpload, script name = ReadConfigmem +1074 1710847556577 XXXX 1710847556577, Thread 1074: XXXX 1710847556577, Entering Thread 1074: ToolCommUsb::readTransfer, sideData is 0x55 bytes long, transferDataLength is 0x4 bytes long +1074 1710847556578 XXXX 1710847556578, Thread 1074: XXXX 1710847556578, Exiting Thread 1074: ToolCommUsb::readTransfer, cr.status = 0x0 +1074 1710847556578 XXXX 1710847556578, Thread 1074: XXXX 1710847556578, Exiting Thread 1074: Commands::runScriptWithUpload +1074 1710847556578 XXXX 1710847556578, Thread 1074: XXXX 1710847556578, Entering Thread 1074: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1074 1710847556581 XXXX 1710847556581, Thread 1074: XXXX 1710847556581, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556581 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1074 1710847556581 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1074 1710847556581 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1074 1710847556581 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1074 1710847556581 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:endOfOperations +1074 1710847556581 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1074 1710847556581 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 null +1074 1710847556581 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1074 1710847556581 XXXX 1710847556581, Thread 1074: XXXX 1710847556581, Entering Thread 1074: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1074 1710847556583 XXXX 1710847556583, Thread 1074: XXXX 1710847556583, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556583 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:endOfOperations +1074 1710847556583 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1074 1710847556583 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1074 1710847556583 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1074 1710847556585 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1074 1710847556585 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1074 1710847556585 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1074 1710847556585 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = releasefromreset, Mask = 00000000, Erase = false, Production Mode = true +1074 1710847556585 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1074 1710847556585 XXXX 1710847556585, Thread 1074: XXXX 1710847556585, Entering Thread 1074: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1074 1710847556587 XXXX 1710847556587, Thread 1074: XXXX 1710847556587, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556587 XXXX 1710847556587, Thread 1074: XXXX 1710847556587, Entering Thread 1074: Commands::runScriptBasic with script contents. contents[0] = 0x42, ... +1074 1710847556588 XXXX 1710847556588, Thread 1074: XXXX 1710847556588, Exiting Thread 1074: Commands::runScriptBasic +1074 1710847556588 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1074 1710847556588 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1074 1710847556588 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1074 1710847556588 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1087 1710847572781 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:EstablishCommunincations +1087 1710847572781 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1087 1710847572781 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 com.microchip.mplab.mdbcore.PK5Tool.PK5Com@2e5a1960 +1087 1710847572781 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1087 1710847572781 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:EstablishCommunincations +1087 1710847572781 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1087 1710847572781 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 true +1087 1710847572781 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End + +1087 1710847572781 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:GetFirmwareInfo +1087 1710847572781 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1087 1710847572781 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 null +1087 1710847572781 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1087 1710847572789 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:GetFirmwareInfo +1087 1710847572789 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1087 1710847572789 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 FirmwareInfo: Values: +1087 1710847572789 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 FirmwareInfo: boot = false, bootVer = 00.00.10, apVer = 02.00.84, fpgaVer = ff.ff.ff, scriptVer = 00.05.85, macAddress = 0504883548174844852485054485057, devID = a1020e01, devID1 = 2, devSN0 = ffffffff, devSN1 = ffffffff, serialNumber = 020026702RYN005435, appCommitID = null, scriptCommitID = d33d758f73, PCB_ID = 2 +1087 1710847572789 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End +1087 1710847572789 XXXX 1710847572789, Thread 1087: XXXX 1710847572789, Entering Thread 1087: Commands::runScriptWithUpload with script contents. contents[0] = 0x5e, ... +1087 1710847572789 XXXX 1710847572789, Thread 1087: XXXX 1710847572789, Entering Thread 1087: ToolCommUsb::readTransfer, sideData is 0xd bytes long, transferDataLength is 0x4 bytes long +1087 1710847572792 XXXX 1710847572792, Thread 1087: XXXX 1710847572792, Exiting Thread 1087: ToolCommUsb::readTransfer, cr.status = 0x0 +1087 1710847572792 XXXX 1710847572792, Thread 1087: XXXX 1710847572792, Exiting Thread 1087: Commands::runScriptWithUpload + +1087 1710847572792 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:SetPowerInfo +1087 1710847572792 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1087 1710847572792 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 PowerInfo: Values: +1087 1710847572792 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 PowerInfo: shotDownSystem = false, isToolPower = true, voltage = 5,000000, useVppFirst = false, useLowVoltageProgramming = false, useMaintainActivePower = false +1087 1710847572792 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1087 1710847572792 XXXX 1710847572792, Thread 1087: XXXX 1710847572792, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0x39, ... +1087 1710847572793 XXXX 1710847572793, Thread 1087: XXXX 1710847572793, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847572793 XXXX 1710847572793, Thread 1087: XXXX 1710847572793, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0x46, ... +1087 1710847572794 XXXX 1710847572794, Thread 1087: XXXX 1710847572794, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847572794 XXXX 1710847572794, Thread 1087: XXXX 1710847572794, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0x44, ... +1087 1710847572806 XXXX 1710847572806, Thread 1087: XXXX 1710847572806, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847572806 XXXX 1710847572806, Thread 1087: XXXX 1710847572806, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0x40, ... +1087 1710847572986 XXXX 1710847572986, Thread 1087: XXXX 1710847572986, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847572986 XXXX 1710847572986, Thread 1087: XXXX 1710847572986, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0x47, ... +1087 1710847572991 XXXX 1710847572991, Thread 1087: XXXX 1710847572991, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847572991 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:SetPowerInfo +1087 1710847572991 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1087 1710847572991 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 none +1087 1710847572991 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End + +1087 1710847572991 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:SetLEDBrightness +1087 1710847572991 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1087 1710847572991 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 5 +1087 1710847572991 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1087 1710847572991 XXXX 1710847572991, Thread 1087: XXXX 1710847572991, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xcf, ... +1087 1710847572991 XXXX 1710847572991, Thread 1087: XXXX 1710847572991, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847572993 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:SetLEDBrightness +1087 1710847572993 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1087 1710847572993 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 none +1087 1710847572993 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End + +1087 1710847572993 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:SetToolInfo +1087 1710847572993 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1087 1710847572993 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 ToolInfo: Values: +1087 1710847572993 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 ToolInfo: speedLevel = 1, PGCResistance = 4700, PGDResistance = 4700, PGCPullDir = PullDown, PGDPullDir = PullDown, ICSPSelected = Wire2 +1087 1710847572993 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1087 1710847572993 XXXX 1710847572993, Thread 1087: XXXX 1710847572993, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0x27, ... +1087 1710847572993 XXXX 1710847572993, Thread 1087: XXXX 1710847572993, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847572993 XXXX 1710847572993, Thread 1087: XXXX 1710847572993, Entering Thread 1087: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1087 1710847572994 XXXX 1710847572994, Thread 1087: XXXX 1710847572994, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847572994 XXXX 1710847572994, Thread 1087: XXXX 1710847572994, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1087 1710847572995 XXXX 1710847572995, Thread 1087: XXXX 1710847572995, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847572995 XXXX 1710847572995, Thread 1087: XXXX 1710847572995, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1087 1710847572996 XXXX 1710847572996, Thread 1087: XXXX 1710847572996, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847572996 XXXX 1710847572996, Thread 1087: XXXX 1710847572996, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xd4, ... +1087 1710847572997 XXXX 1710847572997, Thread 1087: XXXX 1710847572997, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847572997 XXXX 1710847572997, Thread 1087: XXXX 1710847572997, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xcd, ... +1087 1710847572998 XXXX 1710847572998, Thread 1087: XXXX 1710847572998, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847572998 XXXX 1710847572998, Thread 1087: XXXX 1710847572998, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xce, ... +1087 1710847572999 XXXX 1710847572999, Thread 1087: XXXX 1710847572999, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847572999 XXXX 1710847572999, Thread 1087: XXXX 1710847572999, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xcd, ... +1087 1710847573000 XXXX 1710847573000, Thread 1087: XXXX 1710847573000, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573000 XXXX 1710847573000, Thread 1087: XXXX 1710847573000, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xce, ... +1087 1710847573001 XXXX 1710847573001, Thread 1087: XXXX 1710847573001, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573001 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:SetToolInfo +1087 1710847573001 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1087 1710847573001 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 none +1087 1710847573001 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End + +1087 1710847573007 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1087 1710847573007 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1087 1710847573007 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1087 1710847573007 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = erase, Mask = 00000000, Erase = false, Production Mode = true +1087 1710847573007 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 0, End = 1fff, Buffer Length = 0, Type = Pgm, Mask = 00000000 +1087 1710847573007 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2007, End = 2008, Buffer Length = 0, Type = Cfg, Mask = 00000000 +1087 1710847573007 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 0, End = ff, Buffer Length = 0, Type = EEData, Mask = 00000000 +1087 1710847573007 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2000, End = 2003, Buffer Length = 0, Type = UserID, Mask = 00000000 +1087 1710847573007 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1087 1710847573007 XXXX 1710847573007, Thread 1087: XXXX 1710847573007, Entering Thread 1087: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1087 1710847573008 XXXX 1710847573008, Thread 1087: XXXX 1710847573008, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573008 XXXX 1710847573008, Thread 1087: XXXX 1710847573008, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1087 1710847573009 XXXX 1710847573009, Thread 1087: XXXX 1710847573009, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573009 XXXX 1710847573009, Thread 1087: XXXX 1710847573009, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1087 1710847573010 XXXX 1710847573010, Thread 1087: XXXX 1710847573010, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573010 XXXX 1710847573010, Thread 1087: XXXX 1710847573010, Entering Thread 1087: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1087 1710847573040 XXXX 1710847573040, Thread 1087: XXXX 1710847573040, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573040 XXXX 1710847573040, Thread 1087: XXXX 1710847573040, Entering Thread 1087: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1087 1710847573041 XXXX 1710847573041, Thread 1087: XXXX 1710847573041, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573041 XXXX 1710847573041, Thread 1087: XXXX 1710847573041, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1087 1710847573042 XXXX 1710847573042, Thread 1087: XXXX 1710847573042, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573042 XXXX 1710847573042, Thread 1087: XXXX 1710847573042, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1087 1710847573043 XXXX 1710847573043, Thread 1087: XXXX 1710847573043, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573043 XXXX 1710847573043, Thread 1087: XXXX 1710847573043, Entering Thread 1087: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1087 1710847573072 XXXX 1710847573072, Thread 1087: XXXX 1710847573072, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573072 XXXX 1710847573072, Thread 1087: XXXX 1710847573072, Entering Thread 1087: Commands::runScriptBasic, script name = EraseChip, timeOut = 30000 ms +1087 1710847573079 XXXX 1710847573079, Thread 1087: XXXX 1710847573079, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573079 XXXX 1710847573079, Thread 1087: XXXX 1710847573079, Entering Thread 1087: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1087 1710847573081 XXXX 1710847573081, Thread 1087: XXXX 1710847573081, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573081 XXXX 1710847573081, Thread 1087: XXXX 1710847573081, Entering Thread 1087: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1087 1710847573082 XXXX 1710847573082, Thread 1087: XXXX 1710847573082, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573082 XXXX 1710847573082, Thread 1087: XXXX 1710847573082, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1087 1710847573083 XXXX 1710847573083, Thread 1087: XXXX 1710847573083, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573083 XXXX 1710847573083, Thread 1087: XXXX 1710847573083, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1087 1710847573084 XXXX 1710847573084, Thread 1087: XXXX 1710847573084, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573084 XXXX 1710847573084, Thread 1087: XXXX 1710847573084, Entering Thread 1087: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1087 1710847573114 XXXX 1710847573114, Thread 1087: XXXX 1710847573114, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573114 XXXX 1710847573114, Thread 1087: XXXX 1710847573114, Entering Thread 1087: Commands::runScriptBasic, script name = EraseDataEEmem, timeOut = 30000 ms +1087 1710847573121 XXXX 1710847573121, Thread 1087: XXXX 1710847573121, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573121 XXXX 1710847573121, Thread 1087: XXXX 1710847573121, Entering Thread 1087: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1087 1710847573123 XXXX 1710847573123, Thread 1087: XXXX 1710847573123, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573123 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1087 1710847573123 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1087 1710847573123 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1087 1710847573123 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1087 1710847573123 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1087 1710847573123 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1087 1710847573123 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1087 1710847573123 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = write, Mask = 00000000, Erase = false, Production Mode = true +1087 1710847573123 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2007, End = 2008, Buffer Length = 4, Type = Cfg, Mask = 00000000 +1087 1710847573123 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1087 1710847573123 XXXX 1710847573123, Thread 1087: XXXX 1710847573123, Entering Thread 1087: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1087 1710847573124 XXXX 1710847573124, Thread 1087: XXXX 1710847573124, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573124 XXXX 1710847573124, Thread 1087: XXXX 1710847573124, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1087 1710847573125 XXXX 1710847573125, Thread 1087: XXXX 1710847573125, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573125 XXXX 1710847573125, Thread 1087: XXXX 1710847573125, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1087 1710847573126 XXXX 1710847573126, Thread 1087: XXXX 1710847573126, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573126 XXXX 1710847573126, Thread 1087: XXXX 1710847573126, Entering Thread 1087: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1087 1710847573155 XXXX 1710847573155, Thread 1087: XXXX 1710847573155, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573155 XXXX 1710847573155, Thread 1087: XXXX 1710847573155, Entering Thread 1087: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1087 1710847573156 XXXX 1710847573156, Thread 1087: XXXX 1710847573156, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573156 XXXX 1710847573156, Thread 1087: XXXX 1710847573156, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1087 1710847573157 XXXX 1710847573157, Thread 1087: XXXX 1710847573157, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573157 XXXX 1710847573157, Thread 1087: XXXX 1710847573157, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1087 1710847573158 XXXX 1710847573158, Thread 1087: XXXX 1710847573158, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573158 XXXX 1710847573158, Thread 1087: XXXX 1710847573158, Entering Thread 1087: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1087 1710847573188 XXXX 1710847573188, Thread 1087: XXXX 1710847573188, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573188 XXXX 1710847573188, Thread 1087: XXXX 1710847573188, Entering Thread 1087: Commands::runScriptWithDownload, script name = WriteConfigmem +1087 1710847573202 XXXX 1710847573202, Thread 1087: XXXX 1710847573202, Exiting Thread 1087: Commands::runScriptWithDownload(WriteConfigmem) +1087 1710847573202 XXXX 1710847573202, Thread 1087: XXXX 1710847573202, Entering Thread 1087: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1087 1710847573204 XXXX 1710847573204, Thread 1087: XXXX 1710847573204, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573204 XXXX 1710847573204, Thread 1087: XXXX 1710847573204, Entering Thread 1087: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1087 1710847573205 XXXX 1710847573205, Thread 1087: XXXX 1710847573205, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573205 XXXX 1710847573205, Thread 1087: XXXX 1710847573205, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1087 1710847573206 XXXX 1710847573206, Thread 1087: XXXX 1710847573206, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573206 XXXX 1710847573206, Thread 1087: XXXX 1710847573206, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1087 1710847573207 XXXX 1710847573207, Thread 1087: XXXX 1710847573207, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573207 XXXX 1710847573207, Thread 1087: XXXX 1710847573207, Entering Thread 1087: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1087 1710847573236 XXXX 1710847573236, Thread 1087: XXXX 1710847573236, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573236 XXXX 1710847573236, Thread 1087: XXXX 1710847573236, Entering Thread 1087: Commands::runScriptWithUpload, script name = ReadConfigmem +1087 1710847573236 XXXX 1710847573236, Thread 1087: XXXX 1710847573236, Entering Thread 1087: ToolCommUsb::readTransfer, sideData is 0x55 bytes long, transferDataLength is 0x4 bytes long +1087 1710847573239 XXXX 1710847573239, Thread 1087: XXXX 1710847573239, Exiting Thread 1087: ToolCommUsb::readTransfer, cr.status = 0x0 +1087 1710847573239 XXXX 1710847573239, Thread 1087: XXXX 1710847573239, Exiting Thread 1087: Commands::runScriptWithUpload +1087 1710847573239 XXXX 1710847573239, Thread 1087: XXXX 1710847573239, Entering Thread 1087: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1087 1710847573241 XXXX 1710847573241, Thread 1087: XXXX 1710847573241, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573241 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1087 1710847573241 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1087 1710847573241 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1087 1710847573241 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1087 1710847573244 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1087 1710847573244 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1087 1710847573244 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1087 1710847573244 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = write, Mask = 00000000, Erase = false, Production Mode = true +1087 1710847573244 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 0, End = 65f, Buffer Length = 3264, Type = Pgm, Mask = 00000000 +1087 1710847573244 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2007, End = 2008, Buffer Length = 4, Type = Cfg, Mask = 00000000 +1087 1710847573244 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1087 1710847573244 XXXX 1710847573244, Thread 1087: XXXX 1710847573244, Entering Thread 1087: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1087 1710847573245 XXXX 1710847573245, Thread 1087: XXXX 1710847573245, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573245 XXXX 1710847573245, Thread 1087: XXXX 1710847573245, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1087 1710847573246 XXXX 1710847573246, Thread 1087: XXXX 1710847573246, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573246 XXXX 1710847573246, Thread 1087: XXXX 1710847573246, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1087 1710847573247 XXXX 1710847573247, Thread 1087: XXXX 1710847573247, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573247 XXXX 1710847573247, Thread 1087: XXXX 1710847573247, Entering Thread 1087: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1087 1710847573277 XXXX 1710847573277, Thread 1087: XXXX 1710847573277, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573277 XXXX 1710847573277, Thread 1087: XXXX 1710847573277, Entering Thread 1087: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1087 1710847573278 XXXX 1710847573278, Thread 1087: XXXX 1710847573278, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573278 XXXX 1710847573278, Thread 1087: XXXX 1710847573278, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1087 1710847573279 XXXX 1710847573279, Thread 1087: XXXX 1710847573279, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573279 XXXX 1710847573279, Thread 1087: XXXX 1710847573279, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1087 1710847573280 XXXX 1710847573280, Thread 1087: XXXX 1710847573280, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573280 XXXX 1710847573280, Thread 1087: XXXX 1710847573280, Entering Thread 1087: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1087 1710847573309 XXXX 1710847573309, Thread 1087: XXXX 1710847573309, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847573309 XXXX 1710847573309, Thread 1087: XXXX 1710847573309, Entering Thread 1087: Commands::runScriptWithDownload, script name = WriteProgmem +1087 1710847573999 XXXX 1710847573999, Thread 1087: XXXX 1710847573999, Exiting Thread 1087: Commands::runScriptWithDownload(WriteProgmem) +1087 1710847573999 XXXX 1710847573999, Thread 1087: XXXX 1710847573999, Entering Thread 1087: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1087 1710847574000 XXXX 1710847574000, Thread 1087: XXXX 1710847574000, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574000 XXXX 1710847574000, Thread 1087: XXXX 1710847574000, Entering Thread 1087: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1087 1710847574001 XXXX 1710847574001, Thread 1087: XXXX 1710847574001, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574001 XXXX 1710847574001, Thread 1087: XXXX 1710847574001, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1087 1710847574002 XXXX 1710847574002, Thread 1087: XXXX 1710847574002, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574002 XXXX 1710847574002, Thread 1087: XXXX 1710847574002, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1087 1710847574003 XXXX 1710847574003, Thread 1087: XXXX 1710847574003, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574003 XXXX 1710847574003, Thread 1087: XXXX 1710847574003, Entering Thread 1087: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1087 1710847574033 XXXX 1710847574033, Thread 1087: XXXX 1710847574033, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574033 XXXX 1710847574033, Thread 1087: XXXX 1710847574033, Entering Thread 1087: Commands::runScriptWithUpload, script name = ReadProgmem +1087 1710847574033 XXXX 1710847574033, Thread 1087: XXXX 1710847574033, Entering Thread 1087: ToolCommUsb::readTransfer, sideData is 0x3d bytes long, transferDataLength is 0xcc0 bytes long +1087 1710847574106 XXXX 1710847574106, Thread 1087: XXXX 1710847574106, Exiting Thread 1087: ToolCommUsb::readTransfer, cr.status = 0x0 +1087 1710847574106 XXXX 1710847574106, Thread 1087: XXXX 1710847574106, Exiting Thread 1087: Commands::runScriptWithUpload +1087 1710847574106 XXXX 1710847574106, Thread 1087: XXXX 1710847574106, Entering Thread 1087: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1087 1710847574108 XXXX 1710847574108, Thread 1087: XXXX 1710847574108, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574108 XXXX 1710847574108, Thread 1087: XXXX 1710847574108, Entering Thread 1087: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1087 1710847574109 XXXX 1710847574109, Thread 1087: XXXX 1710847574109, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574109 XXXX 1710847574109, Thread 1087: XXXX 1710847574109, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1087 1710847574110 XXXX 1710847574110, Thread 1087: XXXX 1710847574110, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574110 XXXX 1710847574110, Thread 1087: XXXX 1710847574110, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1087 1710847574111 XXXX 1710847574111, Thread 1087: XXXX 1710847574111, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574111 XXXX 1710847574111, Thread 1087: XXXX 1710847574111, Entering Thread 1087: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1087 1710847574140 XXXX 1710847574140, Thread 1087: XXXX 1710847574140, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574140 XXXX 1710847574140, Thread 1087: XXXX 1710847574140, Entering Thread 1087: Commands::runScriptWithDownload, script name = WriteConfigmem +1087 1710847574155 XXXX 1710847574155, Thread 1087: XXXX 1710847574155, Exiting Thread 1087: Commands::runScriptWithDownload(WriteConfigmem) +1087 1710847574155 XXXX 1710847574155, Thread 1087: XXXX 1710847574155, Entering Thread 1087: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1087 1710847574157 XXXX 1710847574157, Thread 1087: XXXX 1710847574157, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574157 XXXX 1710847574157, Thread 1087: XXXX 1710847574157, Entering Thread 1087: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1087 1710847574158 XXXX 1710847574158, Thread 1087: XXXX 1710847574158, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574158 XXXX 1710847574158, Thread 1087: XXXX 1710847574158, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1087 1710847574159 XXXX 1710847574159, Thread 1087: XXXX 1710847574159, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574159 XXXX 1710847574159, Thread 1087: XXXX 1710847574159, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1087 1710847574160 XXXX 1710847574160, Thread 1087: XXXX 1710847574160, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574160 XXXX 1710847574160, Thread 1087: XXXX 1710847574160, Entering Thread 1087: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1087 1710847574190 XXXX 1710847574190, Thread 1087: XXXX 1710847574190, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574190 XXXX 1710847574190, Thread 1087: XXXX 1710847574190, Entering Thread 1087: Commands::runScriptWithUpload, script name = ReadConfigmem +1087 1710847574190 XXXX 1710847574190, Thread 1087: XXXX 1710847574190, Entering Thread 1087: ToolCommUsb::readTransfer, sideData is 0x55 bytes long, transferDataLength is 0x4 bytes long +1087 1710847574193 XXXX 1710847574193, Thread 1087: XXXX 1710847574193, Exiting Thread 1087: ToolCommUsb::readTransfer, cr.status = 0x0 +1087 1710847574193 XXXX 1710847574193, Thread 1087: XXXX 1710847574193, Exiting Thread 1087: Commands::runScriptWithUpload +1087 1710847574193 XXXX 1710847574193, Thread 1087: XXXX 1710847574193, Entering Thread 1087: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1087 1710847574195 XXXX 1710847574195, Thread 1087: XXXX 1710847574195, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574195 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1087 1710847574195 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1087 1710847574195 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1087 1710847574195 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1087 1710847574195 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:endOfOperations +1087 1710847574195 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1087 1710847574195 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 null +1087 1710847574195 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1087 1710847574195 XXXX 1710847574195, Thread 1087: XXXX 1710847574195, Entering Thread 1087: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1087 1710847574197 XXXX 1710847574197, Thread 1087: XXXX 1710847574197, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574197 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:endOfOperations +1087 1710847574197 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1087 1710847574197 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1087 1710847574197 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1087 1710847574200 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1087 1710847574200 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1087 1710847574200 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1087 1710847574200 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = releasefromreset, Mask = 00000000, Erase = false, Production Mode = true +1087 1710847574200 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1087 1710847574200 XXXX 1710847574200, Thread 1087: XXXX 1710847574200, Entering Thread 1087: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1087 1710847574202 XXXX 1710847574202, Thread 1087: XXXX 1710847574202, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574202 XXXX 1710847574202, Thread 1087: XXXX 1710847574202, Entering Thread 1087: Commands::runScriptBasic with script contents. contents[0] = 0x42, ... +1087 1710847574203 XXXX 1710847574203, Thread 1087: XXXX 1710847574203, Exiting Thread 1087: Commands::runScriptBasic +1087 1710847574203 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1087 1710847574203 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1087 1710847574203 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1087 1710847574203 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1098 1710847584856 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:EstablishCommunincations +1098 1710847584856 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1098 1710847584856 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 com.microchip.mplab.mdbcore.PK5Tool.PK5Com@2e5a1960 +1098 1710847584856 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1098 1710847584856 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:EstablishCommunincations +1098 1710847584856 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1098 1710847584856 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 true +1098 1710847584856 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End + +1098 1710847584856 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:GetFirmwareInfo +1098 1710847584856 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1098 1710847584856 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 null +1098 1710847584856 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1098 1710847584863 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:GetFirmwareInfo +1098 1710847584863 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1098 1710847584863 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 FirmwareInfo: Values: +1098 1710847584863 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 FirmwareInfo: boot = false, bootVer = 00.00.10, apVer = 02.00.84, fpgaVer = ff.ff.ff, scriptVer = 00.05.85, macAddress = 0504883548174844852485054485057, devID = a1020e01, devID1 = 2, devSN0 = ffffffff, devSN1 = ffffffff, serialNumber = 020026702RYN005435, appCommitID = null, scriptCommitID = d33d758f73, PCB_ID = 2 +1098 1710847584863 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End +1098 1710847584863 XXXX 1710847584863, Thread 1098: XXXX 1710847584863, Entering Thread 1098: Commands::runScriptWithUpload with script contents. contents[0] = 0x5e, ... +1098 1710847584863 XXXX 1710847584863, Thread 1098: XXXX 1710847584863, Entering Thread 1098: ToolCommUsb::readTransfer, sideData is 0xd bytes long, transferDataLength is 0x4 bytes long +1098 1710847584867 XXXX 1710847584867, Thread 1098: XXXX 1710847584867, Exiting Thread 1098: ToolCommUsb::readTransfer, cr.status = 0x0 +1098 1710847584867 XXXX 1710847584867, Thread 1098: XXXX 1710847584867, Exiting Thread 1098: Commands::runScriptWithUpload + +1098 1710847584867 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:SetPowerInfo +1098 1710847584867 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1098 1710847584867 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 PowerInfo: Values: +1098 1710847584867 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 PowerInfo: shotDownSystem = false, isToolPower = true, voltage = 5,000000, useVppFirst = false, useLowVoltageProgramming = false, useMaintainActivePower = false +1098 1710847584867 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1098 1710847584867 XXXX 1710847584867, Thread 1098: XXXX 1710847584867, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0x39, ... +1098 1710847584867 XXXX 1710847584867, Thread 1098: XXXX 1710847584867, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847584868 XXXX 1710847584868, Thread 1098: XXXX 1710847584868, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0x46, ... +1098 1710847584868 XXXX 1710847584868, Thread 1098: XXXX 1710847584868, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847584869 XXXX 1710847584869, Thread 1098: XXXX 1710847584869, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0x44, ... +1098 1710847584881 XXXX 1710847584881, Thread 1098: XXXX 1710847584881, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847584881 XXXX 1710847584881, Thread 1098: XXXX 1710847584881, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0x40, ... +1098 1710847585060 XXXX 1710847585060, Thread 1098: XXXX 1710847585060, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585060 XXXX 1710847585060, Thread 1098: XXXX 1710847585060, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0x47, ... +1098 1710847585066 XXXX 1710847585066, Thread 1098: XXXX 1710847585066, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:SetPowerInfo +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 none +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End + +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:SetLEDBrightness +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 5 +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1098 1710847585066 XXXX 1710847585066, Thread 1098: XXXX 1710847585066, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xcf, ... +1098 1710847585066 XXXX 1710847585066, Thread 1098: XXXX 1710847585066, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:SetLEDBrightness +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 none +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End + +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:SetToolInfo +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 ToolInfo: Values: +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 ToolInfo: speedLevel = 1, PGCResistance = 4700, PGDResistance = 4700, PGCPullDir = PullDown, PGDPullDir = PullDown, ICSPSelected = Wire2 +1098 1710847585066 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1098 1710847585066 XXXX 1710847585066, Thread 1098: XXXX 1710847585066, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0x27, ... +1098 1710847585067 XXXX 1710847585067, Thread 1098: XXXX 1710847585067, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585067 XXXX 1710847585067, Thread 1098: XXXX 1710847585067, Entering Thread 1098: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1098 1710847585068 XXXX 1710847585068, Thread 1098: XXXX 1710847585068, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585068 XXXX 1710847585068, Thread 1098: XXXX 1710847585068, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1098 1710847585069 XXXX 1710847585069, Thread 1098: XXXX 1710847585069, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585069 XXXX 1710847585069, Thread 1098: XXXX 1710847585069, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1098 1710847585070 XXXX 1710847585070, Thread 1098: XXXX 1710847585070, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585070 XXXX 1710847585070, Thread 1098: XXXX 1710847585070, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xd4, ... +1098 1710847585071 XXXX 1710847585071, Thread 1098: XXXX 1710847585071, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585071 XXXX 1710847585071, Thread 1098: XXXX 1710847585071, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xcd, ... +1098 1710847585072 XXXX 1710847585072, Thread 1098: XXXX 1710847585072, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585072 XXXX 1710847585072, Thread 1098: XXXX 1710847585072, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xce, ... +1098 1710847585074 XXXX 1710847585074, Thread 1098: XXXX 1710847585074, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585074 XXXX 1710847585074, Thread 1098: XXXX 1710847585074, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xcd, ... +1098 1710847585074 XXXX 1710847585074, Thread 1098: XXXX 1710847585074, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585074 XXXX 1710847585074, Thread 1098: XXXX 1710847585074, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xce, ... +1098 1710847585076 XXXX 1710847585076, Thread 1098: XXXX 1710847585076, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585076 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:SetToolInfo +1098 1710847585076 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1098 1710847585076 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 none +1098 1710847585076 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End + +1098 1710847585085 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1098 1710847585085 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1098 1710847585085 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1098 1710847585085 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = erase, Mask = 00000000, Erase = false, Production Mode = true +1098 1710847585085 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 0, End = 1fff, Buffer Length = 0, Type = Pgm, Mask = 00000000 +1098 1710847585085 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2007, End = 2008, Buffer Length = 0, Type = Cfg, Mask = 00000000 +1098 1710847585085 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 0, End = ff, Buffer Length = 0, Type = EEData, Mask = 00000000 +1098 1710847585085 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2000, End = 2003, Buffer Length = 0, Type = UserID, Mask = 00000000 +1098 1710847585085 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1098 1710847585085 XXXX 1710847585085, Thread 1098: XXXX 1710847585085, Entering Thread 1098: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1098 1710847585086 XXXX 1710847585086, Thread 1098: XXXX 1710847585086, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585086 XXXX 1710847585086, Thread 1098: XXXX 1710847585086, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1098 1710847585087 XXXX 1710847585087, Thread 1098: XXXX 1710847585087, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585087 XXXX 1710847585087, Thread 1098: XXXX 1710847585087, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1098 1710847585088 XXXX 1710847585088, Thread 1098: XXXX 1710847585088, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585088 XXXX 1710847585088, Thread 1098: XXXX 1710847585088, Entering Thread 1098: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1098 1710847585118 XXXX 1710847585118, Thread 1098: XXXX 1710847585118, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585118 XXXX 1710847585118, Thread 1098: XXXX 1710847585118, Entering Thread 1098: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1098 1710847585120 XXXX 1710847585120, Thread 1098: XXXX 1710847585120, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585120 XXXX 1710847585120, Thread 1098: XXXX 1710847585120, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1098 1710847585122 XXXX 1710847585122, Thread 1098: XXXX 1710847585122, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585122 XXXX 1710847585122, Thread 1098: XXXX 1710847585122, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1098 1710847585123 XXXX 1710847585123, Thread 1098: XXXX 1710847585123, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585123 XXXX 1710847585123, Thread 1098: XXXX 1710847585123, Entering Thread 1098: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1098 1710847585152 XXXX 1710847585152, Thread 1098: XXXX 1710847585152, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585152 XXXX 1710847585152, Thread 1098: XXXX 1710847585152, Entering Thread 1098: Commands::runScriptBasic, script name = EraseChip, timeOut = 30000 ms +1098 1710847585159 XXXX 1710847585159, Thread 1098: XXXX 1710847585159, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585159 XXXX 1710847585159, Thread 1098: XXXX 1710847585159, Entering Thread 1098: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1098 1710847585161 XXXX 1710847585161, Thread 1098: XXXX 1710847585161, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585161 XXXX 1710847585161, Thread 1098: XXXX 1710847585161, Entering Thread 1098: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1098 1710847585162 XXXX 1710847585162, Thread 1098: XXXX 1710847585162, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585162 XXXX 1710847585162, Thread 1098: XXXX 1710847585162, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1098 1710847585163 XXXX 1710847585163, Thread 1098: XXXX 1710847585163, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585163 XXXX 1710847585163, Thread 1098: XXXX 1710847585163, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1098 1710847585164 XXXX 1710847585164, Thread 1098: XXXX 1710847585164, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585164 XXXX 1710847585164, Thread 1098: XXXX 1710847585164, Entering Thread 1098: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1098 1710847585193 XXXX 1710847585193, Thread 1098: XXXX 1710847585193, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585193 XXXX 1710847585193, Thread 1098: XXXX 1710847585193, Entering Thread 1098: Commands::runScriptBasic, script name = EraseDataEEmem, timeOut = 30000 ms +1098 1710847585200 XXXX 1710847585200, Thread 1098: XXXX 1710847585200, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585200 XXXX 1710847585200, Thread 1098: XXXX 1710847585200, Entering Thread 1098: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1098 1710847585202 XXXX 1710847585202, Thread 1098: XXXX 1710847585202, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585202 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1098 1710847585202 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1098 1710847585202 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1098 1710847585202 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1098 1710847585203 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1098 1710847585203 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1098 1710847585203 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1098 1710847585203 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = write, Mask = 00000000, Erase = false, Production Mode = true +1098 1710847585203 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2007, End = 2008, Buffer Length = 4, Type = Cfg, Mask = 00000000 +1098 1710847585203 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1098 1710847585203 XXXX 1710847585203, Thread 1098: XXXX 1710847585203, Entering Thread 1098: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1098 1710847585203 XXXX 1710847585203, Thread 1098: XXXX 1710847585203, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585203 XXXX 1710847585203, Thread 1098: XXXX 1710847585203, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1098 1710847585204 XXXX 1710847585204, Thread 1098: XXXX 1710847585204, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585204 XXXX 1710847585204, Thread 1098: XXXX 1710847585204, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1098 1710847585205 XXXX 1710847585205, Thread 1098: XXXX 1710847585205, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585205 XXXX 1710847585205, Thread 1098: XXXX 1710847585205, Entering Thread 1098: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1098 1710847585234 XXXX 1710847585234, Thread 1098: XXXX 1710847585234, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585235 XXXX 1710847585235, Thread 1098: XXXX 1710847585235, Entering Thread 1098: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1098 1710847585235 XXXX 1710847585235, Thread 1098: XXXX 1710847585235, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585235 XXXX 1710847585235, Thread 1098: XXXX 1710847585235, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1098 1710847585236 XXXX 1710847585236, Thread 1098: XXXX 1710847585236, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585236 XXXX 1710847585236, Thread 1098: XXXX 1710847585236, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1098 1710847585237 XXXX 1710847585237, Thread 1098: XXXX 1710847585237, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585237 XXXX 1710847585237, Thread 1098: XXXX 1710847585237, Entering Thread 1098: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1098 1710847585267 XXXX 1710847585267, Thread 1098: XXXX 1710847585267, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585267 XXXX 1710847585267, Thread 1098: XXXX 1710847585267, Entering Thread 1098: Commands::runScriptWithDownload, script name = WriteConfigmem +1098 1710847585283 XXXX 1710847585283, Thread 1098: XXXX 1710847585283, Exiting Thread 1098: Commands::runScriptWithDownload(WriteConfigmem) +1098 1710847585283 XXXX 1710847585283, Thread 1098: XXXX 1710847585283, Entering Thread 1098: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1098 1710847585285 XXXX 1710847585284, Thread 1098: XXXX 1710847585284, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585285 XXXX 1710847585285, Thread 1098: XXXX 1710847585285, Entering Thread 1098: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1098 1710847585285 XXXX 1710847585285, Thread 1098: XXXX 1710847585285, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585285 XXXX 1710847585285, Thread 1098: XXXX 1710847585285, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1098 1710847585286 XXXX 1710847585286, Thread 1098: XXXX 1710847585286, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585286 XXXX 1710847585286, Thread 1098: XXXX 1710847585286, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1098 1710847585287 XXXX 1710847585287, Thread 1098: XXXX 1710847585287, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585287 XXXX 1710847585287, Thread 1098: XXXX 1710847585287, Entering Thread 1098: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1098 1710847585317 XXXX 1710847585317, Thread 1098: XXXX 1710847585317, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585317 XXXX 1710847585317, Thread 1098: XXXX 1710847585317, Entering Thread 1098: Commands::runScriptWithUpload, script name = ReadConfigmem +1098 1710847585317 XXXX 1710847585317, Thread 1098: XXXX 1710847585317, Entering Thread 1098: ToolCommUsb::readTransfer, sideData is 0x55 bytes long, transferDataLength is 0x4 bytes long +1098 1710847585320 XXXX 1710847585320, Thread 1098: XXXX 1710847585320, Exiting Thread 1098: ToolCommUsb::readTransfer, cr.status = 0x0 +1098 1710847585320 XXXX 1710847585320, Thread 1098: XXXX 1710847585320, Exiting Thread 1098: Commands::runScriptWithUpload +1098 1710847585320 XXXX 1710847585320, Thread 1098: XXXX 1710847585320, Entering Thread 1098: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1098 1710847585321 XXXX 1710847585321, Thread 1098: XXXX 1710847585321, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585322 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1098 1710847585322 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1098 1710847585322 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1098 1710847585322 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1098 1710847585323 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1098 1710847585323 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1098 1710847585323 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1098 1710847585323 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = write, Mask = 00000000, Erase = false, Production Mode = true +1098 1710847585323 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 0, End = 65f, Buffer Length = 3264, Type = Pgm, Mask = 00000000 +1098 1710847585323 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 TransferInfo: Start = 2007, End = 2008, Buffer Length = 4, Type = Cfg, Mask = 00000000 +1098 1710847585323 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1098 1710847585323 XXXX 1710847585323, Thread 1098: XXXX 1710847585323, Entering Thread 1098: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1098 1710847585324 XXXX 1710847585324, Thread 1098: XXXX 1710847585324, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585324 XXXX 1710847585324, Thread 1098: XXXX 1710847585324, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1098 1710847585325 XXXX 1710847585325, Thread 1098: XXXX 1710847585325, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585325 XXXX 1710847585325, Thread 1098: XXXX 1710847585325, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1098 1710847585326 XXXX 1710847585326, Thread 1098: XXXX 1710847585326, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585326 XXXX 1710847585326, Thread 1098: XXXX 1710847585326, Entering Thread 1098: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1098 1710847585356 XXXX 1710847585356, Thread 1098: XXXX 1710847585356, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585356 XXXX 1710847585356, Thread 1098: XXXX 1710847585356, Entering Thread 1098: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1098 1710847585357 XXXX 1710847585357, Thread 1098: XXXX 1710847585357, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585357 XXXX 1710847585357, Thread 1098: XXXX 1710847585357, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1098 1710847585358 XXXX 1710847585358, Thread 1098: XXXX 1710847585358, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585358 XXXX 1710847585358, Thread 1098: XXXX 1710847585358, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1098 1710847585359 XXXX 1710847585359, Thread 1098: XXXX 1710847585359, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585359 XXXX 1710847585359, Thread 1098: XXXX 1710847585359, Entering Thread 1098: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1098 1710847585388 XXXX 1710847585388, Thread 1098: XXXX 1710847585388, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847585388 XXXX 1710847585388, Thread 1098: XXXX 1710847585388, Entering Thread 1098: Commands::runScriptWithDownload, script name = WriteProgmem +1098 1710847586077 XXXX 1710847586077, Thread 1098: XXXX 1710847586077, Exiting Thread 1098: Commands::runScriptWithDownload(WriteProgmem) +1098 1710847586077 XXXX 1710847586077, Thread 1098: XXXX 1710847586077, Entering Thread 1098: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1098 1710847586079 XXXX 1710847586079, Thread 1098: XXXX 1710847586079, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586079 XXXX 1710847586079, Thread 1098: XXXX 1710847586079, Entering Thread 1098: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1098 1710847586080 XXXX 1710847586080, Thread 1098: XXXX 1710847586080, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586080 XXXX 1710847586080, Thread 1098: XXXX 1710847586080, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1098 1710847586081 XXXX 1710847586081, Thread 1098: XXXX 1710847586081, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586081 XXXX 1710847586081, Thread 1098: XXXX 1710847586081, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1098 1710847586082 XXXX 1710847586082, Thread 1098: XXXX 1710847586082, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586082 XXXX 1710847586082, Thread 1098: XXXX 1710847586082, Entering Thread 1098: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1098 1710847586112 XXXX 1710847586112, Thread 1098: XXXX 1710847586112, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586112 XXXX 1710847586112, Thread 1098: XXXX 1710847586112, Entering Thread 1098: Commands::runScriptWithUpload, script name = ReadProgmem +1098 1710847586112 XXXX 1710847586112, Thread 1098: XXXX 1710847586112, Entering Thread 1098: ToolCommUsb::readTransfer, sideData is 0x3d bytes long, transferDataLength is 0xcc0 bytes long +1098 1710847586187 XXXX 1710847586187, Thread 1098: XXXX 1710847586187, Exiting Thread 1098: ToolCommUsb::readTransfer, cr.status = 0x0 +1098 1710847586187 XXXX 1710847586187, Thread 1098: XXXX 1710847586187, Exiting Thread 1098: Commands::runScriptWithUpload +1098 1710847586187 XXXX 1710847586187, Thread 1098: XXXX 1710847586187, Entering Thread 1098: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1098 1710847586189 XXXX 1710847586189, Thread 1098: XXXX 1710847586189, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586189 XXXX 1710847586189, Thread 1098: XXXX 1710847586189, Entering Thread 1098: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1098 1710847586190 XXXX 1710847586190, Thread 1098: XXXX 1710847586190, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586190 XXXX 1710847586190, Thread 1098: XXXX 1710847586190, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1098 1710847586191 XXXX 1710847586191, Thread 1098: XXXX 1710847586191, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586191 XXXX 1710847586191, Thread 1098: XXXX 1710847586191, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1098 1710847586192 XXXX 1710847586192, Thread 1098: XXXX 1710847586192, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586192 XXXX 1710847586192, Thread 1098: XXXX 1710847586192, Entering Thread 1098: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1098 1710847586221 XXXX 1710847586221, Thread 1098: XXXX 1710847586221, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586221 XXXX 1710847586221, Thread 1098: XXXX 1710847586221, Entering Thread 1098: Commands::runScriptWithDownload, script name = WriteConfigmem +1098 1710847586235 XXXX 1710847586235, Thread 1098: XXXX 1710847586235, Exiting Thread 1098: Commands::runScriptWithDownload(WriteConfigmem) +1098 1710847586235 XXXX 1710847586235, Thread 1098: XXXX 1710847586235, Entering Thread 1098: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1098 1710847586237 XXXX 1710847586237, Thread 1098: XXXX 1710847586237, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586238 XXXX 1710847586238, Thread 1098: XXXX 1710847586238, Entering Thread 1098: Commands::runScriptBasic, script name = SetSpeedFromDevice, timeOut = -1 ms +1098 1710847586238 XXXX 1710847586238, Thread 1098: XXXX 1710847586238, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586238 XXXX 1710847586238, Thread 1098: XXXX 1710847586238, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xed, ... +1098 1710847586239 XXXX 1710847586239, Thread 1098: XXXX 1710847586239, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586239 XXXX 1710847586239, Thread 1098: XXXX 1710847586239, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0xec, ... +1098 1710847586240 XXXX 1710847586240, Thread 1098: XXXX 1710847586240, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586240 XXXX 1710847586240, Thread 1098: XXXX 1710847586240, Entering Thread 1098: Commands::runScriptBasic, script name = EnterTMOD_HV, timeOut = -1 ms +1098 1710847586270 XXXX 1710847586270, Thread 1098: XXXX 1710847586270, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586270 XXXX 1710847586270, Thread 1098: XXXX 1710847586270, Entering Thread 1098: Commands::runScriptWithUpload, script name = ReadConfigmem +1098 1710847586270 XXXX 1710847586270, Thread 1098: XXXX 1710847586270, Entering Thread 1098: ToolCommUsb::readTransfer, sideData is 0x55 bytes long, transferDataLength is 0x4 bytes long +1098 1710847586273 XXXX 1710847586273, Thread 1098: XXXX 1710847586273, Exiting Thread 1098: ToolCommUsb::readTransfer, cr.status = 0x0 +1098 1710847586273 XXXX 1710847586273, Thread 1098: XXXX 1710847586273, Exiting Thread 1098: Commands::runScriptWithUpload +1098 1710847586273 XXXX 1710847586273, Thread 1098: XXXX 1710847586273, Entering Thread 1098: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1098 1710847586275 XXXX 1710847586275, Thread 1098: XXXX 1710847586275, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586275 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1098 1710847586275 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1098 1710847586275 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1098 1710847586275 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1098 1710847586275 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:endOfOperations +1098 1710847586275 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1098 1710847586275 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 null +1098 1710847586275 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1098 1710847586275 XXXX 1710847586275, Thread 1098: XXXX 1710847586275, Entering Thread 1098: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1098 1710847586277 XXXX 1710847586277, Thread 1098: XXXX 1710847586277, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586277 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:endOfOperations +1098 1710847586277 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1098 1710847586277 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1098 1710847586277 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End + +1098 1710847586279 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Pre:SendOperation +1098 1710847586279 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload +1098 1710847586279 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Values: +1098 1710847586279 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 OperationInfo: Type = releasefromreset, Mask = 00000000, Erase = false, Production Mode = true +1098 1710847586279 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Payload End +1098 1710847586280 XXXX 1710847586280, Thread 1098: XXXX 1710847586280, Entering Thread 1098: Commands::runScriptBasic, script name = ExitTMOD, timeOut = -1 ms +1098 1710847586281 XXXX 1710847586281, Thread 1098: XXXX 1710847586281, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586282 XXXX 1710847586282, Thread 1098: XXXX 1710847586282, Entering Thread 1098: Commands::runScriptBasic with script contents. contents[0] = 0x42, ... +1098 1710847586282 XXXX 1710847586282, Thread 1098: XXXX 1710847586282, Exiting Thread 1098: Commands::runScriptBasic +1098 1710847586283 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Post:SendOperation +1098 1710847586283 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return Value +1098 1710847586283 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 None +1098 1710847586283 GEN4_TO_CONTROLLER_LOG:GEN4_PROGRAM_INT_LOG_PIC16F887 Return End +105 1710847718083 GEN4_CONNECT_DIAGNOSTICS:Calling Update on plug and play observer com.microchip.mplab.mdbcore.RI4Tool.RI4ToolBase$RI4PlugNPlayObserver@658e9694 +105 1710847718083 GEN4_CONNECT_DIAGNOSTICS:Entering plug and play Update(). Attached PID = 9036 +105 1710847718083 GEN4_CONNECT_DIAGNOSTICS:Entering MPLABCommEvent handler +105 1710847718083 GEN4_CONNECT_DIAGNOSTICS:MPLABCommEvent.pid = 9036 +105 1710847718083 GEN4_CONNECT_DIAGNOSTICS:eventType = MPLABCOMM_TOOL_UNPLUGGED +105 1710847718084 GEN4_CONNECT_DIAGNOSTICS:Exiting plug and play Update() +105 1710847718597 XXXX 1710847718596, Thread 105: com.Send returned false +105 1710847718600 XXXX 1710847718600, Thread 105: execCommand: exception after writeSideChanel null +105 1710847718600 GEN4_CONNECT_DIAGNOSTICS:Before MPLABCommTool.Connect() +105 1710847718600 GEN4_CONNECT_DIAGNOSTICS:After MPLABCommTool.Connect() +105 1710847718604 GEN4_CONNECT_DIAGNOSTICS:Calling Update on plug and play observer com.microchip.mplab.mdbcore.RI4Tool.RI4ToolBase$RI4PlugNPlayObserver@658e9694 +105 1710847718604 GEN4_CONNECT_DIAGNOSTICS:Entering plug and play Update(). Attached PID = 9036 +105 1710847718604 GEN4_CONNECT_DIAGNOSTICS:Entering MPLABCommEvent handler +105 1710847718604 GEN4_CONNECT_DIAGNOSTICS:MPLABCommEvent.pid = 9036 +105 1710847718604 GEN4_CONNECT_DIAGNOSTICS:eventType = MPLABCOMM_TOOL_PLUGGEDIN + +105 1710847718604 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:GetFirmwareInfo +105 1710847718604 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +105 1710847718604 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 null +105 1710847718604 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +105 1710847718617 XXXX 1710847718617, Thread 105: com.Send returned false +105 1710847718617 XXXX 1710847718617, Thread 105: execCommand: exception after writeSideChanel null +105 1710847718617 GEN4_CONNECT_DIAGNOSTICS:Exiting plug and play Update() + +1124 1710848256983 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:EstablishCommunincations +1124 1710848256983 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1124 1710848256983 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 com.microchip.mplab.mdbcore.PK5Tool.PK5Com@2e5a1960 +1124 1710848256983 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1124 1710848256983 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Post:EstablishCommunincations +1124 1710848256983 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return Value +1124 1710848256983 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 true +1124 1710848256983 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Return End + +1124 1710848256983 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Pre:GetFirmwareInfo +1124 1710848256983 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload +1124 1710848256983 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 null +1124 1710848256983 GEN4_TO_CONTROLLER_LOG:GEN4_CONNECT_INT_LOG_PIC16F887 Payload End +1124 1710848256984 XXXX 1710848256984, Thread 1124: com.Send returned false +1124 1710848256984 XXXX 1710848256984, Thread 1124: execCommand: exception after writeSideChanel null diff --git a/src/picamp.X/libs/HCMS2913.X/Makefile b/src/picamp.X/libs/HCMS2913.X/Makefile new file mode 100644 index 0000000..fca8e2c --- /dev/null +++ b/src/picamp.X/libs/HCMS2913.X/Makefile @@ -0,0 +1,113 @@ +# +# There exist several targets which are by default empty and which can be +# used for execution of your targets. These targets are usually executed +# before and after some main targets. They are: +# +# .build-pre: called before 'build' target +# .build-post: called after 'build' target +# .clean-pre: called before 'clean' target +# .clean-post: called after 'clean' target +# .clobber-pre: called before 'clobber' target +# .clobber-post: called after 'clobber' target +# .all-pre: called before 'all' target +# .all-post: called after 'all' target +# .help-pre: called before 'help' target +# .help-post: called after 'help' target +# +# Targets beginning with '.' are not intended to be called on their own. +# +# Main targets can be executed directly, and they are: +# +# build build a specific configuration +# clean remove built files from a configuration +# clobber remove all built files +# all build all configurations +# help print help mesage +# +# Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and +# .help-impl are implemented in nbproject/makefile-impl.mk. +# +# Available make variables: +# +# CND_BASEDIR base directory for relative paths +# CND_DISTDIR default top distribution directory (build artifacts) +# CND_BUILDDIR default top build directory (object files, ...) +# CONF name of current configuration +# CND_ARTIFACT_DIR_${CONF} directory of build artifact (current configuration) +# CND_ARTIFACT_NAME_${CONF} name of build artifact (current configuration) +# CND_ARTIFACT_PATH_${CONF} path to build artifact (current configuration) +# CND_PACKAGE_DIR_${CONF} directory of package (current configuration) +# CND_PACKAGE_NAME_${CONF} name of package (current configuration) +# CND_PACKAGE_PATH_${CONF} path to package (current configuration) +# +# NOCDDL + + +# Environment +MKDIR=mkdir +CP=cp +CCADMIN=CCadmin +RANLIB=ranlib + + +# build +build: .build-post + +.build-pre: +# Add your pre 'build' code here... + +.build-post: .build-impl +# Add your post 'build' code here... + + +# clean +clean: .clean-post + +.clean-pre: +# Add your pre 'clean' code here... +# WARNING: the IDE does not call this target since it takes a long time to +# simply run make. Instead, the IDE removes the configuration directories +# under build and dist directly without calling make. +# This target is left here so people can do a clean when running a clean +# outside the IDE. + +.clean-post: .clean-impl +# Add your post 'clean' code here... + + +# clobber +clobber: .clobber-post + +.clobber-pre: +# Add your pre 'clobber' code here... + +.clobber-post: .clobber-impl +# Add your post 'clobber' code here... + + +# all +all: .all-post + +.all-pre: +# Add your pre 'all' code here... + +.all-post: .all-impl +# Add your post 'all' code here... + + +# help +help: .help-post + +.help-pre: +# Add your pre 'help' code here... + +.help-post: .help-impl +# Add your post 'help' code here... + + + +# include project implementation makefile +include nbproject/Makefile-impl.mk + +# include project make variables +include nbproject/Makefile-variables.mk diff --git a/src/picamp.X/libs/HCMS2913.X/h/HCMS2913.h b/src/picamp.X/libs/HCMS2913.X/h/HCMS2913.h new file mode 100644 index 0000000..75ce3c0 --- /dev/null +++ b/src/picamp.X/libs/HCMS2913.X/h/HCMS2913.h @@ -0,0 +1,106 @@ +#ifndef HCMS2913_H +#define HCMS2913_H + +#include "HCMS2913.h" +#include +#include + +/* MANUAL: + * 1/3 FILL IN HCMS_SETTINGS STRUCT + * 2/3 RUN HCMS_spi_init() + * 3/3 RUN HCMS_init() + * HCMS_load_word AND HCMS_change_brightness CAN BE USED NOW. + */ +//!!Remember to set the Tristates to Output(0) for RSELECT, CENABLE, BLANK, RESET. And start the Port pins at 0. Dont forget your analog selection. +//FIGURE 1 ON PAGE 12 OF THE DATASHEET EXPLAINS EXACTLY WHY IT IS NECESSARY TO USE SPI MODE 0 (CKP0 CKE1). DATA IS LATCHED ON FALLING CLK WHILE nCE IS HIGH. + +typedef struct { + volatile unsigned char * REGaddress; + unsigned char pin; +} REGbit; + +typedef struct { + int s_insNeededFor200ns; + //spi buffer + volatile unsigned char * s_SSPBUF; + REGbit s_SSPMlsb; //assumption: SSPM is always 4 bits long + REGbit s_SSPBF; + //spi data + REGbit s_SCK_PIN; + REGbit s_SDI_DDIR; + REGbit s_SDO_DDIR; + REGbit s_SCK_DDIR; + //spi int + REGbit s_SSPINTE; + REGbit s_SSPINTFLAG; + //spi settings + REGbit s_CKP; + REGbit s_CKE; + REGbit s_SSPEN; + REGbit s_SMP; + //screen pins + REGbit s_RESETpin; + REGbit s_BLANKpin; + REGbit s_CENABLEpin; + REGbit s_RSELECTpin; +} HCMS_settings; + +// PWM works on normal 4 bit binary: 0%, 1.7%, 3.3%, 5%, 6.7%, 8.3%, 11.7%, 15%, 18%, 23%, 30%, 37%, 47%, 60%, 80%, 100% +// Peak Current Brightness Control: 00 = 73%, 01 = 50%, 10 = 31%, 11 = 100% +// Sleep: 1 = Normal operation, 0 = Disables internal Oscillator-display blank + +typedef struct { + bool PWM0, PWM1, PWM2, PWM3, PKBC0, PKBC1, SLEEP, WORDSELECT; +} HCMS_ControlWordZero; + +//Serial/Simultaneous Data Out: 0 = D out holds contents of Bit D7, 1 = D out is functionally tied to Din. +//External Display Oscillator Prescaler: 0 = 1, 1 = 8. +//D2 - D6: Reserved for Future Use (Bits D 2 -D6 must be set Low) + +typedef struct { + bool SSDO, EXDO, D2, D3, D4, D5, D6, WORDSELECT; +} HCMS_ControlWordOne; + +//these are loaded MSB first, make sure your code reflects this! +//HCMS_ControlWordZero HCMS2913_word0 = {.PWM0 = 0, .PWM1 = 0, .PWM2 = 0, .PWM3 = 0, .PKBC0 = 0, .PKBC1 = 0, .SLEEP = 1, .WORDSELECT = 0}; +//HCMS_ControlWordOne HCMS2913_word1 = {.SSDO = 0, .EXDO = 0, .D2 = 0, .D3 = 0, .D4 = 0, .D5 = 0, .D6 = 0, .WORDSELECT = 1}; + +typedef enum { + MST_OSC_DIV_04, // 0x0: 0000 + MST_OSC_DIV_16, // 0x1: 0001 + MST_OSC_DIV_64, // 0x2: 0010 + MST_OSC_DIV_T2, // 0x3: 0011 + SLV_SS_EN, // 0x4: 0100 - not used in this version of our lib ... + SLV_SS_DIS // 0x5: 0101 +} sspmode; + +// Datasheet SMP (Sample Timing) behavior in (SPI MASTER MODE ONLY): +// 1 = Input data sampled (received) at end of data output time +// 0 = Input data sampled (recieved) at middle of data output time + +typedef enum { + SMP0_SDI_MIDDLE, SMP1_SDI_END +} rxsmpmoment; + +// Datasheet CKP (Clock Polarity) select bit behavior (SPI mode): +// 1 = Idle state for clock is a high level +// 0 = Idle state for clock is a low level + +typedef enum { + CKP0_CPOL0_IDLE_LOW, CKP1_CPOL1_IDLE_HIGH +} clkpol; + +// Datasheet CKE (Clock Edge) select bit behavior (SPI mode): +// 1 = Transmit occurs on transition from active to Idle clock state +// 0 = Transmit occurs on transition from Idle to active clock state +// ! NOTE: Microchip CKE bit is always the inverse of Motorola CPHA bit! + +typedef enum { + CKE0_CPHA1_TRSMIT_IDL2ACT, CKE1_CPHA0_TRSMIT_ACT2IDL +} txclkedge; + +void HCMS_spi_init(sspmode mst_slv_oscdiv, rxsmpmoment sdi_rx_smp, clkpol clock_pol, txclkedge sdo_tx_edge, const HCMS_settings* _settings); +void HCMS_init(const HCMS_settings* _settings); +void HCMS_load_word(const char *_string, const HCMS_settings* _settings); +void HCMS_change_brightness(uint8_t setTo, const HCMS_settings* _settings); +#endif diff --git a/picamp.X/include/ascii.h b/src/picamp.X/libs/HCMS2913.X/h/HCMS_ASCII.h old mode 100755 new mode 100644 similarity index 78% rename from picamp.X/include/ascii.h rename to src/picamp.X/libs/HCMS2913.X/h/HCMS_ASCII.h index 729bade..0364d43 --- a/picamp.X/include/ascii.h +++ b/src/picamp.X/libs/HCMS2913.X/h/HCMS_ASCII.h @@ -1,10 +1,11 @@ -#ifndef ASCII_H -#define ASCII_H +#ifndef HCMS_ASCII_H +#define HCMS_ASCII_H +#define ASCII_TABLE_SIZE 106 // characters taken from "HCMS-29xx/HCMS-39xx LED Displays Character Set (ASCII and Katakana)" // cherry picked and ordered by Burhan Topaloglu // item 6 is for lookup. -const char ascii[128][6] = { +const char HCMS_ascii[ASCII_TABLE_SIZE][6] = { // debug {0x00, 0x00, 0x00, 0x00, 0x00, ' '}, // 0 space/empty {0x2A, 0x55, 0x2A, 0x55, 0x2A, 0xD7}, // 1 checker, using the ascii for x cross @@ -123,29 +124,29 @@ const char ascii[128][6] = { {0x08, 0x04, 0x08, 0x10, 0x08, '~'}, // 104 ~ // user defined or unusual desired characters - {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 105 filler - FULL - {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 106 filler - FULL - {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 107 filler - FULL - {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 108 filler - FULL - {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 109 filler - FULL - {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 110 filler - FULL - {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 111 filler - FULL - {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 112 filler - FULL - {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 113 filler - FULL - {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 114 filler - FULL - {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 115 filler - FULL - {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 116 filler - FULL - {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 117 filler - FULL - {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 118 filler - FULL - {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 119 filler - FULL - {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 120 filler - FULL - {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 121 filler - FULL - {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 122 filler - FULL - {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 123 filler - FULL - {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 124 filler - FULL - {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 125 filler - FULL - {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 126 filler - FULL - {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8} // 127 FINAL - FULL Latin capital letter O with slash + {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8} // 105 filler - FULL +// {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 106 filler - FULL +// {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 107 filler - FULL +// {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 108 filler - FULL +// {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 109 filler - FULL +// {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 110 filler - FULL +// {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 111 filler - FULL +// {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 112 filler - FULL +// {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 113 filler - FULL +// {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 114 filler - FULL +// {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 115 filler - FULL +// {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 116 filler - FULL +// {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 117 filler - FULL +// {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 118 filler - FULL +// {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 119 filler - FULL +// {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 120 filler - FULL +// {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 121 filler - FULL +// {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 122 filler - FULL +// {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 123 filler - FULL +// {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 124 filler - FULL +// {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 125 filler - FULL +// {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8}, // 126 filler - FULL +// {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xD8} // 127 FINAL - FULL Latin capital letter O with slash }; // filler has been added to keep size static in the future, this script may be edited to add custom characters if desired #endif \ No newline at end of file diff --git a/src/picamp.X/libs/HCMS2913.X/h/HCMS_brightness.h b/src/picamp.X/libs/HCMS2913.X/h/HCMS_brightness.h new file mode 100644 index 0000000..ab3e0a2 --- /dev/null +++ b/src/picamp.X/libs/HCMS2913.X/h/HCMS_brightness.h @@ -0,0 +1,136 @@ +#ifndef HCMS_BRIGHTNESS_H +#define HCMS_BRIGHTNESS_H + +#include +#define HCMS2913_BRIGHTNESS_SETTINGS_COUNT 59 +//This header includes HCMS_BRIGHT_VALUES[59] and HCMS_BRIGHT_PERCENT[59] +//All possible brightness settings put into a spreadsheet and sorted by Burhan Topaloglu, this is 2^4 * 4 = 64 - 5 duplicates (0 0 0 30 30 15 15) = 59 +//These values include the 2 MSBs for word0, d7 to select word0 and d6 to set SLEEP to normal +//Information derives from the Avago "HCMS-29xx Series High Performance CMOS 5×7 Alphanumeric Displays" Datasheet +//Not a 2D array this time, dont need to store 59 extra floats if I just need 8 bits for the required message +const uint8_t HCMS_BRIGHT_VALUES[HCMS2913_BRIGHTNESS_SETTINGS_COUNT] = { + 0b01100000, + 0b01100001, + 0b01010001, + 0b01100010, + 0b01000001, + 0b01100011, + 0b01010010, + 0b01110001, + 0b01100100, + 0b01000010, + 0b01010011, + 0b01100101, + 0b01110010, + 0b01010100, + 0b01100110, + 0b01000011, + 0b01010101, + 0b01100111, + 0b01000100, + 0b01110011, + 0b01101000, + 0b01010110, + 0b01000101, + 0b01110100, + 0b01101001, + 0b01010111, + 0b01110101, + 0b01000110, + 0b01011000, + 0b01101010, + 0b01000111, + 0b01101011, + 0b01011001, + 0b01110110, + 0b01001000, + 0b01101100, + 0b01011010, + 0b01001001, + 0b01111000, + 0b01011011, + 0b01101101, + 0b01001010, + 0b01111001, + 0b01011100, + 0b01101110, + 0b01001011, + 0b01011101, + 0b01101111, + 0b01001100, + 0b01111011, + 0b01011110, + 0b01001101, + 0b01111100, + 0b01011111, + 0b01001110, + 0b01111101, + 0b01001111, + 0b01111110, + 0b01111111 +}; + +/* +const float HCMS_BRIGHT_PERCENT[HCMS2913_BRIGHTNESS_SETTINGS_COUNT] = { +0.0f, +0.527f, +0.85f, +1.023f, +1.241f, +1.55f, +1.65f, +1.7f, +2.077f, +2.409f, +2.5f, +2.573f, +3.3f, +3.35f, +3.627f, +3.65f, +4.15f, +4.65f, +4.891f, +5.0f, +5.58f, +5.85f, +6.059f, +6.7f, +7.13f, +7.5f, +8.3f, +8.541f, +9.0f, +9.3f, +10.95f, +11.47f, +11.5f, +11.7f, +13.14f, +14.57f, +15.0f, +16.79f, +18.0f, +18.5f, +18.6f, +21.9f, +23.0f, +23.5f, +24.8f, +27.01f, +30.0f, +31.0f, +34.31f, +37.0f, +40.0f, +43.8f, +47.0f, +50.0f, +58.4f, +60.0f, +73.0f, +80.0f, +100.0f +}; + */ +#endif \ No newline at end of file diff --git a/src/picamp.X/libs/HCMS2913.X/nbproject/Makefile-default.mk b/src/picamp.X/libs/HCMS2913.X/nbproject/Makefile-default.mk new file mode 100644 index 0000000..eb1fae9 --- /dev/null +++ b/src/picamp.X/libs/HCMS2913.X/nbproject/Makefile-default.mk @@ -0,0 +1,156 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a -pre and a -post target defined where you can add customized code. +# +# This makefile implements configuration specific macros and targets. + + +# Include project Makefile +ifeq "${IGNORE_LOCAL}" "TRUE" +# do not include local makefile. User is passing all local related variables already +else +include Makefile +# Include makefile containing local settings +ifeq "$(wildcard nbproject/Makefile-local-default.mk)" "nbproject/Makefile-local-default.mk" +include nbproject/Makefile-local-default.mk +endif +endif + +# Environment +MKDIR=mkdir -p +RM=rm -f +MV=mv +CP=cp + +# Macros +CND_CONF=default +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +IMAGE_TYPE=debug +OUTPUT_SUFFIX=a +DEBUGGABLE_SUFFIX=a +FINAL_IMAGE=${DISTDIR}/HCMS2913.X.${OUTPUT_SUFFIX} +else +IMAGE_TYPE=production +OUTPUT_SUFFIX=a +DEBUGGABLE_SUFFIX=a +FINAL_IMAGE=${DISTDIR}/HCMS2913.X.${OUTPUT_SUFFIX} +endif + +ifeq ($(COMPARE_BUILD), true) +COMPARISON_BUILD=-mafrlcsj +else +COMPARISON_BUILD= +endif + +# Object Directory +OBJECTDIR=build/${CND_CONF}/${IMAGE_TYPE} + +# Distribution Directory +DISTDIR=dist/${CND_CONF}/${IMAGE_TYPE} + +# Source Files Quoted if spaced +SOURCEFILES_QUOTED_IF_SPACED=src/HCMS2913.c + +# Object Files Quoted if spaced +OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/src/HCMS2913.p1 +POSSIBLE_DEPFILES=${OBJECTDIR}/src/HCMS2913.p1.d + +# Object Files +OBJECTFILES=${OBJECTDIR}/src/HCMS2913.p1 + +# Source Files +SOURCEFILES=src/HCMS2913.c + + + +CFLAGS= +ASFLAGS= +LDLIBSOPTIONS= + +############# Tool locations ########################################## +# If you copy a project from one host to another, the path where the # +# compiler is installed may be different. # +# If you open this project with MPLAB X in the new host, this # +# makefile will be regenerated and the paths will be corrected. # +####################################################################### +# fixDeps replaces a bunch of sed/cat/printf statements that slow down the build +FIXDEPS=fixDeps + +.build-conf: ${BUILD_SUBPROJECTS} +ifneq ($(INFORMATION_MESSAGE), ) + @echo $(INFORMATION_MESSAGE) +endif + ${MAKE} -f nbproject/Makefile-default.mk ${DISTDIR}/HCMS2913.X.${OUTPUT_SUFFIX} + +MP_PROCESSOR_OPTION=16F887 +# ------------------------------------------------------------------------------------ +# Rules for buildStep: compile +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +${OBJECTDIR}/src/HCMS2913.p1: src/HCMS2913.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/src" + @${RM} ${OBJECTDIR}/src/HCMS2913.p1.d + @${RM} ${OBJECTDIR}/src/HCMS2913.p1 + ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -mdebugger=none -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -I"../../../../../.local/share/microchip/xc8/v2.46/pic/include/c90" -I"../../../../../.local/share/microchip/xc8/v2.46/pic/include/c99" -I"../../../../../.local/share/microchip/xc8/v2.46/pic/include/legacy" -I"../../../../../.local/share/microchip/xc8/v2.46/pic/include/proc" -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/src/HCMS2913.p1 src/HCMS2913.c + @-${MV} ${OBJECTDIR}/src/HCMS2913.d ${OBJECTDIR}/src/HCMS2913.p1.d + @${FIXDEPS} ${OBJECTDIR}/src/HCMS2913.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ + +else +${OBJECTDIR}/src/HCMS2913.p1: src/HCMS2913.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/src" + @${RM} ${OBJECTDIR}/src/HCMS2913.p1.d + @${RM} ${OBJECTDIR}/src/HCMS2913.p1 + ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -I"../../../../../.local/share/microchip/xc8/v2.46/pic/include/c90" -I"../../../../../.local/share/microchip/xc8/v2.46/pic/include/c99" -I"../../../../../.local/share/microchip/xc8/v2.46/pic/include/legacy" -I"../../../../../.local/share/microchip/xc8/v2.46/pic/include/proc" -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/src/HCMS2913.p1 src/HCMS2913.c + @-${MV} ${OBJECTDIR}/src/HCMS2913.d ${OBJECTDIR}/src/HCMS2913.p1.d + @${FIXDEPS} ${OBJECTDIR}/src/HCMS2913.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ + +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: assemble +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: assembleWithPreprocess +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: archive +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +${DISTDIR}/HCMS2913.X.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} ${DISTDIR} + ${MP_AR} $(MP_EXTRA_AR_PRE) --target $(MP_PROCESSOR_OPTION) -mrom=default,-1f00-1ffe -mram=default,-0-0,-70-70,-80-80,-f0-f0,-100-100,-170-170,-180-180,-1e5-1f0 -r ${DISTDIR}/HCMS2913.X.a ${OBJECTFILES_QUOTED_IF_SPACED} + @${RM} ${DISTDIR}/HCMS2913.X.hex + +else +${DISTDIR}/HCMS2913.X.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} ${DISTDIR} + ${MP_AR} $(MP_EXTRA_AR_PRE) --target $(MP_PROCESSOR_OPTION) -r ${DISTDIR}/HCMS2913.X.a ${OBJECTFILES_QUOTED_IF_SPACED} + +endif + + +# Subprojects +.build-subprojects: + + +# Subprojects +.clean-subprojects: + +# Clean Targets +.clean-conf: ${CLEAN_SUBPROJECTS} + ${RM} -r ${OBJECTDIR} + ${RM} -r ${DISTDIR} + +# Enable dependency checking +.dep.inc: .depcheck-impl + +DEPFILES=$(wildcard ${POSSIBLE_DEPFILES}) +ifneq (${DEPFILES},) +include ${DEPFILES} +endif diff --git a/src/picamp.X/libs/HCMS2913.X/nbproject/Makefile-genesis.properties b/src/picamp.X/libs/HCMS2913.X/nbproject/Makefile-genesis.properties new file mode 100644 index 0000000..0006772 --- /dev/null +++ b/src/picamp.X/libs/HCMS2913.X/nbproject/Makefile-genesis.properties @@ -0,0 +1,13 @@ +# +#Thu Mar 28 11:18:33 CET 2024 +default.languagetoolchain.version=2.46 +default.Pack.dfplocation=/home/burhan/.local/share/microchip/mplabx/v6.20/packs/Microchip/PIC16Fxxx_DFP/1.6.156 +conf.ids=default +default.languagetoolchain.dir=/home/burhan/.local/share/microchip/xc8/v2.46/bin +host.id=1odb-89vf-4o +configurations-xml=babcd4603821b37b337d5ce6e03494a0 +com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=f612087c95360c842296d189edfe3321 +default.com-microchip-mplab-nbide-toolchain-xc8-XC8LanguageToolchain.md5=bf89cdcdd6c0a49174fe4b605ef2b42d +proj.dir=/home/burhan/Desktop/PROJ ES/(WIP)Definitive/PIC16F887_AMPINTERFACE.X/libs/HCMS2913.X +default.com-microchip-mplab-mdbcore-pk4hybrid-Pk4HybridTooImpl.md5=916239579355067caf3c3a7796c790dc +host.platform=linux diff --git a/picamp.X/nbproject/Makefile-impl.mk b/src/picamp.X/libs/HCMS2913.X/nbproject/Makefile-impl.mk similarity index 98% rename from picamp.X/nbproject/Makefile-impl.mk rename to src/picamp.X/libs/HCMS2913.X/nbproject/Makefile-impl.mk index decd326..a548140 100644 --- a/picamp.X/nbproject/Makefile-impl.mk +++ b/src/picamp.X/libs/HCMS2913.X/nbproject/Makefile-impl.mk @@ -24,7 +24,7 @@ CLEAN_SUBPROJECTS=${CLEAN_SUBPROJECTS_${SUBPROJECTS}} # Project Name -PROJECTNAME=picamp.X +PROJECTNAME=HCMS2913.X # Active Configuration DEFAULTCONF=default diff --git a/src/picamp.X/libs/HCMS2913.X/nbproject/Makefile-local-default.mk b/src/picamp.X/libs/HCMS2913.X/nbproject/Makefile-local-default.mk new file mode 100644 index 0000000..d461158 --- /dev/null +++ b/src/picamp.X/libs/HCMS2913.X/nbproject/Makefile-local-default.mk @@ -0,0 +1,36 @@ +# +# Generated Makefile - do not edit! +# +# +# This file contains information about the location of compilers and other tools. +# If you commmit this file into your revision control server, you will be able to +# to checkout the project and build it from the command line with make. However, +# if more than one person works on the same project, then this file might show +# conflicts since different users are bound to have compilers in different places. +# In that case you might choose to not commit this file and let MPLAB X recreate this file +# for each user. The disadvantage of not commiting this file is that you must run MPLAB X at +# least once so the file gets created and the project can be built. Finally, you can also +# avoid using this file at all if you are only building from the command line with make. +# You can invoke make with the values of the macros: +# $ makeMP_CC="/opt/microchip/mplabc30/v3.30c/bin/pic30-gcc" ... +# +PATH_TO_IDE_BIN=/home/burhan/.local/share/microchip/mplabx/v6.20/mplab_platform/platform/../mplab_ide/modules/../../bin/ +# Adding MPLAB X bin directory to path. +PATH:=/home/burhan/.local/share/microchip/mplabx/v6.20/mplab_platform/platform/../mplab_ide/modules/../../bin/:$(PATH) +# Path to java used to run MPLAB X when this makefile was created +MP_JAVA_PATH="/home/burhan/.local/share/microchip/mplabx/v6.20/sys/java/zulu8.64.0.19-ca-fx-jre8.0.345-linux_x64/bin/" +OS_CURRENT="$(shell uname -s)" +MP_CC="/home/burhan/.local/share/microchip/xc8/v2.46/bin/xc8-cc" +# MP_CPPC is not defined +# MP_BC is not defined +MP_AS="/home/burhan/.local/share/microchip/xc8/v2.46/bin/xc8-cc" +MP_LD="/home/burhan/.local/share/microchip/xc8/v2.46/bin/xc8-cc" +MP_AR="/home/burhan/.local/share/microchip/xc8/v2.46/bin/xc8-ar" +DEP_GEN=${MP_JAVA_PATH}java -jar "/home/burhan/.local/share/microchip/mplabx/v6.20/mplab_platform/platform/../mplab_ide/modules/../../bin/extractobjectdependencies.jar" +MP_CC_DIR="/home/burhan/.local/share/microchip/xc8/v2.46/bin" +# MP_CPPC_DIR is not defined +# MP_BC_DIR is not defined +MP_AS_DIR="/home/burhan/.local/share/microchip/xc8/v2.46/bin" +MP_LD_DIR="/home/burhan/.local/share/microchip/xc8/v2.46/bin" +MP_AR_DIR="/home/burhan/.local/share/microchip/xc8/v2.46/bin" +DFP_DIR=/home/burhan/.local/share/microchip/mplabx/v6.20/packs/Microchip/PIC16Fxxx_DFP/1.6.156 diff --git a/picamp.X/nbproject/Makefile-variables.mk b/src/picamp.X/libs/HCMS2913.X/nbproject/Makefile-variables.mk similarity index 51% rename from picamp.X/nbproject/Makefile-variables.mk rename to src/picamp.X/libs/HCMS2913.X/nbproject/Makefile-variables.mk index 1d6c920..e00c11c 100644 --- a/picamp.X/nbproject/Makefile-variables.mk +++ b/src/picamp.X/libs/HCMS2913.X/nbproject/Makefile-variables.mk @@ -6,5 +6,5 @@ CND_BASEDIR=`pwd` # default configuration CND_ARTIFACT_DIR_default=dist/default/production -CND_ARTIFACT_NAME_default=picamp.X.production.hex -CND_ARTIFACT_PATH_default=dist/default/production/picamp.X.production.hex +CND_ARTIFACT_NAME_default=HCMS2913.X.a +CND_ARTIFACT_PATH_default=dist/default/production/HCMS2913.X.a diff --git a/src/picamp.X/libs/HCMS2913.X/nbproject/configurations.xml b/src/picamp.X/libs/HCMS2913.X/nbproject/configurations.xml new file mode 100644 index 0000000..db5fb51 --- /dev/null +++ b/src/picamp.X/libs/HCMS2913.X/nbproject/configurations.xml @@ -0,0 +1,321 @@ + + + + + + h/HCMS2913.h + h/HCMS_brightness.h + h/HCMS_ASCII.h + + + + Makefile + + + + + + src/HCMS2913.c + + + + + src + h + + Makefile + + + + localhost + PIC16F887 + + + pk4hybrid + XC8 + 2.46 + 2 + + + + + + + + + + + + + + + false + false + + + + + + + false + false + + false + + false + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/picamp.X/libs/HCMS2913.X/nbproject/private/configurations.xml b/src/picamp.X/libs/HCMS2913.X/nbproject/private/configurations.xml new file mode 100644 index 0000000..b95eed5 --- /dev/null +++ b/src/picamp.X/libs/HCMS2913.X/nbproject/private/configurations.xml @@ -0,0 +1,25 @@ + + + Makefile + 0 + + + + /home/burhan/.local/share/microchip/xc8/v2.46/bin + + place holder 1 + place holder 2 + + + + + true + 0 + 0 + 0 + + + + + + diff --git a/src/picamp.X/libs/HCMS2913.X/nbproject/private/private.xml b/src/picamp.X/libs/HCMS2913.X/nbproject/private/private.xml new file mode 100644 index 0000000..a94871c --- /dev/null +++ b/src/picamp.X/libs/HCMS2913.X/nbproject/private/private.xml @@ -0,0 +1,9 @@ + + + + + + file:/home/burhan/Desktop/PROJ%20ES/(WIP)Definitive/PIC16F887_AMPINTERFACE.X/libs/HCMS2913.X/src/HCMS2913.c + + + diff --git a/src/picamp.X/libs/HCMS2913.X/nbproject/project.xml b/src/picamp.X/libs/HCMS2913.X/nbproject/project.xml new file mode 100644 index 0000000..996e67d --- /dev/null +++ b/src/picamp.X/libs/HCMS2913.X/nbproject/project.xml @@ -0,0 +1,26 @@ + + + com.microchip.mplab.nbide.embedded.makeproject + + + HCMS2913 + 6a2d0ead-ffe0-4dcc-9ecd-ea6e3ef7f9aa + 0 + ISO-8859-1 + + + src + h + + + + default + 3 + + + + false + + + + diff --git a/src/picamp.X/libs/HCMS2913.X/src/HCMS2913.c b/src/picamp.X/libs/HCMS2913.X/src/HCMS2913.c new file mode 100644 index 0000000..06f670d --- /dev/null +++ b/src/picamp.X/libs/HCMS2913.X/src/HCMS2913.c @@ -0,0 +1,177 @@ +#include "./../h/HCMS2913.h" +#include "./../h/HCMS_ASCII.h" +#include "./../h/HCMS_brightness.h" + +//To do: fix types in HCMS_SETTINGS SO PINS CAN BE PASSED TO THE STRUCT + +const uint8_t init_word0 = 0b01111111, init_word1 = 0b10000000; +// 1/3. +//HCMS_SETTINGS = {}; + +void HCMS_delay200ns(const HCMS_settings* _settings); + +void HCMS_setbitinreg(REGbit a, short value) { + //uint8_t mask = ~(1 << a.pin); 0b11111110 + if (value == 0) + *a.REGaddress &= ~(1 << a.pin); + else + *a.REGaddress |= 1 << a.pin; +} + +bool HCMS_getbitinreg(REGbit a) { + //uint8_t mask = 1 << _bit.pin; 0b00000001 + return (*a.REGaddress & (1 << a.pin)) >> a.pin; +} + +// 2/3. + +void HCMS_spi_init(sspmode mst_slv_oscdiv, rxsmpmoment sdi_rx_smp, clkpol clock_pol, txclkedge sdo_tx_edge, const HCMS_settings* _settings) { + *_settings->s_SSPMlsb.REGaddress &= ~(mst_slv_oscdiv << _settings->s_SSPMlsb.pin); + + HCMS_setbitinreg(_settings->s_SDO_DDIR, 0); + + if (mst_slv_oscdiv & SLV_SS_EN || mst_slv_oscdiv & SLV_SS_DIS) { //SPI SLAVE + HCMS_setbitinreg(_settings->s_SMP, 0); + HCMS_setbitinreg(_settings->s_SCK_DDIR, 1); + HCMS_setbitinreg(_settings->s_CKP, HCMS_getbitinreg(_settings->s_SCK_PIN)); + HCMS_setbitinreg(_settings->s_SSPINTE, 1); + } else { //SPI MASTER + HCMS_setbitinreg(_settings->s_SMP, sdi_rx_smp); + HCMS_setbitinreg(_settings->s_SCK_DDIR, 0); + HCMS_setbitinreg(_settings->s_CKP, clock_pol); + } + + // CKE = ~(clock_pol ^ sdo_tx_edge); //XNOR + HCMS_setbitinreg(_settings->s_CKE, sdo_tx_edge); + if (clock_pol == 1 || HCMS_getbitinreg(_settings->s_SCK_PIN)) { + HCMS_setbitinreg(_settings->s_CKE, 1); + } + HCMS_setbitinreg(_settings->s_SSPEN, 1); +} + +void spi_transmit(char c, volatile unsigned char * _buffer) { + *_buffer = c; +} + +// 3/3. + +void HCMS_init(const HCMS_settings* _settings) { + //reset + HCMS_setbitinreg(_settings->s_RESETpin, 0); + HCMS_delay200ns(_settings); + HCMS_setbitinreg(_settings->s_RESETpin, 1); + + //flush register + HCMS_setbitinreg(_settings->s_RSELECTpin, 0); + HCMS_setbitinreg(_settings->s_CENABLEpin, 0); + for (int i = 0; i < 40; i++) { + spi_transmit(0x00, _settings->s_SSPBUF); + HCMS_delay200ns(_settings); + } + HCMS_setbitinreg(_settings->s_CENABLEpin, 1); + HCMS_setbitinreg(_settings->s_RSELECTpin, 1); + + HCMS_setbitinreg(_settings->s_CENABLEpin, 0); + spi_transmit(init_word0, _settings->s_SSPBUF); + HCMS_delay200ns(_settings); + HCMS_setbitinreg(_settings->s_CENABLEpin, 1); + HCMS_setbitinreg(_settings->s_CENABLEpin, 0); + spi_transmit(init_word1, _settings->s_SSPBUF); + HCMS_delay200ns(_settings); + HCMS_setbitinreg(_settings->s_CENABLEpin, 1); + + HCMS_setbitinreg(_settings->s_RSELECTpin, 0); +} + +//set brightness in control register 0 + +void HCMS_change_brightness(uint8_t setTo, const HCMS_settings* _settings) { + //unsigned so lower bound by nature + if (setTo > HCMS2913_BRIGHTNESS_SETTINGS_COUNT - 1) { +//if too high, set to 100% + setTo = HCMS2913_BRIGHTNESS_SETTINGS_COUNT - 1; + } + + uint8_t message = 0b01000000; + message = HCMS_BRIGHT_VALUES[setTo]; + + HCMS_setbitinreg(_settings->s_RSELECTpin, 1); + + HCMS_setbitinreg(_settings->s_CENABLEpin, 0); + spi_transmit(message, _settings->s_SSPBUF); + HCMS_delay200ns(_settings); + HCMS_setbitinreg(_settings->s_CENABLEpin, 1); + HCMS_setbitinreg(_settings->s_CENABLEpin, 0); + spi_transmit(message, _settings->s_SSPBUF); + HCMS_delay200ns(_settings); + HCMS_setbitinreg(_settings->s_CENABLEpin, 1); + + HCMS_setbitinreg(_settings->s_RSELECTpin, 0); +} + +//void load_buffer(int character, int position, char *bufferSelected) { +// for (int i = 0; i < 5; i++) { +// bufferSelected[position * 5 + i] = HCMS_ascii[character][i]; +// } +//} + +short TableLookup(char lookup) { + for (int i = 0; i < ASCII_TABLE_SIZE; ++i) { + if (HCMS_ascii[i][5] == lookup) { + return i; + } + } + return ASCII_TABLE_SIZE - 1; // Character not found in the ASCII table +} + +void HCMS_load_word(const char *_string, const HCMS_settings* _settings) { + short character = ASCII_TABLE_SIZE - 1; + char letterRow = ' '; + + HCMS_setbitinreg(_settings->s_CENABLEpin, 0); + for (short i = 0; i < 8; i++) { + //display character loop. send letter out per character + //check where on the table the current character is + character = TableLookup(_string[i]); + for (short j = 0; j < 5; j++) { + //column loop, fill letter with lookup table + letterRow = HCMS_ascii[character][j]; + spi_transmit(letterRow, _settings->s_SSPBUF); + } + } + + // while (_string[length] != '\0' && length < 8) { + // load_buffer(TableLookup(_string[length]), length, bufferVar); + // length++; + // } + // + // while (length < 8) { + // load_buffer(TableLookup(' '), length, bufferVar); + // length++; + // } + // + // for (int i = 0; i < 40; i++) { + // spi_transmit(bufferVar[i], _settings.s_SSPBUF); + // } + + HCMS_delay200ns(_settings); + HCMS_setbitinreg(_settings->s_CENABLEpin, 1); +} + +void HCMS_delay200ns(const HCMS_settings* _settings) { + // // 1s / 10MHz = 10ns! All that is required it to get a ratio! + // float cyclesRequired = _settings.s_Timer_Frequency / 10000000; + // if (cyclesRequired < 1.0f) cyclesRequired = 1.0f; + // unsigned char * yes = _ticks * (_settings.s_Timer_MaxValue - (unsigned char) cyclesRequired); + // _settings.s_Timer_REG = yes; + // + // while (HCMS_getbitinreg(_settings.s_Timer_INTF)) { + // } + // HCMS_setbitinreg(_settings.s_Timer_INTF, 0); // set INTF to 0 + //timer not needed, most PICs have an instruction speed very close to 200ns + int time = 1 + _settings->s_insNeededFor200ns; + + while (time > 0) { + time--; + } +} \ No newline at end of file diff --git a/src/picamp.X/libs/HCMS2913.X/src/HCMSset16f887.txt b/src/picamp.X/libs/HCMS2913.X/src/HCMSset16f887.txt new file mode 100644 index 0000000..4f4079f --- /dev/null +++ b/src/picamp.X/libs/HCMS2913.X/src/HCMSset16f887.txt @@ -0,0 +1,53 @@ +//PIC16F887 +const HCMS_settings screenSettings_887 = { + 1, + //spi buffer + &SSPBUF, + {&SSPCON, 0}, + {&SSPSTAT, 0}, + //spi data + {&PORTC, 3}, + {&TRISC, 4}, //SDI + {&TRISC, 5}, + {&TRISC, 3}, + //spi int + {&PIE1, 3}, + {&PIR1, 3}, + //spi settings + {&SSPCON, 4}, + {&SSPSTAT, 6}, + {&SSPCON, 5}, + {&SSPSTAT, 7}, + //screen pins + {&PORTC, 2}, + {&PORTC, 6}, + {&PORTC, 4}, + {&PORTC, 7} +}; + +//PIC16F1829 +const HCMS_settings screenSettings_1829 = { + 2, + //spi buffer + &SSP1BUF, + {&SSP1CON1, 0}, + {&SSP1STAT, 0}, + //spi data + {&PORTB, 6}, + {&TRISC, 2}, //SDI + {&TRISC, 7}, + {&TRISB, 6}, + //spi int + {&PIE1, 3}, + {&PIR1, 3}, + //spi settings + {&SSP1CON1, 4}, + {&SSP1STAT, 6}, + {&SSP1CON1, 5}, + {&SSP1STAT, 7}, + //screen pins + {&PORTB, 4}, + {&PORTB, 7}, + {&PORTC, 2}, + {&PORTB, 5} +}; diff --git a/src/picamp.X/libs/IR_LIB/IRBind1829.c b/src/picamp.X/libs/IR_LIB/IRBind1829.c new file mode 100644 index 0000000..821b913 --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRBind1829.c @@ -0,0 +1,83 @@ +#include "./IRLib_v7.h" + +void IRBind1829(void) { + IRR.address = (unsigned char*) 0x00C; + IRR.offset = 2; + IRR.size = 1; + + MTimer.address = (unsigned char*) 0x01A; + MTimer.offset = 0; + MTimer.size = 8; + + MTOn.address = (unsigned char*) 0x01C; + MTOn.offset = 2; + MTOn.size = 1; + + MTIF.address = (unsigned char*) 0x011; + MTIF.offset = 1; + MTIF.size = 1; + + MTPR.address = (unsigned char*) 0x01B; + MTPR.offset = 0; + MTPR.size = 8; + + MTPrSc.address = (unsigned char*) 0x01C; + MTPrSc.offset = 0; + MTPrSc.size = 2; + + MTPoSc.address = (unsigned char*) 0x01C; + MTPoSc.offset = 3; + MTPoSc.size = 4; + + TTimer.address = (unsigned char*) 0x016; + TTimer.offset = 0; + TTimer.size = 8; + + TTOn.address = (unsigned char*) 0x018; + TTOn.offset = 0; + TTOn.size = 1; + + TTIF.address = (unsigned char*) 0x011; + TTIF.offset = 0; + TTIF.size = 1; + + TTPrSc.address = (unsigned char*) 0x018; + TTPrSc.offset = 4; + TTPrSc.size = 2; + + IntPinTrisReg.address = (unsigned char*) 0x08C; + IntPinTrisReg.offset = 2; + IntPinTrisReg.size = 1; + + IntPinAnselReg.address = (unsigned char*) 0x18C; + IntPinAnselReg.offset = 2; + IntPinAnselReg.size = 1; + + IntPinIF.address = (unsigned char*) 0x00B; + IntPinIF.offset = 1; + IntPinIF.size = 1; + + IntEdgeReg.address = (unsigned char*) 0x095; + IntEdgeReg.offset = 6; + IntEdgeReg.size = 1; + + IntConGIE.address = (unsigned char*) 0x00B; + IntConGIE.offset = 7; + IntConGIE.size = 1; + + IntConINTE.address = (unsigned char*) 0x00B; + IntConINTE.offset = 4; + IntConINTE.size = 1; + + IntConPEIE.address = (unsigned char*) 0x00B; + IntConPEIE.offset = 6; + IntConPEIE.size = 1; + + PIEMTIE.address = (unsigned char*) 0x091; + PIEMTIE.offset = 1; + PIEMTIE.size = 1; + + PIETTIE.address = (unsigned char*) 0x091; + PIETTIE.offset = 0; + PIETTIE.size = 1; +} \ No newline at end of file diff --git a/src/picamp.X/libs/IR_LIB/IRBind887.c b/src/picamp.X/libs/IR_LIB/IRBind887.c new file mode 100644 index 0000000..0867227 --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRBind887.c @@ -0,0 +1,83 @@ +#include "./IRLib_v7.h" + +void IRBind887(void) { + IRR.address = (unsigned char*) 0x006; + IRR.offset = 0; + IRR.size = 1; + + MTimer.address = (unsigned char*) 0x011; + MTimer.offset = 0; + MTimer.size = 8; + + MTOn.address = (unsigned char*) 0x012; + MTOn.offset = 2; + MTOn.size = 1; + + MTIF.address = (unsigned char*) 0x00C; + MTIF.offset = 1; + MTIF.size = 1; + + MTPR.address = (unsigned char*) 0x092; + MTPR.offset = 0; + MTPR.size = 8; + + MTPrSc.address = (unsigned char*) 0x012; + MTPrSc.offset = 0; + MTPrSc.size = 2; + + MTPoSc.address = (unsigned char*) 0x012; + MTPoSc.offset = 3; + MTPoSc.size = 4; + + TTimer.address = (unsigned char*) 0x00E; + TTimer.offset = 0; + TTimer.size = 8; + + TTOn.address = (unsigned char*) 0x010; + TTOn.offset = 0; + TTOn.size = 1; + + TTIF.address = (unsigned char*) 0x00C; + TTIF.offset = 0; + TTIF.size = 1; + + TTPrSc.address = (unsigned char*) 0x010; + TTPrSc.offset = 4; + TTPrSc.size = 2; + + IntPinTrisReg.address = (unsigned char*) 0x086; + IntPinTrisReg.offset = 0; + IntPinTrisReg.size = 1; + + IntPinAnselReg.address = (unsigned char*) 0x189; + IntPinAnselReg.offset = 4; + IntPinAnselReg.size = 1; + + IntPinIF.address = (unsigned char*) 0x00B; + IntPinIF.offset = 1; + IntPinIF.size = 1; + + IntEdgeReg.address = (unsigned char*) 0x081; + IntEdgeReg.offset = 6; + IntEdgeReg.size = 1; + + IntConGIE.address = (unsigned char*) 0x00B; + IntConGIE.offset = 7; + IntConGIE.size = 1; + + IntConINTE.address = (unsigned char*) 0x00B; + IntConINTE.offset = 4; + IntConINTE.size = 1; + + IntConPEIE.address = (unsigned char*) 0x00B; + IntConPEIE.offset = 6; + IntConPEIE.size = 1; + + PIEMTIE.address = (unsigned char*) 0x08C; + PIEMTIE.offset = 1; + PIEMTIE.size = 1; + + PIETTIE.address = (unsigned char*) 0x08C; + PIETTIE.offset = 0; + PIETTIE.size = 1; +} \ No newline at end of file diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7.X/IRBind1829.c b/src/picamp.X/libs/IR_LIB/IRLib_v7.X/IRBind1829.c new file mode 100644 index 0000000..821b913 --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7.X/IRBind1829.c @@ -0,0 +1,83 @@ +#include "./IRLib_v7.h" + +void IRBind1829(void) { + IRR.address = (unsigned char*) 0x00C; + IRR.offset = 2; + IRR.size = 1; + + MTimer.address = (unsigned char*) 0x01A; + MTimer.offset = 0; + MTimer.size = 8; + + MTOn.address = (unsigned char*) 0x01C; + MTOn.offset = 2; + MTOn.size = 1; + + MTIF.address = (unsigned char*) 0x011; + MTIF.offset = 1; + MTIF.size = 1; + + MTPR.address = (unsigned char*) 0x01B; + MTPR.offset = 0; + MTPR.size = 8; + + MTPrSc.address = (unsigned char*) 0x01C; + MTPrSc.offset = 0; + MTPrSc.size = 2; + + MTPoSc.address = (unsigned char*) 0x01C; + MTPoSc.offset = 3; + MTPoSc.size = 4; + + TTimer.address = (unsigned char*) 0x016; + TTimer.offset = 0; + TTimer.size = 8; + + TTOn.address = (unsigned char*) 0x018; + TTOn.offset = 0; + TTOn.size = 1; + + TTIF.address = (unsigned char*) 0x011; + TTIF.offset = 0; + TTIF.size = 1; + + TTPrSc.address = (unsigned char*) 0x018; + TTPrSc.offset = 4; + TTPrSc.size = 2; + + IntPinTrisReg.address = (unsigned char*) 0x08C; + IntPinTrisReg.offset = 2; + IntPinTrisReg.size = 1; + + IntPinAnselReg.address = (unsigned char*) 0x18C; + IntPinAnselReg.offset = 2; + IntPinAnselReg.size = 1; + + IntPinIF.address = (unsigned char*) 0x00B; + IntPinIF.offset = 1; + IntPinIF.size = 1; + + IntEdgeReg.address = (unsigned char*) 0x095; + IntEdgeReg.offset = 6; + IntEdgeReg.size = 1; + + IntConGIE.address = (unsigned char*) 0x00B; + IntConGIE.offset = 7; + IntConGIE.size = 1; + + IntConINTE.address = (unsigned char*) 0x00B; + IntConINTE.offset = 4; + IntConINTE.size = 1; + + IntConPEIE.address = (unsigned char*) 0x00B; + IntConPEIE.offset = 6; + IntConPEIE.size = 1; + + PIEMTIE.address = (unsigned char*) 0x091; + PIEMTIE.offset = 1; + PIEMTIE.size = 1; + + PIETTIE.address = (unsigned char*) 0x091; + PIETTIE.offset = 0; + PIETTIE.size = 1; +} \ No newline at end of file diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7.X/IRBind887.c b/src/picamp.X/libs/IR_LIB/IRLib_v7.X/IRBind887.c new file mode 100644 index 0000000..0867227 --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7.X/IRBind887.c @@ -0,0 +1,83 @@ +#include "./IRLib_v7.h" + +void IRBind887(void) { + IRR.address = (unsigned char*) 0x006; + IRR.offset = 0; + IRR.size = 1; + + MTimer.address = (unsigned char*) 0x011; + MTimer.offset = 0; + MTimer.size = 8; + + MTOn.address = (unsigned char*) 0x012; + MTOn.offset = 2; + MTOn.size = 1; + + MTIF.address = (unsigned char*) 0x00C; + MTIF.offset = 1; + MTIF.size = 1; + + MTPR.address = (unsigned char*) 0x092; + MTPR.offset = 0; + MTPR.size = 8; + + MTPrSc.address = (unsigned char*) 0x012; + MTPrSc.offset = 0; + MTPrSc.size = 2; + + MTPoSc.address = (unsigned char*) 0x012; + MTPoSc.offset = 3; + MTPoSc.size = 4; + + TTimer.address = (unsigned char*) 0x00E; + TTimer.offset = 0; + TTimer.size = 8; + + TTOn.address = (unsigned char*) 0x010; + TTOn.offset = 0; + TTOn.size = 1; + + TTIF.address = (unsigned char*) 0x00C; + TTIF.offset = 0; + TTIF.size = 1; + + TTPrSc.address = (unsigned char*) 0x010; + TTPrSc.offset = 4; + TTPrSc.size = 2; + + IntPinTrisReg.address = (unsigned char*) 0x086; + IntPinTrisReg.offset = 0; + IntPinTrisReg.size = 1; + + IntPinAnselReg.address = (unsigned char*) 0x189; + IntPinAnselReg.offset = 4; + IntPinAnselReg.size = 1; + + IntPinIF.address = (unsigned char*) 0x00B; + IntPinIF.offset = 1; + IntPinIF.size = 1; + + IntEdgeReg.address = (unsigned char*) 0x081; + IntEdgeReg.offset = 6; + IntEdgeReg.size = 1; + + IntConGIE.address = (unsigned char*) 0x00B; + IntConGIE.offset = 7; + IntConGIE.size = 1; + + IntConINTE.address = (unsigned char*) 0x00B; + IntConINTE.offset = 4; + IntConINTE.size = 1; + + IntConPEIE.address = (unsigned char*) 0x00B; + IntConPEIE.offset = 6; + IntConPEIE.size = 1; + + PIEMTIE.address = (unsigned char*) 0x08C; + PIEMTIE.offset = 1; + PIEMTIE.size = 1; + + PIETTIE.address = (unsigned char*) 0x08C; + PIETTIE.offset = 0; + PIETTIE.size = 1; +} \ No newline at end of file diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7.X/IRLib_v7.c b/src/picamp.X/libs/IR_LIB/IRLib_v7.X/IRLib_v7.c new file mode 100644 index 0000000..599f3a6 --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7.X/IRLib_v7.c @@ -0,0 +1,74 @@ +#include "./IRLib_v7.h" + +void IRInit(IntEdge IntEdge, unsigned char vMTPR, unsigned char vPTPrSc, unsigned char vMTPoSc, unsigned char vTTPrSc) { + //interrupts + IR_SetReg(&IntConGIE, 1); + IR_SetReg(&IntConINTE, 1); + IR_SetReg(&IntConPEIE, 1); + + //measure timer config + IR_SetReg(&MTPrSc, vPTPrSc); + IR_SetReg(&MTPR, vMTPR); + IR_SetReg(&MTPoSc, vMTPoSc); + IR_SetReg(&MTOn, 0); + IR_SetReg(&PIEMTIE, 1); + + //timeout timer + IR_SetReg(&TTPrSc, vTTPrSc); + IR_SetReg(&TTOn, 0); + IR_SetReg(&PIETTIE, 1); + + //int pin + IR_SetReg(&IntPinTrisReg, 1); + IR_SetReg(&IntPinAnselReg, 0); + IR_SetReg(&IntEdgeReg, IntEdge); +} + +void IntHandler() { + IR_SetReg(&MTimer, 0); + IR_SetReg(&MTOn, 1); + IR_SetReg(&TTimer, 0); + IR_SetReg(&TTOn, 1); + IR_SetReg(&IntPinIF, 0); +} + +void MTHandler() { + dataBuffer = dataBuffer << 1; + if (!ReadReg(&IRR)) { + dataBuffer |= 0b1; + } + count++; + IR_SetReg(&MTOn, 0); + if (count >= MessageSize) { + + data = dataBuffer; + dataBuffer = 0; + count = 0; + IRBF = 1; + } + IR_SetReg(&MTIF, 0); +} + +void TTHandler() { + count = 0; + dataBuffer = 0; + IR_SetReg(&TTOn, 0); + IR_SetReg(&TTimer, 0); + IR_SetReg(&TTIF, 0); +} + +void IR_SetReg(IR_Reg* R, unsigned char V) { + unsigned char bitMask; + V = (unsigned char) (V << R->offset); + bitMask = (unsigned char) (((1 << R->size) - 1) << R->offset); + *(R->address) &= ~bitMask; + *(R->address) |= V & bitMask; +} + +unsigned char ReadReg(IR_Reg* R) { + unsigned char V, bitMask; + bitMask = (unsigned char) (((1 << R->size) - 1) << R->offset); + V = *(R->address) & bitMask; + V = V >> R->offset; + return V; +} diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7.X/IRLib_v7.h b/src/picamp.X/libs/IR_LIB/IRLib_v7.X/IRLib_v7.h new file mode 100644 index 0000000..f8e7ecf --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7.X/IRLib_v7.h @@ -0,0 +1,53 @@ +#ifndef _IRLib_V7_H_ +#define _IRLib_V7_H_ + +typedef struct _IR_Reg { + volatile unsigned char *address; + unsigned char size; + unsigned char offset; +} IR_Reg; + +typedef enum { + falling, + rising +} IntEdge; + +#define MessageSize 12 + +volatile int dataBuffer = 0; //data buffer +volatile char IRBF = 0; //infrared buffer full flag +volatile int data = 0; +volatile char count = 0; + +void IRInit(IntEdge, unsigned char, unsigned char, unsigned char, unsigned char); //edge, MTPR, MTPrSc, MTPoSc, TTPrSc +void IntHandler(void); +void MTHandler(void); +void TTHandler(void); +void IR_SetReg(IR_Reg*, unsigned char); +unsigned char ReadReg(IR_Reg*); + +IR_Reg IRR; // Infra red reciever / INT Pin +IR_Reg MTimer; // Measure Timer +IR_Reg MTOn; // MTimer on +IR_Reg MTIF; // MTimer interrupt Flag +IR_Reg MTPR; // MTimer Period Register +IR_Reg MTPrSc; // MTimer Pre-Scaler +IR_Reg MTPoSc; // MTimer Post-Scaler +IR_Reg TTimer; // Timeout Timer +IR_Reg TTOn; // TTimer on +IR_Reg TTIF; // TTimer Interrupt Flag +IR_Reg TTPrSc; // TTimer Pre-Scaler +IR_Reg IntPinTrisReg; // Interrupt Pin TriState Register +IR_Reg IntPinAnselReg; // Interrupt Pin Analog Select Register +IR_Reg IntPinIF; // Interrupt Pin Interrupt Flag +IR_Reg IntEdgeReg; // Interrupt pin Edge Select Register +IR_Reg IntConGIE; // Global Interrupt Enable +IR_Reg IntConINTE; // Interrupt Enable +IR_Reg IntConPEIE; // Peripheral Interrupt Enable +IR_Reg PIEMTIE; // Peripheral Interrupt Enable Measure Timer Interrupt Enable +IR_Reg PIETTIE; // Peripheral Interrupt Enable Timeout Timer Interrupt Enable + +void IRBind887(void); +void IRBind1829(void); + +#endif //_IRLIB_V7_H_ \ No newline at end of file diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7.X/Makefile b/src/picamp.X/libs/IR_LIB/IRLib_v7.X/Makefile new file mode 100644 index 0000000..fca8e2c --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7.X/Makefile @@ -0,0 +1,113 @@ +# +# There exist several targets which are by default empty and which can be +# used for execution of your targets. These targets are usually executed +# before and after some main targets. They are: +# +# .build-pre: called before 'build' target +# .build-post: called after 'build' target +# .clean-pre: called before 'clean' target +# .clean-post: called after 'clean' target +# .clobber-pre: called before 'clobber' target +# .clobber-post: called after 'clobber' target +# .all-pre: called before 'all' target +# .all-post: called after 'all' target +# .help-pre: called before 'help' target +# .help-post: called after 'help' target +# +# Targets beginning with '.' are not intended to be called on their own. +# +# Main targets can be executed directly, and they are: +# +# build build a specific configuration +# clean remove built files from a configuration +# clobber remove all built files +# all build all configurations +# help print help mesage +# +# Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and +# .help-impl are implemented in nbproject/makefile-impl.mk. +# +# Available make variables: +# +# CND_BASEDIR base directory for relative paths +# CND_DISTDIR default top distribution directory (build artifacts) +# CND_BUILDDIR default top build directory (object files, ...) +# CONF name of current configuration +# CND_ARTIFACT_DIR_${CONF} directory of build artifact (current configuration) +# CND_ARTIFACT_NAME_${CONF} name of build artifact (current configuration) +# CND_ARTIFACT_PATH_${CONF} path to build artifact (current configuration) +# CND_PACKAGE_DIR_${CONF} directory of package (current configuration) +# CND_PACKAGE_NAME_${CONF} name of package (current configuration) +# CND_PACKAGE_PATH_${CONF} path to package (current configuration) +# +# NOCDDL + + +# Environment +MKDIR=mkdir +CP=cp +CCADMIN=CCadmin +RANLIB=ranlib + + +# build +build: .build-post + +.build-pre: +# Add your pre 'build' code here... + +.build-post: .build-impl +# Add your post 'build' code here... + + +# clean +clean: .clean-post + +.clean-pre: +# Add your pre 'clean' code here... +# WARNING: the IDE does not call this target since it takes a long time to +# simply run make. Instead, the IDE removes the configuration directories +# under build and dist directly without calling make. +# This target is left here so people can do a clean when running a clean +# outside the IDE. + +.clean-post: .clean-impl +# Add your post 'clean' code here... + + +# clobber +clobber: .clobber-post + +.clobber-pre: +# Add your pre 'clobber' code here... + +.clobber-post: .clobber-impl +# Add your post 'clobber' code here... + + +# all +all: .all-post + +.all-pre: +# Add your pre 'all' code here... + +.all-post: .all-impl +# Add your post 'all' code here... + + +# help +help: .help-post + +.help-pre: +# Add your pre 'help' code here... + +.help-post: .help-impl +# Add your post 'help' code here... + + + +# include project implementation makefile +include nbproject/Makefile-impl.mk + +# include project make variables +include nbproject/Makefile-variables.mk diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/Makefile-default.mk b/src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/Makefile-default.mk new file mode 100644 index 0000000..4e0671c --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/Makefile-default.mk @@ -0,0 +1,188 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a -pre and a -post target defined where you can add customized code. +# +# This makefile implements configuration specific macros and targets. + + +# Include project Makefile +ifeq "${IGNORE_LOCAL}" "TRUE" +# do not include local makefile. User is passing all local related variables already +else +include Makefile +# Include makefile containing local settings +ifeq "$(wildcard nbproject/Makefile-local-default.mk)" "nbproject/Makefile-local-default.mk" +include nbproject/Makefile-local-default.mk +endif +endif + +# Environment +MKDIR=mkdir -p +RM=rm -f +MV=mv +CP=cp + +# Macros +CND_CONF=default +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +IMAGE_TYPE=debug +OUTPUT_SUFFIX=a +DEBUGGABLE_SUFFIX=a +FINAL_IMAGE=${DISTDIR}/IRLib_v7.X.${OUTPUT_SUFFIX} +else +IMAGE_TYPE=production +OUTPUT_SUFFIX=a +DEBUGGABLE_SUFFIX=a +FINAL_IMAGE=${DISTDIR}/IRLib_v7.X.${OUTPUT_SUFFIX} +endif + +ifeq ($(COMPARE_BUILD), true) +COMPARISON_BUILD=-mafrlcsj +else +COMPARISON_BUILD= +endif + +# Object Directory +OBJECTDIR=build/${CND_CONF}/${IMAGE_TYPE} + +# Distribution Directory +DISTDIR=dist/${CND_CONF}/${IMAGE_TYPE} + +# Source Files Quoted if spaced +SOURCEFILES_QUOTED_IF_SPACED=IRBind1829.c IRBind887.c IRLib_v7.c + +# Object Files Quoted if spaced +OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/IRBind1829.p1 ${OBJECTDIR}/IRBind887.p1 ${OBJECTDIR}/IRLib_v7.p1 +POSSIBLE_DEPFILES=${OBJECTDIR}/IRBind1829.p1.d ${OBJECTDIR}/IRBind887.p1.d ${OBJECTDIR}/IRLib_v7.p1.d + +# Object Files +OBJECTFILES=${OBJECTDIR}/IRBind1829.p1 ${OBJECTDIR}/IRBind887.p1 ${OBJECTDIR}/IRLib_v7.p1 + +# Source Files +SOURCEFILES=IRBind1829.c IRBind887.c IRLib_v7.c + + + +CFLAGS= +ASFLAGS= +LDLIBSOPTIONS= + +############# Tool locations ########################################## +# If you copy a project from one host to another, the path where the # +# compiler is installed may be different. # +# If you open this project with MPLAB X in the new host, this # +# makefile will be regenerated and the paths will be corrected. # +####################################################################### +# fixDeps replaces a bunch of sed/cat/printf statements that slow down the build +FIXDEPS=fixDeps + +.build-conf: ${BUILD_SUBPROJECTS} +ifneq ($(INFORMATION_MESSAGE), ) + @echo $(INFORMATION_MESSAGE) +endif + ${MAKE} -f nbproject/Makefile-default.mk ${DISTDIR}/IRLib_v7.X.${OUTPUT_SUFFIX} + +MP_PROCESSOR_OPTION=16F887 +# ------------------------------------------------------------------------------------ +# Rules for buildStep: compile +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +${OBJECTDIR}/IRBind1829.p1: IRBind1829.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/IRBind1829.p1.d + @${RM} ${OBJECTDIR}/IRBind1829.p1 + ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -mdebugger=none -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -I"../IRLib_v7" -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/IRBind1829.p1 IRBind1829.c + @-${MV} ${OBJECTDIR}/IRBind1829.d ${OBJECTDIR}/IRBind1829.p1.d + @${FIXDEPS} ${OBJECTDIR}/IRBind1829.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ + +${OBJECTDIR}/IRBind887.p1: IRBind887.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/IRBind887.p1.d + @${RM} ${OBJECTDIR}/IRBind887.p1 + ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -mdebugger=none -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -I"../IRLib_v7" -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/IRBind887.p1 IRBind887.c + @-${MV} ${OBJECTDIR}/IRBind887.d ${OBJECTDIR}/IRBind887.p1.d + @${FIXDEPS} ${OBJECTDIR}/IRBind887.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ + +${OBJECTDIR}/IRLib_v7.p1: IRLib_v7.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/IRLib_v7.p1.d + @${RM} ${OBJECTDIR}/IRLib_v7.p1 + ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -mdebugger=none -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -I"../IRLib_v7" -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/IRLib_v7.p1 IRLib_v7.c + @-${MV} ${OBJECTDIR}/IRLib_v7.d ${OBJECTDIR}/IRLib_v7.p1.d + @${FIXDEPS} ${OBJECTDIR}/IRLib_v7.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ + +else +${OBJECTDIR}/IRBind1829.p1: IRBind1829.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/IRBind1829.p1.d + @${RM} ${OBJECTDIR}/IRBind1829.p1 + ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -I"../IRLib_v7" -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/IRBind1829.p1 IRBind1829.c + @-${MV} ${OBJECTDIR}/IRBind1829.d ${OBJECTDIR}/IRBind1829.p1.d + @${FIXDEPS} ${OBJECTDIR}/IRBind1829.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ + +${OBJECTDIR}/IRBind887.p1: IRBind887.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/IRBind887.p1.d + @${RM} ${OBJECTDIR}/IRBind887.p1 + ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -I"../IRLib_v7" -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/IRBind887.p1 IRBind887.c + @-${MV} ${OBJECTDIR}/IRBind887.d ${OBJECTDIR}/IRBind887.p1.d + @${FIXDEPS} ${OBJECTDIR}/IRBind887.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ + +${OBJECTDIR}/IRLib_v7.p1: IRLib_v7.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/IRLib_v7.p1.d + @${RM} ${OBJECTDIR}/IRLib_v7.p1 + ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -I"../IRLib_v7" -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/IRLib_v7.p1 IRLib_v7.c + @-${MV} ${OBJECTDIR}/IRLib_v7.d ${OBJECTDIR}/IRLib_v7.p1.d + @${FIXDEPS} ${OBJECTDIR}/IRLib_v7.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ + +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: assemble +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: assembleWithPreprocess +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: archive +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +${DISTDIR}/IRLib_v7.X.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} ${DISTDIR} + ${MP_AR} $(MP_EXTRA_AR_PRE) --target $(MP_PROCESSOR_OPTION) -r ${DISTDIR}/IRLib_v7.X.a ${OBJECTFILES_QUOTED_IF_SPACED} + @${RM} ${DISTDIR}/IRLib_v7.X.hex + +else +${DISTDIR}/IRLib_v7.X.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} ${DISTDIR} + ${MP_AR} $(MP_EXTRA_AR_PRE) --target $(MP_PROCESSOR_OPTION) -r ${DISTDIR}/IRLib_v7.X.a ${OBJECTFILES_QUOTED_IF_SPACED} + +endif + + +# Subprojects +.build-subprojects: + + +# Subprojects +.clean-subprojects: + +# Clean Targets +.clean-conf: ${CLEAN_SUBPROJECTS} + ${RM} -r ${OBJECTDIR} + ${RM} -r ${DISTDIR} + +# Enable dependency checking +.dep.inc: .depcheck-impl + +DEPFILES=$(wildcard ${POSSIBLE_DEPFILES}) +ifneq (${DEPFILES},) +include ${DEPFILES} +endif diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/Makefile-genesis.properties b/src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/Makefile-genesis.properties new file mode 100644 index 0000000..3466e5c --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/Makefile-genesis.properties @@ -0,0 +1,13 @@ +# +#Thu Mar 28 14:56:18 CET 2024 +default.languagetoolchain.version=2.46 +default.Pack.dfplocation=/home/burhan/.local/share/microchip/mplabx/v6.20/packs/Microchip/PIC16Fxxx_DFP/1.6.156 +conf.ids=default +default.languagetoolchain.dir=/home/burhan/.local/share/microchip/xc8/v2.46/bin +host.id=1odb-89vf-4o +default.platformTool.md5=null +configurations-xml=42cc9aad52ec80d5fdf7f7fbf1a8b028 +com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=f612087c95360c842296d189edfe3321 +default.com-microchip-mplab-nbide-toolchain-xc8-XC8LanguageToolchain.md5=bf89cdcdd6c0a49174fe4b605ef2b42d +proj.dir=/home/burhan/Desktop/PROJ ES/(WIP)Definitive/PIC16F887_AMPINTERFACE.X/libs/IR_LIB/IRLib_v7.X +host.platform=linux diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/Makefile-impl.mk b/src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/Makefile-impl.mk new file mode 100644 index 0000000..e1b1d5e --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/Makefile-impl.mk @@ -0,0 +1,69 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a pre- and a post- target defined where you can add customization code. +# +# This makefile implements macros and targets common to all configurations. +# +# NOCDDL + + +# Building and Cleaning subprojects are done by default, but can be controlled with the SUB +# macro. If SUB=no, subprojects will not be built or cleaned. The following macro +# statements set BUILD_SUB-CONF and CLEAN_SUB-CONF to .build-reqprojects-conf +# and .clean-reqprojects-conf unless SUB has the value 'no' +SUB_no=NO +SUBPROJECTS=${SUB_${SUB}} +BUILD_SUBPROJECTS_=.build-subprojects +BUILD_SUBPROJECTS_NO= +BUILD_SUBPROJECTS=${BUILD_SUBPROJECTS_${SUBPROJECTS}} +CLEAN_SUBPROJECTS_=.clean-subprojects +CLEAN_SUBPROJECTS_NO= +CLEAN_SUBPROJECTS=${CLEAN_SUBPROJECTS_${SUBPROJECTS}} + + +# Project Name +PROJECTNAME=IRLib_v7.X + +# Active Configuration +DEFAULTCONF=default +CONF=${DEFAULTCONF} + +# All Configurations +ALLCONFS=default + + +# build +.build-impl: .build-pre + ${MAKE} -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .build-conf + + +# clean +.clean-impl: .clean-pre + ${MAKE} -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .clean-conf + +# clobber +.clobber-impl: .clobber-pre .depcheck-impl + ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=default clean + + + +# all +.all-impl: .all-pre .depcheck-impl + ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=default build + + + +# dependency checking support +.depcheck-impl: +# @echo "# This code depends on make tool being used" >.dep.inc +# @if [ -n "${MAKE_VERSION}" ]; then \ +# echo "DEPFILES=\$$(wildcard \$$(addsuffix .d, \$${OBJECTFILES}))" >>.dep.inc; \ +# echo "ifneq (\$${DEPFILES},)" >>.dep.inc; \ +# echo "include \$${DEPFILES}" >>.dep.inc; \ +# echo "endif" >>.dep.inc; \ +# else \ +# echo ".KEEP_STATE:" >>.dep.inc; \ +# echo ".KEEP_STATE_FILE:.make.state.\$${CONF}" >>.dep.inc; \ +# fi diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/Makefile-local-default.mk b/src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/Makefile-local-default.mk new file mode 100644 index 0000000..d461158 --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/Makefile-local-default.mk @@ -0,0 +1,36 @@ +# +# Generated Makefile - do not edit! +# +# +# This file contains information about the location of compilers and other tools. +# If you commmit this file into your revision control server, you will be able to +# to checkout the project and build it from the command line with make. However, +# if more than one person works on the same project, then this file might show +# conflicts since different users are bound to have compilers in different places. +# In that case you might choose to not commit this file and let MPLAB X recreate this file +# for each user. The disadvantage of not commiting this file is that you must run MPLAB X at +# least once so the file gets created and the project can be built. Finally, you can also +# avoid using this file at all if you are only building from the command line with make. +# You can invoke make with the values of the macros: +# $ makeMP_CC="/opt/microchip/mplabc30/v3.30c/bin/pic30-gcc" ... +# +PATH_TO_IDE_BIN=/home/burhan/.local/share/microchip/mplabx/v6.20/mplab_platform/platform/../mplab_ide/modules/../../bin/ +# Adding MPLAB X bin directory to path. +PATH:=/home/burhan/.local/share/microchip/mplabx/v6.20/mplab_platform/platform/../mplab_ide/modules/../../bin/:$(PATH) +# Path to java used to run MPLAB X when this makefile was created +MP_JAVA_PATH="/home/burhan/.local/share/microchip/mplabx/v6.20/sys/java/zulu8.64.0.19-ca-fx-jre8.0.345-linux_x64/bin/" +OS_CURRENT="$(shell uname -s)" +MP_CC="/home/burhan/.local/share/microchip/xc8/v2.46/bin/xc8-cc" +# MP_CPPC is not defined +# MP_BC is not defined +MP_AS="/home/burhan/.local/share/microchip/xc8/v2.46/bin/xc8-cc" +MP_LD="/home/burhan/.local/share/microchip/xc8/v2.46/bin/xc8-cc" +MP_AR="/home/burhan/.local/share/microchip/xc8/v2.46/bin/xc8-ar" +DEP_GEN=${MP_JAVA_PATH}java -jar "/home/burhan/.local/share/microchip/mplabx/v6.20/mplab_platform/platform/../mplab_ide/modules/../../bin/extractobjectdependencies.jar" +MP_CC_DIR="/home/burhan/.local/share/microchip/xc8/v2.46/bin" +# MP_CPPC_DIR is not defined +# MP_BC_DIR is not defined +MP_AS_DIR="/home/burhan/.local/share/microchip/xc8/v2.46/bin" +MP_LD_DIR="/home/burhan/.local/share/microchip/xc8/v2.46/bin" +MP_AR_DIR="/home/burhan/.local/share/microchip/xc8/v2.46/bin" +DFP_DIR=/home/burhan/.local/share/microchip/mplabx/v6.20/packs/Microchip/PIC16Fxxx_DFP/1.6.156 diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/Makefile-variables.mk b/src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/Makefile-variables.mk new file mode 100644 index 0000000..1b11a07 --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/Makefile-variables.mk @@ -0,0 +1,10 @@ +# +# Generated - do not edit! +# +# NOCDDL +# +CND_BASEDIR=`pwd` +# default configuration +CND_ARTIFACT_DIR_default=dist/default/production +CND_ARTIFACT_NAME_default=IRLib_v7.X.a +CND_ARTIFACT_PATH_default=dist/default/production/IRLib_v7.X.a diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/configurations.xml b/src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/configurations.xml new file mode 100644 index 0000000..1ccfc8a --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/configurations.xml @@ -0,0 +1,176 @@ + + + + + IRLib_v7.h + + + Makefile + + + + + IRBind1829.c + IRBind887.c + IRLib_v7.c + + + + ../IRLib_v7 + + Makefile + + + + localhost + PIC16F887 + + + noID + XC8 + 2.46 + 3 + + + + + + + + + + + + + + + false + false + + + + + + + false + false + + false + + false + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/private/configurations.xml b/src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/private/configurations.xml new file mode 100644 index 0000000..31e2018 --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/private/configurations.xml @@ -0,0 +1,25 @@ + + + Makefile + 0 + + + noToolString + /home/burhan/.local/share/microchip/xc8/v2.46/bin + + place holder 1 + place holder 2 + + + + + true + 0 + 0 + 0 + + + + + + diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/private/private.xml b/src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/private/private.xml new file mode 100644 index 0000000..5a08809 --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/private/private.xml @@ -0,0 +1,12 @@ + + + + + + file:/home/burhan/Desktop/PROJ%20ES/(WIP)Definitive/PIC16F887_AMPINTERFACE.X/libs/IR_LIB/IRLib_v7.X/IRLib_v7.h + file:/home/burhan/Desktop/PROJ%20ES/(WIP)Definitive/PIC16F887_AMPINTERFACE.X/libs/IR_LIB/IRLib_v7.X/IRBind1829.c + file:/home/burhan/Desktop/PROJ%20ES/(WIP)Definitive/PIC16F887_AMPINTERFACE.X/libs/IR_LIB/IRLib_v7.X/IRLib_v7.c + file:/home/burhan/Desktop/PROJ%20ES/(WIP)Definitive/PIC16F887_AMPINTERFACE.X/libs/IR_LIB/IRLib_v7.X/IRBind887.c + + + diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/project.xml b/src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/project.xml new file mode 100644 index 0000000..3bf3a13 --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7.X/nbproject/project.xml @@ -0,0 +1,25 @@ + + + com.microchip.mplab.nbide.embedded.makeproject + + + IRLib_v7 + 8acf55df-a22f-4c7a-ad72-f153bd066815 + 0 + ISO-8859-1 + + + ../IRLib_v7 + + + + default + 3 + + + + false + + + + diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7.c b/src/picamp.X/libs/IR_LIB/IRLib_v7.c new file mode 100644 index 0000000..74114b6 --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7.c @@ -0,0 +1,74 @@ +#include "./IRLib_v7.h" + +void IRInit(IntEdge IntEdge, unsigned char vMTPR, unsigned char vPTPrSc, unsigned char vMTPoSc, unsigned char vTTPrSc) { + //interrupts + SetReg(&IntConGIE, 1); + SetReg(&IntConINTE, 1); + SetReg(&IntConPEIE, 1); + + //measure timer config + SetReg(&MTPrSc, vPTPrSc); + SetReg(&MTPR, vMTPR); + SetReg(&MTPoSc, vMTPoSc); + SetReg(&MTOn, 0); + SetReg(&PIEMTIE, 1); + + //timeout timer + SetReg(&TTPrSc, vTTPrSc); + SetReg(&TTOn, 0); + SetReg(&PIETTIE, 1); + + //int pin + SetReg(&IntPinTrisReg, 1); + SetReg(&IntPinAnselReg, 0); + SetReg(&IntEdgeReg, IntEdge); +} + +void IntHandler() { + SetReg(&MTimer, 0); + SetReg(&MTOn, 1); + SetReg(&TTimer, 0); + SetReg(&TTOn, 1); + SetReg(&IntPinIF, 0); +} + +void MTHandler() { + dataBuffer = dataBuffer << 1; + if (!ReadReg(&IRR)) { + dataBuffer |= 0b1; + } + count++; + SetReg(&MTOn, 0); + if (count >= MessageSize) { + + data = dataBuffer; + dataBuffer = 0; + count = 0; + IRBF = 1; + } + SetReg(&MTIF, 0); +} + +void TTHandler() { + count = 0; + dataBuffer = 0; + SetReg(&TTOn, 0); + SetReg(&TTimer, 0); + SetReg(&TTIF, 0); +} + +void SetReg(Reg* R, unsigned char V) { + unsigned char bitMask; + V = (unsigned char) (V << R->offset); + bitMask = (unsigned char) (((1 << R->size) - 1) << R->offset); + *(R->address) &= ~bitMask; + *(R->address) |= V & bitMask; +} + +unsigned char ReadReg(Reg* R) { + unsigned char V, bitMask; + bitMask = (unsigned char) (((1 << R->size) - 1) << R->offset); + V = *(R->address) & bitMask; + V = V >> R->offset; + return V; +} diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7.h b/src/picamp.X/libs/IR_LIB/IRLib_v7.h new file mode 100644 index 0000000..4abf34b --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7.h @@ -0,0 +1,53 @@ +#ifndef _IRLib_V7_H_ +#define _IRLib_V7_H_ + +typedef struct _Reg { + volatile unsigned char *address; + unsigned char size; + unsigned char offset; +} Reg; + +typedef enum { + falling, + rising +} IntEdge; + +#define MessageSize 12 + +volatile int dataBuffer = 0; //data buffer +volatile char IRBF = 0; //infrared buffer full flag +volatile int data = 0; +volatile char count = 0; + +void IRInit(IntEdge, unsigned char, unsigned char, unsigned char, unsigned char); //edge, MTPR, MTPrSc, MTPoSc, TTPrSc +void IntHandler(void); +void MTHandler(void); +void TTHandler(void); +void SetReg(Reg*, unsigned char); +unsigned char ReadReg(Reg*); + +Reg IRR; // Infra red reciever / INT Pin +Reg MTimer; // Measure Timer +Reg MTOn; // MTimer on +Reg MTIF; // MTimer interrupt Flag +Reg MTPR; // MTimer Period Register +Reg MTPrSc; // MTimer Pre-Scaler +Reg MTPoSc; // MTimer Post-Scaler +Reg TTimer; // Timeout Timer +Reg TTOn; // TTimer on +Reg TTIF; // TTimer Interrupt Flag +Reg TTPrSc; // TTimer Pre-Scaler +Reg IntPinTrisReg; // Interrupt Pin TriState Register +Reg IntPinAnselReg; // Interrupt Pin Analog Select Register +Reg IntPinIF; // Interrupt Pin Interrupt Flag +Reg IntEdgeReg; // Interrupt pin Edge Select Register +Reg IntConGIE; // Global Interrupt Enable +Reg IntConINTE; // Interrupt Enable +Reg IntConPEIE; // Peripheral Interrupt Enable +Reg PIEMTIE; // Peripheral Interrupt Enable Measure Timer Interrupt Enable +Reg PIETTIE; // Peripheral Interrupt Enable Timeout Timer Interrupt Enable + +void IRBind887(void); +void IRBind1829(void); + +#endif //_IRLIB_V7_H_ \ No newline at end of file diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/Makefile b/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/Makefile new file mode 100644 index 0000000..fca8e2c --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/Makefile @@ -0,0 +1,113 @@ +# +# There exist several targets which are by default empty and which can be +# used for execution of your targets. These targets are usually executed +# before and after some main targets. They are: +# +# .build-pre: called before 'build' target +# .build-post: called after 'build' target +# .clean-pre: called before 'clean' target +# .clean-post: called after 'clean' target +# .clobber-pre: called before 'clobber' target +# .clobber-post: called after 'clobber' target +# .all-pre: called before 'all' target +# .all-post: called after 'all' target +# .help-pre: called before 'help' target +# .help-post: called after 'help' target +# +# Targets beginning with '.' are not intended to be called on their own. +# +# Main targets can be executed directly, and they are: +# +# build build a specific configuration +# clean remove built files from a configuration +# clobber remove all built files +# all build all configurations +# help print help mesage +# +# Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and +# .help-impl are implemented in nbproject/makefile-impl.mk. +# +# Available make variables: +# +# CND_BASEDIR base directory for relative paths +# CND_DISTDIR default top distribution directory (build artifacts) +# CND_BUILDDIR default top build directory (object files, ...) +# CONF name of current configuration +# CND_ARTIFACT_DIR_${CONF} directory of build artifact (current configuration) +# CND_ARTIFACT_NAME_${CONF} name of build artifact (current configuration) +# CND_ARTIFACT_PATH_${CONF} path to build artifact (current configuration) +# CND_PACKAGE_DIR_${CONF} directory of package (current configuration) +# CND_PACKAGE_NAME_${CONF} name of package (current configuration) +# CND_PACKAGE_PATH_${CONF} path to package (current configuration) +# +# NOCDDL + + +# Environment +MKDIR=mkdir +CP=cp +CCADMIN=CCadmin +RANLIB=ranlib + + +# build +build: .build-post + +.build-pre: +# Add your pre 'build' code here... + +.build-post: .build-impl +# Add your post 'build' code here... + + +# clean +clean: .clean-post + +.clean-pre: +# Add your pre 'clean' code here... +# WARNING: the IDE does not call this target since it takes a long time to +# simply run make. Instead, the IDE removes the configuration directories +# under build and dist directly without calling make. +# This target is left here so people can do a clean when running a clean +# outside the IDE. + +.clean-post: .clean-impl +# Add your post 'clean' code here... + + +# clobber +clobber: .clobber-post + +.clobber-pre: +# Add your pre 'clobber' code here... + +.clobber-post: .clobber-impl +# Add your post 'clobber' code here... + + +# all +all: .all-post + +.all-pre: +# Add your pre 'all' code here... + +.all-post: .all-impl +# Add your post 'all' code here... + + +# help +help: .help-post + +.help-pre: +# Add your pre 'help' code here... + +.help-post: .help-impl +# Add your post 'help' code here... + + + +# include project implementation makefile +include nbproject/Makefile-impl.mk + +# include project make variables +include nbproject/Makefile-variables.mk diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/main.c b/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/main.c new file mode 100644 index 0000000..9e6cb2b --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/main.c @@ -0,0 +1,124 @@ +/*********************************************************************** + * PIC : 16F1829 + * Date : Between now and then + **********************************************************************/ + +#include // PIC hardware mapping +#include +#include + +#pragma config FOSC = 0x4 // xor INTOSC (name from IDE database) +#pragma config WDTE = 0x0 // OFF +#pragma config PWRTE = 0x1 // OFF +#pragma config MCLRE = OFF // etc. +#pragma config CP = OFF // text is the most readable option +#pragma config CPD = OFF +#pragma config BOREN = ON +#pragma config CLKOUTEN = OFF +#pragma config IESO = OFF +#pragma config FCMEN = OFF + +// CONFIG WORD 2 @ flash program memory location 0x8008 +#pragma config WRT = OFF +#pragma config PLLEN = OFF +#pragma config STVREN = OFF +#pragma config BORV = LO +//#pragma config DEBUG = OFF // Pre-processor short-circuits ! +#pragma config LVP = OFF + +/* Hardware / state naming scheme ------------------------------------*/ +#define LED1 LATCbits.LATC0 +#define LED2 LATCbits.LATC1 +#define LED3 LATCbits.LATC2 +#define LED4 LATCbits.LATC3 + +//constants +#define _XTAL_FREQ 16000000 // Used by the XC8 delay_ms(x) macro +#define _MTPR 211 +#define _MTPrSc 0b01 +#define _MTPoSc 0b0011 +#define _TTPrSc 0b11 + +void pic_init(void); +void init_osc(void); +void init_gpio(void); + +void main(void) { + pic_init(); + while (1) { + if (IRBF) { + if (data == 0b010010010000) { //input 1 + LED1 = 0; + __delay_ms(250); + LED1 = 1; + } + if (data == 0b010100001000) { //input 2 + LED2 = 0; + __delay_ms(250); + LED2 = 1; + } + if (data == 0b010010100000) { //input 3 + LED3 = 0; + __delay_ms(250); + LED3 = 1; + } + if (data == 0b010010001000) { //input 4 + LED4 = 0; + __delay_ms(250); + LED4 = 1; + } + if (data == 0b010100100000) { //volume up + LED1 = 0; + LED2 = 0; + __delay_ms(250); + LED1 = 1; + LED2 = 1; + } + if (data == 0b010100010000) { //volume down + LED3 = 0; + LED4 = 0; + __delay_ms(250); + LED3 = 1; + LED4 = 1; + } + IRBF = 0; + } + }//while +}//main + +void pic_init(void) { + init_osc(); + init_gpio(); + IRBind1829(); + IRInit(falling, _MTPR, _MTPrSc, _MTPoSc, _TTPrSc); +} + +void init_osc(void) { + // System Clock Select (SCS) + OSCCONbits.SCS = 0b00; // Clk determined by FOSC in Conf-1 + // Internal Resistor-Capacitor Frequency select (IRCF) + OSCCONbits.IRCF = 0b1111; // 16 MHz clock speed + // Software Phase-Locked Loop ENable (SPLLEN) + OSCCONbits.SPLLEN = 0b0; // 4 x Phase-Locked Loop disabled +} + +void init_gpio(void) { + TRISC = 0; + LATC = 15; +} + +//interrupt service routine + +void __interrupt() isr() { + if (INTF) { + IntHandler(); //Interrupt Handling + }//INTF + + if (TMR2IF) { + MTHandler(); //Measure Timer Handling + }//TMR2IF + + if (TMR1IF) { //timeout / reset + TTHandler(); //Timeout Timer Handling + } //TMR1IF +}//interrupt \ No newline at end of file diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/Makefile-default.mk b/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/Makefile-default.mk new file mode 100644 index 0000000..4bf1a92 --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/Makefile-default.mk @@ -0,0 +1,156 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a -pre and a -post target defined where you can add customized code. +# +# This makefile implements configuration specific macros and targets. + + +# Include project Makefile +ifeq "${IGNORE_LOCAL}" "TRUE" +# do not include local makefile. User is passing all local related variables already +else +include Makefile +# Include makefile containing local settings +ifeq "$(wildcard nbproject/Makefile-local-default.mk)" "nbproject/Makefile-local-default.mk" +include nbproject/Makefile-local-default.mk +endif +endif + +# Environment +MKDIR=gnumkdir -p +RM=rm -f +MV=mv +CP=cp + +# Macros +CND_CONF=default +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +IMAGE_TYPE=debug +OUTPUT_SUFFIX=elf +DEBUGGABLE_SUFFIX=elf +FINAL_IMAGE=${DISTDIR}/IRLib_v7_1829.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +else +IMAGE_TYPE=production +OUTPUT_SUFFIX=hex +DEBUGGABLE_SUFFIX=elf +FINAL_IMAGE=${DISTDIR}/IRLib_v7_1829.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +endif + +ifeq ($(COMPARE_BUILD), true) +COMPARISON_BUILD=-mafrlcsj +else +COMPARISON_BUILD= +endif + +# Object Directory +OBJECTDIR=build/${CND_CONF}/${IMAGE_TYPE} + +# Distribution Directory +DISTDIR=dist/${CND_CONF}/${IMAGE_TYPE} + +# Source Files Quoted if spaced +SOURCEFILES_QUOTED_IF_SPACED=main.c + +# Object Files Quoted if spaced +OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/main.p1 +POSSIBLE_DEPFILES=${OBJECTDIR}/main.p1.d + +# Object Files +OBJECTFILES=${OBJECTDIR}/main.p1 + +# Source Files +SOURCEFILES=main.c + + + +CFLAGS= +ASFLAGS= +LDLIBSOPTIONS= + +############# Tool locations ########################################## +# If you copy a project from one host to another, the path where the # +# compiler is installed may be different. # +# If you open this project with MPLAB X in the new host, this # +# makefile will be regenerated and the paths will be corrected. # +####################################################################### +# fixDeps replaces a bunch of sed/cat/printf statements that slow down the build +FIXDEPS=fixDeps + +.build-conf: ${BUILD_SUBPROJECTS} +ifneq ($(INFORMATION_MESSAGE), ) + @echo $(INFORMATION_MESSAGE) +endif + ${MAKE} -f nbproject/Makefile-default.mk ${DISTDIR}/IRLib_v7_1829.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} + +MP_PROCESSOR_OPTION=16F1829 +# ------------------------------------------------------------------------------------ +# Rules for buildStep: compile +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +${OBJECTDIR}/main.p1: main.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/main.p1.d + @${RM} ${OBJECTDIR}/main.p1 + ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -mdebugger=pickit5 -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -I"../IRLib_v7" -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/main.p1 main.c + @-${MV} ${OBJECTDIR}/main.d ${OBJECTDIR}/main.p1.d + @${FIXDEPS} ${OBJECTDIR}/main.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ + +else +${OBJECTDIR}/main.p1: main.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/main.p1.d + @${RM} ${OBJECTDIR}/main.p1 + ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -I"../IRLib_v7" -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/main.p1 main.c + @-${MV} ${OBJECTDIR}/main.d ${OBJECTDIR}/main.p1.d + @${FIXDEPS} ${OBJECTDIR}/main.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ + +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: assemble +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: assembleWithPreprocess +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: link +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +${DISTDIR}/IRLib_v7_1829.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk ../IRLib_v7.X/dist/default/production/IRLib_v7.X.a + @${MKDIR} ${DISTDIR} + ${MP_CC} $(MP_EXTRA_LD_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -Wl,-Map=${DISTDIR}/IRLib_v7_1829.X.${IMAGE_TYPE}.map -D__DEBUG=1 -mdebugger=pickit5 -DXPRJ_default=$(CND_CONF) -Wl,--defsym=__MPLAB_BUILD=1 -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -I"../IRLib_v7" -mwarn=-3 -Wa,-a -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits -std=c99 -gdwarf-3 -mstack=compiled:auto:auto $(COMPARISON_BUILD) -Wl,--memorysummary,${DISTDIR}/memoryfile.xml -o ${DISTDIR}/IRLib_v7_1829.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED} ..\IRLib_v7.X\dist\default\production\IRLib_v7.X.a + @${RM} ${DISTDIR}/IRLib_v7_1829.X.${IMAGE_TYPE}.hex + +else +${DISTDIR}/IRLib_v7_1829.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk ../IRLib_v7.X/dist/default/production/IRLib_v7.X.a + @${MKDIR} ${DISTDIR} + ${MP_CC} $(MP_EXTRA_LD_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -Wl,-Map=${DISTDIR}/IRLib_v7_1829.X.${IMAGE_TYPE}.map -DXPRJ_default=$(CND_CONF) -Wl,--defsym=__MPLAB_BUILD=1 -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -I"../IRLib_v7" -mwarn=-3 -Wa,-a -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits -std=c99 -gdwarf-3 -mstack=compiled:auto:auto $(COMPARISON_BUILD) -Wl,--memorysummary,${DISTDIR}/memoryfile.xml -o ${DISTDIR}/IRLib_v7_1829.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED} ..\IRLib_v7.X\dist\default\production\IRLib_v7.X.a + +endif + + +# Subprojects +.build-subprojects: + + +# Subprojects +.clean-subprojects: + +# Clean Targets +.clean-conf: ${CLEAN_SUBPROJECTS} + ${RM} -r ${OBJECTDIR} + ${RM} -r ${DISTDIR} + +# Enable dependency checking +.dep.inc: .depcheck-impl + +DEPFILES=$(wildcard ${POSSIBLE_DEPFILES}) +ifneq (${DEPFILES},) +include ${DEPFILES} +endif diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/Makefile-genesis.properties b/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/Makefile-genesis.properties new file mode 100644 index 0000000..2aab6f6 --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/Makefile-genesis.properties @@ -0,0 +1,13 @@ +# +#Wed Feb 14 20:09:57 CET 2024 +default.languagetoolchain.version=2.45 +default.Pack.dfplocation=C\:\\Users\\robin\\.mchp_packs\\Microchip\\PIC12-16F1xxx_DFP\\1.7.242 +default.com-microchip-mplab-mdbcore-PK5Tool-PK5ToolImpl.md5=723771b957e0f1e0ec1761a42d8bb5e8 +conf.ids=default +default.languagetoolchain.dir=C\:\\Program Files\\Microchip\\xc8\\v2.45\\bin +host.id=j20m-9n47-m +configurations-xml=9ddbae7c06d1696da919750bf149a3b3 +com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=e62346c0c0ecee2637e613b49cb7b7fa +default.com-microchip-mplab-nbide-toolchain-xc8-XC8LanguageToolchain.md5=486b02ed36e5bdffb1f797e38fa058e5 +proj.dir=C\:\\Users\\robin\\MPLABXProjects\\IRLib_v7_1829.X +host.platform=windows diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/Makefile-impl.mk b/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/Makefile-impl.mk new file mode 100644 index 0000000..caf1bba --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/Makefile-impl.mk @@ -0,0 +1,69 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a pre- and a post- target defined where you can add customization code. +# +# This makefile implements macros and targets common to all configurations. +# +# NOCDDL + + +# Building and Cleaning subprojects are done by default, but can be controlled with the SUB +# macro. If SUB=no, subprojects will not be built or cleaned. The following macro +# statements set BUILD_SUB-CONF and CLEAN_SUB-CONF to .build-reqprojects-conf +# and .clean-reqprojects-conf unless SUB has the value 'no' +SUB_no=NO +SUBPROJECTS=${SUB_${SUB}} +BUILD_SUBPROJECTS_=.build-subprojects +BUILD_SUBPROJECTS_NO= +BUILD_SUBPROJECTS=${BUILD_SUBPROJECTS_${SUBPROJECTS}} +CLEAN_SUBPROJECTS_=.clean-subprojects +CLEAN_SUBPROJECTS_NO= +CLEAN_SUBPROJECTS=${CLEAN_SUBPROJECTS_${SUBPROJECTS}} + + +# Project Name +PROJECTNAME=IRLib_v7_1829.X + +# Active Configuration +DEFAULTCONF=default +CONF=${DEFAULTCONF} + +# All Configurations +ALLCONFS=default + + +# build +.build-impl: .build-pre + ${MAKE} -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .build-conf + + +# clean +.clean-impl: .clean-pre + ${MAKE} -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .clean-conf + +# clobber +.clobber-impl: .clobber-pre .depcheck-impl + ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=default clean + + + +# all +.all-impl: .all-pre .depcheck-impl + ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=default build + + + +# dependency checking support +.depcheck-impl: +# @echo "# This code depends on make tool being used" >.dep.inc +# @if [ -n "${MAKE_VERSION}" ]; then \ +# echo "DEPFILES=\$$(wildcard \$$(addsuffix .d, \$${OBJECTFILES}))" >>.dep.inc; \ +# echo "ifneq (\$${DEPFILES},)" >>.dep.inc; \ +# echo "include \$${DEPFILES}" >>.dep.inc; \ +# echo "endif" >>.dep.inc; \ +# else \ +# echo ".KEEP_STATE:" >>.dep.inc; \ +# echo ".KEEP_STATE_FILE:.make.state.\$${CONF}" >>.dep.inc; \ +# fi diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/Makefile-local-default.mk b/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/Makefile-local-default.mk new file mode 100644 index 0000000..5067fc9 --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/Makefile-local-default.mk @@ -0,0 +1,37 @@ +# +# Generated Makefile - do not edit! +# +# +# This file contains information about the location of compilers and other tools. +# If you commmit this file into your revision control server, you will be able to +# to checkout the project and build it from the command line with make. However, +# if more than one person works on the same project, then this file might show +# conflicts since different users are bound to have compilers in different places. +# In that case you might choose to not commit this file and let MPLAB X recreate this file +# for each user. The disadvantage of not commiting this file is that you must run MPLAB X at +# least once so the file gets created and the project can be built. Finally, you can also +# avoid using this file at all if you are only building from the command line with make. +# You can invoke make with the values of the macros: +# $ makeMP_CC="/opt/microchip/mplabc30/v3.30c/bin/pic30-gcc" ... +# +SHELL=cmd.exe +PATH_TO_IDE_BIN=C:/Program Files/Microchip/MPLABX/v6.15/mplab_platform/platform/../mplab_ide/modules/../../bin/ +# Adding MPLAB X bin directory to path. +PATH:=C:/Program Files/Microchip/MPLABX/v6.15/mplab_platform/platform/../mplab_ide/modules/../../bin/:$(PATH) +# Path to java used to run MPLAB X when this makefile was created +MP_JAVA_PATH="C:\Program Files\Microchip\MPLABX\v6.15\sys\java\zulu8.64.0.19-ca-fx-jre8.0.345-win_x64/bin/" +OS_CURRENT="$(shell uname -s)" +MP_CC="C:\Program Files\Microchip\xc8\v2.45\bin\xc8-cc.exe" +# MP_CPPC is not defined +# MP_BC is not defined +MP_AS="C:\Program Files\Microchip\xc8\v2.45\bin\xc8-cc.exe" +MP_LD="C:\Program Files\Microchip\xc8\v2.45\bin\xc8-cc.exe" +MP_AR="C:\Program Files\Microchip\xc8\v2.45\bin\xc8-ar.exe" +DEP_GEN=${MP_JAVA_PATH}java -jar "C:/Program Files/Microchip/MPLABX/v6.15/mplab_platform/platform/../mplab_ide/modules/../../bin/extractobjectdependencies.jar" +MP_CC_DIR="C:\Program Files\Microchip\xc8\v2.45\bin" +# MP_CPPC_DIR is not defined +# MP_BC_DIR is not defined +MP_AS_DIR="C:\Program Files\Microchip\xc8\v2.45\bin" +MP_LD_DIR="C:\Program Files\Microchip\xc8\v2.45\bin" +MP_AR_DIR="C:\Program Files\Microchip\xc8\v2.45\bin" +DFP_DIR=C:/Users/robin/.mchp_packs/Microchip/PIC12-16F1xxx_DFP/1.7.242 diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/Makefile-variables.mk b/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/Makefile-variables.mk new file mode 100644 index 0000000..14e9f76 --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/Makefile-variables.mk @@ -0,0 +1,10 @@ +# +# Generated - do not edit! +# +# NOCDDL +# +CND_BASEDIR=`pwd` +# default configuration +CND_ARTIFACT_DIR_default=dist/default/production +CND_ARTIFACT_NAME_default=IRLib_v7_1829.X.production.hex +CND_ARTIFACT_PATH_default=dist/default/production/IRLib_v7_1829.X.production.hex diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/configurations.xml b/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/configurations.xml new file mode 100644 index 0000000..d349c35 --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/configurations.xml @@ -0,0 +1,299 @@ + + + + + ../IRLib_v7/IRLib_v7.h + + + + + main.c + + + Makefile + + + + ../IRLib_v7 + + Makefile + + + + localhost + PIC16F1829 + + + PK5Tool + XC8 + 2.45 + 3 + + + + + + + + + + ../IRLib_v7.X/dist/default/production/IRLib_v7.X.a + + + + + + false + false + + + + + + + false + false + + false + + false + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/private/configurations.xml b/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/private/configurations.xml new file mode 100644 index 0000000..dfa87f4 --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/private/configurations.xml @@ -0,0 +1,25 @@ + + + Makefile + 0 + + + :=MPLABComm-USB-Microchip:=<vid>04D8:=<pid>9036:=<rev>0100:=<man>Microchip Technology Incorporated:=<prod>MPLAB PICkit 5:=<sn>020026702RYN006133:=<drv>x:=<xpt>b:=end + C:\Program Files\Microchip\xc8\v2.45\bin + + place holder 1 + place holder 2 + + + + + true + 0 + 0 + 0 + + + + + + diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/private/private.xml b/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/private/private.xml new file mode 100644 index 0000000..6807a2b --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/private/private.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/project.xml b/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/project.xml new file mode 100644 index 0000000..732a922 --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7_1829.X/nbproject/project.xml @@ -0,0 +1,25 @@ + + + com.microchip.mplab.nbide.embedded.makeproject + + + IRLib_v7_1829 + 7d6d8449-dade-4f96-a689-d79c3428c8da + 0 + ISO-8859-1 + + + ../IRLib_v7 + + + + default + 2 + + + + false + + + + diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/Makefile b/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/Makefile new file mode 100644 index 0000000..fca8e2c --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/Makefile @@ -0,0 +1,113 @@ +# +# There exist several targets which are by default empty and which can be +# used for execution of your targets. These targets are usually executed +# before and after some main targets. They are: +# +# .build-pre: called before 'build' target +# .build-post: called after 'build' target +# .clean-pre: called before 'clean' target +# .clean-post: called after 'clean' target +# .clobber-pre: called before 'clobber' target +# .clobber-post: called after 'clobber' target +# .all-pre: called before 'all' target +# .all-post: called after 'all' target +# .help-pre: called before 'help' target +# .help-post: called after 'help' target +# +# Targets beginning with '.' are not intended to be called on their own. +# +# Main targets can be executed directly, and they are: +# +# build build a specific configuration +# clean remove built files from a configuration +# clobber remove all built files +# all build all configurations +# help print help mesage +# +# Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and +# .help-impl are implemented in nbproject/makefile-impl.mk. +# +# Available make variables: +# +# CND_BASEDIR base directory for relative paths +# CND_DISTDIR default top distribution directory (build artifacts) +# CND_BUILDDIR default top build directory (object files, ...) +# CONF name of current configuration +# CND_ARTIFACT_DIR_${CONF} directory of build artifact (current configuration) +# CND_ARTIFACT_NAME_${CONF} name of build artifact (current configuration) +# CND_ARTIFACT_PATH_${CONF} path to build artifact (current configuration) +# CND_PACKAGE_DIR_${CONF} directory of package (current configuration) +# CND_PACKAGE_NAME_${CONF} name of package (current configuration) +# CND_PACKAGE_PATH_${CONF} path to package (current configuration) +# +# NOCDDL + + +# Environment +MKDIR=mkdir +CP=cp +CCADMIN=CCadmin +RANLIB=ranlib + + +# build +build: .build-post + +.build-pre: +# Add your pre 'build' code here... + +.build-post: .build-impl +# Add your post 'build' code here... + + +# clean +clean: .clean-post + +.clean-pre: +# Add your pre 'clean' code here... +# WARNING: the IDE does not call this target since it takes a long time to +# simply run make. Instead, the IDE removes the configuration directories +# under build and dist directly without calling make. +# This target is left here so people can do a clean when running a clean +# outside the IDE. + +.clean-post: .clean-impl +# Add your post 'clean' code here... + + +# clobber +clobber: .clobber-post + +.clobber-pre: +# Add your pre 'clobber' code here... + +.clobber-post: .clobber-impl +# Add your post 'clobber' code here... + + +# all +all: .all-post + +.all-pre: +# Add your pre 'all' code here... + +.all-post: .all-impl +# Add your post 'all' code here... + + +# help +help: .help-post + +.help-pre: +# Add your pre 'help' code here... + +.help-post: .help-impl +# Add your post 'help' code here... + + + +# include project implementation makefile +include nbproject/Makefile-impl.mk + +# include project make variables +include nbproject/Makefile-variables.mk diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/main.c b/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/main.c new file mode 100644 index 0000000..3d4c36f --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/main.c @@ -0,0 +1,118 @@ +/*********************************************************************** + * PIC : 16F887 + * Date : Between now and then + **********************************************************************/ + +#include +#include +#include + +#pragma config LVP = OFF // low voltage programming off +#pragma config FCMEN = OFF // fail-safe clock monitor off +#pragma config IESO = OFF // internal/external switchover off +#pragma config BOREN = ON // brown out reset on +#pragma config CPD = OFF //data code protection off +#pragma config CP = OFF // code protection off +#pragma config MCLRE = OFF // RE3/~MCLR is i/o pin +#pragma config PWRTE = ON // power up timer on +#pragma config WDTE = OFF //watchdog timer off +#pragma config FOSC = INTRC_NOCLKOUT //internal clock with io on RA6 and RA7 + +#pragma config WRT = OFF // write protection off +#pragma config BOR4V = BOR40V // brown out reset 4v + +/* Hardware / state naming scheme ------------------------------------*/ +#define LED1 PORTAbits.RA0 +#define LED2 PORTAbits.RA1 +#define LED3 PORTAbits.RA2 +#define LED4 PORTAbits.RA3 + +//constants +#define _XTAL_FREQ 8000000 // Used by the XC8 delay_ms(x) macro +#define _MTPR 211 +#define _MTPrSc 0b01 +#define _MTPoSc 0b0001 +#define _TTPrSc 0b11 + +void pic_init(void); +void init_osc(void); +void init_gpio(void); + +void main(void) { + pic_init(); + while (1) { + if (IRBF) { + if (data == 0b010010010000) { //input 1 + LED1 = 0; + __delay_ms(250); + LED1 = 1; + } + if (data == 0b010100001000) { //input 2 + LED2 = 0; + __delay_ms(250); + LED2 = 1; + } + if (data == 0b010010100000) { //input 3 + LED3 = 0; + __delay_ms(250); + LED3 = 1; + } + if (data == 0b010010001000) { //input 4 + LED4 = 0; + __delay_ms(250); + LED4 = 1; + } + if (data == 0b010100100000) { //volume up + LED1 = 0; + LED2 = 0; + __delay_ms(250); + LED1 = 1; + LED2 = 1; + } + if (data == 0b010100010000) { //volume down + LED3 = 0; + LED4 = 0; + __delay_ms(250); + LED3 = 1; + LED4 = 1; + } + IRBF = 0; + } + }//while +}//main + +void pic_init(void) { + init_osc(); + init_gpio(); + IRBind887(); + IRInit(falling, _MTPR, _MTPrSc, _MTPoSc, _TTPrSc); +} + +void init_osc(void) { + OSCCONbits.IRCF = 0b111; //111 8MHz + OSCCONbits.OSTS = 0; // running from internal oscillator + OSCCONbits.SCS = 0; //system clock selected by config + while (OSCCONbits.HTS == 0); +} + +void init_gpio(void) { + TRISA = 0; + ANSEL = 0; + PORTA = 15; +} + +//interrupt service routine + +void __interrupt() isr() { + if (INTF) { + IntHandler(); //Interrupt Handling + }//INTF + + if (TMR2IF) { + MTHandler(); //Measure Timer Handling + }//TMR2IF + + if (TMR1IF) { //timeout / reset + TTHandler(); //Timeout Timer Handling + } //TMR1IF +}//interrupt \ No newline at end of file diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/Makefile-default.mk b/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/Makefile-default.mk new file mode 100644 index 0000000..5d43c0e --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/Makefile-default.mk @@ -0,0 +1,156 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a -pre and a -post target defined where you can add customized code. +# +# This makefile implements configuration specific macros and targets. + + +# Include project Makefile +ifeq "${IGNORE_LOCAL}" "TRUE" +# do not include local makefile. User is passing all local related variables already +else +include Makefile +# Include makefile containing local settings +ifeq "$(wildcard nbproject/Makefile-local-default.mk)" "nbproject/Makefile-local-default.mk" +include nbproject/Makefile-local-default.mk +endif +endif + +# Environment +MKDIR=gnumkdir -p +RM=rm -f +MV=mv +CP=cp + +# Macros +CND_CONF=default +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +IMAGE_TYPE=debug +OUTPUT_SUFFIX=elf +DEBUGGABLE_SUFFIX=elf +FINAL_IMAGE=${DISTDIR}/IRLib_v7_887.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +else +IMAGE_TYPE=production +OUTPUT_SUFFIX=hex +DEBUGGABLE_SUFFIX=elf +FINAL_IMAGE=${DISTDIR}/IRLib_v7_887.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +endif + +ifeq ($(COMPARE_BUILD), true) +COMPARISON_BUILD=-mafrlcsj +else +COMPARISON_BUILD= +endif + +# Object Directory +OBJECTDIR=build/${CND_CONF}/${IMAGE_TYPE} + +# Distribution Directory +DISTDIR=dist/${CND_CONF}/${IMAGE_TYPE} + +# Source Files Quoted if spaced +SOURCEFILES_QUOTED_IF_SPACED=main.c + +# Object Files Quoted if spaced +OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/main.p1 +POSSIBLE_DEPFILES=${OBJECTDIR}/main.p1.d + +# Object Files +OBJECTFILES=${OBJECTDIR}/main.p1 + +# Source Files +SOURCEFILES=main.c + + + +CFLAGS= +ASFLAGS= +LDLIBSOPTIONS= + +############# Tool locations ########################################## +# If you copy a project from one host to another, the path where the # +# compiler is installed may be different. # +# If you open this project with MPLAB X in the new host, this # +# makefile will be regenerated and the paths will be corrected. # +####################################################################### +# fixDeps replaces a bunch of sed/cat/printf statements that slow down the build +FIXDEPS=fixDeps + +.build-conf: ${BUILD_SUBPROJECTS} +ifneq ($(INFORMATION_MESSAGE), ) + @echo $(INFORMATION_MESSAGE) +endif + ${MAKE} -f nbproject/Makefile-default.mk ${DISTDIR}/IRLib_v7_887.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} + +MP_PROCESSOR_OPTION=16F887 +# ------------------------------------------------------------------------------------ +# Rules for buildStep: compile +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +${OBJECTDIR}/main.p1: main.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/main.p1.d + @${RM} ${OBJECTDIR}/main.p1 + ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -mdebugger=pickit5 -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -I"../IRLib_v7" -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/main.p1 main.c + @-${MV} ${OBJECTDIR}/main.d ${OBJECTDIR}/main.p1.d + @${FIXDEPS} ${OBJECTDIR}/main.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ + +else +${OBJECTDIR}/main.p1: main.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/main.p1.d + @${RM} ${OBJECTDIR}/main.p1 + ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -I"../IRLib_v7" -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/main.p1 main.c + @-${MV} ${OBJECTDIR}/main.d ${OBJECTDIR}/main.p1.d + @${FIXDEPS} ${OBJECTDIR}/main.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ + +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: assemble +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: assembleWithPreprocess +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: link +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +${DISTDIR}/IRLib_v7_887.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk ../IRLib_v7.X/dist/default/production/IRLib_v7.X.a + @${MKDIR} ${DISTDIR} + ${MP_CC} $(MP_EXTRA_LD_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -Wl,-Map=${DISTDIR}/IRLib_v7_887.X.${IMAGE_TYPE}.map -D__DEBUG=1 -mdebugger=pickit5 -DXPRJ_default=$(CND_CONF) -Wl,--defsym=__MPLAB_BUILD=1 -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -I"../IRLib_v7" -mwarn=-3 -Wa,-a -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -mrom=default,-1f00-1ffe -mram=default,-0-0,-70-70,-80-80,-f0-f0,-100-100,-170-170,-180-180,-1e5-1f0 $(COMPARISON_BUILD) -Wl,--memorysummary,${DISTDIR}/memoryfile.xml -o ${DISTDIR}/IRLib_v7_887.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED} ..\IRLib_v7.X\dist\default\production\IRLib_v7.X.a + @${RM} ${DISTDIR}/IRLib_v7_887.X.${IMAGE_TYPE}.hex + +else +${DISTDIR}/IRLib_v7_887.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk ../IRLib_v7.X/dist/default/production/IRLib_v7.X.a + @${MKDIR} ${DISTDIR} + ${MP_CC} $(MP_EXTRA_LD_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -Wl,-Map=${DISTDIR}/IRLib_v7_887.X.${IMAGE_TYPE}.map -DXPRJ_default=$(CND_CONF) -Wl,--defsym=__MPLAB_BUILD=1 -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -I"../IRLib_v7" -mwarn=-3 -Wa,-a -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits -std=c99 -gdwarf-3 -mstack=compiled:auto:auto $(COMPARISON_BUILD) -Wl,--memorysummary,${DISTDIR}/memoryfile.xml -o ${DISTDIR}/IRLib_v7_887.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED} ..\IRLib_v7.X\dist\default\production\IRLib_v7.X.a + +endif + + +# Subprojects +.build-subprojects: + + +# Subprojects +.clean-subprojects: + +# Clean Targets +.clean-conf: ${CLEAN_SUBPROJECTS} + ${RM} -r ${OBJECTDIR} + ${RM} -r ${DISTDIR} + +# Enable dependency checking +.dep.inc: .depcheck-impl + +DEPFILES=$(wildcard ${POSSIBLE_DEPFILES}) +ifneq (${DEPFILES},) +include ${DEPFILES} +endif diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/Makefile-genesis.properties b/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/Makefile-genesis.properties new file mode 100644 index 0000000..88c5564 --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/Makefile-genesis.properties @@ -0,0 +1,13 @@ +# +#Wed Feb 14 20:09:58 CET 2024 +default.languagetoolchain.version=2.45 +default.Pack.dfplocation=C\:\\Users\\robin\\.mchp_packs\\Microchip\\PIC16Fxxx_DFP\\1.6.156 +default.com-microchip-mplab-mdbcore-PK5Tool-PK5ToolImpl.md5=723771b957e0f1e0ec1761a42d8bb5e8 +conf.ids=default +default.languagetoolchain.dir=C\:\\Program Files\\Microchip\\xc8\\v2.45\\bin +host.id=j20m-9n47-m +configurations-xml=03e60a6bc9ef5b3ef61e167737edf851 +com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=e62346c0c0ecee2637e613b49cb7b7fa +default.com-microchip-mplab-nbide-toolchain-xc8-XC8LanguageToolchain.md5=486b02ed36e5bdffb1f797e38fa058e5 +proj.dir=C\:\\Users\\robin\\MPLABXProjects\\IRLib_v7_887.X +host.platform=windows diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/Makefile-impl.mk b/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/Makefile-impl.mk new file mode 100644 index 0000000..42cf1b7 --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/Makefile-impl.mk @@ -0,0 +1,69 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a pre- and a post- target defined where you can add customization code. +# +# This makefile implements macros and targets common to all configurations. +# +# NOCDDL + + +# Building and Cleaning subprojects are done by default, but can be controlled with the SUB +# macro. If SUB=no, subprojects will not be built or cleaned. The following macro +# statements set BUILD_SUB-CONF and CLEAN_SUB-CONF to .build-reqprojects-conf +# and .clean-reqprojects-conf unless SUB has the value 'no' +SUB_no=NO +SUBPROJECTS=${SUB_${SUB}} +BUILD_SUBPROJECTS_=.build-subprojects +BUILD_SUBPROJECTS_NO= +BUILD_SUBPROJECTS=${BUILD_SUBPROJECTS_${SUBPROJECTS}} +CLEAN_SUBPROJECTS_=.clean-subprojects +CLEAN_SUBPROJECTS_NO= +CLEAN_SUBPROJECTS=${CLEAN_SUBPROJECTS_${SUBPROJECTS}} + + +# Project Name +PROJECTNAME=IRLib_v7_887.X + +# Active Configuration +DEFAULTCONF=default +CONF=${DEFAULTCONF} + +# All Configurations +ALLCONFS=default + + +# build +.build-impl: .build-pre + ${MAKE} -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .build-conf + + +# clean +.clean-impl: .clean-pre + ${MAKE} -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .clean-conf + +# clobber +.clobber-impl: .clobber-pre .depcheck-impl + ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=default clean + + + +# all +.all-impl: .all-pre .depcheck-impl + ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=default build + + + +# dependency checking support +.depcheck-impl: +# @echo "# This code depends on make tool being used" >.dep.inc +# @if [ -n "${MAKE_VERSION}" ]; then \ +# echo "DEPFILES=\$$(wildcard \$$(addsuffix .d, \$${OBJECTFILES}))" >>.dep.inc; \ +# echo "ifneq (\$${DEPFILES},)" >>.dep.inc; \ +# echo "include \$${DEPFILES}" >>.dep.inc; \ +# echo "endif" >>.dep.inc; \ +# else \ +# echo ".KEEP_STATE:" >>.dep.inc; \ +# echo ".KEEP_STATE_FILE:.make.state.\$${CONF}" >>.dep.inc; \ +# fi diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/Makefile-local-default.mk b/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/Makefile-local-default.mk new file mode 100644 index 0000000..d7a9b5e --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/Makefile-local-default.mk @@ -0,0 +1,37 @@ +# +# Generated Makefile - do not edit! +# +# +# This file contains information about the location of compilers and other tools. +# If you commmit this file into your revision control server, you will be able to +# to checkout the project and build it from the command line with make. However, +# if more than one person works on the same project, then this file might show +# conflicts since different users are bound to have compilers in different places. +# In that case you might choose to not commit this file and let MPLAB X recreate this file +# for each user. The disadvantage of not commiting this file is that you must run MPLAB X at +# least once so the file gets created and the project can be built. Finally, you can also +# avoid using this file at all if you are only building from the command line with make. +# You can invoke make with the values of the macros: +# $ makeMP_CC="/opt/microchip/mplabc30/v3.30c/bin/pic30-gcc" ... +# +SHELL=cmd.exe +PATH_TO_IDE_BIN=C:/Program Files/Microchip/MPLABX/v6.15/mplab_platform/platform/../mplab_ide/modules/../../bin/ +# Adding MPLAB X bin directory to path. +PATH:=C:/Program Files/Microchip/MPLABX/v6.15/mplab_platform/platform/../mplab_ide/modules/../../bin/:$(PATH) +# Path to java used to run MPLAB X when this makefile was created +MP_JAVA_PATH="C:\Program Files\Microchip\MPLABX\v6.15\sys\java\zulu8.64.0.19-ca-fx-jre8.0.345-win_x64/bin/" +OS_CURRENT="$(shell uname -s)" +MP_CC="C:\Program Files\Microchip\xc8\v2.45\bin\xc8-cc.exe" +# MP_CPPC is not defined +# MP_BC is not defined +MP_AS="C:\Program Files\Microchip\xc8\v2.45\bin\xc8-cc.exe" +MP_LD="C:\Program Files\Microchip\xc8\v2.45\bin\xc8-cc.exe" +MP_AR="C:\Program Files\Microchip\xc8\v2.45\bin\xc8-ar.exe" +DEP_GEN=${MP_JAVA_PATH}java -jar "C:/Program Files/Microchip/MPLABX/v6.15/mplab_platform/platform/../mplab_ide/modules/../../bin/extractobjectdependencies.jar" +MP_CC_DIR="C:\Program Files\Microchip\xc8\v2.45\bin" +# MP_CPPC_DIR is not defined +# MP_BC_DIR is not defined +MP_AS_DIR="C:\Program Files\Microchip\xc8\v2.45\bin" +MP_LD_DIR="C:\Program Files\Microchip\xc8\v2.45\bin" +MP_AR_DIR="C:\Program Files\Microchip\xc8\v2.45\bin" +DFP_DIR=C:/Users/robin/.mchp_packs/Microchip/PIC16Fxxx_DFP/1.6.156 diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/Makefile-variables.mk b/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/Makefile-variables.mk new file mode 100644 index 0000000..9279b16 --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/Makefile-variables.mk @@ -0,0 +1,10 @@ +# +# Generated - do not edit! +# +# NOCDDL +# +CND_BASEDIR=`pwd` +# default configuration +CND_ARTIFACT_DIR_default=dist/default/production +CND_ARTIFACT_NAME_default=IRLib_v7_887.X.production.hex +CND_ARTIFACT_PATH_default=dist/default/production/IRLib_v7_887.X.production.hex diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/configurations.xml b/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/configurations.xml new file mode 100644 index 0000000..46f43d0 --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/configurations.xml @@ -0,0 +1,299 @@ + + + + + ../IRLib_v7/IRLib_v7.h + + + + + main.c + + + Makefile + + + + ../IRLib_v7 + + Makefile + + + + localhost + PIC16F887 + + + PK5Tool + XC8 + 2.45 + 3 + + + + + + + + + + ../IRLib_v7.X/dist/default/production/IRLib_v7.X.a + + + + + + false + false + + + + + + + false + false + + false + + false + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/private/configurations.xml b/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/private/configurations.xml new file mode 100644 index 0000000..dfa87f4 --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/private/configurations.xml @@ -0,0 +1,25 @@ + + + Makefile + 0 + + + :=MPLABComm-USB-Microchip:=<vid>04D8:=<pid>9036:=<rev>0100:=<man>Microchip Technology Incorporated:=<prod>MPLAB PICkit 5:=<sn>020026702RYN006133:=<drv>x:=<xpt>b:=end + C:\Program Files\Microchip\xc8\v2.45\bin + + place holder 1 + place holder 2 + + + + + true + 0 + 0 + 0 + + + + + + diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/private/private.xml b/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/private/private.xml new file mode 100644 index 0000000..6807a2b --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/private/private.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/project.xml b/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/project.xml new file mode 100644 index 0000000..f212936 --- /dev/null +++ b/src/picamp.X/libs/IR_LIB/IRLib_v7_887.X/nbproject/project.xml @@ -0,0 +1,25 @@ + + + com.microchip.mplab.nbide.embedded.makeproject + + + IRLib_v7_887 + f4694a20-1171-4b8c-977b-b4fc63b8b361 + 0 + ISO-8859-1 + + + ../IRLib_v7 + + + + default + 2 + + + + false + + + + diff --git a/src/picamp.X/libs/global/new-potlib.h b/src/picamp.X/libs/global/new-potlib.h new file mode 100644 index 0000000..a1dd2b6 --- /dev/null +++ b/src/picamp.X/libs/global/new-potlib.h @@ -0,0 +1,57 @@ +#ifndef POTENTIOMETER_H +#define POTENTIOMETER_H + +#include "registers.h" +// #[declarations:adc] +typedef enum _ADCChannelSelect { + // PIC16F887 + P887A_AN00 = 0b0000, + P887A_AN01 = 0b0001, + P887A_AN02 = 0b0010, + P887A_AN03 = 0b0011, + P887A_AN04 = 0b0100, + P887A_AN05 = 0b0101, + P887A_AN06 = 0b0110, + P887A_AN07 = 0b0111, + P887A_AN08 = 0b1000, + P887A_AN09 = 0b1001, + P887A_AN10 = 0b1010, + P887A_AN11 = 0b1011, + P887A_AN12 = 0b1100, + P887A_AN13 = 0b1101, + P887A_CVREF = 0b1110, // CVREF + P887A_FXREF = 0b1111, // Fixed Ref (0.6V fixed voltage reference) + // PIC16F1829 + P1829_AN00 = 0b00000, + P1829_AN01 = 0b00001, + P1829_AN02 = 0b00010, + P1829_AN03 = 0b00011, + P1829_AN04 = 0b00100, + P1829_AN05 = 0b00101, + P1829_AN06 = 0b00110, + P1829_AN07 = 0b00111, + P1829_AN08 = 0b01000, + P1829_AN09 = 0b01001, + P1829_AN10 = 0b01010, + P1829_AN11 = 0b01011, + P1829_TEMP = 0b11101, + P1829_DACO = 0b11110, + P1829_FVRB = 0b11111, +} ADCChannelSelect; + +typedef struct _ADCPins { + Reg GOnDONE; + Reg ADRESH; + Reg ADRESL; +} ADCPins; + +ADCPins ADC; + +void init_pot(picId id, ADCChannelSelect channel); +void _pot_init_887(ADCChannelSelect channel); +void _pot_init_1829(ADCChannelSelect channel); +int read_potentiometer(void); +void populate_step_array(int *array, int size, int potLimit); +int adc_to_step(int *stepArray, int size, int deadzone); + +#endif \ No newline at end of file diff --git a/src/picamp.X/libs/global/new-rotlib.h b/src/picamp.X/libs/global/new-rotlib.h new file mode 100644 index 0000000..75d889d --- /dev/null +++ b/src/picamp.X/libs/global/new-rotlib.h @@ -0,0 +1,44 @@ +#ifndef ROTARY_H +#define ROTARY_H + +#include "registers.h" + +// intcon = 0x0B +// OPTION_REG = 0x81 +// IOCB = 0x96 +// pin 17 = int pin? + +typedef enum { ROTATE_LEFT = 1, ROTATE_RIGHT = 2 } RotaryEncoderStates; +typedef enum { + IOCRB0 = 0, + IOCRB1 = 1, + IOCRB2 = 2, + IOCRB3 = 3, + IOCRB4 = 4, + IOCRB5 = 5, + IOCRB6 = 6, + IOCRB7 = 7 +} IOCPin; + +typedef struct _Encoder { + int LastState; + int Steps; + int Input; + int min; + int max; + int stepReq; + Reg pinA; + Reg pinB; + Reg encoderRail; + picId host; +} Encoder; + +Encoder encoder = {0, 0, 0}; + +void _rot_init_887(IOCPin pinA, IOCPin pinB); +void _rot_init_1829(); +void init_rot(picId id); +//void read_rotary(char pA, char pB, char *counter, char max, char min); +int read_rotary(void); + +#endif \ No newline at end of file diff --git a/src/picamp.X/libs/global/registers.c b/src/picamp.X/libs/global/registers.c new file mode 100644 index 0000000..98da1f5 --- /dev/null +++ b/src/picamp.X/libs/global/registers.c @@ -0,0 +1,25 @@ +#include "registers.h" + +void SetReg(Reg* R, unsigned char V) { + unsigned char bitMask; + V = (unsigned char) (V << R->offset); + bitMask = (unsigned char) (((1 << R->size) - 1) << R->offset); + *(R->address) &= ~bitMask; + *(R->address) |= V & bitMask; +} + +unsigned char GetReg(Reg* R) { + unsigned char V, bitMask; + bitMask = (unsigned char) (((1 << R->size) - 1) << R->offset); + V = *(R->address) & bitMask; + V = V >> R->offset; + return V; +} + +void SetRawReg(unsigned char* address, unsigned char size, unsigned char offset, unsigned char V) { + unsigned char bitMask; + V = (unsigned char) (V << offset); + bitMask = (unsigned char) (((1 << size) - 1) << offset); + *(address) &= ~bitMask; + *(address) |= V & bitMask; +} \ No newline at end of file diff --git a/src/picamp.X/libs/global/registers.h b/src/picamp.X/libs/global/registers.h new file mode 100644 index 0000000..e364dd4 --- /dev/null +++ b/src/picamp.X/libs/global/registers.h @@ -0,0 +1,19 @@ +#ifndef REGISTERS_H +#define REGISTERS_H + +typedef enum _picId { + PIC16F1829, + PIC16F887A +} picId; + +typedef struct _Reg { + unsigned char* address; + unsigned char size; + unsigned char offset; +} Reg; + +void SetReg(Reg* R, unsigned char V); +void SetRawReg(unsigned char* address, unsigned char size, unsigned char offset, unsigned char V); +unsigned char GetReg(Reg* R); + +#endif \ No newline at end of file diff --git a/src/picamp.X/libs/new-potlib.X/Makefile b/src/picamp.X/libs/new-potlib.X/Makefile new file mode 100644 index 0000000..fca8e2c --- /dev/null +++ b/src/picamp.X/libs/new-potlib.X/Makefile @@ -0,0 +1,113 @@ +# +# There exist several targets which are by default empty and which can be +# used for execution of your targets. These targets are usually executed +# before and after some main targets. They are: +# +# .build-pre: called before 'build' target +# .build-post: called after 'build' target +# .clean-pre: called before 'clean' target +# .clean-post: called after 'clean' target +# .clobber-pre: called before 'clobber' target +# .clobber-post: called after 'clobber' target +# .all-pre: called before 'all' target +# .all-post: called after 'all' target +# .help-pre: called before 'help' target +# .help-post: called after 'help' target +# +# Targets beginning with '.' are not intended to be called on their own. +# +# Main targets can be executed directly, and they are: +# +# build build a specific configuration +# clean remove built files from a configuration +# clobber remove all built files +# all build all configurations +# help print help mesage +# +# Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and +# .help-impl are implemented in nbproject/makefile-impl.mk. +# +# Available make variables: +# +# CND_BASEDIR base directory for relative paths +# CND_DISTDIR default top distribution directory (build artifacts) +# CND_BUILDDIR default top build directory (object files, ...) +# CONF name of current configuration +# CND_ARTIFACT_DIR_${CONF} directory of build artifact (current configuration) +# CND_ARTIFACT_NAME_${CONF} name of build artifact (current configuration) +# CND_ARTIFACT_PATH_${CONF} path to build artifact (current configuration) +# CND_PACKAGE_DIR_${CONF} directory of package (current configuration) +# CND_PACKAGE_NAME_${CONF} name of package (current configuration) +# CND_PACKAGE_PATH_${CONF} path to package (current configuration) +# +# NOCDDL + + +# Environment +MKDIR=mkdir +CP=cp +CCADMIN=CCadmin +RANLIB=ranlib + + +# build +build: .build-post + +.build-pre: +# Add your pre 'build' code here... + +.build-post: .build-impl +# Add your post 'build' code here... + + +# clean +clean: .clean-post + +.clean-pre: +# Add your pre 'clean' code here... +# WARNING: the IDE does not call this target since it takes a long time to +# simply run make. Instead, the IDE removes the configuration directories +# under build and dist directly without calling make. +# This target is left here so people can do a clean when running a clean +# outside the IDE. + +.clean-post: .clean-impl +# Add your post 'clean' code here... + + +# clobber +clobber: .clobber-post + +.clobber-pre: +# Add your pre 'clobber' code here... + +.clobber-post: .clobber-impl +# Add your post 'clobber' code here... + + +# all +all: .all-post + +.all-pre: +# Add your pre 'all' code here... + +.all-post: .all-impl +# Add your post 'all' code here... + + +# help +help: .help-post + +.help-pre: +# Add your pre 'help' code here... + +.help-post: .help-impl +# Add your post 'help' code here... + + + +# include project implementation makefile +include nbproject/Makefile-impl.mk + +# include project make variables +include nbproject/Makefile-variables.mk diff --git a/src/picamp.X/libs/new-potlib.X/nbproject/Makefile-default.mk b/src/picamp.X/libs/new-potlib.X/nbproject/Makefile-default.mk new file mode 100644 index 0000000..299d92b --- /dev/null +++ b/src/picamp.X/libs/new-potlib.X/nbproject/Makefile-default.mk @@ -0,0 +1,172 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a -pre and a -post target defined where you can add customized code. +# +# This makefile implements configuration specific macros and targets. + + +# Include project Makefile +ifeq "${IGNORE_LOCAL}" "TRUE" +# do not include local makefile. User is passing all local related variables already +else +include Makefile +# Include makefile containing local settings +ifeq "$(wildcard nbproject/Makefile-local-default.mk)" "nbproject/Makefile-local-default.mk" +include nbproject/Makefile-local-default.mk +endif +endif + +# Environment +MKDIR=mkdir -p +RM=rm -f +MV=mv +CP=cp + +# Macros +CND_CONF=default +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +IMAGE_TYPE=debug +OUTPUT_SUFFIX=a +DEBUGGABLE_SUFFIX=a +FINAL_IMAGE=${DISTDIR}/new-potlib.X.${OUTPUT_SUFFIX} +else +IMAGE_TYPE=production +OUTPUT_SUFFIX=a +DEBUGGABLE_SUFFIX=a +FINAL_IMAGE=${DISTDIR}/new-potlib.X.${OUTPUT_SUFFIX} +endif + +ifeq ($(COMPARE_BUILD), true) +COMPARISON_BUILD=-mafrlcsj +else +COMPARISON_BUILD= +endif + +# Object Directory +OBJECTDIR=build/${CND_CONF}/${IMAGE_TYPE} + +# Distribution Directory +DISTDIR=dist/${CND_CONF}/${IMAGE_TYPE} + +# Source Files Quoted if spaced +SOURCEFILES_QUOTED_IF_SPACED=picamp-potentiometer.c ../global/registers.c + +# Object Files Quoted if spaced +OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/new-potlib.p1 ${OBJECTDIR}/_ext/1158682926/registers.p1 +POSSIBLE_DEPFILES=${OBJECTDIR}/new-potlib.p1.d ${OBJECTDIR}/_ext/1158682926/registers.p1.d + +# Object Files +OBJECTFILES=${OBJECTDIR}/new-potlib.p1 ${OBJECTDIR}/_ext/1158682926/registers.p1 + +# Source Files +SOURCEFILES=picamp-potentiometer.c ../global/registers.c + + + +CFLAGS= +ASFLAGS= +LDLIBSOPTIONS= + +############# Tool locations ########################################## +# If you copy a project from one host to another, the path where the # +# compiler is installed may be different. # +# If you open this project with MPLAB X in the new host, this # +# makefile will be regenerated and the paths will be corrected. # +####################################################################### +# fixDeps replaces a bunch of sed/cat/printf statements that slow down the build +FIXDEPS=fixDeps + +.build-conf: ${BUILD_SUBPROJECTS} +ifneq ($(INFORMATION_MESSAGE), ) + @echo $(INFORMATION_MESSAGE) +endif + ${MAKE} -f nbproject/Makefile-default.mk ${DISTDIR}/new-potlib.X.${OUTPUT_SUFFIX} + +MP_PROCESSOR_OPTION=16F887 +# ------------------------------------------------------------------------------------ +# Rules for buildStep: compile +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +${OBJECTDIR}/new-potlib.p1: picamp-potentiometer.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/new-potlib.p1.d + @${RM} ${OBJECTDIR}/new-potlib.p1 + ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -mdebugger=none -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/new-potlib.p1 picamp-potentiometer.c + @-${MV} ${OBJECTDIR}/new-potlib.d ${OBJECTDIR}/new-potlib.p1.d + @${FIXDEPS} ${OBJECTDIR}/new-potlib.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ + +${OBJECTDIR}/_ext/1158682926/registers.p1: ../global/registers.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/_ext/1158682926" + @${RM} ${OBJECTDIR}/_ext/1158682926/registers.p1.d + @${RM} ${OBJECTDIR}/_ext/1158682926/registers.p1 + ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -mdebugger=none -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/_ext/1158682926/registers.p1 ../global/registers.c + @-${MV} ${OBJECTDIR}/_ext/1158682926/registers.d ${OBJECTDIR}/_ext/1158682926/registers.p1.d + @${FIXDEPS} ${OBJECTDIR}/_ext/1158682926/registers.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ + +else +${OBJECTDIR}/new-potlib.p1: picamp-potentiometer.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/new-potlib.p1.d + @${RM} ${OBJECTDIR}/new-potlib.p1 + ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/new-potlib.p1 picamp-potentiometer.c + @-${MV} ${OBJECTDIR}/new-potlib.d ${OBJECTDIR}/new-potlib.p1.d + @${FIXDEPS} ${OBJECTDIR}/new-potlib.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ + +${OBJECTDIR}/_ext/1158682926/registers.p1: ../global/registers.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/_ext/1158682926" + @${RM} ${OBJECTDIR}/_ext/1158682926/registers.p1.d + @${RM} ${OBJECTDIR}/_ext/1158682926/registers.p1 + ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/_ext/1158682926/registers.p1 ../global/registers.c + @-${MV} ${OBJECTDIR}/_ext/1158682926/registers.d ${OBJECTDIR}/_ext/1158682926/registers.p1.d + @${FIXDEPS} ${OBJECTDIR}/_ext/1158682926/registers.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ + +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: assemble +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: assembleWithPreprocess +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: archive +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +${DISTDIR}/new-potlib.X.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} ${DISTDIR} + ${MP_AR} $(MP_EXTRA_AR_PRE) --target $(MP_PROCESSOR_OPTION) -r ${DISTDIR}/new-potlib.X.a ${OBJECTFILES_QUOTED_IF_SPACED} + @${RM} ${DISTDIR}/new-potlib.X.hex + +else +${DISTDIR}/new-potlib.X.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} ${DISTDIR} + ${MP_AR} $(MP_EXTRA_AR_PRE) --target $(MP_PROCESSOR_OPTION) -r ${DISTDIR}/new-potlib.X.a ${OBJECTFILES_QUOTED_IF_SPACED} + +endif + + +# Subprojects +.build-subprojects: + + +# Subprojects +.clean-subprojects: + +# Clean Targets +.clean-conf: ${CLEAN_SUBPROJECTS} + ${RM} -r ${OBJECTDIR} + ${RM} -r ${DISTDIR} + +# Enable dependency checking +.dep.inc: .depcheck-impl + +DEPFILES=$(wildcard ${POSSIBLE_DEPFILES}) +ifneq (${DEPFILES},) +include ${DEPFILES} +endif diff --git a/src/picamp.X/libs/new-potlib.X/nbproject/Makefile-genesis.properties b/src/picamp.X/libs/new-potlib.X/nbproject/Makefile-genesis.properties new file mode 100644 index 0000000..34b2be0 --- /dev/null +++ b/src/picamp.X/libs/new-potlib.X/nbproject/Makefile-genesis.properties @@ -0,0 +1,13 @@ +# +#Thu Mar 28 15:07:13 CET 2024 +default.languagetoolchain.version=2.46 +default.Pack.dfplocation=/home/burhan/.mchp_packs/Microchip/PIC16Fxxx_DFP/1.4.149 +conf.ids=default +default.languagetoolchain.dir=/home/burhan/.local/share/microchip/xc8/v2.46/bin +host.id=1odb-89vf-4o +default.platformTool.md5=null +configurations-xml=11f96e3311c83060094ca9fe1c77f327 +com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=f612087c95360c842296d189edfe3321 +default.com-microchip-mplab-nbide-toolchain-xc8-XC8LanguageToolchain.md5=bf89cdcdd6c0a49174fe4b605ef2b42d +proj.dir=/home/burhan/Desktop/PROJ ES/(WIP)Definitive/PIC16F887_AMPINTERFACE.X/libs/new-potlib.X +host.platform=linux diff --git a/src/picamp.X/libs/new-potlib.X/nbproject/Makefile-impl.mk b/src/picamp.X/libs/new-potlib.X/nbproject/Makefile-impl.mk new file mode 100644 index 0000000..0a25700 --- /dev/null +++ b/src/picamp.X/libs/new-potlib.X/nbproject/Makefile-impl.mk @@ -0,0 +1,69 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a pre- and a post- target defined where you can add customization code. +# +# This makefile implements macros and targets common to all configurations. +# +# NOCDDL + + +# Building and Cleaning subprojects are done by default, but can be controlled with the SUB +# macro. If SUB=no, subprojects will not be built or cleaned. The following macro +# statements set BUILD_SUB-CONF and CLEAN_SUB-CONF to .build-reqprojects-conf +# and .clean-reqprojects-conf unless SUB has the value 'no' +SUB_no=NO +SUBPROJECTS=${SUB_${SUB}} +BUILD_SUBPROJECTS_=.build-subprojects +BUILD_SUBPROJECTS_NO= +BUILD_SUBPROJECTS=${BUILD_SUBPROJECTS_${SUBPROJECTS}} +CLEAN_SUBPROJECTS_=.clean-subprojects +CLEAN_SUBPROJECTS_NO= +CLEAN_SUBPROJECTS=${CLEAN_SUBPROJECTS_${SUBPROJECTS}} + + +# Project Name +PROJECTNAME=new-potlib.X + +# Active Configuration +DEFAULTCONF=default +CONF=${DEFAULTCONF} + +# All Configurations +ALLCONFS=default + + +# build +.build-impl: .build-pre + ${MAKE} -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .build-conf + + +# clean +.clean-impl: .clean-pre + ${MAKE} -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .clean-conf + +# clobber +.clobber-impl: .clobber-pre .depcheck-impl + ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=default clean + + + +# all +.all-impl: .all-pre .depcheck-impl + ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=default build + + + +# dependency checking support +.depcheck-impl: +# @echo "# This code depends on make tool being used" >.dep.inc +# @if [ -n "${MAKE_VERSION}" ]; then \ +# echo "DEPFILES=\$$(wildcard \$$(addsuffix .d, \$${OBJECTFILES}))" >>.dep.inc; \ +# echo "ifneq (\$${DEPFILES},)" >>.dep.inc; \ +# echo "include \$${DEPFILES}" >>.dep.inc; \ +# echo "endif" >>.dep.inc; \ +# else \ +# echo ".KEEP_STATE:" >>.dep.inc; \ +# echo ".KEEP_STATE_FILE:.make.state.\$${CONF}" >>.dep.inc; \ +# fi diff --git a/src/picamp.X/libs/new-potlib.X/nbproject/Makefile-local-default.mk b/src/picamp.X/libs/new-potlib.X/nbproject/Makefile-local-default.mk new file mode 100644 index 0000000..33e01a1 --- /dev/null +++ b/src/picamp.X/libs/new-potlib.X/nbproject/Makefile-local-default.mk @@ -0,0 +1,36 @@ +# +# Generated Makefile - do not edit! +# +# +# This file contains information about the location of compilers and other tools. +# If you commmit this file into your revision control server, you will be able to +# to checkout the project and build it from the command line with make. However, +# if more than one person works on the same project, then this file might show +# conflicts since different users are bound to have compilers in different places. +# In that case you might choose to not commit this file and let MPLAB X recreate this file +# for each user. The disadvantage of not commiting this file is that you must run MPLAB X at +# least once so the file gets created and the project can be built. Finally, you can also +# avoid using this file at all if you are only building from the command line with make. +# You can invoke make with the values of the macros: +# $ makeMP_CC="/opt/microchip/mplabc30/v3.30c/bin/pic30-gcc" ... +# +PATH_TO_IDE_BIN=/home/burhan/.local/share/microchip/mplabx/v6.20/mplab_platform/platform/../mplab_ide/modules/../../bin/ +# Adding MPLAB X bin directory to path. +PATH:=/home/burhan/.local/share/microchip/mplabx/v6.20/mplab_platform/platform/../mplab_ide/modules/../../bin/:$(PATH) +# Path to java used to run MPLAB X when this makefile was created +MP_JAVA_PATH="/home/burhan/.local/share/microchip/mplabx/v6.20/sys/java/zulu8.64.0.19-ca-fx-jre8.0.345-linux_x64/bin/" +OS_CURRENT="$(shell uname -s)" +MP_CC="/home/burhan/.local/share/microchip/xc8/v2.46/bin/xc8-cc" +# MP_CPPC is not defined +# MP_BC is not defined +MP_AS="/home/burhan/.local/share/microchip/xc8/v2.46/bin/xc8-cc" +MP_LD="/home/burhan/.local/share/microchip/xc8/v2.46/bin/xc8-cc" +MP_AR="/home/burhan/.local/share/microchip/xc8/v2.46/bin/xc8-ar" +DEP_GEN=${MP_JAVA_PATH}java -jar "/home/burhan/.local/share/microchip/mplabx/v6.20/mplab_platform/platform/../mplab_ide/modules/../../bin/extractobjectdependencies.jar" +MP_CC_DIR="/home/burhan/.local/share/microchip/xc8/v2.46/bin" +# MP_CPPC_DIR is not defined +# MP_BC_DIR is not defined +MP_AS_DIR="/home/burhan/.local/share/microchip/xc8/v2.46/bin" +MP_LD_DIR="/home/burhan/.local/share/microchip/xc8/v2.46/bin" +MP_AR_DIR="/home/burhan/.local/share/microchip/xc8/v2.46/bin" +DFP_DIR=/home/burhan/.mchp_packs/Microchip/PIC16Fxxx_DFP/1.4.149 diff --git a/src/picamp.X/libs/new-potlib.X/nbproject/Makefile-variables.mk b/src/picamp.X/libs/new-potlib.X/nbproject/Makefile-variables.mk new file mode 100644 index 0000000..23e915f --- /dev/null +++ b/src/picamp.X/libs/new-potlib.X/nbproject/Makefile-variables.mk @@ -0,0 +1,10 @@ +# +# Generated - do not edit! +# +# NOCDDL +# +CND_BASEDIR=`pwd` +# default configuration +CND_ARTIFACT_DIR_default=dist/default/production +CND_ARTIFACT_NAME_default=new-potlib.X.a +CND_ARTIFACT_PATH_default=dist/default/production/new-potlib.X.a diff --git a/src/picamp.X/libs/new-potlib.X/nbproject/configurations.xml b/src/picamp.X/libs/new-potlib.X/nbproject/configurations.xml new file mode 100644 index 0000000..c153bf7 --- /dev/null +++ b/src/picamp.X/libs/new-potlib.X/nbproject/configurations.xml @@ -0,0 +1,177 @@ + + + + + ../global/picamp-potentiometer.h + ../global/registers.h + + + Makefile + + + + + picamp-potentiometer.c + ../global/registers.c + + + + . + ../global + + Makefile + + + + localhost + PIC16F887 + + + noID + XC8 + 2.46 + 3 + + + + + + + + + + + + + + + false + false + + + + + + + false + false + + false + + false + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/picamp.X/libs/new-potlib.X/nbproject/private/configurations.xml b/src/picamp.X/libs/new-potlib.X/nbproject/private/configurations.xml new file mode 100644 index 0000000..31e2018 --- /dev/null +++ b/src/picamp.X/libs/new-potlib.X/nbproject/private/configurations.xml @@ -0,0 +1,25 @@ + + + Makefile + 0 + + + noToolString + /home/burhan/.local/share/microchip/xc8/v2.46/bin + + place holder 1 + place holder 2 + + + + + true + 0 + 0 + 0 + + + + + + diff --git a/src/picamp.X/libs/new-potlib.X/nbproject/private/private.xml b/src/picamp.X/libs/new-potlib.X/nbproject/private/private.xml new file mode 100644 index 0000000..6807a2b --- /dev/null +++ b/src/picamp.X/libs/new-potlib.X/nbproject/private/private.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/picamp.X/libs/new-potlib.X/nbproject/project.xml b/src/picamp.X/libs/new-potlib.X/nbproject/project.xml new file mode 100644 index 0000000..bec5f33 --- /dev/null +++ b/src/picamp.X/libs/new-potlib.X/nbproject/project.xml @@ -0,0 +1,26 @@ + + + com.microchip.mplab.nbide.embedded.makeproject + + + new-potlib + 7684f515-7080-469a-ba06-59021d799fff + 0 + ISO-8859-1 + + + . + ../global + + + + default + 3 + + + + false + + + + diff --git a/src/picamp.X/libs/new-potlib.X/new-potlib.c b/src/picamp.X/libs/new-potlib.X/new-potlib.c new file mode 100644 index 0000000..bca6eb2 --- /dev/null +++ b/src/picamp.X/libs/new-potlib.X/new-potlib.c @@ -0,0 +1,113 @@ +#include "../global/picamp-potentiometer.h" +#include "../global/registers.h" +// #include + +void _pot_delay() { + unsigned char counter = 1; // Delay Cycle to achieve 500Us delay (165) + while (--counter != 0) // Delay Timing is approximately 3 (3*2*2*2=24) usec per loop + continue; // Note this routine is for 4MHz (500khz) crystal frequency +} + +void init_pot(picId id, ADCChannelSelect channel) { + switch (id) { + case PIC16F1829: _pot_init_1829(channel); break; + case PIC16F887A: _pot_init_887(channel); break; + } +} + +//todo: add tris and ansel bit fields +void _pot_init_887(ADCChannelSelect channel) { + + SetRawReg((unsigned char *)0x01F, 1, 0, 1); // ADON + SetRawReg((unsigned char *)0x01F, 4, 2, channel); // CHS + SetRawReg((unsigned char *)0x01F, 2, 6, 0b00); // ADCS + SetRawReg((unsigned char *)0x09F, 2, 4, 0b00); // VCFG + SetRawReg((unsigned char *)0x09F, 1, 7, 1); // ADFM + + ADC = (ADCPins) { + .GOnDONE = { (unsigned char*) 0x01F, 1, 1 }, + .ADRESH = { (unsigned char*) 0x01E, 8, 0 }, + .ADRESL = { (unsigned char*) 0x09E, 8, 0 }, + }; + + // Memory space is limited on the pic, so we group the registers with the same value. + // .VCFG0 = { (unsigned char*) 0x01F, 1, 4 }, + // .VCFG1 = { (unsigned char*) 0x01F, 1, 5 }, + // .ADCS = { (unsigned char*) 0x01F, 1, 6 }, + // SetReg(&ADC.ADCS, 0); + // SetReg(&ADC.VCFG0, 0); + // SetReg(&ADC.VCFG1, 0); +// .ADON = { (unsigned char*) 0x01F, 1, 0 }, +// .CHS = { (unsigned char*) 0x01F, 4, 2 }, +// .ADCS = { (unsigned char*) 0x01F, 2, 6 }, +// .VCFG = { (unsigned char*) 0x09F, 2, 4 }, +// .ADFM = { (unsigned char*) 0x09F, 1, 7 }, + + // SetRawReg((unsigned char*) 0x01F, 1, 0, 1); + +// SetReg(&ADC.ADON, 1); + SetReg(&ADC.GOnDONE, 1); +// SetReg(&ADC.CHS, channel); +// SetReg(&ADC.VCFGADCS, 0b000); +// SetReg(&ADC.ADFM, 1); +} + +void _pot_init_1829(ADCChannelSelect channel) { + + SetRawReg((unsigned char *)0x09D, 1, 0, 1); // ADON + SetRawReg((unsigned char *)0x09D, 5, 2, channel); // CHS + SetRawReg((unsigned char *)0x09E, 5, 0, 0b00000); // VCFGADCS + SetRawReg((unsigned char *)0x09E, 1, 7, 1); // ADFM + + ADC = (ADCPins) { + .GOnDONE = { (unsigned char*) 0x09D, 1, 1 }, + .ADRESH = { (unsigned char*) 0x09C, 8, 0 }, + .ADRESL = { (unsigned char*) 0x09B, 8, 0 }, + }; + + // Just like the 887, memory space is limited. Structs take up a lot of space, + // so we group the registers with the same value. + // .ADON = { (unsigned char*) 0x09D, 1, 0 }, + // .CHS = { (unsigned char*) 0x09D, 5, 2 }, + // .VCFGADCS = { (unsigned char*) 0x09E, 5, 0 }, + // .ADFM = { (unsigned char*) 0x09E, 1, 7 }, + // .VCFG0 = { (unsigned char*) 0x09E, 2, 0 }, + // .VCFG1 = { (unsigned char*) 0x09E, 1, 2 }, + // .ADCS = { (unsigned char*) 0x09E, 3, 4 }, + // SetReg(&ADC.VCFG0, 0); + // SetReg(&ADC.VCFG1, 0); + // SetReg(&ADC.ADCS, 0); + // structs are only needed for re-used values outside of this function + +// SetReg(&ADC.ADON, 1); + SetReg(&ADC.GOnDONE, 1); +// SetReg(&ADC.CHS, channel); +// SetReg(&ADC.VCFGADCS, 0b00000); +// SetReg(&ADC.ADFM, 1); +} + +void populate_step_array(int *array, int size, int potLimit) { + array[0] = potLimit / (size + 1); + for (int i = 0; i < size; i++) { + array[i] = array[0] * (i + 1); + } +} + +int read_potentiometer() { + // Wait for regulating capacitor to charge + _pot_delay(); + + // Bit 2 of `ADCON0` is set to `1`, meaning `GO` will wait until + // ADC got a signal, converted analog to digital, etc. + SetReg(&ADC.GOnDONE, 1); + while (GetReg(&ADC.GOnDONE)) continue; + + // Read the data from the potmeter pin (`E2`) registers, and combine + // them into a single integer + return (GetReg(&ADC.ADRESH) << 8 | GetReg(&ADC.ADRESL)); +} + +//todo: fix! +int adc_to_step(int *stepArray, int size, int deadzone) { + return 0; +} \ No newline at end of file diff --git a/src/picamp.X/libs/new-rotlib.X/Makefile b/src/picamp.X/libs/new-rotlib.X/Makefile new file mode 100644 index 0000000..fca8e2c --- /dev/null +++ b/src/picamp.X/libs/new-rotlib.X/Makefile @@ -0,0 +1,113 @@ +# +# There exist several targets which are by default empty and which can be +# used for execution of your targets. These targets are usually executed +# before and after some main targets. They are: +# +# .build-pre: called before 'build' target +# .build-post: called after 'build' target +# .clean-pre: called before 'clean' target +# .clean-post: called after 'clean' target +# .clobber-pre: called before 'clobber' target +# .clobber-post: called after 'clobber' target +# .all-pre: called before 'all' target +# .all-post: called after 'all' target +# .help-pre: called before 'help' target +# .help-post: called after 'help' target +# +# Targets beginning with '.' are not intended to be called on their own. +# +# Main targets can be executed directly, and they are: +# +# build build a specific configuration +# clean remove built files from a configuration +# clobber remove all built files +# all build all configurations +# help print help mesage +# +# Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and +# .help-impl are implemented in nbproject/makefile-impl.mk. +# +# Available make variables: +# +# CND_BASEDIR base directory for relative paths +# CND_DISTDIR default top distribution directory (build artifacts) +# CND_BUILDDIR default top build directory (object files, ...) +# CONF name of current configuration +# CND_ARTIFACT_DIR_${CONF} directory of build artifact (current configuration) +# CND_ARTIFACT_NAME_${CONF} name of build artifact (current configuration) +# CND_ARTIFACT_PATH_${CONF} path to build artifact (current configuration) +# CND_PACKAGE_DIR_${CONF} directory of package (current configuration) +# CND_PACKAGE_NAME_${CONF} name of package (current configuration) +# CND_PACKAGE_PATH_${CONF} path to package (current configuration) +# +# NOCDDL + + +# Environment +MKDIR=mkdir +CP=cp +CCADMIN=CCadmin +RANLIB=ranlib + + +# build +build: .build-post + +.build-pre: +# Add your pre 'build' code here... + +.build-post: .build-impl +# Add your post 'build' code here... + + +# clean +clean: .clean-post + +.clean-pre: +# Add your pre 'clean' code here... +# WARNING: the IDE does not call this target since it takes a long time to +# simply run make. Instead, the IDE removes the configuration directories +# under build and dist directly without calling make. +# This target is left here so people can do a clean when running a clean +# outside the IDE. + +.clean-post: .clean-impl +# Add your post 'clean' code here... + + +# clobber +clobber: .clobber-post + +.clobber-pre: +# Add your pre 'clobber' code here... + +.clobber-post: .clobber-impl +# Add your post 'clobber' code here... + + +# all +all: .all-post + +.all-pre: +# Add your pre 'all' code here... + +.all-post: .all-impl +# Add your post 'all' code here... + + +# help +help: .help-post + +.help-pre: +# Add your pre 'help' code here... + +.help-post: .help-impl +# Add your post 'help' code here... + + + +# include project implementation makefile +include nbproject/Makefile-impl.mk + +# include project make variables +include nbproject/Makefile-variables.mk diff --git a/src/picamp.X/libs/new-rotlib.X/nbproject/Makefile-default.mk b/src/picamp.X/libs/new-rotlib.X/nbproject/Makefile-default.mk new file mode 100644 index 0000000..09ddf89 --- /dev/null +++ b/src/picamp.X/libs/new-rotlib.X/nbproject/Makefile-default.mk @@ -0,0 +1,172 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a -pre and a -post target defined where you can add customized code. +# +# This makefile implements configuration specific macros and targets. + + +# Include project Makefile +ifeq "${IGNORE_LOCAL}" "TRUE" +# do not include local makefile. User is passing all local related variables already +else +include Makefile +# Include makefile containing local settings +ifeq "$(wildcard nbproject/Makefile-local-default.mk)" "nbproject/Makefile-local-default.mk" +include nbproject/Makefile-local-default.mk +endif +endif + +# Environment +MKDIR=mkdir -p +RM=rm -f +MV=mv +CP=cp + +# Macros +CND_CONF=default +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +IMAGE_TYPE=debug +OUTPUT_SUFFIX=a +DEBUGGABLE_SUFFIX=a +FINAL_IMAGE=${DISTDIR}/new-rotlib.X.${OUTPUT_SUFFIX} +else +IMAGE_TYPE=production +OUTPUT_SUFFIX=a +DEBUGGABLE_SUFFIX=a +FINAL_IMAGE=${DISTDIR}/new-rotlib.X.${OUTPUT_SUFFIX} +endif + +ifeq ($(COMPARE_BUILD), true) +COMPARISON_BUILD=-mafrlcsj +else +COMPARISON_BUILD= +endif + +# Object Directory +OBJECTDIR=build/${CND_CONF}/${IMAGE_TYPE} + +# Distribution Directory +DISTDIR=dist/${CND_CONF}/${IMAGE_TYPE} + +# Source Files Quoted if spaced +SOURCEFILES_QUOTED_IF_SPACED=../global/registers.c picamp-rotary.c + +# Object Files Quoted if spaced +OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/_ext/1158682926/registers.p1 ${OBJECTDIR}/new-rotlib.p1 +POSSIBLE_DEPFILES=${OBJECTDIR}/_ext/1158682926/registers.p1.d ${OBJECTDIR}/new-rotlib.p1.d + +# Object Files +OBJECTFILES=${OBJECTDIR}/_ext/1158682926/registers.p1 ${OBJECTDIR}/new-rotlib.p1 + +# Source Files +SOURCEFILES=../global/registers.c picamp-rotary.c + + + +CFLAGS= +ASFLAGS= +LDLIBSOPTIONS= + +############# Tool locations ########################################## +# If you copy a project from one host to another, the path where the # +# compiler is installed may be different. # +# If you open this project with MPLAB X in the new host, this # +# makefile will be regenerated and the paths will be corrected. # +####################################################################### +# fixDeps replaces a bunch of sed/cat/printf statements that slow down the build +FIXDEPS=fixDeps + +.build-conf: ${BUILD_SUBPROJECTS} +ifneq ($(INFORMATION_MESSAGE), ) + @echo $(INFORMATION_MESSAGE) +endif + ${MAKE} -f nbproject/Makefile-default.mk ${DISTDIR}/new-rotlib.X.${OUTPUT_SUFFIX} + +MP_PROCESSOR_OPTION=16F887 +# ------------------------------------------------------------------------------------ +# Rules for buildStep: compile +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +${OBJECTDIR}/_ext/1158682926/registers.p1: ../global/registers.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/_ext/1158682926" + @${RM} ${OBJECTDIR}/_ext/1158682926/registers.p1.d + @${RM} ${OBJECTDIR}/_ext/1158682926/registers.p1 + ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -mdebugger=none -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/_ext/1158682926/registers.p1 ../global/registers.c + @-${MV} ${OBJECTDIR}/_ext/1158682926/registers.d ${OBJECTDIR}/_ext/1158682926/registers.p1.d + @${FIXDEPS} ${OBJECTDIR}/_ext/1158682926/registers.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ + +${OBJECTDIR}/new-rotlib.p1: picamp-rotary.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/new-rotlib.p1.d + @${RM} ${OBJECTDIR}/new-rotlib.p1 + ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -mdebugger=none -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/new-rotlib.p1 picamp-rotary.c + @-${MV} ${OBJECTDIR}/new-rotlib.d ${OBJECTDIR}/new-rotlib.p1.d + @${FIXDEPS} ${OBJECTDIR}/new-rotlib.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ + +else +${OBJECTDIR}/_ext/1158682926/registers.p1: ../global/registers.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/_ext/1158682926" + @${RM} ${OBJECTDIR}/_ext/1158682926/registers.p1.d + @${RM} ${OBJECTDIR}/_ext/1158682926/registers.p1 + ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/_ext/1158682926/registers.p1 ../global/registers.c + @-${MV} ${OBJECTDIR}/_ext/1158682926/registers.d ${OBJECTDIR}/_ext/1158682926/registers.p1.d + @${FIXDEPS} ${OBJECTDIR}/_ext/1158682926/registers.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ + +${OBJECTDIR}/new-rotlib.p1: picamp-rotary.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/new-rotlib.p1.d + @${RM} ${OBJECTDIR}/new-rotlib.p1 + ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/new-rotlib.p1 picamp-rotary.c + @-${MV} ${OBJECTDIR}/new-rotlib.d ${OBJECTDIR}/new-rotlib.p1.d + @${FIXDEPS} ${OBJECTDIR}/new-rotlib.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ + +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: assemble +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: assembleWithPreprocess +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: archive +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +${DISTDIR}/new-rotlib.X.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} ${DISTDIR} + ${MP_AR} $(MP_EXTRA_AR_PRE) --target $(MP_PROCESSOR_OPTION) -r ${DISTDIR}/new-rotlib.X.a ${OBJECTFILES_QUOTED_IF_SPACED} + @${RM} ${DISTDIR}/new-rotlib.X.hex + +else +${DISTDIR}/new-rotlib.X.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} ${DISTDIR} + ${MP_AR} $(MP_EXTRA_AR_PRE) --target $(MP_PROCESSOR_OPTION) -r ${DISTDIR}/new-rotlib.X.a ${OBJECTFILES_QUOTED_IF_SPACED} + +endif + + +# Subprojects +.build-subprojects: + + +# Subprojects +.clean-subprojects: + +# Clean Targets +.clean-conf: ${CLEAN_SUBPROJECTS} + ${RM} -r ${OBJECTDIR} + ${RM} -r ${DISTDIR} + +# Enable dependency checking +.dep.inc: .depcheck-impl + +DEPFILES=$(wildcard ${POSSIBLE_DEPFILES}) +ifneq (${DEPFILES},) +include ${DEPFILES} +endif diff --git a/src/picamp.X/libs/new-rotlib.X/nbproject/Makefile-genesis.properties b/src/picamp.X/libs/new-rotlib.X/nbproject/Makefile-genesis.properties new file mode 100644 index 0000000..554fc38 --- /dev/null +++ b/src/picamp.X/libs/new-rotlib.X/nbproject/Makefile-genesis.properties @@ -0,0 +1,13 @@ +# +#Thu Mar 28 18:32:00 CET 2024 +default.languagetoolchain.version=2.46 +default.Pack.dfplocation=/home/burhan/.mchp_packs/Microchip/PIC16Fxxx_DFP/1.4.149 +conf.ids=default +default.languagetoolchain.dir=/home/burhan/.local/share/microchip/xc8/v2.46/bin +host.id=1odb-89vf-4o +default.platformTool.md5=null +configurations-xml=68f28e99f20170dde9c2f40acc46f0f7 +com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=f612087c95360c842296d189edfe3321 +default.com-microchip-mplab-nbide-toolchain-xc8-XC8LanguageToolchain.md5=bf89cdcdd6c0a49174fe4b605ef2b42d +proj.dir=/home/burhan/Desktop/PROJ ES/Definitive/PIC16F887_AMPINTERFACE.X/libs/new-rotlib.X +host.platform=linux diff --git a/src/picamp.X/libs/new-rotlib.X/nbproject/Makefile-impl.mk b/src/picamp.X/libs/new-rotlib.X/nbproject/Makefile-impl.mk new file mode 100644 index 0000000..0753481 --- /dev/null +++ b/src/picamp.X/libs/new-rotlib.X/nbproject/Makefile-impl.mk @@ -0,0 +1,69 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a pre- and a post- target defined where you can add customization code. +# +# This makefile implements macros and targets common to all configurations. +# +# NOCDDL + + +# Building and Cleaning subprojects are done by default, but can be controlled with the SUB +# macro. If SUB=no, subprojects will not be built or cleaned. The following macro +# statements set BUILD_SUB-CONF and CLEAN_SUB-CONF to .build-reqprojects-conf +# and .clean-reqprojects-conf unless SUB has the value 'no' +SUB_no=NO +SUBPROJECTS=${SUB_${SUB}} +BUILD_SUBPROJECTS_=.build-subprojects +BUILD_SUBPROJECTS_NO= +BUILD_SUBPROJECTS=${BUILD_SUBPROJECTS_${SUBPROJECTS}} +CLEAN_SUBPROJECTS_=.clean-subprojects +CLEAN_SUBPROJECTS_NO= +CLEAN_SUBPROJECTS=${CLEAN_SUBPROJECTS_${SUBPROJECTS}} + + +# Project Name +PROJECTNAME=new-rotlib.X + +# Active Configuration +DEFAULTCONF=default +CONF=${DEFAULTCONF} + +# All Configurations +ALLCONFS=default + + +# build +.build-impl: .build-pre + ${MAKE} -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .build-conf + + +# clean +.clean-impl: .clean-pre + ${MAKE} -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .clean-conf + +# clobber +.clobber-impl: .clobber-pre .depcheck-impl + ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=default clean + + + +# all +.all-impl: .all-pre .depcheck-impl + ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=default build + + + +# dependency checking support +.depcheck-impl: +# @echo "# This code depends on make tool being used" >.dep.inc +# @if [ -n "${MAKE_VERSION}" ]; then \ +# echo "DEPFILES=\$$(wildcard \$$(addsuffix .d, \$${OBJECTFILES}))" >>.dep.inc; \ +# echo "ifneq (\$${DEPFILES},)" >>.dep.inc; \ +# echo "include \$${DEPFILES}" >>.dep.inc; \ +# echo "endif" >>.dep.inc; \ +# else \ +# echo ".KEEP_STATE:" >>.dep.inc; \ +# echo ".KEEP_STATE_FILE:.make.state.\$${CONF}" >>.dep.inc; \ +# fi diff --git a/src/picamp.X/libs/new-rotlib.X/nbproject/Makefile-local-default.mk b/src/picamp.X/libs/new-rotlib.X/nbproject/Makefile-local-default.mk new file mode 100644 index 0000000..33e01a1 --- /dev/null +++ b/src/picamp.X/libs/new-rotlib.X/nbproject/Makefile-local-default.mk @@ -0,0 +1,36 @@ +# +# Generated Makefile - do not edit! +# +# +# This file contains information about the location of compilers and other tools. +# If you commmit this file into your revision control server, you will be able to +# to checkout the project and build it from the command line with make. However, +# if more than one person works on the same project, then this file might show +# conflicts since different users are bound to have compilers in different places. +# In that case you might choose to not commit this file and let MPLAB X recreate this file +# for each user. The disadvantage of not commiting this file is that you must run MPLAB X at +# least once so the file gets created and the project can be built. Finally, you can also +# avoid using this file at all if you are only building from the command line with make. +# You can invoke make with the values of the macros: +# $ makeMP_CC="/opt/microchip/mplabc30/v3.30c/bin/pic30-gcc" ... +# +PATH_TO_IDE_BIN=/home/burhan/.local/share/microchip/mplabx/v6.20/mplab_platform/platform/../mplab_ide/modules/../../bin/ +# Adding MPLAB X bin directory to path. +PATH:=/home/burhan/.local/share/microchip/mplabx/v6.20/mplab_platform/platform/../mplab_ide/modules/../../bin/:$(PATH) +# Path to java used to run MPLAB X when this makefile was created +MP_JAVA_PATH="/home/burhan/.local/share/microchip/mplabx/v6.20/sys/java/zulu8.64.0.19-ca-fx-jre8.0.345-linux_x64/bin/" +OS_CURRENT="$(shell uname -s)" +MP_CC="/home/burhan/.local/share/microchip/xc8/v2.46/bin/xc8-cc" +# MP_CPPC is not defined +# MP_BC is not defined +MP_AS="/home/burhan/.local/share/microchip/xc8/v2.46/bin/xc8-cc" +MP_LD="/home/burhan/.local/share/microchip/xc8/v2.46/bin/xc8-cc" +MP_AR="/home/burhan/.local/share/microchip/xc8/v2.46/bin/xc8-ar" +DEP_GEN=${MP_JAVA_PATH}java -jar "/home/burhan/.local/share/microchip/mplabx/v6.20/mplab_platform/platform/../mplab_ide/modules/../../bin/extractobjectdependencies.jar" +MP_CC_DIR="/home/burhan/.local/share/microchip/xc8/v2.46/bin" +# MP_CPPC_DIR is not defined +# MP_BC_DIR is not defined +MP_AS_DIR="/home/burhan/.local/share/microchip/xc8/v2.46/bin" +MP_LD_DIR="/home/burhan/.local/share/microchip/xc8/v2.46/bin" +MP_AR_DIR="/home/burhan/.local/share/microchip/xc8/v2.46/bin" +DFP_DIR=/home/burhan/.mchp_packs/Microchip/PIC16Fxxx_DFP/1.4.149 diff --git a/src/picamp.X/libs/new-rotlib.X/nbproject/Makefile-variables.mk b/src/picamp.X/libs/new-rotlib.X/nbproject/Makefile-variables.mk new file mode 100644 index 0000000..02bbe0f --- /dev/null +++ b/src/picamp.X/libs/new-rotlib.X/nbproject/Makefile-variables.mk @@ -0,0 +1,10 @@ +# +# Generated - do not edit! +# +# NOCDDL +# +CND_BASEDIR=`pwd` +# default configuration +CND_ARTIFACT_DIR_default=dist/default/production +CND_ARTIFACT_NAME_default=new-rotlib.X.a +CND_ARTIFACT_PATH_default=dist/default/production/new-rotlib.X.a diff --git a/src/picamp.X/libs/new-rotlib.X/nbproject/configurations.xml b/src/picamp.X/libs/new-rotlib.X/nbproject/configurations.xml new file mode 100644 index 0000000..cec2d72 --- /dev/null +++ b/src/picamp.X/libs/new-rotlib.X/nbproject/configurations.xml @@ -0,0 +1,177 @@ + + + + + ../global/picamp-rotary.h + ../global/registers.h + + + Makefile + + + + + ../global/registers.c + picamp-rotary.c + + + + ../global + . + + Makefile + + + + localhost + PIC16F887 + + + noID + XC8 + 2.46 + 3 + + + + + + + + + + + + + + + false + false + + + + + + + false + false + + false + + false + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/picamp.X/libs/new-rotlib.X/nbproject/private/configurations.xml b/src/picamp.X/libs/new-rotlib.X/nbproject/private/configurations.xml new file mode 100644 index 0000000..31e2018 --- /dev/null +++ b/src/picamp.X/libs/new-rotlib.X/nbproject/private/configurations.xml @@ -0,0 +1,25 @@ + + + Makefile + 0 + + + noToolString + /home/burhan/.local/share/microchip/xc8/v2.46/bin + + place holder 1 + place holder 2 + + + + + true + 0 + 0 + 0 + + + + + + diff --git a/src/picamp.X/libs/new-rotlib.X/nbproject/private/private.xml b/src/picamp.X/libs/new-rotlib.X/nbproject/private/private.xml new file mode 100644 index 0000000..6807a2b --- /dev/null +++ b/src/picamp.X/libs/new-rotlib.X/nbproject/private/private.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/picamp.X/libs/new-rotlib.X/nbproject/project.xml b/src/picamp.X/libs/new-rotlib.X/nbproject/project.xml new file mode 100644 index 0000000..60c5f7c --- /dev/null +++ b/src/picamp.X/libs/new-rotlib.X/nbproject/project.xml @@ -0,0 +1,26 @@ + + + com.microchip.mplab.nbide.embedded.makeproject + + + new-rotlib + 4d6ef265-dd49-40a7-8e3c-3a59dd4a8351 + 0 + ISO-8859-1 + + + ../global + . + + + + default + 3 + + + + false + + + + diff --git a/src/picamp.X/libs/new-rotlib.X/new-rotlib.c b/src/picamp.X/libs/new-rotlib.X/new-rotlib.c new file mode 100644 index 0000000..477c9b8 --- /dev/null +++ b/src/picamp.X/libs/new-rotlib.X/new-rotlib.c @@ -0,0 +1,116 @@ +#include "../global/picamp-rotary.h" +#include "../global/registers.h" + +void init_rot(picId id) { + switch (id) { + case PIC16F1829: _rot_init_1829(); break; + case PIC16F887A: _rot_init_887(IOCRB4, IOCRB5); break; + } + + encoder.LastState = 1; + encoder.Input = 1; + encoder.min = 1; + encoder.max = 4; + encoder.stepReq = 1; +} + + +void _rot_init_887(IOCPin pinA, IOCPin pinB) { + encoder.host = PIC16F887A; + //todo: Add anselb, trisb + SetRawReg((unsigned char*) 0x189, 1, 5, 0); // ANSEL.13 + SetRawReg((unsigned char*) 0x189, 1, 3, 0); // ANSEL.11 + SetRawReg((unsigned char*) 0x086, 1, 4, 1); // TRISB.4 + SetRawReg((unsigned char*) 0x086, 1, 5, 1); // TRISB.5 + + encoder.encoderRail = (Reg) { (unsigned char*) 0x006, 8, 0 }; + + SetRawReg((unsigned char*) 0x00B, 2, 3, 0b11); // RBIE, INTE + SetRawReg((unsigned char*) 0x00B, 2, 6, 0b11); // GIE, PEIE + SetRawReg((unsigned char*) 0x096, 1, pinA, 1); // IOC Pin A + SetRawReg((unsigned char*) 0x096, 1, pinB, 1); // IOC Pin B + SetRawReg((unsigned char*) 0x081, 1, 6, 0); // INTEDG + + encoder.pinA = (Reg) { (unsigned char*) 0x006, 1, 4 }; + encoder.pinB = (Reg) { (unsigned char*) 0x006, 1, 5 }; + // ROT = (ROTPins) { + // .RBIEINTE = { (unsigned char*) 0x00B, 2, 3 }, + // .RBIE = { (unsigned char*) 0x00B, 1, 3 }, + // .INTE = { (unsigned char*) 0x00B, 1, 4 }, + // .GIEPEIE = { (unsigned char*) 0x00B, 2, 6 }, + // .PEIE = { (unsigned char*) 0x00B, 1, 6 }, + // .GIE = { (unsigned char*) 0x00B, 1, 7 }, + // .IOCBA = { (unsigned char*) 0x096, 1, pinA }, // 0x0D + // .IOCBB = { (unsigned char*) 0x096, 1, pinB }, + // .INTEDG = { (unsigned char*) 0x081, 1, 6 }, + // .PORTB = { (unsigned char*) 0x106, 8, 0 }, + // .INTF = { (unsigned char*) 0x00B, 1, 1 }, + // .RBIF = { (unsigned char*) 0x00B, 1, 0 } + // }; + + // SetReg(&ROT.INTF, 0); + // SetReg(&ROT.RBIF, 0); + + // SetReg(&ROT.GIEPEIE, 0b11); + // SetReg(&ROT.RBIEINTE, 0b11); + // SetReg(&ROT.GIE, 1); + // SetReg(&ROT.INTE, 1); + // SetReg(&ROT.PEIE, 1); + // SetReg(&ROT.RBIE, 1); + // SetReg(&ROT.IOCBA, 1); + // SetReg(&ROT.IOCBB, 1); + // SetReg(&ROT.INTEDG, 0); + +} + +void _rot_init_1829() { + SetRawReg((unsigned char *)0x18C, 1, 0, 0); // ANSELA.0 + SetRawReg((unsigned char *)0x18C, 1, 1, 0); // ANSELA.1 + + SetRawReg((unsigned char *)0x08C, 1, 0, 1); // TRISA.0 + SetRawReg((unsigned char *)0x08C, 1, 1, 1); // TRISA.1 + + SetRawReg((unsigned char *)0x391, 1, 0, 1); // IOCAP.0 + SetRawReg((unsigned char *)0x391, 1, 1, 1); // IOCAP.1 + + SetRawReg((unsigned char *)0x00B, 1, 3, 1); // IOCIE + SetRawReg((unsigned char *)0x00B, 1, 4, 1); // INTE + SetRawReg((unsigned char *)0x00B, 1, 6, 1); // PEIE + SetRawReg((unsigned char *)0x00B, 1, 7, 1); // GIE + + encoder.pinA = (Reg) { (unsigned char*) 0x00C, 1, 0 }; + encoder.pinB = (Reg) { (unsigned char*) 0x00C, 1, 1 }; +} + +int read_rotary(void) { + // Only check for a change in the CLK pin to identify "full click" + int a = GetReg(&encoder.pinA); + + // If state changed, a movement is registered + if (a != encoder.LastState) { + int b = GetReg(&encoder.pinB); + + if (b != a) encoder.Steps++; // Clockwise + else encoder.Steps--; // Anti-clockwise + + // Only change counter if correct amount of clicks have been registered + if (encoder.Steps > (encoder.stepReq * 2)) { + encoder.Input++; + encoder.Steps = 0; + } else if (encoder.Steps < (-(encoder.stepReq * 2))) { + encoder.Input--; + encoder.Steps = 0; + } + + // Adjust counter for boundaries + if (encoder.Input < encoder.min) encoder.Input = encoder.max; + else if (encoder.Input > encoder.max) encoder.Input = encoder.min; + + encoder.LastState = a; + } + + if (encoder.host == PIC16F887A) SetReg(&encoder.encoderRail, GetReg(&encoder.encoderRail)); + + return encoder.Input; + // PORTC = (unsigned char)(~(1 << (encoder.Input - 1))); +} \ No newline at end of file diff --git a/src/picamp.X/main.c b/src/picamp.X/main.c new file mode 100644 index 0000000..74dfe65 --- /dev/null +++ b/src/picamp.X/main.c @@ -0,0 +1,212 @@ +#include "./config.h" + +// Function declarations +void pic_loop(void); +void pic_init(void); +void init_osc(void); +void init_gpio(void); +void init_HCMS(void); +void init_IR(void); + +// Rotary encoder position +int selectcount = 0; +unsigned char brightnessSetting = 20; + +void main(void) { + // Do all initialisation here + pic_init(); + // Start indefinite program loop + pic_loop(); +} + +void pic_loop(void) { + // Initialize potentiometer step array + int stepArray[LED_AMOUNT] = {0}; + populate_step_array(stepArray, LED_AMOUNT, POT_LIMIT); + short calcVolume; + + while (1) { + HCMS_load_word(volLoadString, &screenSettings_1); + HCMS_load_word(selLoadString, &screenSettings_2); + // Parse result from potentiometer + int result = read_potentiometer(); + // Read the data from the potmeter pin (`E2`) registers, and combine + // them into a single integer + // Loop through all `stepArray`, check if the output of the potmeter + // (on `ADRES`) falls inbetween the steps - `DEADZONE`, if so execute + // An OR/AND bitshift operation in order to turn on the corresponding + // LED on `PORTA`. + + // Do not display the potmeter LEDs if input selector is > minimum + if (selectcount == 1) { + for (int i = 0; i < LED_AMOUNT; i++) { + if (result > (stepArray[i] - DEADZONE)) { + PORTA = (unsigned char) (PORTA & ~(1 << i)); + } else if (result <= (stepArray[i] - DEADZONE)) { + PORTA = (unsigned char) (PORTA | (1 << i)); + } + } + }; + // int step = adc_to_step(*stepArray, LED_AMOUNT, DEADZONE); + // PORTA = (unsigned char)(PORTA | (1 << step)); + + calcVolume = result / 10; + + if (IRBF) { + PORTA = 0x00; + if (data == 0b010010010000) { //input 1 + selectcount = 1; + LED1 = 0; + } + if (data == 0b010100001000) { //input 2 + selectcount = 2; + LED2 = 0; + } + if (data == 0b010010100000) { //input 3 + selectcount = 3; + LED3 = 0; + } + if (data == 0b010010001000) { //input 4 + selectcount = 4; + LED4 = 0; + } + if (data == 0b010100100000) { //volume up + calcVolume++; + brightnessSetting += 5; + MOTOR_P = 1; + MOTOR_M = 0; + __delay_ms(500); + MOTOR_M = 0; + MOTOR_P = 0; + selectcount = 2; + LED1 = 0; + LED2 = 0; + } + if (data == 0b010100010000) { //volume down + calcVolume--; + if (brightnessSetting > 4) { + brightnessSetting -= 5; + } + + MOTOR_P = 0; + MOTOR_M = 1; + __delay_ms(500); + MOTOR_M = 0; + MOTOR_P = 0; + selectcount = 3; + LED3 = 0; + LED4 = 0; + } + + if (brightnessSetting > 59) { + brightnessSetting = 59; + } + HCMS_change_brightness(brightnessSetting, &screenSettings_1); //change volume screen brightness + __delay_ms(250); + IRBF = 0; + } + + if (calcVolume > 100) { + calcVolume = 100; + } + if (calcVolume < 0) { + calcVolume = 0; + } + + selLoadString[6] = '0' + (char) (selectcount / 10); + selLoadString[7] = '0' + (char) (selectcount % 10); + + volLoadString[5] = '0' + (char) (calcVolume / 100); + volLoadString[6] = '0' + (char) (calcVolume / 10 > 9 ? 0 : calcVolume / 10); + volLoadString[7] = '0' + (char) (calcVolume % 10); + } +} + +void pic_init(void) { + init_osc(); + init_gpio(); + init_HCMS(); + init_IR(); + init_pot(PIC16F887A, P887A_AN07); + init_rot(PIC16F887A); +} + +// #[initialisation:gpio] + +void init_gpio(void) { + //Ready Ports C and D + TRISC = 0; + TRISD = 0; + PORTC = 0; + PORTD = 0; + //Analog selection + ANSEL = 0; + ANSELH = 0; + ANSELbits.ANS7 = 1; + + // LED => output, digital (transistors) + TRISA = 0x00; + PORTA = 0xFF; + + //Read motor + MOTOR_Mtris = 0; + MOTOR_Ptris = 0; + MOTOR_M = 0; + MOTOR_P = 0; +} + +// #[initialisation:HCMS] + +void init_HCMS() { + HCMS_spi_init(MST_OSC_DIV_04, SMP1_SDI_END, CKP0_CPOL0_IDLE_LOW, CKE1_CPHA0_TRSMIT_ACT2IDL, &screenSettings_1); + HCMS_init(&screenSettings_1); + HCMS_init(&screenSettings_2); + HCMS_change_brightness(brightnessSetting, &screenSettings_1); //set volume to brightsetting for demo +} + +// #[initialisation:IR] + +void init_IR() { + IRBind887(); + IRInit(falling, _MTPR, _MTPrSc, _MTPoSc, _TTPrSc); +} + +// #[initialisation:osc] + +void init_osc(void) { + // System Clock Select (SCS) + OSCCONbits.SCS = 0b1; // Internal Clock selected + // Internal Resistor-Capacitor Frequency select (IRCF) + OSCCONbits.IRCF = 0b111; // 8 MHz clock speed + OSCCONbits.OSTS = 0b1; // OSC startup time + + // Halt boot until clock is stable + while (OSCCONbits.HTS != 0b1); +} + +// #[routine:interrupt_service] + +void __interrupt() isr(void) { + if (INTF) { + IntHandler(); //Interrupt Handling + }//INTF + + if (TMR2IF) { + MTHandler(); //Measure Timer Handling + }//TMR2IF + + if (TMR1IF) { //timeout / reset + TTHandler(); //Timeout Timer Handling + } //TMR1IF + + if (count > 0) return; //if "count" from the IR Library is not 0, that means it is busy reading, so return. + + if (INTCONbits.RBIF == 1) { + // Parse rotary changes into `count`, shift it into `PORTA` + selectcount = read_rotary(); + PORTA = (unsigned char) (~(1 << selectcount)); + + // Clear the Port B change interrupt flag + INTCONbits.RBIF = 0; + } +} diff --git a/src/picamp.X/nbproject/Makefile-default.mk b/src/picamp.X/nbproject/Makefile-default.mk new file mode 100644 index 0000000..b876470 --- /dev/null +++ b/src/picamp.X/nbproject/Makefile-default.mk @@ -0,0 +1,158 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a -pre and a -post target defined where you can add customized code. +# +# This makefile implements configuration specific macros and targets. + + +# Include project Makefile +ifeq "${IGNORE_LOCAL}" "TRUE" +# do not include local makefile. User is passing all local related variables already +else +include Makefile +# Include makefile containing local settings +ifeq "$(wildcard nbproject/Makefile-local-default.mk)" "nbproject/Makefile-local-default.mk" +include nbproject/Makefile-local-default.mk +endif +endif + +# Environment +MKDIR=mkdir -p +RM=rm -f +MV=mv +CP=cp + +# Macros +CND_CONF=default +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +IMAGE_TYPE=debug +OUTPUT_SUFFIX=elf +DEBUGGABLE_SUFFIX=elf +FINAL_IMAGE=${DISTDIR}/PIC16F887_AMPINTERFACE.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +else +IMAGE_TYPE=production +OUTPUT_SUFFIX=hex +DEBUGGABLE_SUFFIX=elf +FINAL_IMAGE=${DISTDIR}/PIC16F887_AMPINTERFACE.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +endif + +ifeq ($(COMPARE_BUILD), true) +COMPARISON_BUILD=-mafrlcsj +else +COMPARISON_BUILD= +endif + +# Object Directory +OBJECTDIR=build/${CND_CONF}/${IMAGE_TYPE} + +# Distribution Directory +DISTDIR=dist/${CND_CONF}/${IMAGE_TYPE} + +# Source Files Quoted if spaced +SOURCEFILES_QUOTED_IF_SPACED=main.c + +# Object Files Quoted if spaced +OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/main.p1 +POSSIBLE_DEPFILES=${OBJECTDIR}/main.p1.d + +# Object Files +OBJECTFILES=${OBJECTDIR}/main.p1 + +# Source Files +SOURCEFILES=main.c + + + +CFLAGS= +ASFLAGS= +LDLIBSOPTIONS= + +############# Tool locations ########################################## +# If you copy a project from one host to another, the path where the # +# compiler is installed may be different. # +# If you open this project with MPLAB X in the new host, this # +# makefile will be regenerated and the paths will be corrected. # +####################################################################### +# fixDeps replaces a bunch of sed/cat/printf statements that slow down the build +FIXDEPS=fixDeps + +.build-conf: ${BUILD_SUBPROJECTS} +ifneq ($(INFORMATION_MESSAGE), ) + @echo $(INFORMATION_MESSAGE) +endif + ${MAKE} -f nbproject/Makefile-default.mk ${DISTDIR}/PIC16F887_AMPINTERFACE.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} + +MP_PROCESSOR_OPTION=16F887 +# ------------------------------------------------------------------------------------ +# Rules for buildStep: compile +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +${OBJECTDIR}/main.p1: main.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/main.p1.d + @${RM} ${OBJECTDIR}/main.p1 + ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -mdebugger=none -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -I"../../../../.local/share/microchip/xc8/v2.46/pic/include/legacy" -I"../../../../.local/share/microchip/xc8/v2.46/pic/include/proc" -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/main.p1 main.c + @-${MV} ${OBJECTDIR}/main.d ${OBJECTDIR}/main.p1.d + @${FIXDEPS} ${OBJECTDIR}/main.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ + +else +${OBJECTDIR}/main.p1: main.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/main.p1.d + @${RM} ${OBJECTDIR}/main.p1 + ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -I"../../../../.local/share/microchip/xc8/v2.46/pic/include/legacy" -I"../../../../.local/share/microchip/xc8/v2.46/pic/include/proc" -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/main.p1 main.c + @-${MV} ${OBJECTDIR}/main.d ${OBJECTDIR}/main.p1.d + @${FIXDEPS} ${OBJECTDIR}/main.p1.d $(SILENT) -rsi ${MP_CC_DIR}../ + +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: assemble +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: assembleWithPreprocess +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +else +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: link +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +${DISTDIR}/PIC16F887_AMPINTERFACE.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk libs/new-potlib.X/dist/default/production/new-potlib.X.a libs/new-rotlib.X/dist/default/production/new-rotlib.X.a libs/IR_LIB/IRLib_v7.X/dist/default/production/IRLib_v7.X.a libs/HCMS2913.X/dist/default/production/HCMS2913.X.a + @${MKDIR} ${DISTDIR} + ${MP_CC} $(MP_EXTRA_LD_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -Wl,-Map=${DISTDIR}/PIC16F887_AMPINTERFACE.X.${IMAGE_TYPE}.map -D__DEBUG=1 -mdebugger=none -DXPRJ_default=$(CND_CONF) -Wl,--defsym=__MPLAB_BUILD=1 -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -I"../../../../.local/share/microchip/xc8/v2.46/pic/include/legacy" -I"../../../../.local/share/microchip/xc8/v2.46/pic/include/proc" -mwarn=-3 -Wa,-a -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -mrom=default,-1f00-1ffe -mram=default,-0-0,-70-70,-80-80,-f0-f0,-100-100,-170-170,-180-180,-1e5-1f0 $(COMPARISON_BUILD) -Wl,--memorysummary,${DISTDIR}/memoryfile.xml -o ${DISTDIR}/PIC16F887_AMPINTERFACE.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED} libs/new-potlib.X/dist/default/production/new-potlib.X.a libs/new-rotlib.X/dist/default/production/new-rotlib.X.a libs/IR_LIB/IRLib_v7.X/dist/default/production/IRLib_v7.X.a libs/HCMS2913.X/dist/default/production/HCMS2913.X.a + @${RM} ${DISTDIR}/PIC16F887_AMPINTERFACE.X.${IMAGE_TYPE}.hex + + +else +${DISTDIR}/PIC16F887_AMPINTERFACE.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk libs/new-potlib.X/dist/default/production/new-potlib.X.a libs/new-rotlib.X/dist/default/production/new-rotlib.X.a libs/IR_LIB/IRLib_v7.X/dist/default/production/IRLib_v7.X.a libs/HCMS2913.X/dist/default/production/HCMS2913.X.a + @${MKDIR} ${DISTDIR} + ${MP_CC} $(MP_EXTRA_LD_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -Wl,-Map=${DISTDIR}/PIC16F887_AMPINTERFACE.X.${IMAGE_TYPE}.map -DXPRJ_default=$(CND_CONF) -Wl,--defsym=__MPLAB_BUILD=1 -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -I"../../../../.local/share/microchip/xc8/v2.46/pic/include/legacy" -I"../../../../.local/share/microchip/xc8/v2.46/pic/include/proc" -mwarn=-3 -Wa,-a -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mno-default-config-bits -std=c99 -gdwarf-3 -mstack=compiled:auto:auto $(COMPARISON_BUILD) -Wl,--memorysummary,${DISTDIR}/memoryfile.xml -o ${DISTDIR}/PIC16F887_AMPINTERFACE.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED} libs/new-potlib.X/dist/default/production/new-potlib.X.a libs/new-rotlib.X/dist/default/production/new-rotlib.X.a libs/IR_LIB/IRLib_v7.X/dist/default/production/IRLib_v7.X.a libs/HCMS2913.X/dist/default/production/HCMS2913.X.a + + +endif + + +# Subprojects +.build-subprojects: + + +# Subprojects +.clean-subprojects: + +# Clean Targets +.clean-conf: ${CLEAN_SUBPROJECTS} + ${RM} -r ${OBJECTDIR} + ${RM} -r ${DISTDIR} + +# Enable dependency checking +.dep.inc: .depcheck-impl + +DEPFILES=$(wildcard ${POSSIBLE_DEPFILES}) +ifneq (${DEPFILES},) +include ${DEPFILES} +endif diff --git a/picamp.X/nbproject/Makefile-genesis.properties b/src/picamp.X/nbproject/Makefile-genesis.properties similarity index 64% rename from picamp.X/nbproject/Makefile-genesis.properties rename to src/picamp.X/nbproject/Makefile-genesis.properties index 70b1f7a..a0ce25e 100644 --- a/picamp.X/nbproject/Makefile-genesis.properties +++ b/src/picamp.X/nbproject/Makefile-genesis.properties @@ -1,13 +1,13 @@ # -#Wed Mar 06 16:07:14 CET 2024 +#Thu Mar 28 18:08:34 CET 2024 default.languagetoolchain.version=2.46 -default.Pack.dfplocation= +default.Pack.dfplocation=/home/burhan/.local/share/microchip/mplabx/v6.20/packs/Microchip/PIC16Fxxx_DFP/1.6.156 conf.ids=default default.languagetoolchain.dir=/home/burhan/.local/share/microchip/xc8/v2.46/bin host.id=1odb-89vf-4o -configurations-xml=135dbe756f138e4ec6c0a089be24747b +configurations-xml=366b57c158f22632d6dd8bb4322eccc7 com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=f612087c95360c842296d189edfe3321 default.com-microchip-mplab-nbide-toolchain-xc8-XC8LanguageToolchain.md5=bf89cdcdd6c0a49174fe4b605ef2b42d -proj.dir=/home/burhan/Desktop/PICAMP-main/picamp.X +proj.dir=/home/burhan/Desktop/PROJ ES/Definitive/PIC16F887_AMPINTERFACE.X default.com-microchip-mplab-mdbcore-pk4hybrid-Pk4HybridTooImpl.md5=916239579355067caf3c3a7796c790dc host.platform=linux diff --git a/src/picamp.X/nbproject/Makefile-impl.mk b/src/picamp.X/nbproject/Makefile-impl.mk new file mode 100644 index 0000000..41b9406 --- /dev/null +++ b/src/picamp.X/nbproject/Makefile-impl.mk @@ -0,0 +1,69 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a pre- and a post- target defined where you can add customization code. +# +# This makefile implements macros and targets common to all configurations. +# +# NOCDDL + + +# Building and Cleaning subprojects are done by default, but can be controlled with the SUB +# macro. If SUB=no, subprojects will not be built or cleaned. The following macro +# statements set BUILD_SUB-CONF and CLEAN_SUB-CONF to .build-reqprojects-conf +# and .clean-reqprojects-conf unless SUB has the value 'no' +SUB_no=NO +SUBPROJECTS=${SUB_${SUB}} +BUILD_SUBPROJECTS_=.build-subprojects +BUILD_SUBPROJECTS_NO= +BUILD_SUBPROJECTS=${BUILD_SUBPROJECTS_${SUBPROJECTS}} +CLEAN_SUBPROJECTS_=.clean-subprojects +CLEAN_SUBPROJECTS_NO= +CLEAN_SUBPROJECTS=${CLEAN_SUBPROJECTS_${SUBPROJECTS}} + + +# Project Name +PROJECTNAME=PIC16F887_AMPINTERFACE.X + +# Active Configuration +DEFAULTCONF=default +CONF=${DEFAULTCONF} + +# All Configurations +ALLCONFS=default + + +# build +.build-impl: .build-pre + ${MAKE} -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .build-conf + + +# clean +.clean-impl: .clean-pre + ${MAKE} -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .clean-conf + +# clobber +.clobber-impl: .clobber-pre .depcheck-impl + ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=default clean + + + +# all +.all-impl: .all-pre .depcheck-impl + ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=default build + + + +# dependency checking support +.depcheck-impl: +# @echo "# This code depends on make tool being used" >.dep.inc +# @if [ -n "${MAKE_VERSION}" ]; then \ +# echo "DEPFILES=\$$(wildcard \$$(addsuffix .d, \$${OBJECTFILES}))" >>.dep.inc; \ +# echo "ifneq (\$${DEPFILES},)" >>.dep.inc; \ +# echo "include \$${DEPFILES}" >>.dep.inc; \ +# echo "endif" >>.dep.inc; \ +# else \ +# echo ".KEEP_STATE:" >>.dep.inc; \ +# echo ".KEEP_STATE_FILE:.make.state.\$${CONF}" >>.dep.inc; \ +# fi diff --git a/src/picamp.X/nbproject/Makefile-local-default.mk b/src/picamp.X/nbproject/Makefile-local-default.mk new file mode 100644 index 0000000..d461158 --- /dev/null +++ b/src/picamp.X/nbproject/Makefile-local-default.mk @@ -0,0 +1,36 @@ +# +# Generated Makefile - do not edit! +# +# +# This file contains information about the location of compilers and other tools. +# If you commmit this file into your revision control server, you will be able to +# to checkout the project and build it from the command line with make. However, +# if more than one person works on the same project, then this file might show +# conflicts since different users are bound to have compilers in different places. +# In that case you might choose to not commit this file and let MPLAB X recreate this file +# for each user. The disadvantage of not commiting this file is that you must run MPLAB X at +# least once so the file gets created and the project can be built. Finally, you can also +# avoid using this file at all if you are only building from the command line with make. +# You can invoke make with the values of the macros: +# $ makeMP_CC="/opt/microchip/mplabc30/v3.30c/bin/pic30-gcc" ... +# +PATH_TO_IDE_BIN=/home/burhan/.local/share/microchip/mplabx/v6.20/mplab_platform/platform/../mplab_ide/modules/../../bin/ +# Adding MPLAB X bin directory to path. +PATH:=/home/burhan/.local/share/microchip/mplabx/v6.20/mplab_platform/platform/../mplab_ide/modules/../../bin/:$(PATH) +# Path to java used to run MPLAB X when this makefile was created +MP_JAVA_PATH="/home/burhan/.local/share/microchip/mplabx/v6.20/sys/java/zulu8.64.0.19-ca-fx-jre8.0.345-linux_x64/bin/" +OS_CURRENT="$(shell uname -s)" +MP_CC="/home/burhan/.local/share/microchip/xc8/v2.46/bin/xc8-cc" +# MP_CPPC is not defined +# MP_BC is not defined +MP_AS="/home/burhan/.local/share/microchip/xc8/v2.46/bin/xc8-cc" +MP_LD="/home/burhan/.local/share/microchip/xc8/v2.46/bin/xc8-cc" +MP_AR="/home/burhan/.local/share/microchip/xc8/v2.46/bin/xc8-ar" +DEP_GEN=${MP_JAVA_PATH}java -jar "/home/burhan/.local/share/microchip/mplabx/v6.20/mplab_platform/platform/../mplab_ide/modules/../../bin/extractobjectdependencies.jar" +MP_CC_DIR="/home/burhan/.local/share/microchip/xc8/v2.46/bin" +# MP_CPPC_DIR is not defined +# MP_BC_DIR is not defined +MP_AS_DIR="/home/burhan/.local/share/microchip/xc8/v2.46/bin" +MP_LD_DIR="/home/burhan/.local/share/microchip/xc8/v2.46/bin" +MP_AR_DIR="/home/burhan/.local/share/microchip/xc8/v2.46/bin" +DFP_DIR=/home/burhan/.local/share/microchip/mplabx/v6.20/packs/Microchip/PIC16Fxxx_DFP/1.6.156 diff --git a/src/picamp.X/nbproject/Makefile-variables.mk b/src/picamp.X/nbproject/Makefile-variables.mk new file mode 100644 index 0000000..7651e07 --- /dev/null +++ b/src/picamp.X/nbproject/Makefile-variables.mk @@ -0,0 +1,10 @@ +# +# Generated - do not edit! +# +# NOCDDL +# +CND_BASEDIR=`pwd` +# default configuration +CND_ARTIFACT_DIR_default=dist/default/production +CND_ARTIFACT_NAME_default=PIC16F887_AMPINTERFACE.X.production.hex +CND_ARTIFACT_PATH_default=dist/default/production/PIC16F887_AMPINTERFACE.X.production.hex diff --git a/src/picamp.X/nbproject/configurations.xml b/src/picamp.X/nbproject/configurations.xml new file mode 100644 index 0000000..853fc64 --- /dev/null +++ b/src/picamp.X/nbproject/configurations.xml @@ -0,0 +1,1260 @@ + + + + + config.h + libs/HCMS2913.X/h/HCMS2913.h + libs/global/picamp-potentiometer.h + libs/global/picamp-rotary.h + libs/IR_LIB/IRLib_v7.X/IRLib_v7.h + + + Makefile + + + + + main.c + + + + libs/HCMS2913.X/h + libs/global + libs/IR_LIB/IRLib_v7.X + + Makefile + + + + localhost + PIC16F887 + + + pk4hybrid + XC8 + 2.46 + 2 + + + + + + + + + + libs/new-potlib.X/dist/default/production/new-potlib.X.a + libs/new-rotlib.X/dist/default/production/new-rotlib.X.a + libs/IR_LIB/IRLib_v7.X/dist/default/production/IRLib_v7.X.a + libs/HCMS2913.X/dist/default/production/HCMS2913.X.a + + + + + + false + true + + + + + + + false + false + + false + + false + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/picamp.X/nbproject/private/configurations.xml b/src/picamp.X/nbproject/private/configurations.xml similarity index 100% rename from picamp.X/nbproject/private/configurations.xml rename to src/picamp.X/nbproject/private/configurations.xml diff --git a/src/picamp.X/nbproject/private/private.xml b/src/picamp.X/nbproject/private/private.xml new file mode 100644 index 0000000..c8f5ebf --- /dev/null +++ b/src/picamp.X/nbproject/private/private.xml @@ -0,0 +1,10 @@ + + + + + + file:/home/burhan/Desktop/PROJ%20ES/Definitive/PIC16F887_AMPINTERFACE.X/main.c + file:/home/burhan/Desktop/PROJ%20ES/Definitive/PIC16F887_AMPINTERFACE.X/config.h + + + diff --git a/src/picamp.X/nbproject/project.xml b/src/picamp.X/nbproject/project.xml new file mode 100644 index 0000000..6cf4322 --- /dev/null +++ b/src/picamp.X/nbproject/project.xml @@ -0,0 +1,27 @@ + + + com.microchip.mplab.nbide.embedded.makeproject + + + PIC16F887_AMPINTERFACE + 150773f7-8c94-42eb-8051-9806322880cd + 0 + ISO-8859-1 + + + libs/HCMS2913.X/h + libs/global + libs/IR_LIB/IRLib_v7.X + + + + default + 2 + + + + false + + + +