From 990ebb3f346d6efde6410d31ececd423e0ef1804 Mon Sep 17 00:00:00 2001 From: Staars Date: Sun, 13 Dec 2020 18:41:12 +0100 Subject: [PATCH] more debug infos --- tasmota/xsns_36_mgc3130.ino | 55 +++++++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 17 deletions(-) diff --git a/tasmota/xsns_36_mgc3130.ino b/tasmota/xsns_36_mgc3130.ino index 036ecf009..c1001c3c8 100644 --- a/tasmota/xsns_36_mgc3130.ino +++ b/tasmota/xsns_36_mgc3130.ino @@ -69,7 +69,8 @@ const char HTTP_MGC_3130_SNS[] PROGMEM = "{s}" "%s" "{m}%s{e}" "{s}" "HwRev" "{m}%u.%u{e}" "{s}" "loaderVer" "{m}%u.%u{e}" - "{s}" "platVer" "{m}%u{e}"; // {s} = , {m} = , {e} = + "{s}" "platVer" "{m}%u{e}" + "{s}" "NoisePower" "{m}%s{e}"; // {s} = , {m} = , {e} = #endif // USE_WEBSERVER @@ -152,17 +153,18 @@ union MGC3130_Union{ float SDData[4]; // signal deviation } out; struct { - uint8_t header[3]; + uint8_t header[4]; // payload - uint8_t valid; + uint8_t valid; // 0xAA is valid uint8_t hwRev[2]; uint8_t parameterStartAddr; uint8_t loaderVersion[2]; uint8_t loaderPlatform; - uint8_t fwStartAddr; + uint8_t fwStartAddr; // should be 0x20 char fwVersion[120]; } fw; struct{ + uint8_t header[4]; uint8_t id; uint8_t size; uint16_t error; @@ -180,7 +182,7 @@ int16_t MGC3130_rotValue, MGC3130_lastSentRotValue = 0; uint16_t MGC3130_lastSentX, MGC3130_lastSentY, MGC3130_lastSentZ = 0; uint8_t hwRev[2], loaderVersion[2], loaderPlatform = 0; -char MGC3130_firmwareInfo[20]; +float MGC3130_noisePower = -1; uint8_t MGC3130_touchTimeout = 0; uint16_t MGC3130_touchCounter = 1; // measure how long you touch the surface in loop cycles @@ -194,6 +196,7 @@ uint8_t MGC3130_mode = 1; // 1-gesture; 2-airwheel; 3-position uint8_t MGC3130autoCal[] = {0x10, 0x00, 0x00, 0xA2, 0x80, 0x00 , 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF}; uint8_t MGC3130disableAirwheel[] = {0x10, 0x00, 0x00, 0xA2, 0x90, 0x00 , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00}; uint8_t MGC3130enableAirwheel[] = {0x10, 0x00, 0x00, 0xA2, 0x90, 0x00 , 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00}; +uint8_t MGC3130enableAll[] = {0x10, 0x00, 0x00, 0xA2, 0xA0, 0x00 , 0x00, 0x00, 0x3f, 0x18, 0x00, 0x00, 0x3f, 0x18, 0x00, 0x00}; void MGC3130_handleSensorData(){ if ( MGC_data.out.outputConfigMask.touchInfo && MGC3130_touchTimeout == 0){ @@ -220,6 +223,9 @@ void MGC3130_handleSensorData(){ MqttPublishSensor(); } } + if(MGC_data.out.systemInfo.noisePowerValid){ + MGC3130_noisePower = MGC_data.out.noisePower; + } } void MGC3130_sendMessage(uint8_t data[], uint8_t length){ @@ -394,7 +400,7 @@ void MGC3130_handleAirWheel(){ } void MGC3130_handleSystemStatus(){ - //Serial.println("Got System status"); + AddLog_P(LOG_LEVEL_DEBUG,PSTR("MGC3130: system_status: response to ID:%02x, error code: %04x"),MGC_data.status.id, MGC_data.status.error); } bool MGC3130_receiveMessage(){ @@ -407,16 +413,15 @@ bool MGC3130_receiveMessage(){ MGC3130_handleSystemStatus(); break; case MGC3130_FW_VERSION: - hwRev[0] = MGC_data.fw.hwRev[1]; - hwRev[1] = MGC_data.fw.hwRev[0]; - loaderVersion[0] = MGC_data.fw.loaderVersion[0]; - loaderVersion[1] = MGC_data.fw.loaderVersion[1]; + hwRev[1] = MGC_data.fw.hwRev[1]; + hwRev[0] = MGC_data.fw.hwRev[0]; + loaderVersion[1] = MGC_data.fw.loaderVersion[0]; + loaderVersion[0] = MGC_data.fw.loaderVersion[1]; loaderPlatform = MGC_data.fw.loaderPlatform; - snprintf_P(MGC3130_firmwareInfo, sizeof(MGC3130_firmwareInfo), PSTR("FW: %s"), MGC_data.fw.fwVersion); - MGC3130_firmwareInfo[20] = '\0'; - // Serial.print(MGC3130_firmwareInfo); + AddLog_P(LOG_LEVEL_INFO,PSTR("MGC3130: GestIC:%s"),MGC_data.fw.fwVersion); break; } + MGC_data.out.id = 0; return true; } return false; @@ -424,11 +429,12 @@ bool MGC3130_receiveMessage(){ bool MGC3130_readData() { + static uint8_t _lastCounter = 0; bool success = false; if (!digitalRead(MGC3130_xfer)){ pinMode(MGC3130_xfer, OUTPUT); digitalWrite(MGC3130_xfer, LOW); - Wire.requestFrom(MGC3130_I2C_ADDR, (uint16_t)32); // request usual data output + Wire.requestFrom(MGC3130_I2C_ADDR, (uint16_t)132); // request maximal data output MGC_data.buffer[0] = 4; // read at least header, but update after first read anyway unsigned char i = 0; @@ -438,6 +444,14 @@ bool MGC3130_readData() } digitalWrite(MGC3130_xfer, HIGH); pinMode(MGC3130_xfer, INPUT); + uint8_t _mismatch = MGC_data.out.counter - _lastCounter; + if(_mismatch != 1){ + if(i>4 && MGC_data.out.id != MGC3130_FW_VERSION){ + AddLog_P(LOG_LEVEL_DEBUG,PSTR("MGC3130: missed a packet, mismatch: %u"), _mismatch - 1); + AddLogBuffer(LOG_LEVEL_DEBUG,MGC_data.buffer,i); + } + } + _lastCounter = MGC_data.out.counter; success = true; } return success; @@ -537,7 +551,9 @@ void MGC3130_show(bool json) } #ifdef USE_WEBSERVER } else { - WSContentSend_PD(HTTP_MGC_3130_SNS, MGC3130stype, status_chr, hwRev[0], hwRev[1], loaderVersion[0], loaderVersion[1], loaderPlatform ); + char _noise[FLOATSZ]; + dtostrfd(MGC3130_noisePower, 2, _noise); + WSContentSend_PD(HTTP_MGC_3130_SNS, MGC3130stype, status_chr, hwRev[0], hwRev[1], loaderVersion[0], loaderVersion[1], loaderPlatform, _noise); #endif // USE_WEBSERVER } } @@ -552,6 +568,7 @@ void MGC3130_show(bool json) * Sensor36 | 1 | Gesture Mode * Sensor36 | 2 | Airwheel Mode * Sensor36 | 3 | Position Mode with x,y,z - z must be higher than half of the max. sensing height + * Sensor36 | 4 | Enable all data for debugging (noise level in web GUI) \*********************************************************************************************/ bool MGC3130CommandSensor() @@ -573,8 +590,12 @@ bool MGC3130CommandSensor() case 3: // position & touch MGC3130_mode = 3; MGC3130_sendMessage(MGC3130disableAirwheel,16); - break; + break; + case 4: // enable all readings for noise level for web GUI + MGC3130_sendMessage(MGC3130enableAll,16); + break; } + Response_P(PSTR("{\"MGC3130\":{\"mode\":%d}}"), MGC3130_mode); return serviced; } @@ -614,4 +635,4 @@ bool Xsns36(uint8_t function) return result; } #endif // USE_MGC3130 -#endif // USE_I2C \ No newline at end of file +#endif // USE_I2C