Merge pull request #507 from cyberman54/development
v1.9.84 -- dedicated to #36C3
This commit is contained in:
commit
92c4401db4
@ -3,7 +3,7 @@
|
||||
|
||||
Tutorial (in german language): https://www.heise.de/select/make/2019/1/1551099236518668
|
||||
|
||||
**IMPORTANT: MUST USE PLATFORMIO V4 (not v3.x)**
|
||||
**#36C3 attendees: i am on site (27th - 30th)! You might contact me via twitter @RecumbentTravel**
|
||||
|
||||
<img src="img/Paxcounter-title.jpg">
|
||||
<img src="img/Paxcounter-ttgo.jpg">
|
||||
|
@ -4,7 +4,7 @@
|
||||
#include "cyclic.h"
|
||||
#include "qrcode.h"
|
||||
|
||||
extern uint8_t DisplayIsOn;
|
||||
extern uint8_t DisplayIsOn, displaybuf[];
|
||||
|
||||
void refreshTheDisplay(bool nextPage = false);
|
||||
void init_display(bool verbose = false);
|
||||
|
@ -14,5 +14,7 @@
|
||||
void i2c_init(void);
|
||||
void i2c_deinit(void);
|
||||
int i2c_scan(void);
|
||||
uint8_t i2c_readBytes(uint8_t addr, uint8_t reg, uint8_t *data, uint8_t len);
|
||||
uint8_t i2c_writeBytes(uint8_t addr, uint8_t reg, uint8_t *data, uint8_t len);
|
||||
|
||||
#endif
|
@ -22,8 +22,6 @@ void AXP192_powerevent_IRQ(void);
|
||||
void AXP192_power(pmu_power_t powerlevel);
|
||||
void AXP192_init(void);
|
||||
void AXP192_showstatus(void);
|
||||
uint8_t i2c_writeBytes(uint8_t addr, uint8_t reg, uint8_t *data, uint8_t len);
|
||||
uint8_t i2c_readBytes(uint8_t addr, uint8_t reg, uint8_t *data, uint8_t len);
|
||||
|
||||
#endif // HAS_PMU
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
; ---> SELECT THE TARGET PLATFORM HERE! <---
|
||||
[board]
|
||||
;halfile = generic.h
|
||||
halfile = generic.h
|
||||
;halfile = ebox.h
|
||||
;halfile = eboxtube.h
|
||||
;halfile = ecopower.h
|
||||
@ -18,7 +18,7 @@
|
||||
;halfile = ttgov21old.h
|
||||
;halfile = ttgov21new.h
|
||||
;halfile = ttgofox.h
|
||||
halfile = ttgobeam.h
|
||||
;halfile = ttgobeam.h
|
||||
;halfile = ttgobeam10.h
|
||||
;halfile = fipy.h
|
||||
;halfile = lopy.h
|
||||
@ -43,7 +43,7 @@ description = Paxcounter is a device for metering passenger flows in realtime. I
|
||||
|
||||
[common]
|
||||
; for release_version use max. 10 chars total, use any decimal format like "a.b.c"
|
||||
release_version = 1.9.82
|
||||
release_version = 1.9.84
|
||||
; DEBUG LEVEL: For production run set to 0, otherwise device will leak RAM while running!
|
||||
; 0=None, 1=Error, 2=Warn, 3=Info, 4=Debug, 5=Verbose
|
||||
debug_level = 3
|
||||
@ -55,11 +55,11 @@ platform_espressif32 = espressif32@1.11.1
|
||||
monitor_speed = 115200
|
||||
upload_speed = 115200
|
||||
lib_deps_lora =
|
||||
;MCCI LoRaWAN LMIC library@>=3.1.0
|
||||
https://github.com/mcci-catena/arduino-lmic.git#5322dd1
|
||||
;MCCI LoRaWAN LMIC library@>=3.1.0 ; MCCI LMIC by Terrill Moore
|
||||
https://github.com/mcci-catena/arduino-lmic.git#8a62487
|
||||
lib_deps_display =
|
||||
ss_oled@=3.0.0
|
||||
;https://github.com/bitbank2/ss_oled.git#26f5d40
|
||||
;ss_oled@>=3.1.1 ; simple and small OLED lib by Larry Bank
|
||||
https://github.com/bitbank2/ss_oled.git#246d963
|
||||
BitBang_I2C@>=1.2.0
|
||||
QRCode@>=0.0.1
|
||||
lib_deps_matrix_display =
|
||||
@ -77,8 +77,7 @@ lib_deps_basic =
|
||||
76@>=1.2.2 ; #76 Timezone by Jack Christensen
|
||||
274@>=2.3.3 ; #274 RTC by Michael Miller
|
||||
SimpleButton
|
||||
https://github.com/lewisxhe/AXP202X_Library.git
|
||||
;AXP202X_Library@>=1.0.1
|
||||
AXP202X_Library@>=1.1.0 ; AXP202 PMU lib by Lewis He
|
||||
lib_deps_all =
|
||||
${common.lib_deps_basic}
|
||||
${common.lib_deps_lora}
|
||||
|
@ -56,7 +56,8 @@ static const char TAG[] = __FILE__;
|
||||
const char *printmonth[] = {"xxx", "Jan", "Feb", "Mar", "Apr", "May", "Jun",
|
||||
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
|
||||
uint8_t DisplayIsOn = 0;
|
||||
static uint8_t displaybuf[DISPLAY_WIDTH * DISPLAY_HEIGHT / 8] = {0};
|
||||
uint8_t displaybuf[DISPLAY_WIDTH * DISPLAY_HEIGHT / 8] = {0};
|
||||
static uint8_t plotbuf[DISPLAY_WIDTH * DISPLAY_HEIGHT / 8] = {0};
|
||||
|
||||
QRCode qrcode;
|
||||
|
||||
@ -83,7 +84,7 @@ void init_display(bool verbose) {
|
||||
#endif
|
||||
|
||||
// set display buffer
|
||||
//oledSetBackBuffer(displaybuf);
|
||||
oledSetBackBuffer(displaybuf);
|
||||
|
||||
// clear display
|
||||
oledSetContrast(DISPLAYCONTRAST);
|
||||
@ -111,7 +112,7 @@ void init_display(bool verbose) {
|
||||
: "ext.");
|
||||
|
||||
// give user some time to read or take picture
|
||||
oledDumpBuffer(NULL);
|
||||
oledDumpBuffer(displaybuf);
|
||||
delay(2000);
|
||||
oledFill(0x00, 1);
|
||||
#endif // VERBOSE
|
||||
@ -134,7 +135,7 @@ void init_display(bool verbose) {
|
||||
dp_printf(80, i + 3, FONT_NORMAL, 0, "%4.4s", deveui + i * 4);
|
||||
|
||||
// give user some time to read or take picture
|
||||
oledDumpBuffer(NULL);
|
||||
oledDumpBuffer(displaybuf);
|
||||
delay(8000);
|
||||
oledSetContrast(DISPLAYCONTRAST);
|
||||
oledFill(0x00, 1);
|
||||
@ -178,7 +179,7 @@ void refreshTheDisplay(bool nextPage) {
|
||||
}
|
||||
|
||||
draw_page(t, DisplayPage);
|
||||
oledDumpBuffer(NULL);
|
||||
oledDumpBuffer(displaybuf);
|
||||
|
||||
I2C_MUTEX_UNLOCK(); // release i2c bus access
|
||||
|
||||
@ -298,7 +299,7 @@ void draw_page(time_t t, uint8_t page) {
|
||||
|
||||
// page 1: pax graph
|
||||
case 1:
|
||||
oledDumpBuffer(displaybuf);
|
||||
oledDumpBuffer(plotbuf);
|
||||
break; // page1
|
||||
|
||||
// page 2: GPS
|
||||
@ -502,24 +503,22 @@ void oledPlotCurve(uint16_t count, bool reset) {
|
||||
if (col < DISPLAY_WIDTH - 1) // matrix not full -> increment column
|
||||
col++;
|
||||
else // matrix full -> scroll left 1 dot
|
||||
oledScrollBufferHorizontal(displaybuf, DISPLAY_WIDTH, DISPLAY_HEIGHT,
|
||||
true);
|
||||
oledScrollBufferHorizontal(plotbuf, DISPLAY_WIDTH, DISPLAY_HEIGHT, true);
|
||||
|
||||
} else // clear current dot
|
||||
oledDrawPixel(displaybuf, col, row, 0);
|
||||
oledDrawPixel(plotbuf, col, row, 0);
|
||||
|
||||
// scroll down, if necessary
|
||||
while ((count - v_scroll) > DISPLAY_HEIGHT - 1)
|
||||
v_scroll++;
|
||||
if (v_scroll)
|
||||
oledScrollBufferVertical(displaybuf, DISPLAY_WIDTH, DISPLAY_HEIGHT,
|
||||
v_scroll);
|
||||
oledScrollBufferVertical(plotbuf, DISPLAY_WIDTH, DISPLAY_HEIGHT, v_scroll);
|
||||
|
||||
// set new dot
|
||||
// row = DISPLAY_HEIGHT - 1 - (count - v_scroll) % DISPLAY_HEIGHT;
|
||||
row = DISPLAY_HEIGHT - 1 - count - v_scroll;
|
||||
last_count = count;
|
||||
oledDrawPixel(displaybuf, col, row, 1);
|
||||
oledDrawPixel(plotbuf, col, row, 1);
|
||||
}
|
||||
|
||||
#endif // HAS_DISPLAY
|
48
src/i2c.cpp
48
src/i2c.cpp
@ -89,3 +89,51 @@ int i2c_scan(void) {
|
||||
|
||||
return devices;
|
||||
}
|
||||
|
||||
// mutexed functions for i2c r/w access
|
||||
uint8_t i2c_readBytes(uint8_t addr, uint8_t reg, uint8_t *data, uint8_t len) {
|
||||
if (I2C_MUTEX_LOCK()) {
|
||||
|
||||
uint8_t ret = 0;
|
||||
Wire.beginTransmission(addr);
|
||||
Wire.write(reg);
|
||||
Wire.endTransmission(false);
|
||||
uint8_t cnt = Wire.requestFrom(addr, (uint8_t)len, (uint8_t)1);
|
||||
if (!cnt)
|
||||
ret = 0xFF;
|
||||
uint16_t index = 0;
|
||||
while (Wire.available()) {
|
||||
if (index > len) {
|
||||
ret = 0xFF;
|
||||
goto finish;
|
||||
}
|
||||
data[index++] = Wire.read();
|
||||
}
|
||||
|
||||
finish:
|
||||
I2C_MUTEX_UNLOCK(); // release i2c bus access
|
||||
return ret;
|
||||
} else {
|
||||
ESP_LOGW(TAG, "[%0.3f] i2c mutex lock failed", millis() / 1000.0);
|
||||
return 0xFF;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t i2c_writeBytes(uint8_t addr, uint8_t reg, uint8_t *data, uint8_t len) {
|
||||
if (I2C_MUTEX_LOCK()) {
|
||||
|
||||
uint8_t ret = 0;
|
||||
Wire.beginTransmission(addr);
|
||||
Wire.write(reg);
|
||||
for (uint16_t i = 0; i < len; i++) {
|
||||
Wire.write(data[i]);
|
||||
}
|
||||
ret = Wire.endTransmission();
|
||||
|
||||
I2C_MUTEX_UNLOCK(); // release i2c bus access
|
||||
return ret ? ret : 0xFF;
|
||||
} else {
|
||||
ESP_LOGW(TAG, "[%0.3f] i2c mutex lock failed", millis() / 1000.0);
|
||||
return 0xFF;
|
||||
}
|
||||
}
|
||||
|
@ -49,6 +49,10 @@ void start_ota_update() {
|
||||
#else
|
||||
oledInit(OLED_128x64, ANGLE_FLIPY, false, -1, -1, 400000L);
|
||||
#endif
|
||||
|
||||
// set display buffer
|
||||
oledSetBackBuffer(displaybuf);
|
||||
|
||||
oledFill(0, 1);
|
||||
dp_printf(0, 0, 0, 1, "SOFTWARE UPDATE");
|
||||
dp_printf(0, 1, 0, 0, "WiFi connect ..");
|
||||
@ -56,7 +60,7 @@ void start_ota_update() {
|
||||
dp_printf(0, 3, 0, 0, "Fetching ..");
|
||||
dp_printf(0, 4, 0, 0, "Downloading ..");
|
||||
dp_printf(0, 5, 0, 0, "Rebooting ..");
|
||||
oledDumpBuffer(NULL);
|
||||
oledDumpBuffer(displaybuf);
|
||||
#endif
|
||||
|
||||
ESP_LOGI(TAG, "Starting Wifi OTA update");
|
||||
@ -309,7 +313,7 @@ void ota_display(const uint8_t row, const std::string status,
|
||||
dp_printf(0, 7, 0, 0, " ");
|
||||
dp_printf(0, 7, 0, 0, msg.substr(0, 16).c_str());
|
||||
}
|
||||
oledDumpBuffer(NULL);
|
||||
oledDumpBuffer(displaybuf);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -147,55 +147,6 @@ void AXP192_init(void) {
|
||||
}
|
||||
}
|
||||
|
||||
// helper functions for mutexing pmu i2c access
|
||||
uint8_t i2c_readBytes(uint8_t addr, uint8_t reg, uint8_t *data, uint8_t len) {
|
||||
if (I2C_MUTEX_LOCK()) {
|
||||
|
||||
uint8_t ret = 0;
|
||||
Wire.beginTransmission(addr);
|
||||
Wire.write(reg);
|
||||
Wire.endTransmission(false);
|
||||
uint8_t cnt = Wire.requestFrom(addr, (uint8_t)len, (uint8_t)1);
|
||||
if (!cnt)
|
||||
ret = 0xFF;
|
||||
uint16_t index = 0;
|
||||
while (Wire.available()) {
|
||||
if (index > len) {
|
||||
ret = 0xFF;
|
||||
goto finish;
|
||||
}
|
||||
data[index++] = Wire.read();
|
||||
}
|
||||
|
||||
finish:
|
||||
I2C_MUTEX_UNLOCK(); // release i2c bus access
|
||||
return ret;
|
||||
} else {
|
||||
ESP_LOGW(TAG, "[%0.3f] i2c mutex lock failed", millis() / 1000.0);
|
||||
return 0xFF;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t i2c_writeBytes(uint8_t addr, uint8_t reg, uint8_t *data, uint8_t len) {
|
||||
if (I2C_MUTEX_LOCK()) {
|
||||
|
||||
uint8_t ret = 0;
|
||||
Wire.beginTransmission(addr);
|
||||
Wire.write(reg);
|
||||
for (uint16_t i = 0; i < len; i++) {
|
||||
Wire.write(data[i]);
|
||||
}
|
||||
ret = Wire.endTransmission();
|
||||
|
||||
I2C_MUTEX_UNLOCK(); // release i2c bus access
|
||||
// return ret ? 0xFF : ret;
|
||||
return ret ? ret : 0xFF;
|
||||
} else {
|
||||
ESP_LOGW(TAG, "[%0.3f] i2c mutex lock failed", millis() / 1000.0);
|
||||
return 0xFF;
|
||||
}
|
||||
}
|
||||
|
||||
#endif // HAS_PMU
|
||||
|
||||
void calibrate_voltage(void) {
|
||||
|
Loading…
Reference in New Issue
Block a user