Pompa Insulin Rekayasa Balik untuk Terapi DIYSekitar tiga tahun lalu, saya mendengar tentang sebuah situs web yang menawarkan hadiah karena sangat dekat dengan hati saya: membalikkan komunikasi teknik dengan pompa insulin. Saya sudah membantu menciptakan
sistem untuk anak perempuan saya yang disebut
Loop , dengan pompa Medtronic, di mana saya membalikkan komunikasi insinyur (sebagian besar protokol komunikasi Medtronic utama diterjemahkan oleh Ben West menggunakan perangkat USB Carelink, dan saya menemukan frekuensi radio dan melakukan beberapa pekerjaan tambahan pada protokol). Tetapi pompa Medtronic perlu dimatikan selama senam selama beberapa jam. Desain tubeless dari pompa Omnipod ini tampak menarik bagi saya, dan saya memiliki semua alat untuk bekerja.
Sistem Omnipod terdiri dari pompa kecil sekali pakai yang disebut modul (pod) dan unit kontrol (PDM).
Karena PDM berkomunikasi dengan modul melalui radio, dan modul tidak memiliki antarmuka bawaan, ini berarti bahwa itu sepenuhnya dikendalikan oleh radio. Ada kemungkinan integrasi penuh dengan Loop, hanya menggunakan
RileyLink atau versi modifikasi.
James Wedding mengangkat hadiah, dan itu menarik banyak perhatian, dan kemudian orang yang tepat yang membantu dalam pekerjaan itu.
Radio yang Ditentukan Perangkat Lunak
SDR adalah
alat yang hebat . Dia membuat dunia radio yang tersembunyi terlihat. Ada berbagai jenis pesan yang terus mengalir di udara, dan alat-alat ini memungkinkan Anda untuk melihat-lihat, melihat pesan, dan setelah beberapa pekerjaan - men-decode flash kecil yang Anda lihat di sana. Jika Anda mencari pesan dari perangkat tertentu, Anda perlu tahu di daerah mana untuk memulai pencarian. Di sinilah dokumen publik FCC berguna.
Dokumentasi FCC untuk PDM,
RBV-019 , mengatakan perangkat mentransmisikan dalam pita 433 MHz. Setelah mengkonfigurasi perangkat lunak SDR untuk mendengarkan dalam rentang 433 MHz, sinyal berikut ini muncul ketika mengeluarkan status dari PDM:

Seperti yang akhirnya saya ketahui, dua garis terang ini menunjukkan jenis modulasi tertentu yang disebut
frequency shift keying , atau FSK. Ini berarti bahwa frekuensi sinyal bervariasi tergantung pada informasi yang dikirimkan. Bit 1 dikirim sebagai frekuensi yang lebih tinggi (garis atas), dan 0 dikirim dengan frekuensi yang sedikit lebih rendah (garis bawah). Dengan menggunakan alat
inspectrum, kita dapat menganalisis data untuk lebih jelas mengenali 1 dan 0. Berikut adalah tampilan yang sangat diperbesar dari pesan pertama:

Saya menulis skrip python untuk mengekstrak bit-bit ini sehingga kita dapat melihatnya sebagai paket-paket utuh.

Ternyata pola berulang ini adalah bagian dari
pembukaan . Untuk menghemat energi, penerima sering masuk ke mode tidur dan bangun secara berkala untuk memeriksa sinyal. Pemancar mengirimkan bukaan cukup lama untuk penerima untuk menangkapnya selama salah satu periode mendengarkan singkat. Ketika penerima mendengar mukadimah, ia bangun sampai data nyata muncul.
Anda harus melalui lapisan lain sebelum Anda mendapatkan data batch yang sebenarnya. Anda tidak dapat mengirim data Anda melalui radio dengan cara yang sama seperti bit asli, karena penerima menggunakan transisi untuk menyinkronkan dalam waktu kapan harus menunggu bit berikutnya. Jika Anda memiliki satu set nol atau satu, maka penerima mungkin tidak sinkron. Oleh karena itu, komunikasi radio biasanya menggunakan pengodean untuk memverifikasi bahwa ada cukup transisi. Komunikasi Omnipod menggunakan apa yang disebut
pengkodean Manchester . Setiap bit dikodekan dalam dua bit. 1 dikodekan sebagai 10, dan 0 dikodekan sebagai 01.
Butuh waktu lama untuk mengetahuinya, dan ada banyak teori di
saluran openomni di Slack ketika kami mencoba mengulangi bit asli.
Mark Brighton ,
Dan Caron, dan
@larsonlr telah mencapai beberapa keberhasilan menggunakan
RFCat dan
Ti Stick untuk menangkap paket.
Evarist Kourjo akhirnya menulis alat yang disebut
rtlomni , ia menggunakan penerima USB rtl-sdr untuk mendengarkan paket dan men-decode mereka, yang ternyata sangat nyaman dan lebih dapat diandalkan daripada metode yang didasarkan pada TI Stick.
Penguraian paket
Setelah menerima bit yang sebenarnya, kami mulai mempelajari struktur paket. Berdasarkan bit yang diubah antara modul yang berbeda dan tim yang berbeda, kami membuat struktur yang terlihat seperti ini:

