cipconnectionobject.c 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /*******************************************************************************
  2. * Copyright (c) 2017, Rockwell Automation, Inc.
  3. * All rights reserved.
  4. *
  5. ******************************************************************************/
  6. #include "cipconnectionobject.h"
  7. #define CIP_CONNECTION_OBJECT_STATE_NON_EXISTENT 0U
  8. #define CIP_CONNECTION_OBJECT_STATE_CONFIGURING 1U
  9. #define CIP_CONNECTION_OBJECT_STATE_WAITING_FOR_CONNECTION_ID 2U
  10. #define CIP_CONNECTION_OBJECT_STATE_ESTABLISHED 3U
  11. #define CIP_CONNECTION_OBJECT_STATE_TIMEOUT 4U
  12. #define CIP_CONNECTION_OBJECT_STATE_DEFERRED_DELETE 5U
  13. #define CIP_CONNECTION_OBJECT_STATE_CLOSING 6U
  14. #define CIP_CONNECTION_OBJECT_INSTANCE_TYPE_EXPLICIT_MESSAGING 0
  15. #define CIP_CONNECTION_OBJECT_INSTANCE_TYPE_IO 1
  16. #define CIP_CONNECTION_OBJECT_INSTANCE_TYPE_CIP_BRIDGED 2
  17. ConnectionObjectState GetConnectionObjectState(
  18. const CipConnectionObject *const connection_object) {
  19. switch(connection_object->state) {
  20. case CIP_CONNECTION_OBJECT_STATE_NON_EXISTENT: return
  21. kConnectionObjectStateNonExistent; break;
  22. case CIP_CONNECTION_OBJECT_STATE_CONFIGURING: return
  23. kConnectionObjectStateConfiguring; break;
  24. case CIP_CONNECTION_OBJECT_STATE_WAITING_FOR_CONNECTION_ID: return
  25. kConnectionObjectStateWaitingForConnectionID; break;
  26. case CIP_CONNECTION_OBJECT_STATE_ESTABLISHED: return
  27. kConnectionObjectStateEstablished; break;
  28. case CIP_CONNECTION_OBJECT_STATE_TIMEOUT: return
  29. kConnectionObjectStateTimedOut; break;
  30. case CIP_CONNECTION_OBJECT_STATE_DEFERRED_DELETE: return
  31. kConnectionObjectStateDeferredDelete; break;
  32. case CIP_CONNECTION_OBJECT_STATE_CLOSING: return
  33. kConnectionObjectStateClosing; break;
  34. default: return kConnectionObjectStateInvalid;
  35. }
  36. }
  37. ConnectionObjectInstanceType GetConnectionObjectInstanceType(
  38. const CipConnectionObject *const connection_object) {
  39. switch(connection_object->instance_type) {
  40. case CIP_CONNECTION_OBJECT_INSTANCE_TYPE_EXPLICIT_MESSAGING: return kConnectionObjectInstanceTypeExplicitMessaging; break;
  41. case CIP_CONNECTION_OBJECT_INSTANCE_TYPE_IO: return kConnectionObjectInstanceTypeIO; break;
  42. case CIP_CONNECTION_OBJECT_INSTANCE_TYPE_CIP_BRIDGED: return kConnectionObjectInstanceTypeCipBridged; break;
  43. default: return kConnectionObjectInstanceTypeInvalid;
  44. }
  45. }
  46. ConnectionObjectTransportClassTriggerDirection
  47. GetConnectionObjectTransportClassTriggerDirection(
  48. const CipConnectionObject *const connection_object) {
  49. const CipByte TransportClassTriggerDirectionMask = 0x80;
  50. return (connection_object->transport_class_trigger &
  51. TransportClassTriggerDirectionMask) ==
  52. TransportClassTriggerDirectionMask ?
  53. kConnectionObjectTransportClassTriggerDirectionServer
  54. : kConnectionObjectTransportClassTriggerDirectionClient;
  55. }