Recent wiringpi/JNI build

Post Reply
Gus189
Posts: 13
Joined: Fri Feb 12, 2021 4:43 am
languages_spoken: english
ODROIDs: C4
Has thanked: 5 times
Been thanked: 0
Contact:

Recent wiringpi/JNI build

Post by Gus189 »

Hello,
Wondering if anyone had a fairly recent example of setting up wiringPi/JNI in Android Studio...

Been hacking away at some examples I found here but they won't build in recent Android Studio with Android 8+...

I'm not a super expert on JNI stuff and was wondering if anyone had any recent examples or howTos.

I'm running Android 9 on the C4, sdk 27+

Thanks,
Gus

User avatar
joerg
Posts: 1372
Joined: Tue Apr 01, 2014 2:14 am
languages_spoken: german, english, español
ODROIDs: C1, C1+, C2, N1, N2, C4
Location: Germany
Has thanked: 92 times
Been thanked: 210 times
Contact:

Re: Recent wiringpi/JNI build

Post by joerg »

Are you using Java or Kotlin?
I can set up an example and guide you through the first steps.

Gus189
Posts: 13
Joined: Fri Feb 12, 2021 4:43 am
languages_spoken: english
ODROIDs: C4
Has thanked: 5 times
Been thanked: 0
Contact:

Re: Recent wiringpi/JNI build

Post by Gus189 »

Java. Thanks!

User avatar
joerg
Posts: 1372
Joined: Tue Apr 01, 2014 2:14 am
languages_spoken: german, english, español
ODROIDs: C1, C1+, C2, N1, N2, C4
Location: Germany
Has thanked: 92 times
Been thanked: 210 times
Contact:

Re: Recent wiringpi/JNI build

Post by joerg »

OK. So I recommend to first clone the wiringPi from github and compile it:

Code: Select all

git clone https://github.com/hardkernel/wiringPi.git
cd wiringPi
The to make it compile with the NDK add a jni folder and add a Application.mk and a Android.mk there.
wiringPi/jni/Android.mk

Code: Select all

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_C_INCLUDES += \
    $(LOCAL_PATH)/../wiringPi

LOCAL_MODULE    := wiringPi
LOCAL_SRC_FILES := \
        ../wiringPi/ads1115.c        \
        ../wiringPi/mcp23008.c        \
        ../wiringPi/mcp4802.c        \
        ../wiringPi/piHiPri.c        \
        ../wiringPi/sr595.c        \
        ../wiringPi/bmp180.c        \
        ../wiringPi/mcp23016.c        \
        ../wiringPi/odroidc1.c        \
        ../wiringPi/odroidn2.c        \
        ../wiringPi/piThread.c        \
        ../wiringPi/wiringPi.c        \
        ../wiringPi/mcp23017.c        \
        ../wiringPi/odroidc2.c        \
        ../wiringPi/odroidc4.c        \
        ../wiringPi/odroidhc4.c        \
        ../wiringPi/drcSerial.c        \
        ../wiringPi/mcp23s08.c        \
        ../wiringPi/odroidn1.c        \
        ../wiringPi/wiringPiI2C.c        \
        ../wiringPi/ds18b20.c        \
        ../wiringPi/mcp23s17.c        \
        ../wiringPi/sn3218.c        \
        ../wiringPi/wiringPiSPI.c        \
        ../wiringPi/htu21d.c        \
        ../wiringPi/mcp3002.c        \
        ../wiringPi/odroidxu3.c        \
        ../wiringPi/softPwm.c        \
        ../wiringPi/wiringSerial.c        \
        ../wiringPi/max31855.c        \
        ../wiringPi/mcp3004.c        \
        ../wiringPi/pcf8574.c        \
        ../wiringPi/softServo.c        \
        ../wiringPi/wiringShift.c        \
        ../wiringPi/max5322.c        \
        ../wiringPi/mcp3422.c        \
        ../wiringPi/pcf8591.c        \
        ../wiringPi/softTone.c



LOCAL_CFLAGS    += -UNDEBUG -DANDROID -Wno-return-type

LOCAL_LDLIBS    := -ldl -llog
include $(BUILD_SHARED_LIBRARY)


include $(CLEAR_VARS)
LOCAL_C_INCLUDES += \
    $(LOCAL_PATH)/../wiringPi

LOCAL_MODULE    := wiringPiDev
LOCAL_SRC_FILES := \
    ../devLib/ds1302.c     \
    ../devLib/maxdetect.c  \
    ../devLib/piNes.c      \
    ../devLib/gertboard.c  \
    ../devLib/lcd128x64.c  \
    ../devLib/lcd.c        \
    ../devLib/piGlow.c     \
    ../devLib/scrollPhat.c \
    ../devLib/piFace.c 

LOCAL_SHARED_LIBRARIES := libwiringPi

LOCAL_LDLIBS    := -ldl -llog

LOCAL_CFLAGS    += -DEBUG -DANDROID  -Wno-return-type
include $(BUILD_SHARED_LIBRARY)


include $(CLEAR_VARS)

LOCAL_MODULE    := gpio
LOCAL_SRC_FILES := ../gpio/gpio.c ../gpio/readall.c
LOCAL_C_INCLUDES +=   $(LOCAL_PATH)/../wiringPi $(LOCAL_PATH)/../devLib/

LOCAL_CFLAGS    += -DEBUG -DANDROID -Wno-return-type
LOCAL_LDLIBS := -llog
LOCAL_SHARED_LIBRARIES := libwiringPi libwiringPiDev

include $(BUILD_EXECUTABLE)
wiringPi/jni/Application.mk

Code: Select all

NDK_TOOLCHAIN_VERSION=clang
APP_ABI :=  armeabi-v7a arm64-v8a
APP_PLATFORM := android-21
It's old style, but it works. ;)
Compile it:

Code: Select all

/path/to/Android/Sdk/ndk-bundle/ndk-build -B
...
[arm64-v8a] Install        : gpio => libs/arm64-v8a/gpio
[arm64-v8a] Install        : libwiringPi.so => libs/arm64-v8a/libwiringPi.so
[arm64-v8a] Install        : libwiringPiDev.so => libs/arm64-v8a/libwiringPiDev.
Do it, meanwhile I will write nexte steps...
These users thanked the author joerg for the post (total 3):
tobetter (Fri Feb 19, 2021 2:02 am) • Gus189 (Fri Feb 19, 2021 2:27 am) • odroid (Fri Feb 19, 2021 9:22 am)

