package org.josast.kaitai.generated;
//This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild

//This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild

import io.kaitai.struct.ByteBufferKaitaiStream;
import io.kaitai.struct.KaitaiStruct;
import io.kaitai.struct.KaitaiStream;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;

public class Cubesatsim extends KaitaiStruct {
	public static Cubesatsim fromFile(String fileName) throws IOException {
		return new Cubesatsim(new ByteBufferKaitaiStream(fileName));
	}

	public Cubesatsim(KaitaiStream _io) {
		this(_io, null, null);
	}

	public Cubesatsim(KaitaiStream _io, KaitaiStruct _parent) {
		this(_io, _parent, null);
	}

	public Cubesatsim(KaitaiStream _io, KaitaiStruct _parent, Cubesatsim _root) {
		super(_io);
		this._parent = _parent;
		this._root = _root == null ? this : _root;
		_read();
	}

	private void _read() {
		this._raw_ax25Header = this._io.readBytes(15);
		KaitaiStream _io__raw_ax25Header = new ByteBufferKaitaiStream(_raw_ax25Header);
		this.ax25Header = new Hdr(_io__raw_ax25Header, this, _root);
		switch (ax25Header().ctrl()) {
		case 3: {
			this.frametype = new UiFrame(this._io, this, _root);
			break;
		}
		}
	}

	public static class Hdr extends KaitaiStruct {
		public static Hdr fromFile(String fileName) throws IOException {
			return new Hdr(new ByteBufferKaitaiStream(fileName));
		}

		public Hdr(KaitaiStream _io) {
			this(_io, null, null);
		}

		public Hdr(KaitaiStream _io, Cubesatsim _parent) {
			this(_io, _parent, null);
		}

		public Hdr(KaitaiStream _io, Cubesatsim _parent, Cubesatsim _root) {
			super(_io);
			this._parent = _parent;
			this._root = _root;
			_read();
		}

		private void _read() {
			this._raw__raw_destAddress = this._io.readBytes(6);
			this._raw_destAddress = KaitaiStream.processRotateLeft(this._raw__raw_destAddress, 8 - (1), 1);
			KaitaiStream _io__raw_destAddress = new ByteBufferKaitaiStream(_raw_destAddress);
			this.destAddress = new DestAddress(_io__raw_destAddress, this, _root);
			this.uDestSsid = this._io.readU1();
			this._raw__raw_srcAddress = this._io.readBytes(6);
			this._raw_srcAddress = KaitaiStream.processRotateLeft(this._raw__raw_srcAddress, 8 - (1), 1);
			KaitaiStream _io__raw_srcAddress = new ByteBufferKaitaiStream(_raw_srcAddress);
			this.srcAddress = new SrcAddress(_io__raw_srcAddress, this, _root);
			this.uSrcSsid = this._io.readU1();
			this.ctrl = this._io.readU1();
		}

		private Integer srcSsid;

		public Integer srcSsid() {
			if (this.srcSsid != null)
				return this.srcSsid;
			int _tmp = (int) (((uSrcSsid() & 15) >> 1));
			this.srcSsid = _tmp;
			return this.srcSsid;
		}

		private Integer destSsid;

		public Integer destSsid() {
			if (this.destSsid != null)
				return this.destSsid;
			int _tmp = (int) (((uDestSsid() & 15) >> 1));
			this.destSsid = _tmp;
			return this.destSsid;
		}

		private DestAddress destAddress;
		private int uDestSsid;
		private SrcAddress srcAddress;
		private int uSrcSsid;
		private int ctrl;
		private Cubesatsim _root;
		private Cubesatsim _parent;
		private byte[] _raw__raw_destAddress;
		private byte[] _raw_destAddress;
		private byte[] _raw__raw_srcAddress;
		private byte[] _raw_srcAddress;

		public DestAddress destAddress() {
			return destAddress;
		}

		public int uDestSsid() {
			return uDestSsid;
		}

		public SrcAddress srcAddress() {
			return srcAddress;
		}

		public int uSrcSsid() {
			return uSrcSsid;
		}

		public int ctrl() {
			return ctrl;
		}

		public Cubesatsim _root() {
			return _root;
		}

		public Cubesatsim _parent() {
			return _parent;
		}

		public byte[] _raw__raw_destAddress() {
			return _raw__raw_destAddress;
		}

		public byte[] _raw_destAddress() {
			return _raw_destAddress;
		}

		public byte[] _raw__raw_srcAddress() {
			return _raw__raw_srcAddress;
		}

		public byte[] _raw_srcAddress() {
			return _raw_srcAddress;
		}
	}

	public static class DestAddress extends KaitaiStruct {
		public static DestAddress fromFile(String fileName) throws IOException {
			return new DestAddress(new ByteBufferKaitaiStream(fileName));
		}

		public DestAddress(KaitaiStream _io) {
			this(_io, null, null);
		}

		public DestAddress(KaitaiStream _io, Cubesatsim.Hdr _parent) {
			this(_io, _parent, null);
		}

