503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
|
# File 'lib/openc3/interfaces/interface.rb', line 503
def protocol_cmd(cmd_name, *cmd_args, read_write: :READ_WRITE, index: -1)
read_write = read_write.to_s.upcase.intern
raise "Unknown protocol descriptor: #{read_write}. Must be :READ, :WRITE, or :READ_WRITE." unless [:READ, :WRITE, :READ_WRITE].include?(read_write)
handled = false
if index >= 0 or read_write == :READ_WRITE
protocols = []
read_protocols = @read_protocols
write_protocols = @write_protocols.reverse
read_index = 0
write_index = 0
@protocol_info.each do |protocol_class, protocol_args, protocol_read_write|
case protocol_read_write
when :READ
protocols << read_protocols[read_index]
read_index += 1
when :WRITE
protocols << write_protocols[write_index]
write_index += 1
when :READ_WRITE, :PARAMS
protocols << read_protocols[read_index]
read_index += 1
write_index += 1
end
end
protocols.each_with_index do |protocol, protocol_index|
result = protocol.protocol_cmd(cmd_name, *cmd_args) if index == protocol_index or index == -1
handled = true if result
end
elsif read_write == :READ
@read_protocols.each do |protocol|
result = protocol.protocol_cmd(cmd_name, *cmd_args)
handled = true if result
end
else
@write_protocols.each do |protocol|
result = protocol.protocol_cmd(cmd_name, *cmd_args)
handled = true if result
end
end
return handled
end
|