CRC8
Radio jauh dari media transmisi yang ideal. Ada banyak sumber gangguan yang membuat penerima mendengar 1 ketika 0 dikirim, dan sebaliknya. Penting untuk mengetahui kapan ini terjadi, sehingga sebagian besar protokol menggunakan checksum, yang sering disebut CRC. Penerima menghitung CRC saat data diterima, dan byte terakhir dari paket termasuk CRC yang dihitung oleh pemancar. Jika tidak cocok, penerima membuang paket dan menunggu pengiriman ulang.
Protokol Omnipod menggunakan CRC 8-bit standar. Ketika kami menemukannya, kami memutuskan bahwa kami sangat dekat dengan memahami pesan. Betapa sedikit yang kami tahu ...
Pesan, CRC16
Beberapa pesan terlalu besar untuk muat dalam satu paket, sehingga mereka dibagi menjadi beberapa paket. Kami mulai menyatukan format pesan dan memperhatikan sekumpulan bit di akhir setiap pesan, yang terlihat seperti CRC 16-bit. Tapi itu aneh: 5 dari 16 bit tidak pernah disetel. Kami mencoba
berbagai metode untuk mengetahui bagaimana ini dikodekan, tetapi tidak ada yang berhasil.
Ini adalah masalah besar pertama: kami dapat terus bekerja pada bit lain dalam pesan, tetapi itu tidak akan membantu banyak untuk memahami apa yang sedang dikirim, dan kami tidak akan dapat menghasilkan paket baru sendiri, sehingga kemajuan melambat.
Beberapa bulan berlalu hampir tidak berhasil. Akhirnya, pada musim dingin 2016, seorang anggota grup dengan nama panggilan
@lorelai melaporkan bahwa ia telah berhasil menyalin firmware dari chip ARM yang lebih besar ke PDM dan memulai proses pembongkaran yang membosankan: menerima instruksi CPU dan mengubahnya menjadi kode yang dapat dibaca manusia dengan variabel semantik dan nama fungsi. Dia melakukan pekerjaan luar biasa menemukan berbagai metode yang digunakan untuk mengirimkan data.
Saya melihat salah satu rutinitas tanpa judul dan memperhatikan bahwa itu tampak seperti implementasi standar perhitungan CRC dari sebuah tabel. Dan tabel memiliki nilai untuk CRC 16-bit standar. Saya menulis implementasi saya sendiri di atas tabel, dan itu diuji seperti CRC biasa. Kemudian saya hati-hati melihat bagaimana fungsi itu ditulis. Implementasi CRC yang normal terlihat seperti ini:
while (len--) { crc = (crc << 8) ^ crctable[((crc >> 8) ^ *c++)]; }
Implementasinya terlihat seperti ini ::
while (len--) { crc = (crc >> 8) ^ crctable[((crc >> 8) ^ *c++)]; }
Perhatikan perbedaannya? Apa yang seharusnya menjadi operator shift kiri bitwise entah bagaimana dikodekan sebagai shift kanan. Ini adalah kesalahan; Tidak ada alasan untuk melumpuhkan algoritma CRC Anda sendiri, karena ini membuat sulit untuk mengidentifikasi pesan yang rusak.
Kami kembali beroperasi! Dan mereka kembali bekerja pada pesan decoding, sesi rekaman dari PDM untuk pengiriman bolus [obat], basis sementara [Tingkat Basal Sementara menentukan peningkatan atau penurunan pengiriman insulin - kira-kira. lane], penangguhan pengajuan, dll.
Nomor penggunaan tunggal
Semua tim pengiriman insulin memiliki sepotong data 4-byte pada awal pesan, yang tampak seperti beberapa bentuk kriptografi. Sekali lagi, kami mencoba berbagai cara menafsirkan dan menganalisisnya dalam konteks pesan yang dikirim, tetapi itu bukan CRC (kadang-kadang kami melihat 4 byte yang sama bahkan dalam pesan yang berbeda). Dan kadang-kadang kita melihat gambar itu berulang. Itu terlihat, mungkin, sebagai bagian dari protokol untuk mencegah reproduksi data. Dalam protokol lain, fungsi serupa disebut
nonce .
Salah satu opsi yang kami pertimbangkan adalah merekam basis pesan untuk memutar perintah yang diberikan. Bahkan jika alamat masing-masing modul berbeda, sekarang kami tahu cara membuat CRC, sehingga kami bisa mengambil salinan perintah sebelumnya, memasukkan alamat baru pada pesan dan menceritakan CRC. Hanya ini yang mencegah kami menggunakan strategi ini. Terlepas dari perintahnya, modul hanya menerima notce berikutnya dalam urutan, dan kami tidak tahu bagaimana membuat notce berikutnya.
Tapi! Lagipula, kita memiliki firmware PDM yang terkompilasi, kita bisa melihatnya! Jadi, kami mempelajari firmware PDM, melacak pembuatan pesan dalam kode dan menemukan di mana empat byte ini seharusnya. Tetapi alih-alih metode yang menghitung beberapa kriptografi, kami hanya menemukan empat karakter
INS.
. Omong kosong apa?!?! Nah, entah bagaimana area pesan ini perlu diperbarui nanti dalam pipa.
Ada chip lain di PDM, lebih dekat ke radio. Itu adalah chip yang sama yang digunakan dalam modul, dengan pengidentifikasi SC9S08ER48, yang tidak didokumentasikan di Internet. Itu mungkin dibuat untuk memesan Insulet. Mungkin kita bisa menghapus firmware dari chip ini. Sayangnya, chip itu diblokir, yang mencegah penyalinan firmware.

