Bosch Sensortec Community

    cancel
    Showing results for 
    Search instead for 
    Did you mean: 
    SOLVED

    BSEC for BME680 on Android armeabi-v7a

    BSEC for BME680 on Android armeabi-v7a

    Erlkoenig
    Member

    Dear Bosch support,

    I would like to integrate the BSEC library for using an BME680 sensor on an Android platform that uses the "armeabi-v7a" ABI on a Cortex-A7. Apparantly, none of the library binaries (".a" files) included in the download archive are suitable for this platform. Android mandates that all code for this ABI is compiled...

    • By the Clang compiler from the Android NDK package
    • with the "-march=armv7-a" flag to target ARMv7-A processors
    • with the "-mfloat-abi=softfp" flag to pass floating-point data in core registers instead of FPU registers
    • with the "-fPIC" flag to generate position-independant code

    Additionally, the following alternatives are available:

    • FPU:
      • The "-mfpu=vfpv3-d16" flag to use the VFPv3-D16 floating point unit instructions without NEON (highest compatibility)
      • Alternatively, "-mfpu=neon-vfpv3" to use VFPv3-D32 plus NEON SIMD extensions (highest performance)
    • ARM/Thumb mode:
      • With the "-target thumbv7-none-linux-androideabi -mthumb" flags to generate compact Thumb-2 code
      • Alternatively, with the "-target armv7-none-linux-androideabi -marm" flags to create high-performance ARM code

    So, the 4 possible variants are:

    • -fpic -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -target thumbv7-none-linux-androideabi -mthumb
    • -fpic -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -target armv7-none-linux-androideabi -marm
    • -fpic -march=armv7-a -mfloat-abi=softfp -mfpu=neon-vfpv3 -target thumbv7-none-linux-androideabi -mthumb
    • -fpic -march=armv7-a -mfloat-abi=softfp -mfpu=neon-vfpv3 -target armv7-none-linux-androideabi -marm

    Ideally, there would be libraries for all four variants, but at least for the first one for maximum compatibility. The "RaspberryPI/PiZero_ArmV6-32bits" variant inside the download archive is almost suitable for Android, but uses "-mfpu=hard" ABI and is therefore incompatible with Android binaries. The Cortex-A7 variant does not support PIC code and isn't compatible either.

    Could you provide binaries compiled with the mentioned flags?

    Thank you very much!

    4 REPLIES 4

    Erlkoenig
    Member

    Some additional information: Using the Android NDK, it is actually very easy to compile binaries suitable for the various Android variants:

    Create a file "CMakeLists.txt" inside the BSEC source code directory. Assuming that the BSEC source code is located in some files "bsec1.c bsec2.c", add the following contents to the "CMakeLists.txt":

     

    add_library(bsec STATIC bsec1.c bsec2.c)

     

    Then, call CMake to generate a makefile:

     

    cmake -DCMAKE_TOOLCHAIN_FILE=~/Android/Sdk/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_ABI=armeabi-v7a -DANDROID_NATIVE_API_LEVEL=19 -DCMAKE_BUILD_TYPE=Release

     

    "~/Android/Sdk/ndk-bundle" should be replaced by the NDK installation path. Then, compile by calling "make". Afterwards, the file "libbsec.a" contains an Android-compatible library for armeabi-v7a.

    As documented by Android, adding the flags "-DANDROID_ARM_MODE=arm" and/or "-DANDROID_ARM_NEON=TRUE" will use the higher-performance "ARM" instruction set, and the NEON FPU instructions, respectively, as mentioned in the previous post.

    We would like to evaluate using the BME680 and BSEC on an Android-based product, and would be grateful if you could provide Android-compatible binaries. The BSEC Website also advertises Android compatibility.

    handytech
    Community Moderator
    Community Moderator

    Thanks for the extra information and guidance. Your request was already transmitted to the appropriate team, but it will take a little longer than usual to provide feedback due to local public holidays. I will let you know here as soon as I a receive concrete update about if/when we could support this request.

    handytech
    Community Moderator
    Community Moderator

    It took us some time to set up the Android NDK environment, but we believe that we now managed to generate the requested Android compliant release.

    Please try the attached release and let us know if it works for you.

    Sorry for the late reply, I didn't get an email notification and Corona kept me out of the office.

    The static library works perfectly on Android now. Thanks!

    Icon--AD-black-48x48Icon--address-consumer-data-black-48x48Icon--appointment-black-48x48Icon--back-left-black-48x48Icon--calendar-black-48x48Icon--center-alignedIcon--Checkbox-checkIcon--clock-black-48x48Icon--close-black-48x48Icon--compare-black-48x48Icon--confirmation-black-48x48Icon--dealer-details-black-48x48Icon--delete-black-48x48Icon--delivery-black-48x48Icon--down-black-48x48Icon--download-black-48x48Ic-OverlayAlertIcon--externallink-black-48x48Icon-Filledforward-right_adjustedIcon--grid-view-black-48x48IC_gd_Check-Circle170821_Icons_Community170823_Bosch_Icons170823_Bosch_Icons170821_Icons_CommunityIC-logout170821_Icons_Community170825_Bosch_Icons170821_Icons_CommunityIC-shopping-cart2170821_Icons_CommunityIC-upIC_UserIcon--imageIcon--info-i-black-48x48Icon--left-alignedIcon--Less-minimize-black-48x48Icon-FilledIcon--List-Check-grennIcon--List-Check-blackIcon--List-Cross-blackIcon--list-view-mobile-black-48x48Icon--list-view-black-48x48Icon--More-Maximize-black-48x48Icon--my-product-black-48x48Icon--newsletter-black-48x48Icon--payment-black-48x48Icon--print-black-48x48Icon--promotion-black-48x48Icon--registration-black-48x48Icon--Reset-black-48x48Icon--right-alignedshare-circle1Icon--share-black-48x48Icon--shopping-bag-black-48x48Icon-shopping-cartIcon--start-play-black-48x48Icon--store-locator-black-48x48Ic-OverlayAlertIcon--summary-black-48x48tumblrIcon-FilledvineIc-OverlayAlertwhishlist