summaryrefslogtreecommitdiff
path: root/libs/wifi_mgmt/include
diff options
context:
space:
mode:
Diffstat (limited to 'libs/wifi_mgmt/include')
-rw-r--r--libs/wifi_mgmt/include/wifi_mgmt/wifi_mgmt.h82
-rw-r--r--libs/wifi_mgmt/include/wifi_mgmt/wifi_mgmt_if.h47
2 files changed, 129 insertions, 0 deletions
diff --git a/libs/wifi_mgmt/include/wifi_mgmt/wifi_mgmt.h b/libs/wifi_mgmt/include/wifi_mgmt/wifi_mgmt.h
new file mode 100644
index 00000000..411921a8
--- /dev/null
+++ b/libs/wifi_mgmt/include/wifi_mgmt/wifi_mgmt.h
@@ -0,0 +1,82 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+#ifndef __WIFI_MGMT_H__
+#define __WIFI_MGMT_H__
+
+/*
+ * Wi-Fi interface abstraction.
+ */
+#define WIFI_SSID_MAX 32 /* max SSID name length */
+#define WIFI_BSSID_LEN 6 /* MAC address len */
+#define WIFI_SCAN_CNT_MAX 20
+#define WIFI_KEY_MAX 64 /* max key length */
+#define WIFI_SSID_EMPTY(ssid) (ssid)[0] == '\0'
+
+/*
+ * Info about an access point.
+ */
+struct wifi_ap {
+ char wa_ssid[WIFI_SSID_MAX + 1];
+ char wa_bssid[WIFI_BSSID_LEN + 1];
+ int8_t wa_rssi;
+ uint8_t wa_key_type;
+ uint8_t wa_channel;
+};
+
+struct wifi_if_ops;
+
+/*
+ * Wifi interface
+ */
+struct wifi_if {
+ enum {
+ STOPPED = 0,
+ INIT,
+ CONNECTING,
+ DHCP_WAIT,
+ CONNECTED,
+ SCANNING
+ } wi_state, wi_tgt;
+ struct os_mutex wi_mtx;
+ struct os_event wi_event;
+ struct os_callout_func wi_timer;
+ const struct wifi_if_ops *wi_ops;
+
+ uint8_t wi_scan_cnt;
+ struct wifi_ap wi_scan[WIFI_SCAN_CNT_MAX];
+ char wi_ssid[WIFI_SSID_MAX + 1];
+ char wi_key[WIFI_KEY_MAX + 1];
+ uint8_t wi_myip[4];
+};
+
+/*
+ * XXX. is wifi_if_lookup() needed? It is unlikely that there's going to be
+ * multiple wifi interfaces on a system.
+ */
+struct wifi_if *wifi_if_lookup(int port);
+int wifi_if_register(struct wifi_if *, const struct wifi_if_ops *);
+
+int wifi_start(struct wifi_if *);
+int wifi_connect(struct wifi_if *);
+int wifi_stop(struct wifi_if *w);
+int wifi_scan_start(struct wifi_if *w);
+
+int wifi_task_init(uint8_t prio, os_stack_t *stack, uint16_t stack_size);
+
+#endif /* __WIFI_MGMT_H__ */
diff --git a/libs/wifi_mgmt/include/wifi_mgmt/wifi_mgmt_if.h b/libs/wifi_mgmt/include/wifi_mgmt/wifi_mgmt_if.h
new file mode 100644
index 00000000..c6e432da
--- /dev/null
+++ b/libs/wifi_mgmt/include/wifi_mgmt/wifi_mgmt_if.h
@@ -0,0 +1,47 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+#ifndef __WIFI_MGMT_IF_H__
+#define __WIFI_MGMT_IF_H__
+
+/*
+ * Interface between Wi-fi management and the driver.
+ */
+struct wifi_if_ops {
+ int (*wio_init)(struct wifi_if *);
+ void (*wio_deinit)(struct wifi_if *);
+ int (*wio_scan_start)(struct wifi_if *);
+ int (*wio_connect)(struct wifi_if *, struct wifi_ap *);
+ void (*wio_disconnect)(struct wifi_if *);
+};
+
+/*
+ * Exported so driver can use this for it's timers.
+ */
+extern struct os_eventq wifi_evq;
+
+/*
+ * Called by the Wi-fi driver.
+ */
+void wifi_scan_result(struct wifi_if *, struct wifi_ap *);
+void wifi_scan_done(struct wifi_if *, int status);
+void wifi_connect_done(struct wifi_if *wi, int status);
+void wifi_disconnected(struct wifi_if *wi, int status);
+void wifi_dhcp_done(struct wifi_if *wi, uint8_t *ip); /* XXX more IP info */
+
+#endif /* __WIFI_MGMT_IF_H__ */