		public DestAddress(KaitaiStream _io, Cubesatsim.Hdr _parent, Cubesatsim _root) {
			super(_io);
			this._parent = _parent;
			this._root = _root;
			_read();
		}

		private void _read() {
			this.destAddressStr = new String(this._io.readBytes(6), Charset.forName("ASCII"));
		}

		private String destAddressStr;
		private Cubesatsim _root;
		private Cubesatsim.Hdr _parent;

		public String destAddressStr() {
			return destAddressStr;
		}

		public Cubesatsim _root() {
			return _root;
		}

		public Cubesatsim.Hdr _parent() {
			return _parent;
		}
	}

	public static class UiFrame extends KaitaiStruct {
		public static UiFrame fromFile(String fileName) throws IOException {
			return new UiFrame(new ByteBufferKaitaiStream(fileName));
		}

		public UiFrame(KaitaiStream _io) {
			this(_io, null, null);
		}

		public UiFrame(KaitaiStream _io, Cubesatsim _parent) {
			this(_io, _parent, null);
		}

		public UiFrame(KaitaiStream _io, Cubesatsim _parent, Cubesatsim _root) {
			super(_io);
			this._parent = _parent;
			this._root = _root;
			_read();
		}

		private void _read() {
			this.pid = this._io.readU1();
			this._raw_ax25Info = this._io.readBytesFull();
			KaitaiStream _io__raw_ax25Info = new ByteBufferKaitaiStream(_raw_ax25Info);
			this.ax25Info = new CubesatsimData(_io__raw_ax25Info, this, _root);
		}

		private int pid;
		private CubesatsimData ax25Info;
		private Cubesatsim _root;
		private Cubesatsim _parent;
		private byte[] _raw_ax25Info;

		public int pid() {
			return pid;
		}

		public CubesatsimData ax25Info() {
			return ax25Info;
		}

		public Cubesatsim _root() {
			return _root;
		}

		public Cubesatsim _parent() {
			return _parent;
		}

		public byte[] _raw_ax25Info() {
			return _raw_ax25Info;
		}
	}

	public static class CubesatsimData extends KaitaiStruct {
		public static CubesatsimData fromFile(String fileName) throws IOException {
			return new CubesatsimData(new ByteBufferKaitaiStream(fileName));
		}

		public CubesatsimData(KaitaiStream _io) {
			this(_io, null, null);
		}

		public CubesatsimData(KaitaiStream _io, Cubesatsim.UiFrame _parent) {
			this(_io, _parent, null);
		}

		public CubesatsimData(KaitaiStream _io, Cubesatsim.UiFrame _parent, Cubesatsim _root) {
			super(_io);
			this._parent = _parent;
			this._root = _root;
			_read();
		}

		private void _read() {
			this.dataType = this._io.readU2be();
			switch (dataType()) {
			case 26729: {
				this.payload = new CubesatsimAo7(this._io, this, _root);
				break;
			}
			default: {
				this.payload = new CubesatsimAo7(this._io, this, _root);
				break;
			}
			}
		}

		private int dataType;
		private CubesatsimAo7 payload;
		private Cubesatsim _root;
		private Cubesatsim.UiFrame _parent;

		public int dataType() {
			return dataType;
		}

		public CubesatsimAo7 payload() {
			return payload;
		}

		public Cubesatsim _root() {
			return _root;
		}

		public Cubesatsim.UiFrame _parent() {
			return _parent;
		}
	}

	public static class IFrame extends KaitaiStruct {
		public static IFrame fromFile(String fileName) throws IOException {
			return new IFrame(new ByteBufferKaitaiStream(fileName));
		}

		public IFrame(KaitaiStream _io) {
			this(_io, null, null);
		}

		public IFrame(KaitaiStream _io, KaitaiStruct _parent) {
			this(_io, _parent, null);
		}

		public IFrame(KaitaiStream _io, KaitaiStruct _parent, Cubesatsim _root) {
			super(_io);
			this._parent = _parent;
			this._root = _root;
			_read();
		}

		private void _read() {
			this.pid = this._io.readU1();
			this.ax25Info = this._io.readBytesFull();
		}

		private int pid;
		private byte[] ax25Info;
		private Cubesatsim _root;
		private KaitaiStruct _parent;

		public int pid() {
			return pid;
		}

		public byte[] ax25Info() {
			return ax25Info;
		}

		public Cubesatsim _root() {
			return _root;
		}

		public KaitaiStruct _parent() {
			return _parent;
		}
	}

	public static class CubesatsimAo7 extends KaitaiStruct {
		public static CubesatsimAo7 fromFile(String fileName) throws IOException {
			return new CubesatsimAo7(new ByteBufferKaitaiStream(fileName));
		}

		public CubesatsimAo7(KaitaiStream _io) {
			this(_io, null, null);
		}

		public CubesatsimAo7(KaitaiStream _io, Cubesatsim.CubesatsimData _parent) {
			this(_io, _parent, null);
		}

