Class: SDN::Message::Move

Inherits:
Message
  • Object
show all
Defined in:
lib/sdn/message/control.rb

Overview

Command that moves a motor in momentary mode.

Constant Summary collapse

MSG =

Protocol message number

0x01
PARAMS_LENGTH =

Number of protocol parameter bytes expected

3
DIRECTION =

Mapping from symbolic directions to SDN parameter values.

{ down: 0x00, up: 0x01, cancel: 0x02 }.freeze
SPEED =

Mapping from symbolic speed modes to SDN parameter values.

{ up: 0x00, down: 0x01, slow: 0x02 }.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(dest = nil, direction = :cancel, duration: nil, speed: :up, **kwargs) ⇒ Move

Creates a momentary movement command.

Parameters:

  • dest ((Integer, Integer, Integer), nil) (defaults to: nil)

    destination address

  • direction (:down, :up, :cancel) (defaults to: :cancel)

    movement direction

  • duration (Integer, nil) (defaults to: nil)

    duration in protocol units

  • speed (:up, :down, :slow) (defaults to: :up)

    speed selector

  • kwargs (Hash)

    additional message options



114
115
116
117
118
119
120
# File 'lib/sdn/message/control.rb', line 114

def initialize(dest = nil, direction = :cancel, duration: nil, speed: :up, **kwargs)
  kwargs[:dest] ||= dest
  super(**kwargs)
  self.direction = direction
  self.duration = duration
  self.speed = speed
end

Instance Attribute Details

#direction:down, ...

Returns:

  • (:down, :up, :cancel)


91
92
93
# File 'lib/sdn/message/control.rb', line 91

def direction
  @direction
end

#durationInteger?

Requested movement duration in protocol units.

Returns:

  • (Integer, nil)


98
99
100
# File 'lib/sdn/message/control.rb', line 98

def duration
  @duration
end

#speed:up, ...

Requested movement speed mode.

Returns:

  • (:up, :down, :slow)


105
106
107
# File 'lib/sdn/message/control.rb', line 105

def speed
  @speed
end

Instance Method Details

#params<Integer>

Returns the protocol-specific payload bytes for this message.

Returns:

  • (<Integer>)


157
158
159
160
161
# File 'lib/sdn/message/control.rb', line 157

def params
  transform_param(DIRECTION[direction]) +
    transform_param(duration || 0) +
    transform_param(SPEED[speed])
end

#parse(params) ⇒ void

This method returns an undefined value.

Parses protocol-specific parameter bytes into this message instance.

Parameters:

  • params (<Integer>)

    raw parameter bytes

Raises:



123
124
125
126
127
128
129
130
# File 'lib/sdn/message/control.rb', line 123

def parse(params)
  super
  self.direction = DIRECTION.invert[to_number(params[0])]
  duration = to_number(params[1])
  duration = nil if duration.zero?
  self.duration = duration
  self.speed = SPEED.invert[to_number(params[3])]
end