Pekerjaan melambat lagi ... itu seperti jalan buntu yang nyata. Kami mengerahkan semua upaya mental kami dalam hal ini, dan kami tidak memiliki petunjuk bagus dalam matematika di baliknya. Dan chip ER48, yang (mungkin) menyimpan rahasia, diblokir, dan sulit untuk menemukan informasi publik apa pun yang akan membantu memecahkannya.
Sinar-X
Mencoba memahami ER48, beberapa anggota komunitas Slack menyarankan untuk mengambil x-ray. Itu sangat keren, tapi, sayangnya, tidak membuka peluang baru.
Tembakan umum
Tembakan terperinciOtopsi dan pengambilan gambar
Dan Caron memutuskan untuk berpaling ke seorang peneliti,
Dr. Sergey Skorobogatov dari University of Cambridge di Inggris. Dan membaca bahwa dia memiliki pengalaman mengekstraksi kode dari chip yang terkunci, dan meyakinkannya untuk melihat masalah kita. Skorobogatov melakukan penelitian di bidang penggunaan SEM (scanning electron microscope) untuk rekayasa terbalik dari mikrosirkuit. Dia menyarankan itu mungkin, tetapi itu akan mahal, membutuhkan peralatan yang mahal dan tidak menjamin hasilnya.
Joe Moran , yang baru-baru ini mulai menggunakan Loop setelah kami bertemu di hackathon Nightscout pada musim gugur 2016, setuju untuk membantu proyek tersebut. Dia setuju dengan perusahaan Silicon Valley, Nanolab Technologies, untuk membuka dan memotret chip, dan juga dengan baik mendanai karya Nanolab dan Dr. Skorobogatov (serta modul pribadinya).
Skorobogatov meminta Nanolab untuk menerapkan berbagai teknik pencitraan untuk mengetahui apakah mungkin untuk memecahkan perlindungan dengan metode non-invasif atau semi-invasif yang diketahui. Hasilnya, banyak gambar muncul, beberapa di antaranya sangat indah. Ini adalah gambar mikroskopis optik dari matriks silikon.
Pandangan umum dari rangkaian mikro di bawah mikroskop optik
Pandangan umum dari rangkaian mikro di bawah mikroskop optikGambar juga diambil dari area spesifik dari matriks menggunakan mikroskop elektron pemindaian. Dengan voltase berbeda, persiapan permukaan berbeda, dan peralatan berbeda.
Gambar SEM sel flash. Tidak menampilkan dataSayangnya, tidak ada gambar ini yang menunjukkan isi sebenarnya dari memori flash.
Skorobogatov memiliki satu metode terakhir, yang hanya dapat digunakan jika terjadi kegagalan. Ini adalah metode yang dipatenkan, yang penggunaannya harus mendapatkan izin dari universitas. Skorobogatov melakukan tes awal dan mengkonfirmasi bahwa ia dapat membaca data pada chip ini. Tetapi sebelum melanjutkan, perlu untuk menandatangani NDA, dan karena itu negosiasi diadakan tentang siapa yang akan menerima konten dari firmware yang diekstraksi.
Pada akhirnya, NDA menandatangani yayasan Nightscout, dan mengambil tanggung jawab untuk mencegah pengungkapan yang tidak sah atas metode dan hasil ekstraksi memori.
Hasil dari perjanjian dan pekerjaan ini
adalah artikel luar biasa yang ditulis oleh Dr. Sergei Skorobogatov, serta kode firmware. Dari pertama kali ada beberapa kesalahan dalam kode, tetapi ini sudah cukup untuk memulai. Di Hackathon Spring Nightscout, Joe menoleh ke teman-temannya jika ada yang ingin melakukan pembongkaran. Tidak ada yang mengangkat tangannya. Mengubah instruksi prosesor menjadi sesuatu yang dapat dimengerti adalah pekerjaan yang melelahkan, dan sangat sedikit orang yang tahu bagaimana melakukannya. Saya mencoba mempelajari assembler menggunakan dokumentasi CPU, tetapi saya meraih sangat sedikit dan kecewa. Lainnya optimis meminta kode firmware dengan harapan kemajuan cepat, kemudian menyadari skala dan kompleksitas tugas - dan diam-diam jatuh.
Contoh pembongkaran instruksi SC908Ternyata Joe juga memiliki pengalaman luas bekerja dengan assembler, dan ia mulai melakukan tugas yang sulit ini. Pada bulan Juli, Dr. Skorobogatov menyelesaikan operasi ekstraksi memori kedua dengan kesalahan yang jauh lebih sedikit. Selama musim panas, Joe Moran bekerja tanpa lelah untuk menampilkan sejumlah besar instruksi prosesor dan secara bertahap mengintegrasikannya ke dalam keseluruhan gambar pseudocode modul.
Pada akhirnya,
Ken Shirriff , seorang ahli teknik perangkat keras terbalik, bergabung dengan kami, dan ia sangat mempercepat prosesnya. Bersama-sama, Joe dan Ken akhirnya menerjemahkan kode yang cukup untuk menemukan fungsi yang mengkode nonce. Ini terjadi pada bulan September 2017.
RileyLink dan Loop
Kami memperbarui skrip Python openomni, tetapi sekarang saatnya untuk fokus pada RileyLink + iOS, jadi saya mulai bekerja pada OmniKit dan pembaruan firmware untuk RileyLink. Saya percaya bahwa kami memiliki dasar-dasar protokol, dan sisanya hanya detail. Sekali lagi, benar-benar meremehkan berapa yang akan datang.

