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.

ShellSık kullanılanlar
# 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.py
Araçların hepsi depo kökünden çalıştırılır.
ESP-IDF gerektirenler

flashctl 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.

Neden bu kadar üreteç

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.