[1491313] | 1 | <!doctype html>
|
---|
| 2 | <html lang="en">
|
---|
| 3 | <head>
|
---|
| 4 | <meta charset="utf-8">
|
---|
| 5 | <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
|
---|
| 6 | <meta name="generator" content="pdoc 0.10.0" />
|
---|
| 7 | <title>ammosreader.AmmosIFReader API documentation</title>
|
---|
| 8 | <meta name="description" content="I provide a specialized Ammos Reader for IF data." />
|
---|
| 9 | <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
|
---|
| 10 | <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/typography.min.css" integrity="sha256-7l/o7C8jubJiy74VsKTidCy1yBkRtiUGbVkYBylBqUg=" crossorigin>
|
---|
| 11 | <link rel="stylesheet preload" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/github.min.css" crossorigin>
|
---|
| 12 | <style>:root{--highlight-color:#fe9}.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}#sidebar > *:last-child{margin-bottom:2cm}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}h1:target,h2:target,h3:target,h4:target,h5:target,h6:target{background:var(--highlight-color);padding:.2em 0}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{margin-top:.6em;font-weight:bold}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}dt:target .name{background:var(--highlight-color)}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary,.git-link-div{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase}.source summary > *{white-space:nowrap;cursor:pointer}.git-link{color:inherit;margin-left:1em}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}td{padding:0 .5em}.admonition{padding:.1em .5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
|
---|
| 13 | <style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%;height:100vh;overflow:auto;position:sticky;top:0}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
|
---|
| 14 | <style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
|
---|
| 15 | <script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/highlight.min.js" integrity="sha256-Uv3H6lx7dJmRfRvH8TH6kJD1TSK1aFcwgx+mdg3epi8=" crossorigin></script>
|
---|
| 16 | <script>window.addEventListener('DOMContentLoaded', () => hljs.initHighlighting())</script>
|
---|
| 17 | </head>
|
---|
| 18 | <body>
|
---|
| 19 | <main>
|
---|
| 20 | <article id="content">
|
---|
| 21 | <header>
|
---|
| 22 | <h1 class="title">Module <code>ammosreader.AmmosIFReader</code></h1>
|
---|
| 23 | </header>
|
---|
| 24 | <section id="section-intro">
|
---|
| 25 | <p>I provide a specialized Ammos Reader for IF data.</p>
|
---|
| 26 | <details class="source">
|
---|
| 27 | <summary>
|
---|
| 28 | <span>Expand source code</span>
|
---|
| 29 | </summary>
|
---|
| 30 | <pre><code class="python">"""I provide a specialized Ammos Reader for IF data."""
|
---|
| 31 | import logging
|
---|
| 32 |
|
---|
| 33 | from ammosreader.AbstractAmmosReader import AbstractAmmosReader
|
---|
| 34 | from ammosreader.AmmosGlobalFrameBody import AmmosGlobalFrameBody
|
---|
| 35 | from ammosreader.AmmosIFDataHeader import AmmosIFDataHeader
|
---|
| 36 | from ammosreader.AmmosExtendedIFDataHeader import AmmosExtendedIFDataHeader
|
---|
| 37 | from ammosreader.AmmosIFDataBody import AmmosIFDataBody
|
---|
| 38 | from ammosreader.AmmosIFDataBlock import AmmosIFDataBlock
|
---|
| 39 | from ammosreader.AmmosIFDataBlockHeader import AmmosIFDataBlockHeader
|
---|
| 40 |
|
---|
| 41 |
|
---|
| 42 | class AmmosIFReader(AbstractAmmosReader):
|
---|
| 43 | """I read the IF data embedded in an R&S AMMOS recording."""
|
---|
| 44 |
|
---|
| 45 | def __init__(self, file_name):
|
---|
| 46 | super().__init__(file_name)
|
---|
| 47 |
|
---|
| 48 | def read_next_global_frame_body_data_header(self):
|
---|
| 49 |
|
---|
| 50 | header_size = AmmosIFDataHeader.HEADER_SIZE
|
---|
| 51 |
|
---|
| 52 | bytes = self.ammos_file.read(header_size)
|
---|
| 53 |
|
---|
| 54 | logging.info("\nReading global frame body standard data header\n")
|
---|
| 55 | if ((not bytes) or (len(bytes) < header_size)):
|
---|
| 56 | logging.debug("Can not read all %s bytes of global frame body data header", header_size)
|
---|
| 57 | return None
|
---|
| 58 | return AmmosIFDataHeader.from_bytes(bytes)
|
---|
| 59 |
|
---|
| 60 | def read_next_global_frame_body_extended_data_header(self):
|
---|
| 61 | """
|
---|
| 62 | I return the next global frame body extended data header from current position in file.
|
---|
| 63 |
|
---|
| 64 | :return: the next Ammos Extended IF data header or None if incomplete
|
---|
| 65 | :rtype: AmmosExtendedIFDataHeader
|
---|
| 66 | """
|
---|
| 67 | header_size = AmmosExtendedIFDataHeader.HEADER_SIZE
|
---|
| 68 |
|
---|
| 69 | bytes = self.ammos_file.read(header_size)
|
---|
| 70 |
|
---|
| 71 | logging.info("\nReading global frame body extended data header\n")
|
---|
| 72 | if ((not bytes) or (len(bytes) < header_size)):
|
---|
| 73 | logging.debug("Can not read all %s bytes of global frame extended data header", header_size)
|
---|
| 74 | return None
|
---|
| 75 | return AmmosExtendedIFDataHeader.from_bytes(bytes)
|
---|
| 76 |
|
---|
| 77 | def read_next_if_data_body(self, number_of_data_blocks, data_length):
|
---|
| 78 | """
|
---|
| 79 | I return the next data body read from current position in file.
|
---|
| 80 |
|
---|
| 81 | :param number_of_data_blocks: the number of data blocks inside the body
|
---|
| 82 | :type number_of_data_blocks: int
|
---|
| 83 |
|
---|
| 84 | :param data_length: the length of the raw data inside a single block
|
---|
| 85 | :type data_length: int
|
---|
| 86 | """
|
---|
| 87 | header_size = AmmosIFDataBlockHeader.HEADER_SIZE
|
---|
| 88 |
|
---|
| 89 | data_body = AmmosIFDataBody()
|
---|
| 90 |
|
---|
| 91 | block_length = header_size + data_length
|
---|
| 92 |
|
---|
| 93 | total = number_of_data_blocks*block_length
|
---|
| 94 |
|
---|
| 95 | byte_string = self.ammos_file.read(block_length)
|
---|
| 96 |
|
---|
| 97 | if len(byte_string) != total:
|
---|
| 98 | logging.debug("Can not read all %s bytes of data body", total)
|
---|
| 99 | return None
|
---|
| 100 |
|
---|
| 101 | for i in range(0, number_of_data_blocks):
|
---|
| 102 | result = byte_string[i*block_length:(i*block_length+block_length)]
|
---|
| 103 | data_body.add_data_block(AmmosIFDataBlock(AmmosIFDataBlockHeader.from_bytes(result[0:header_size]),
|
---|
| 104 | result[header_size:]))
|
---|
| 105 |
|
---|
| 106 | return data_body
|
---|
| 107 |
|
---|
| 108 | def read_next_global_frame_body(self, data_header_length):
|
---|
| 109 | """
|
---|
| 110 | I return the next global frame body read from current position in file.
|
---|
| 111 |
|
---|
| 112 | :param data_header_length: the length of the data header
|
---|
| 113 | :type data_header_length: int
|
---|
| 114 | """
|
---|
| 115 | if_data_header = None
|
---|
| 116 |
|
---|
| 117 | if data_header_length == AmmosIFDataHeader.HEADER_SIZE:
|
---|
| 118 | if_data_header = self.read_next_global_frame_body_data_header()
|
---|
| 119 | if data_header_length == AmmosExtendedIFDataHeader.HEADER_SIZE:
|
---|
| 120 | if_data_header = self.read_next_global_frame_body_extended_data_header()
|
---|
| 121 |
|
---|
| 122 | if if_data_header is None:
|
---|
| 123 | logging.debug("Data header missing")
|
---|
| 124 | return None
|
---|
| 125 |
|
---|
| 126 | if_data_body = self.read_next_if_data_body(if_data_header.block_count, if_data_header.block_length)
|
---|
| 127 |
|
---|
| 128 | if if_data_body is None:
|
---|
| 129 | logging.debug("Data body missing")
|
---|
| 130 | return None
|
---|
| 131 |
|
---|
| 132 | return AmmosGlobalFrameBody(if_data_header, if_data_body)
|
---|
| 133 |
|
---|
| 134 | def data(self):
|
---|
| 135 | return b"".join([each.global_frame_body.data_body.data for each in self.container.global_frames])</code></pre>
|
---|
| 136 | </details>
|
---|
| 137 | </section>
|
---|
| 138 | <section>
|
---|
| 139 | </section>
|
---|
| 140 | <section>
|
---|
| 141 | </section>
|
---|
| 142 | <section>
|
---|
| 143 | </section>
|
---|
| 144 | <section>
|
---|
| 145 | <h2 class="section-title" id="header-classes">Classes</h2>
|
---|
| 146 | <dl>
|
---|
| 147 | <dt id="ammosreader.AmmosIFReader.AmmosIFReader"><code class="flex name class">
|
---|
| 148 | <span>class <span class="ident">AmmosIFReader</span></span>
|
---|
| 149 | <span>(</span><span>file_name)</span>
|
---|
| 150 | </code></dt>
|
---|
| 151 | <dd>
|
---|
| 152 | <div class="desc"><p>I read the IF data embedded in an R&S AMMOS recording.</p>
|
---|
| 153 | <p>I am the standard constructor for Ammos Readers.</p>
|
---|
| 154 | <p>Additional information about the file can be added as key/value pairs in tags</p>
|
---|
| 155 | <p>:param file_name: The file to read Ammos data from
|
---|
| 156 | :type file_name: str</p></div>
|
---|
| 157 | <details class="source">
|
---|
| 158 | <summary>
|
---|
| 159 | <span>Expand source code</span>
|
---|
| 160 | </summary>
|
---|
| 161 | <pre><code class="python">class AmmosIFReader(AbstractAmmosReader):
|
---|
| 162 | """I read the IF data embedded in an R&S AMMOS recording."""
|
---|
| 163 |
|
---|
| 164 | def __init__(self, file_name):
|
---|
| 165 | super().__init__(file_name)
|
---|
| 166 |
|
---|
| 167 | def read_next_global_frame_body_data_header(self):
|
---|
| 168 |
|
---|
| 169 | header_size = AmmosIFDataHeader.HEADER_SIZE
|
---|
| 170 |
|
---|
| 171 | bytes = self.ammos_file.read(header_size)
|
---|
| 172 |
|
---|
| 173 | logging.info("\nReading global frame body standard data header\n")
|
---|
| 174 | if ((not bytes) or (len(bytes) < header_size)):
|
---|
| 175 | logging.debug("Can not read all %s bytes of global frame body data header", header_size)
|
---|
| 176 | return None
|
---|
| 177 | return AmmosIFDataHeader.from_bytes(bytes)
|
---|
| 178 |
|
---|
| 179 | def read_next_global_frame_body_extended_data_header(self):
|
---|
| 180 | """
|
---|
| 181 | I return the next global frame body extended data header from current position in file.
|
---|
| 182 |
|
---|
| 183 | :return: the next Ammos Extended IF data header or None if incomplete
|
---|
| 184 | :rtype: AmmosExtendedIFDataHeader
|
---|
| 185 | """
|
---|
| 186 | header_size = AmmosExtendedIFDataHeader.HEADER_SIZE
|
---|
| 187 |
|
---|
| 188 | bytes = self.ammos_file.read(header_size)
|
---|
| 189 |
|
---|
| 190 | logging.info("\nReading global frame body extended data header\n")
|
---|
| 191 | if ((not bytes) or (len(bytes) < header_size)):
|
---|
| 192 | logging.debug("Can not read all %s bytes of global frame extended data header", header_size)
|
---|
| 193 | return None
|
---|
| 194 | return AmmosExtendedIFDataHeader.from_bytes(bytes)
|
---|
| 195 |
|
---|
| 196 | def read_next_if_data_body(self, number_of_data_blocks, data_length):
|
---|
| 197 | """
|
---|
| 198 | I return the next data body read from current position in file.
|
---|
| 199 |
|
---|
| 200 | :param number_of_data_blocks: the number of data blocks inside the body
|
---|
| 201 | :type number_of_data_blocks: int
|
---|
| 202 |
|
---|
| 203 | :param data_length: the length of the raw data inside a single block
|
---|
| 204 | :type data_length: int
|
---|
| 205 | """
|
---|
| 206 | header_size = AmmosIFDataBlockHeader.HEADER_SIZE
|
---|
| 207 |
|
---|
| 208 | data_body = AmmosIFDataBody()
|
---|
| 209 |
|
---|
| 210 | block_length = header_size + data_length
|
---|
| 211 |
|
---|
| 212 | total = number_of_data_blocks*block_length
|
---|
| 213 |
|
---|
| 214 | byte_string = self.ammos_file.read(block_length)
|
---|
| 215 |
|
---|
| 216 | if len(byte_string) != total:
|
---|
| 217 | logging.debug("Can not read all %s bytes of data body", total)
|
---|
| 218 | return None
|
---|
| 219 |
|
---|
| 220 | for i in range(0, number_of_data_blocks):
|
---|
| 221 | result = byte_string[i*block_length:(i*block_length+block_length)]
|
---|
| 222 | data_body.add_data_block(AmmosIFDataBlock(AmmosIFDataBlockHeader.from_bytes(result[0:header_size]),
|
---|
| 223 | result[header_size:]))
|
---|
| 224 |
|
---|
| 225 | return data_body
|
---|
| 226 |
|
---|
| 227 | def read_next_global_frame_body(self, data_header_length):
|
---|
| 228 | """
|
---|
| 229 | I return the next global frame body read from current position in file.
|
---|
| 230 |
|
---|
| 231 | :param data_header_length: the length of the data header
|
---|
| 232 | :type data_header_length: int
|
---|
| 233 | """
|
---|
| 234 | if_data_header = None
|
---|
| 235 |
|
---|
| 236 | if data_header_length == AmmosIFDataHeader.HEADER_SIZE:
|
---|
| 237 | if_data_header = self.read_next_global_frame_body_data_header()
|
---|
| 238 | if data_header_length == AmmosExtendedIFDataHeader.HEADER_SIZE:
|
---|
| 239 | if_data_header = self.read_next_global_frame_body_extended_data_header()
|
---|
| 240 |
|
---|
| 241 | if if_data_header is None:
|
---|
| 242 | logging.debug("Data header missing")
|
---|
| 243 | return None
|
---|
| 244 |
|
---|
| 245 | if_data_body = self.read_next_if_data_body(if_data_header.block_count, if_data_header.block_length)
|
---|
| 246 |
|
---|
| 247 | if if_data_body is None:
|
---|
| 248 | logging.debug("Data body missing")
|
---|
| 249 | return None
|
---|
| 250 |
|
---|
| 251 | return AmmosGlobalFrameBody(if_data_header, if_data_body)
|
---|
| 252 |
|
---|
| 253 | def data(self):
|
---|
| 254 | return b"".join([each.global_frame_body.data_body.data for each in self.container.global_frames])</code></pre>
|
---|
| 255 | </details>
|
---|
| 256 | <h3>Ancestors</h3>
|
---|
| 257 | <ul class="hlist">
|
---|
| 258 | <li><a title="ammosreader.AbstractAmmosReader.AbstractAmmosReader" href="AbstractAmmosReader.html#ammosreader.AbstractAmmosReader.AbstractAmmosReader">AbstractAmmosReader</a></li>
|
---|
| 259 | <li>abc.ABC</li>
|
---|
| 260 | </ul>
|
---|
| 261 | <h3>Methods</h3>
|
---|
| 262 | <dl>
|
---|
| 263 | <dt id="ammosreader.AmmosIFReader.AmmosIFReader.data"><code class="name flex">
|
---|
| 264 | <span>def <span class="ident">data</span></span>(<span>self)</span>
|
---|
| 265 | </code></dt>
|
---|
| 266 | <dd>
|
---|
| 267 | <div class="desc"></div>
|
---|
| 268 | <details class="source">
|
---|
| 269 | <summary>
|
---|
| 270 | <span>Expand source code</span>
|
---|
| 271 | </summary>
|
---|
| 272 | <pre><code class="python">def data(self):
|
---|
| 273 | return b"".join([each.global_frame_body.data_body.data for each in self.container.global_frames])</code></pre>
|
---|
| 274 | </details>
|
---|
| 275 | </dd>
|
---|
| 276 | <dt id="ammosreader.AmmosIFReader.AmmosIFReader.read_next_global_frame_body"><code class="name flex">
|
---|
| 277 | <span>def <span class="ident">read_next_global_frame_body</span></span>(<span>self, data_header_length)</span>
|
---|
| 278 | </code></dt>
|
---|
| 279 | <dd>
|
---|
| 280 | <div class="desc"><p>I return the next global frame body read from current position in file.</p>
|
---|
| 281 | <p>:param data_header_length: the length of the data header
|
---|
| 282 | :type data_header_length: int</p></div>
|
---|
| 283 | <details class="source">
|
---|
| 284 | <summary>
|
---|
| 285 | <span>Expand source code</span>
|
---|
| 286 | </summary>
|
---|
| 287 | <pre><code class="python">def read_next_global_frame_body(self, data_header_length):
|
---|
| 288 | """
|
---|
| 289 | I return the next global frame body read from current position in file.
|
---|
| 290 |
|
---|
| 291 | :param data_header_length: the length of the data header
|
---|
| 292 | :type data_header_length: int
|
---|
| 293 | """
|
---|
| 294 | if_data_header = None
|
---|
| 295 |
|
---|
| 296 | if data_header_length == AmmosIFDataHeader.HEADER_SIZE:
|
---|
| 297 | if_data_header = self.read_next_global_frame_body_data_header()
|
---|
| 298 | if data_header_length == AmmosExtendedIFDataHeader.HEADER_SIZE:
|
---|
| 299 | if_data_header = self.read_next_global_frame_body_extended_data_header()
|
---|
| 300 |
|
---|
| 301 | if if_data_header is None:
|
---|
| 302 | logging.debug("Data header missing")
|
---|
| 303 | return None
|
---|
| 304 |
|
---|
| 305 | if_data_body = self.read_next_if_data_body(if_data_header.block_count, if_data_header.block_length)
|
---|
| 306 |
|
---|
| 307 | if if_data_body is None:
|
---|
| 308 | logging.debug("Data body missing")
|
---|
| 309 | return None
|
---|
| 310 |
|
---|
| 311 | return AmmosGlobalFrameBody(if_data_header, if_data_body)</code></pre>
|
---|
| 312 | </details>
|
---|
| 313 | </dd>
|
---|
| 314 | <dt id="ammosreader.AmmosIFReader.AmmosIFReader.read_next_global_frame_body_data_header"><code class="name flex">
|
---|
| 315 | <span>def <span class="ident">read_next_global_frame_body_data_header</span></span>(<span>self)</span>
|
---|
| 316 | </code></dt>
|
---|
| 317 | <dd>
|
---|
| 318 | <div class="desc"></div>
|
---|
| 319 | <details class="source">
|
---|
| 320 | <summary>
|
---|
| 321 | <span>Expand source code</span>
|
---|
| 322 | </summary>
|
---|
| 323 | <pre><code class="python">def read_next_global_frame_body_data_header(self):
|
---|
| 324 |
|
---|
| 325 | header_size = AmmosIFDataHeader.HEADER_SIZE
|
---|
| 326 |
|
---|
| 327 | bytes = self.ammos_file.read(header_size)
|
---|
| 328 |
|
---|
| 329 | logging.info("\nReading global frame body standard data header\n")
|
---|
| 330 | if ((not bytes) or (len(bytes) < header_size)):
|
---|
| 331 | logging.debug("Can not read all %s bytes of global frame body data header", header_size)
|
---|
| 332 | return None
|
---|
| 333 | return AmmosIFDataHeader.from_bytes(bytes)</code></pre>
|
---|
| 334 | </details>
|
---|
| 335 | </dd>
|
---|
| 336 | <dt id="ammosreader.AmmosIFReader.AmmosIFReader.read_next_global_frame_body_extended_data_header"><code class="name flex">
|
---|
| 337 | <span>def <span class="ident">read_next_global_frame_body_extended_data_header</span></span>(<span>self)</span>
|
---|
| 338 | </code></dt>
|
---|
| 339 | <dd>
|
---|
| 340 | <div class="desc"><p>I return the next global frame body extended data header from current position in file.</p>
|
---|
| 341 | <p>:return: the next Ammos Extended IF data header or None if incomplete
|
---|
| 342 | :rtype: AmmosExtendedIFDataHeader</p></div>
|
---|
| 343 | <details class="source">
|
---|
| 344 | <summary>
|
---|
| 345 | <span>Expand source code</span>
|
---|
| 346 | </summary>
|
---|
| 347 | <pre><code class="python">def read_next_global_frame_body_extended_data_header(self):
|
---|
| 348 | """
|
---|
| 349 | I return the next global frame body extended data header from current position in file.
|
---|
| 350 |
|
---|
| 351 | :return: the next Ammos Extended IF data header or None if incomplete
|
---|
| 352 | :rtype: AmmosExtendedIFDataHeader
|
---|
| 353 | """
|
---|
| 354 | header_size = AmmosExtendedIFDataHeader.HEADER_SIZE
|
---|
| 355 |
|
---|
| 356 | bytes = self.ammos_file.read(header_size)
|
---|
| 357 |
|
---|
| 358 | logging.info("\nReading global frame body extended data header\n")
|
---|
| 359 | if ((not bytes) or (len(bytes) < header_size)):
|
---|
| 360 | logging.debug("Can not read all %s bytes of global frame extended data header", header_size)
|
---|
| 361 | return None
|
---|
| 362 | return AmmosExtendedIFDataHeader.from_bytes(bytes)</code></pre>
|
---|
| 363 | </details>
|
---|
| 364 | </dd>
|
---|
| 365 | <dt id="ammosreader.AmmosIFReader.AmmosIFReader.read_next_if_data_body"><code class="name flex">
|
---|
| 366 | <span>def <span class="ident">read_next_if_data_body</span></span>(<span>self, number_of_data_blocks, data_length)</span>
|
---|
| 367 | </code></dt>
|
---|
| 368 | <dd>
|
---|
| 369 | <div class="desc"><p>I return the next data body read from current position in file.</p>
|
---|
| 370 | <p>:param number_of_data_blocks: the number of data blocks inside the body
|
---|
| 371 | :type number_of_data_blocks: int</p>
|
---|
| 372 | <p>:param data_length: the length of the raw data inside a single block
|
---|
| 373 | :type data_length: int</p></div>
|
---|
| 374 | <details class="source">
|
---|
| 375 | <summary>
|
---|
| 376 | <span>Expand source code</span>
|
---|
| 377 | </summary>
|
---|
| 378 | <pre><code class="python">def read_next_if_data_body(self, number_of_data_blocks, data_length):
|
---|
| 379 | """
|
---|
| 380 | I return the next data body read from current position in file.
|
---|
| 381 |
|
---|
| 382 | :param number_of_data_blocks: the number of data blocks inside the body
|
---|
| 383 | :type number_of_data_blocks: int
|
---|
| 384 |
|
---|
| 385 | :param data_length: the length of the raw data inside a single block
|
---|
| 386 | :type data_length: int
|
---|
| 387 | """
|
---|
| 388 | header_size = AmmosIFDataBlockHeader.HEADER_SIZE
|
---|
| 389 |
|
---|
| 390 | data_body = AmmosIFDataBody()
|
---|
| 391 |
|
---|
| 392 | block_length = header_size + data_length
|
---|
| 393 |
|
---|
| 394 | total = number_of_data_blocks*block_length
|
---|
| 395 |
|
---|
| 396 | byte_string = self.ammos_file.read(block_length)
|
---|
| 397 |
|
---|
| 398 | if len(byte_string) != total:
|
---|
| 399 | logging.debug("Can not read all %s bytes of data body", total)
|
---|
| 400 | return None
|
---|
| 401 |
|
---|
| 402 | for i in range(0, number_of_data_blocks):
|
---|
| 403 | result = byte_string[i*block_length:(i*block_length+block_length)]
|
---|
| 404 | data_body.add_data_block(AmmosIFDataBlock(AmmosIFDataBlockHeader.from_bytes(result[0:header_size]),
|
---|
| 405 | result[header_size:]))
|
---|
| 406 |
|
---|
| 407 | return data_body</code></pre>
|
---|
| 408 | </details>
|
---|
| 409 | </dd>
|
---|
| 410 | </dl>
|
---|
| 411 | <h3>Inherited members</h3>
|
---|
| 412 | <ul class="hlist">
|
---|
| 413 | <li><code><b><a title="ammosreader.AbstractAmmosReader.AbstractAmmosReader" href="AbstractAmmosReader.html#ammosreader.AbstractAmmosReader.AbstractAmmosReader">AbstractAmmosReader</a></b></code>:
|
---|
| 414 | <ul class="hlist">
|
---|
| 415 | <li><code><a title="ammosreader.AbstractAmmosReader.AbstractAmmosReader.add_tag" href="AbstractAmmosReader.html#ammosreader.AbstractAmmosReader.AbstractAmmosReader.add_tag">add_tag</a></code></li>
|
---|
| 416 | <li><code><a title="ammosreader.AbstractAmmosReader.AbstractAmmosReader.read_all_frames_left" href="AbstractAmmosReader.html#ammosreader.AbstractAmmosReader.AbstractAmmosReader.read_all_frames_left">read_all_frames_left</a></code></li>
|
---|
| 417 | <li><code><a title="ammosreader.AbstractAmmosReader.AbstractAmmosReader.read_next_global_frame_header" href="AbstractAmmosReader.html#ammosreader.AbstractAmmosReader.AbstractAmmosReader.read_next_global_frame_header">read_next_global_frame_header</a></code></li>
|
---|
| 418 | <li><code><a title="ammosreader.AbstractAmmosReader.AbstractAmmosReader.read_next_single_frame" href="AbstractAmmosReader.html#ammosreader.AbstractAmmosReader.AbstractAmmosReader.read_next_single_frame">read_next_single_frame</a></code></li>
|
---|
| 419 | <li><code><a title="ammosreader.AbstractAmmosReader.AbstractAmmosReader.rewind_to_start" href="AbstractAmmosReader.html#ammosreader.AbstractAmmosReader.AbstractAmmosReader.rewind_to_start">rewind_to_start</a></code></li>
|
---|
| 420 | </ul>
|
---|
| 421 | </li>
|
---|
| 422 | </ul>
|
---|
| 423 | </dd>
|
---|
| 424 | </dl>
|
---|
| 425 | </section>
|
---|
| 426 | </article>
|
---|
| 427 | <nav id="sidebar">
|
---|
| 428 | <h1>Index</h1>
|
---|
| 429 | <div class="toc">
|
---|
| 430 | <ul></ul>
|
---|
| 431 | </div>
|
---|
| 432 | <ul id="index">
|
---|
| 433 | <li><h3>Super-module</h3>
|
---|
| 434 | <ul>
|
---|
| 435 | <li><code><a title="ammosreader" href="index.html">ammosreader</a></code></li>
|
---|
| 436 | </ul>
|
---|
| 437 | </li>
|
---|
| 438 | <li><h3><a href="#header-classes">Classes</a></h3>
|
---|
| 439 | <ul>
|
---|
| 440 | <li>
|
---|
| 441 | <h4><code><a title="ammosreader.AmmosIFReader.AmmosIFReader" href="#ammosreader.AmmosIFReader.AmmosIFReader">AmmosIFReader</a></code></h4>
|
---|
| 442 | <ul class="">
|
---|
| 443 | <li><code><a title="ammosreader.AmmosIFReader.AmmosIFReader.data" href="#ammosreader.AmmosIFReader.AmmosIFReader.data">data</a></code></li>
|
---|
| 444 | <li><code><a title="ammosreader.AmmosIFReader.AmmosIFReader.read_next_global_frame_body" href="#ammosreader.AmmosIFReader.AmmosIFReader.read_next_global_frame_body">read_next_global_frame_body</a></code></li>
|
---|
| 445 | <li><code><a title="ammosreader.AmmosIFReader.AmmosIFReader.read_next_global_frame_body_data_header" href="#ammosreader.AmmosIFReader.AmmosIFReader.read_next_global_frame_body_data_header">read_next_global_frame_body_data_header</a></code></li>
|
---|
| 446 | <li><code><a title="ammosreader.AmmosIFReader.AmmosIFReader.read_next_global_frame_body_extended_data_header" href="#ammosreader.AmmosIFReader.AmmosIFReader.read_next_global_frame_body_extended_data_header">read_next_global_frame_body_extended_data_header</a></code></li>
|
---|
| 447 | <li><code><a title="ammosreader.AmmosIFReader.AmmosIFReader.read_next_if_data_body" href="#ammosreader.AmmosIFReader.AmmosIFReader.read_next_if_data_body">read_next_if_data_body</a></code></li>
|
---|
| 448 | </ul>
|
---|
| 449 | </li>
|
---|
| 450 | </ul>
|
---|
| 451 | </li>
|
---|
| 452 | </ul>
|
---|
| 453 | </nav>
|
---|
| 454 | </main>
|
---|
| 455 | <footer id="footer">
|
---|
| 456 | <p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
|
---|
| 457 | </footer>
|
---|
| 458 | </body>
|
---|
| 459 | </html> |
---|