rc: USB LED support
[tomato.git] / release / src / router / shared / shared.h
blob4f8b7f5edd5393f81eb41b4e8f9134f552702090
1 #ifndef __SHARED_H__
2 #define __SHARED_H__
4 #include <tomato_profile.h>
5 #include <tomato_config.h>
7 #include <netinet/in.h>
8 #include <stdint.h>
9 #include <errno.h>
10 #include <net/if.h>
12 #ifdef TCONFIG_USB
13 #include <mntent.h> // !!TB
14 #endif
16 #define Y2K 946684800UL // seconds since 1970
18 #define ASIZE(array) (sizeof(array) / sizeof(array[0]))
20 #ifdef LINUX26
21 #define MTD_DEV(arg) "/dev/mtd"#arg
22 #define MTD_BLKDEV(arg) "/dev/mtdblock"#arg
23 #define DEV_GPIO(arg) "/dev/gpio"#arg
24 #else
25 #define MTD_DEV(arg) "/dev/mtd/"#arg
26 #define MTD_BLKDEV(arg) "/dev/mtdblock/"#arg
27 #define DEV_GPIO(arg) "/dev/gpio/"#arg
28 #endif
30 //version.c
31 extern const char *tomato_version;
32 extern const char *tomato_buildtime;
33 extern const char *tomato_shortver;
36 #ifdef DEBUG_NOISY
37 #define _dprintf cprintf
38 #else
39 #define _dprintf(args...) do { } while(0)
40 #endif
43 // misc.c
44 #define WP_DISABLED 0 // order must be synced with def in misc.c
45 #define WP_STATIC 1
46 #define WP_DHCP 2
47 #define WP_L2TP 3
48 #define WP_PPPOE 4
49 #define WP_PPTP 5
51 #ifdef TCONFIG_IPV6
52 #define IPV6_DISABLED 0
53 #define IPV6_NATIVE 1
54 #define IPV6_NATIVE_DHCP 2
55 #define IPV6_6IN4 3
56 #define IPV6_MANUAL 4
57 #endif
59 enum {
60 ACT_IDLE,
61 ACT_TFTP_UPGRADE_UNUSED,
62 ACT_WEB_UPGRADE,
63 ACT_WEBS_UPGRADE_UNUSED,
64 ACT_SW_RESTORE,
65 ACT_HW_RESTORE,
66 ACT_ERASE_NVRAM,
67 ACT_NVRAM_COMMIT,
68 ACT_REBOOT,
69 ACT_UNKNOWN
72 typedef struct {
73 int count;
74 struct {
75 struct in_addr addr;
76 unsigned short port;
77 } dns[6];
78 } dns_list_t;
80 typedef struct {
81 int count;
82 struct {
83 char name[IFNAMSIZ + 1];
84 char ip[sizeof("xxx.xxx.xxx.xxx") + 1];
85 } iface[2];
86 } wanface_list_t;
88 extern void chld_reap(int sig);
89 extern int get_wan_proto(void);
90 #ifdef TCONFIG_IPV6
91 extern int get_ipv6_service(void);
92 #define ipv6_enabled() (get_ipv6_service() != IPV6_DISABLED)
93 extern const char *ipv6_router_address(struct in6_addr *in6addr);
94 #endif
95 extern int using_dhcpc(void);
96 extern void notice_set(const char *path, const char *format, ...);
97 extern int check_wanup(void);
98 extern const dns_list_t *get_dns(void);
99 extern void set_action(int a);
100 extern int check_action(void);
101 extern int wait_action_idle(int n);
102 extern int wl_client(int unit, int subunit);
103 extern const wanface_list_t *get_wanfaces(void);
104 extern const char *get_wanface(void);
105 extern const char *get_wanip(void);
106 extern long get_uptime(void);
107 extern char *wl_nvname(const char *nv, int unit, int subunit);
108 extern int get_radio(int unit);
109 extern void set_radio(int on, int unit);
110 extern int nvram_get_int(const char *key);
111 // extern long nvram_xget_long(const char *name, long min, long max, long def);
112 extern int nvram_get_file(const char *key, const char *fname, int max);
113 extern int nvram_set_file(const char *key, const char *fname, int max);
114 extern int nvram_contains_word(const char *key, const char *word);
115 extern int nvram_is_empty(const char *key);
116 extern void nvram_commit_x(void);
117 extern int connect_timeout(int fd, const struct sockaddr *addr, socklen_t len, int timeout);
118 extern int mtd_getinfo(const char *mtdname, int *part, int *size);
119 extern int foreach_wif(int include_vifs, void *param,
120 int (*func)(int idx, int unit, int subunit, void *param));
122 // usb.c
123 #ifdef TCONFIG_USB
124 extern struct mntent *findmntents(char *file, int swp,
125 int (*func)(struct mntent *mnt, uint flags), uint flags);
126 extern char *find_label_or_uuid(char *dev_name, char *label, char *uuid);
127 extern void add_remove_usbhost(char *host, int add);
129 #define DEV_DISCS_ROOT "/dev/discs"
131 /* Flags used in exec_for_host calls
133 #define EFH_1ST_HOST 0x00000001 /* func is called for the 1st time for this host */
134 #define EFH_1ST_DISC 0x00000002 /* func is called for the 1st time for this disc */
135 #define EFH_HUNKNOWN 0x00000004 /* host is unknown */
136 #define EFH_USER 0x00000008 /* process is user-initiated - either via Web GUI or a script */
137 #define EFH_SHUTDN 0x00000010 /* exec_for_host is called at shutdown - system is stopping */
138 #define EFH_HP_ADD 0x00000020 /* exec_for_host is called from "add" hotplug event */
139 #define EFH_HP_REMOVE 0x00000040 /* exec_for_host is called from "remove" hotplug event */
140 #define EFH_PRINT 0x00000080 /* output partition list to the web response */
142 typedef int (*host_exec)(char *dev_name, int host_num, char *dsc_name, char *pt_name, uint flags);
143 extern int exec_for_host(int host, int obsolete, uint flags, host_exec func);
144 extern int is_no_partition(const char *discname);
145 extern int file_lock(char *tag);
146 extern void file_unlock(int lockfd);
147 #else
148 #define file_lock(args...) (-1)
149 #define file_unlock(args...) do { } while(0)
150 #endif //TCONFIG_USB
152 // id.c
153 enum {
154 MODEL_UNKNOWN,
155 MODEL_WRT54G,
156 MODEL_WRTSL54GS,
157 MODEL_WHRG54S,
158 MODEL_WHRHPG54,
159 MODEL_WR850GV1,
160 MODEL_WR850GV2,
161 MODEL_WZRG54,
162 MODEL_WL500W,
163 MODEL_WL500GP,
164 MODEL_WL500GPv2,
165 MODEL_WL500GE,
166 MODEL_WL500GD,
167 MODEL_WL520GU,
168 MODEL_DIR320,
169 MODEL_H618B,
170 MODEL_WL1600GL,
171 MODEL_WBRG54,
172 MODEL_WBR2G54,
173 MODEL_WX6615GT,
174 MODEL_WZRHPG54,
175 MODEL_WZRRSG54,
176 MODEL_WZRRSG54HP,
177 MODEL_WVRG54NF,
178 MODEL_WHR2A54G54,
179 MODEL_WHR3AG54,
180 MODEL_RT390W,
181 MODEL_RTN10,
182 MODEL_RTN12,
183 MODEL_RTN16,
184 MODEL_WNR3500L,
185 MODEL_WNR2000v2,
186 MODEL_WRT160Nv1,
187 MODEL_WRT160Nv3,
188 MODEL_WRT320N,
189 MODEL_WRT610Nv2,
190 MODEL_WRT310Nv1,
191 MODEL_MN700,
192 MODEL_WRH54G,
193 MODEL_WHRG125,
194 MODEL_WZRG108,
195 MODEL_WTR54GS,
196 MODEL_WR100,
197 MODEL_WLA2G54L,
198 MODEL_TM2300,
199 MODEL_WZRG300N,
200 MODEL_WRT300N
203 /* NOTE: Do not insert new entries in the middle of this enum,
204 * always add them to the end! The numeric Hardware ID value is
205 * stored in the configuration file, and is used to determine
206 * whether or not this config file can be restored on the router.
208 enum {
209 HW_BCM4702,
210 HW_BCM4712,
211 HW_BCM5325E,
212 HW_BCM4704_BCM5325F,
213 HW_BCM5352E,
214 HW_BCM5354G,
215 HW_BCM4712_BCM5325E,
216 HW_BCM4704_BCM5325F_EWC,
217 HW_BCM4705L_BCM5325E_EWC,
218 HW_BCM5350,
219 HW_BCM5356,
220 HW_BCM4716,
221 HW_BCM4718,
222 HW_BCM4717,
223 HW_BCM5365,
224 HW_BCM4785,
225 HW_UNKNOWN
228 #define SUP_SES (1 << 0)
229 #define SUP_BRAU (1 << 1)
230 #define SUP_AOSS_LED (1 << 2)
231 #define SUP_WHAM_LED (1 << 3)
232 #define SUP_HPAMP (1 << 4)
233 #define SUP_NONVE (1 << 5)
234 #define SUP_80211N (1 << 6)
235 #define SUP_1000ET (1 << 7)
237 extern int check_hw_type(void);
238 // extern int get_hardware(void) __attribute__ ((weak, alias ("check_hw_type")));
239 extern int get_model(void);
240 extern int supports(unsigned long attr);
243 // process.c
244 extern char *psname(int pid, char *buffer, int maxlen);
245 extern int pidof(const char *name);
246 extern int killall(const char *name, int sig);
249 // files.c
250 #define FW_CREATE 0
251 #define FW_APPEND 1
252 #define FW_NEWLINE 2
254 extern unsigned long f_size(const char *path);
255 extern int f_exists(const char *file);
256 extern int f_read(const char *file, void *buffer, int max); // returns bytes read
257 extern int f_write(const char *file, const void *buffer, int len, unsigned flags, unsigned cmode); //
258 extern int f_read_string(const char *file, char *buffer, int max); // returns bytes read, not including term; max includes term
259 extern int f_write_string(const char *file, const char *buffer, unsigned flags, unsigned cmode); //
260 extern int f_read_alloc(const char *path, char **buffer, int max);
261 extern int f_read_alloc_string(const char *path, char **buffer, int max);
262 extern int f_wait_exists(const char *name, int max);
263 extern int f_wait_notexists(const char *name, int max);
266 // led.c
267 #define LED_WLAN 0
268 #define LED_DIAG 1
269 #define LED_WHITE 2
270 #define LED_AMBER 3
271 #define LED_DMZ 4
272 #define LED_AOSS 5
273 #define LED_BRIDGE 6
274 #define LED_USB 7
275 #define LED_MYSTERY LED_USB // (unmarked LED between wireless and bridge on WHR-G54S)
276 #define LED_COUNT 8
278 #define LED_OFF 0
279 #define LED_ON 1
280 #define LED_BLINK 2
281 #define LED_PROBE 3
283 extern const char *led_names[];
285 extern int gpio_open(uint32_t mask);
286 extern void gpio_write(uint32_t bit, int en);
287 extern uint32_t gpio_read(void);
288 extern uint32_t _gpio_read(int f);
289 extern int nvget_gpio(const char *name, int *gpio, int *inv);
290 extern int do_led(int which, int mode);
291 static inline int led(int which, int mode)
293 return (do_led(which, mode) != 255);
297 // base64.c
298 extern int base64_encode(unsigned char *in, char *out, int inlen); // returns amount of out buffer used
299 extern int base64_decode(const char *in, unsigned char *out, int inlen); // returns amount of out buffer used
300 extern int base64_encoded_len(int len);
301 extern int base64_decoded_len(int len); // maximum possible, not actual
304 // strings.c
305 extern const char *find_word(const char *buffer, const char *word);
306 extern int remove_word(char *buffer, const char *word);
308 #endif