Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[usb_moded] Add configfs support. JB#42083
Add custom Makefile for faster smoke-test rebuilds without spending time
in configure, autotools, document generation and/or rolling rpm packages.

Add multiple include protection to all header files.

Move function prototypes away from header files that included in the
development package.

Mass rename functions to have a prefix giving context for the function.
For the most part the prefix is derived from the name of the compilation
module containing the function.

Mass normalize indentation to four spaces in all source files.

Augment author lists on each source file based on git committers.

Remove "inline" attributes from not-really-inlineable functions.

Remove .gitignore.

Remove unused modules-android.c source file.

Define _GNU_SOURCE for whole build rather than in individual files.

Fix resource leaks here and there.

Try to avoid hard-coding android usb paths.

Add configfs backend for usb cadget configuration.

Probe supported backends (configfs, android usb, or kmod) on usb-moded
startup and make them mutually exclusive with each other.

Allow configfs and android usb control structures some time to show up
if usb-moded is started during device bootup.

Refactor udev event listener to utilize a state machine. Simplifies
book keeping and makes pc/charger detection heuristics easier to control.

Refactor mode selection to utilize three interconnected mini state machines.
Allows separating logically wanted mode from mode programmed to usb and
mode exposed over D-Bus.

Signed-off-by: Simo Piiroinen <simo.piiroinen@jollamobile.com>
  • Loading branch information
spiiroin committed Jul 6, 2018
1 parent b1f5517 commit 79c7a76
Show file tree
Hide file tree
Showing 56 changed files with 10,793 additions and 7,357 deletions.
448 changes: 448 additions & 0 deletions .depend

Large diffs are not rendered by default.

9 changes: 0 additions & 9 deletions .gitignore

This file was deleted.

328 changes: 328 additions & 0 deletions Makefile.custom
@@ -0,0 +1,328 @@
# ----------------------------------------------------------- -*- mode: sh -*-
# Package version
VERSION := 0.86.0

# Dummy default install dir - override from packaging scripts
DESTDIR ?= /tmp/usb-moded-test-install

# ----------------------------------------------------------------------------
# Standard directories
# ----------------------------------------------------------------------------

_PREFIX ?= /usr# # /usr
_INCLUDEDIR ?= $(_PREFIX)/include# # /usr/include
_EXEC_PREFIX ?= $(_PREFIX)# # /usr
_BINDIR ?= $(_EXEC_PREFIX)/bin# # /usr/bin
_SBINDIR ?= $(_EXEC_PREFIX)/sbin# # /usr/sbin
_LIBEXECDIR ?= $(_EXEC_PREFIX)/libexec# # /usr/libexec
_LIBDIR ?= $(_EXEC_PREFIX)/lib# # /usr/lib
_SYSCONFDIR ?= /etc# # /etc
_DATADIR ?= $(_PREFIX)/share# # /usr/share
_MANDIR ?= $(_DATADIR)/man# # /usr/share/man
_INFODIR ?= $(_DATADIR)/info# # /usr/share/info
_DEFAULTDOCDIR ?= $(_DATADIR)/doc# # /usr/share/doc
_LOCALSTATEDIR ?= /var# # /var
_UNITDIR ?= /lib/systemd/system#
_TESTSDIR ?= /opt/tests# # /opt/tests

# ----------------------------------------------------------------------------
# Install directories
# ----------------------------------------------------------------------------

USB_MODED_SBIN_PATH ?= $(_SBINDIR)

# ----------------------------------------------------------------------------
# Files to build / install
# ----------------------------------------------------------------------------

TARGETS_SBIN += usb_moded
TARGETS_SBIN += usb_moded_util

TARGETS_ALL += $(TARGETS_PLUGIN) $(TARGETS_SBIN) $(TARGETS_BIN)

TARGETS_ALL += udev-search

# ----------------------------------------------------------------------------
# Top level targets
# ----------------------------------------------------------------------------

.PHONY: build install clean distclean mostlyclean

build:: $(TARGETS_ALL)

install:: build

clean:: mostlyclean
$(RM) $(TARGETS_ALL)

distclean:: clean

