chester4444 / esp-multical21

ESP8266/ESP32 decrypts wireless MBus frames from a Multical21 water meter
GNU General Public License v3.0
90 stars 33 forks source link

include/WaterMeter.h:231:5: error: 'IRAM_ATTR' does not name a type #18

Closed mgartin closed 8 months ago

mgartin commented 9 months ago

First off - thank you for sharing this. I have finally gotten around and wired together my CC1101 with a NodeMCU (ESP8266 I think it is the ESP-12E).

I have managed to decrypt my Multical 21 key, and updated config.h with my wifi credentials and the serial and key for the multical.

It is the first time I use platformio, and although "pio check" succeeds, it fails when I run "pio run" to build the project:

host:~/gitwork/esp-multical21(master)$ pio project init --ide emacs --board nodemcuv2

host:~/gitwork/esp-multical21(master)$ pio check
Checking esp8266 > cppcheck (framework: arduino; platform: espressif8266; board: d1_mini_lite)
...
=========================================== [PASSED] Took 43.52 seconds ===========================================

Component                               HIGH    MEDIUM    LOW
-------------------------------------  ------  --------  -----
.pio/libdeps/esp8266/Crypto              0        0       70
.pio/libdeps/esp8266/PubSubClient/src    0        0        6
include                                  0        0        3
src                                      0        15      16

Total                                    0        15      95

Environment    Tool      Status    Duration
-------------  --------  --------  ------------
esp8266        cppcheck  PASSED    00:00:43.525
=========================================== 1 succeeded in 00:00:43.525 ===========================================

host:~/gitwork/esp-multical21(master)$ pio run
Processing esp8266 (framework: arduino; platform: espressif8266; board: d1_mini_lite)
--------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif8266/d1_mini_lite.html
PLATFORM: Espressif 8266 (1.8.0) > WeMos D1 mini Lite
HARDWARE: ESP8266 80MHz, 80KB RAM, 1MB Flash
PACKAGES: 
 - framework-arduinoespressif8266 @ 2.20402.4 (2.4.2) 
 - tool-esptool @ 1.413.0 (4.13) 
 - toolchain-xtensa @ 1.40802.0 (4.8.2)
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 28 compatible libraries
Scanning dependencies...
Dependency Graph
|-- Crypto @ 0.2.0
|-- PubSubClient @ 2.8.0
|-- ArduinoOTA @ 1.0
|-- ESP8266WiFi @ 1.0
|-- ESP8266mDNS
|-- SPI @ 1.0
Building in release mode
Compiling .pio/build/esp8266/src/WaterMeter.cpp.o
Compiling .pio/build/esp8266/src/main.cpp.o
Compiling .pio/build/esp8266/lib162/Crypto/AESCommon.cpp.o
Compiling .pio/build/esp8266/lib162/Crypto/AESEsp32.cpp.o
Compiling .pio/build/esp8266/lib162/Crypto/AuthenticatedCipher.cpp.o
Compiling .pio/build/esp8266/lib162/Crypto/BLAKE2b.cpp.o
Compiling .pio/build/esp8266/lib162/Crypto/BLAKE2s.cpp.o
In file included from src/WaterMeter.cpp:15:0:
include/WaterMeter.h:231:5: error: 'IRAM_ATTR' does not name a type
     IRAM_ATTR static void cc1101Isr(void *p);
     ^
include/WaterMeter.h:252:5: error: 'IRAM_ATTR' does not name a type
     IRAM_ATTR void instanceCC1101Isr();
     ^
src/WaterMeter.cpp:195:1: error: 'IRAM_ATTR' does not name a type
 IRAM_ATTR void WaterMeter::instanceCC1101Isr()
 ^
src/WaterMeter.cpp:202:1: error: 'IRAM_ATTR' does not name a type
 IRAM_ATTR void WaterMeter::cc1101Isr(void *p)
 ^
src/WaterMeter.cpp: In member function 'void WaterMeter::loop()':
src/WaterMeter.cpp:223:60: error: 'cc1101Isr' was not declared in this scope
     attachInterruptArg(digitalPinToInterrupt(CC1101_GDO0), cc1101Isr, this, FALLING);
                                                            ^
