Araçlar
CircuitPal yalnızca editörden ibaret değil: kurulumdan derlemeye, firmware yüklemeden teşhise kadar her adımın bir aracı var. Aşağıdakilerin tamamı açık: robotu elinde tutan herkes kullanabilir.
Robotunla kullanacakların
Kurulum betiği
Uygulamayı, araç zincirini ve isteğe bağlı yerel yapay zekâyı tek komutla kurar. Sürümü sunucudan sorar, indirdiği dosyayı SHA-256 ile doğrular, tutmazsa durur.
cpalc, derleyici
Blokları önce okunabilir C koduna, sonra robotun çalıştırdığı bayt koduna çevirir. Studio içinde de bu derleyici koşar; ayrıca komut satırından kullanılabilir.
flashctl, firmware yükleyici
Kartı hangi durumda bulursa bulsun doğru yolu seçer: CDC ayaktaysa OTA, download modundaysa esptool, USB askıdaysa çıkar-tak der ve bekler. Tezgâhta öğrenilen gerçekler (DTR gerekliliği, 8 KB tampon için akış kontrolü) koda gömülü.
usb_ota, kablodan güncelleme
Kart normal çalışırken USB-CDC üzerinden yeni firmware yazar. Download moduna geçmek ve esptool gerekmez. İmza doğrulanmazsa kart eski imaja döner (ADR-008).
wifi_ota, kablosuz güncelleme
Kart kendi Wi-Fi ağını açar (CircuitPal-XXXXXX), bilgisayar ona bağlanır ve imaj HTTP ile basılır. Masaüstü uygulaması da aynı iki çağrıyı kullanır.
validate_bringup, canlı doğrulama
Güncelleme sonrası kartı SADECE HTTP uçlarından yoklar: flash silmez, bootloader’a dokunmaz, zorla yeniden başlatmaz. Kontrol uçları ile ses akışını ayrı portlarda ölçer.
panic_diagnostics, teşhis
Kart çöktüğünde seri porttan kanıt toplar. Yalnız OKUR: karta reset ya da veri göndermez. UART coredump gövdesini ayrı bir dosyaya ayırır.
studio_serve, yerel sunucu
Studio’yu depo kökünden servis eder ve her yanıtı `no-store` ile gönderir. Basit bir dosya sunucusu tarayıcı önbelleği yüzünden eski modülü koşturuyordu.
HTTP API
Sürümlü uçlar: kimlik, lisans, bulut projeleri ve sürüm manifesti. Kendi aracını yazacaksan sözleşme burada.
# Kurulum betiği
curl -fsSL https://axion-robot.com/install.sh | bash
# cpalc, derleyici
python3 tools/cpalc/cpalc.py program.c -o program.bin
# flashctl, firmware yükleyici
python3 tools/flashctl/flashctl.py --build --monitor
# usb_ota, kablodan güncelleme
python3 tools/usb_ota/usb_ota.py image.bin
# wifi_ota, kablosuz güncelleme
python3 tools/wifi_ota/wifi_ota_push.py cpal_bringup.bin
# validate_bringup, canlı doğrulama
python3 tools/verification/validate_bringup.py --ip 192.168.1.49
# panic_diagnostics, teşhis
python3 tools/diagnostics/panic_diagnostics.py capture --output panic.log
# studio_serve, yerel sunucu
python3 tools/studio_serve/serve.pyflashctl kartı sıfırdan yazabildiği için ESP-IDF ortamı ister (source ~/esp/idf_env.sh). usb_ota ve wifi_ota istemez: ikisi de çalışan bir karta konuşur.
Üreteçler
Bunlar kaynaktan dosya üretir; depoyla çalışıyorsan gerekir, yalnız robot kullanıyorsan gerekmez. Hepsinin --check kipi vardır ve sürekli tümleştirmede çıktının güncelliği bununla doğrulanır.
board_gen
Donanım tanımından (`cpal_v2.yaml`) C başlığı üretir ve donanım sözleşmelerini DOĞRULAR: çakışan pin, eksik güvenlik kuralı üretim aşamasında düşer.
opcodes_gen
Tek bir `opcodes.yaml`dan firmware, derleyici ve editör tablolarını birlikte üretir. Üç yerde elle tutulsaydı er geç ayrı düşerlerdi.
vectors_gen
Protokol test vektörlerini BAĞIMSIZ bir üçüncü uygulamayla üretir. Firmware ile editör aynı hatayı paylaşıyorsa bunu ancak üçüncü bir uygulama yakalar.
examples_build
Örnek program kitaplığını üretir. Her örnek gerçek derleyiciden geçer, yani bozuk bir örnek sessizce kitaplığa giremez.
sdkconfig_check
Derlenmiş firmware yapılandırmasını okur ve sözleşmeye bağlı bayrakların gerçekten açık olduğunu doğrular. Biri kapanırsa derleme kırmızıya döner.
oled_image
Açılış görselini ekranın beklediği sayfa biçimine çevirir; PNG kaynak, çıktı C başlığı.
Ortak ilke: üretilen dosya elle düzenlenmez
Blok tanımları, C kütüphanesi ve robotun komut tablosu tek bir kaynaktan üretilir. Üretilmiş bir dosyayı elle düzeltmek, bir sonraki üretimde sessizce kaybolan bir düzeltme demektir; onun yerine kaynak değişir ve üreteç yeniden koşar.
Blok, C fonksiyonu ve robot komutu üç ayrı yerde elle yazılsaydı er geç birbirinden ayrı düşerdi. Üreteçler bu üçünü tek tanıma bağlar; denetim adımı da çıktının güncel olduğunu her koşuda doğrular.
Yayımlanmayanlar
Eksiksiz olmak için: aşağıdakiler bilinçli olarak dışarıya açılmaz. Sebep her birinde farklı, ama hiçbiri “anlatmaya değmez” değil.
- Üretim betiği, sunucuya dağıtım yapar, sırları taşır ve üretim veritabanına dokunur. Yetkisi olmayan biri için işe yaramaz, olan biri için tehlikelidir.
- Sürüm imzalama, imzalayan anahtara erişir. Anahtar dışarı çıkarsa imza hiçbir şey ifade etmez.
- Marka çıkarma ve durum paneli, depo içeriğine bağlı çalışır; depo dışında anlamı yoktur.