/*====================================================================* * * 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 * *--------------------------------------------------------------------*/ #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 #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 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