File: subsref.m

package info (click to toggle)
octave-arduino 0.12.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,616 kB
  • sloc: cpp: 3,221; python: 438; makefile: 152; xml: 22; sh: 1
file content (64 lines) | stat: -rw-r--r-- 1,656 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
## Copyright (C) 2019 John Donoghue <john.donoghue@ieee.org>
## 
## This program is free software: you can redistribute it and/or modify it
## under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version.
## 
## This program is distributed in the hope that it will be useful, but
## WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.

## -*- texinfo -*- 
## @deftypefn {} {@var{val} = } subsref (@var{dev}, @var{sub})
## subref for ultrasonic
##
## @seealso{ultrasonic}
## @end deftypefn

function val = subsref (p, s)
  if isempty(s)
    error ("ultrasonic.subsref missing index");
  endif

  if s(1).type == "."
    fld = tolower(s(1).subs);
    switch (fld)
      case "pins"
	val = {};
	for i = 1:numel(p.pins)
	  val{end+1} = p.pins{i}.name; 
	endfor
      case "outputformat"
	val = p.outputformat;
      case "parent"
	val = p.parent;
      case "triggerpin"
	val = p.pins{1}.name;
      case "echopin"
	if numel(p.pins) > 1
	  val = p.pins{2}.name;
	else
	  val = [];
	endif
      otherwise
	error ("ultrasonic.subsref invalid property '%s'", fld);
    endswitch
  else
    error("unimplemented ultrasonic.subsref type");
  endif

  if (numel (s) > 1)
    val = subsref (val, s(2:end));
  endif
endfunction

%!test
%! ar = arduino();
%! x = ultrasonic (ar, "d2", "d3");
%! assert (isarduino(x.parent))
%! assert (x.triggerpin, "d2")
%! assert (x.echopin, "d3")
%! assert (numel(x.pins) == 2)
%! fail ("x.invalid")