src/WaterMeter.cpp:223:84: error: 'attachInterruptArg' was not declared in this scope
     attachInterruptArg(digitalPinToInterrupt(CC1101_GDO0), cc1101Isr, this, FALLING);
                                                                                    ^
src/WaterMeter.cpp: In member function 'void WaterMeter::begin(uint8_t*, uint8_t*)':
src/WaterMeter.cpp:246:58: error: 'cc1101Isr' was not declared in this scope
   attachInterruptArg(digitalPinToInterrupt(CC1101_GDO0), cc1101Isr, this, FALLING);
                                                          ^
src/WaterMeter.cpp:246:82: error: 'attachInterruptArg' was not declared in this scope
   attachInterruptArg(digitalPinToInterrupt(CC1101_GDO0), cc1101Isr, this, FALLING);
                                                                                  ^
*** [.pio/build/esp8266/src/WaterMeter.cpp.o] Error 1
In file included from src/main.cpp:24:0:
include/WaterMeter.h:231:5: error: 'IRAM_ATTR' does not name a type
     IRAM_ATTR static void cc1101Isr(void *p);
     ^
include/WaterMeter.h:252:5: error: 'IRAM_ATTR' does not name a type
     IRAM_ATTR void instanceCC1101Isr();
     ^
src/main.cpp: In function 'bool ConnectWifi()':
src/main.cpp:93:8: error: 'class ESP8266WiFiClass' has no member named 'setHostname'
   WiFi.setHostname(ESP_NAME);
        ^
*** [.pio/build/esp8266/src/main.cpp.o] Error 1
============================================ [FAILED] Took 1.18 seconds ============================================

Environment    Status    Duration
-------------  --------  ------------
esp8266        FAILED    00:00:01.182
====================================== 1 failed, 0 succeeded in 00:00:01.182 ======================================

So I realized I was maybe building for the wrong board (board: d1_mini_lite), and found that I should specify the board ("-e nodemcuv2"), and did, but got no further:

host:~/gitwork/esp-multical21(master)$ platformio lib -e nodemcuv2 install knolleary/PubSubClient
host:~/gitwork/esp-multical21(master)$ platformio lib -e nodemcuv2 install rweather/Crypto
host:~/gitwork/esp-multical21(master)$ pio check -e nodemcuv2
...
Environment    Tool      Status    Duration
-------------  --------  --------  ------------
nodemcuv2      cppcheck  PASSED    00:00:44.278
...

host:~/gitwork/esp-multical21(master)$ pio project config
Computed project configuration for /home/martin/gitwork/esp-multical21
platformio
----------
default_envs  =  esp8266

env:esp32
---------
framework        =  arduino
platform         =  espressif32
board            =  az-delivery-devkit-v4
board_build.mcu  =  esp32
lib_deps         =  rweather/Crypto@^0.4.0
                    knolleary/PubSubClient@^2.8.0

env:esp8266
-----------
framework        =  arduino
platform         =  espressif8266
board            =  d1_mini_lite
board_build.mcu  =  esp8266
lib_deps         =  rweather/Crypto@^0.2.0
                    knolleary/PubSubClient@^2.8.0
monitor_speed    =  115200

env:nodemcuv2
-------------
platform   =  espressif8266
board      =  nodemcuv2
framework  =  arduino
lib_deps   =  knolleary/PubSubClient@^2.8.0
              rweather/Crypto@^0.4.0