Gus189
Posts: 13
Joined: Fri Feb 12, 2021 4:43 am
languages_spoken: english
ODROIDs: C4
Has thanked: 5 times
Been thanked: 0
Contact:

Re: Recent wiringpi/JNI build

Post by Gus189 »

Cool, I'll try to get started tonight.

Thanks,
Paul

User avatar
joerg
Posts: 1372
Joined: Tue Apr 01, 2014 2:14 am
languages_spoken: german, english, español
ODROIDs: C1, C1+, C2, N1, N2, C4
Location: Germany
Has thanked: 92 times
Been thanked: 210 times
Contact:

Re: Recent wiringpi/JNI build

Post by joerg »

Then create a new project in AndroidStudio.
You need to add a folder cpp under src/main. Then add file CmakeLists.txt with right mouse click on it: New - File and a file wpi_android.cpp with New - C/C++ Source File.
src/main/cpp/CmakeLists.txt

Code: Select all

cmake_minimum_required(VERSION 3.4.1)
find_library( log-lib log )

//set path to the parent folder of wiringPi:
set(distribution_DIR /home/joerg/Development/Ndk)

add_library( wiring SHARED IMPORTED )
set_target_properties( wiring PROPERTIES IMPORTED_LOCATION
        ${distribution_DIR}/wiringPi/libs/${ANDROID_ABI}/libwiringPi.so )

add_library( wpi_android  SHARED  wpi_android.cpp )

target_include_directories( wpi_android PUBLIC /home/joerg/Development/Ndk/wiringPi/wiringPi )

target_link_libraries( wpi_android ${log-lib} wiring )
The wpi_android is a library that interfaces the wiringPi with Java.
src/main/cpp/wpi_android.cpp

Code: Select all

//
// Created by joerg on 18.02.21.
//

#include <jni.h>
#include <android/log.h>
#include <stdio.h>
#include <string.h>

#define LOGI(...)  __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
#define LOG_TAG "wpi_android"

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

#include <unistd.h>
#include <string.h>
#include <time.h>
#include <sys/system_properties.h>

#include <softPwm.h>
#include <dlfcn.h>
#include "wiringPi.h"

#ifdef __cplusplus
extern "C" {
#endif

#define I2C_DEVICE  "/dev/i2c-1"


jint Java_com_jw_wiringpi_wpiAndroid_wiringPiSetupSys(JNIEnv* env, jobject obj) {
    LOGI("Entering wiringPiSetup");
    return wiringPiSetupSys();
}


jint Java_com_jw_wiringpi_wpiAndroid_wiringPiSetup(JNIEnv* env, jobject obj) {
    return wiringPiSetup();
}

//void pullUpDnControl (int pin, int pud)
void Java_com_jw_wiringpi_wpiAndroid_pullUpDnControl(JNIEnv* env, jobject obj, jint port, jint pud) {
    return pullUpDnControl(port, pud);
}

//void pinMode (int pin, int mode)
void Java_com_jw_wiringpi_wpiAndroid_pinMode(JNIEnv* env, jobject obj, jint port, jint mode) {
    return pinMode(port, mode);
}

//void pinModeAlt (int pin, int mode)
void Java_com_jw_wiringpi_wpiAndroid_pinModeAlt(JNIEnv* env, jobject obj, jint port, jint mode) {
    pinModeAlt(port, mode);
}

jint Java_com_jw_wiringpi_wpiAndroid_digitalRead(JNIEnv* env, jobject obj, jint port) {
    return digitalRead(port);
}

//int getAlt (int pin)
jint Java_com_jw_wiringpi_wpiAndroid_getAlt(JNIEnv* env, jobject obj, jint port) {
    return getAlt(port);
}

void Java_com_jw_wiringpi_wpiAndroid_digitalWrite(JNIEnv* env, jobject obj, jint port, jint onoff) {
    digitalWrite(port, onoff);
}

jint Java_com_jw_wiringpi_wpiAndroid_analogRead(JNIEnv* env, jobject obj, jint port) {
    return analogRead(port);
}

jint Java_com_jw_wiringpi_wpiAndroid_softPwmCreate(JNIEnv* env, jobject obj, jint port, jint value, jint range) {
    return softPwmCreate(port, value, range);
}

void Java_com_jw_wiringpi_wpiAndroid_softPwmWrite(JNIEnv* env, jobject obj, jint port, jint value) {
    softPwmWrite(port, value);
}

void Java_com_jw_wiringpi_wpiAndroid_softPwmStop(JNIEnv* env, jobject obj, jint port) {
    softPwmStop(port);
}

void Interrupt(void) {
    LOGI("Interrupt");
}

jint Java_com_jw_wiringpi_wpiAndroid_wiringPiISR(JNIEnv* env, jobject obj, jint port, jint edge) {
    return wiringPiISR (port, edge, &Interrupt);
}


#ifdef __cplusplus
}
#endif
Note this syntax: Java_com_jw_wiringpi_wpiAndroid. You can change to your own com_jw, but I recommend to stay with wiringpi_wpiAndroid.
Therefore it's needed to add a package to your folder src/main/java: xxx.xx.wiringPi and there a Java class wpiAndroid.
wpiAndroid.java

Code: Select all

package com.jw.wiringpi;

public final class wpiAndroid {
    static {
        System.loadLibrary("wpi_android");
    }
    static public native int wiringPiSetup();
    static public native int wiringPiSetupSys();
    static public native void digitalWrite(int port, int onoff);
    static public native int digitalRead(int port);
    static public native void pullUpDnControl(int port, int pud);
    static public native void pinMode(int port, int mode);
    static public native void pinModeAlt(int port, int mode);
    static public native int getAlt(int port);
    static public native int softPwmCreate(int port, int value, int range);
    static public native void softPwmWrite  (int port, int value) ;
    static public native void softPwmStop   (int port) ;
}
You see the syntax is needed as path to the function.

Now it's missing some entry in app/build.gradle, to make AndroidStudio compile it.

Code: Select all

    defaultConfig {
        ...
        ndk {
            ldLibs "log"
            abiFilters 'armeabi-v7a', 'arm64-v8a'
        }
    }
    
    externalNativeBuild {
        // Encapsulates your CMake build configurations.
        cmake {

            // Provides a relative path to your CMake build script.
            path "src/main/cpp/CMakeLists.txt"
        }
    }