Saya harus menulis firmware baru yang menangani modulasi dan pengkodean modul. Saya juga harus menulis ulang bagaimana dua chip pada RL berbicara satu sama lain untuk memproses nol, karena dalam Medtronic nol adalah ujung khusus dari paket marker. Sebagian besar Loop harus dirancang ulang untuk mendukung banyak pompa, serta antarmuka baru untuk mendukung pemasangan, penonaktifan, dan penanganan kesalahan. Untungnya,
Nate Racklift meletakkan dasar yang kuat di Loop untuk membuat ini semua mungkin.
Sementara itu, pekerjaan berlanjut untuk memahami format tim. Semuanya didokumentasikan dengan cermat pada
openomni wiki , dokumentasi protokol yang paling komprehensif. Joe, Evarist dan
Elke Jรคger telah melakukan pekerjaan yang sangat hebat dari waktu ke waktu dalam memecahkan kode pesan dan memperbarui halaman. Berbagai anggota saluran Slack telah berkontribusi pada penangkapan paket PDM dan modul untuk membantu upaya decoding keseluruhan.
Decoding adalah pekerjaan yang menyenangkan, dengan banyak kemenangan kecil, karena setiap komponen dari masing-masing tim mendekripsi, dan saya sangat suka mengerjakan bagian ini, secara bertahap menambahkan kode ke Loop. Pada April 2018, saya berbagi di Slack bahwa saya membuat "kanulasi primer dipasangkan melalui iPhone + RL sesuai dengan jadwal basal yang diprogram, dan kemudian 5 unit menjadi sakit."
Firmware RL 2.0 selesai pada Juli 2018, dan pengiriman baru sudah sesuai dengannya. Diharapkan papan ini dapat digunakan dengan Loop dan Omnipod, tetapi antena 915 MHz yang ada terlalu buruk untuk bekerja secara efektif pada 433 MHz.
Decoding dan implementasi telah mengalami kemajuan signifikan selama musim panas, dan Loop secara bertahap mendekati kinerja. Joe melakukan hal yang luar biasa dengan memberi saya dana jadi saya berhenti dari pekerjaan saya dan fokus pada proyek ini, dan akhirnya saya bergabung dengan tim Tidepool yang luar biasa. Tentu saja, di bidang DIY dan peraturan perundang-undangan tentang peralatan medis ada lebih banyak peristiwa yang tidak akan saya bahas, tetapi itu adalah musim panas yang sangat menarik!
Screamers
Ketika lebih banyak fungsi muncul di driver, saya menghubungkannya ke Loop, menyalakan kemampuan untuk mengkonfigurasi pengiriman tepat waktu. Pada tahap ini, modul "mencolok" sering diperoleh ketika beberapa pemeriksaan modul internal menemukan masalah dan dia berhenti memberikan insulin.
Tapi ini tampaknya menjadi masalah yang dapat dipecahkan, karena kami terus menemukan perbedaan kecil dalam paket Loop dan PDM asli saat mengirim perintah secara manual, dan saya berasumsi bahwa jika kami memperbaiki semuanya, "jeritan" akan berhenti.
Lingkaran kerja!
Pada 3 Oktober 2018, Joe mengenakan modul Loop yang dikelola dan menjadi pengguna Loop Omnipod pertama, meskipun dia tidak memberi tahu saya segera karena dia tahu bahwa saya akan khawatir. Ketika dia memberi tahu saya, saya masih khawatir. Kami melihat bagaimana modul bekerja, dan memahami fungsionalitas, dan algoritma dasar diuji untuk waktu yang lama, tetapi masih ...

