plcnets.cpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. /*====================================================================*
  2. Copyright (c) 2020 Qualcomm Technologies, Inc.
  3. All Rights Reserved.
  4. Confidential and Proprietary - Qualcomm Technologies, Inc.
  5. ******************************************************************
  6. 2013 Qualcomm Atheros, Inc.
  7. *====================================================================*/
  8. /*====================================================================*
  9. *
  10. * plcnets.cpp - enumerate local powerline networks;
  11. *
  12. * this program uses the ointerfaces and ointerface class to find
  13. * host Ethernet interfaces then uses the CPLNetworks, CPLNetwork
  14. * and CPLStation classed to detect PLC networks on each interface
  15. * display information about each network station;
  16. *
  17. *--------------------------------------------------------------------*/
  18. /*====================================================================*
  19. * system header files;
  20. *--------------------------------------------------------------------*/
  21. #include <cstdlib>
  22. #include <iostream>
  23. /*====================================================================*
  24. * custom header files;
  25. *--------------------------------------------------------------------*/
  26. #include "../classes/ogetoptv.hpp"
  27. #include "../classes/oerror.hpp"
  28. #include "../classes/ointerfaces.hpp"
  29. #include "../classes/CPLNetworks.hpp"
  30. /*====================================================================*
  31. * custom source files;
  32. *--------------------------------------------------------------------*/
  33. #ifndef MAKEFILE
  34. #include "../classes/ogetoptv.cpp"
  35. #include "../classes/oputoptv.cpp"
  36. #include "../classes/oversion.cpp"
  37. #include "../classes/oerror.cpp"
  38. #include "../classes/oflagword.cpp"
  39. #include "../classes/omemory.cpp"
  40. #endif
  41. #ifndef MAKEFILE
  42. #include "../classes/ointerface.cpp"
  43. #include "../classes/ointerfaces.cpp"
  44. #include "../classes/oethernet.cpp"
  45. #include "../classes/ointellon.cpp"
  46. #include "../classes/ohomeplug.cpp"
  47. #include "../classes/CPLChannel.cpp"
  48. #include "../classes/CPLNetworks.cpp"
  49. #include "../classes/CPLNetwork.cpp"
  50. #include "../classes/CPLStation.cpp"
  51. #endif
  52. /*====================================================================*
  53. * program constants;
  54. *--------------------------------------------------------------------*/
  55. #define oPLCNETS_B_VERBOSE (1 << 0)
  56. #define oPLCNETS_B_SILENCE (1 << 1)
  57. /*====================================================================*
  58. * main program;
  59. *--------------------------------------------------------------------*/
  60. int main (int argc, const char *argv [])
  61. {
  62. static const char * optv [] =
  63. {
  64. "qt:v",
  65. oPUTOPTV_S_FUNNEL,
  66. "Atheros Powerline Network Enumerator",
  67. "q\tquiet mode",
  68. "t n\tread timeout is (n) milliseconds [" LITERAL (CPLCHANNEL_TIMEOUT) "]",
  69. "v\tverbose mode",
  70. (const char *) (0)
  71. };
  72. ogetoptv command;
  73. ointerfaces interfaces;
  74. oflagword flagword;
  75. signed c;
  76. unsigned timeout = CPLCHANNEL_TIMEOUT;
  77. command.opterr (1);
  78. command.optmin (0);
  79. while ((c = command.getoptv (argc, argv, optv)) != -1)
  80. {
  81. switch (c)
  82. {
  83. case 'q':
  84. flagword.setbits (oPLCNETS_B_SILENCE);
  85. break;
  86. case 't':
  87. timeout = atoi(command.optarg());
  88. break;
  89. case 'v':
  90. flagword.setbits (oPLCNETS_B_VERBOSE);
  91. break;
  92. default:
  93. break;
  94. }
  95. }
  96. if (command.argc ())
  97. {
  98. oerror::error (1, ENOTSUP, "Too many arguments");
  99. }
  100. while (!interfaces.End ())
  101. {
  102. if (!interfaces.Interface ().Disabled ())
  103. {
  104. std::cout << "Search " << interfaces.Interface ().Name () << " for powerline networks ..." << std::endl;
  105. CPLNetworks * networks = new CPLNetworks (interfaces.Interface ().Name (), timeout);
  106. while (!networks->End ())
  107. {
  108. if (flagword.allclear (oPLCNETS_B_SILENCE))
  109. {
  110. networks->Network ().Station ().Preface ();
  111. }
  112. networks->Network ().Enumerate ();
  113. networks->SelectNext ();
  114. }
  115. delete networks;
  116. }
  117. interfaces.SelectNext ();
  118. }
  119. return (0);
  120. }