From b4029be7a0140fdb96cf0dd214d6e66f42b09505 Mon Sep 17 00:00:00 2001 From: johannes Date: Fri, 15 Dec 2023 17:56:07 +0100 Subject: [PATCH] Updated to latest libopeninv --- Makefile | 13 ++-- include/chargercan.h | 4 +- include/hwdefs.h | 2 +- include/param_prj.h | 9 ++- libopeninv | 2 +- src/chargercan.cpp | 2 +- src/main.cpp | 51 ++++++++++++--- src/terminal_prj.cpp | 152 ++----------------------------------------- tesla.cbp | 13 ++++ 9 files changed, 78 insertions(+), 170 deletions(-) diff --git a/Makefile b/Makefile index 90d16ea..3b3aa0e 100644 --- a/Makefile +++ b/Makefile @@ -33,16 +33,17 @@ CFLAGS = -Os -Wall -Wextra -Iinclude/ -Ilibopeninv/include -Ilibopencm3/include -fno-common -fno-builtin -pedantic -DSTM32F1 \ -mcpu=cortex-m3 -mthumb -std=gnu99 -ffunction-sections -fdata-sections CPPFLAGS = -Os -Wall -Wextra -Iinclude/ -Ilibopeninv/include -Ilibopencm3/include \ - -fno-common -std=c++11 -pedantic -DSTM32F1 -DMAX_MESSAGES=15 \ + -fno-common -std=c++11 -pedantic -DSTM32F1 -DMAX_ITEMS=70 -DMAX_MESSAGES=15 \ -ffunction-sections -fdata-sections -fno-builtin -fno-rtti -fno-exceptions -fno-unwind-tables -mcpu=cortex-m3 -mthumb LDSCRIPT = linker.ld LDFLAGS = -Llibopencm3/lib -T$(LDSCRIPT) -march=armv7 -nostartfiles -Wl,--gc-sections,-Map,linker.map OBJSL = main.o hwinit.o stm32scheduler.o params.o terminal.o terminal_prj.o \ my_string.o digio.o sine_core.o my_fp.o printf.o anain.o \ - param_save.o errormessage.o stm32_can.o \ + param_save.o errormessage.o canhardware.o stm32_can.o canmap.o cansdo.o \ picontroller.o terminalcommands.o chargercan.o charger.o OBJS = $(patsubst %.o,obj/%.o, $(OBJSL)) +DEPENDS = $(patsubst %.o,obj/%.d, $(OBJSL)) vpath %.c src/ libopeninv/src vpath %.cpp src/ libopeninv/src @@ -78,13 +79,15 @@ $(BINARY): $(OBJS) $(LDSCRIPT) @printf " LD $(subst $(shell pwd)/,,$(@))\n" $(Q)$(LD) $(LDFLAGS) -o $(BINARY) $(OBJS) -lopencm3_stm32f1 +-include $(DEPENDS) + $(OUT_DIR)/%.o: %.c Makefile @printf " CC $(subst $(shell pwd)/,,$(@))\n" - $(Q)$(CC) $(CFLAGS) -o $@ -c $< + $(Q)$(CC) $(CFLAGS) -MMD -MP -o $@ -c $< $(OUT_DIR)/%.o: %.cpp Makefile @printf " CPP $(subst $(shell pwd)/,,$(@))\n" - $(Q)$(CPP) $(CPPFLAGS) -o $@ -c $< + $(Q)$(CPP) $(CPPFLAGS) -MMD -MP -o $@ -c $< clean: @printf " CLEAN ${OUT_DIR}\n" @@ -124,7 +127,7 @@ Test: g++ -c -Ilibopeninv/include/ -o my_string.o libopeninv/src/my_string.c g++ -c -Ilibopeninv/include/ -Iinclude -o params.o libopeninv/src/params.cpp g++ -c -Ilibopeninv/include/ -Iinclude -o errormessage.o libopeninv/src/errormessage.cpp - g++ -c -Ilibopeninv/include/ -Iinclude -o printf.o libopeninv/src/printf.cpp + g++ -c -Ilibopeninv/include/ -Iinclude -Wno-builtin-declaration-mismatch -Wno-int-to-pointer-cast -o printf.o libopeninv/src/printf.cpp g++ -c -Ilibopeninv/include/ -Iinclude -o picontroller.o libopeninv/src/picontroller.cpp g++ -c -Ilibopeninv/include/ -Iinclude -o charger.o src/charger.cpp -D TEST_COMMON_H g++ -c -Ilibopeninv/include/ -Iinclude -o digio_mock.o test/digio_mock.cpp diff --git a/include/chargercan.h b/include/chargercan.h index 441ec84..80d94e5 100644 --- a/include/chargercan.h +++ b/include/chargercan.h @@ -18,12 +18,12 @@ */ #ifndef CHARGERCAN_H #define CHARGERCAN_H -#include "stm32_can.h" +#include "canmap.h" class ChargerCAN { public: - static void MapMessages(Can* can); + static void MapMessages(CanMap* can); protected: diff --git a/include/hwdefs.h b/include/hwdefs.h index fac71ba..b09fa19 100644 --- a/include/hwdefs.h +++ b/include/hwdefs.h @@ -2,7 +2,7 @@ #define HWDEFS_H_INCLUDED -#define RCC_CLOCK_SETUP rcc_clock_setup_in_hse_8mhz_out_72mhz +#define RCC_CLOCK_SETUP() rcc_clock_setup_pll(&rcc_hse_configs[RCC_CLOCK_HSE8_72MHZ]) //Address of parameter block in flash #define FLASH_PAGE_SIZE 1024 diff --git a/include/param_prj.h b/include/param_prj.h index 057647d..6469b31 100644 --- a/include/param_prj.h +++ b/include/param_prj.h @@ -39,7 +39,7 @@ */ //Define a version string of your firmware here -#define VER 1.17.R +#define VER 1.18.R /* Entries must be ordered as follows: 1. Saveable parameters (id != 0) @@ -107,10 +107,9 @@ VALUE_ENTRY(c3iac, "A", 2034 ) \ VALUE_ENTRY(c3udc, "V", 2035 ) \ VALUE_ENTRY(c3idc, "A", 2036 ) \ - VALUE_ENTRY(test_time, "s", 2037 ) \ - VALUE_ENTRY(test_timer_flag, "X", 2038 ) \ - VALUE_ENTRY(test_timer_icvalue, "X", 2039 ) \ - // TODO: How to hide this in interface? + VALUE_ENTRY(test_time, "s", 3000 ) \ + VALUE_ENTRY(test_timer_flag, "X", 3001 ) \ + VALUE_ENTRY(test_timer_icvalue, "X", 3002 ) \ /***** Enum String definitions *****/ diff --git a/libopeninv b/libopeninv index 0bef3c1..115ea30 160000 --- a/libopeninv +++ b/libopeninv @@ -1 +1 @@ -Subproject commit 0bef3c1fdb6b30ed6cb79b55c51871576f9c199f +Subproject commit 115ea3090d08d88ce7c32fdc70726e73d2f60f4d diff --git a/src/chargercan.cpp b/src/chargercan.cpp index 527c82c..bd15864 100644 --- a/src/chargercan.cpp +++ b/src/chargercan.cpp @@ -18,7 +18,7 @@ */ #include "chargercan.h" -void ChargerCAN::MapMessages(Can* can) +void ChargerCAN::MapMessages(CanMap* can) { can->AddRecv(Param::hwaclim, 0x207, 32, 9, 0.06666f); //gain 0.06666 can->AddRecv(Param::hwaclim, 0x209, 32, 9, 0.06666f); //gain 0.06666 diff --git a/src/main.cpp b/src/main.cpp index 1ee6361..1444d48 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -28,6 +28,7 @@ #include #include #include "stm32_can.h" +#include "cansdo.h" #include "terminal.h" #include "params.h" #include "hwdefs.h" @@ -42,9 +43,13 @@ #include "picontroller.h" #include "chargercan.h" #include "charger.h" +#include "terminalcommands.h" + +#define PRINT_JSON 0 static Stm32Scheduler* scheduler; -static Can* can; +static CanHardware* can; +static CanMap* canMap; PiController dcCurController; uint32_t startTime; @@ -72,7 +77,7 @@ static void Ms100Task(void) EvseRead(); - can->SendAll(); + canMap->SendAll(); } static void MapChargerMessages() @@ -84,13 +89,13 @@ static void MapChargerMessages() bool dummyrx; //check sample value, if it is mapped assume valid CAN map - if (can->FindMap(Param::hwaclim, dummyId, dummyOfs, dummyLen, dummyGain, dummyAdd, dummyrx)) return; + if (canMap->FindMap(Param::hwaclim, dummyId, dummyOfs, dummyLen, dummyGain, dummyAdd, dummyrx)) return; - can->Clear(); + //canMap->Clear(); - ChargerCAN::MapMessages(can); + ChargerCAN::MapMessages(canMap); - can->Save(); + canMap->Save(); } /** This function is called when the user changes a parameter */ @@ -115,6 +120,16 @@ void Param::Change(Param::PARAM_NUM paramNum) } } +static void HandleClear() +{ + MapChargerMessages(); +} + +static bool CanCallback(uint32_t, uint32_t*, uint8_t) +{ + return false; +} + //Whichever timer(s) you use for the scheduler, you have to //implement their ISRs here and call into the respective scheduler extern "C" void tim2_isr(void) @@ -142,10 +157,19 @@ extern "C" int main(void) Stm32Scheduler s(TIM2); //We never exit main so it's ok to put it on stack scheduler = &s; //Initialize CAN1, including interrupts. Clock must be enabled in clock_setup() - Can c(CAN1, Can::Baud500, true); - c.SetNodeId(5); - //store a pointer for easier access + Stm32Can c(CAN1, CanHardware::Baud500, true); + FunctionPointerCallback cb(CanCallback, HandleClear); + c.AddCallback(&cb); can = &c; + + //store a pointer for easier access + CanMap cm(&c); + canMap = &cm; + CanSdo sdo(&c, &cm); + sdo.SetNodeId(2); + + TerminalCommands::SetCanMap(&cm); + Terminal t3(USART3, termCmds); Terminal t1(USART1, termCmds); @@ -161,6 +185,9 @@ extern "C" int main(void) //backward compatibility, version 4 was the first to support the "stream" command Param::SetInt(Param::version, 4); + Param::SetFlag(Param::test_time, Param::FLAG_HIDDEN); + Param::SetFlag(Param::test_timer_flag, Param::FLAG_HIDDEN); + Param::SetFlag(Param::test_timer_icvalue, Param::FLAG_HIDDEN); //In version 1.11 this changed from mV to V if (Param::GetInt(Param::udcspnt) > 420) @@ -176,6 +203,12 @@ extern "C" int main(void) { t1.Run(); t3.Run(); + + if (sdo.GetPrintRequest() == PRINT_JSON) + { + char c = 0; + TerminalCommands::PrintParamsJson(&sdo, &c); + } } diff --git a/src/terminal_prj.cpp b/src/terminal_prj.cpp index 8b0f533..c09eec5 100644 --- a/src/terminal_prj.cpp +++ b/src/terminal_prj.cpp @@ -36,7 +36,6 @@ #include "chargercan.h" static void LoadDefaults(Terminal* term, char *arg); -static void PrintParamsJson(Terminal* term, char *arg); static void PrintSerial(Terminal* term, char *arg); static void MapCan(Terminal* term, char *arg); static void PrintErrors(Terminal* term, char *arg); @@ -52,7 +51,7 @@ extern "C" const TERM_CMD termCmds[] = { "defaults", LoadDefaults }, { "save", TerminalCommands::SaveParameters }, { "load", TerminalCommands::LoadParameters }, - { "json", PrintParamsJson }, + { "json", TerminalCommands::PrintParamsJson }, { "can", MapCan }, { "serial", PrintSerial }, { "errors", PrintErrors }, @@ -75,163 +74,24 @@ void PrintCanMap(Param::PARAM_NUM param, uint32_t canid, uint8_t offsetBits, uin //cantx param id offset len gain static void MapCan(Terminal* term, char *arg) { - Param::PARAM_NUM paramIdx = Param::PARAM_INVALID; - int values[4]; - int result; - char op; - char *ending; - const int numArgs = 4; - arg = my_trim(arg); - if (arg[0] == 'p') + if (arg[0] == 'd') { - while (curTerm != NULL); //lock - curTerm = term; - Can::GetInterface(0)->IterateCanMap(PrintCanMap); - curTerm = NULL; - return; + fprintf(term, "CAN map can not be deleted selectively, use clear command\r\n"); } if (arg[0] == 'c') { - Can::GetInterface(0)->Clear(); - ChargerCAN::MapMessages(Can::GetInterface(0)); + TerminalCommands::MapCan(term, arg); + //ChargerCAN::MapMessages(Can::GetInterface(0)); fprintf(term, "Default CAN mapping restored\r\n"); return; } - op = arg[0]; - arg = (char *)my_strchr(arg, ' '); - - if (0 == *arg) - { - fprintf(term, "Missing argument\r\n"); - return; - } - - arg = my_trim(arg); - ending = (char *)my_strchr(arg, ' '); - - if (*ending == 0 && op != 'd') - { - fprintf(term, "Missing argument\r\n"); - return; - } - - *ending = 0; - paramIdx = Param::NumFromString(arg); - arg = my_trim(ending + 1); - - if (Param::PARAM_INVALID == paramIdx) - { - fprintf(term, "Unknown parameter\r\n"); - return; - } - - if (op == 'd') - { - if (paramIdx >= Param::version) - { - fprintf(term, "Internal CAN map can not be deleted\r\n"); - return; - } - result = Can::GetInterface(0)->Remove(paramIdx); - fprintf(term, "%d entries removed\r\n", result); - return; - } - - for (int i = 0; i < numArgs; i++) - { - ending = (char *)my_strchr(arg, ' '); - - if (0 == *ending && i < (numArgs - 1)) - { - fprintf(term, "Missing argument\r\n"); - return; - } - - *ending = 0; - int iVal = my_atoi(arg); - - //allow gain values < 1 and re-interpret them - if (i == (numArgs - 1) && iVal == 0) - { - values[i] = fp_atoi(arg, 16); - } - else - { - values[i] = iVal; - } - - arg = my_trim(ending + 1); - } - - if (op == 't') - { - result = Can::GetInterface(0)->AddSend(paramIdx, values[0], values[1], values[2], values[3] / 65536.0f); - } - else - { - result = Can::GetInterface(0)->AddRecv(paramIdx, values[0], values[1], values[2], values[3] / 65536.0f); - } - - switch (result) - { - case CAN_ERR_INVALID_ID: - fprintf(term, "Invalid CAN Id %x\r\n", values[0]); - break; - case CAN_ERR_INVALID_OFS: - fprintf(term, "Invalid Offset %d\r\n", values[1]); - break; - case CAN_ERR_INVALID_LEN: - fprintf(term, "Invalid length %d\r\n", values[2]); - break; - case CAN_ERR_MAXITEMS: - fprintf(term, "Cannot map anymore items to CAN id %d\r\n", values[0]); - break; - case CAN_ERR_MAXMESSAGES: - fprintf(term, "Max message count reached\r\n"); - break; - default: - fprintf(term, "CAN map successful, %d message%s active\r\n", result, result > 1 ? "s" : ""); - } + TerminalCommands::MapCan(term, arg); } -static void PrintParamsJson(Terminal* term, char *arg) -{ - arg = my_trim(arg); - - const Param::Attributes *pAtr; - char comma = ' '; - bool printHidden = arg[0] == 'h'; - - fprintf(term, "{"); - for (uint32_t idx = 0; idx < Param::PARAM_LAST; idx++) - { - pAtr = Param::GetAttrib((Param::PARAM_NUM)idx); - - if ((Param::GetFlag((Param::PARAM_NUM)idx) & Param::FLAG_HIDDEN) == 0 || printHidden) - { - fprintf(term, "%c\r\n \"%s\": {\"unit\":\"%s\",\"value\":%f,",comma, pAtr->name, pAtr->unit, Param::Get((Param::PARAM_NUM)idx)); - - if (Param::IsParam((Param::PARAM_NUM)idx)) - { - fprintf(term, "\"isparam\":true,\"minimum\":%f,\"maximum\":%f,\"default\":%f,\"category\":\"%s\",\"i\":%d}", - pAtr->min, pAtr->max, pAtr->def, pAtr->category, idx); - } - else - { - fprintf(term, "\"isparam\":false}"); - } - comma = ','; - } - } - fprintf(term, ",\r\n \"serial\": {\"unit\":\"\",\"value\":\"%X:%X:%X\",\"isparam\":false}", DESIG_UNIQUE_ID2, DESIG_UNIQUE_ID1, DESIG_UNIQUE_ID0); - fprintf(term, "\r\n}\r\n"); -} - - static void LoadDefaults(Terminal* term, char *arg) { arg = arg; diff --git a/tesla.cbp b/tesla.cbp index bad410e..8d804d3 100644 --- a/tesla.cbp +++ b/tesla.cbp @@ -42,10 +42,17 @@ + + + + + + + @@ -60,10 +67,16 @@ + + + + + +