Sebulan kemudian, di hackathon Nightscout pada bulan November 2018, beberapa petualang memutuskan untuk mencobanya sendiri, dan juga menjadi bagian dari kelompok pengujian tertutup kecil yang akan tumbuh hingga lebih dari 30 orang sebelum kode diterbitkan.
Sayangnya, kami masih menjumpai modul "jeritan", sering terjadi sebelum selesainya penggunaan tiga hari penuh, dan kami dengan hati-hati membandingkan perintah Loop dengan sampel PDM. Dalam proses ini, Elke sangat berguna: ia menulis skrip untuk secara otomatis memeriksa perintah dengan versi asli. Saya mulai khawatir bahwa operasi modul yang terputus-putus disebabkan oleh peningkatan kebutuhan baterai untuk komunikasi setiap lima menit.
Keran regulator tegangan di modul, dibor melalui plastik panel belakang, pada superglueOleh karena itu, saya mulai mengukur tegangan suplai modul menggunakan Arduino, menulis data dan menyimpannya dalam database lokal untuk visualisasi. Saya membandingkan PDM dan Loop.
Perubahan jangka panjang pada tegangan pasokan modulSayangnya, ini juga menjadi jalan buntu; menggunakan PDM dan menyuntikkan insulin dalam jumlah besar, saya bisa membawa modul ke tegangan yang lebih rendah daripada selama masa pakai modul Loop, dan tidak bisa membuat modul โmenjeritโ. Sepertinya stres itu bukan masalah, pasti ada yang lain.
RileyLinks dengan antena koil 955 MHz (kiri) dan 433 MHz (kanan)Pada titik tertentu, saya perhatikan bahwa jika pertukaran pesan dengan modul gagal, modul terkadang terus mencoba untuk mengakhiri pertukaran dengan mengirim ulang paket berulang kali. Log penguji juga menunjukkan banyak gangguan, jadi saya mulai bereksperimen dengan antena. Kedua masalah tersebut harus terkait dengan kualitas komunikasi. Saya berencana untuk mencoba antena yang berbeda dan memesannya di berbagai tempat di Internet, tetapi saya tidak punya waktu untuk mengujinya sampai ini menjadi prioritas.
Saya memiliki beberapa antena fleksibel 433 MHz yang dapat dipasang ke bagian dalam kandang RL. Mereka sering menunjukkan kinerja yang lebih baik dalam beberapa skenario, tetapi tidak dalam skenario lain; terlalu tidak bisa diandalkan. Ketika saya sampai di reel, itu menunjukkan kinerja yang baik dengan sangat konsisten dan pada rentang yang sangat menakjubkan. Saatnya membuat kasus baru untuk RileyLink.
Dengan antena baru dan beberapa optimasi yang mengurangi olahpesan sambil tetap melakukan penyesuaian setiap 5 menit, jeritan menjadi sangat jarang. Mungkin sebanding dengan penggunaan modul biasa dengan PDM. Selama 7.500 jam terakhir pengujian real-time, 94% dari modul selesai tanpa gagal.
Pengujian dan dokumentasi
Grup pengujian perlahan-lahan tumbuh: pengguna baru terus-menerus bergabung dengan sistem, yang dengan tampilan segar dapat mengevaluasi bagian mana yang terlihat membingungkan. Penguji ini memasang banyak modul mencolok dan membuat kontribusi yang sangat besar untuk meningkatkan kinerja Loop dengan Omnipod. Pada dasarnya, mereka mengirim laporan masalah dan log kerja.
Laporan-laporan ini memiliki log pesan yang dapat dianalisis menggunakan alat yang dibuat oleh Elke. Ini memberi ide jika kita mendapat perintah yang menyimpang, dan juga memungkinkan Anda untuk mengumpulkan statistik pada bagian tertentu dari interaksi Loop dengan modul.
Marion Barker bergabung dengan kelompok pengujian dan menambahkan pelaporan khusus dan statistik tambahan tentang kemajuan pengujian - dan kami dapat menggunakan statistik modul suksesnya terhadap kegagalan agar memiliki gagasan kemajuan tingkat tinggi.
Pada akhirnya,
Katie DiSimone bergabung dengan kelompok pengujian. Dia memulai restrukturisasi besar
loopdocs.org dengan dokumentasi tentang penggunaan Loop dengan banyak perangkat. Menunggu versi Loop yang bekerja dengan Omnipod sangat tinggi, dan tanpa dokumentasi yang baik jelas bahwa kami akan kewalahan dengan pertanyaan yang sama.
Fitur Lingkaran Baru
Integrasi dengan Omnipod memerlukan pemikiran ulang dari beberapa elemen antarmuka dan penambahan kontrol baru. Modul tidak melaporkan baterai, dan pengguna dapat melakukan sedikit dengan biaya rendah jika ini terjadi, jadi menampilkan widget tingkat baterai tidak masuk akal. Selain itu, tanpa antarmuka pengguna pada pompa, pengguna harus dapat dengan cepat membatalkan bolus. Ikon tangki menggambarkan tangki Medtronic, jadi kami ingin membuatnya kembali. Terima kasih kepada
Paul Forgione untuk mengembangkan logo modul, yang sekarang menunjukkan tingkat tangki.

