    /*====================================================================*
     *
     *   Copyright (c) 2013 Qualcomm Atheros, Inc.
     *
     *   All rights reserved.
     *
     *   Redistribution and use in source and binary forms, with or
     *   without modification, are permitted (subject to the limitations
     *   in the disclaimer below) provided that the following conditions
     *   are met:
     *
     *   * Redistributions of source code must retain the above copyright
     *     notice, this list of conditions and the following disclaimer.
     *
     *   * Redistributions in binary form must reproduce the above
     *     copyright notice, this list of conditions and the following
     *     disclaimer in the documentation and/or other materials
     *     provided with the distribution.
     *
     *   * Neither the name of Qualcomm Atheros nor the names of
     *     its contributors may be used to endorse or promote products
     *     derived from this software without specific prior written
     *     permission.
     *
     *   NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
     *   GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE
     *   COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
     *   IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     *   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     *   PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
     *   OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     *   NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     *   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     *   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     *   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
     *   OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     *   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     *
     *--------------------------------------------------------------------*/

    /*====================================================================*
     *
     *   char const * MMEName (uint16_t MMTYPE);
     *
     *   mme.h
     *
     *   Return HomePlug or Atheros Management Message name for a given
     *   MMTYPE; this function is not needed but it could be useful when
     *   developing and debugging applications;
     *
     *   If you add or remove items in this list then update constant
     *   MMTYPES to reflect the number of list members;
     *
     *
     *   Contributor(s):
     *	Charles Maier <cmaier@qca.qualcomm.com>
     *
     *--------------------------------------------------------------------*/

    #ifndef MMENAME_SOURCE
    #define MMENAME_SOURCE

    #include "../mme/mme.h"

    static const struct mme_name

    {
    	uint16_t type;
    	char const * name;
    }

    mme_names [] =

    {

    	{
    		CC_CCO_APPOINT,
    		"CC_CCO_APPOINT"
    	},
    	{
    		CC_BACKUP_APPOINT,
    		"CC_BACKUP_APPOINT"
    	},
    	{
    		CC_LINK_INFO,
    		"CC_LINK_INFO"
    	},
    	{
    		CC_HANDOVER,
    		"CC_HANDOVER"
    	},
    	{
    		CC_HANDOVER_INFO,
    		"CC_HANDOVER_INFO"
    	},
    	{
    		CC_DISCOVER_LIST,
    		"CC_DISCOVER_LIST"
    	},
    	{
    		CC_LINK_NEW,
    		"CC_LINK_NEW"
    	},
    	{
    		CC_LINK_MOD,
    		"CC_LINK_MOD"
    	},
    	{
    		CC_LINK_SQZ,
    		"CC_LINK_SQZ"
    	},
    	{
    		CC_LINK_REL,
    		"CC_LINK_REL"
    	},
    	{
    		CC_DETECT_REPORT,
    		"CC_DETECT_REPORT"
    	},
    	{
    		CC_WHO_RU,
    		"CC_WHO_RU"
    	},
    	{
    		CC_ASSOC,
    		"CC_ASSOC"
    	},
    	{
    		CC_LEAVE,
    		"CC_LEAVE"
    	},
    	{
    		CC_SET_TEI_MAP,
    		"CC_SET_TEI_MAP"
    	},
    	{
    		CC_RELAY,
    		"CC_RELAY"
    	},
    	{
    		CC_BEACON_RELIABILITY,
    		"CC_BEACON_RELIABILITY"
    	},
    	{
    		CC_ALLOC_MOVE,
    		"CC_ALLOC_MOVE"
    	},
    	{
    		CC_ACCESS_NEW,
    		"CC_ACCESS_NEW"
    	},
    	{
    		CC_ACCESS_REL,
    		"CC_ACCESS_REL"
    	},
    	{
    		CC_DCPPC,
    		"CC_DCPPC"
    	},
    	{
    		CC_HP1_DET,
    		"CC_HP1_DET"
    	},
    	{
    		CC_BLE_UPDATE,
    		"CC_BLE_UPDATE"
    	},
    	{
    		CP_PROXY_APPOINT,
    		"CP_PROXY_APPOINT"
    	},
    	{
    		PH_PROXY_APPOINT,
    		"PH_PROXY_APPOINT"
    	},
    	{
    		CP_PROXY_WAKE,
    		"CP_PROXY_WAKE"
    	},
    	{
    		NN_INL,
    		"NN_INL"
    	},
    	{
    		NN_NEW_NET,
    		"NN_NEW_NET"
    	},
    	{
    		NN_ADD_ALLOC,
    		"NN_ADD_ALLOC"
    	},
    	{
    		NN_REL_ALLOC,
    		"NN_REL_ALLOC"
    	},
    	{
    		NN_REL_NET,
    		"NN_REL_NET"
    	},
    	{
    		CM_ASSOCIATED_STA,
    		"CM_ASSOCIATED_STA"
    	},
    	{
    		CM_ENCRYPTED_PAYLOAD,
    		"CM_ENCRYPTED_PAYLOAD"
    	},
    	{
    		CM_SET_KEY,
    		"CM_SET_KEY"
    	},
    	{
    		CM_GET_KEY,
    		"CM_GET_KEY"
    	},
    	{
    		CM_SC_JOIN,
    		"CM_SC_JOIN"
    	},
    	{
    		CM_CHAN_EST,
    		"CM_CHAN_EST"
    	},
    	{
    		CM_TM_UPDATE,
    		"CM_TM_UPDATE"
    	},
    	{
    		CM_AMP_MAP,
    		"CM_AMP_MAP"
    	},
    	{
    		CM_BRG_INFO,
    		"CM_BRG_INFO"
    	},
    	{
    		CM_CONN_NEW,
    		"CM_CONN_NEW"
    	},
    	{
    		CM_CONN_REL,
    		"CM_CONN_REL"
    	},
    	{
    		CM_CONN_MOD,
    		"CM_CONN_MOD"
    	},
    	{
    		CM_CONN_INFO,
    		"CM_CONN_INFO"
    	},
    	{
    		CM_STA_CAP,
    		"CM_STA_CAP"
    	},
    	{
    		CM_NW_INFO,
    		"CM_NW_INFO"
    	},
    	{
    		CM_GET_BEACON,
    		"CM_GET_BEACON"
    	},
    	{
    		CM_HFID,
    		"CM_HFID"
    	},
    	{
    		CM_MME_ERROR,
    		"CM_MME_ERROR"
    	},
    	{
    		CM_NW_STATS,
    		"CM_NW_STATS"
    	},
    	{
    		CM_SLAC_PARAM,
    		"CM_SLAC_PARAM"
    	},
    	{
    		CM_START_ATTEN_CHAR,
    		"CM_START_ATTEN_CHAR"
    	},
    	{
    		CM_ATTEN_CHAR,
    		"CM_ATTEN_CHAR"
    	},
    	{
    		CM_PKCS_CERT,
    		"CM_PKCS_CERT"
    	},
    	{
    		CM_MNBC_SOUND,
    		"CM_MNBC_SOUND"
    	},
    	{
    		CM_VALIDATE,
    		"CM_VALIDATE"
    	},
    	{
    		CM_SLAC_MATCH,
    		"CM_SLAC_MATCH"
    	},
    	{
    		CM_SLAC_USER_DATA,
    		"CM_SLAC_USER_DATA"
    	},
    	{
    		CM_ATTEN_PROFILE,
    		"CM_ATTEN_PROFILE"
    	},
    	{
    		MS_PB_ENC,
    		"MS_PB_ENC"
    	},
    	{
    		VS_SW_VER,
    		"VS_SW_VER"
    	},
    	{
    		VS_WR_MEM,
    		"VS_WR_MEM"
    	},
    	{
    		VS_RD_MEM,
    		"VS_RD_MEM"
    	},
    	{
    		VS_ST_MAC,
    		"VS_ST_MAC"
    	},
    	{
    		VS_GET_NVM,
    		"VS_GET_NVM"
    	},
    	{
    		0xA028,
    		"RESERVED"
    	},
    	{
    		0xA02C,
    		"RESERVED"
    	},
    	{
    		VS_RS_DEV,
    		"VS_RS_DEV"
    	},
    	{
    		VS_WR_MOD,
    		"VS_WR_MOD"
    	},
    	{
    		VS_RD_MOD,
    		"VS_RD_MOD"
    	},
    	{
    		VS_MOD_NVM,
    		"VS_MOD_NVM"
    	},
    	{
    		VS_WD_RPT,
    		"VS_WD_RPT"
    	},
    	{
    		VS_LNK_STATS,
    		"VS_LNK_STATS"
    	},
    	{
    		VS_SNIFFER,
    		"VS_SNIFFER"
    	},
    	{
    		VS_NW_INFO,
    		"VS_NW_INFO"
    	},
    	{
    		0xA03C,
    		"RESERVED"
    	},
    	{
    		VS_CP_RPT,
    		"VS_CP_RPT"
    	},
    	{
    		VS_ARPC,
    		"VS_ARPC"
    	},
    	{
    		VS_SET_KEY,
    		"VS_SET_KEY"
    	},
    	{
    		VS_MFG_STRING,
    		"VS_MFG_STRING"
    	},
    	{
    		VS_RD_CBLOCK,
    		"VS_RD_CBLOCK"
    	},
    	{
    		VS_SET_SDRAM,
    		"VS_SET_SDRAM"
    	},
    	{
    		VS_HOST_ACTION,
    		"VS_HOST_ACTION"
    	},
    	{
    		VS_OP_ATTRIBUTES,
    		"VS_OP_ATTRIBUTES"
    	},
    	{
    		VS_ENET_SETTINGS,
    		"VS_ENET_SETTINGS"
    	},
    	{
    		VS_TONE_MAP_CHAR,
    		"VS_TONE_MAP_CHAR"
    	},
    	{
    		VS_NW_INFO_STATS,
    		"VS_NW_INFO_STATS"
    	},
    	{
    		VS_SLAVE_MEM,
    		"VS_SLAVE_MEM"
    	},
    	{
    		VS_FAC_DEFAULTS,
    		"VS_FAC_DEFAULTS"
    	},
    	{
    		VS_CLASSIFICATION,
    		"VS_CLASSIFICATION"
    	},
    	{
    		VS_RX_TONE_MAP_CHAR,
    		"VS_RX_TONE_MAP_CHAR"
    	},
    	{
    		VS_SET_LED_BEHAVIOR,
    		"VS_SET_LED_BEHAVIOR"
    	},
    	{
    		VS_WRITE_AND_EXECUTE_APPLET,
    		"VS_WRITE_AND_EXECUTE_APPLET"
    	},
    	{
    		VS_MDIO_COMMAND,
    		"VS_MDIO_COMMAND"
    	},
    	{
    		VS_SLAVE_REG,
    		"VS_SLAVE_REG"
    	},
    	{
    		VS_BANDWIDTH_LIMITING,
    		"VS_BANDWIDTH_LIMITING"
    	},
    	{
    		VS_SNID_OPERATION,
    		"VS_SNID_OPERATION"
    	},
    	{
    		VS_NN_MITIGATE,
    		"VS_NN_MITIGATE"
    	},
    	{
    		VS_MODULE_OPERATION,
    		"VS_MODULE_OPERATION"
    	},
    	{
    		VS_DIAG_NETWORK_PROBE,
    		"VS_DIAG_NETWORK_PROBE"
    	},
    	{
    		VS_PL_LINK_STATUS,
    		"VS_PL_LINK_STATUS"
    	},
    	{
    		VS_GPIO_STATE_CHANGE,
    		"VS_GPIO_STATE_CHANGE"
    	},
    	{
    		VS_CONN_ADD,
    		"VS_CONN_ADD"
    	},
    	{
    		VS_CONN_MOD,
    		"VS_CONN_MOD"
    	},
    	{
    		VS_CONN_REL,
    		"VS_CONN_REL"
    	},
    	{
    		VS_CONN_INFO,
    		"VS_CONN_INFO"
    	},
    	{
    		VS_MULTIPORT_LNK_STA,
    		"VS_MULTIPORT_LNK_STA"
    	},
    	{
    		VS_EM_ID_TABLE,
    		"VS_EM_ID_TABLE"
    	},
    	{
    		VS_STANDBY,
    		"VS_STANDBY"
    	},
    	{
    		VS_SLEEPSCHEDULE,
    		"VS_SLEEPSCHEDULE"
    	},
    	{
    		VS_SLEEPSCHEDULE_NOTIFICATION,
    		"VS_SLEEPSCHEDULE_NOTIFICATION"
    	},
    	{
    		0xA0EC,
    		"RESERVED"
    	},
    	{
    		VS_MICROCONTROLLER_DIAG,
    		"VS_MICROCONTROLLER_DIAG"
    	},
    	{
    		VS_GET_PROPERTY,
    		"VS_GET_PROPERTY"
    	},
    	{
    		0xA0FC,
    		"RESERVED"
    	},
    	{
    		VS_SET_PROPERTY,
    		"VS_SET_PROPERTY"
    	},
    	{
    		VS_PHYSWITCH_MDIO,
    		"VS_PHYSWITCH_MDIO"
    	},
    	{
    		VS_SELFTEST_ONETIME_CONFIG,
    		"VS_SELFTEST_ONETIME_CONFIG"
    	},
    	{
    		VS_SELFTEST_RESULTS,
    		"VS_SELFTEST_RESULTS"
    	},
    	{
    		VS_MDU_TRAFFIC_STATS,
    		"VS_MDU_TRAFFIC_STATS"
    	},
    	{
    		VS_FORWARD_CONFIG,
    		"VS_FORWARD_CONFIG"
    	},
    	{
    		0xA11C,
    		"RESERVED"
    	},
    	{
    		VS_HYBRID_INFO,
    		"VS_HYBRID_INFO"
    	}

    };

    char const * MMEName (uint16_t MMTYPE)

    {
    	size_t lower = 0;
    	size_t upper = SIZEOF (mme_names);
    	MMTYPE &= MMTYPE_MASK;
    	while (lower < upper)
    	{
    		size_t index = (lower + upper) >> 1;
    		signed order = MMTYPE - mme_names [index].type;
    		if (order < 0)
    		{
    			upper = index - 0;
    			continue;
    		}
    		if (order > 0)
    		{
    			lower = index + 1;
    			continue;
    		}
    		return (mme_names [index].name);
    	}
    	return ("UNKNOWN_MESSAGE_TYPE");
    }

    /*====================================================================*
     *   print a multi-column list of MME codes and names on stdout;
     *--------------------------------------------------------------------*/

    #if 0
    #include <stdio.h>

    #define COLS 4
    #define WIDTH 20

    int main (int argc, char const * argv [])

    {
    	unsigned cols = COLS;
    	unsigned rows = ((SIZEOF (mme_names) + (COLS - 1)) / cols);
    	unsigned row = 0;
    	unsigned mme = 0;
    	for (row = 0; row < rows; row++)
    	{
    		for (mme = row; mme < SIZEOF (mme_names); mme += rows)
    		{
    			printf ("%04X %-*.*s ", mme_names [mme].type, WIDTH, WIDTH, mme_names [mme].name);
    		}
    		printf ("\n");
    	}
    	return (0);
    }

    #endif

    /*====================================================================*
     *   print a multi-column list of MME codes and names on stdout;
     *--------------------------------------------------------------------*/

    #if 0
    #include <stdio.h>

    int main (int argc, char const * argv [])

    {
    	unsigned mme = 0;
    	for (mme = 0; mme < SIZEOF (mme_names); mme++)
    	{
    		printf ("{ %s, \"%s\" },",  mme_names [mme].name, mme_names [mme].name);
    //		printf ("0x%04X;%s;yes;yes;yes\n", mme_names [mme].type, mme_names [mme].name);
    	}
    	return (0);
    }

    #endif

    /*====================================================================*
     *
     *--------------------------------------------------------------------*/

    #endif

[PREV] [HOME] [NEXT]