Ejemplo n.º 1
0
        private static void parse_status_response(Bytes response, Pod pod)
        {
            pod.state_last_updated = DateTime.UtcNow;
            var  s0 = response[0];
            uint s1 = response.DWord(1);
            uint s2 = response.DWord(5);

            parse_delivery_state(pod, (byte)(s0 >> 4));
            pod.state_progress = (PodProgress)(s0 & 0xF);

            pod.radio_message_sequence = (int)(s1 & 0x00007800) >> 11;
            pod.insulin_delivered      = ((s1 & 0x0FFF8000) >> 15) * 0.05m;
            pod.insulin_canceled       = (s1 & 0x000007FF) * 0.05m;
            pod.state_faulted          = ((s2 >> 31) != 0);
            pod.state_alert            = (byte)((s2 >> 23) & 0xFF);
            pod.state_active_minutes   = (uint)((s2 & 0x007FFC00) >> 10);
            pod.insulin_reservoir      = (s2 & 0x000003FF) * 0.05m;
        }
Ejemplo n.º 2
0
        private static void parse_version_response(Bytes response, Pod pod)
        {
            bool lengthyResponse = false;

            pod.state_last_updated = DateTime.UtcNow;
            int i = 1;

            if (response.Length == 27)
            {
                pod.id_version_unknown_7_bytes = response.ToArray(i, i + 7);
                i += 7;
                lengthyResponse = true;
            }

            var mx = response.Byte(i++);
            var my = response.Byte(i++);
            var mz = response.Byte(i++);

            pod.id_version_pm = $"{mx}.{my}.{mz}";

            var ix = response.Byte(i++);
            var iy = response.Byte(i++);
            var iz = response.Byte(i++);

            pod.id_version_pi = $"{ix}.{iy}.{iz}";

            pod.id_version_unknown_byte = response.Byte(i++);
            pod.state_progress          = (PodProgress)(response.Byte(i++) & 0x0F);
            pod.id_lot = response.DWord(i);
            pod.id_t   = response.DWord(i + 4);
            i         += 8;
            if (!lengthyResponse)
            {
                var rb = response.Byte(i++);
                pod.radio_low_gain = rb >> 6;
                pod.radio_rssi     = rb & 0b00111111;
                pod.radio_address  = response.DWord(i);
            }
            else
            {
                pod.radio_address = response.DWord(i);
            }
        }
Ejemplo n.º 3
0
        public static Packet parse(Bytes data)
        {
            if (data.Length < 5)
            {
                return(null);
            }

            var crc_computed = CrcUtil.Crc8(data.Sub(0, data.Length - 1).ToArray());
            var crc          = data[data.Length - 1];

            if (crc != crc_computed)
            {
                return(null);
            }

            var address  = data.DWord(0);
            var d4       = data.Byte(4);
            var type     = (RadioPacketType)(d4 & 0b11100000);
            var sequence = d4 & 0b00011111;
            var body     = data.Sub(5);

            return(new Packet(address, type, sequence, body));
        }