Now you should be able to use the functions in wpiAndroid with your Java code.
These users thanked the author joerg for the post:
odroid (Fri Feb 19, 2021 9:22 am)

Gus189
Posts: 13
Joined: Fri Feb 12, 2021 4:43 am
languages_spoken: english
ODROIDs: C4
Has thanked: 5 times
Been thanked: 0
Contact:

Re: Recent wiringpi/JNI build

Post by Gus189 »

Thanks again for this!

I'm getting a duplicate symbol error building it...

$ ....AppData/Local/Android/sdk/ndk-bundle/ndk-build.cmd -B
[armeabi-v7a] Compile thumb : gpio <= gpio.c
[armeabi-v7a] Compile thumb : gpio <= readall.c
[armeabi-v7a] Compile thumb : wiringPi <= ads1115.c
[armeabi-v7a] Compile thumb : wiringPi <= mcp23008.c
[armeabi-v7a] Compile thumb : wiringPi <= mcp4802.c
...

[armeabi-v7a] Compile thumb : wiringPi <= pcf8591.c
[armeabi-v7a] Compile thumb : wiringPi <= softTone.c
[armeabi-v7a] SharedLibrary : libwiringPi.so
ld: error: duplicate symbol: phyToGpio
>>> defined at odroidn2.c:165 (C:/WiringPIBuild/wiringPi/jni/../wiringPi\odroidn2.c:165)
>>> C:/WiringPIBuild/wiringPi/obj/local/armeabi-v7a/objs/wiringPi/__/wiringPi/odroidn2.o:(phyToGpio)
>>> defined at odroidc2.c:142 (C:/WiringPIBuild/wiringPi/jni/../wiringPi\odroidc2.c:142)
>>> C:/WiringPIBuild/wiringPi/obj/local/armeabi-v7a/objs/wiringPi/__/wiringPi/odroidc2.o:(.bss.phyToGpio+0x0)

ld: error: duplicate symbol: pinToGpio
>>> defined at odroidn2.c:165 (C:/WiringPIBuild/wiringPi/jni/../wiringPi\odroidn2.c:165)
>>> C:/WiringPIBuild/wiringPi/obj/local/armeabi-v7a/objs/wiringPi/__/wiringPi/odroidn2.o:(pinToGpio)
>>> defined at odroidc2.c:142 (C:/WiringPIBuild/wiringPi/jni/../wiringPi\odroidc2.c:142)
>>> C:/WiringPIBuild/wiringPi/obj/local/armeabi-v7a/objs/wiringPi/__/wiringPi/odroidc2.o:(.bss.pinToGpio+0x0)
clang++: error: linker command failed with exit code 1 (use -v to see invocation)

User avatar
joerg
Posts: 1372
Joined: Tue Apr 01, 2014 2:14 am
languages_spoken: german, english, español
ODROIDs: C1, C1+, C2, N1, N2, C4
Location: Germany
Has thanked: 92 times
Been thanked: 210 times
Contact:

Re: Recent wiringpi/JNI build

Post by joerg »

On what system you are compiling? >>> C:/WiringPIBuild/... looks like Windows?
I have compiled it on my Linux system without error.
What happens if you change NDK_TOOLCHAIN_VERSION to gcc in Application.mk?

Gus189
Posts: 13
Joined: Fri Feb 12, 2021 4:43 am
languages_spoken: english
ODROIDs: C4
Has thanked: 5 times
Been thanked: 0
Contact:

Re: Recent wiringpi/JNI build

Post by Gus189 »

Yep, Windows. Still fails same way with gcc but, I can try to set this up on a Linux system....

Gus189
Posts: 13
Joined: Fri Feb 12, 2021 4:43 am
languages_spoken: english
ODROIDs: C4
Has thanked: 5 times
Been thanked: 0
Contact:

Re: Recent wiringpi/JNI build

Post by Gus189 »

It built ok on Linux. Do I need to run Android Studio on Linux as well or can I copy the wiringpi I built on linux to my Windows Android Studio? Sorry for the dumb questions....

User avatar
joerg
Posts: 1372
Joined: Tue Apr 01, 2014 2:14 am
languages_spoken: german, english, español
ODROIDs: C1, C1+, C2, N1, N2, C4
Location: Germany
Has thanked: 92 times
Been thanked: 210 times
Contact:

Re: Recent wiringpi/JNI build

Post by joerg »

It might work this way. But I don‘t have any experience with AndrodStudio on Windows.

Gus189
Posts: 13
Joined: Fri Feb 12, 2021 4:43 am
languages_spoken: english
ODROIDs: C4
Has thanked: 5 times
Been thanked: 0
Contact:

Re: Recent wiringpi/JNI build

Post by Gus189 »

I'll try to make it work, but if not, I'll just use Linux. Thanks for the help and I'll let you know how it goes.


Gus

rocketeer
Posts: 13
Joined: Tue Aug 17, 2021 10:48 pm
languages_spoken: english
ODROIDs: XU4
Has thanked: 7 times
Been thanked: 0
Contact:

Re: Recent wiringpi/JNI build

Post by rocketeer »

joerg wrote:It might work this way. But I don‘t have any experience with AndrodStudio on Windows.
I'd like to do the same thing for my XU4. Would the process be any different? I've installed the 4.4.4 (v..1) Android Image from here https://wiki.odroid.com/odroid-xu4/os_i ... id/android (is it Kitkat?), and I'm not sure what TargetSDKversion / NDK version / gradle plug-in / BuildTools etc. to use.

User avatar
joerg
Posts: 1372
Joined: Tue Apr 01, 2014 2:14 am
languages_spoken: german, english, español
ODROIDs: C1, C1+, C2, N1, N2, C4
Location: Germany
Has thanked: 92 times
Been thanked: 210 times
Contact:

Re: Recent wiringpi/JNI build

Post by joerg »

A quick search with google: https://source.android.com/setup/start/build-numbers.
You start a new project and there it will be asked for the minimum platform to be supported. With KitKat it would be 19.
Just use the latest versions.

rocketeer
Posts: 13
Joined: Tue Aug 17, 2021 10:48 pm
languages_spoken: english
ODROIDs: XU4
Has thanked: 7 times
Been thanked: 0
Contact:

Re: Recent wiringpi/JNI build

Post by rocketeer »