		public CubesatsimAo7(KaitaiStream _io, Cubesatsim.CubesatsimData _parent, Cubesatsim _root) {
			super(_io);
			this._parent = _parent;
			this._root = _root;
			_read();
		}

		private void _read() {
			this.ao7Magic = this._io.ensureFixedContents(new byte[] { 32, 104, 105, 32 });
			this.channel1aId = this._io.ensureFixedContents(new byte[] { 49 });
			channel1aValRaw = new ArrayList<Integer>((int) (2));
			for (int i = 0; i < 2; i++) {
				this.channel1aValRaw.add(this._io.readU1());
			}
			this.delim1a = this._io.readBytes(1);
			this.channel1bId = this._io.ensureFixedContents(new byte[] { 49 });
			channel1bValRaw = new ArrayList<Integer>((int) (2));
			for (int i = 0; i < 2; i++) {
				this.channel1bValRaw.add(this._io.readU1());
			}
			this.delim1b = this._io.readBytes(1);
			this.channel1cId = this._io.ensureFixedContents(new byte[] { 49 });
			channel1cValRaw = new ArrayList<Integer>((int) (2));
			for (int i = 0; i < 2; i++) {
				this.channel1cValRaw.add(this._io.readU1());
			}
			this.delim1c = this._io.readBytes(1);
			this.channel1dId = this._io.ensureFixedContents(new byte[] { 49 });
			channel1dValRaw = new ArrayList<Integer>((int) (2));
			for (int i = 0; i < 2; i++) {
				this.channel1dValRaw.add(this._io.readU1());
			}
			this.delim1d = this._io.readBytes(1);
			this.channel2aId = this._io.ensureFixedContents(new byte[] { 50 });
			channel2aValRaw = new ArrayList<Integer>((int) (2));
			for (int i = 0; i < 2; i++) {
				this.channel2aValRaw.add(this._io.readU1());
			}
			this.delim2a = this._io.readBytes(1);
			this.channel2bId = this._io.ensureFixedContents(new byte[] { 50 });
			channel2bValRaw = new ArrayList<Integer>((int) (2));
			for (int i = 0; i < 2; i++) {
				this.channel2bValRaw.add(this._io.readU1());
			}
			this.delim2b = this._io.readBytes(1);
			this.channel2cId = this._io.ensureFixedContents(new byte[] { 50 });
			channel2cValRaw = new ArrayList<Integer>((int) (2));
			for (int i = 0; i < 2; i++) {
				this.channel2cValRaw.add(this._io.readU1());
			}
			this.delim2c = this._io.readBytes(1);
			this.channel2dId = this._io.ensureFixedContents(new byte[] { 50 });
			channel2dValRaw = new ArrayList<Integer>((int) (2));
			for (int i = 0; i < 2; i++) {
				this.channel2dValRaw.add(this._io.readU1());
			}
			this.delim2d = this._io.readBytes(1);
			this.channel3aId = this._io.ensureFixedContents(new byte[] { 51 });
			channel3aValRaw = new ArrayList<Integer>((int) (2));
			for (int i = 0; i < 2; i++) {
				this.channel3aValRaw.add(this._io.readU1());
			}
			this.delim3a = this._io.readBytes(1);
			this.channel3bId = this._io.ensureFixedContents(new byte[] { 51 });
			channel3bValRaw = new ArrayList<Integer>((int) (2));
			for (int i = 0; i < 2; i++) {
				this.channel3bValRaw.add(this._io.readU1());
			}
			this.delim3b = this._io.readBytes(1);
			this.channel3cId = this._io.ensureFixedContents(new byte[] { 51 });
			channel3cValRaw = new ArrayList<Integer>((int) (2));
			for (int i = 0; i < 2; i++) {
				this.channel3cValRaw.add(this._io.readU1());
			}
			this.delim3c = this._io.readBytes(1);
			this.channel3dId = this._io.ensureFixedContents(new byte[] { 51 });
			channel3dValRaw = new ArrayList<Integer>((int) (2));
			for (int i = 0; i < 2; i++) {
				this.channel3dValRaw.add(this._io.readU1());
			}
			this.delim3d = this._io.readBytes(1);
			this.channel4aId = this._io.ensureFixedContents(new byte[] { 52 });
			channel4aValRaw = new ArrayList<Integer>((int) (2));
			for (int i = 0; i < 2; i++) {
				this.channel4aValRaw.add(this._io.readU1());
			}
			this.delim4a = this._io.readBytes(1);
			this.channel4bId = this._io.ensureFixedContents(new byte[] { 52 });
			channel4bValRaw = new ArrayList<Integer>((int) (2));
			for (int i = 0; i < 2; i++) {
				this.channel4bValRaw.add(this._io.readU1());
			}
			this.delim4b = this._io.readBytes(1);
			this.channel4cId = this._io.ensureFixedContents(new byte[] { 52 });
			channel4cValRaw = new ArrayList<Integer>((int) (2));
			for (int i = 0; i < 2; i++) {
				this.channel4cValRaw.add(this._io.readU1());
			}
			this.delim4c = this._io.readBytes(1);
			this.channel4dId = this._io.ensureFixedContents(new byte[] { 52 });
			channel4dValRaw = new ArrayList<Integer>((int) (2));
			for (int i = 0; i < 2; i++) {
				this.channel4dValRaw.add(this._io.readU1());
			}
			this.delim4d = this._io.readBytes(1);
			this.channel5aId = this._io.ensureFixedContents(new byte[] { 53 });
			channel5aValRaw = new ArrayList<Integer>((int) (2));
			for (int i = 0; i < 2; i++) {
				this.channel5aValRaw.add(this._io.readU1());
			}
			this.delim5a = this._io.readBytes(1);
			this.channel5bId = this._io.ensureFixedContents(new byte[] { 53 });
			channel5bValRaw = new ArrayList<Integer>((int) (2));
			for (int i = 0; i < 2; i++) {
				this.channel5bValRaw.add(this._io.readU1());
			}
			this.delim5b = this._io.readBytes(1);
			this.channel5cId = this._io.ensureFixedContents(new byte[] { 53 });
			channel5cValRaw = new ArrayList<Integer>((int) (2));
			for (int i = 0; i < 2; i++) {
				this.channel5cValRaw.add(this._io.readU1());
			}
			this.delim5c = this._io.readBytes(1);
			this.channel5dId = this._io.ensureFixedContents(new byte[] { 53 });
			channel5dValRaw = new ArrayList<Integer>((int) (2));
			for (int i = 0; i < 2; i++) {
				this.channel5dValRaw.add(this._io.readU1());
			}
			this.delim5d = this._io.readBytes(1);
			this.channel6aId = this._io.ensureFixedContents(new byte[] { 54 });
			channel6aValRaw = new ArrayList<Integer>((int) (2));
			for (int i = 0; i < 2; i++) {
				this.channel6aValRaw.add(this._io.readU1());
			}
			this.delim6a = this._io.readBytes(1);
			this.channel6bId = this._io.ensureFixedContents(new byte[] { 54 });
			channel6bValRaw = new ArrayList<Integer>((int) (2));
			for (int i = 0; i < 2; i++) {
				this.channel6bValRaw.add(this._io.readU1());
			}
			this.delim6b = this._io.readBytes(1);
			this.channel6cId = this._io.ensureFixedContents(new byte[] { 54 });
			channel6cValRaw = new ArrayList<Integer>((int) (2));
			for (int i = 0; i < 2; i++) {
				this.channel6cValRaw.add(this._io.readU1());
			}
			this.delim6c = this._io.readBytes(1);
			this.channel6dId = this._io.ensureFixedContents(new byte[] { 54 });
			channel6dValRaw = new ArrayList<Integer>((int) (2));
			for (int i = 0; i < 2; i++) {
				this.channel6dValRaw.add(this._io.readU1());
			}
			this.delim6d = this._io.readBytes(1);
		}

