Merge branch 'master' into obp40
This commit is contained in:
commit
edd07d9632
|
@ -520,19 +520,23 @@ prebuild(env)
|
||||||
board="PLATFORM_BOARD_%s"%env["BOARD"].replace("-","_").upper()
|
board="PLATFORM_BOARD_%s"%env["BOARD"].replace("-","_").upper()
|
||||||
print("Board=#%s#"%board)
|
print("Board=#%s#"%board)
|
||||||
print("BuildFlags=%s"%(" ".join(env["BUILD_FLAGS"])))
|
print("BuildFlags=%s"%(" ".join(env["BUILD_FLAGS"])))
|
||||||
|
|
||||||
epdtype = "unknown"
|
|
||||||
pcbvers = "unknown"
|
|
||||||
for x in env["BUILD_FLAGS"]:
|
|
||||||
if x.startswith("-D HARDWARE_"):
|
|
||||||
pcbvers = x.split('_')[1]
|
|
||||||
if x.startswith("-D DISPLAY_"):
|
|
||||||
epdtype = x.split('_')[1]
|
|
||||||
|
|
||||||
env.Append(
|
env.Append(
|
||||||
LINKFLAGS=[ "-u", "custom_app_desc" ],
|
LINKFLAGS=[ "-u", "custom_app_desc" ],
|
||||||
CPPDEFINES=[(board,"1"), ("BOARD", env["BOARD"]), ("EPDTYPE", epdtype),
|
CPPDEFINES=[(board,"1")]
|
||||||
("PCBVERS", pcbvers)]
|
|
||||||
)
|
)
|
||||||
#script does not run on clean yet - maybe in the future
|
#script does not run on clean yet - maybe in the future
|
||||||
env.AddPostAction("clean",cleangenerated)
|
env.AddPostAction("clean",cleangenerated)
|
||||||
|
|
||||||
|
#look for extra task scripts and include them here
|
||||||
|
for taskdir in userTaskDirs:
|
||||||
|
script = os.path.join(taskdir, "extra_task.py")
|
||||||
|
if os.path.isfile(script):
|
||||||
|
taskname = os.path.basename(os.path.normpath(taskdir))
|
||||||
|
print("#extra task script for '{}'".format(taskname))
|
||||||
|
with open(script) as fh:
|
||||||
|
try:
|
||||||
|
code = compile(fh.read(), taskname, 'exec')
|
||||||
|
except SyntaxError:
|
||||||
|
print("#ERROR: script does not compile")
|
||||||
|
continue
|
||||||
|
exec(code)
|
||||||
|
|
|
@ -37,6 +37,18 @@ String formatTime(char fmttype, uint8_t hour, uint8_t minute, uint8_t second) {
|
||||||
return String(buffer);
|
return String(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String formatLatitude(double lat) {
|
||||||
|
float degree = abs(int(lat));
|
||||||
|
float minute = abs((lat - int(lat)) * 60);
|
||||||
|
return String(degree, 0) + "\x90 " + String(minute, 4) + "' " + ((lat > 0) ? "N" : "S");
|
||||||
|
}
|
||||||
|
|
||||||
|
String formatLongitude(double lon) {
|
||||||
|
float degree = abs(int(lon));
|
||||||
|
float minute = abs((lon - int(lon)) * 60);
|
||||||
|
return String(degree, 0) + "\x90 " + String(minute, 4) + "' " + ((lon > 0) ? "E" : "W");
|
||||||
|
}
|
||||||
|
|
||||||
FormatedData formatValue(GwApi::BoatValue *value, CommonData &commondata){
|
FormatedData formatValue(GwApi::BoatValue *value, CommonData &commondata){
|
||||||
GwLog *logger = commondata.logger;
|
GwLog *logger = commondata.logger;
|
||||||
FormatedData result;
|
FormatedData result;
|
||||||
|
|
|
@ -498,14 +498,18 @@ void sensorTask(void *param){
|
||||||
// Send supply voltage value all 1s
|
// Send supply voltage value all 1s
|
||||||
if(millis() > starttime5 + 1000 && String(powsensor1) == "off"){
|
if(millis() > starttime5 + 1000 && String(powsensor1) == "off"){
|
||||||
starttime5 = millis();
|
starttime5 = millis();
|
||||||
float rawVoltage = 0;
|
float rawVoltage = 0; // Default value
|
||||||
#if defined(BOARD_OBP40S3) && defined(VOLTAGE_SENSOR)
|
#ifdef BOARD_OBP40S3
|
||||||
|
sensors.batteryVoltage = 0; // If no sensor then zero voltage
|
||||||
|
#endif
|
||||||
|
#if defined(BOARD_OBP40S3) && defined(VOLTAGE_SENSOR)
|
||||||
rawVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.53) * 2; // Vin = 1/2 for OBP40
|
rawVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.53) * 2; // Vin = 1/2 for OBP40
|
||||||
|
sensors.batteryVoltage = rawVoltage * vslope + voffset; // Calibration
|
||||||
#endif
|
#endif
|
||||||
#ifdef BOARD_OBP60S3
|
#ifdef BOARD_OBP60S3
|
||||||
rawVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.17) * 20; // Vin = 1/20 for OBP60
|
rawVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.17) * 20; // Vin = 1/20 for OBP60
|
||||||
|
sensors.batteryVoltage = rawVoltage * vslope + voffset; // Calibration
|
||||||
#endif
|
#endif
|
||||||
sensors.batteryVoltage = rawVoltage * vslope + voffset; // Calibration
|
|
||||||
// Save new data in average array
|
// Save new data in average array
|
||||||
batV.reading(int(sensors.batteryVoltage * 100));
|
batV.reading(int(sensors.batteryVoltage * 100));
|
||||||
// Calculate the average values for different time lines from integer values
|
// Calculate the average values for different time lines from integer values
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#define BOARDINFO STRINGIZE(BOARD)
|
#define BOARDINFO STRINGIZE(BOARD)
|
||||||
#define PCBINFO STRINGIZE(PCBVERS)
|
#define PCBINFO STRINGIZE(PCBVERS)
|
||||||
#define DISPLAYINFO STRINGIZE(EPDTYPE)
|
#define DISPLAYINFO STRINGIZE(EPDTYPE)
|
||||||
|
#define GXEPD2INFO STRINGIZE(GXEPD2VERS)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Special system page, called directly with fast key sequence 5,4
|
* Special system page, called directly with fast key sequence 5,4
|
||||||
|
@ -38,6 +39,8 @@ String batt_sensor;
|
||||||
String solar_sensor;
|
String solar_sensor;
|
||||||
String gen_sensor;
|
String gen_sensor;
|
||||||
String rot_sensor;
|
String rot_sensor;
|
||||||
|
double homelat;
|
||||||
|
double homelon;
|
||||||
|
|
||||||
char mode = 'N'; // (N)ormal, (S)ettings, (D)evice list, (C)ard
|
char mode = 'N'; // (N)ormal, (S)ettings, (D)evice list, (C)ard
|
||||||
|
|
||||||
|
@ -64,6 +67,8 @@ public:
|
||||||
solar_sensor = common.config->getString(common.config->usePowSensor2);
|
solar_sensor = common.config->getString(common.config->usePowSensor2);
|
||||||
gen_sensor = common.config->getString(common.config->usePowSensor3);
|
gen_sensor = common.config->getString(common.config->usePowSensor3);
|
||||||
rot_sensor = common.config->getString(common.config->useRotSensor);
|
rot_sensor = common.config->getString(common.config->useRotSensor);
|
||||||
|
homelat = common.config->getString(common.config->homeLAT).toDouble();
|
||||||
|
homelon = common.config->getString(common.config->homeLON).toDouble();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void setupKeys(){
|
virtual void setupKeys(){
|
||||||
|
@ -198,19 +203,21 @@ public:
|
||||||
|
|
||||||
getdisplay().setCursor(8, 95);
|
getdisplay().setCursor(8, 95);
|
||||||
getdisplay().print("Firmware version: ");
|
getdisplay().print("Firmware version: ");
|
||||||
getdisplay().setCursor(160, 95);
|
getdisplay().setCursor(150, 95);
|
||||||
getdisplay().print(VERSINFO);
|
getdisplay().print(VERSINFO);
|
||||||
|
|
||||||
getdisplay().setCursor(8, 113);
|
getdisplay().setCursor(8, 113);
|
||||||
getdisplay().print("Board version: ");
|
getdisplay().print("Board version: ");
|
||||||
getdisplay().setCursor(160, 113);
|
getdisplay().setCursor(150, 113);
|
||||||
getdisplay().print(BOARDINFO);
|
getdisplay().print(BOARDINFO);
|
||||||
getdisplay().print(String(" HW ") + String(PCBINFO));
|
getdisplay().print(String(" HW ") + String(PCBINFO));
|
||||||
|
|
||||||
getdisplay().setCursor(8, 131);
|
getdisplay().setCursor(8, 131);
|
||||||
getdisplay().print("Display version: ");
|
getdisplay().print("Display version: ");
|
||||||
getdisplay().setCursor(160, 131);
|
getdisplay().setCursor(150, 131);
|
||||||
getdisplay().print(DISPLAYINFO);
|
getdisplay().print(DISPLAYINFO);
|
||||||
|
getdisplay().print("; GxEPD2 v");
|
||||||
|
getdisplay().print(GXEPD2INFO);
|
||||||
|
|
||||||
getdisplay().setCursor(8, 265);
|
getdisplay().setCursor(8, 265);
|
||||||
#ifdef BOARD_OBP60S3
|
#ifdef BOARD_OBP60S3
|
||||||
|
@ -285,34 +292,44 @@ public:
|
||||||
// left column
|
// left column
|
||||||
getdisplay().setCursor(x0, y0);
|
getdisplay().setCursor(x0, y0);
|
||||||
getdisplay().print("Simulation:");
|
getdisplay().print("Simulation:");
|
||||||
getdisplay().setCursor(140, y0);
|
getdisplay().setCursor(120, y0);
|
||||||
getdisplay().print(simulation ? "on" : "off");
|
getdisplay().print(simulation ? "on" : "off");
|
||||||
|
|
||||||
getdisplay().setCursor(x0, y0 + 16);
|
getdisplay().setCursor(x0, y0 + 16);
|
||||||
getdisplay().print("Environment:");
|
getdisplay().print("Environment:");
|
||||||
getdisplay().setCursor(140, y0 + 16);
|
getdisplay().setCursor(120, y0 + 16);
|
||||||
getdisplay().print(env_module);
|
getdisplay().print(env_module);
|
||||||
|
|
||||||
getdisplay().setCursor(x0, y0 + 32);
|
getdisplay().setCursor(x0, y0 + 32);
|
||||||
getdisplay().print("Buzzer:");
|
getdisplay().print("Buzzer:");
|
||||||
getdisplay().setCursor(140, y0 + 32);
|
getdisplay().setCursor(120, y0 + 32);
|
||||||
getdisplay().print(buzzer_mode);
|
getdisplay().print(buzzer_mode);
|
||||||
|
|
||||||
getdisplay().setCursor(x0, y0 + 64);
|
getdisplay().setCursor(x0, y0 + 64);
|
||||||
getdisplay().print("GPS:");
|
getdisplay().print("GPS:");
|
||||||
getdisplay().setCursor(140, y0 + 64);
|
getdisplay().setCursor(120, y0 + 64);
|
||||||
getdisplay().print(gps_module);
|
getdisplay().print(gps_module);
|
||||||
|
|
||||||
getdisplay().setCursor(x0, y0 + 80);
|
getdisplay().setCursor(x0, y0 + 80);
|
||||||
getdisplay().print("RTC:");
|
getdisplay().print("RTC:");
|
||||||
getdisplay().setCursor(140, y0 + 80);
|
getdisplay().setCursor(120, y0 + 80);
|
||||||
getdisplay().print(rtc_module);
|
getdisplay().print(rtc_module);
|
||||||
|
|
||||||
getdisplay().setCursor(x0, y0 + 96);
|
getdisplay().setCursor(x0, y0 + 96);
|
||||||
getdisplay().print("Wifi:");
|
getdisplay().print("Wifi:");
|
||||||
getdisplay().setCursor(140, y0 + 96);
|
getdisplay().setCursor(120, y0 + 96);
|
||||||
getdisplay().print(commonData->status.wifiApOn ? "on" : "off");
|
getdisplay().print(commonData->status.wifiApOn ? "on" : "off");
|
||||||
|
|
||||||
|
// Home location
|
||||||
|
getdisplay().setCursor(x0, y0 + 128);
|
||||||
|
getdisplay().print("Home Lat.:");
|
||||||
|
getdisplay().setCursor(120, y0 + 128);
|
||||||
|
getdisplay().print(formatLatitude(homelat));
|
||||||
|
getdisplay().setCursor(x0, y0 + 144);
|
||||||
|
getdisplay().print("Home Lon.:");
|
||||||
|
getdisplay().setCursor(120, y0 + 144);
|
||||||
|
getdisplay().print(formatLongitude(homelon));
|
||||||
|
|
||||||
// right column
|
// right column
|
||||||
getdisplay().setCursor(202, y0);
|
getdisplay().setCursor(202, y0);
|
||||||
getdisplay().print("Batt. sensor:");
|
getdisplay().print("Batt. sensor:");
|
||||||
|
|
|
@ -187,7 +187,6 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
// Logging voltage value
|
// Logging voltage value
|
||||||
if (raw == 0) return;
|
|
||||||
LOG_DEBUG(GwLog::LOG,"Drawing at PageVoltage, Type:%s %s:=%f", batType, name1.c_str(), raw);
|
LOG_DEBUG(GwLog::LOG,"Drawing at PageVoltage, Type:%s %s:=%f", batType, name1.c_str(), raw);
|
||||||
|
|
||||||
// Draw page
|
// Draw page
|
||||||
|
|
|
@ -168,6 +168,8 @@ class PageStruct{
|
||||||
// Standard format functions without overhead
|
// Standard format functions without overhead
|
||||||
String formatDate(String fmttype, uint16_t year, uint8_t month, uint8_t day);
|
String formatDate(String fmttype, uint16_t year, uint8_t month, uint8_t day);
|
||||||
String formatTime(char fmttype, uint8_t hour, uint8_t minute, uint8_t second);
|
String formatTime(char fmttype, uint8_t hour, uint8_t minute, uint8_t second);
|
||||||
|
String formatLatitude(double lat);
|
||||||
|
String formatLongitude(double lon);
|
||||||
|
|
||||||
// Structure for formatted boat values
|
// Structure for formatted boat values
|
||||||
typedef struct{
|
typedef struct{
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
Debugging tool
|
||||||
|
##############
|
||||||
|
|
||||||
|
log.txt = text file with error messages from terminal console
|
||||||
|
|
||||||
|
tools/decoder.py -p ESP32S3 -t ~/.platformio/packages/toolchain-xtensa-esp32s3/ -e .pio/build/obp60_s3/firmware.elf log.txt
|
|
@ -0,0 +1,30 @@
|
||||||
|
# PlatformIO extra script for obp60task
|
||||||
|
|
||||||
|
epdtype = "unknown"
|
||||||
|
pcbvers = "unknown"
|
||||||
|
for x in env["BUILD_FLAGS"]:
|
||||||
|
if x.startswith("-D HARDWARE_"):
|
||||||
|
pcbvers = x.split('_')[1]
|
||||||
|
if x.startswith("-D DISPLAY_"):
|
||||||
|
epdtype = x.split('_')[1]
|
||||||
|
|
||||||
|
propfilename = os.path.join(env["PROJECT_LIBDEPS_DIR"], env["PIOENV"], "GxEPD2/library.properties")
|
||||||
|
properties = {}
|
||||||
|
with open(propfilename, 'r') as file:
|
||||||
|
for line in file:
|
||||||
|
match = re.match(r'^([^=]+)=(.*)$', line)
|
||||||
|
if match:
|
||||||
|
key = match.group(1).strip()
|
||||||
|
value = match.group(2).strip()
|
||||||
|
properties[key] = value
|
||||||
|
|
||||||
|
gxepd2vers = "unknown"
|
||||||
|
try:
|
||||||
|
if properties["name"] == "GxEPD2":
|
||||||
|
gxepd2vers = properties["version"]
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
env["CPPDEFINES"].extend([("BOARD", env["BOARD"]), ("EPDTYPE", epdtype), ("PCBVERS", pcbvers), ("GXEPD2VERS", gxepd2vers)])
|
||||||
|
|
||||||
|
print("added hardware info to CPPDEFINES")
|
|
@ -713,7 +713,7 @@ void OBP60Task(GwApi *api){
|
||||||
}
|
}
|
||||||
|
|
||||||
// #9 or #10 Refresh display after a new page after 4s waiting time and if refresh is disabled
|
// #9 or #10 Refresh display after a new page after 4s waiting time and if refresh is disabled
|
||||||
if(refreshmode == true && (keyboardMessage == 9 || keyboardMessage == 10)){
|
if(refreshmode == true && (keyboardMessage == 9 || keyboardMessage == 10 || keyboardMessage == 4 || keyboardMessage == 3)){
|
||||||
starttime4 = millis();
|
starttime4 = millis();
|
||||||
starttime2 = millis(); // Reset the timer for full display update
|
starttime2 = millis(); // Reset the timer for full display update
|
||||||
delayedDisplayUpdate = true;
|
delayedDisplayUpdate = true;
|
||||||
|
|
Loading…
Reference in New Issue