usb_moded-dyn-config.h 6.74 KB
Newer Older
phdeswer's avatar
phdeswer committed
1
/*
2 3
 *
 * Copyright (C) 2011 Nokia Corporation. All rights reserved.
4
 * Copyright (C) 2013-2019 Jolla Ltd.
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
 *
 * author: Philippe De Swert <philippe.de-swert@nokia.com>
 * author: Philippe De Swert <phdeswer@lumi.maa>
 * author: Philippe De Swert <philippedeswert@gmail.com>
 * author: Philippe De Swert <philippe.deswert@jollamobile.com>
 * author: Thomas Perl <m@thp.io>
 * author: Slava Monich <slava.monich@jolla.com>
 * author: Simo Piiroinen <simo.piiroinen@jollamobile.com>
 * author: Andrew den Exter <andrew.den.exter@jolla.com>
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the Lesser GNU General Public License
 * version 2 as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the Lesser GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA
 */
phdeswer's avatar
phdeswer committed
29

30 31
#ifndef  USB_MODED_DYN_CONFIG_H_
# define USB_MODED_DYN_CONFIG_H_
phdeswer's avatar
phdeswer committed
32

33 34
# include <glib.h>

35 36 37
/* ========================================================================= *
 * Constants
 * ========================================================================= */
phdeswer's avatar
phdeswer committed
38

39 40
# define MODE_DIR_PATH  "/etc/usb-moded/dyn-modes"
# define DIAG_DIR_PATH  "/etc/usb-moded/diag"
phdeswer's avatar
phdeswer committed
41

42 43 44 45
/* - - - - - - - - - - - - - - - - - - - *
 * [mode] ini-file block
 * - - - - - - - - - - - - - - - - - - - */

46 47 48
# define MODE_ENTRY                      "mode"
# define MODE_NAME_KEY                   "name"
# define MODE_MODULE_KEY                 "module"
49 50 51
# define MODE_NEEDS_APPSYNC_KEY          "appsync"       // integer
# define MODE_NETWORK_KEY                "network"       // integer
# define MODE_MASS_STORAGE_KEY           "mass_storage"  // integer
52
# define MODE_NETWORK_INTERFACE_KEY      "network_interface"
53 54 55 56 57

/* - - - - - - - - - - - - - - - - - - - *
 * [options] ini-file block
 * - - - - - - - - - - - - - - - - - - - */

58 59
# define MODE_OPTIONS_ENTRY              "options"
# define MODE_SYSFS_PATH                 "sysfs_path"
60 61 62

/* This is list of gadget functions, except for
 * host-mode config ... */
63 64
# define MODE_SYSFS_VALUE                "sysfs_value"
# define MODE_SYSFS_RESET_VALUE          "sysfs_reset_value"
65

66 67 68 69
/* Instead of hard-coding values that never change or have only one option,
 android engineers prefered to have sysfs entries... go figure... */
# define MODE_ANDROID_EXTRA_SYSFS_PATH   "android_extra_sysfs_path"
# define MODE_ANDROID_EXTRA_SYSFS_VALUE  "android_extra_sysfs_value"
70

71
/* in combined android gadgets we sometime need more than one extra sysfs path or value */
72 73 74 75 76 77
# define MODE_ANDROID_EXTRA_SYSFS_PATH2  "android_extra_sysfs_path2"
# define MODE_ANDROID_EXTRA_SYSFS_VALUE2 "android_extra_sysfs_value2"
# define MODE_ANDROID_EXTRA_SYSFS_PATH3  "android_extra_sysfs_path3"
# define MODE_ANDROID_EXTRA_SYSFS_VALUE3 "android_extra_sysfs_value3"
# define MODE_ANDROID_EXTRA_SYSFS_PATH4  "android_extra_sysfs_path4"
# define MODE_ANDROID_EXTRA_SYSFS_VALUE4 "android_extra_sysfs_value4"
78

79
/* For windows different modes/usb profiles need their own idProduct */
80 81
# define MODE_IDPRODUCT                  "idProduct"
# define MODE_IDVENDOROVERRIDE           "idVendorOverride"
82 83
# define MODE_HAS_NAT                    "nat"           // integer
# define MODE_HAS_DHCP_SERVER            "dhcp_server"   // integer
84

85 86 87 88 89 90 91
# ifdef CONNMAN
#  define MODE_CONNMAN_TETHERING         "connman_tethering"
# endif

/* ========================================================================= *
 * Types
 * ========================================================================= */
phdeswer's avatar
phdeswer committed
92 93 94 95

/**
 * Struct keeping all the data needed for the definition of a dynamic mode
 */
96
typedef struct modedata_t
phdeswer's avatar
phdeswer committed
97
{
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
    char *mode_name;                      /**< Mode name */
    char *mode_module;                    /**< Needed module for given mode */
    int appsync;                          /**< Requires appsync or not */
    int network;                          /**< Bring up network or not */
    int mass_storage;                     /**< Use mass-storage functions */
    char *network_interface;              /**< Which network interface to bring up if network needs to be enabled */
    char *sysfs_path;                     /**< Path to set sysfs options */
    char *sysfs_value;                    /**< Option name/value to write to sysfs */
    char *sysfs_reset_value;              /**< Value to reset the the sysfs to default */
    char *android_extra_sysfs_path;       /**< Path for static value that never changes that needs to be set by sysfs :( */
    char *android_extra_sysfs_value;      /**< Static value that never changes that needs to be set by sysfs :( */
    char *android_extra_sysfs_path2;      /**< Path for static value that never changes that needs to be set by sysfs :( */
    char *android_extra_sysfs_value2;     /**< Static value that never changes that needs to be set by sysfs :( */
    char *android_extra_sysfs_path3;      /**< Path for static value that never changes that needs to be set by sysfs :( */
    char *android_extra_sysfs_value3;     /**< Static value that never changes that needs to be set by sysfs :( */
    char *android_extra_sysfs_path4;      /**< Path for static value that never changes that needs to be set by sysfs :( */
    char *android_extra_sysfs_value4;     /**< Static value that never changes that needs to be set by sysfs :( */
    char *idProduct;                      /**< Product id to assign to a specific profile */
    char *idVendorOverride;               /**< Temporary vendor override for special modes used by odms in testing/manufacturing */
    int nat;                              /**< If NAT should be set up in this mode or not */
    int dhcp_server;                      /**< if a DHCP server needs to be configured and started or not */
# ifdef CONNMAN
    char* connman_tethering;              /**< Connman's tethering technology path */
# endif
122
} modedata_t;
phdeswer's avatar
phdeswer committed
123

124 125 126 127
/* ========================================================================= *
 * Prototypes
 * ========================================================================= */

128
/* ------------------------------------------------------------------------- *
129
 * MODEDATA
130
 * ------------------------------------------------------------------------- */
131

132 133 134 135 136 137 138 139
void modedata_free(modedata_t *list_item);

/* ------------------------------------------------------------------------- *
 * MODELIST
 * ------------------------------------------------------------------------- */

void   modelist_free(GList *modelist);
GList *modelist_load(int diag);
phdeswer's avatar
phdeswer committed
140 141

#endif /* USB_MODED_DYN_CONFIG_H_ */