origen_doc_helpers 0.6.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ddb0151af6cf74f9080784ce49f885fd55952d81
4
- data.tar.gz: d18ecaa6b5e985b720082027f1377d442f3f26b0
3
+ metadata.gz: f197ebf8b884da0d6aa316309bf03b18bcf2e5bd
4
+ data.tar.gz: 91ed5f470f146302befb1aeacb25b759dff6194e
5
5
  SHA512:
6
- metadata.gz: 6339ee1a74d32e6073ad1e7a5f4483f9323ee08f6d73a348782902b104471a811ada5a40b0657e585bd671214729ba355410a9d66fa1ff83ce2b5426a6861bb9
7
- data.tar.gz: 027348178efe90fac8e8f9ab8a623724c6beb119579f3ee438b71c8fcb9fed80c7f9158ab93e8bed5a62b0008cdc9d67fe816e5b3ed19070b43e1ad4f8283b21
6
+ metadata.gz: 58141e8f821a5b924c52cc8eae91899afb1c12a837ed9238fe6f7104bdfdad950bfa8f4d5281015c39387dd6531b907f73b7c45d3af1b059960830e0cacca81e
7
+ data.tar.gz: 3794c4cba5c64a35e63e33d175c741d9b1c827c5f170eb55ef814436261f31df05da5adeb34c41c9dc5fe2f7d070abdd033bdf884f352697a732bc84504a62f2
data/config/version.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module OrigenDocHelpers
2
2
  MAJOR = 0
3
3
  MINOR = 6
4
- BUGFIX = 0
4
+ BUGFIX = 1
5
5
  DEV = nil
6
6
 
7
7
  VERSION = [MAJOR, MINOR, BUGFIX].join(".") + (DEV ? ".pre#{DEV}" : '')
@@ -17,7 +17,19 @@
17
17
  <h4>0x<%= reg.address.to_s(16).upcase %> - <%= reg_path %></h4>
18
18
  % end
19
19
  </a>
20
+ % if options[:current_value]
21
+ % if reg.size <= 8
22
+ <h4><font style="background-color: #66FF66">Current Value: <%= sprintf("0x%02X",reg.value) %></font></h4>
23
+ % elsif reg.size <= 16
24
+ <h4><font style="background-color: #66FF66">Current Value: <%= sprintf("0x%04X",reg.value) %></font></h4>
25
+ % elsif reg.size <= 24
26
+ <h4><font style="background-color: #66FF66">Current Value: <%= sprintf("0x%06X",reg.value) %></font></h4>
27
+ % elsif reg.size <= 32
28
+ <h4><font style="background-color: #66FF66">Current Value: <%= sprintf("0x%08X",reg.value) %></font></h4>
29
+ % end
30
+ % end
20
31
 
32
+ % # binding.pry
21
33
  % if options[:descriptions]
22
34
  <div markdown="1" style="margin: 0 0 20px 0">
23
35
 
@@ -177,49 +189,90 @@
177
189
  % end
178
190
  </tr>
179
191
 
