File: LibraryBase.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 (136 lines) | stat: -rw-r--r-- 4,201 bytes parent folder | download
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
## Copyright (C) 2018-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.
## 
## You should have received a copy of the GNU General Public License
## along with this program.  If not, see
## <https://www.gnu.org/licenses/>.


classdef LibraryBase < handle
  ## -*- texinfo -*- 
  ## @deftypefn {} {} arduinoio.LibraryBase
  ## Base class used for arduino library plugins
  ##
  ## @seealso{arduino, listArduinoLibraries, addon}
  ## @end deftypefn
  ##
  ## @subheading Properties
  ## Base properties are expected to be inherited and overwritten in 
  ## inherited classes and are constant in order to query through the 
  ## metaobject mechanism.
  ##
  ## @var{LibraryName} - name of the addon library
  ##
  ## @var{DependentLibraries} - array of dependent library names that
  ##  must be included when installing this plugin.
  ##
  ## @var{CppHeaderFile} - name (if any) of header file that will be
  ## included into the arduino project when adding this library.
  ##
  ## @var{CppSourceFile} - name (if any) of source file that will be
  ## included into the arduino project when adding this library.
  ##
  ## @var{CppClassName} - name of the cpp class for the addon library.
  ## project when adding this library.
  ##
  ## @var{Pins} - pins allocated to the addon
  ##
  ## @var{Parent} - parent arduino object.
  ##
  ## @subheading Methods
  ## @deftypefn {} {@var{lb} =} LibraryBase ()
  ## Constructor of base class
  ##
  ## The constructor is usually not called but called indirectly
  ## from the addon function.
  ##
  ## @subsubheading Outputs
  ## The return value @var{lb} is an object of the arduinio.LibraryBase class.
  ##
  ## @seealso{arduino, listArduinoLibraries, addon}
  ## @end deftypefn
  ##
  ## @deftypefn {} {} disp ()
  ## Display the addon in a verbose way.
  ## @end deftypefn

  # properties that may be overridden in 
  # subclasses
  properties (Access = protected)
    LibraryName = "<none set>";
    DependentLibraries = {};
    ArduinoLibraryHeaderFiles = {};
    CppHeaderFile = "";
    CppSourceFile = "";
    CppClassName = "";
  endproperties
  
  properties (GetAccess = public, SetAccess = protected)  
    Parent = {};
    Pins = [];
  endproperties
  
  methods (Static)
    function info = AddonInfo(fullclassname)
      info = {};
      info.libraryname = "";
      info.dependentlibraries = "";
      info.cppheaderfile = "";
      info.cppsourcefile = "";
      info.cppclassname = "";
      info.arduinolibraryheaderfiles = "";
 
      data = meta.class.fromName(fullclassname);

      for ic = 1:numel(data.Properties)
        p = data.Properties{ic};
        if p.Constant
          pname = lower(p.Name);
          pvalue = p.DefaultValue;
          if isfield(info, pname)
            info.(pname) = pvalue;
          endif
        endif
     endfor

     info.classname = data.Name;

    endfunction
  endmethods

  methods (Access=public)
    # display the base class  properties
    function disp(this)
      printf("    %s with properties\n", class(this));
      if numel(this.Pins) == 0
        printf("        Pins = {}\n");
      else
        printf("        Pins = {\n");
        for i=1:numel(this.Pins)
          if isnumeric(this.Pins{i})
            printf("            %d\n", this.Pins{i});
          else
            printf("            %s\n", this.Pins{i});
          endif
        endfor
        printf("        }\n");
      endif
    endfunction

    # overrides of arduino that matlab documentation indirectly
    # seems to indicate in the examples
    function [dataout, datasize] = sendCommand(this, varargin)
      [dataout, datasize] = sendCommand(this.Parent, varargin{:}) 
    endfunction

  endmethods
endclassdef