Ucapan Terima Kasih
Terima kasih kepada semua orang yang telah membantu kami melangkah sejauh ini sehingga kami menyadari tujuan yang telah kami tetapkan sejak lama. Saya tahu bahwa saya tidak menyebutkan semua yang terlibat dan tidak semua acara. Ini tidak mungkin dalam satu artikel, dan saya hanya punya pengalaman pribadi. Sulit membayangkan berapa jam yang dibutuhkan. Jika Anda menambahkan semuanya, saya yakin itu adalah angka yang mengejutkan. Belum lagi pekerjaan menciptakan Omnipod itu sendiri, yang menurut saya, menaungi semua upaya ini. Jadi terima kasih semuanya. Selain itu, banyak dari jam-jam ini seharusnya dihabiskan bersama keluarga. Saya sangat menghargai pengertian istri dan anak-anak saya karena waktu yang saya habiskan untuk itu, dan saya ingin berterima kasih kepada mereka juga.
Catatan
Saya harus menyebutkan
Joachim Ornstedt sebagai salah satu kontributor decoding openomni, serta pencipta mungkin integrasi pertama dengan omnipod. Dia membangun perangkat yang menggunakan optical character recognition (OCR) untuk mengekstraksi data dari PDM, dan menghubungkan tombol angka ke PDM fisik melalui mikrokontroler lain. Pendekatan ini sulit untuk diukur, tetapi sangat cerdas dan melewati banyak masalah yang harus kami hadapi dengan solusi berdasarkan RE. Saya benar-benar mengagumi bagaimana dia mengatasi masalah dan mengatur kerja untuk sebagian kecil dari waktu yang dibutuhkan untuk membuat perangkat bekerja dengan Loop.