192
+ % if options[:current_value]
193
+ <tr class="current_value">
194
+ <td class="heading">Current Value</td>
195
+ % alignment_done = false
196
+ % reg.named_bits :include_spacers => true do |name, bit|
197
+ % if _bit_in_range?(bit, max_bit, min_bit)
198
+ % if max_bit > (reg.size - 1) && !alignment_done
199
+ % (max_bit - (reg.size - 1)).times do
200
+ <td class="spacer"></td>
201
+ % end
202
+ % alignment_done = true
203
+ % end
204
+ % if bit.size > 1
205
+ % if name
206
+ % if bit.nvm_dep != 0 || bit.data == :memory
207
+ <td colspan="<%= _num_bits_in_range(bit, max_bit, min_bit) %>">M</td>
208
+ % elsif bit.data == :undefined
209
+ <td colspan="<%= _num_bits_in_range(bit, max_bit, min_bit) %>">X</td>
210
+ % else
211
+ <td colspan="<%= _num_bits_in_range(bit, max_bit, min_bit) %>"><%= bit.data[_max_bit_in_range(bit, max_bit, min_bit).._min_bit_in_range(bit, max_bit, min_bit)].to_s(16).upcase %></td>
212
+ % end
213
+ % else
214
+ % bit.shift_out_left do |bit|
215
+ % if _index_in_range?(bit.position, max_bit, min_bit)
216
+ <td></td>
217
+ % end
218
+ % end
219
+ % end
220
+ % else
221
+ % if bit.nvm_dep != 0 || bit.reset_val == :memory
222
+ <td>M</td>
223
+ % elsif bit.data == :undefined
224
+ <td>X</td>
225
+ % else
226
+ <td><%= bit.data.to_s(16).upcase %></td>
227
+ % end
228
+ % end
229
+ % end
230
+ % end
231
+ </tr>
232
+ % else
180
233
  %#############################################
181
234
  %# Reset Row
182
235
  %#############################################
183
236
  <tr class="reset">
184
237
  <td class="heading">Reset</td>
185
- % alignment_done = false
186
- % reg.named_bits :include_spacers => true do |name, bit|
187
- % if _bit_in_range?(bit, max_bit, min_bit)
188
- % if max_bit > (reg.size - 1) && !alignment_done
189
- % (max_bit - (reg.size - 1)).times do
238
+ % alignment_done = false
239
+ % reg.named_bits :include_spacers => true do |name, bit|
240
+ % if _bit_in_range?(bit, max_bit, min_bit)
241
+ % if max_bit > (reg.size - 1) && !alignment_done
242
+ % (max_bit - (reg.size - 1)).times do
190
243
  <td class="spacer"></td>
244
+ % end
245
+ % alignment_done = true
191
246
  % end
192
- % alignment_done = true
193
- % end
194
- % if bit.size > 1
195
- % if name
196
- % if bit.nvm_dep != 0 || bit.reset_val == :memory
197
- <td colspan="<%= _num_bits_in_range(bit, max_bit, min_bit) %>">M</td>
198
- % elsif bit.reset_val == :undefined
199
- <td colspan="<%= _num_bits_in_range(bit, max_bit, min_bit) %>">X</td>
247
+ % if bit.size > 1
248
+ % if name
249
+ % if bit.nvm_dep != 0 || bit.reset_val == :memory
250
+ <td colspan="<%= _num_bits_in_range(bit, max_bit, min_bit) %>">M</td>
251
+ % elsif bit.reset_val == :undefined
252
+ <td colspan="<%= _num_bits_in_range(bit, max_bit, min_bit) %>">X</td>
253
+ % else
254
+ <td colspan="<%= _num_bits_in_range(bit, max_bit, min_bit) %>"><%= bit.reset_val[_max_bit_in_range(bit, max_bit, min_bit).._min_bit_in_range(bit, max_bit, min_bit)].to_s(16).upcase %></td>
255
+ % end
200
256
  % else
201
- <td colspan="<%= _num_bits_in_range(bit, max_bit, min_bit) %>"><%= bit.reset_val[_max_bit_in_range(bit, max_bit, min_bit).._min_bit_in_range(bit, max_bit, min_bit)].to_s(16).upcase %></td>
202
- % end
203
- % else
204
- % bit.shift_out_left do |bit|
205
- % if _index_in_range?(bit.position, max_bit, min_bit)
257
+ % bit.shift_out_left do |bit|
258
+ % if _index_in_range?(bit.position, max_bit, min_bit)
206
259
  <td></td>
260
+ % end
207
261
  % end
208
262
  % end
209
- % end
210
- % else
211
- % if bit.nvm_dep != 0 || bit.reset_val == :memory
263
+ % else
264
+ % if bit.nvm_dep != 0 || bit.reset_val == :memory
212
265
  <td>M</td>
