No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 

148 líneas
3.0 KiB

  1. #include "OutputConnector.h"
  2. #include "GlobalDefine.h"
  3. COutputConnector::COutputConnector()
  4. {
  5. }
  6. int COutputConnector::SetOutputPins(QBitArray PinsStates)
  7. {
  8. if(mIOModuleRangeEnd >= IO_COUNT)
  9. {
  10. qDebug("Logic error in COutputConnector::SetOutputPins; mIOModuleRangeEnd greater than IO count");
  11. return RET_ERROR;
  12. }
  13. if(IsConnectorDefined() == false)
  14. {
  15. return RET_ERROR;
  16. }
  17. QBitArray OutputBuf(IO_COUNT);
  18. int PinIndex = 0;
  19. for(int IoPin = mIOModuleRangeBegin; IoPin <= mIOModuleRangeEnd; IoPin++)
  20. {
  21. OutputBuf[IoPin] = PinsStates[PinIndex++];
  22. }
  23. mIOInterfaceHandle->SetOutputs(OutputBuf);
  24. return RET_OK;
  25. }
  26. QBitArray COutputConnector::GetOutputPinsStates()
  27. {
  28. if(IsConnectorDefined() == false)
  29. {
  30. return QBitArray();
  31. }
  32. QBitArray IOStates = mIOInterfaceHandle->GetOutputStates();
  33. QBitArray PinsStates(mPinCount);
  34. if(mIOModuleRangeEnd > IOStates.size()) //try not to crash!
  35. {
  36. qDebug("Logic error in CInputConnector::GetInputPinsStates(); mIOModuleRangeEnd greater than IO count");
  37. return QBitArray();
  38. }
  39. int ConnectorPin = 0;
  40. for(int IoPin = mIOModuleRangeBegin; IoPin <= mIOModuleRangeEnd; IoPin++)
  41. {
  42. PinsStates[ConnectorPin++] = IOStates[IoPin];
  43. }
  44. return PinsStates;
  45. }
  46. int COutputConnector::SetConnectorType(CConnectorDefs::eConnectorType type)
  47. {
  48. CConnector::SetConnectorType(type);
  49. mOutputsPinsStateBuffer.clear();
  50. mOutputsPinsStateBuffer = QBitArray(mPinCount);
  51. ClearAllPins();
  52. return RET_OK;
  53. }
  54. //! !!!! WARNING, PinIndex IS ZERO-BASED INDEX !!! //
  55. int COutputConnector::SetSinglePin(unsigned int PinNumber)
  56. {
  57. if(IsConnectorDefined() == false)
  58. {
  59. return RET_ERROR;
  60. }
  61. int ZeroBasedPinIndex = PinNumber-1;
  62. if(ZeroBasedPinIndex >= (int)mPinCount || ZeroBasedPinIndex < 0)
  63. {
  64. return RET_ERROR;
  65. }
  66. QBitArray PinsStates(mPinCount);
  67. PinsStates.setBit(ZeroBasedPinIndex);
  68. SetOutputPins(PinsStates);
  69. return RET_OK;
  70. }
  71. //! !!!! WARNING, PinIndex IS ZERO-BASED INDEX !!! //
  72. int COutputConnector::GetSinglePinState(unsigned int PinNumber)
  73. {
  74. if(IsConnectorDefined() == false)
  75. {
  76. return RET_ERROR;
  77. }
  78. int ZeroBasedPinIndex = PinNumber-1;
  79. if(ZeroBasedPinIndex > (int)mPinCount || ZeroBasedPinIndex < 0)
  80. {
  81. return -1;
  82. }
  83. QBitArray CurStates = GetOutputPinsStates();
  84. return CurStates.at(ZeroBasedPinIndex);
  85. }
  86. int COutputConnector::TogglePin(unsigned int PinNumber)
  87. {
  88. if(IsConnectorDefined() == false)
  89. {
  90. return RET_ERROR;
  91. }
  92. int ZeroBasedPinIndex = PinNumber-1;
  93. if(ZeroBasedPinIndex > (int)mPinCount || ZeroBasedPinIndex < 0)
  94. {
  95. return RET_ERROR;
  96. }
  97. QBitArray CurStates = GetOutputPinsStates();
  98. CurStates.toggleBit(ZeroBasedPinIndex);
  99. SetOutputPins(CurStates);
  100. return RET_OK;
  101. }
  102. int COutputConnector::ClearAllPins()
  103. {
  104. if(IsConnectorDefined() == false)
  105. {
  106. return RET_ERROR;
  107. }
  108. mIOInterfaceHandle->ResetOutputs();
  109. return RET_OK;
  110. }