		private Integer channel1dVal;

		/**
		 * 1970 - (20 * value) [mA]
		 */
		public Integer channel1dVal() {
			if (this.channel1dVal != null)
				return this.channel1dVal;
			int _tmp = (int) ((((channel1dValRaw().get((int) 0) - 48) * 10) + (channel1dValRaw().get((int) 1) - 48)));
			this.channel1dVal = _tmp;
			return this.channel1dVal;
		}

		private Double channel1aVal;

		/**
		 * value * 29.5 [mA]
		 */
		public Double channel1aVal() {
			if (this.channel1aVal != null)
				return this.channel1aVal;
			double _tmp = (double) (((((channel1aValRaw().get((int) 0) - 48) * 10)
					+ (channel1aValRaw().get((int) 1) - 48)) * 29.5));
			this.channel1aVal = _tmp;
			return this.channel1aVal;
		}

		private Double channel6aVal;

		/**
		 * value^2 / 1.56 [mA]
		 */
		public Double channel6aVal() {
			if (this.channel6aVal != null)
				return this.channel6aVal;
			double _tmp = (double) ((((((channel6aValRaw().get((int) 0) - 48) * 10)
					+ (channel6aValRaw().get((int) 1) - 48))
					* (((channel6aValRaw().get((int) 0) - 48) * 10) + (channel6aValRaw().get((int) 1) - 48))) / 1.56));
			this.channel6aVal = _tmp;
			return this.channel6aVal;
		}

		private Integer channel1cVal;

		/**
		 * 1970 - (20 * value) [mA]
		 */
		public Integer channel1cVal() {
			if (this.channel1cVal != null)
				return this.channel1cVal;
			int _tmp = (int) ((1970
					- (20 * (((channel1cValRaw().get((int) 0) - 48) * 10) + (channel1cValRaw().get((int) 1) - 48)))));
			this.channel1cVal = _tmp;
			return this.channel1cVal;
		}

