Changeset 56c0930 in mainline for uspace/lib
- Timestamp:
- 2015-02-20T14:33:29Z (11 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 4cb0148
- Parents:
- ab365c4
- Location:
- uspace/lib/net
- Files:
-
- 3 edited
-
ieee80211/ieee80211.c (modified) (5 diffs)
-
ieee80211/ieee80211_impl.c (modified) (2 diffs)
-
include/ieee80211.h (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/net/ieee80211/ieee80211.c
rab365c4 r56c0930 37 37 38 38 #include <errno.h> 39 #include < nic.h>39 #include <byteorder.h> 40 40 41 41 #include <ieee80211_impl.h> … … 48 48 static driver_ops_t ieee80211_nic_driver_ops; 49 49 50 bool ieee80211_is_data_frame(ieee80211_header_t *header) 51 { 52 return (header->frame_ctrl & 53 host2uint16_t_le(IEEE80211_FRAME_CTRL_FRAME_TYPE)) == 54 host2uint16_t_le(IEEE80211_FRAME_CTRL_DATA_FRAME); 55 } 56 50 57 static int ieee80211_open(ddf_fun_t *fun) 51 58 { … … 53 60 ieee80211_dev_t *ieee80211_dev = nic_get_specific(nic_data); 54 61 62 if(ieee80211_dev->started) { 63 return EOK; 64 } else { 65 ieee80211_dev->started = true; 66 } 67 55 68 int rc = ieee80211_dev->ops->start(ieee80211_dev); 56 69 if(rc != EOK) 57 70 return rc; 71 72 /* 73 rc = ieee80211_dev->ops->scan(ieee80211_dev); 74 if(rc != EOK) 75 return rc; 76 */ 58 77 59 78 return EOK; … … 70 89 /* IEEE802.11 start operation must be implemented. */ 71 90 if(!ieee80211_ops->start) 91 return EINVAL; 92 93 /* IEEE802.11 TX handler must be implemented. */ 94 if(!ieee80211_ops->tx_handler) 72 95 return EINVAL; 73 96 … … 93 116 ieee80211_dev->ddf_dev = ddf_dev; 94 117 ieee80211_dev->driver_data = driver_data; 118 ieee80211_dev->started = false; 119 ieee80211_dev->current_op_mode = IEEE80211_OPMODE_STATION; 95 120 96 121 /* Bind NIC to device */ -
uspace/lib/net/ieee80211/ieee80211_impl.c
rab365c4 r56c0930 40 40 #include <ieee80211_impl.h> 41 41 42 static int ieee80211_freq_to_channel(uint16_t freq) 43 { 44 return (freq - IEEE80211_FIRST_FREQ) / IEEE80211_CHANNEL_GAP + 1; 45 } 46 47 static int ieee80211_probe_request(ieee80211_dev_t *ieee80211_dev) 48 { 49 size_t buffer_size = sizeof(ieee80211_header_t); 50 void *buffer = malloc(buffer_size); 51 52 /* TODO */ 53 54 ieee80211_freq_to_channel(ieee80211_dev->current_freq); 55 56 ieee80211_dev->ops->tx_handler(ieee80211_dev, buffer, buffer_size); 57 58 free(buffer); 59 60 return EOK; 61 } 62 42 63 /** 43 64 * Default implementation of IEEE802.11 scan function. … … 49 70 int ieee80211_scan_impl(ieee80211_dev_t *ieee80211_dev) 50 71 { 51 /** TODO */ 72 /* TODO */ 73 int rc = ieee80211_probe_request(ieee80211_dev); 74 if(rc != EOK) 75 return rc; 52 76 53 77 return EOK; -
uspace/lib/net/include/ieee80211.h
rab365c4 r56c0930 41 41 #include <ddf/driver.h> 42 42 #include <sys/types.h> 43 #include <nic.h> 43 44 44 45 /** Initial channel frequency. */ 45 #define IEEE80211_FIRST_ CHANNEL241246 #define IEEE80211_FIRST_FREQ 2412 46 47 47 48 /** Max supported channel frequency. */ 48 #define IEEE80211_MAX_ CHANNEL247249 #define IEEE80211_MAX_FREQ 2472 49 50 50 51 /* Gap between IEEE80211 channels in MHz. */ 51 52 #define IEEE80211_CHANNEL_GAP 5 53 54 #define IEEE80211_FRAME_CTRL_FRAME_TYPE 0x000C 55 #define IEEE80211_FRAME_CTRL_DATA_FRAME 0x0008 52 56 53 57 struct ieee80211_dev; … … 65 69 int (*start)(struct ieee80211_dev *); 66 70 int (*scan)(struct ieee80211_dev *); 71 int (*tx_handler)(struct ieee80211_dev *, void *, size_t); 67 72 } ieee80211_ops_t; 68 73 … … 77 82 /** Pointer to driver specific data. */ 78 83 void *driver_data; 84 85 /** Current operating frequency. */ 86 uint16_t current_freq; 87 88 /** Current operating mode. */ 89 ieee80211_operating_mode_t current_op_mode; 90 91 /* TODO: Probably to be removed later - nic.open function is now 92 * executed multiple times, have to find out reason and fix it. 93 */ 94 /** Indicates whether driver has already started. */ 95 bool started; 79 96 } ieee80211_dev_t; 80 97 98 /** IEEE 802.11 header structure. */ 99 typedef struct { 100 uint16_t frame_ctrl; /**< Little Endian value! */ 101 uint16_t duration_id; /**< Little Endian value! */ 102 uint8_t address1[ETH_ADDR]; 103 uint8_t address2[ETH_ADDR]; 104 uint8_t address3[ETH_ADDR]; 105 uint16_t seq_ctrl; /**< Little Endian value! */ 106 uint8_t address4[ETH_ADDR]; 107 } __attribute__((packed)) __attribute__ ((aligned(2))) ieee80211_header_t; 108 109 extern bool ieee80211_is_data_frame(ieee80211_header_t *header); 81 110 extern int ieee80211_device_init(ieee80211_dev_t *ieee80211_dev, 82 111 void *driver_data, ddf_dev_t *ddf_dev);
Note:
See TracChangeset
for help on using the changeset viewer.
