Changes between Version 51 and Version 52 of expansion/gw16167


Ignore:
Timestamp:
07/29/2026 04:00:16 PM (3 hours ago)
Author:
Tim Harvey
Comment:

various updates for the GW16170

Legend:

Unmodified
Added
Removed
Modified
  • expansion/gw16167

    v51 v52  
    88The GW16170 M.2 E-Key Sub-1GHz 802.11ah High-Power radio uses the !MorseMicro MM8108-M20 chip which offers improvements in power (up to 28.5dBm).
    99
    10 '''* NOTE: The GW16167 has been tested and is supported in software when using a Gateworks Single Board Computer'''
    11 
    12 '''* NOTE: The GW16167 requires an M.2 E-Key socket with USB 2.0. This may require an adapter for the Venice SBCs such as the [https://trac.gateworks.com/wiki/expansion/gw1614xminipciem2adapter#GW16151E-Key-USB2.0PCIe GW16151]'''
    13 
    14 '''* NOTE: The GW16167 requires an updated driver and driver configuration present in the latest Gateworks pre-built Ubuntu and OpenWrt images - please update your firmware to ensure you have the proper support'''
     10'''* NOTE: The GW16167/GW16170 has been tested and is supported in software when using a Gateworks Single Board Computer'''
     11
     12'''* NOTE: The GW16167/GW16170 requires an M.2 E-Key socket with USB 2.0. This may require an adapter for the Venice SBCs such as the [https://trac.gateworks.com/wiki/expansion/gw1614xminipciem2adapter#GW16151E-Key-USB2.0PCIe GW16151]'''
     13
     14'''* NOTE: The GW16167/GW16170 requires an updated driver and driver configuration present in the latest Gateworks pre-built Ubuntu and OpenWrt images - please update your firmware to ensure you have the proper support'''
    1515
    1616IEEE 802.11ah is a wireless networking protocol published in 2017 called Wi-Fi !HaLow as an amendment of the IEEE 802.11-2007 wireless networking standard. It uses 900 MHz license-exempt bands to provide extended-range Wi-Fi networks, compared to conventional Wi-Fi networks operating in the 2.4 GHz, 5 GHz and 6 GHz bands. It also benefits from lower energy consumption, allowing the creation of large groups of stations or sensors that cooperate to share signals, supporting the concept of the Internet of things (IoT). The protocol's low power consumption competes with Bluetooth, !LoRa, and Zigbee, and has the added benefit of higher data rates and wider coverage range.
     
    115115== Software
    116116
    117 ''' Note: The GW16167 is designed to be used with a Gateworks Single Board Computer. ''' When using the device on other platforms, Gateworks has limited knowledge and the support offered is being able to point to the Gateworks driver github link here: https://github.com/Gateworks/morse_driver (use the 1.16.4-gateworks branch)
     117''' Note: The GW16167/GW16170 is designed to be used with a Gateworks Single Board Computer. ''' When using the device on other platforms, Gateworks has limited knowledge and you must visit the [https://community.morsemicro.com/ MorseMicro Community Forum] for support.
    118118
    119119==== What is s1g ?
     
    127127 
    128128=== Driver
    129 The MM8108 on the GW16167 is supported by the open-source out-of-tree Linux kernel driver from !MorseMicro. This driver is included in the Gateworks Ubuntu pre-built images and the below instructions are only for if building is needed. Note, this pulls from multiple repos, including the Gateworks Github where the 1.16.4-gateworks branch should be used.
    130 
     129The MM8108 on the GW16167/GW16170 is supported by the open-source out-of-tree Linux kernel driver from !MorseMicro. This driver is included in the Gateworks Ubuntu and OpenWrt pre-built images and the below instructions are only for if building is needed. Note, this pulls from multiple repos.
    131130
    132131Building with the Gateworks Venice BSP:
     
    134133  1. Add a 'custom_kernel_morsemicro' script
    135134{{{#!bash
    136 cat <<\EOF > custom_kernel_morsemicro
     135cat <<\EOF > custom_kernel_mm8108
    137136#!/bin/bash -e
    138137
    139 DIR=$PWD/mm610x
     138# mm8108 driver for USB, morse_cli, hostapd_s1g, wpa_supplicant_s1g
     139MORSE_VER=mm8108-2.0.0
     140
     141DIR=$PWD/morse/$MORSE_VER
    140142OUTDIR=$DIR/out
    141143DESTDIR=$2
    142144
    143 MORSE_VER=1.16.4
    144145LIBNL_VER=libnl3_11_0
    145146OPENSSL_VER=openssl-3.5.0
     
    147148COUNTRY=US
    148149mkdir -p $DESTDIR/usr/sbin
    149 mkdir -p $DESTDIR/etc/modprobe.d
    150150mkdir -p $DIR
    151151cd $DIR
    152152
     153echo "Checking out code..."
    153154# get repos of what we will build
    154 [ -d morse_driver ] || git clone --recurse-submodules https://github.com/Gateworks/morse_driver.git -b 1.16.4-gateworks
    155 [ -d morse-firmware ] || git clone https://github.com/MorseMicro/morse-firmware.git -b 1.16
     155[ -d morse_driver ] || git clone --recurse-submodules https://github.com/MorseMicro/morse_driver.git -b $MORSE_VER
     156#[ -d morse_driver ] || git clone --recurse-submodules http://http://softdev/cgit/cgit.cgi/morse_driver -b ${MORSE_VER}-gateworks
     157[ -d morse-firmware ] || git clone https://github.com/MorseMicro/morse-firmware.git -b $MORSE_VER
    156158[ -d libnl ] || git clone https://github.com/thom311/libnl.git -b $LIBNL_VER
    157159[ -d openssl ] || git clone https://github.com/openssl/openssl.git -b $OPENSSL_VER
     
    162164echo "Building morse_driver..."
    163165ARGS="KERNEL_SRC=$1 \
    164         CONFIG_MORSE_SDIO=y \
    165         CONFIG_MORSE_USB=y \
     166        MORSE_VERSION="${MORSE_VER}-gateworks-g$(git -C morse_driver rev-parse --verify HEAD 2>/dev/null | cut -c1-12)"
     167        CONFIG_MORSE_USB=y \
    166168        CONFIG_MORSE_USER_ACCESS=y \
    167169        CONFIG_MORSE_VENDOR_COMMAND=y \
    168         CONFIG_MORSE_SDIO_ALIGNMENT=4 \
    169170        CONFIG_MORSE_POWERSAVE_MODE=0 \
    170171        CONFIG_MORSE_COUNTRY=$COUNTRY \
     
    172173        CONFIG_MORSE_MONITOR=y \
    173174        CONFIG_MORSE_DEBUGFS=y \
    174         CONFIG_WLAN_VENDOR_MORSE=m"
    175 make -C morse_driver $ARGS
    176 make -C morse_driver $ARGS INSTALL_MOD_PATH=$2 modules_install
     175        CONFIG_WLAN_VENDOR_MORSE=m" \
     176        KCFLAGS="-Wno-error=implicit-function-declaration"
     177make -j$(nproc) -C morse_driver $ARGS clean
     178make -j$(nproc) -C morse_driver $ARGS
     179make -j$(nproc) -C morse_driver $ARGS INSTALL_MOD_PATH=$2 modules_install
     180# module parameters
     181mkdir -p $DESTDIR/etc/modprobe.d
     182echo "options morse country=$COUNTRY" > $DESTDIR/etc/modprobe.d/morse.conf
    177183
    178184# firmware:
    179 #  - mm610x firmware
    180 #  - board configuration file (BCF) that provides driver with calibration constants and chip gpio config
    181185echo "Copying firmware..."
    182186mkdir -p $2/lib/firmware/morse
    183 # GW16159 sdmah/sdio/mm6108
    184 cp morse-firmware/firmware/mm6108.bin $2/lib/firmware/morse
    185 wget http://dev.gateworks.com/firmware/gw16159/$MORSE_VER/LICENSE -O $2/lib/firmware/morse/LICENSE
    186 wget "http://dev.gateworks.com/firmware/gw16159/$MORSE_VER/bcf_default.bin" -O $2/lib/firmware/morse/bcf_default.bin
     187cp morse-firmware/firmware/mm8108b2-rl.bin $2/lib/firmware/morse
     188# GW16170 mm8108/usb
     189wget https://dev.gateworks.com/firmware/gw16170/mm8108-2.0.0/bcf_mm8108_m20_us.bin -O $2/lib/firmware/morse/bcf_boardtype_0808.bin
    187190# GW16167 mm8108/usb
    188 cp morse-firmware/firmware/mm8108b2-rl.bin $2/lib/firmware/morse
    189191cp -P morse-firmware/bcf/morsemicro/* $2/lib/firmware/morse
    190192
    191193[ -d $OUTDIR/include/libnl3 ] || {
    192         echo "Building libnl..."
     194        echo "Building libnl..."
    193195        cd libnl
    194196        ./autogen.sh
    195197        ./configure --host=$ARCH CC=${CROSS_COMPILE}gcc --prefix=$OUTDIR --disable-shared
    196198        make clean
    197         make -j$(nproc)
     199        make -j$(nproc)
    198200        make install
    199201        cd ..
     
    201203
    202204[ -d $OUTDIR/include/openssl ] || {
    203         echo "Building openssl..."
     205        echo "Building openssl..."
    204206        cd openssl
    205207        ./Configure linux-generic32 no-shared no-dso no-async -DL_ENDIAN --prefix=$OUTDIR --openssldir=$OUTDIR
    206208        # needed no-async to build latest openssl against uclib
    207         make -j$(nproc) \
     209        make -j$(nproc) \
    208210                CC=${CROSS_COMPILE}gcc \
    209211                RANLIB=${CROSS_COMPILE}ranlib \
     
    218220# libusb
    219221[ -d $OUTDIR/include/libusb ] || {
    220         echo "Building libusb..."
    221         cd libusb
     222        echo "Building libusb..."
     223        cd libusb
    222224        ./autogen.sh --disable-udev
    223225        ./configure --host=$ARCH CC=${CROSS_COMPILE}gcc --prefix=$OUTDIR --disable-shared --enable-examples-build --disable-log --disable-udev
    224         make -j$(nproc) \
    225                 CFLAGS="-Wunused-parameter" \
     226        make -j$(nproc) \
     227                CFLAGS="-Wunused-parameter" \
    226228                CC=${CROSS_COMPILE}gcc \
    227229                RANLIB=${CROSS_COMPILE}ranlib \
     
    229231                MAKEDEPPROG=${CROSS_COMPILE}gcc \
    230232                PROCESSOR=ARM
    231         make install
    232         cd ..
     233        make install
     234        cd ..
    233235}
    234236
    235237# wpa_supplicant
    236238[ -r hostap/wpa_supplicant/wpa_supplicant_s1g ] || {
    237         echo "Building wpa_supplicant_s1g..."
    238         cp hostap/wpa_supplicant/defconfig hostap/wpa_supplicant/.config
    239         disables="CONFIG_BGSCAN_SIMPLE"
    240         enables="CONFIG_DRIVER_NL80211_QCA \
    241                 CONFIG_WPS_NFC CONFIG_SAE_PK \
    242                 CONFIG_EAP_MD5 \
    243                 CONFIG_EAP_MSCHAPV2 \
    244                 CONFIG_EAP_TLS \
    245                 CONFIG_EAP_TLSV1_3 \
    246                 CONFIG_EAP_PEAP \
    247                 CONFIG_EAP_TTLS \
    248                 CONFIG_EAP_GTC \
    249                 CONFIG_EAP_PWD \
    250                 CONFIG_WPS_ER \
    251                 CONFIG_WPS_REG_DISABLE_OPEN \
    252                 CONFIG_WPS_NFC \
    253                 CONFIG_SAE_PK \
    254                 CONFIG_DEBUG_SYSLOG_FACILITY \
    255                 CONFIG_MESH \
    256                 CONFIG_BGSCAN_SIMPLE \
    257                 "
    258         for opt in $enables; do
    259                 sed -i -e "s/^#$opt=y/$opt=y/" hostap/wpa_supplicant/.config
    260         done
    261         for opt in $disables; do
    262                 sed -i -e "s/^$opt=y/#$opt=y/" hostap/wpa_supplicant/.config
    263         done
    264         make -C hostap/wpa_supplicant/ clean
    265         PKG_CONFIG_PATH="$OUTDIR/lib/pkgconfig" \
    266         CFLAGS="-D_GNU_SOURCE -I $OUTDIR/include/libnl3 -I $OUTDIR/include -Wno-deprecated-declarations" \
    267         LDFLAGS="-L $OUTDIR/lib/ --static" \
    268         DESTDIR="$OUTDIR/sbin" \
    269         BINDIR=/usr/sbin \
    270         LIBS="-lnl-3 -lm -lpthread -lcrypto -lssl" \
    271         CC=${CROSS_COMPILE}gcc \
    272                 make -j$(nproc) -C hostap/wpa_supplicant/
     239        echo "Building wpa_supplicant_s1g..."
     240        cp hostap/wpa_supplicant/defconfig hostap/wpa_supplicant/.config
     241        disables="CONFIG_BGSCAN_SIMPLE"
     242        enables="CONFIG_DRIVER_NL80211_QCA \
     243                CONFIG_WPS_NFC CONFIG_SAE_PK \
     244                CONFIG_EAP_MD5 \
     245                CONFIG_EAP_MSCHAPV2 \
     246                CONFIG_EAP_TLS \
     247                CONFIG_EAP_TLSV1_3 \
     248                CONFIG_EAP_PEAP \
     249                CONFIG_EAP_TTLS \
     250                CONFIG_EAP_GTC \
     251                CONFIG_EAP_PWD \
     252                CONFIG_WPS_ER \
     253                CONFIG_WPS_REG_DISABLE_OPEN \
     254                CONFIG_WPS_NFC \
     255                CONFIG_SAE_PK \
     256                CONFIG_DEBUG_SYSLOG_FACILITY \
     257                CONFIG_MESH \
     258                CONFIG_BGSCAN_SIMPLE \
     259                "
     260        for opt in $enables; do
     261                sed -i -e "s/^#$opt=y/$opt=y/" hostap/wpa_supplicant/.config
     262        done
     263        for opt in $disables; do
     264                sed -i -e "s/^$opt=y/#$opt=y/" hostap/wpa_supplicant/.config
     265        done
     266        make -C hostap/wpa_supplicant/ clean
     267        PKG_CONFIG_PATH="$OUTDIR/lib/pkgconfig" \
     268        CFLAGS="-D_GNU_SOURCE \
     269                -Dexplicit_bzero\(p,l\)=memset\(\(p\),0,\(l\)\) \
     270                -I $PWD/morse_cli \
     271                -I $OUTDIR/include/libnl3 \
     272                -I $OUTDIR/include \
     273                -Wno-deprecated-declarations \
     274                -Wno-error=implicit-function-declaration" \
     275        LDFLAGS="-L $OUTDIR/lib/ --static" \
     276        DESTDIR="$OUTDIR/sbin" \
     277        BINDIR=/usr/sbin \
     278        LIBS="-lnl-3 -lm -lpthread -lcrypto -lssl" \
     279        CC=${CROSS_COMPILE}gcc \
     280                make -j$(nproc) -C hostap/wpa_supplicant/
    273281}
    274282cp hostap/wpa_supplicant/{wpa_supplicant_s1g,wpa_cli_s1g,wpa_passphrase_s1g} $DESTDIR/usr/sbin/
     
    276284# hostapd
    277285[ -r hostap/hostapd/hostapd_s1g ] || {
    278         echo "Building hostapd_s1g..."
    279         cp hostap/hostapd/defconfig hostap/hostapd/.config
    280         disables=""
    281         enables="CONFIG_DRIVER_NL80211_QCA \
    282                 CONFIG_EAP \
    283                 CONFIG_EAP_MD5 \
    284                 CONFIG_EAP_EKE \
    285                 CONFIG_EAP_MSCHAPV2 \
    286                 CONFIG_EAP_PEAP \
    287                 CONFIG_EAP_TLS \
    288                 CONFIG_EAP_TTLS \
    289                 CONFIG_EAP_GTC \
    290                 CONFIG_EAP_SIM \
    291                 CONFIG_EAP_AKA \
    292                 CONFIG_EAP_AKA_PRIME \
    293                 CONFIG_EAP_PAX \
    294                 CONFIG_EAP_PSK \
    295                 CONFIG_EAP_PWD \
    296                 CONFIG_EAP_SAKE \
    297                 CONFIG_EAP_GPSK \
    298                 CONFIG_EAP_GPSK_SHA256 \
    299                 CONFIG_EAP_FAST \
    300                 CONFIG_EAP_TEAP \
    301                 CONFIG_WPS \
    302                 CONFIG_WPS_UPNP \
    303                 CONFIG_WPS_NFC \
    304                 CONFIG_EAP_IKEV2 \
    305                 CONFIG_EAP_TNC \
    306                 CONFIG_RADIUS_SERVER \
    307                 CONFIG_SAE \
    308                 CONFIG_SAE_PK \
    309                 CONFIG_TLSV11 \
    310                 CONFIG_TLSV12 \
    311                 "
    312         for opt in $enables; do
    313                 sed -i -e "s/^#$opt=y/$opt=y/" hostap/hostapd/.config
    314         done
    315         for opt in $disables; do
    316                 sed -i -e "s/^$opt=y/#$opt=y/" hostap/hostapd/.config
    317         done
    318         make -C hostap/hostapd/ clean
    319         PKG_CONFIG_PATH="$OUTDIR/lib/pkgconfig" \
    320         CFLAGS="-D_GNU_SOURCE -I $OUTDIR/include/libnl3 -I $OUTDIR/include -Wno-deprecated-declarations" \
    321         LDFLAGS="-L $OUTDIR/lib/ --static" \
    322         DESTDIR="$OUTDIR/sbin" \
    323         BINDIR=/usr/sbin \
    324         LIBS="-lnl-3 -lm -lpthread -lcrypto -lssl" \
    325         CC=${CROSS_COMPILE}gcc \
    326                 make -j$(nproc) -C hostap/hostapd/
     286        echo "Building hostapd_s1g..."
     287        cp hostap/hostapd/defconfig hostap/hostapd/.config
     288        disables=""
     289        enables="CONFIG_DRIVER_NL80211_QCA \
     290                CONFIG_EAP \
     291                CONFIG_EAP_MD5 \
     292                CONFIG_EAP_EKE \
     293                CONFIG_EAP_MSCHAPV2 \
     294                CONFIG_EAP_PEAP \
     295                CONFIG_EAP_TLS \
     296                CONFIG_EAP_TTLS \
     297                CONFIG_EAP_GTC \
     298                CONFIG_EAP_SIM \
     299                CONFIG_EAP_AKA \
     300                CONFIG_EAP_AKA_PRIME \
     301                CONFIG_EAP_PAX \
     302                CONFIG_EAP_PSK \
     303                CONFIG_EAP_PWD \
     304                CONFIG_EAP_SAKE \
     305                CONFIG_EAP_GPSK \
     306                CONFIG_EAP_GPSK_SHA256 \
     307                CONFIG_EAP_FAST \
     308                CONFIG_EAP_TEAP \
     309                CONFIG_WPS \
     310                CONFIG_WPS_UPNP \
     311                CONFIG_WPS_NFC \
     312                CONFIG_EAP_IKEV2 \
     313                CONFIG_EAP_TNC \
     314                CONFIG_RADIUS_SERVER \
     315                CONFIG_SAE \
     316                CONFIG_SAE_PK \
     317                CONFIG_TLSV11 \
     318                CONFIG_TLSV12 \
     319                "
     320        for opt in $enables; do
     321                sed -i -e "s/^#$opt=y/$opt=y/" hostap/hostapd/.config
     322        done
     323        for opt in $disables; do
     324                sed -i -e "s/^$opt=y/#$opt=y/" hostap/hostapd/.config
     325        done
     326        make -C hostap/hostapd/ clean
     327        PKG_CONFIG_PATH="$OUTDIR/lib/pkgconfig" \
     328        CFLAGS="-D_GNU_SOURCE \
     329                -Dexplicit_bzero\(p,l\)=memset\(\(p\),0,\(l\)\) \
     330                -I $PWD/morse_cli \
     331                -I $OUTDIR/include/libnl3 \
     332                -I $OUTDIR/include \
     333                -Wno-deprecated-declarations \
     334                -Wno-error=implicit-function-declaration" \
     335        LDFLAGS="-L $OUTDIR/lib/ --static" \
     336        DESTDIR="$OUTDIR/sbin" \
     337        BINDIR=/usr/sbin \
     338        LIBS="-lnl-3 -lm -lpthread -lcrypto -lssl" \
     339        CC=${CROSS_COMPILE}gcc \
     340                make -j$(nproc) -C hostap/hostapd/
    327341}
    328342cp hostap/hostapd/{hostapd_s1g,hostapd_cli_s1g} $DESTDIR/usr/sbin/
     
    330344# morse_cli
    331345[ -r morse_cli/morse_cli.bin ] || {
    332         echo "Building morse_cli..."
    333         make -C morse_cli clean
    334         PKG_CONFIG_PATH="$OUTDIR/lib/pkgconfig" \
    335         CFLAGS="-I $OUTDIR/include/libnl3 -I $OUTDIR/include/libusb-1.0 -I $OUTDIR/include" \
    336         LDFLAGS="-L $OUTDIR/lib/ --static" \
    337         CC=${CROSS_COMPILE}gcc \
    338         make \
    339                 CONFIG_MORSE_TRANS_NL80211=1 \
    340                 CONFIG_MORSE_STATIC=1 \
    341                 -j$(nproc) -C morse_cli
     346        echo "Building morse_cli..."
     347        make -C morse_cli clean
     348        PKG_CONFIG_PATH="$OUTDIR/lib/pkgconfig" \
     349        CFLAGS="-I $OUTDIR/include/libnl3 -I $OUTDIR/include/libusb-1.0 -I $OUTDIR/include" \
     350        LDFLAGS="-L $OUTDIR/lib/ --static" \
     351        CC=${CROSS_COMPILE}gcc \
     352        make \
     353                CONFIG_MORSE_TRANS_NL80211=1 \
     354                CONFIG_MORSE_STATIC=1 \
     355                -j$(nproc) -C morse_cli
    342356}
    343357cp morse_cli/morse_cli $DESTDIR/usr/sbin/
    344 
    345 # module parameters
    346 echo "options morse country=$COUNTRY enable_ext_xtal_init=1" > $DESTDIR/etc/modprobe.d/morse.conf
    347 
    348358EOF
    349 chmod +x custom_kernel_morsemicro
     359chmod +x custom_kernel_mm8108
    350360}}}
    351361  3. rebuild the ubuntu-image:
     
    356366
    357367Module Parameters:
    358  - There are a number of module parameters supported by morse.ko however the required ones for the GW16167 are:
     368 - There are a number of module parameters supported by morse.ko however the required ones for the GW16167/GW16170 are:
    359369  * country=US
    360370 - These can be placed in /etc/modprobe..d such as:
     
    362372echo "options morse country=US" > /etc/modprobe.d/morse.conf
    363373}}}
    364   - Note that our build example and pre-built BSP's also add a 'enable_ext_xtal_init=1' which is not needed for the USB based GW16167 but is needed for the SDIO based GW16159 as it has an external XTAL; we add it so that both cards are supported
    365374
    366375Console Messages:
    367376{{{#!bash
    368 # lsusb | grep Morse
    369 Bus 003 Device 003: ID 325b:8100 Morse Micro MM81xx Wi-Fi HaLow 802.11ah Transceiver # dmesg | grep morse
    370 # dmesg | grep morse
    371 [    8.298087] morse micro driver registration. Version v1.16.4-gdec5bc215b88
    372 [    8.298612] morse_usb 3-1.2:1.0: USB Morse device now attached to Morse driver (minor=-1)
    373 [    8.312450] morse_usb 3-1.2:1.0: Loaded firmware from morse/mm8108b2-rl.bin, size 456924, crc32 0xe4799c8d
    374 [    8.313800] morse_usb 3-1.2:1.0: Loaded BCF from morse/bcf_boardtype_0807.bin, size 2081, crc32 0xa80ae47b
    375 [    9.451353] morse_usb 3-1.2:1.0: morse_mac_init: WARNING enable_ps modparam must only be used for testing - use iw set power_save
    376 [    9.524340] morse_usb 3-1.2:1.0: Driver loaded with kernel module parameters
    377 [    9.524372] morse_usb 3-1.2:1.0:     slow_clock_mode                         : 0
    378 [    9.524407] morse_usb 3-1.2:1.0:     enable_1mhz_probes                      : Y
    379 [    9.524416] morse_usb 3-1.2:1.0:     enable_sched_scan                       : Y
    380 [    9.524424] morse_usb 3-1.2:1.0:     enable_hw_scan                          : Y
    381 [    9.524432] morse_usb 3-1.2:1.0:     enable_pv1                              : N
    382 [    9.524440] morse_usb 3-1.2:1.0:     enable_page_slicing                     : N
    383 [    9.524448] morse_usb 3-1.2:1.0:     log_modparams_on_boot                   : Y
    384 [    9.524455] morse_usb 3-1.2:1.0:     enable_mcast_rate_control               : N
    385 [    9.524463] morse_usb 3-1.2:1.0:     enable_mcast_whitelist                  : Y
    386 [    9.524471] morse_usb 3-1.2:1.0:     ocs_type                                : 1
    387 [    9.524479] morse_usb 3-1.2:1.0:     enable_wiphy                            : N
    388 [    9.524487] morse_usb 3-1.2:1.0:     enable_auto_mpsw                        : Y
    389 [    9.524493] morse_usb 3-1.2:1.0:     duty_cycle_probe_retry_threshold        : 2500
    390 [    9.524499] morse_usb 3-1.2:1.0:     duty_cycle_mode                         : 0
    391 [    9.524504] morse_usb 3-1.2:1.0:     enable_auto_duty_cycle                  : Y
    392 [    9.524511] morse_usb 3-1.2:1.0:     dhcpc_lease_update_script               : /morse/scripts/dhcpc_update.sh
    393 [    9.524517] morse_usb 3-1.2:1.0:     enable_ibss_probe_filtering             : Y
    394 [    9.524526] morse_usb 3-1.2:1.0:     enable_dhcpc_offload                    : N
    395 [    9.524533] morse_usb 3-1.2:1.0:     enable_arp_offload                      : N
    396 [    9.524541] morse_usb 3-1.2:1.0:     enable_bcn_change_seq_monitor           : N
    397 [    9.524549] morse_usb 3-1.2:1.0:     enable_cac                              : N
    398 [    9.524555] morse_usb 3-1.2:1.0:     max_mc_frames                           : 10
    399 [    9.524564] morse_usb 3-1.2:1.0:     tx_max_power_mbm                        : 2200
    400 [    9.524572] morse_usb 3-1.2:1.0:     enable_twt                              : Y
    401 [    9.524580] morse_usb 3-1.2:1.0:     enable_mac80211_connection_monitor      : N
    402 [    9.524588] morse_usb 3-1.2:1.0:     enable_airtime_fairness                 : N
    403 [    9.524596] morse_usb 3-1.2:1.0:     enable_raw                              : Y
    404 [    9.524604] morse_usb 3-1.2:1.0:     max_aggregation_count                   : 0
    405 [    9.524612] morse_usb 3-1.2:1.0:     max_rate_tries                          : 1
    406 [    9.524620] morse_usb 3-1.2:1.0:     max_rates                               : 4
    407 [    9.524627] morse_usb 3-1.2:1.0:     enable_watchdog_reset                   : N
    408 [    9.524635] morse_usb 3-1.2:1.0:     watchdog_interval_secs                  : 30
    409 [    9.524643] morse_usb 3-1.2:1.0:     enable_watchdog                         : Y
    410 [    9.524651] morse_usb 3-1.2:1.0:     country                                 : US
    411 [    9.524659] morse_usb 3-1.2:1.0:     enable_cts_to_self                      : N
    412 [    9.524667] morse_usb 3-1.2:1.0:     enable_rts_8mhz                         : N
    413 [    9.524674] morse_usb 3-1.2:1.0:     enable_trav_pilot                       : Y
    414 [    9.524682] morse_usb 3-1.2:1.0:     enable_sgi_rc                           : Y
    415 [    9.524689] morse_usb 3-1.2:1.0:     enable_mbssid_ie                        : N
    416 [    9.524697] morse_usb 3-1.2:1.0:     virtual_sta_max                         : 0
    417 [    9.524705] morse_usb 3-1.2:1.0:     thin_lmac                               : N
    418 [    9.524712] morse_usb 3-1.2:1.0:     enable_dynamic_ps_offload               : Y
    419 [    9.524720] morse_usb 3-1.2:1.0:     enable_ps                               : 0
    420 [    9.524728] morse_usb 3-1.2:1.0:     enable_subbands                         : 2
    421 [    9.524736] morse_usb 3-1.2:1.0:     enable_survey                           : Y
    422 [    9.524744] morse_usb 3-1.2:1.0:     mcs10_mode                              : 0
    423 [    9.524750] morse_usb 3-1.2:1.0:     mcs_mask                                : 1023
    424 [    9.524755] morse_usb 3-1.2:1.0:     no_hwcrypt                              : N
    425 [    9.524761] morse_usb 3-1.2:1.0:     enable_ext_xtal_init                    : Y
    426 [    9.524767] morse_usb 3-1.2:1.0:     enable_otp_check                        : Y
    427 [    9.524772] morse_usb 3-1.2:1.0:     bcf                                     :
    428 [    9.524781] morse_usb 3-1.2:1.0:     serial                                  : default
    429 [    9.524788] morse_usb 3-1.2:1.0:     debug_mask                              : 8
    430 [    9.524796] morse_usb 3-1.2:1.0:     tx_status_lifetime_ms                   : 15000
    431 [    9.524805] morse_usb 3-1.2:1.0:     tx_queued_lifetime_ms                   : 1000
    432 [    9.524813] morse_usb 3-1.2:1.0:     max_txq_len                             : 32
    433 [    9.524821] morse_usb 3-1.2:1.0:     default_cmd_timeout_ms                  : 600
    434 [    9.524829] morse_usb 3-1.2:1.0:     reattach_hw                             : N
    435 [    9.524838] morse_usb 3-1.2:1.0:     hw_reload_after_stop                    : 5
    436 [    9.524846] morse_usb 3-1.2:1.0:     enable_short_bcn_as_dtim_override       : -1
    437 [    9.524852] morse_usb 3-1.2:1.0:     fw_bin_file                             :
    438 [    9.524868] morse_usb 3-1.2:1.0:     sdio_reset_time                         : 400
    439 [    9.524877] morse_usb 3-1.2:1.0:     macaddr_suffix                          : 00:00:00
    440 [    9.524885] morse_usb 3-1.2:1.0:     macaddr_octet                           : 255
    441 [    9.524893] morse_usb 3-1.2:1.0:     max_total_vendor_ie_bytes               : 514
    442 [    9.524902] morse_usb 3-1.2:1.0:     coredump_include                        : 1
    443 [    9.524910] morse_usb 3-1.2:1.0:     coredump_method                         : 1
    444 [    9.524917] morse_usb 3-1.2:1.0:     enable_coredump                         : Y
    445 [    9.524925] morse_usb 3-1.2:1.0:     sdio_clk_debugfs                        :
    446 [    9.524933] morse_usb 3-1.2:1.0:     enable_mm_vendor_ie                     : Y
    447 [    9.524941] morse_usb 3-1.2:1.0:     fixed_guard                             : 0
    448 [    9.524949] morse_usb 3-1.2:1.0:     fixed_ss                                : 1
    449 [    9.524956] morse_usb 3-1.2:1.0:     fixed_bw                                : 2
    450 [    9.524964] morse_usb 3-1.2:1.0:     fixed_mcs                               : 4
    451 [    9.524972] morse_usb 3-1.2:1.0:     enable_fixed_rate                       : N
    452 [    9.527922] morse_io: Device node '/dev/morse_io' created successfully
    453 [    9.528089] usbcore: registered new interface driver morse_usb
     377[   10.478719] morse micro driver registration. Version 0-rel_mm8108_2_0_0_2026_Apr_21
     378[   10.478846] morse_usb 3-1.2:1.0: USB Morse device now attached to Morse driver (minor=-1)
     379[   10.490458] morse_usb 3-1.2:1.0: Loaded firmware from morse/mm8108b2-rl.bin, size 488704, crc32 0xd5047b32
     380[   10.490971] morse_usb 3-1.2:1.0: Loaded BCF from morse/bcf_boardtype_0808.bin, size 2479, crc32 0xa31464ef
     381[   11.359133] morse_usb 3-1.2:1.0: morse_mac_init: WARNING enable_ps modparam must only be used for testing - use iw set power_save
     382[   11.450783] morse_usb 3-1.2:1.0: Driver loaded with kernel module parameters
     383[   11.450802] morse_usb 3-1.2:1.0:     enable_pre_assoc_ps                     : N
     384[   11.450810] morse_usb 3-1.2:1.0:     slow_clock_mode                         : 0
     385[   11.450816] morse_usb 3-1.2:1.0:     enable_1mhz_probes                      : Y
     386[   11.450822] morse_usb 3-1.2:1.0:     enable_sched_scan                       : Y
     387[   11.450828] morse_usb 3-1.2:1.0:     enable_hw_scan                          : Y
     388[   11.450833] morse_usb 3-1.2:1.0:     enable_pv1                              : N
     389[   11.450839] morse_usb 3-1.2:1.0:     enable_page_slicing                     : N
     390[   11.450844] morse_usb 3-1.2:1.0:     log_modparams_on_boot                   : Y
     391[   11.450850] morse_usb 3-1.2:1.0:     enable_mcast_rate_control               : N
     392[   11.450856] morse_usb 3-1.2:1.0:     enable_mcast_whitelist                  : Y
     393[   11.450861] morse_usb 3-1.2:1.0:     ocs_type                                : 1
     394[   11.450867] morse_usb 3-1.2:1.0:     enable_wiphy                            : N
     395[   11.450872] morse_usb 3-1.2:1.0:     enable_auto_mpsw                        : Y
     396[   11.450879] morse_usb 3-1.2:1.0:     duty_cycle_probe_retry_threshold        : 2500
     397[   11.450885] morse_usb 3-1.2:1.0:     duty_cycle_mode                         : 0
     398[   11.450890] morse_usb 3-1.2:1.0:     enable_auto_duty_cycle                  : Y
     399[   11.450897] morse_usb 3-1.2:1.0:     dhcpc_lease_update_script               : /morse/scripts/dhcpc_update.sh
     400[   11.450903] morse_usb 3-1.2:1.0:     enable_ibss_probe_filtering             : Y
     401[   11.450909] morse_usb 3-1.2:1.0:     enable_dhcpc_offload                    : N
     402[   11.450914] morse_usb 3-1.2:1.0:     enable_arp_offload                      : N
     403[   11.450920] morse_usb 3-1.2:1.0:     enable_bcn_change_seq_monitor           : N
     404[   11.450925] morse_usb 3-1.2:1.0:     enable_cac                              : N
     405[   11.450931] morse_usb 3-1.2:1.0:     enable_amsdu_override                   : -1
     406[   11.450937] morse_usb 3-1.2:1.0:     max_mc_frames                           : -1
     407[   11.450943] morse_usb 3-1.2:1.0:     tx_max_power_mbm                        : 0
     408[   11.450948] morse_usb 3-1.2:1.0:     enable_twt                              : Y
     409[   11.450954] morse_usb 3-1.2:1.0:     enable_mac80211_connection_monitor      : N
     410[   11.450959] morse_usb 3-1.2:1.0:     enable_airtime_fairness                 : 0
     411[   11.450965] morse_usb 3-1.2:1.0:     max_aggregation_count                   : 0
     412[   11.450971] morse_usb 3-1.2:1.0:     max_rate_tries                          : 1
     413[   11.450977] morse_usb 3-1.2:1.0:     max_rates                               : 4
     414[   11.450983] morse_usb 3-1.2:1.0:     watchdog_interval_secs                  : 30
     415[   11.450989] morse_usb 3-1.2:1.0:     enable_watchdog                         : Y
     416[   11.450994] morse_usb 3-1.2:1.0:     country                                 : US
     417[   11.450999] morse_usb 3-1.2:1.0:     enable_cts_to_self                      : N
     418[   11.451005] morse_usb 3-1.2:1.0:     enable_rts_8mhz                         : N
     419[   11.451010] morse_usb 3-1.2:1.0:     enable_trav_pilot                       : Y
     420[   11.451016] morse_usb 3-1.2:1.0:     enable_sgi_rc                           : Y
     421[   11.451021] morse_usb 3-1.2:1.0:     enable_mbssid_ie                        : N
     422[   11.451027] morse_usb 3-1.2:1.0:     virtual_sta_max                         : 0
     423[   11.451032] morse_usb 3-1.2:1.0:     thin_lmac                               : N
     424[   11.451038] morse_usb 3-1.2:1.0:     enable_subbands                         : 2
     425[   11.451044] morse_usb 3-1.2:1.0:     enable_survey                           : Y
     426[   11.451049] morse_usb 3-1.2:1.0:     mcs10_mode                              : 0
     427[   11.451055] morse_usb 3-1.2:1.0:     mcs_mask                                : 1023
     428[   11.451061] morse_usb 3-1.2:1.0:     no_hwcrypt                              : N
     429[   11.451066] morse_usb 3-1.2:1.0:     enable_ext_xtal_init                    : N
     430[   11.451072] morse_usb 3-1.2:1.0:     enable_otp_check                        : Y
     431[   11.451077] morse_usb 3-1.2:1.0:     bcf                                     :
     432[   11.451083] morse_usb 3-1.2:1.0:     serial                                  : default
     433[   11.451089] morse_usb 3-1.2:1.0:     debug_mask                              : 8
     434[   11.451095] morse_usb 3-1.2:1.0:     tx_status_lifetime_ms                   : 15000
     435[   11.451101] morse_usb 3-1.2:1.0:     tx_queued_lifetime_ms                   : 1000
     436[   11.451106] morse_usb 3-1.2:1.0:     max_txq_len                             : 32
     437[   11.451113] morse_usb 3-1.2:1.0:     default_cmd_timeout_ms                  : 600
     438[   11.451119] morse_usb 3-1.2:1.0:     reattach_hw                             : N
     439[   11.451124] morse_usb 3-1.2:1.0:     hw_reload_after_stop                    : 5
     440[   11.451130] morse_usb 3-1.2:1.0:     enable_short_bcn_as_dtim_override       : -1
     441[   11.451137] morse_usb 3-1.2:1.0:     rsn_beacon_mode                         : 0
     442[   11.451142] morse_usb 3-1.2:1.0:     enable_dynamic_ps_offload               : Y
     443[   11.451149] morse_usb 3-1.2:1.0:     enable_ps                               : 0
     444[   11.451154] morse_usb 3-1.2:1.0:     fw_bin_file                             :
     445[   11.451160] morse_usb 3-1.2:1.0:     sdio_reset_time                         : 400
     446[   11.451166] morse_usb 3-1.2:1.0:     macaddr_suffix                          : 00:00:00
     447[   11.451172] morse_usb 3-1.2:1.0:     macaddr_octet                           : 255
     448[   11.451178] morse_usb 3-1.2:1.0:     max_total_vendor_ie_bytes               : 514
     449[   11.451183] morse_usb 3-1.2:1.0:     hw_scan_replay_limit                    : 0
     450[   11.451192] morse_usb 3-1.2:1.0:     hw_scan_prim_deconstruct                : 0
     451[   11.451203] morse_usb 3-1.2:1.0:     coredump_include                        : 1
     452[   11.451211] morse_usb 3-1.2:1.0:     coredump_method                         : 1
     453[   11.451221] morse_usb 3-1.2:1.0:     enable_coredump                         : Y
     454[   11.451227] morse_usb 3-1.2:1.0:     enable_hw_leds                          : Y
     455[   11.451235] morse_usb 3-1.2:1.0:     enable_scan_result_cache                : N
     456[   11.451240] morse_usb 3-1.2:1.0:     enable_mm_vendor_ie                     : Y
     457[   11.451246] morse_usb 3-1.2:1.0:     fixed_guard                             : 0
     458[   11.451252] morse_usb 3-1.2:1.0:     fixed_ss                                : 1
     459[   11.451257] morse_usb 3-1.2:1.0:     fixed_bw                                : 2
     460[   11.451263] morse_usb 3-1.2:1.0:     fixed_mcs                               : 4
     461[   11.451268] morse_usb 3-1.2:1.0:     enable_fixed_rate                       : N
     462[   11.453184] morse_io: Device node '/dev/morse_io' created successfully
     463[   11.453388] usbcore: registered new interface driver morse_usb
     464
    454465# ls -l /sys/class/net/wlan0
    455466lrwxrwxrwx 1 root root 0 Jan 21 23:05 /sys/class/net/wlan0 -> ../../devices/platform/soc@0/32f10108.usb/38200000.usb/xhci -hcd.1.auto/usb3/3-1/3-1.2/3-1.2:1.0/net/wlan0
    456467}}}
    457 
    458 Note, driver makefile is here: [https://github.com/Gateworks/morse_driver/blob/1.16.4-gateworks/Makefile]
    459468
    460469=== hostapd and wpa_supplicant
     
    508517[=#openwrt]
    509518=== OpenWrt
    510 Support has been added for the GW16167 to the Gateworks OpenWrt packages for the 24.10/25.12 branches:
     519Support has been added for the GW16167/GW16170 to the Gateworks OpenWrt packages for the 24.10/25.12 branches:
    511520 * https://github.com/Gateworks/gw-openwrt-packages/tree/24.10/gateworks/morse-micro
    512521 * https://github.com/Gateworks/gw-openwrt-packages/tree/25.12/gateworks/morse-micro
    513522
    514 The morse_driver and morse-fw packages are required and included in the pre-built Gateworks OpenWrt image for venice: https://dev.gateworks.com/venice/images/openwrt-venice.img.gz
    515  
     523The following packages are needed to support the GW16167/GW16170 (which are included in the Gateworks pre-built OpenWrt image):
     524 - CONFIG_PACKAGE_mm8108-firmware=y
     525 - CONFIG_PACKAGE_kmod-mm8108_usb=y
     526 - CONFIG_PACKAGE_hostapd_s1g=y
     527 - CONFIG_PACKAGE_wpa_supplicant_s1g=y
     528 - CONFIG_PACKAGE_libwpa_client_s1g=y
     529 - CONFIG_PACKAGE_morse_cli=y
     530
    516531OpenWrt will recognize the interface as a generic 5Ghz radio and allow you to configure it as an AP or a STA. OpenWrt does not understand that the channels map to the sub-1GHz band. The bandwidths will map as follows:
    517532 - 20MHz = 1MHz sub-1G
     
    525540
    526541{{{#!bash
    527 # Disable UCI’s wifi control for radio0 (gw16167)
     542# Disable UCI’s wifi control for radio0
    528543uci set wireless.radio0.disabled='1'
    529544uci commit wireless
     
    11301145}}}
    11311146  * If the device is not enumerating on the usb bus, then you should verify that your M.2 W_DISABLE1# (pin 56) and W_DISABLE2# (54) are logic high. Both of these pins have pull-up resistors on our card (200k for !W_DISABLE#1 and 10k for !W_DISABLE#2) so make sure you are not driving them low and do not have an on-board pull-down on your hardware.
    1132   * If you do not see the mm8108 enumerate on the USB bus, it could be that something is driving your PERST# signal low which would keep the mm8108 on the GW16167 in reset. You can verify this with a scope/meter on the PERST# signal.
    11331147  * Verify with another card that USB 2.0 on the miniPCIe socket works.
    11341148 * Can you see the device using the iw dev command? Does the MAC (mac address) prefix match 0c:bf:74 , which is the country prefix for Morse Micro?
     
    11791193However, for custom applications, SDIO can be used for custom orders of 100 pieces or more. Please contact Gateworks sales. Note, while SDIO and SPI interfaces are optional, they have not been tested or validated by Gateworks and may require software modification by the customer.
    11801194
    1181 Note, M.2 defines SDIO signals as 1.8V. However, the MM8108 module needs these at 3.3V. Gateworks does not include a translator on the GW16167. Thus, a custom designed M.2 slot that breaks the M.2 spec by using 3.3V would be needed for supporting SDIO. 
     1195Note, M.2 defines SDIO signals as 1.8V. However, the MM8108 module needs these at 3.3V. Gateworks does not include a translator on the GW16167/GW16170. Thus, a custom designed M.2 slot that breaks the M.2 spec by using 3.3V would be needed for supporting SDIO. 
    11821196
    11831197For supporting SDIO interface you will want to load the following zero-ohm resistors (RESS,0,1%,0.5A,0402):
     
    11941208 * M2.21: No Connect - SDIO_WAKE#
    11951209 * M2.23: SDIO_RESET# (3.3V)
    1196  
    1197 For SPI, it is required CONFIG_MORSE_SPI be added during the driver build for SPI support.
    1198 
    1199 To use the GW16167 with a microcontroller, consider reviewing the Morse Micro software here: [https://github.com/MorseMicro/mm-iot-sdk]
     1210
     1211For SDIO, it is required to add CONFIG_MORSE_SDIO during the driver build as well as specify a dt fragment to configure various GPIO's required by the driver.
     1212
     1213For SPI, it is required to add CONFIG_MORSE_SPI during the driver build.
     1214
     1215To use the GW16167/GW16170 with a microcontroller, consider reviewing the Morse Micro software here: [https://github.com/MorseMicro/mm-iot-sdk]
    12001216
    12011217[[Image(sdio.png,300px)]]