		private Double channel4aVal;

		/**
		 * 95.8 - 1.48 * value [�C]
		 */
		public Double channel4aVal() {
			if (this.channel4aVal != null)
				return this.channel4aVal;
			double _tmp = (double) ((95.8
					- (1.48 * (((channel4aValRaw().get((int) 0) - 48) * 10) + (channel4aValRaw().get((int) 1) - 48)))));
			this.channel4aVal = _tmp;
			return this.channel4aVal;
		}

		private Double channel5aVal;

		/**
		 * 95.8 - 1.48 * value [�C]
		 */
		public Double channel5aVal() {
			if (this.channel5aVal != null)
				return this.channel5aVal;
			double _tmp = (double) ((95.8
					- (1.48 * (((channel5aValRaw().get((int) 0) - 48) * 10) + (channel5aValRaw().get((int) 1) - 48)))));
			this.channel5aVal = _tmp;
			return this.channel5aVal;
		}

		private Double channel2bVal;

		/**
		 * 8 * (1 - 0.01 * value)^2 [W]
		 */
		public Double channel2bVal() {
			if (this.channel2bVal != null)
				return this.channel2bVal;
			double _tmp = (double) ((8 * ((1
					- (0.01 * (((channel2bValRaw().get((int) 0) - 48) * 10) + (channel2bValRaw().get((int) 1) - 48))))
					* (1 - (0.01 * (((channel2bValRaw().get((int) 0) - 48) * 10)
							+ (channel2bValRaw().get((int) 1) - 48)))))));
			this.channel2bVal = _tmp;
			return this.channel2bVal;
		}

		private Double channel6bVal;

		/**
		 * 0.1 * value^2 + 35 [mA]
		 */
		public Double channel6bVal() {
			if (this.channel6bVal != null)
				return this.channel6bVal;
			double _tmp = (double) (((0.1
					* ((((channel6bValRaw().get((int) 0) - 48) * 10) + (channel6bValRaw().get((int) 1) - 48))
							* (((channel6bValRaw().get((int) 0) - 48) * 10) + (channel6bValRaw().get((int) 1) - 48))))
					+ 35));
			this.channel6bVal = _tmp;
			return this.channel6bVal;
		}

		private Double channel6cVal;

		/**
		 * 0.041 * value^2 [mA]
		 */
		public Double channel6cVal() {
			if (this.channel6cVal != null)
				return this.channel6cVal;
			double _tmp = (double) ((0.041
					* ((((channel6cValRaw().get((int) 0) - 48) * 10) + (channel6cValRaw().get((int) 1) - 48))
							* (((channel6cValRaw().get((int) 0) - 48) * 10) + (channel6cValRaw().get((int) 1) - 48)))));
			this.channel6cVal = _tmp;
			return this.channel6cVal;
		}

		private Double channel3aVal;

		/**
		 * 0.1 * value + 6.4 [V]
		 */
		public Double channel3aVal() {
			if (this.channel3aVal != null)
				return this.channel3aVal;
			double _tmp = (double) (((0.1
					* (((channel3aValRaw().get((int) 0) - 48) * 10) + (channel3aValRaw().get((int) 1) - 48))) + 6.4));
			this.channel3aVal = _tmp;
			return this.channel3aVal;
		}

		private Integer channel2dVal;

		/**
		 * 40 * (value - 50) [mA]
		 */
		public Integer channel2dVal() {
			if (this.channel2dVal != null)
				return this.channel2dVal;
			int _tmp = (int) ((40
					* ((((channel2dValRaw().get((int) 0) - 48) * 10) + (channel2dValRaw().get((int) 1) - 48)) - 50)));
			this.channel2dVal = _tmp;
			return this.channel2dVal;
		}

		private Double channel5dVal;

		/**
		 * 11 + 0.82 * value [mA]
		 */
		public Double channel5dVal() {
			if (this.channel5dVal != null)
				return this.channel5dVal;
			double _tmp = (double) ((11
					+ (0.82 * (((channel5dValRaw().get((int) 0) - 48) * 10) + (channel5dValRaw().get((int) 1) - 48)))));
			this.channel5dVal = _tmp;
			return this.channel5dVal;
		}

		private Double channel2cVal;

		/**
		 * 15.16 * value [h]
		 */
		public Double channel2cVal() {
			if (this.channel2cVal != null)
				return this.channel2cVal;
			double _tmp = (double) ((15.16
					* (((channel2cValRaw().get((int) 0) - 48) * 10) + (channel2cValRaw().get((int) 1) - 48))));
			this.channel2cVal = _tmp;
			return this.channel2cVal;
		}

		private Double channel6dVal;

		/**
		 * 0.01 * value
		 */
		public Double channel6dVal() {
			if (this.channel6dVal != null)
				return this.channel6dVal;
			double _tmp = (double) ((0.01
					* (((channel6dValRaw().get((int) 0) - 48) * 10) + (channel6dValRaw().get((int) 1) - 48))));
			this.channel6dVal = _tmp;
			return this.channel6dVal;
		}

