TI's CC3100 websocket camera demo with Arducam mini ov5642 and freertos. Should work with other M3's. Work in progress test demo.

Dependencies:   mbed

Committer:
dflet
Date:
Fri Sep 11 15:38:33 2015 +0000
Revision:
1:e448e81c416f
Parent:
0:400d8e75a8d0
Removed some debud.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dflet 0:400d8e75a8d0 1 /*
dflet 0:400d8e75a8d0 2 * wlan_rx_filters.h - CC31xx/CC32xx Host Driver Implementation
dflet 0:400d8e75a8d0 3 *
dflet 0:400d8e75a8d0 4 * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/
dflet 0:400d8e75a8d0 5 *
dflet 0:400d8e75a8d0 6 *
dflet 0:400d8e75a8d0 7 * Redistribution and use in source and binary forms, with or without
dflet 0:400d8e75a8d0 8 * modification, are permitted provided that the following conditions
dflet 0:400d8e75a8d0 9 * are met:
dflet 0:400d8e75a8d0 10 *
dflet 0:400d8e75a8d0 11 * Redistributions of source code must retain the above copyright
dflet 0:400d8e75a8d0 12 * notice, this list of conditions and the following disclaimer.
dflet 0:400d8e75a8d0 13 *
dflet 0:400d8e75a8d0 14 * Redistributions in binary form must reproduce the above copyright
dflet 0:400d8e75a8d0 15 * notice, this list of conditions and the following disclaimer in the
dflet 0:400d8e75a8d0 16 * documentation and/or other materials provided with the
dflet 0:400d8e75a8d0 17 * distribution.
dflet 0:400d8e75a8d0 18 *
dflet 0:400d8e75a8d0 19 * Neither the name of Texas Instruments Incorporated nor the names of
dflet 0:400d8e75a8d0 20 * its contributors may be used to endorse or promote products derived
dflet 0:400d8e75a8d0 21 * from this software without specific prior written permission.
dflet 0:400d8e75a8d0 22 *
dflet 0:400d8e75a8d0 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
dflet 0:400d8e75a8d0 24 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
dflet 0:400d8e75a8d0 25 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
dflet 0:400d8e75a8d0 26 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
dflet 0:400d8e75a8d0 27 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
dflet 0:400d8e75a8d0 28 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
dflet 0:400d8e75a8d0 29 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
dflet 0:400d8e75a8d0 30 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
dflet 0:400d8e75a8d0 31 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
dflet 0:400d8e75a8d0 32 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
dflet 0:400d8e75a8d0 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
dflet 0:400d8e75a8d0 34 *
dflet 0:400d8e75a8d0 35 */
dflet 0:400d8e75a8d0 36
dflet 0:400d8e75a8d0 37
dflet 0:400d8e75a8d0 38 /*****************************************************************************/
dflet 0:400d8e75a8d0 39 /* Include files */
dflet 0:400d8e75a8d0 40 /*****************************************************************************/
dflet 0:400d8e75a8d0 41 #include "cc3100_simplelink.h"
dflet 0:400d8e75a8d0 42
dflet 0:400d8e75a8d0 43 #ifndef RX_FILTERS_PREPROCESSOR_CLI_IF_H_
dflet 0:400d8e75a8d0 44 #define RX_FILTERS_PREPROCESSOR_CLI_IF_H_
dflet 0:400d8e75a8d0 45
dflet 0:400d8e75a8d0 46 #include "cc3100_driver.h"
dflet 0:400d8e75a8d0 47
dflet 0:400d8e75a8d0 48 /*****************************************************************************/
dflet 0:400d8e75a8d0 49 /* Macro declarations */
dflet 0:400d8e75a8d0 50 /*****************************************************************************/
dflet 0:400d8e75a8d0 51
dflet 0:400d8e75a8d0 52 /*!
dflet 0:400d8e75a8d0 53 * \def SL_RX_FILTER_MAX_FILTERS
dflet 0:400d8e75a8d0 54 * The Max number of filters for 64 filters
dflet 0:400d8e75a8d0 55 */
dflet 0:400d8e75a8d0 56 #define SL_RX_FILTER_MAX_FILTERS 64
dflet 0:400d8e75a8d0 57
dflet 0:400d8e75a8d0 58 /*!
dflet 0:400d8e75a8d0 59 * \def SL_RX_FILTER_MAX_PRE_PREPARED_FILTERS_SETS
dflet 0:400d8e75a8d0 60 * The Max number of software filters
dflet 0:400d8e75a8d0 61 */
dflet 0:400d8e75a8d0 62 #define SL_RX_FILTER_MAX_PRE_PREPARED_FILTERS_SETS (32)
dflet 0:400d8e75a8d0 63 /*!
dflet 0:400d8e75a8d0 64 * \def SL_RX_FILTER_NUM_OF_FILTER_HEADER_ARGS
dflet 0:400d8e75a8d0 65 *
dflet 0:400d8e75a8d0 66 */
dflet 0:400d8e75a8d0 67 #define SL_RX_FILTER_NUM_OF_FILTER_HEADER_ARGS (2)
dflet 0:400d8e75a8d0 68 /*!
dflet 0:400d8e75a8d0 69 * \def SL_RX_FILTER_NUM_OF_FILTER_PAYLOAD_ARGS
dflet 0:400d8e75a8d0 70 *
dflet 0:400d8e75a8d0 71 */
dflet 0:400d8e75a8d0 72 #define SL_RX_FILTER_NUM_OF_FILTER_PAYLOAD_ARGS (2)
dflet 0:400d8e75a8d0 73 /*!
dflet 0:400d8e75a8d0 74 * \def SL_RX_FILTER_NUM_OF_FILTER_PAYLOAD_ARGS
dflet 0:400d8e75a8d0 75 *
dflet 0:400d8e75a8d0 76 */
dflet 0:400d8e75a8d0 77 #define SL_RX_FILTER_NUM_OF_COMBINATION_TYPE_ARGS (2)
dflet 0:400d8e75a8d0 78 /*!
dflet 0:400d8e75a8d0 79 * \def SL_RX_FILTER_LENGTH_OF_REGX_PATTERN_LENGTH
dflet 0:400d8e75a8d0 80 *
dflet 0:400d8e75a8d0 81 */
dflet 0:400d8e75a8d0 82 #define SL_RX_FILTER_LENGTH_OF_REGX_PATTERN_LENGTH (32)
dflet 0:400d8e75a8d0 83
dflet 0:400d8e75a8d0 84
dflet 0:400d8e75a8d0 85 /* List of possible error numbers */
dflet 0:400d8e75a8d0 86 #define RXFL_OK (0) /* O.K */
dflet 0:400d8e75a8d0 87 #define RXFL_OUTPUT_OR_INPUT_BUFFER_LENGTH_TOO_SMALL (76) /* ! The output buffer length is smaller than required for that operation */
dflet 0:400d8e75a8d0 88 #define RXFL_DEPENDENT_FILTER_SOFTWARE_FILTER_NOT_FIT (75) /* Node filter can't be child of software filter and vice_versa */
dflet 0:400d8e75a8d0 89 #define RXFL_DEPENDENCY_IS_NOT_PERSISTENT (74) /* Dependency filter is not persistent */
dflet 0:400d8e75a8d0 90 #define RXFL_SYSTEM_STATE_NOT_SUPPORTED_FOR_THIS_FILTER (72) /* System state is not supported */
dflet 0:400d8e75a8d0 91 #define RXFL_TRIGGER_USE_REG5_TO_REG8 (71) /* Only counters 5 - 8 are allowed, for Tigger */
dflet 0:400d8e75a8d0 92 #define RXFL_TRIGGER_USE_REG1_TO_REG4 (70) /* Only counters 1 - 4 are allowed, for trigger */
dflet 0:400d8e75a8d0 93 #define RXFL_ACTION_USE_REG5_TO_REG8 (69) /* Only counters 5 - 8 are allowed, for action */
dflet 0:400d8e75a8d0 94 #define RXFL_ACTION_USE_REG1_TO_REG4 (68) /* Only counters 1 - 4 are allowed, for action */
dflet 0:400d8e75a8d0 95 #define RXFL_FIELD_SUPPORT_ONLY_EQUAL_AND_NOTEQUAL (67) /* Rule compare function Id is out of range */
dflet 0:400d8e75a8d0 96 #define RXFL_WRONG_MULTICAST_BROADCAST_ADDRESS (66) /* The address should be of type mutlicast or broadcast */
dflet 0:400d8e75a8d0 97 #define RXFL_THE_FILTER_IS_NOT_OF_HEADER_TYPE (65) /* The filter should be of header type */
dflet 0:400d8e75a8d0 98 #define RXFL_WRONG_COMPARE_FUNC_FOR_BROADCAST_ADDRESS (64) /* The compare funcion is not suitable for broadcast address */
dflet 0:400d8e75a8d0 99 #define RXFL_WRONG_MULTICAST_ADDRESS (63) /* The address should be of muticast type */
dflet 0:400d8e75a8d0 100 #define RXFL_DEPENDENT_FILTER_IS_NOT_PERSISTENT (62) /* The dependency filter is not persistent */
dflet 0:400d8e75a8d0 101 #define RXFL_DEPENDENT_FILTER_IS_NOT_ENABLED (61) /* The dependency filter is not enabled */
dflet 0:400d8e75a8d0 102 #define RXFL_FILTER_HAS_CHILDS (60) /* The filter has childs and can't be removed */
dflet 0:400d8e75a8d0 103 #define RXFL_CHILD_IS_ENABLED (59) /* Can't disable filter while the child is enabled */
dflet 0:400d8e75a8d0 104 #define RXFL_DEPENDENCY_IS_DISABLED (58) /* Can't enable filetr in case its depndency filter is disabled */
dflet 0:400d8e75a8d0 105 #define RXFL_NUMBER_OF_CONNECTION_POINTS_EXCEEDED (52) /* Number of connection points exceeded */
dflet 0:400d8e75a8d0 106 #define RXFL_DEPENDENT_FILTER_DEPENDENCY_ACTION_IS_DROP (51) /* The dependent filter has Drop action, thus the filter can't be created */
dflet 0:400d8e75a8d0 107 #define RXFL_FILTER_DO_NOT_EXISTS (50) /* The filter doesn't exists */
dflet 0:400d8e75a8d0 108 #define RXFL_DEPEDENCY_NOT_ON_THE_SAME_LAYER (49) /* The filter and its dependency must be on the same layer */
dflet 0:400d8e75a8d0 109 #define RXFL_NUMBER_OF_ARGS_EXCEEDED (48) /* Number of arguments excceded */
dflet 0:400d8e75a8d0 110 #define RXFL_ACTION_NO_REG_NUMBER (47) /* Action require counter number */
dflet 0:400d8e75a8d0 111 #define RXFL_DEPENDENT_FILTER_LAYER_DO_NOT_FIT (46) /* the filter and its dependency should be from the same layer */
dflet 0:400d8e75a8d0 112 #define RXFL_DEPENDENT_FILTER_SYSTEM_STATE_DO_NOT_FIT (45) /* The filter and its dependency system state don't fit */
dflet 0:400d8e75a8d0 113 #define RXFL_DEPENDENT_FILTER_DO_NOT_EXIST_2 (44) /* The parent filter don't exist */
dflet 0:400d8e75a8d0 114 #define RXFL_DEPENDENT_FILTER_DO_NOT_EXIST_1 (43) /* The parent filter is null */
dflet 0:400d8e75a8d0 115 #define RXFL_RULE_HEADER_ACTION_TYPE_NOT_SUPPORTED (42) /* The action type is not supported */
dflet 0:400d8e75a8d0 116 #define RXFL_RULE_HEADER_TRIGGER_COMPARE_FUNC_OUT_OF_RANGE (41) /* The Trigger comparision function is out of range */
dflet 0:400d8e75a8d0 117 #define RXFL_RULE_HEADER_TRIGGER_OUT_OF_RANGE (40) /* The Trigger is out of range */
dflet 0:400d8e75a8d0 118 #define RXFL_RULE_HEADER_COMPARE_FUNC_OUT_OF_RANGE (39) /* The rule compare function is out of range */
dflet 0:400d8e75a8d0 119 #define RXFL_FRAME_TYPE_NOT_SUPPORTED (38) /* ASCII frame type string is illegal */
dflet 0:400d8e75a8d0 120 #define RXFL_RULE_FIELD_ID_NOT_SUPPORTED (37) /* Rule field ID is out of range */
dflet 0:400d8e75a8d0 121 #define RXFL_RULE_HEADER_FIELD_ID_ASCII_NOT_SUPPORTED (36) /* This ASCII field ID is not supported */
dflet 0:400d8e75a8d0 122 #define RXFL_RULE_HEADER_NOT_SUPPORTED (35) /* The header rule is not supported on current release */
dflet 0:400d8e75a8d0 123 #define RXFL_RULE_HEADER_OUT_OF_RANGE (34) /* The header rule is out of range */
dflet 0:400d8e75a8d0 124 #define RXFL_RULE_HEADER_COMBINATION_OPERATOR_OUT_OF_RANGE (33) /* Combination function Id is out of ramge */
dflet 0:400d8e75a8d0 125 #define RXFL_RULE_HEADER_FIELD_ID_OUT_OF_RANGE (32) /* rule field Id is out of range */
dflet 0:400d8e75a8d0 126 #define RXFL_UPDATE_NOT_SUPPORTED (31) /* Update not supported */
dflet 0:400d8e75a8d0 127 #define RXFL_NO_FILTERS_ARE_DEFINED (24) /* No filters are defined in the system */
dflet 0:400d8e75a8d0 128 #define RXFL_NUMBER_OF_FILTER_EXCEEDED (23) /* Number of max filters excceded */
dflet 0:400d8e75a8d0 129
dflet 0:400d8e75a8d0 130
dflet 0:400d8e75a8d0 131 /******************************************************************************/
dflet 0:400d8e75a8d0 132 /* Type declarations */
dflet 0:400d8e75a8d0 133 /******************************************************************************/
dflet 0:400d8e75a8d0 134
dflet 0:400d8e75a8d0 135 /*!
dflet 0:400d8e75a8d0 136
dflet 0:400d8e75a8d0 137
dflet 0:400d8e75a8d0 138 * \typedef SlrxFilterID_t
dflet 0:400d8e75a8d0 139 * Unique filter ID which is allocated by the system , negative number means error
dflet 0:400d8e75a8d0 140 */
dflet 0:400d8e75a8d0 141 typedef int8_t SlrxFilterID_t;
dflet 0:400d8e75a8d0 142
dflet 0:400d8e75a8d0 143
dflet 0:400d8e75a8d0 144 /*!
dflet 0:400d8e75a8d0 145 * \typedef SlrxFilterCompareMask_t
dflet 0:400d8e75a8d0 146 * The mask is used for the rule comparison function
dflet 0:400d8e75a8d0 147 */
dflet 0:400d8e75a8d0 148 typedef uint8_t SlrxFilterCompareMask_t;
dflet 0:400d8e75a8d0 149
dflet 0:400d8e75a8d0 150 /*!
dflet 0:400d8e75a8d0 151 * \typedef SlrxFilterIdMask_t
dflet 0:400d8e75a8d0 152 * Representation of filters Id as a bit field
dflet 0:400d8e75a8d0 153 * The bit field is used to declare which filters are involved
dflet 0:400d8e75a8d0 154 * in operation. Number of filter can be up to 128 filters. i.e. 128 bits are needed.
dflet 0:400d8e75a8d0 155 * On the current release, up to 64 filters can be defined.
dflet 0:400d8e75a8d0 156 */
dflet 0:400d8e75a8d0 157 typedef uint8_t SlrxFilterIdMask_t[128/8];
dflet 0:400d8e75a8d0 158
dflet 0:400d8e75a8d0 159 /*!
dflet 0:400d8e75a8d0 160 * \typedef SlrxFilterPrePreparedFilters_t
dflet 0:400d8e75a8d0 161 * Describes the supported software filter sets,
dflet 0:400d8e75a8d0 162 */
dflet 0:400d8e75a8d0 163 typedef uint8_t SlrxFilterPrePreparedFilters_t;
dflet 0:400d8e75a8d0 164 #define SL_ARP_AUTO_REPLY_PRE_PREPARED_FILTERS (0)
dflet 0:400d8e75a8d0 165 #define SL_MULTICASTSIPV4_DROP_PREPREPARED_FILTERS (1)
dflet 0:400d8e75a8d0 166 #define SL_MULTICASTSIPV6_DROP_PREPREPARED_FILTERS (2)
dflet 0:400d8e75a8d0 167 #define SL_MULTICASTSWIFI_DROP_PREPREPARED_FILTERS (3)
dflet 0:400d8e75a8d0 168
dflet 0:400d8e75a8d0 169
dflet 0:400d8e75a8d0 170
dflet 0:400d8e75a8d0 171 /*!
dflet 0:400d8e75a8d0 172 * \typedef SlrxFilterPrePreparedFiltersMask_t
dflet 0:400d8e75a8d0 173 * Describes the supported software filter sets,
dflet 0:400d8e75a8d0 174 * each bit represents different software filter set
dflet 0:400d8e75a8d0 175 * The filter sets are defined at SlrxFilterPrePreparedFilters_t
dflet 0:400d8e75a8d0 176 */
dflet 0:400d8e75a8d0 177 typedef uint8_t SlrxFilterPrePreparedFiltersMask_t[SL_RX_FILTER_MAX_PRE_PREPARED_FILTERS_SETS/8];
dflet 0:400d8e75a8d0 178
dflet 0:400d8e75a8d0 179
dflet 0:400d8e75a8d0 180 /*! \typedef SlrxFilterRegxPattern_t
dflet 0:400d8e75a8d0 181 * The struct contains the regular expression pattern which is used in case of payload rule.
dflet 0:400d8e75a8d0 182 * Not supported in the current release
dflet 0:400d8e75a8d0 183 */
dflet 0:400d8e75a8d0 184 typedef struct SlrxFilterRegxPattern_t {
dflet 0:400d8e75a8d0 185 uint8_t x[SL_RX_FILTER_LENGTH_OF_REGX_PATTERN_LENGTH];
dflet 0:400d8e75a8d0 186 } SlrxFilterRegxPattern_t;
dflet 0:400d8e75a8d0 187
dflet 0:400d8e75a8d0 188
dflet 0:400d8e75a8d0 189 /*! \typedef SlrxFilterAsciiArg_t
dflet 0:400d8e75a8d0 190 * The buffer is used to provide container for ASCII argument, which may be used in case of HEADER rule.
dflet 0:400d8e75a8d0 191 * example for ASCII argument can be : IP = 256.0.67.1
dflet 0:400d8e75a8d0 192 */
dflet 0:400d8e75a8d0 193 typedef uint8_t SlrxFilterAsciiArg_t;
dflet 0:400d8e75a8d0 194
dflet 0:400d8e75a8d0 195
dflet 0:400d8e75a8d0 196 /*! \typedef SlrxFilterBinaryArg_t
dflet 0:400d8e75a8d0 197 * The buffer provides container for binary argument, which may be used in case of HEADER rule
dflet 0:400d8e75a8d0 198 */
dflet 0:400d8e75a8d0 199 typedef uint8_t SlrxFilterBinaryArg_t ;
dflet 0:400d8e75a8d0 200
dflet 0:400d8e75a8d0 201
dflet 0:400d8e75a8d0 202 /*! \typedef SlrxFilterActionArg_t
dflet 0:400d8e75a8d0 203 * Provides container for the filter action argument.
dflet 0:400d8e75a8d0 204 * for example: in case action is to send automatic response , the argument is the template to be used for the automatic response.
dflet 0:400d8e75a8d0 205 *
dflet 0:400d8e75a8d0 206 *
dflet 0:400d8e75a8d0 207 */
dflet 0:400d8e75a8d0 208 typedef uint8_t SlrxFilterActionArg_t ;
dflet 0:400d8e75a8d0 209
dflet 0:400d8e75a8d0 210
dflet 0:400d8e75a8d0 211
dflet 0:400d8e75a8d0 212 /*! \typedef SlrxFilterOffset_t
dflet 0:400d8e75a8d0 213 * The offset relative to the packet payload start location.
dflet 0:400d8e75a8d0 214 * Not supported on current release
dflet 0:400d8e75a8d0 215 */
dflet 0:400d8e75a8d0 216 typedef uint32_t SlrxFilterOffset_t;
dflet 0:400d8e75a8d0 217
dflet 0:400d8e75a8d0 218
dflet 0:400d8e75a8d0 219
dflet 0:400d8e75a8d0 220 /*! \typedef SlrxFilterRuleType_t
dflet 0:400d8e75a8d0 221 * Enumerates the different filter types.
dflet 0:400d8e75a8d0 222 * On the current release only HEADER and COMBINATION are supported.
dflet 0:400d8e75a8d0 223 */
dflet 0:400d8e75a8d0 224 typedef uint8_t SlrxFilterRuleType_t;
dflet 0:400d8e75a8d0 225 /* possible values for SlrxFilterRuleType_t */
dflet 0:400d8e75a8d0 226 #define HEADER (0)
dflet 0:400d8e75a8d0 227 #define COMBINATION (1)
dflet 0:400d8e75a8d0 228 #define EXACT_PATTERN (2)
dflet 0:400d8e75a8d0 229 #define LIKELIHOOD_PATTERN (3)
dflet 0:400d8e75a8d0 230 #define ALWAYS_TRUE (4)
dflet 0:400d8e75a8d0 231 #define NUM_OF_FILTER_TYPES (5)
dflet 0:400d8e75a8d0 232
dflet 0:400d8e75a8d0 233
dflet 0:400d8e75a8d0 234 /*! \typedef SlrxFilterFlags_t
dflet 0:400d8e75a8d0 235 * Bit field which sets the behaviour of the RX filter
dflet 0:400d8e75a8d0 236 *
dflet 0:400d8e75a8d0 237 */
dflet 0:400d8e75a8d0 238
dflet 0:400d8e75a8d0 239 #define RX_FILTER_BINARY (0x1)
dflet 0:400d8e75a8d0 240 #define RX_FILTER_PERSISTENT (0x8)
dflet 0:400d8e75a8d0 241 #define RX_FILTER_ENABLE (0x10)
dflet 0:400d8e75a8d0 242
dflet 0:400d8e75a8d0 243 typedef union SlrxFilterFlags_t {
dflet 0:400d8e75a8d0 244
dflet 0:400d8e75a8d0 245 /* struct
dflet 0:400d8e75a8d0 246 { */
dflet 0:400d8e75a8d0 247 /*!
dflet 0:400d8e75a8d0 248 * The filter argument can be set as binary argument or ASCII arguments.
dflet 0:400d8e75a8d0 249 * When the bit is on the argument are binary.
dflet 0:400d8e75a8d0 250 */
dflet 0:400d8e75a8d0 251 /* uint8_t Binary: 1; */
dflet 0:400d8e75a8d0 252 /*!
dflet 0:400d8e75a8d0 253 *
dflet 0:400d8e75a8d0 254 */
dflet 0:400d8e75a8d0 255 /* uint8_t AutoSort : 1; */
dflet 0:400d8e75a8d0 256 /*!
dflet 0:400d8e75a8d0 257 *
dflet 0:400d8e75a8d0 258 */
dflet 0:400d8e75a8d0 259 /* uint8_t AutoFaultDetect : 1; */
dflet 0:400d8e75a8d0 260 /*!
dflet 0:400d8e75a8d0 261 * When the bit is on it means the the node is enabled .
dflet 0:400d8e75a8d0 262 */
dflet 0:400d8e75a8d0 263 /* uint8_t Enabled : 1; */
dflet 0:400d8e75a8d0 264 /* uint8_t padding : 3; */
dflet 0:400d8e75a8d0 265 /*
dflet 0:400d8e75a8d0 266 };*/
dflet 0:400d8e75a8d0 267
dflet 0:400d8e75a8d0 268 uint8_t IntRepresentation;
dflet 0:400d8e75a8d0 269
dflet 0:400d8e75a8d0 270 } SlrxFilterFlags_t;
dflet 0:400d8e75a8d0 271
dflet 0:400d8e75a8d0 272 /*! \typedef SlrxFilterCompareFunction_t
dflet 0:400d8e75a8d0 273 * Used as comparison function for the header type arguments
dflet 0:400d8e75a8d0 274 *
dflet 0:400d8e75a8d0 275 */
dflet 0:400d8e75a8d0 276 typedef uint8_t SlrxFilterCompareFunction_t;
dflet 0:400d8e75a8d0 277 /* Possible values for SlrxFilterCompareFunction_t */
dflet 0:400d8e75a8d0 278 #define COMPARE_FUNC_IN_BETWEEN (0)
dflet 0:400d8e75a8d0 279 #define COMPARE_FUNC_EQUAL (1)
dflet 0:400d8e75a8d0 280 #define COMPARE_FUNC_NOT_EQUAL_TO (2)
dflet 0:400d8e75a8d0 281 #define COMPARE_FUNC_NOT_IN_BETWEEN (3)
dflet 0:400d8e75a8d0 282 #define COMPARE_FUNC_NUM_OF_FILTER_COMPARE_FUNC (4)
dflet 0:400d8e75a8d0 283
dflet 0:400d8e75a8d0 284 /*! \typedef SlrxFilterCompareFunction_t
dflet 0:400d8e75a8d0 285 * Used as comparison function for the header type arguments
dflet 0:400d8e75a8d0 286 *
dflet 0:400d8e75a8d0 287 */
dflet 0:400d8e75a8d0 288 typedef uint8_t SlrxTriggerCompareFunction_t;
dflet 0:400d8e75a8d0 289 /* Possible values for SlrxTriggerCompareFunction_t */
dflet 0:400d8e75a8d0 290 #define TRIGGER_COMPARE_FUNC_EQUAL (0)
dflet 0:400d8e75a8d0 291 /* arg1 == protocolVal ,not supported in current release */
dflet 0:400d8e75a8d0 292 #define TRIGGER_COMPARE_FUNC_NOT_EQUAL_TO (1)
dflet 0:400d8e75a8d0 293 /* arg1 == protocolVal */
dflet 0:400d8e75a8d0 294 #define TRIGGER_COMPARE_FUNC_SMALLER_THAN (2)
dflet 0:400d8e75a8d0 295 /* arg1 == protocolVal */
dflet 0:400d8e75a8d0 296 #define TRIGGER_COMPARE_FUNC_BIGGER_THAN (3)
dflet 0:400d8e75a8d0 297 /* definition */
dflet 0:400d8e75a8d0 298 #define TRIGGER_COMPARE_FUNC_NUM_OF_FILTER_COMPARE_FUNC (4)
dflet 0:400d8e75a8d0 299
dflet 0:400d8e75a8d0 300
dflet 0:400d8e75a8d0 301 /*! \typedef SlrxFilterHdrField_t
dflet 0:400d8e75a8d0 302 * Provides list of possible header types which may be defined as part of the rule
dflet 0:400d8e75a8d0 303 *
dflet 0:400d8e75a8d0 304 */
dflet 0:400d8e75a8d0 305 typedef uint8_t SlrxFilterHdrField_t;
dflet 0:400d8e75a8d0 306 /* Possible values for SlrxFilterHdrField_t */
dflet 0:400d8e75a8d0 307 #define NULL_FIELD_ID_TYPE (0)
dflet 0:400d8e75a8d0 308 /* 802.11 control\data\management */
dflet 0:400d8e75a8d0 309 #define FRAME_TYPE_FIELD (1)
dflet 0:400d8e75a8d0 310 /* 802.11 beacon\probe\.. */
dflet 0:400d8e75a8d0 311 #define FRAME_SUBTYPE_FIELD (2)
dflet 0:400d8e75a8d0 312 /* 802.11 bssid type */
dflet 0:400d8e75a8d0 313 #define BSSID_FIELD (3)
dflet 0:400d8e75a8d0 314 /* */
dflet 0:400d8e75a8d0 315 #define MAC_SRC_ADDRESS_FIELD (4)
dflet 0:400d8e75a8d0 316 /* */
dflet 0:400d8e75a8d0 317 #define MAC_DST_ADDRESS_FIELD (5)
dflet 0:400d8e75a8d0 318 /* */
dflet 0:400d8e75a8d0 319 #define FRAME_LENGTH_FIELD (6)
dflet 0:400d8e75a8d0 320 /* */
dflet 0:400d8e75a8d0 321 #define PROTOCOL_TYPE_FIELD (7)
dflet 0:400d8e75a8d0 322 /* */
dflet 0:400d8e75a8d0 323 #define IP_VERSION_FIELD (8)
dflet 0:400d8e75a8d0 324 /* TCP / UDP */
dflet 0:400d8e75a8d0 325 #define IP_PROTOCOL_FIELD (9)
dflet 0:400d8e75a8d0 326 /* */
dflet 0:400d8e75a8d0 327 #define IPV4_SRC_ADRRESS_FIELD (10)
dflet 0:400d8e75a8d0 328 /* */
dflet 0:400d8e75a8d0 329 #define IPV4_DST_ADDRESS_FIELD (11)
dflet 0:400d8e75a8d0 330 /* */
dflet 0:400d8e75a8d0 331 #define IPV6_SRC_ADRRESS_FIELD (12)
dflet 0:400d8e75a8d0 332 /* */
dflet 0:400d8e75a8d0 333 #define IPV6_DST_ADDRESS_FIELD (13)
dflet 0:400d8e75a8d0 334 /* */
dflet 0:400d8e75a8d0 335 #define SRC_PORT_FIELD (14)
dflet 0:400d8e75a8d0 336 /* */
dflet 0:400d8e75a8d0 337 #define DST_PORT_FIELD (15)
dflet 0:400d8e75a8d0 338 /* Definition */
dflet 0:400d8e75a8d0 339 #define NUM_OF_FIELD_NAME_FIELD (16)
dflet 0:400d8e75a8d0 340
dflet 0:400d8e75a8d0 341 /*! \union SlrxFilterHeaderArg_t
dflet 0:400d8e75a8d0 342 * The structure holds the header ARGS which are used in case of HDR rule.
dflet 0:400d8e75a8d0 343 */
dflet 0:400d8e75a8d0 344 /* -- 36 bytes */
dflet 0:400d8e75a8d0 345 typedef union SlrxFilterHeaderArg_t {
dflet 0:400d8e75a8d0 346 /*----------------------------- Large size ---------------------------------*/
dflet 0:400d8e75a8d0 347 /*! buffer for binary arguments, number of argument may be up to SL_RX_FILTER_NUM_OF_FILTER_HEADER_ARGS
dflet 0:400d8e75a8d0 348 * example : IPV6 16 bytes, 39 characters
dflet 0:400d8e75a8d0 349 * ipv6 Ascii address: 2001:0db8:3c4d:0015:0000:0000:abcd:ef12
dflet 0:400d8e75a8d0 350 */
dflet 0:400d8e75a8d0 351
dflet 0:400d8e75a8d0 352 SlrxFilterBinaryArg_t RxFilterDB16BytesRuleArgs[SL_RX_FILTER_NUM_OF_FILTER_HEADER_ARGS][16 ]; /* Binary Values for comparition */
dflet 0:400d8e75a8d0 353 /*! buffer for ASCII arguments, number of argument may be up to SL_RX_FILTER_NUM_OF_FILTER_HEADER_ARGS
dflet 0:400d8e75a8d0 354 * example : IPV6 16 bytes, 39 characters
dflet 0:400d8e75a8d0 355 * ipv6 Ascii address: 2001:0db8:3c4d:0015:0000:0000:abcd:ef12
dflet 0:400d8e75a8d0 356 * Ascii format for ipV6 is not supported
dflet 0:400d8e75a8d0 357 */
dflet 0:400d8e75a8d0 358 /*----------------------------- Medium size ---------------------------------*/
dflet 0:400d8e75a8d0 359 /*! buffer for binary arguments, number of argument may be up to SL_RX_FILTER_NUM_OF_FILTER_HEADER_ARGS
dflet 0:400d8e75a8d0 360 * MAC address: 6 bytes, 17 chars
dflet 0:400d8e75a8d0 361 */
dflet 0:400d8e75a8d0 362 SlrxFilterBinaryArg_t RxFilterDB6BytesRuleArgs[SL_RX_FILTER_NUM_OF_FILTER_HEADER_ARGS][6]; /* Binary Values for comparition */
dflet 0:400d8e75a8d0 363 /*!
dflet 0:400d8e75a8d0 364 * ! buffer for ASCII arguments, number of argument may be up to SL_RX_FILTER_NUM_OF_FILTER_HEADER_ARGS
dflet 0:400d8e75a8d0 365 * IP address: 4 bytes, 15 chars
dflet 0:400d8e75a8d0 366 * 2 bytes are added for padding
dflet 0:400d8e75a8d0 367 */
dflet 0:400d8e75a8d0 368 SlrxFilterAsciiArg_t RxFilterDB18BytesAsciiRuleArgs[SL_RX_FILTER_NUM_OF_FILTER_HEADER_ARGS][18]; /* Ascii Values for comparison */
dflet 0:400d8e75a8d0 369 /*----------------------------- Small size ---------------------------------*/
dflet 0:400d8e75a8d0 370 /*! buffer for binary arguments, number of argument may be up to SL_RX_FILTER_NUM_OF_FILTER_HEADER_ARGS
dflet 0:400d8e75a8d0 371 * IP address: 4 bytes, 15 chars
dflet 0:400d8e75a8d0 372 * Port: 2 bytes, chars: 5 chars
dflet 0:400d8e75a8d0 373 */
dflet 0:400d8e75a8d0 374 SlrxFilterBinaryArg_t RxFilterDB4BytesRuleArgs[SL_RX_FILTER_NUM_OF_FILTER_HEADER_ARGS][4]; /* Binary Values for comparison */
dflet 0:400d8e75a8d0 375 /*! buffer for ASCII arguments, number of argument may be up to SL_RX_FILTER_NUM_OF_FILTER_HEADER_ARGS
dflet 0:400d8e75a8d0 376 * Port: 2 bytes, chars: 5 chars
dflet 0:400d8e75a8d0 377 */
dflet 0:400d8e75a8d0 378 SlrxFilterAsciiArg_t RxFilterDB5BytesRuleAsciiArgs[SL_RX_FILTER_NUM_OF_FILTER_HEADER_ARGS][5]; /* Ascii Values for comparison */
dflet 0:400d8e75a8d0 379 /*----------------------------- 1 byte size ---------------------------------*/
dflet 0:400d8e75a8d0 380 /*! buffer for binary arguments, number of argument may be up to SL_RX_FILTER_NUM_OF_FILTER_HEADER_ARGS
dflet 0:400d8e75a8d0 381 */
dflet 0:400d8e75a8d0 382 SlrxFilterBinaryArg_t RxFilterDB1BytesRuleArgs[SL_RX_FILTER_NUM_OF_FILTER_HEADER_ARGS][1]; /* Binary Values for comparison */
dflet 0:400d8e75a8d0 383 } SlrxFilterHeaderArg_t;
dflet 0:400d8e75a8d0 384
dflet 0:400d8e75a8d0 385
dflet 0:400d8e75a8d0 386
dflet 0:400d8e75a8d0 387 /*! \typedef SlrxFilterRuleHeaderArgsAndMask_t
dflet 0:400d8e75a8d0 388 * Structure which defines the Header Args and mask
dflet 0:400d8e75a8d0 389 */
dflet 0:400d8e75a8d0 390 /* -- 52 bytes */
dflet 0:400d8e75a8d0 391 typedef struct SlrxFilterRuleHeaderArgsAndMask_t {
dflet 0:400d8e75a8d0 392 /*! Argument for the comparison function */
dflet 0:400d8e75a8d0 393 /* -- 36 byte */
dflet 0:400d8e75a8d0 394 SlrxFilterHeaderArg_t RuleHeaderArgs;
dflet 0:400d8e75a8d0 395
dflet 0:400d8e75a8d0 396 /*! the mask is used in order to enable partial comparison,
dflet 0:400d8e75a8d0 397 * Use the 0xFFFFFFFF in case you don't want to use mask
dflet 0:400d8e75a8d0 398 */
dflet 0:400d8e75a8d0 399 /* -- 16 bytes */
dflet 0:400d8e75a8d0 400 SlrxFilterCompareMask_t RuleHeaderArgsMask[16];
dflet 0:400d8e75a8d0 401
dflet 0:400d8e75a8d0 402 } SlrxFilterRuleHeaderArgsAndMask_t;
dflet 0:400d8e75a8d0 403
dflet 0:400d8e75a8d0 404 /*! \typedef SlrxFilterHeaderType_t
dflet 0:400d8e75a8d0 405 * Structure which defines the Header rule
dflet 0:400d8e75a8d0 406 * The header rule defines compare function on the protocol header
dflet 0:400d8e75a8d0 407 * For example destMacAddre is between ( 12:6::78:77, 12:6::78:90 )
dflet 0:400d8e75a8d0 408 *
dflet 0:400d8e75a8d0 409 */
dflet 0:400d8e75a8d0 410 /* -- 56 byte */
dflet 0:400d8e75a8d0 411 typedef struct SlrxFilterHeaderType_t {
dflet 0:400d8e75a8d0 412 /*! see :: SlrxFilterRuleHeaderArgsAndMask_t */
dflet 0:400d8e75a8d0 413 /* -- 52 bytes */
dflet 0:400d8e75a8d0 414 SlrxFilterRuleHeaderArgsAndMask_t RuleHeaderArgsAndMask;
dflet 0:400d8e75a8d0 415
dflet 0:400d8e75a8d0 416 /*! Packet HDR field which will be compared to the argument */
dflet 0:400d8e75a8d0 417 /* -- 1 byte */
dflet 0:400d8e75a8d0 418 SlrxFilterHdrField_t RuleHeaderfield;
dflet 0:400d8e75a8d0 419
dflet 0:400d8e75a8d0 420 /* -- 1 byte */
dflet 0:400d8e75a8d0 421 /*! type of the comparison function
dflet 0:400d8e75a8d0 422 * see :: SlrxFilterCompareFunction_t
dflet 0:400d8e75a8d0 423 */
dflet 0:400d8e75a8d0 424 SlrxFilterCompareFunction_t RuleCompareFunc;
dflet 0:400d8e75a8d0 425
dflet 0:400d8e75a8d0 426 /*! padding */
dflet 0:400d8e75a8d0 427 /* -- 2 bytes */
dflet 0:400d8e75a8d0 428 uint8_t RulePadding[2];
dflet 0:400d8e75a8d0 429
dflet 0:400d8e75a8d0 430 } SlrxFilterHeaderType_t;
dflet 0:400d8e75a8d0 431
dflet 0:400d8e75a8d0 432 /*! \typedef SlrxFilterPayloadType_t
dflet 0:400d8e75a8d0 433 * Structure which defines payload rule.
dflet 0:400d8e75a8d0 434 * Not supported on current release.
dflet 0:400d8e75a8d0 435 */
dflet 0:400d8e75a8d0 436 /* -- 40 byte */
dflet 0:400d8e75a8d0 437 typedef struct SlrxFilterPayloadType_t {
dflet 0:400d8e75a8d0 438 /*! Not supported on current release */
dflet 0:400d8e75a8d0 439 /* -- 32 byte */
dflet 0:400d8e75a8d0 440 SlrxFilterRegxPattern_t RegxPattern;
dflet 0:400d8e75a8d0 441 /*! Not supported on current release */
dflet 0:400d8e75a8d0 442 /* -- 4 byte */
dflet 0:400d8e75a8d0 443 SlrxFilterOffset_t LowerOffset;
dflet 0:400d8e75a8d0 444 /*! Not supported on current release */
dflet 0:400d8e75a8d0 445 /* -- 4 byte */
dflet 0:400d8e75a8d0 446 SlrxFilterOffset_t UpperOffset;
dflet 0:400d8e75a8d0 447 } SlrxFilterPayloadType_t;
dflet 0:400d8e75a8d0 448
dflet 0:400d8e75a8d0 449 /*! \typedef SlrxFilterCombinationTypeOperator_t
dflet 0:400d8e75a8d0 450 * Enumerate the optional operators for the combination type
dflet 0:400d8e75a8d0 451 * filterID1 is located in the first arg , filterId2 is the second arg,see ::SlrxFilterCombinationType_t.CombinationFilterId
dflet 0:400d8e75a8d0 452 */
dflet 0:400d8e75a8d0 453 typedef uint8_t SlrxFilterCombinationTypeOperator_t;
dflet 0:400d8e75a8d0 454 /* Possible values for SlrxFilterCombinationTypeOperator_t */
dflet 0:400d8e75a8d0 455 /*! !filterID1 */
dflet 0:400d8e75a8d0 456 #define COMBINED_FUNC_NOT (0)
dflet 0:400d8e75a8d0 457 /*! filterID1 && filterID2 */
dflet 0:400d8e75a8d0 458 #define COMBINED_FUNC_AND (1)
dflet 0:400d8e75a8d0 459 /*! filterID1 && filterID2 */
dflet 0:400d8e75a8d0 460 #define COMBINED_FUNC_OR (2)
dflet 0:400d8e75a8d0 461
dflet 0:400d8e75a8d0 462 /*! \typedef SlrxFilterCombinationType_t
dflet 0:400d8e75a8d0 463 * Defines the structure which define the combination type filter
dflet 0:400d8e75a8d0 464 * The combined filter enable to make operation on one or two filter,
dflet 0:400d8e75a8d0 465 * for example !filterId1 or and(filterId2,filterId3).
dflet 0:400d8e75a8d0 466 *
dflet 0:400d8e75a8d0 467 */
dflet 0:400d8e75a8d0 468 /* -- 4 byte */
dflet 0:400d8e75a8d0 469 typedef struct SlrxFilterCombinationType_t {
dflet 0:400d8e75a8d0 470 /* ! combination operator */
dflet 0:400d8e75a8d0 471 /* -- 1 byte */
dflet 0:400d8e75a8d0 472 SlrxFilterCombinationTypeOperator_t CombinationTypeOperator;
dflet 0:400d8e75a8d0 473 /* ! filterID, may be one or two depends on the combination operator type */
dflet 0:400d8e75a8d0 474 /* -- 2 byte */
dflet 0:400d8e75a8d0 475 SlrxFilterID_t CombinationFilterId[SL_RX_FILTER_NUM_OF_COMBINATION_TYPE_ARGS];
dflet 0:400d8e75a8d0 476 /* ! Padding */
dflet 0:400d8e75a8d0 477 /* -- 1 byte */
dflet 0:400d8e75a8d0 478 uint8_t Padding;
dflet 0:400d8e75a8d0 479 } SlrxFilterCombinationType_t;
dflet 0:400d8e75a8d0 480
dflet 0:400d8e75a8d0 481
dflet 0:400d8e75a8d0 482 /*! \typedef SlrxFilterRule_t
dflet 0:400d8e75a8d0 483 * Rule structure composed of behavioral flags and the filter rule definitions
dflet 0:400d8e75a8d0 484 *
dflet 0:400d8e75a8d0 485 */
dflet 0:400d8e75a8d0 486 /* -- 56 byte */
dflet 0:400d8e75a8d0 487 typedef union SlrxFilterRule_t {
dflet 0:400d8e75a8d0 488 /* ! Header type rule , see explanation on the ::SlrxFilterHeaderType_t structure */
dflet 0:400d8e75a8d0 489 /* -- 56 byte */
dflet 0:400d8e75a8d0 490 SlrxFilterHeaderType_t HeaderType;
dflet 0:400d8e75a8d0 491 /* ! Payload rule, not supported in current release */
dflet 0:400d8e75a8d0 492 /* -- 40 byte */
dflet 0:400d8e75a8d0 493 SlrxFilterPayloadType_t PayLoadHeaderType; /* future for exact pattern or like hood pattern */
dflet 0:400d8e75a8d0 494 /* ! Combined type rule , see explanation in ::SlrxFilterCombinationType_t structure */
dflet 0:400d8e75a8d0 495 /* -- 4 byte */
dflet 0:400d8e75a8d0 496 SlrxFilterCombinationType_t CombinationType;
dflet 0:400d8e75a8d0 497 } SlrxFilterRule_t;
dflet 0:400d8e75a8d0 498
dflet 0:400d8e75a8d0 499 /*! \typedef SlrxFilterTriggerRoles_t
dflet 0:400d8e75a8d0 500 * Bit field which represents the roleId possible values
dflet 0:400d8e75a8d0 501 * In the current release only Station/AP roles are supported.
dflet 0:400d8e75a8d0 502 */
dflet 0:400d8e75a8d0 503 #define RX_FILTER_ROLE_AP (1)
dflet 0:400d8e75a8d0 504 #define RX_FILTER_ROLE_STA (2)
dflet 0:400d8e75a8d0 505 #define RX_FILTER_ROLE_PROMISCUOUS (4)
dflet 0:400d8e75a8d0 506 #define RX_FILTER_ROLE_NULL (0)
dflet 0:400d8e75a8d0 507
dflet 0:400d8e75a8d0 508 typedef union SlrxFilterTriggerRoles_t {
dflet 0:400d8e75a8d0 509 /* struct */
dflet 0:400d8e75a8d0 510 /* { */
dflet 0:400d8e75a8d0 511 /* uint8_t RoleAP :1; */
dflet 0:400d8e75a8d0 512 /* uint8_t RoleStation :1; */
dflet 0:400d8e75a8d0 513 /* The filter is activated only in Promiscuous mode */
dflet 0:400d8e75a8d0 514 /* uint8_t PromiscuousMode :1; */
dflet 0:400d8e75a8d0 515 /* uint8_t RoleReserved :5; */
dflet 0:400d8e75a8d0 516 /* }; */
dflet 0:400d8e75a8d0 517 /* ! Bit fiels of the Filter role */
dflet 0:400d8e75a8d0 518 uint8_t IntRepresentation;
dflet 0:400d8e75a8d0 519
dflet 0:400d8e75a8d0 520 } SlrxFilterTriggerRoles_t;
dflet 0:400d8e75a8d0 521
dflet 0:400d8e75a8d0 522 /*! \typedef SlrxFilterTriggerConnectionStates_t
dflet 0:400d8e75a8d0 523 * Bit field representing the possible values of the When section of the rule
dflet 0:400d8e75a8d0 524 *
dflet 0:400d8e75a8d0 525 */
dflet 0:400d8e75a8d0 526 #define RX_FILTER_CONNECTION_STATE_STA_CONNECTED (1)
dflet 0:400d8e75a8d0 527 #define RX_FILTER_CONNECTION_STATE_STA_NOT_CONNECTED (2)
dflet 0:400d8e75a8d0 528 #define RX_FILTER_CONNECTION_STATE_STA_HAS_IP (4)
dflet 0:400d8e75a8d0 529 #define RX_FILTER_CONNECTION_STATE_STA_HAS_NO_IP (8)
dflet 0:400d8e75a8d0 530
dflet 0:400d8e75a8d0 531 typedef union SlrxFilterTriggerConnectionStates_t {
dflet 0:400d8e75a8d0 532 /* struct */
dflet 0:400d8e75a8d0 533 /* { */
dflet 0:400d8e75a8d0 534 /* uint8_t RoleStationWiFiConnected :1; */
dflet 0:400d8e75a8d0 535 /* uint8_t RoleStationWiFiDisconneted:1; */
dflet 0:400d8e75a8d0 536 /* uint8_t RoleStationWiFiHasIp:1; */
dflet 0:400d8e75a8d0 537 /* uint8_t RoleStationWiFiHasNoIp:1; */
dflet 0:400d8e75a8d0 538 /* uint8_t RoleStationWiFiSocketOpened:1; */
dflet 0:400d8e75a8d0 539 /* uint8_t RoleStationWiFiSocketclosed:1; */
dflet 0:400d8e75a8d0 540 /* }; */
dflet 0:400d8e75a8d0 541 /* */
dflet 0:400d8e75a8d0 542 /* ! */
dflet 0:400d8e75a8d0 543 uint8_t IntRepresentation;
dflet 0:400d8e75a8d0 544
dflet 0:400d8e75a8d0 545 } SlrxFilterTriggerConnectionStates_t;
dflet 0:400d8e75a8d0 546
dflet 0:400d8e75a8d0 547 /*! \typedef SlrxFilterDBTriggerArg_t
dflet 0:400d8e75a8d0 548 * Provides container for entering the filter 'when' argument.
dflet 0:400d8e75a8d0 549 * The current release support 'When rules' which has no arguments.
dflet 0:400d8e75a8d0 550 * For example :
dflet 0:400d8e75a8d0 551 * When connect to specific AP -- the AP bssid is the argument.
dflet 0:400d8e75a8d0 552 *
dflet 0:400d8e75a8d0 553 */
dflet 0:400d8e75a8d0 554 typedef uint32_t SlrxFilterDBTriggerArg_t;
dflet 0:400d8e75a8d0 555
dflet 0:400d8e75a8d0 556
dflet 0:400d8e75a8d0 557
dflet 0:400d8e75a8d0 558 /*! \typedef SlrxFilterCounterId_t
dflet 0:400d8e75a8d0 559 * the counter ID we have 4 counters
dflet 0:400d8e75a8d0 560 */
dflet 0:400d8e75a8d0 561 typedef uint8_t SlrxFilterCounterId_t;
dflet 0:400d8e75a8d0 562 /* Possible values for SlrxFilterCounterId_t */
dflet 0:400d8e75a8d0 563 #define NO_TRIGGER (0)
dflet 0:400d8e75a8d0 564 #define RX_FILTER_COUNTER1 (1)
dflet 0:400d8e75a8d0 565 #define RX_FILTER_COUNTER2 (2)
dflet 0:400d8e75a8d0 566 #define RX_FILTER_COUNTER3 (3)
dflet 0:400d8e75a8d0 567 #define RX_FILTER_COUNTER4 (4)
dflet 0:400d8e75a8d0 568 #define RX_FILTER_COUNTER5 (5)
dflet 0:400d8e75a8d0 569 #define RX_FILTER_COUNTER6 (6)
dflet 0:400d8e75a8d0 570 #define RX_FILTER_COUNTER7 (7)
dflet 0:400d8e75a8d0 571 #define RX_FILTER_COUNTER8 (8)
dflet 0:400d8e75a8d0 572 #define MAX_RX_FILTER_COUNTER (9)
dflet 0:400d8e75a8d0 573
dflet 0:400d8e75a8d0 574
dflet 0:400d8e75a8d0 575
dflet 0:400d8e75a8d0 576 /*! \typedef SlrxFilterActionArgs_t
dflet 0:400d8e75a8d0 577 * Possible value for filter action args
dflet 0:400d8e75a8d0 578 *
dflet 0:400d8e75a8d0 579 */
dflet 0:400d8e75a8d0 580
dflet 0:400d8e75a8d0 581 typedef uint8_t SlrxFilterActionArgs_t;
dflet 0:400d8e75a8d0 582 /* Possible values for SlrxFilterActionArgs_t */
dflet 0:400d8e75a8d0 583 #define ACTION_ARG_REG_1_4 (0)
dflet 0:400d8e75a8d0 584 /* ! Can be use as counter */
dflet 0:400d8e75a8d0 585 #define ACTION_ARG_TEMPLATE (1)
dflet 0:400d8e75a8d0 586 /* ! Can be use as counter */
dflet 0:400d8e75a8d0 587 #define ACTION_ARG_EVENT (2)
dflet 0:400d8e75a8d0 588
dflet 0:400d8e75a8d0 589 /* ! GPIO number */
dflet 0:400d8e75a8d0 590 #define ACTION_ARG_GPIO (4)
dflet 0:400d8e75a8d0 591 /*!
dflet 0:400d8e75a8d0 592 * \def SL_RX_FILTER_NUM_OF_BYTES_FOR_ACTIONS_ARGS
dflet 0:400d8e75a8d0 593 *
dflet 0:400d8e75a8d0 594 */
dflet 0:400d8e75a8d0 595 #define SL_RX_FILTER_NUM_OF_BYTES_FOR_ACTIONS_ARGS (5)
dflet 0:400d8e75a8d0 596
dflet 0:400d8e75a8d0 597
dflet 0:400d8e75a8d0 598
dflet 0:400d8e75a8d0 599
dflet 0:400d8e75a8d0 600 /*! \typedef SlrxFilterTrigger_t
dflet 0:400d8e75a8d0 601 * The filter trigger, determine when the filter is triggered,
dflet 0:400d8e75a8d0 602 * The filter is triggered in the following condition :\n
dflet 0:400d8e75a8d0 603 * 1. The filter parent is triggered\n
dflet 0:400d8e75a8d0 604 * 2. The requested connection type exists, i.e. wlan_connect\n
dflet 0:400d8e75a8d0 605 * 3. The filter role is the same as the system role\n
dflet 0:400d8e75a8d0 606 *
dflet 0:400d8e75a8d0 607 */
dflet 0:400d8e75a8d0 608 /* -- 12 byte */
dflet 0:400d8e75a8d0 609 typedef struct SlrxFilterTrigger_t {
dflet 0:400d8e75a8d0 610 /*! The parent filter ID, this is the way to build filter tree. */
dflet 0:400d8e75a8d0 611 /* NULL value means tree root.
dflet 0:400d8e75a8d0 612 */
dflet 0:400d8e75a8d0 613 /* -- 1 byte */
dflet 0:400d8e75a8d0 614 SlrxFilterID_t ParentFilterID;
dflet 0:400d8e75a8d0 615 /* ! See ::SlrxFilterCounterId_t explanation */
dflet 0:400d8e75a8d0 616 /* -- 1 byte */
dflet 0:400d8e75a8d0 617 SlrxFilterCounterId_t Trigger;
dflet 0:400d8e75a8d0 618 /* ! See :: SlrxFilterTriggerConnectionStates_t */
dflet 0:400d8e75a8d0 619 /* -- 1 byte */
dflet 0:400d8e75a8d0 620 SlrxFilterTriggerConnectionStates_t TriggerArgConnectionState;
dflet 0:400d8e75a8d0 621 /* ! See ::SlrxFilterTriggerRoles_t */
dflet 0:400d8e75a8d0 622 /* -- 1 byte */
dflet 0:400d8e75a8d0 623 SlrxFilterTriggerRoles_t TriggerArgRoleStatus;
dflet 0:400d8e75a8d0 624 /* ! The Trigger arguments are in the same order as the Trigger bit field order. */
dflet 0:400d8e75a8d0 625 /* -- 4 byte */
dflet 0:400d8e75a8d0 626 SlrxFilterDBTriggerArg_t TriggerArg;
dflet 0:400d8e75a8d0 627 /** The compare function which will be operate for each bit that is turned on in the ::SlrxFilterTrigger_t.Trigger field,
dflet 0:400d8e75a8d0 628 * for example , in case the second bit in the Trigger function is on the second function in the list will be executed.
dflet 0:400d8e75a8d0 629 *
dflet 0:400d8e75a8d0 630 */
dflet 0:400d8e75a8d0 631 /* -- 1 byte */
dflet 0:400d8e75a8d0 632 SlrxTriggerCompareFunction_t TriggerCompareFunction;
dflet 0:400d8e75a8d0 633
dflet 0:400d8e75a8d0 634 /* ! padding */
dflet 0:400d8e75a8d0 635 /* -- 3 byte */
dflet 0:400d8e75a8d0 636 uint8_t Padding[3];
dflet 0:400d8e75a8d0 637 } SlrxFilterTrigger_t;
dflet 0:400d8e75a8d0 638
dflet 0:400d8e75a8d0 639 /*! \typedef SlrxFilterActionType_t
dflet 0:400d8e75a8d0 640 * The actions are executed only if the filter is matched,\n
dflet 0:400d8e75a8d0 641 * In case of false match the packet is transfered to the HOST. \n
dflet 0:400d8e75a8d0 642 * The action is composed of bit field structure,
dflet 0:400d8e75a8d0 643 * up to 2 actions can be defined per filter.
dflet 0:400d8e75a8d0 644 *
dflet 0:400d8e75a8d0 645 */
dflet 0:400d8e75a8d0 646 #define RX_FILTER_ACTION_NULL (0x0)
dflet 0:400d8e75a8d0 647 #define RX_FILTER_ACTION_DROP (0x1)
dflet 0:400d8e75a8d0 648 #define RX_FILTER_ACTION_GPIO (0x2)
dflet 0:400d8e75a8d0 649 #define RX_FILTER_ACTION_ON_REG_INCREASE (0x4)
dflet 0:400d8e75a8d0 650 #define RX_FILTER_ACTION_ON_REG_DECREASE (0x8)
dflet 0:400d8e75a8d0 651 #define RX_FILTER_ACTION_ON_REG_RESET (0x10)
dflet 0:400d8e75a8d0 652 #define RX_FILTER_ACTION_SEND_TEMPLATE (0x20) /* unsupported */
dflet 0:400d8e75a8d0 653 #define RX_FILTER_ACTION_EVENT_TO_HOST (0x40) /* unsupported */
dflet 0:400d8e75a8d0 654
dflet 0:400d8e75a8d0 655 typedef union SlrxFilterActionType_t {
dflet 0:400d8e75a8d0 656 /* struct */
dflet 0:400d8e75a8d0 657 /* { */
dflet 0:400d8e75a8d0 658 /* ! No action to execute the packet is dropped,drop is always on leaf. */
dflet 0:400d8e75a8d0 659 /* ! If not dropped ,The packet is passed to the next filter or in case it is the last filter to the host */
dflet 0:400d8e75a8d0 660 /* uint8_t ActionDrop : 1; */
dflet 0:400d8e75a8d0 661 /* ! Not Supported in the current release */
dflet 0:400d8e75a8d0 662 /* uint8_t ActionGpio : 1; */
dflet 0:400d8e75a8d0 663 /*! action can increase counter registers.
dflet 0:400d8e75a8d0 664 * 1 = Increase
dflet 0:400d8e75a8d0 665 * 2 = decrease
dflet 0:400d8e75a8d0 666 * 3 = reset
dflet 0:400d8e75a8d0 667 */
dflet 0:400d8e75a8d0 668 /* uint8_t ActionOnREGIncrease : 1; */
dflet 0:400d8e75a8d0 669 /* uint8_t ActionOnREGDecrease : 1; */
dflet 0:400d8e75a8d0 670 /* uint8_t ActionOnREGReset : 1; */
dflet 0:400d8e75a8d0 671
dflet 0:400d8e75a8d0 672 /* ! Not Supported in the current release */
dflet 0:400d8e75a8d0 673 /* uint8_t ActionSendTemplate : 1; */
dflet 0:400d8e75a8d0 674 /* ! Not Supported in the current release */
dflet 0:400d8e75a8d0 675 /* uint8_t ActionEventToHost: 1; */
dflet 0:400d8e75a8d0 676 /* uint8_t padding: 1; */
dflet 0:400d8e75a8d0 677 /* }; */
dflet 0:400d8e75a8d0 678
dflet 0:400d8e75a8d0 679 uint8_t IntRepresentation;
dflet 0:400d8e75a8d0 680
dflet 0:400d8e75a8d0 681 } SlrxFilterActionType_t;
dflet 0:400d8e75a8d0 682
dflet 0:400d8e75a8d0 683 /*! \typedef SlrxFilterAction_t
dflet 0:400d8e75a8d0 684 * Several actions can be defined,\n
dflet 0:400d8e75a8d0 685 * The action is executed in case the filter rule is matched.
dflet 0:400d8e75a8d0 686 */
dflet 0:400d8e75a8d0 687 /* -- 8 byte */
dflet 0:400d8e75a8d0 688 typedef struct SlrxFilterAction_t {
dflet 0:400d8e75a8d0 689 /* -- 1 byte */
dflet 0:400d8e75a8d0 690 /* ! Determine which actions are supported */
dflet 0:400d8e75a8d0 691 SlrxFilterActionType_t ActionType;
dflet 0:400d8e75a8d0 692 /* ! Buffer for the action arguments */
dflet 0:400d8e75a8d0 693 /**
dflet 0:400d8e75a8d0 694 * <b>location 0</b> - The counter to increase
dflet 0:400d8e75a8d0 695 * In case the action is of type "increase" the arg will contain the counter number,
dflet 0:400d8e75a8d0 696 * The counter number values are as in ::SlrxFilterCounterId_t.\n
dflet 0:400d8e75a8d0 697 * <b>location 1</b> - The template arg.\n
dflet 0:400d8e75a8d0 698 * <b>location 2</b> - The event arg.\n
dflet 0:400d8e75a8d0 699 *
dflet 0:400d8e75a8d0 700 */
dflet 0:400d8e75a8d0 701 /* -- 5 byte */
dflet 0:400d8e75a8d0 702 SlrxFilterActionArg_t ActionArg[SL_RX_FILTER_NUM_OF_BYTES_FOR_ACTIONS_ARGS];
dflet 0:400d8e75a8d0 703
dflet 0:400d8e75a8d0 704 /* ! Padding */
dflet 0:400d8e75a8d0 705 /* - 2 Bytes */
dflet 0:400d8e75a8d0 706 uint8_t Padding[2];
dflet 0:400d8e75a8d0 707
dflet 0:400d8e75a8d0 708 } SlrxFilterAction_t;
dflet 0:400d8e75a8d0 709
dflet 0:400d8e75a8d0 710
dflet 0:400d8e75a8d0 711 /*! \struct _WlanRxFilterOperationCommandBuff_t
dflet 0:400d8e75a8d0 712 * The structure is used for the interface HOST NWP.\n
dflet 0:400d8e75a8d0 713 * The supported operation : \n
dflet 0:400d8e75a8d0 714 * ::ENABLE_DISABLE_RX_FILTER,\n
dflet 0:400d8e75a8d0 715 * ::REMOVE_RX_FILTER,\n
dflet 0:400d8e75a8d0 716 *
dflet 0:400d8e75a8d0 717 */
dflet 0:400d8e75a8d0 718 /* 20 bytes */
dflet 0:400d8e75a8d0 719 typedef struct _WlanRxFilterOperationCommandBuff_t {
dflet 0:400d8e75a8d0 720 /* -- 16 bytes */
dflet 0:400d8e75a8d0 721 SlrxFilterIdMask_t FilterIdMask;
dflet 0:400d8e75a8d0 722 /* 4 bytes */
dflet 0:400d8e75a8d0 723 uint8_t Padding[4];
dflet 0:400d8e75a8d0 724 } _WlanRxFilterOperationCommandBuff_t;
dflet 0:400d8e75a8d0 725
dflet 0:400d8e75a8d0 726
dflet 0:400d8e75a8d0 727
dflet 0:400d8e75a8d0 728 /* -- 56 bytes */
dflet 0:400d8e75a8d0 729 typedef struct _WlanRxFilterUpdateArgsCommandBuff_t {
dflet 0:400d8e75a8d0 730 /* -- 1 bytes */
dflet 0:400d8e75a8d0 731 uint8_t FilterId;
dflet 0:400d8e75a8d0 732
dflet 0:400d8e75a8d0 733 /* -- 1 bytes */
dflet 0:400d8e75a8d0 734 /* ! the args representation */
dflet 0:400d8e75a8d0 735 uint8_t BinaryRepresentation;
dflet 0:400d8e75a8d0 736
dflet 0:400d8e75a8d0 737 /* -- 52 byte */
dflet 0:400d8e75a8d0 738 SlrxFilterRuleHeaderArgsAndMask_t FilterRuleHeaderArgsAndMask;
dflet 0:400d8e75a8d0 739
dflet 0:400d8e75a8d0 740 /* -- 2 bytes */
dflet 0:400d8e75a8d0 741 uint8_t Padding[2];
dflet 0:400d8e75a8d0 742 } _WlanRxFilterUpdateArgsCommandBuff_t;
dflet 0:400d8e75a8d0 743
dflet 0:400d8e75a8d0 744
dflet 0:400d8e75a8d0 745 /*! \typedef _WlanRxFilterRetrieveEnableStatusCommandResponseBuff_t
dflet 0:400d8e75a8d0 746 * The structure is used for the interface HOST NWP.\n
dflet 0:400d8e75a8d0 747 *
dflet 0:400d8e75a8d0 748 */
dflet 0:400d8e75a8d0 749 /* -- 16 bytes */
dflet 0:400d8e75a8d0 750 typedef struct _WlanRxFilterRetrieveEnableStatusCommandResponseBuff_t {
dflet 0:400d8e75a8d0 751
dflet 0:400d8e75a8d0 752 /* ! the filter set bit map */
dflet 0:400d8e75a8d0 753 /* -- 16 bytes */
dflet 0:400d8e75a8d0 754 SlrxFilterIdMask_t FilterIdMask;
dflet 0:400d8e75a8d0 755
dflet 0:400d8e75a8d0 756 } _WlanRxFilterRetrieveEnableStatusCommandResponseBuff_t;
dflet 0:400d8e75a8d0 757
dflet 0:400d8e75a8d0 758
dflet 0:400d8e75a8d0 759 /*! \struct _WlanRxFilterPrePreparedFiltersCommandBuff_t
dflet 0:400d8e75a8d0 760 * The function enables to perform operations on pre-prepared filters
dflet 0:400d8e75a8d0 761 *
dflet 0:400d8e75a8d0 762 */
dflet 0:400d8e75a8d0 763 typedef struct _WlanRxFilterPrePreparedFiltersCommandBuff_t {
dflet 0:400d8e75a8d0 764 /* ! the filter set bit map */
dflet 0:400d8e75a8d0 765 /* -- 4 bytes */
dflet 0:400d8e75a8d0 766 SlrxFilterPrePreparedFiltersMask_t FilterPrePreparedFiltersMask;
dflet 0:400d8e75a8d0 767
dflet 0:400d8e75a8d0 768 } _WlanRxFilterPrePreparedFiltersCommandBuff_t;
dflet 0:400d8e75a8d0 769
dflet 0:400d8e75a8d0 770
dflet 0:400d8e75a8d0 771 /*! \typedef sl_protocol_WlanRxFilterPrePreparedFiltersCommandResponseBuff_t
dflet 0:400d8e75a8d0 772 *
dflet 0:400d8e75a8d0 773 */
dflet 0:400d8e75a8d0 774 /*-- 4 bytes */
dflet 0:400d8e75a8d0 775 typedef struct _WlanRxFilterPrePreparedFiltersCommandResponseBuff_t {
dflet 0:400d8e75a8d0 776 /* -- 4 bytes */
dflet 0:400d8e75a8d0 777 /* ! the filter set bit map */
dflet 0:400d8e75a8d0 778 SlrxFilterPrePreparedFiltersMask_t FilterPrePreparedFiltersMask;
dflet 0:400d8e75a8d0 779
dflet 0:400d8e75a8d0 780 } _WlanRxFilterPrePreparedFiltersCommandResponseBuff_t;
dflet 0:400d8e75a8d0 781
dflet 0:400d8e75a8d0 782
dflet 0:400d8e75a8d0 783
dflet 0:400d8e75a8d0 784 typedef uint8_t SLrxFilterOperation_t;
dflet 0:400d8e75a8d0 785 #define SL_ENABLE_DISABLE_RX_FILTER (0)
dflet 0:400d8e75a8d0 786 #define SL_REMOVE_RX_FILTER (1)
dflet 0:400d8e75a8d0 787 #define SL_STORE_RX_FILTERS (2)
dflet 0:400d8e75a8d0 788 #define SL_UPDATE_RX_FILTER_ARGS (3)
dflet 0:400d8e75a8d0 789 #define SL_FILTER_RETRIEVE_ENABLE_STATE (4)
dflet 0:400d8e75a8d0 790 #define SL_FILTER_PRE_PREPARED_RETRIEVE_CREATE_REMOVE_STATE (5)
dflet 0:400d8e75a8d0 791 #define SL_FILTER_PRE_PREPARED_SET_CREATE_REMOVE_STATE (6)
dflet 0:400d8e75a8d0 792
dflet 0:400d8e75a8d0 793
dflet 0:400d8e75a8d0 794 /* Bit manipulation for 8 bit */
dflet 0:400d8e75a8d0 795 #define ISBITSET8(x,i) ((x[i>>3] & (0x80>>(i&7)))!=0) /* < Is bit set, 8 bit unsigned numbers = x , location = i */
dflet 0:400d8e75a8d0 796 #define SETBIT8(x,i) x[i>>3]|=(0x80>>(i&7)); /* < Set bit,8 bit unsigned numbers = x , location = i */
dflet 0:400d8e75a8d0 797 #define CLEARBIT8(x,i) x[i>>3]&=(0x80>>(i&7))^0xFF; /* < Clear bit,8 bit unsigned numbers = x , location = i */
dflet 0:400d8e75a8d0 798
dflet 0:400d8e75a8d0 799 namespace mbed_cc3100 {
dflet 0:400d8e75a8d0 800
dflet 0:400d8e75a8d0 801 /* ******************************************************************************/
dflet 0:400d8e75a8d0 802 /* RX filters - Start */
dflet 0:400d8e75a8d0 803 /* ******************************************************************************/
dflet 0:400d8e75a8d0 804 /* -- 80 bytes */
dflet 0:400d8e75a8d0 805 typedef struct _WlanRxFilterAddCommand_t {
dflet 0:400d8e75a8d0 806 /* -- 1 byte */
dflet 0:400d8e75a8d0 807 SlrxFilterRuleType_t RuleType;
dflet 0:400d8e75a8d0 808 /* -- 1 byte */
dflet 0:400d8e75a8d0 809 SlrxFilterFlags_t FilterFlags;
dflet 0:400d8e75a8d0 810 /* -- 1 byte */
dflet 0:400d8e75a8d0 811 SlrxFilterID_t FilterId;
dflet 0:400d8e75a8d0 812 /* -- 1 byte */
dflet 0:400d8e75a8d0 813 uint8_t Padding;
dflet 0:400d8e75a8d0 814 /* -- 56 byte */
dflet 0:400d8e75a8d0 815 SlrxFilterRule_t Rule;
dflet 0:400d8e75a8d0 816 /* -- 12 byte ( 3 padding ) */
dflet 0:400d8e75a8d0 817 SlrxFilterTrigger_t Trigger;
dflet 0:400d8e75a8d0 818 /* -- 8 byte */
dflet 0:400d8e75a8d0 819 SlrxFilterAction_t Action;
dflet 0:400d8e75a8d0 820 } _WlanRxFilterAddCommand_t;
dflet 0:400d8e75a8d0 821
dflet 0:400d8e75a8d0 822
dflet 0:400d8e75a8d0 823
dflet 0:400d8e75a8d0 824 /* -- 4 bytes */
dflet 0:400d8e75a8d0 825 typedef struct l_WlanRxFilterAddCommandReponse_t {
dflet 0:400d8e75a8d0 826 /* -- 1 byte */
dflet 0:400d8e75a8d0 827 SlrxFilterID_t FilterId;
dflet 0:400d8e75a8d0 828 /* -- 1 Byte */
dflet 0:400d8e75a8d0 829 uint8_t Status;
dflet 0:400d8e75a8d0 830 /* -- 2 byte */
dflet 0:400d8e75a8d0 831 uint8_t Padding[2];
dflet 0:400d8e75a8d0 832
dflet 0:400d8e75a8d0 833 } _WlanRxFilterAddCommandReponse_t;
dflet 0:400d8e75a8d0 834
dflet 0:400d8e75a8d0 835
dflet 0:400d8e75a8d0 836
dflet 0:400d8e75a8d0 837 /*
dflet 0:400d8e75a8d0 838 * \struct _WlanRxFilterSetCommand_t
dflet 0:400d8e75a8d0 839 */
dflet 0:400d8e75a8d0 840 typedef struct _WlanRxFilterSetCommand_t {
dflet 0:400d8e75a8d0 841 uint16_t InputBufferLength;
dflet 0:400d8e75a8d0 842 /* 1 byte */
dflet 0:400d8e75a8d0 843 SLrxFilterOperation_t RxFilterOperation;
dflet 0:400d8e75a8d0 844 uint8_t Padding[1];
dflet 0:400d8e75a8d0 845 } _WlanRxFilterSetCommand_t;
dflet 0:400d8e75a8d0 846
dflet 0:400d8e75a8d0 847 /**
dflet 0:400d8e75a8d0 848 * \struct _WlanRxFilterSetCommandReponse_t
dflet 0:400d8e75a8d0 849 */
dflet 0:400d8e75a8d0 850 typedef struct _WlanRxFilterSetCommandReponse_t {
dflet 0:400d8e75a8d0 851 /* 1 byte */
dflet 0:400d8e75a8d0 852 uint8_t Status;
dflet 0:400d8e75a8d0 853 /* 3 bytes */
dflet 0:400d8e75a8d0 854 uint8_t Padding[3];
dflet 0:400d8e75a8d0 855
dflet 0:400d8e75a8d0 856 } _WlanRxFilterSetCommandReponse_t;
dflet 0:400d8e75a8d0 857
dflet 0:400d8e75a8d0 858 /**
dflet 0:400d8e75a8d0 859 * \struct _WlanRxFilterGetCommand_t
dflet 0:400d8e75a8d0 860 */
dflet 0:400d8e75a8d0 861 typedef struct _WlanRxFilterGetCommand_t {
dflet 0:400d8e75a8d0 862 uint16_t OutputBufferLength;
dflet 0:400d8e75a8d0 863 /* 1 byte */
dflet 0:400d8e75a8d0 864 SLrxFilterOperation_t RxFilterOperation;
dflet 0:400d8e75a8d0 865 uint8_t Padding[1];
dflet 0:400d8e75a8d0 866 } _WlanRxFilterGetCommand_t;
dflet 0:400d8e75a8d0 867
dflet 0:400d8e75a8d0 868 /**
dflet 0:400d8e75a8d0 869 * \struct _WlanRxFilterGetCommandReponse_t
dflet 0:400d8e75a8d0 870 */
dflet 0:400d8e75a8d0 871 typedef struct _WlanRxFilterGetCommandReponse_t {
dflet 0:400d8e75a8d0 872 /* 1 byte */
dflet 0:400d8e75a8d0 873 uint8_t Status;
dflet 0:400d8e75a8d0 874 /* 1 bytes */
dflet 0:400d8e75a8d0 875 uint8_t Padding;
dflet 0:400d8e75a8d0 876 /* 2 byte */
dflet 0:400d8e75a8d0 877 uint16_t OutputBufferLength;
dflet 0:400d8e75a8d0 878
dflet 0:400d8e75a8d0 879 } _WlanRxFilterGetCommandReponse_t;
dflet 0:400d8e75a8d0 880
dflet 0:400d8e75a8d0 881
dflet 0:400d8e75a8d0 882
dflet 0:400d8e75a8d0 883 /* ******************************************************************************/
dflet 0:400d8e75a8d0 884 /* RX filters -- End */
dflet 0:400d8e75a8d0 885 /* ******************************************************************************/
dflet 0:400d8e75a8d0 886
dflet 0:400d8e75a8d0 887 class cc3100_driver;
dflet 0:400d8e75a8d0 888
dflet 0:400d8e75a8d0 889 class cc3100_wlan_rx_filters
dflet 0:400d8e75a8d0 890 {
dflet 0:400d8e75a8d0 891
dflet 0:400d8e75a8d0 892 public:
dflet 0:400d8e75a8d0 893
dflet 0:400d8e75a8d0 894 cc3100_wlan_rx_filters(cc3100_driver &driver);
dflet 0:400d8e75a8d0 895
dflet 0:400d8e75a8d0 896 ~cc3100_wlan_rx_filters();
dflet 0:400d8e75a8d0 897
dflet 0:400d8e75a8d0 898
dflet 0:400d8e75a8d0 899 /*********************************************************************************************/
dflet 0:400d8e75a8d0 900 /* Function prototypes */
dflet 0:400d8e75a8d0 901 /*********************************************************************************************/
dflet 0:400d8e75a8d0 902
dflet 0:400d8e75a8d0 903 /*!
dflet 0:400d8e75a8d0 904
dflet 0:400d8e75a8d0 905 \addtogroup wlan
dflet 0:400d8e75a8d0 906 @{
dflet 0:400d8e75a8d0 907
dflet 0:400d8e75a8d0 908 */
dflet 0:400d8e75a8d0 909
dflet 0:400d8e75a8d0 910
dflet 0:400d8e75a8d0 911 /*!
dflet 0:400d8e75a8d0 912 \brief Adds new filter rule to the system
dflet 0:400d8e75a8d0 913
dflet 0:400d8e75a8d0 914 \param[in] RuleType The rule type
dflet 0:400d8e75a8d0 915 \param[in] FilterFlags Flags which set the type of header rule Args and sets the persistent flag
dflet 0:400d8e75a8d0 916 \param[in] pRule Determine the filter rule logic
dflet 0:400d8e75a8d0 917 \param[in] pTrigger Determine when the rule is triggered also sets rule parent.
dflet 0:400d8e75a8d0 918 \param[in] pAction Sets the action to be executed in case the match functions pass
dflet 0:400d8e75a8d0 919 \param[out] pFilterId The filterId which was created
dflet 0:400d8e75a8d0 920
dflet 0:400d8e75a8d0 921 \return On success, zero is returned. Otherwise error code is returned
dflet 0:400d8e75a8d0 922 */
dflet 0:400d8e75a8d0 923 #if _SL_INCLUDE_FUNC(sl_WlanRxFilterAdd)
dflet 0:400d8e75a8d0 924 SlrxFilterID_t sl_WlanRxFilterAdd( SlrxFilterRuleType_t RuleType,
dflet 0:400d8e75a8d0 925 SlrxFilterFlags_t FilterFlags,
dflet 0:400d8e75a8d0 926 const SlrxFilterRule_t* const Rule,
dflet 0:400d8e75a8d0 927 const SlrxFilterTrigger_t* const Trigger,
dflet 0:400d8e75a8d0 928 const SlrxFilterAction_t* const Action,
dflet 0:400d8e75a8d0 929 SlrxFilterID_t* pFilterId);
dflet 0:400d8e75a8d0 930
dflet 0:400d8e75a8d0 931 #endif
dflet 0:400d8e75a8d0 932
dflet 0:400d8e75a8d0 933
dflet 0:400d8e75a8d0 934
dflet 0:400d8e75a8d0 935
dflet 0:400d8e75a8d0 936
dflet 0:400d8e75a8d0 937 /*!
dflet 0:400d8e75a8d0 938 \brief Sets parameters to Rx filters
dflet 0:400d8e75a8d0 939
dflet 0:400d8e75a8d0 940 \param[in] RxFilterOperation
dflet 0:400d8e75a8d0 941 possible operations :
dflet 0:400d8e75a8d0 942 - SL_ENABLE_DISABLE_RX_FILTER - Enables\disables filter in a filter list
dflet 0:400d8e75a8d0 943 - SL_REMOVE_RX_FILTER - Removes filter from memory ( to remove from flash call SL_STORE_RX_FILTERS after this command)
dflet 0:400d8e75a8d0 944 - SL_STORE_RX_FILTERS - Save the filters for persistent
dflet 0:400d8e75a8d0 945 - SL_UPDATE_RX_FILTER_ARGS - Update the arguments of existing filter
dflet 0:400d8e75a8d0 946 - SL_FILTER_PRE_PREPARED_SET_CREATE_REMOVE_STATE - Change the default creation of the pre-prepared filters
dflet 0:400d8e75a8d0 947
dflet 0:400d8e75a8d0 948 \param[in] pInputBuffer options:
dflet 0:400d8e75a8d0 949 The buffer input is _WlanRxFilterOperationCommandBuff_t:
dflet 0:400d8e75a8d0 950 - SL_ENABLE_DISABLE_RX_FILTER
dflet 0:400d8e75a8d0 951 - SL_REMOVE_RX_FILTER
dflet 0:400d8e75a8d0 952 - SL_STORE_RX_FILTERS
dflet 0:400d8e75a8d0 953 The buffer input is _WlanRxFilterUpdateArgsCommandBuff_t:
dflet 0:400d8e75a8d0 954 - SL_UPDATE_RX_FILTER_ARGS
dflet 0:400d8e75a8d0 955 The buffer input is _WlanRxFilterPrePreparedFiltersCommandBuff_t:
dflet 0:400d8e75a8d0 956 - SL_FILTER_PRE_PREPARED_SET_CREATE_REMOVE_STATE
dflet 0:400d8e75a8d0 957
dflet 0:400d8e75a8d0 958 \param[in] InputbufferLength The length in byte of the input buffer
dflet 0:400d8e75a8d0 959
dflet 0:400d8e75a8d0 960 \return On success, zero is returned. Otherwise error code is returned
dflet 0:400d8e75a8d0 961 */
dflet 0:400d8e75a8d0 962
dflet 0:400d8e75a8d0 963 #if _SL_INCLUDE_FUNC(sl_WlanRxFilterSet)
dflet 0:400d8e75a8d0 964 int16_t sl_WlanRxFilterSet( const SLrxFilterOperation_t RxFilterOperation,
dflet 0:400d8e75a8d0 965 const uint8_t* const pInputBuffer,
dflet 0:400d8e75a8d0 966 uint16_t InputbufferLength);
dflet 0:400d8e75a8d0 967 #endif
dflet 0:400d8e75a8d0 968
dflet 0:400d8e75a8d0 969 /*!
dflet 0:400d8e75a8d0 970 \brief Gets parameters of Rx filters
dflet 0:400d8e75a8d0 971
dflet 0:400d8e75a8d0 972 \param[in] RxFilterOperation
dflet 0:400d8e75a8d0 973 possible operations :
dflet 0:400d8e75a8d0 974 - SL_FILTER_RETRIEVE_ENABLE_STATE - Retrieves the enable disable status
dflet 0:400d8e75a8d0 975 - SL_FILTER_PRE_PREPARED_RETRIEVE_CREATE_REMOVE_STATE - Retrieves the pre-prepared filters creation status
dflet 0:400d8e75a8d0 976
dflet 0:400d8e75a8d0 977 \param[in] pOutputBuffer
dflet 0:400d8e75a8d0 978 The buffer input is _WlanRxFilterRetrieveEnableStatusCommandResponseBuff_t:
dflet 0:400d8e75a8d0 979 - SL_FILTER_RETRIEVE_ENABLE_STATE
dflet 0:400d8e75a8d0 980 The buffer input is _WlanRxFilterPrePreparedFiltersCommandResponseBuff_t:
dflet 0:400d8e75a8d0 981 - SL_FILTER_PRE_PREPARED_RETRIEVE_CREATE_REMOVE_STATE
dflet 0:400d8e75a8d0 982
dflet 0:400d8e75a8d0 983 \param[in] OutputbufferLength The length in byte of the output buffer
dflet 0:400d8e75a8d0 984
dflet 0:400d8e75a8d0 985 \return On success, zero is returned. Otherwise error code is returned
dflet 0:400d8e75a8d0 986 */
dflet 0:400d8e75a8d0 987
dflet 0:400d8e75a8d0 988 #if _SL_INCLUDE_FUNC(sl_WlanRxFilterGet)
dflet 0:400d8e75a8d0 989 int16_t sl_WlanRxFilterGet(const SLrxFilterOperation_t RxFilterOperation,
dflet 0:400d8e75a8d0 990 uint8_t* pOutputBuffer,
dflet 0:400d8e75a8d0 991 uint16_t OutputbufferLength);
dflet 0:400d8e75a8d0 992 #endif
dflet 0:400d8e75a8d0 993
dflet 0:400d8e75a8d0 994 private:
dflet 0:400d8e75a8d0 995
dflet 0:400d8e75a8d0 996 cc3100_driver &_driver;
dflet 0:400d8e75a8d0 997
dflet 0:400d8e75a8d0 998
dflet 0:400d8e75a8d0 999 /*!
dflet 0:400d8e75a8d0 1000
dflet 0:400d8e75a8d0 1001 Close the Doxygen group.
dflet 0:400d8e75a8d0 1002 @}
dflet 0:400d8e75a8d0 1003
dflet 0:400d8e75a8d0 1004 */
dflet 0:400d8e75a8d0 1005 };//class
dflet 0:400d8e75a8d0 1006
dflet 0:400d8e75a8d0 1007 }//namespace mbed_cc3100
dflet 0:400d8e75a8d0 1008
dflet 0:400d8e75a8d0 1009 #endif /* RX_FILTERS_PREPROCESSOR_CLI_IF_H_ */
dflet 0:400d8e75a8d0 1010
dflet 0:400d8e75a8d0 1011
dflet 0:400d8e75a8d0 1012