213
- % elsif bit.reset_val == :undefined
266
+ % elsif bit.reset_val == :undefined
214
267
  <td>X</td>
215
- % else
268
+ % else
216
269
  <td><%= bit.reset_val.to_s(16).upcase %></td>
270
+ % end
217
271
  % end
218
- % end
219
- % end
272
+ % end
220
273
  % end
221
274
  </tr>
222
-
275
+ % end
223
276
  </tbody>
224
277
  </table>
225
278
 
@@ -254,9 +307,27 @@
254
307
  </p>
255
308
  </td>
256
309
  <td markdown="1">
257
-
310
+ % bit_val_str = ''
311
+ % start_bit = bits.position
312
+ % end_bit = bits.position + bits.size - 1
313
+ % (start_bit..end_bit).each do |b|
314
+ % bit_val_str << reg.bits[b].data.to_s
315
+ % end
258
316
  % bits.description.each do |line|
317
+ % if options[:current_value]
318
+ % if line =~ /^\d{#{bit_val_str.length}}/
319
+ % if line =~ /^#{bit_val_str}/
320
+ <span style="background-color: #66FF66"> <%= line.gsub("\\'", "'") %>
321
+ </span><br/>
322
+ % else
323
+ <%= line.gsub("\\'", "'") %><br/>
324
+ % end
325
+ % else
326
+ <%= line.gsub("\\'", "'") %>
327
+ % end
328
+ % else
259
329
  <%= line.gsub("\\'", "'") %>
330
+ % end
260
331
  % end
261
332
 
262
333
  </td>
@@ -86,7 +86,22 @@ bit descriptions:
86
86
  <%= "%" %> end
87
87
  ~~~
88
88
 
89
- <%= render "templates/shared/register", :reg => $dut.reg(:mclkdiv), :descriptions => true %>
89
+ ~~~eruby
90
+ ## Register Map with Current Value
91
+
92
+ <%= "%" %> $dut.regs.each do |name, reg|
93
+
94
+ <%= "<" + "%= render \"doc_helpers/register.html\", reg: reg, preserve_target: true, descriptions: true , current_value: true%" + ">" %>
95
+
96
+ <%= "%" %> end
97
+ ~~~
98
+
99
+ Please note that the highlighting only works when the bit values match
100
+ explicitly. It will not match partial descriptions, e.g. value is 000
101
+ and bitfield description is 00.
102
+
103
+
104
+ <%= render "templates/shared/register", :reg => $dut.reg(:mclkdiv), :descriptions => true, current_value: true %>
90
105
 
91
106
  ### Additional Test Cases
92
107
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: origen_doc_helpers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen McGinty
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-28 00:00:00.000000000 Z
11
+ date: 2018-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: origen
@@ -67,7 +67,6 @@ files:
67
67
  - templates/flow_page.md.erb
68
68
  - templates/model_index.md.erb
69
69
  - templates/model_page.md.erb
70
- - templates/model_page.md.erb~
71
70
  - templates/pdf/topic_wrapper.html
72
71
  - templates/shared/_register.html.erb
73
72
  - templates/shared/_searchable.html.erb
@@ -77,7 +76,6 @@ files:
77
76
  - templates/web/helpers/disqus.md.erb
78
77
  - templates/web/helpers/flow.md.erb
79
78
  - templates/web/helpers/model.md.erb
80
- - templates/web/helpers/model.md.erb~
81
79
  - templates/web/helpers/register.md.erb
82
80
  - templates/web/helpers/searchable/intro.md.erb
83
81
  - templates/web/helpers/searchable/page2.md.erb
@@ -1,129 +0,0 @@
1
- % opts = options
2
- % model = options[:model]
3
- % render options[:layout], options[:layout_options] do
4
-
5
- <script type="text/javascript">
6
- // Modified from: http://jsfiddle.net/jhfrench/mc4Qd/
7
- window.onload = function() {
8
- // Links to the top of the page
9
- $('.top-link').click(function() {
10
- jQuery('html,body').animate({scrollTop: 0}, 500);
11
- return false;
12
- });
13
- };
14
- </script>
15
-
16
- <style>
17
- tr.clickable td { padding: 0px !important; }
18
- tr.clickable a { display: block; height: 100%; width: 100%; padding: 8px; text-decoration: none; }
19
- </style>
20
-
21
- <div class="row" style="margin-top: 10px; margin-bottom: 15px;">
22
- <div class="col-md-9">
23
- <img src="http://origen-sdk.org/img/origen-device.png" style="float: left; height:50px; width: 50px; margin-top: 14px;">
24
- <h1 style="float: left; margin-left: 10px;"><%= opts[:heading] %></h1>
25
- </div>
26
- % if opts[:search_box]
27
- <div id="search" class="col-md-3" style="margin-top: 20px;">
28
- <form style="margin-bottom: 15px;">
29
- <div class="input-group">
30
- <input class="form-control" type="search" placeholder="Search within this model..."/>
31
- <span class="input-group-btn">
32
- <button type="submit" class="btn btn-search">GO!</button>
33
- </span>
34
- </div>
35
- </form>
36
- </div>
37
- % end
38
- </div>
39
-
40
- <div class="row">
41
- <div class="col-md-12">
42
- <ol class="breadcrumb">
43
- % size = opts[:breadcrumbs].size
44
- % opts[:breadcrumbs].each_with_index do |crumb, i|
45
- % if i == size - 1
46
- <li class="active"><%= crumb[0] %></li>
47
- % else
48
- <li><a href="<%= path crumb[1] %>"><%= crumb[0] %></a></li>
49
- % end
50
- % end
51
- </ol>
52
- </div>
53
- </div>
54
-
55
- <div class="row">
56
- <div class="col-md-12 search-results">
57
- </div>
58
- </div>
59
-
60
- <div class="row">
61
- <div class="col-md-6">
62
- <h3>Blocks</h3>
63
-
64
- <table class="table table-hover">
65
- <thead><tr>
66
- <th>Address</th>
67
- <th>Name</th>
68
- </tr></thead>
69
- <tbody>
70
- % model.sub_blocks.sort_by { |name, block| block.base_address }.each do |name, block|
71
- <tr class="clickable">
72
- <td><a href="<%= path "#{opts[:path]}/#{name}" %>"><%= block.base_address.to_hex %></a></td>
73
- <td><a href="<%= path "#{opts[:path]}/#{name}" %>"><%= name %></a></td>
74
- </tr>
75
- % end
76
- </tbody>
77
- </table>
78
- </div>
79
-
80
- <div class="col-md-6">
81
- <h3>Registers</h3>
82
-
83
- <table class="table table-hover">
84
- <thead><tr>
85
- <th>Address</th>
86
- <th>Name</th>
87
- </tr></thead>
88
- <tbody>
89
- % model.regs.sort_by { |name, reg| reg.offset }.each do |name, reg|
90
- <tr class="clickable">
91
- <td><a href="#<%= reg.name %>"><%= reg.address.to_hex %></a></td>
92
- <td><a href="#<%= reg.name %>"><%= name %></a></td>
93
- </tr>
94
- % end
95
- </tbody>
96
- </table>
97
- </div>
98
- </div>
99
-
100
-
101
- % if model.owns_registers?
102
-
103
- <hr>
104
- <div class="row">
105
- <div class="col-md-12">
106
- % if opts[:search_box]
107
- <article>
108
- % end
109
- <h3>Registers of <%= model.model.class%> <%= model.name ? "(#{model.name})" : model.try(:includes_origen_top_level?) ? "(dut)" : "" %></h3>
110
-
111
- % model.regs.sort_by { |name, reg| reg.offset }.each do |name, reg|
112
-
113
- <div>
114
- <span class="pull-right"><a class="top-link" href="#">back to top</a></span>
115
- </div>
116
-
117
- <%= render "doc_helpers/register.html", reg: reg, preserve_target: true, descriptions: true, origen_path: opts[:origen_path] %>
118
-
119
- % end
120
-
121
- </article>
122
- </div>
123
- </div>
124
-
125
- % end
126
-
127
- % end
128
- <script>window.origen_search_id = "<%= opts[:search_id] %>";</script>
129
- <script src="<%= path "search.js" %>"></script>
@@ -1,81 +0,0 @@
1
- % render "../layouts/helpers.html" do
2
-
3
- # Model Documentation
4
-
5
- This helper will build a collection of web pages that document a model's attributes,
6
- currently this includes its sub-blocks and registers.
7
-
8
- [Here is an example](http://origen-sdk.org/link_demo/models/linkdemo_toplevel/).
9
-
10
- Multiple models can be supplied and an [index page like this](http://origen-sdk.org/link_demo/models)
11
- is generated to help locate the documentation for a given model.
12
-
13
- The collection of pages associated with a particular model is also fully searchable via
14
- the provided search box.
15
-
16
- ## How To Use
17
-
18
- Call the helper from an <code>after_web_site_compile</code> callback handler in your
19
- application's <code>config/application.rb</code> like this:
20
-
21
- ~~~ruby
22
- def after_web_site_compile(options)
23
- # Build the model documentation
24
- OrigenDocHelpers.generate_model_docs layout: "#{Origen.root}/templates/web/layouts/_basic.html.erb", tab: :model do |d|
25
- d.page model: $dut
26
- end
27
- end
28
- ~~~
29
-
30
- To generate documentation for more than one model, call the page method multiple times like this:
31
-
32
- ~~~ruby
33
- def after_web_site_compile(options)
34
- # Build the model documentation
35
- OrigenDocHelpers.generate_model_docs layout: "#{Origen.root}/templates/web/layouts/_basic.html.erb", tab: :model do |d|
36
- d.page model: MyApp::ModelA.new
37
- d.page model: MyApp::ModelB.new
38
- d.page model: MyApp::ModelC.new
39
- end
40
- end
41
- ~~~
42
-
43
- If the different models are all top-level instances (i.e. they include <code>Origen::TopLevel</code> and are
44
- what is commonly referred to as <code>$dut</code>), then a target loop should be used like this:
45
-
46
- ~~~ruby
47
- def after_web_site_compile(options)
48
- # Build the model documentation
49
- OrigenDocHelpers.generate_model_docs layout: "#{Origen.root}/templates/web/layouts/_basic.html.erb", tab: :model do |d|
50
- Origen.target.loop targets: ["target_a", "target_b", "target_c"] do
51
- d.page model: $dut
52
- end
53
- end
54
- end
55
- ~~~
56
-
57
- ## Options
58
-
59
- <code>OrigenDocHelpers.generate_model_docs</code>
60
-
61
- * <code>:layout</code> - **Required**, supply a full path to your application's layout file
62
- * Any other options will be passed to your layout file unmodified, e.g. to set the tab in the generated
63
- pages in the above example
64
-
65
- <code>page</code>
66
-
67
- * <code>:model</code> - **Required**, supply an instance of the model
68
- * <code>:group</code> - Optional, a heading to group similar models under on the index page, e.g. "Production", "In Development"
69
-
70
- ## Website Integration
71
-
72
- The model index page will be generated at path <code>/models</code> within your application, and it is common
73
- to create a "Model(s)" tab in your website's navigation bar to link to this.
74
-
75
- If your application only has one model, then the navbar link should be setup to point directly to
76
- that model's page.
77
-
78
- The location of the pages for the individual models are based on the model name and will be unique to each application,
79
- you can find them initially via the index page.
80
-
81
- % end