		private Integer channel1bVal;

		/**
		 * 1970 - (20 * value) [mA]
		 */
		public Integer channel1bVal() {
			if (this.channel1bVal != null)
				return this.channel1bVal;
			int _tmp = (int) ((1970
					- (20 * (((channel1bValRaw().get((int) 0) - 48) * 10) + (channel1bValRaw().get((int) 1) - 48)))));
			this.channel1bVal = _tmp;
			return this.channel1bVal;
		}

		private Double channel3bVal;

		/**
		 * 0.1 * value [V]
		 */
		public Double channel3bVal() {
			if (this.channel3bVal != null)
				return this.channel3bVal;
			double _tmp = (double) ((0.1
					* (((channel3bValRaw().get((int) 0) - 48) * 10) + (channel3bValRaw().get((int) 1) - 48))));
			this.channel3bVal = _tmp;
			return this.channel3bVal;
		}

		private Double channel4cVal;

		/**
		 * 95.8 - 1.48 * value [�C]
		 */
		public Double channel4cVal() {
			if (this.channel4cVal != null)
				return this.channel4cVal;
			double _tmp = (double) ((95.8
					- (1.48 * (((channel4cValRaw().get((int) 0) - 48) * 10) + (channel4cValRaw().get((int) 1) - 48)))));
			this.channel4cVal = _tmp;
			return this.channel4cVal;
		}

		private Double channel5cVal;

		/**
		 * 95.8 - 1.48 * value [�C]
		 */
		public Double channel5cVal() {
			if (this.channel5cVal != null)
				return this.channel5cVal;
			double _tmp = (double) ((95.8
					- (1.48 * (((channel5cValRaw().get((int) 0) - 48) * 10) + (channel5cValRaw().get((int) 1) - 48)))));
			this.channel5cVal = _tmp;
			return this.channel5cVal;
		}

		private Double channel4bVal;

		/**
		 * 95.8 - 1.48 * value [�C]
		 */
		public Double channel4bVal() {
			if (this.channel4bVal != null)
				return this.channel4bVal;
			double _tmp = (double) ((95.8
					- (1.48 * (((channel4bValRaw().get((int) 0) - 48) * 10) + (channel4bValRaw().get((int) 1) - 48)))));
			this.channel4bVal = _tmp;
			return this.channel4bVal;
		}

		private Double channel3dVal;

		/**
		 * 95.8 - 1.48 * value [�C]
		 */
		public Double channel3dVal() {
			if (this.channel3dVal != null)
				return this.channel3dVal;
			double _tmp = (double) ((95.8
					- (1.48 * (((channel3dValRaw().get((int) 0) - 48) * 10) + (channel3dValRaw().get((int) 1) - 48)))));
			this.channel3dVal = _tmp;
			return this.channel3dVal;
		}

		private Integer channel2aVal;

		/**
		 * 1970 - (20 * value) [mA]
		 */
		public Integer channel2aVal() {
			if (this.channel2aVal != null)
				return this.channel2aVal;
			int _tmp = (int) ((1970
					- (20 * (((channel2aValRaw().get((int) 0) - 48) * 10) + (channel2aValRaw().get((int) 1) - 48)))));
			this.channel2aVal = _tmp;
			return this.channel2aVal;
		}

		private Double channel4dVal;

		/**
		 * 95.8 - 1.48 * value [�C]
		 */
		public Double channel4dVal() {
			if (this.channel4dVal != null)
				return this.channel4dVal;
			double _tmp = (double) ((95.8
					- (1.48 * (((channel4dValRaw().get((int) 0) - 48) * 10) + (channel4dValRaw().get((int) 1) - 48)))));
			this.channel4dVal = _tmp;
			return this.channel4dVal;
		}

		private Double channel3cVal;

		/**
		 * 0.15 * value [V]
		 */
		public Double channel3cVal() {
			if (this.channel3cVal != null)
				return this.channel3cVal;
			double _tmp = (double) ((0.15
					* (((channel3cValRaw().get((int) 0) - 48) * 10) + (channel3cValRaw().get((int) 1) - 48))));
			this.channel3cVal = _tmp;
			return this.channel3cVal;
		}

		private Double channel5bVal;

		/**
		 * 11.67 * value [mA]
		 */
		public Double channel5bVal() {
			if (this.channel5bVal != null)
				return this.channel5bVal;
			double _tmp = (double) ((11.67
					* (((channel5bValRaw().get((int) 0) - 48) * 10) + (channel5bValRaw().get((int) 1) - 48))));
			this.channel5bVal = _tmp;
			return this.channel5bVal;
		}