mostlyclean::
$(RM) *.o *~ *.bak */*.o */*~ */*.bak

install :: install_main

install_main::
# sbin executables
install -d -m 755 $(DESTDIR)$(USB_MODED_SBIN_PATH)
install -m 755 $(TARGETS_SBIN) $(DESTDIR)$(USB_MODED_SBIN_PATH)
# config directories and files
install -d -m 755 $(DESTDIR)/etc
# /etc/udhcpd.conf
install -d -m 755 $(DESTDIR)/etc/usb-moded/
install -d -m 755 $(DESTDIR)/etc/usb-moded/dyn-modes
install -d -m 755 $(DESTDIR)/etc/usb-moded/run
install -d -m 755 $(DESTDIR)/etc/modprobe.d
# /etc/modprobe.d/g_ether.conf
# /etc/modprobe.d/usb_moded.conf
install -d -m 755 $(DESTDIR)/etc/tmpfiles.d
# /etc/tmpfiles.d/usb-moded.conf
install -d -m 755 $(DESTDIR)/etc/dbus-1/system.d
install -m 644 debian/usb_moded.conf $(DESTDIR)/etc/dbus-1/system.d/

# ----------------------------------------------------------------------------
# Build rules
# ----------------------------------------------------------------------------

%.pic.o : %.c ; $(CC) -o $@ -c $< -fPIC $(CPPFLAGS) $(CFLAGS)
%.so : %.pic.o ; $(CC) -shared -o $@ $^ $(LDFLAGS) $(LDLIBS)
%.o : %.c ; $(CC) -o $@ -c $< $(CPPFLAGS) $(CFLAGS)
% : %.o ; $(CC) -o $@ $^ $(LDFLAGS) $(LDLIBS)
%.a : ; $(AR) ru $@ $^

# ----------------------------------------------------------------------------
# Preprocessor options
# ----------------------------------------------------------------------------

# Preprocessor Defaults
CPPFLAGS += -D_GNU_SOURCE
CPPFLAGS += -D_FILE_OFFSET_BITS=64
CPPFLAGS += -D_FORTIFY_SOURCE=2

# usb-moded specific options
CPPFLAGS += -DSTATIC_CONFIG
CPPFLAGS += -DSYSTEMD
CPPFLAGS += -DCONNMAN
CPPFLAGS += -DAPP_SYNC
CPPFLAGS += -DUSE_MER_SSU
CPPFLAGS += -DMEEGOLOCK
CPPFLAGS += -DDEBUG

# ----------------------------------------------------------------------------
# Compiler options
# ----------------------------------------------------------------------------

CFLAGS += -std=c99
CFLAGS += -O2
CFLAGS += -g
CFLAGS += -Wall
CFLAGS += -Wwrite-strings
CFLAGS += -Wmissing-prototypes
#CFLAGS += -Wextra
#CFLAGS += -Werror

# ----------------------------------------------------------------------------
# Linker options
# ----------------------------------------------------------------------------

LDFLAGS += -pthread
LDFLAGS += -g
LDFLAGS += -pthread
LDFLAGS += -Wl,--as-needed

LDLIBS += -ldl

# ----------------------------------------------------------------------------
# Flags from pkg-config
# ----------------------------------------------------------------------------
PKG_NAMES += dbus-1
PKG_NAMES += dbus-glib-1
PKG_NAMES += glib-2.0
PKG_NAMES += libudev
PKG_NAMES += libkmod
PKG_NAMES += libsystemd
PKG_NAMES += ssu-sysinfo
PKG_NAMES += dsme

maintenance = normalize clean distclean mostlyclean
maintenance += protos-post

intersection = $(strip $(foreach w,$1, $(filter $w,$2)))
ifneq ($(call intersection,$(maintenance),$(MAKECMDGOALS)),)
PKG_CONFIG ?= true
endif

ifneq ($(strip $(PKG_NAMES)),)
PKG_CONFIG ?= pkg-config
PKG_CFLAGS := $(shell $(PKG_CONFIG) --cflags $(PKG_NAMES))
PKG_LDLIBS := $(shell $(PKG_CONFIG) --libs $(PKG_NAMES))
PKG_CPPFLAGS := $(filter -D%,$(PKG_CFLAGS)) $(filter -I%,$(PKG_CFLAGS))
PKG_CFLAGS := $(filter-out -I%, $(filter-out -D%, $(PKG_CFLAGS)))
endif

CPPFLAGS += $(PKG_CPPFLAGS)
CFLAGS += $(PKG_CFLAGS)
LDLIBS += $(PKG_LDLIBS)

# ----------------------------------------------------------------------------
# usb_moded
# ----------------------------------------------------------------------------

usb_moded-OBJS += src/usb_moded.o
usb_moded-OBJS += src/usb_moded-android.o
usb_moded-OBJS += src/usb_moded-appsync.o
usb_moded-OBJS += src/usb_moded-config.o
usb_moded-OBJS += src/usb_moded-configfs.o
usb_moded-OBJS += src/usb_moded-dbus.o
usb_moded-OBJS += src/usb_moded-devicelock.o
usb_moded-OBJS += src/usb_moded-dsme.o
usb_moded-OBJS += src/usb_moded-dyn-config.o
usb_moded-OBJS += src/usb_moded-log.o
usb_moded-OBJS += src/usb_moded-mac.o
usb_moded-OBJS += src/usb_moded-modesetting.o
usb_moded-OBJS += src/usb_moded-modules.o
usb_moded-OBJS += src/usb_moded-network.o
usb_moded-OBJS += src/usb_moded-ssu.o
usb_moded-OBJS += src/usb_moded-systemd.o
usb_moded-OBJS += src/usb_moded-trigger.o
usb_moded-OBJS += src/usb_moded-udev.o

usb_moded : $(usb_moded-OBJS)
$(CC) -o $@ $^ $(LDFLAGS) $(LDLIBS)

# ----------------------------------------------------------------------------
# udev-search
# ----------------------------------------------------------------------------

udev-search-OBJS += utils/udev-search.o

udev-search : $(udev-search-OBJS)
$(CC) -o $@ $^ $(LDFLAGS) $(LDLIBS)

# ----------------------------------------------------------------------------
# usb_moded_util
# ----------------------------------------------------------------------------

usb_moded_util-OBJS += src/usb_moded-util.o

usb_moded_util : $(usb_moded_util-OBJS)
$(CC) -o $@ $^ $(LDFLAGS) $(LDLIBS)

# ----------------------------------------------------------------------------
# SOURCE FILES
# ----------------------------------------------------------------------------

# Files without whitespace issues

CLEAN_SOURCES += src/usb_moded-android.c
CLEAN_SOURCES += src/usb_moded-appsync-dbus.c
CLEAN_SOURCES += src/usb_moded-appsync.c
CLEAN_SOURCES += src/usb_moded-config.c
CLEAN_SOURCES += src/usb_moded-configfs.c
CLEAN_SOURCES += src/usb_moded-dbus.c
CLEAN_SOURCES += src/usb_moded-devicelock.c
CLEAN_SOURCES += src/usb_moded-dsme.c
CLEAN_SOURCES += src/usb_moded-dyn-config.c
CLEAN_SOURCES += src/usb_moded-log.c
CLEAN_SOURCES += src/usb_moded-mac.c
CLEAN_SOURCES += src/usb_moded-modesetting.c
CLEAN_SOURCES += src/usb_moded-modules.c
CLEAN_SOURCES += src/usb_moded-network.c
CLEAN_SOURCES += src/usb_moded-ssu.c
CLEAN_SOURCES += src/usb_moded-systemd.c
CLEAN_SOURCES += src/usb_moded-trigger.c
CLEAN_SOURCES += src/usb_moded-udev.c
CLEAN_SOURCES += src/usb_moded-util.c
CLEAN_SOURCES += src/usb_moded.c
CLEAN_SOURCES += utils/udev-search.c

CLEAN_HEADERS += src/usb_moded-android.h
CLEAN_HEADERS += src/usb_moded-appsync-dbus-private.h
CLEAN_HEADERS += src/usb_moded-appsync-dbus.h
CLEAN_HEADERS += src/usb_moded-appsync.h
CLEAN_HEADERS += src/usb_moded-config-private.h
CLEAN_HEADERS += src/usb_moded-config.h
CLEAN_HEADERS += src/usb_moded-configfs.h
CLEAN_HEADERS += src/usb_moded-dbus-private.h
CLEAN_HEADERS += src/usb_moded-dbus.h
CLEAN_HEADERS += src/usb_moded-devicelock.h
CLEAN_HEADERS += src/usb_moded-dsme.h
CLEAN_HEADERS += src/usb_moded-dyn-config.h
CLEAN_HEADERS += src/usb_moded-log.h
CLEAN_HEADERS += src/usb_moded-mac.h
CLEAN_HEADERS += src/usb_moded-modes.h
CLEAN_HEADERS += src/usb_moded-modesetting.h
CLEAN_HEADERS += src/usb_moded-modules.h
CLEAN_HEADERS += src/usb_moded-network.h
CLEAN_HEADERS += src/usb_moded-ssu.h
CLEAN_HEADERS += src/usb_moded-systemd.h
CLEAN_HEADERS += src/usb_moded-trigger.h
CLEAN_HEADERS += src/usb_moded-udev.h
CLEAN_HEADERS += src/usb_moded.h

# Files with whitespace issues

# DIRTY_SOURCES += foo.c
# DIRTY_HEADERS += foo.h

# Files that will not pass preprocessor / compiler ...

# BROKEN_SOURCES += foo.c foo.h

ALL_SOURCES += $(CLEAN_SOURCES) $(DIRTY_SOURCES)
ALL_HEADERS += $(CLEAN_HEADERS) $(DIRTY_HEADERS)

# ----------------------------------------------------------------------------
# Source code normalization
# ----------------------------------------------------------------------------

.PHONY: normalize
normalize::
normalize_whitespace -M Makefile.custom
normalize_whitespace -a $(CLEAN_SOURCES) $(CLEAN_HEADERS)
normalize_whitespace -e -s $(DIRTY_SOURCES) $(DIRTY_HEADERS)

# ----------------------------------------------------------------------------
# AUTOMATIC HEADER DEPENDENCIES
# ----------------------------------------------------------------------------

.PHONY: depend
depend::
@echo "Updating .depend"
$(CC) -MM $(CPPFLAGS) $(CLEAN_SOURCES) $(DIRTY_SOURCES) |\
./depend_filter.py > .depend

ifneq ($(MAKECMDGOALS),depend) # not while: make depend
ifneq (,$(wildcard .depend)) # not if .depend does not exist
include .depend
endif
endif

# ----------------------------------------------------------------------------
# AUTOMATIC PROTOTYPE GENERFATION
# ----------------------------------------------------------------------------

.SUFFIXES: .q .p .g

%.q : %.c ; $(CC) -o $@ -E $< $(CPPFLAGS) $(MCE_CFLAGS)
%.p : %.q ; cproto -s < $< | prettyproto.py > $@
%.g : %.q ; cproto < $< | prettyproto.py > $@

clean::
$(RM) *.[qpg] src/*.[qpg] utils/*.[qpg]

protos-pre: $(patsubst %.c,%.q,$(ALL_SOURCES))
touch $@

protos-post: $(patsubst %.c,%.p,$(ALL_SOURCES)) $(patsubst %.c,%.g,$(ALL_SOURCES))
touch $@

clean::
$(RM) protos-pre protos-post

# ----------------------------------------------------------------------------
# REMOVE FLUFF LEFT BY MB2 BUILDS
# ----------------------------------------------------------------------------

distclean::
$(RM) -r RPMS installroot
32 changes: 32 additions & 0 deletions config-static.h
@@ -0,0 +1,32 @@
/* config.h. Generated from config.h.in by configure. */
/* config.h.in. Generated from configure.ac by autoheader. */

/* Name of package */
#define PACKAGE "usb_moded"

/* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT ""

/* Define to the full name of this package. */
#define PACKAGE_NAME "usb_moded"

/* Define to the full name and version of this package. */
#define PACKAGE_STRING "usb_moded 0.86.0+mer24"

/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "usb_moded"

/* Define to the home page for this package. */
#define PACKAGE_URL ""

/* Define to the version of this package. */
#define PACKAGE_VERSION "0.86.0+mer24"

/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1

/* Version number of package */
#define VERSION "0.86.0+mer24"

/* Define to empty if `const' does not conform to ANSI C. */
/* #undef const */

0 comments on commit 79c7a76

Please sign in to comment.