Actually, I tried building your project https://github.com/joerg65/Example-wiringPi with the newest versions:
-CMake 3.18.1
-NDK 22.1.7
-Java 11
-Gradle 7.1.1
-Gradle plug-in 7.0.0

Here's the error message I get. Have you tried building it recently?

Build command failed.
Error while executing process /home/user/Android/Sdk/cmake/3.18.1/bin/ninja with arguments {-C /home/user/Example-wiringPi/app/.cxx/Debug/6x5s611j/armeabi-v7a gpio wiringPi wiringPiDev wpi_android}
ninja: Entering directory `/home/user/Example-wiringPi/app/.cxx/Debug/6x5s611j/armeabi-v7a'
[1/19] Building C object CMakeFiles/wiringPi.dir/src/main/cpp/wiringPi/wiringPi/mcp23s17.c.o
[2/19] Building C object CMakeFiles/wiringPi.dir/src/main/cpp/wiringPi/wiringPi/sr595.c.o
FAILED: CMakeFiles/wiringPi.dir/src/main/cpp/wiringPi/wiringPi/wiringPi.c.o
/home/user/Android/Sdk/ndk/21.4.7075529/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --target=armv7-none-linux-androideabi19 --gcc-toolchain=/home/juha/Android/Sdk/ndk/21.4.7075529/toolchains/llvm/prebuilt/linux-x86_64 --sysroot=/home/user/Android/Sdk/ndk/21.4.7075529/toolchains/llvm/prebuilt/linux-x86_64/sysroot -DwiringPi_EXPORTS -I../../../../src/main/cpp/wiringPi/wiringPi -I../../../../src/main/cpp/wiringPi -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -Werror=format-security -DTEST_C_FLAG1 -DTEST_C_FLAG2 -O0 -fno-limit-debug-info -fPIC -MD -MT CMakeFiles/wiringPi.dir/src/main/cpp/wiringPi/wiringPi/wiringPi.c.o -MF CMakeFiles/wiringPi.dir/src/main/cpp/wiringPi/wiringPi/wiringPi.c.o.d -o CMakeFiles/wiringPi.dir/src/main/cpp/wiringPi/wiringPi/wiringPi.c.o -c ../../../../src/main/cpp/wiringPi/wiringPi/wiringPi.c
../../../../src/main/cpp/wiringPi/wiringPi/wiringPi.c:91:15: error: conflicting types for '__mmap2'
extern void* __mmap2(void *, size_t, int, int, int, off_t);

User avatar
joerg
Posts: 1372
Joined: Tue Apr 01, 2014 2:14 am
languages_spoken: german, english, español
ODROIDs: C1, C1+, C2, N1, N2, C4
Location: Germany
Has thanked: 92 times
Been thanked: 210 times
Contact:

Re: Recent wiringpi/JNI build

Post by joerg »

Yes, my repository is not updated for 4 years. Hardkernel's wiringPi has changed a lot in this time. :o
Let me some time to make the example run with latest wiringPi.

rocketeer
Posts: 13
Joined: Tue Aug 17, 2021 10:48 pm
languages_spoken: english
ODROIDs: XU4
Has thanked: 7 times
Been thanked: 0
Contact:

Re: Recent wiringpi/JNI build

Post by rocketeer »

Thank you! That would be highly appreciated!

User avatar
joerg
Posts: 1372
Joined: Tue Apr 01, 2014 2:14 am
languages_spoken: german, english, español
ODROIDs: C1, C1+, C2, N1, N2, C4
Location: Germany
Has thanked: 92 times
Been thanked: 210 times
Contact:

Re: Recent wiringpi/JNI build

Post by joerg »

I have updated the example on my git repository.
Removed wiringPi sources from project, but forked the latest wirinPi from hardkernel and added Android.mk to compile with ndk.
So to use the example, you need also to clone the wiringPi from my github repoitory,
In example-wiringpi there is the CmakeLists.txt where the path to the wiringPi sources must be set:

Code: Select all

set(distribution_DIR /home/joerg/Development/Ndk)
set(wiring_DIR wiringPi)
Android Studio 2020.3.1 Patch 1
NDK Version 23.0.7599858
Gradle Plugin Version 7.0.1
Gradle Version 7.0.2
Compile SDK Version 30
Target SDK Version 30
Min SDK Version 19

I hope it works.

[edit]
I am not sure if it is working on XU platform, can't test it.
These users thanked the author joerg for the post (total 2):
odroid (Fri Aug 20, 2021 9:12 am) • rocketeer (Sun Aug 22, 2021 8:53 pm)

rocketeer
Posts: 13
Joined: Tue Aug 17, 2021 10:48 pm
languages_spoken: english
ODROIDs: XU4
Has thanked: 7 times
Been thanked: 0
Contact:

Re: Recent wiringpi/JNI build

Post by rocketeer »

Thank you, I was able to build it to Target SDK 19 as well and have install on my XU4, too! I believe you originally made this for C2, is s there any reason it wouldn't work properly on XU4 as well?

User avatar
joerg
Posts: 1372
Joined: Tue Apr 01, 2014 2:14 am
languages_spoken: german, english, español
ODROIDs: C1, C1+, C2, N1, N2, C4
Location: Germany
Has thanked: 92 times
Been thanked: 210 times
Contact:

Re: Recent wiringpi/JNI build

Post by joerg »

This example was made from Hardkernel originally. I have modified a little bit years ago, so ist use wiringPi numbering instead of sysfs numbering. It should work in XU4 also, maybe you need to adapt the pin list for it.
These users thanked the author joerg for the post:
rocketeer (Sun Aug 22, 2021 8:53 pm)

rocketeer
Posts: 13
Joined: Tue Aug 17, 2021 10:48 pm
languages_spoken: english
ODROIDs: XU4
Has thanked: 7 times
Been thanked: 0
Contact:

Re: Recent wiringpi/JNI build

Post by rocketeer »

I was clicking around the example and the program crashes when trying to press the button in GPIO window. It is supposed to call setupWiringPi() when this happens.

I get the following log when running with an Android Studio Emulator (Nexus 9 API 9), the bolded messages seem concerning:

2021-08-25 12:24:31.037 3217-3217/com.hardkernel.wiringpi D/dalvikvm: Trying to load lib /data/app-lib/com.hardkernel.wiringpi-2/libwpi_android.so 0x9d002dd0
2021-08-25 12:24:31.037 3217-3217/com.hardkernel.wiringpi D/dalvikvm: Added shared lib /data/app-lib/com.hardkernel.wiringpi-2/libwpi_android.so 0x9d002dd0
2021-08-25 12:24:31.037 3217-3217/com.hardkernel.wiringpi D/dalvikvm: No JNI_OnLoad found in /data/app-lib/com.hardkernel.wiringpi-2/libwpi_android.so 0x9d002dd0, skipping init
2021-08-25 12:24:31.087 3217-3217/com.hardkernel.wiringpi D/EGL_emulation: eglCreateContext: 0xb7e8a6f0: maj 3 min 1 rcv 4
2021-08-25 12:24:31.097 3217-3217/com.hardkernel.wiringpi D/EGL_emulation: eglMakeCurrent: 0xb7e8a6f0: ver 3 1
2021-08-25 12:24:31.097 3217-3217/com.hardkernel.wiringpi E/eglCodecCommon: glUtilsParamSize: unknow param 0x000082da
2021-08-25 12:24:31.097 3217-3217/com.hardkernel.wiringpi E/eglCodecCommon: glUtilsParamSize: unknow param 0x00008cdf
2021-08-25 12:24:31.097 3217-3217/com.hardkernel.wiringpi E/eglCodecCommon: glUtilsParamSize: unknow param 0x00008824
2021-08-25 12:24:31.107 3217-3217/com.hardkernel.wiringpi E/EGL_emulation: tid 3217: eglSurfaceAttrib(1199): error 0x3009 (EGL_BAD_MATCH)

2021-08-25 12:24:31.107 3217-3217/com.hardkernel.wiringpi W/HardwareRenderer: Backbuffer cannot be preserved
2021-08-25 12:24:31.107 3217-3217/com.hardkernel.wiringpi D/OpenGLRenderer: Enabling debug mode 0
2021-08-25 12:24:54.483 3217-3217/? I/nappi: pressed the button
2021-08-25 12:24:54.483 3217-3217/? I/nappi: isChecked = true
2021-08-25 12:24:54.483 3217-3217/? I/nappi: then it crashes as wiringPiSetup() fails

Have you tried this with your Odroid-C2 or XU4 and if so, do you have any problems?
Attachments
crash.png
crash.png (54.35 KiB) Viewed 278 times

User avatar
joerg
Posts: 1372
Joined: Tue Apr 01, 2014 2:14 am
languages_spoken: german, english, español
ODROIDs: C1, C1+, C2, N1, N2, C4
Location: Germany
Has thanked: 92 times
Been thanked: 210 times
Contact:

Re: Recent wiringpi/JNI build

Post by joerg »

Sorry, no I haven't tried it with C2. For now I have only C4 and N2 for testing. I need to set up a C2 for testing with it. A XU4 I don't have.
You can try to compile the wiringPi with only NDK and install the libraries and the gpio binary on the XU4, to see if wiringPi is basically working on your XU4.

rocketeer
Posts: 13
Joined: Tue Aug 17, 2021 10:48 pm
languages_spoken: english
ODROIDs: XU4
Has thanked: 7 times
Been thanked: 0
Contact:

Re: Recent wiringpi/JNI build

Post by rocketeer »

Copy, thanks. I tend to think that this is a non-HW related issue because it crashes with emulator and XU4, but let me know how it goes with your C2!

User avatar
joerg
Posts: 1372
Joined: Tue Apr 01, 2014 2:14 am
languages_spoken: german, english, español
ODROIDs: C1, C1+, C2, N1, N2, C4
Location: Germany
Has thanked: 92 times
Been thanked: 210 times
Contact:

Re: Recent wiringpi/JNI build

Post by joerg »

On C2 it is working:
Screenshot_19700101-000257.png
Screenshot_19700101-000257.png (41.21 KiB) Viewed 244 times
I can't test it on older platform!
Try to get a logcat and publish here a from the XU4, not from the emulator. It can't work on emulator.
These users thanked the author joerg for the post (total 2):
odroid (Mon Aug 30, 2021 9:58 am) • rocketeer (Sat Sep 04, 2021 2:58 pm)

rocketeer
Posts: 13
Joined: Tue Aug 17, 2021 10:48 pm
languages_spoken: english
ODROIDs: XU4
Has thanked: 7 times
Been thanked: 0
Contact:

Re: Recent wiringpi/JNI build

Post by rocketeer »

Thank you for trying it out.

How do I get logcat from XU4 (or any other board) now that it's running a packaged .apk? Somehow connect it to Android Studio?

User avatar
joerg
Posts: 1372
Joined: Tue Apr 01, 2014 2:14 am
languages_spoken: german, english, español
ODROIDs: C1, C1+, C2, N1, N2, C4
Location: Germany
Has thanked: 92 times
Been thanked: 210 times
Contact:

Re: Recent wiringpi/JNI build

Post by joerg »

You can run the app or debug the app with Android Studio. Only need to connect the otg usb cable.
Then in the lower part you have some tabs, one is named 'Logcat'.
Bildschirmfoto vom 2021-09-04 15-31-47.png
Bildschirmfoto vom 2021-09-04 15-31-47.png (111.29 KiB) Viewed 196 times
Can be that you first need to remove the app you have installed other way, to start the app from Android Studio.

rocketeer
Posts: 13
Joined: Tue Aug 17, 2021 10:48 pm
languages_spoken: english
ODROIDs: XU4
Has thanked: 7 times
Been thanked: 0
Contact:

Re: Recent wiringpi/JNI build

Post by rocketeer »

I see. XU4 doesn't have USB OTG port, so am I out of luck?

User avatar
mad_ady
Posts: 9681
Joined: Wed Jul 15, 2015 5:00 pm
languages_spoken: english
ODROIDs: XU4, C1+, C2, C4, N1, N2, H2, Go, Go Advance
Location: Bucharest, Romania
Has thanked: 609 times
Been thanked: 721 times
Contact:

Re: Recent wiringpi/JNI build

Post by mad_ady »

I think youcan enable adb over tcp and use that instead
These users thanked the author mad_ady for the post (total 2):
joerg (Sun Sep 05, 2021 4:07 pm) • rocketeer (Mon Sep 06, 2021 1:57 am)

User avatar
joerg
Posts: 1372
Joined: Tue Apr 01, 2014 2:14 am
languages_spoken: german, english, español
ODROIDs: C1, C1+, C2, N1, N2, C4
Location: Germany
Has thanked: 92 times
Been thanked: 210 times
Contact:

Re: Recent wiringpi/JNI build

Post by joerg »

Yes, and if it is not enabled ion XU4 Android, as also not on C2 Android, you can use an app called ADBOverEthernet:
screen.png
screen.png (31.59 KiB) Viewed 181 times
These users thanked the author joerg for the post (total 2):
rocketeer (Mon Sep 06, 2021 1:57 am) • odroid (Mon Sep 06, 2021 9:34 am)

rocketeer
Posts: 13
Joined: Tue Aug 17, 2021 10:48 pm
languages_spoken: english
ODROIDs: XU4
Has thanked: 7 times
Been thanked: 0
Contact:

Re: Recent wiringpi/JNI build

Post by rocketeer »

Got my tcpip working via wifi, and I recorded the following logcat when I hit the 'ON' button on GPIO tab (code tries to execute wiringPiSetup() ):

E/example-wiringPi( 4233): pressed
D/dalvikvm( 4233): Trying to load lib /data/app-lib/com.hardkernel.wiringpi-2/libwpi_android.so 0x41e423f8
D/dalvikvm( 4233): Added shared lib /data/app-lib/com.hardkernel.wiringpi-2/libwpi_android.so 0x41e423f8
D/dalvikvm( 4233): No JNI_OnLoad found in /data/app-lib/com.hardkernel.wiringpi-2/libwpi_android.so 0x41e423f8, skipping init
W/InputDispatcher( 3233): channel '42159878 com.hardkernel.wiringpi/com.jw.example.MainActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x9
E/InputDispatcher( 3233): channel '42159878 com.hardkernel.wiringpi/com.jw.example.MainActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
D/su ( 4251): sending code
D/su ( 4251): child exited
D/su ( 4249): client exited 0
D/Zygote ( 2867): Process 4233 exited cleanly (1)
W/InputDispatcher( 3233): Attempted to unregister already unregistered input channel '42159878 com.hardkernel.wiringpi/com.jw.example.MainActivity (server)'
I/ActivityManager( 3233): Process com.hardkernel.wiringpi (pid 4233) has died.
I/WindowState( 3233): WIN DEATH: Window{42159878 u0 com.hardkernel.wiringpi/com.jw.example.MainActivity}
W/ActivityManager( 3233): Force removing ActivityRecord{420e69e8 u0 com.hardkernel.wiringpi/com.jw.example.MainActivity t6}: app died, no saved state
D/mali_winsys( 3857): new_window_surface returns 0x3000
I/Term ( 3857): Bound to TermService
I/TermService( 3857): Activity binding to service
W/Binder ( 3366): Caught a RuntimeException from the binder stub implementation.
W/Binder ( 3366): java.lang.NullPointerException
W/Binder ( 3366): at android.inputmethodservice.IInputMethodWrapper.setSessionEnabled(IInputMethodWrapper.java:280)
W/Binder ( 3366): at com.android.internal.view.IInputMethod$Stub.onTransact(IInputMethod.java:129)
W/Binder ( 3366): at android.os.Binder.execTransact(Binder.java:404)
W/Binder ( 3366): at dalvik.system.NativeStart.run(Native Method)
W/InputMethodManagerService( 3233): Got RemoteException sending setActive(false) notification to pid 4233 uid 10056

I haven't changed the GPIO port numbers to reflect XU4 instead of C2, but I don't think the wiringPiSetup() cares about that.

Also, any idea why my XU4(?) in the settings says 'About Tablet' that my Model number is ODROID-XU3? What is XU3?

User avatar
mad_ady
Posts: 9681
Joined: Wed Jul 15, 2015 5:00 pm
languages_spoken: english
ODROIDs: XU4, C1+, C2, C4, N1, N2, H2, Go, Go Advance
Location: Bucharest, Romania
Has thanked: 609 times
Been thanked: 721 times
Contact:

Re: Recent wiringpi/JNI build

Post by mad_ady »

I haven't changed the GPIO port numbers to reflect XU4 instead of C2, but I don't think the wiringPiSetup() cares about that.
Oh, it cares very much! It tries to initialize the GPIO and if it can't it might crash.
Also, any idea why my XU4(?) in the settings says 'About Tablet' that my Model number is ODROID-XU3
It's the precursor to XU4. It's fine.
These users thanked the author mad_ady for the post (total 2):
joerg (Tue Sep 14, 2021 1:40 am) • rocketeer (Tue Sep 14, 2021 11:21 am)

User avatar
joerg
Posts: 1372
Joined: Tue Apr 01, 2014 2:14 am
languages_spoken: german, english, español
ODROIDs: C1, C1+, C2, N1, N2, C4
Location: Germany
Has thanked: 92 times
Been thanked: 210 times
Contact:

Re: Recent wiringpi/JNI build

Post by joerg »

I can't help a lot this days.
Have you tried to install the libraries into /system/lib and the gpio binary into /system/bin, and then used gpio readall?
This can give you some more log messages.

rocketeer
Posts: 13
Joined: Tue Aug 17, 2021 10:48 pm
languages_spoken: english
ODROIDs: XU4
Has thanked: 7 times
Been thanked: 0
Contact:

Re: Recent wiringpi/JNI build

Post by rocketeer »

Oh, it cares very much! It tries to initialize the GPIO and if it can't it might crash.
I mean the part of the code that cares about port numbers ( updateGPIO() ) is not called until after wiringPiSetup() has executed, and this is where the program already crashes.

rocketeer
Posts: 13
Joined: Tue Aug 17, 2021 10:48 pm
languages_spoken: english
ODROIDs: XU4
Has thanked: 7 times
Been thanked: 0
Contact:

Re: Recent wiringpi/JNI build

Post by rocketeer »

Have you tried to install the libraries into /system/lib and the gpio binary into /system/bin, and then used gpio readall?
This can give you some more log messages.
Which files are you referring to? I just cloned your example from Git and built it in Android Studio, I didn't move things around/install anything into any specific folder.

User avatar
joerg
Posts: 1372
Joined: Tue Apr 01, 2014 2:14 am
languages_spoken: german, english, español
ODROIDs: C1, C1+, C2, N1, N2, C4
Location: Germany
Has thanked: 92 times
Been thanked: 210 times
Contact:

Re: Recent wiringpi/JNI build

Post by joerg »

Sorry, at weekend I can give you more details. Right now I am not at home. You can find this libraries in project folder.
These users thanked the author joerg for the post:
rocketeer (Wed Sep 15, 2021 11:17 am)

User avatar
joerg
Posts: 1372
Joined: Tue Apr 01, 2014 2:14 am
languages_spoken: german, english, español
ODROIDs: C1, C1+, C2, N1, N2, C4
Location: Germany
Has thanked: 92 times
Been thanked: 210 times
Contact:

Re: Recent wiringpi/JNI build

Post by joerg »

Hi @rocketeer, you can compile the libraries at command line from within the wiringPi source directory:

Code: Select all

/home/joerg/Android/Sdk/ndk/23.0.7599858/ndk-build -B
[armeabi-v7a] Compile thumb  : gpio <= gpio.c
[armeabi-v7a] Compile thumb  : gpio <= readall.c
[armeabi-v7a] Compile thumb  : wiringPi <= ads1115.c
[armeabi-v7a] Compile thumb  : wiringPi <= mcp23008.c
[armeabi-v7a] Compile thumb  : wiringPi <= mcp4802.c
[armeabi-v7a] Compile thumb  : wiringPi <= piHiPri.c
[armeabi-v7a] Compile thumb  : wiringPi <= sr595.c
[armeabi-v7a] Compile thumb  : wiringPi <= bmp180.c
[armeabi-v7a] Compile thumb  : wiringPi <= mcp23016.c
[armeabi-v7a] Compile thumb  : wiringPi <= odroidc1.c
[armeabi-v7a] Compile thumb  : wiringPi <= odroidn2.c
[armeabi-v7a] Compile thumb  : wiringPi <= piThread.c
[armeabi-v7a] Compile thumb  : wiringPi <= wiringPi.c
[armeabi-v7a] Compile thumb  : wiringPi <= mcp23017.c
[armeabi-v7a] Compile thumb  : wiringPi <= odroidc2.c
[armeabi-v7a] Compile thumb  : wiringPi <= odroidc4.c
[armeabi-v7a] Compile thumb  : wiringPi <= odroidhc4.c
[armeabi-v7a] Compile thumb  : wiringPi <= drcSerial.c
[armeabi-v7a] Compile thumb  : wiringPi <= mcp23s08.c
[armeabi-v7a] Compile thumb  : wiringPi <= odroidn1.c
[armeabi-v7a] Compile thumb  : wiringPi <= wiringPiI2C.c
[armeabi-v7a] Compile thumb  : wiringPi <= ds18b20.c
[armeabi-v7a] Compile thumb  : wiringPi <= mcp23s17.c
[armeabi-v7a] Compile thumb  : wiringPi <= sn3218.c
[armeabi-v7a] Compile thumb  : wiringPi <= wiringPiSPI.c
[armeabi-v7a] Compile thumb  : wiringPi <= htu21d.c
[armeabi-v7a] Compile thumb  : wiringPi <= mcp3002.c
[armeabi-v7a] Compile thumb  : wiringPi <= odroidxu3.c
[armeabi-v7a] Compile thumb  : wiringPi <= softPwm.c
[armeabi-v7a] Compile thumb  : wiringPi <= wiringSerial.c
[armeabi-v7a] Compile thumb  : wiringPi <= max31855.c
[armeabi-v7a] Compile thumb  : wiringPi <= mcp3004.c
[armeabi-v7a] Compile thumb  : wiringPi <= pcf8574.c
[armeabi-v7a] Compile thumb  : wiringPi <= softServo.c
[armeabi-v7a] Compile thumb  : wiringPi <= wiringShift.c
[armeabi-v7a] Compile thumb  : wiringPi <= max5322.c
[armeabi-v7a] Compile thumb  : wiringPi <= mcp3422.c
[armeabi-v7a] Compile thumb  : wiringPi <= pcf8591.c
[armeabi-v7a] Compile thumb  : wiringPi <= softTone.c
[armeabi-v7a] SharedLibrary  : libwiringPi.so
[armeabi-v7a] Compile thumb  : wiringPiDev <= ds1302.c
[armeabi-v7a] Compile thumb  : wiringPiDev <= maxdetect.c
[armeabi-v7a] Compile thumb  : wiringPiDev <= piNes.c
[armeabi-v7a] Compile thumb  : wiringPiDev <= gertboard.c
[armeabi-v7a] Compile thumb  : wiringPiDev <= lcd128x64.c
[armeabi-v7a] Compile thumb  : wiringPiDev <= lcd.c
[armeabi-v7a] Compile thumb  : wiringPiDev <= piGlow.c
[armeabi-v7a] Compile thumb  : wiringPiDev <= scrollPhat.c
[armeabi-v7a] Compile thumb  : wiringPiDev <= piFace.c
[armeabi-v7a] SharedLibrary  : libwiringPiDev.so
[armeabi-v7a] Executable     : gpio
[armeabi-v7a] Install        : gpio => libs/armeabi-v7a/gpio
[armeabi-v7a] Install        : libwiringPi.so => libs/armeabi-v7a/libwiringPi.so
[armeabi-v7a] Install        : libwiringPiDev.so => libs/armeabi-v7a/libwiringPiDev.so
[arm64-v8a] Compile        : gpio <= gpio.c
[arm64-v8a] Compile        : gpio <= readall.c
[arm64-v8a] Compile        : wiringPi <= ads1115.c
[arm64-v8a] Compile        : wiringPi <= mcp23008.c
[arm64-v8a] Compile        : wiringPi <= mcp4802.c
[arm64-v8a] Compile        : wiringPi <= piHiPri.c
[arm64-v8a] Compile        : wiringPi <= sr595.c
[arm64-v8a] Compile        : wiringPi <= bmp180.c
[arm64-v8a] Compile        : wiringPi <= mcp23016.c
[arm64-v8a] Compile        : wiringPi <= odroidc1.c
[arm64-v8a] Compile        : wiringPi <= odroidn2.c
[arm64-v8a] Compile        : wiringPi <= piThread.c
[arm64-v8a] Compile        : wiringPi <= wiringPi.c
[arm64-v8a] Compile        : wiringPi <= mcp23017.c
[arm64-v8a] Compile        : wiringPi <= odroidc2.c
[arm64-v8a] Compile        : wiringPi <= odroidc4.c
[arm64-v8a] Compile        : wiringPi <= odroidhc4.c
[arm64-v8a] Compile        : wiringPi <= drcSerial.c
[arm64-v8a] Compile        : wiringPi <= mcp23s08.c
[arm64-v8a] Compile        : wiringPi <= odroidn1.c
[arm64-v8a] Compile        : wiringPi <= wiringPiI2C.c
[arm64-v8a] Compile        : wiringPi <= ds18b20.c
[arm64-v8a] Compile        : wiringPi <= mcp23s17.c
[arm64-v8a] Compile        : wiringPi <= sn3218.c
[arm64-v8a] Compile        : wiringPi <= wiringPiSPI.c
[arm64-v8a] Compile        : wiringPi <= htu21d.c
[arm64-v8a] Compile        : wiringPi <= mcp3002.c
[arm64-v8a] Compile        : wiringPi <= odroidxu3.c
[arm64-v8a] Compile        : wiringPi <= softPwm.c
[arm64-v8a] Compile        : wiringPi <= wiringSerial.c
[arm64-v8a] Compile        : wiringPi <= max31855.c
[arm64-v8a] Compile        : wiringPi <= mcp3004.c
[arm64-v8a] Compile        : wiringPi <= pcf8574.c
[arm64-v8a] Compile        : wiringPi <= softServo.c
[arm64-v8a] Compile        : wiringPi <= wiringShift.c
[arm64-v8a] Compile        : wiringPi <= max5322.c
[arm64-v8a] Compile        : wiringPi <= mcp3422.c
[arm64-v8a] Compile        : wiringPi <= pcf8591.c
[arm64-v8a] Compile        : wiringPi <= softTone.c
[arm64-v8a] SharedLibrary  : libwiringPi.so
[arm64-v8a] Compile        : wiringPiDev <= ds1302.c
[arm64-v8a] Compile        : wiringPiDev <= maxdetect.c
[arm64-v8a] Compile        : wiringPiDev <= piNes.c
[arm64-v8a] Compile        : wiringPiDev <= gertboard.c
[arm64-v8a] Compile        : wiringPiDev <= lcd128x64.c
[arm64-v8a] Compile        : wiringPiDev <= lcd.c
[arm64-v8a] Compile        : wiringPiDev <= piGlow.c
[arm64-v8a] Compile        : wiringPiDev <= scrollPhat.c
[arm64-v8a] Compile        : wiringPiDev <= piFace.c
[arm64-v8a] SharedLibrary  : libwiringPiDev.so
[arm64-v8a] Executable     : gpio
[arm64-v8a] Install        : gpio => libs/arm64-v8a/gpio
[arm64-v8a] Install        : libwiringPi.so => libs/arm64-v8a/libwiringPi.so
[arm64-v8a] Install        : libwiringPiDev.so => libs/arm64-v8a/libwiringPiDev.so
Then you'll find the compiled files here:
Bildschirmfoto vom 2021-09-19 17-33-49.png
Bildschirmfoto vom 2021-09-19 17-33-49.png (86.64 KiB) Viewed 14 times
You can send them to the sbc (change to the right ABI directory):

Code: Select all

# adb remount
# adb push libwiringPiDev.so /system/lib/
# adb push libwiringPi.so /system/lib/
# adb push gpio /system/bin/
Then you can execute gpio:

Code: Select all

adb shell gpio readall
You should get an output like this:

Code: Select all

 +-----+-----+---------+------+---+--- C4 ---+---+------+---------+-----+-----+
 | I/O | wPi |   Name  | Mode | V | Physical | V | Mode |  Name   | wPi | I/O |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 |     |     |    3.3V |      |   |  1 || 2  |   |      | 5V      |     |     |
 | 493 |   8 |   SDA.2 | ALT1 | 1 |  3 || 4  |   |      | 5V      |     |     |
 | 494 |   9 |   SCL.2 | ALT1 | 1 |  5 || 6  |   |      | 0V      |     |     |
 | 481 |   7 |  IO.481 |   IN | 1 |  7 || 8  | 1 | ALT1 | TxD1    | 15  | 488 |
 |     |     |      0V |      |   |  9 || 10 | 1 | ALT1 | RxD1    | 16  | 489 |
 | 479 |   0 |  IO.479 |   IN | 1 | 11 || 12 | 1 | IN   | IO.492  | 1   | 492 |
 | 480 |   2 |  IO.480 |   IN | 1 | 13 || 14 |   |      | 0V      |     |     |
 | 483 |   3 |  IO.483 | ALT4 | 0 | 15 || 16 | 1 | IN   | IO.476  | 4   | 476 |
 |     |     |    3.3V |      |   | 17 || 18 | 1 | IN   | IO.477  | 5   | 477 |
 | 484 |  12 |    MOSI |   IN | 1 | 19 || 20 |   |      | 0V      |     |     |
 | 485 |  13 |    MISO |   IN | 1 | 21 || 22 | 1 | IN   | IO.478  | 6   | 478 |
 | 487 |  14 |    SLCK |   IN | 1 | 23 || 24 | 1 | IN   | SS      | 10  | 486 |
 |     |     |      0V |      |   | 25 || 26 | 0 | IN   | IO. 23  | 11  | 433 |
 | 474 |  30 |   SDA.3 | ALT2 | 1 | 27 || 28 | 1 | ALT2 | SCL.3   | 31  | 475 |
 | 490 |  21 |  IO.490 |   IN | 1 | 29 || 30 |   |      | 0V      |     |     |
 | 491 |  22 |  IO.491 |   IN | 1 | 31 || 32 | 0 | IN   | IO. 24  | 26  | 434 |
 | 482 |  23 |  IO.482 | ALT1 | 0 | 33 || 34 |   |      | 0V      |     |     |
 | 495 |  24 |  IO.495 |   IN | 1 | 35 || 36 | 1 | IN   | IO. 22  | 27  | 432 |
 |     |  25 |   AIN.2 |      |   | 37 || 38 |   |      | 1V8     | 28  |     |
 |     |     |      0V |      |   | 39 || 40 |   |      | AIN.0   | 29  |     |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 | I/O | wPi |   Name  | Mode | V | Physical | V | Mode |  Name   | wPi | I/O |
 +-----+-----+---------+------+---+--- C4 ---+---+------+---------+-----+-----+
If you get an error, show it here.

Post Reply

Return to “Android”

Who is online

Users browsing this forum: No registered users and 1 guest