		private byte[] ao7Magic;
		private byte[] channel1aId;
		private ArrayList<Integer> channel1aValRaw;
		private byte[] delim1a;
		private byte[] channel1bId;
		private ArrayList<Integer> channel1bValRaw;
		private byte[] delim1b;
		private byte[] channel1cId;
		private ArrayList<Integer> channel1cValRaw;
		private byte[] delim1c;
		private byte[] channel1dId;
		private ArrayList<Integer> channel1dValRaw;
		private byte[] delim1d;
		private byte[] channel2aId;
		private ArrayList<Integer> channel2aValRaw;
		private byte[] delim2a;
		private byte[] channel2bId;
		private ArrayList<Integer> channel2bValRaw;
		private byte[] delim2b;
		private byte[] channel2cId;
		private ArrayList<Integer> channel2cValRaw;
		private byte[] delim2c;
		private byte[] channel2dId;
		private ArrayList<Integer> channel2dValRaw;
		private byte[] delim2d;
		private byte[] channel3aId;
		private ArrayList<Integer> channel3aValRaw;
		private byte[] delim3a;
		private byte[] channel3bId;
		private ArrayList<Integer> channel3bValRaw;
		private byte[] delim3b;
		private byte[] channel3cId;
		private ArrayList<Integer> channel3cValRaw;
		private byte[] delim3c;
		private byte[] channel3dId;
		private ArrayList<Integer> channel3dValRaw;
		private byte[] delim3d;
		private byte[] channel4aId;
		private ArrayList<Integer> channel4aValRaw;
		private byte[] delim4a;
		private byte[] channel4bId;
		private ArrayList<Integer> channel4bValRaw;
		private byte[] delim4b;
		private byte[] channel4cId;
		private ArrayList<Integer> channel4cValRaw;
		private byte[] delim4c;
		private byte[] channel4dId;
		private ArrayList<Integer> channel4dValRaw;
		private byte[] delim4d;
		private byte[] channel5aId;
		private ArrayList<Integer> channel5aValRaw;
		private byte[] delim5a;
		private byte[] channel5bId;
		private ArrayList<Integer> channel5bValRaw;
		private byte[] delim5b;
		private byte[] channel5cId;
		private ArrayList<Integer> channel5cValRaw;
		private byte[] delim5c;
		private byte[] channel5dId;
		private ArrayList<Integer> channel5dValRaw;
		private byte[] delim5d;
		private byte[] channel6aId;
		private ArrayList<Integer> channel6aValRaw;
		private byte[] delim6a;
		private byte[] channel6bId;
		private ArrayList<Integer> channel6bValRaw;
		private byte[] delim6b;
		private byte[] channel6cId;
		private ArrayList<Integer> channel6cValRaw;
		private byte[] delim6c;
		private byte[] channel6dId;
		private ArrayList<Integer> channel6dValRaw;
		private byte[] delim6d;
		private Cubesatsim _root;
		private Cubesatsim.CubesatsimData _parent;

		public byte[] ao7Magic() {
			return ao7Magic;
		}

		public byte[] channel1aId() {
			return channel1aId;
		}

		public ArrayList<Integer> channel1aValRaw() {
			return channel1aValRaw;
		}

		public byte[] delim1a() {
			return delim1a;
		}

		public byte[] channel1bId() {
			return channel1bId;
		}

		public ArrayList<Integer> channel1bValRaw() {
			return channel1bValRaw;
		}

		public byte[] delim1b() {
			return delim1b;
		}

		public byte[] channel1cId() {
			return channel1cId;
		}

		public ArrayList<Integer> channel1cValRaw() {
			return channel1cValRaw;
		}

		public byte[] delim1c() {
			return delim1c;
		}

		public byte[] channel1dId() {
			return channel1dId;
		}

		public ArrayList<Integer> channel1dValRaw() {
			return channel1dValRaw;
		}

		public byte[] delim1d() {
			return delim1d;
		}

		public byte[] channel2aId() {
			return channel2aId;
		}

		public ArrayList<Integer> channel2aValRaw() {
			return channel2aValRaw;
		}

		public byte[] delim2a() {
			return delim2a;
		}

		public byte[] channel2bId() {
			return channel2bId;
		}

		public ArrayList<Integer> channel2bValRaw() {
			return channel2bValRaw;
		}

		public byte[] delim2b() {
			return delim2b;
		}

		public byte[] channel2cId() {
			return channel2cId;
		}

		public ArrayList<Integer> channel2cValRaw() {
			return channel2cValRaw;
		}

		public byte[] delim2c() {
			return delim2c;
		}

		public byte[] channel2dId() {
			return channel2dId;
		}

		public ArrayList<Integer> channel2dValRaw() {
			return channel2dValRaw;
		}

		public byte[] delim2d() {
			return delim2d;
		}

		public byte[] channel3aId() {
			return channel3aId;
		}

		public ArrayList<Integer> channel3aValRaw() {
			return channel3aValRaw;
		}

		public byte[] delim3a() {
			return delim3a;
		}

		public byte[] channel3bId() {
			return channel3bId;
		}

		public ArrayList<Integer> channel3bValRaw() {
			return channel3bValRaw;
		}

		public byte[] delim3b() {
			return delim3b;
		}