host:~/gitwork/esp-multical21(master)$ pio run -e nodemcuv2
Processing nodemcuv2 (platform: espressif8266; board: nodemcuv2; framework: arduino)
--------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif8266/nodemcuv2.html
PLATFORM: Espressif 8266 (1.8.0) > NodeMCU 1.0 (ESP-12E Module)
HARDWARE: ESP8266 80MHz, 80KB RAM, 4MB Flash
PACKAGES: 
 - framework-arduinoespressif8266 @ 2.20402.4 (2.4.2) 
 - tool-esptool @ 1.413.0 (4.13) 
 - toolchain-xtensa @ 1.40802.0 (4.8.2)
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 28 compatible libraries
Scanning dependencies...
Dependency Graph
|-- Crypto @ 0.4.0
|-- PubSubClient @ 2.8.0
|-- ArduinoOTA @ 1.0
|-- ESP8266WiFi @ 1.0
|-- ESP8266mDNS
|-- SPI @ 1.0
Building in release mode
Compiling .pio/build/nodemcuv2/src/WaterMeter.cpp.o
Compiling .pio/build/nodemcuv2/src/main.cpp.o
Compiling .pio/build/nodemcuv2/src/utils.cpp.o
Generating LD script .pio/build/nodemcuv2/ld/eagle.app.v6.common.ld
Compiling .pio/build/nodemcuv2/lib82e/Crypto/AES128.cpp.o
Compiling .pio/build/nodemcuv2/lib82e/Crypto/AES192.cpp.o
Compiling .pio/build/nodemcuv2/lib82e/Crypto/AES256.cpp.o
In file included from src/WaterMeter.cpp:15:0:
include/WaterMeter.h:231:5: error: 'IRAM_ATTR' does not name a type
     IRAM_ATTR static void cc1101Isr(void *p);
     ^
include/WaterMeter.h:252:5: error: 'IRAM_ATTR' does not name a type
     IRAM_ATTR void instanceCC1101Isr();
     ^
src/WaterMeter.cpp:195:1: error: 'IRAM_ATTR' does not name a type
 IRAM_ATTR void WaterMeter::instanceCC1101Isr()
 ^
src/WaterMeter.cpp:202:1: error: 'IRAM_ATTR' does not name a type
 IRAM_ATTR void WaterMeter::cc1101Isr(void *p)
 ^
src/WaterMeter.cpp: In member function 'void WaterMeter::loop()':
src/WaterMeter.cpp:223:60: error: 'cc1101Isr' was not declared in this scope
     attachInterruptArg(digitalPinToInterrupt(CC1101_GDO0), cc1101Isr, this, FALLING);
                                                            ^
src/WaterMeter.cpp:223:84: error: 'attachInterruptArg' was not declared in this scope
     attachInterruptArg(digitalPinToInterrupt(CC1101_GDO0), cc1101Isr, this, FALLING);
                                                                                    ^
src/WaterMeter.cpp: In member function 'void WaterMeter::begin(uint8_t*, uint8_t*)':
src/WaterMeter.cpp:246:58: error: 'cc1101Isr' was not declared in this scope
   attachInterruptArg(digitalPinToInterrupt(CC1101_GDO0), cc1101Isr, this, FALLING);
                                                          ^
src/WaterMeter.cpp:246:82: error: 'attachInterruptArg' was not declared in this scope
   attachInterruptArg(digitalPinToInterrupt(CC1101_GDO0), cc1101Isr, this, FALLING);
                                                                                  ^
*** [.pio/build/nodemcuv2/src/WaterMeter.cpp.o] Error 1
In file included from src/main.cpp:24:0:
include/WaterMeter.h:231:5: error: 'IRAM_ATTR' does not name a type
     IRAM_ATTR static void cc1101Isr(void *p);
     ^
include/WaterMeter.h:252:5: error: 'IRAM_ATTR' does not name a type
     IRAM_ATTR void instanceCC1101Isr();
     ^
src/main.cpp: In function 'bool ConnectWifi()':
src/main.cpp:93:8: error: 'class ESP8266WiFiClass' has no member named 'setHostname'
   WiFi.setHostname(ESP_NAME);
        ^
*** [.pio/build/nodemcuv2/src/main.cpp.o] Error 1
============================================ [FAILED] Took 1.29 seconds ============================================

Environment    Status    Duration
-------------  --------  ------------
nodemcuv2      FAILED    00:00:01.288
====================================== 1 failed, 0 succeeded in 00:00:01.288 ======================================

Can someone help me out here? Would be much appreciated!

mgartin commented 8 months ago

Solved: I think I for some reason had an outdated version of some library, as I found similar report here and here. Using VSCode, PlatformIO IDE and updating libraries there prior to building fixed the problem.