		public byte[] channel3cId() {
			return channel3cId;
		}

		public ArrayList<Integer> channel3cValRaw() {
			return channel3cValRaw;
		}

		public byte[] delim3c() {
			return delim3c;
		}

		public byte[] channel3dId() {
			return channel3dId;
		}

		public ArrayList<Integer> channel3dValRaw() {
			return channel3dValRaw;
		}

		public byte[] delim3d() {
			return delim3d;
		}

		public byte[] channel4aId() {
			return channel4aId;
		}

		public ArrayList<Integer> channel4aValRaw() {
			return channel4aValRaw;
		}

		public byte[] delim4a() {
			return delim4a;
		}

		public byte[] channel4bId() {
			return channel4bId;
		}

		public ArrayList<Integer> channel4bValRaw() {
			return channel4bValRaw;
		}

		public byte[] delim4b() {
			return delim4b;
		}

		public byte[] channel4cId() {
			return channel4cId;
		}

		public ArrayList<Integer> channel4cValRaw() {
			return channel4cValRaw;
		}

		public byte[] delim4c() {
			return delim4c;
		}

		public byte[] channel4dId() {
			return channel4dId;
		}

		public ArrayList<Integer> channel4dValRaw() {
			return channel4dValRaw;
		}

		public byte[] delim4d() {
			return delim4d;
		}

		public byte[] channel5aId() {
			return channel5aId;
		}

		public ArrayList<Integer> channel5aValRaw() {
			return channel5aValRaw;
		}

		public byte[] delim5a() {
			return delim5a;
		}

		public byte[] channel5bId() {
			return channel5bId;
		}

		public ArrayList<Integer> channel5bValRaw() {
			return channel5bValRaw;
		}

		public byte[] delim5b() {
			return delim5b;
		}

		public byte[] channel5cId() {
			return channel5cId;
		}

		public ArrayList<Integer> channel5cValRaw() {
			return channel5cValRaw;
		}

		public byte[] delim5c() {
			return delim5c;
		}

		public byte[] channel5dId() {
			return channel5dId;
		}

		public ArrayList<Integer> channel5dValRaw() {
			return channel5dValRaw;
		}

		public byte[] delim5d() {
			return delim5d;
		}

		public byte[] channel6aId() {
			return channel6aId;
		}

		public ArrayList<Integer> channel6aValRaw() {
			return channel6aValRaw;
		}

		public byte[] delim6a() {
			return delim6a;
		}

		public byte[] channel6bId() {
			return channel6bId;
		}

		public ArrayList<Integer> channel6bValRaw() {
			return channel6bValRaw;
		}

		public byte[] delim6b() {
			return delim6b;
		}

		public byte[] channel6cId() {
			return channel6cId;
		}

		public ArrayList<Integer> channel6cValRaw() {
			return channel6cValRaw;
		}

		public byte[] delim6c() {
			return delim6c;
		}

		public byte[] channel6dId() {
			return channel6dId;
		}

		public ArrayList<Integer> channel6dValRaw() {
			return channel6dValRaw;
		}

		public byte[] delim6d() {
			return delim6d;
		}

		public Cubesatsim _root() {
			return _root;
		}

		public Cubesatsim.CubesatsimData _parent() {
			return _parent;
		}
	}

	public static class SrcAddress extends KaitaiStruct {
		public static SrcAddress fromFile(String fileName) throws IOException {
			return new SrcAddress(new ByteBufferKaitaiStream(fileName));
		}

		public SrcAddress(KaitaiStream _io) {
			this(_io, null, null);
		}

		public SrcAddress(KaitaiStream _io, Cubesatsim.Hdr _parent) {
			this(_io, _parent, null);
		}

		public SrcAddress(KaitaiStream _io, Cubesatsim.Hdr _parent, Cubesatsim _root) {
			super(_io);
			this._parent = _parent;
			this._root = _root;
			_read();
		}

		private void _read() {
			this.srcAddressStr = new String(this._io.readBytes(6), Charset.forName("ASCII"));
		}

		private String srcAddressStr;
		private Cubesatsim _root;
		private Cubesatsim.Hdr _parent;

		public String srcAddressStr() {
			return srcAddressStr;
		}

		public Cubesatsim _root() {
			return _root;
		}

		public Cubesatsim.Hdr _parent() {
			return _parent;
		}
	}

	private Hdr ax25Header;
	private UiFrame frametype;
	private Cubesatsim _root;
	private KaitaiStruct _parent;
	private byte[] _raw_ax25Header;

	/**
	 * @see <a href="https://www.tapr.org/pub_ax25.html">Source</a>
	 */
	public Hdr ax25Header() {
		return ax25Header;
	}

	public UiFrame frametype() {
		return frametype;
	}

	public Cubesatsim _root() {
		return _root;
	}

	public KaitaiStruct _parent() {
		return _parent;
	}

	public byte[] _raw_ax25Header() {
		return _raw_ax25Header;
	}
}
