IoT için C veya C ++ 'da yaygın API'lar


9

IoT için C veya C ++ 'da ortak veya olağan API'lar (veya kütüphaneler), bir belge, bir dizi programlama arabirimi olması anlamında nelerdir? (Örneğin POSIX işletim sistemleri içindir, Qt GUI içindir, vb.).

Bu kısa sayfa sorumu motive ediyor (IoT için statik kaynak kodu analiz araçları geliştirmekle ilgileniyorum). Ben sadece yasal standartlar için değil, aynı zamanda çeşitli endüstriyel alanlarda onlar için mevcut başlık dosyaları ile - C veya C ++, yaygın olarak kullanılan API veya kütüphaneler için arıyorum . Web API'leri (bazı HTTP isteklerini tanımlayan kurallar) veya yalnızca herhangi bir API veya bunları uygulayan bir kütüphane olmadan ağ protokolleriyle ilgilenmiyorum .

(bu yüzden kendimi IoT uygulamaları geliştirmekle ilgilenmiyorum, ancak IoT yazılımı geliştiricilerine yardımcı olmak için kaynak kodunu çalıştıran ve analiz eden yazılım mühendisliği araçları geliştirmek istiyorum)

Hatta sağlık, lojistik, ulaşım, akıllı şebekeler, akıllı binalar vb. Gibi sektöre özgü IoT API'leri veya kütüphaneleriyle ilgilenebilirim; bir C veya C ++ API veya kitaplığı olduğu sürece.


Statik kaynak kodu analizi üzerinde çalışan bir araştırma grubundayım ve IoT yazılım geliştiricisine yardımcı olmak için C veya C ++ kaynak kodunu analiz eden araçlar geliştirmek istiyoruz.

Ancak, bu konuda çalışmadan önce finanse edilecek bir yol bulmam gerekiyor.

IoT platformlarını hedefleyen kaynak kodu (C, C ++ ve Ada'da ...) yazan geliştiriciler ve mühendisler için özel bir araç (tercihen açık kaynak, mevcut teknolojilerin üzerinde) geliştirmenizi öneririz. Bu araç, hedeflenen yazılım geliştirme kitine entegre edilecektir. Bu araç, kod kodlama kuralları, değişmezler ve bu yazılım çerçevelerine özgü iyi uygulamalara karşı kaynak kodun geçerliliğini analiz edip kontrol ederek IoT yazılım geliştiricisine yardımcı olabilir. Temel amaç yazılım kalitesini artırmak ve pazara sunma süresini hızlandırmaktır. İlgili ise, araç yazılım performansını artırmak ve / veya kod boyutunu azaltmak için belirli kaynak kodu optimizasyonları yapabilir.


NB. Bu IoT Eclipse web sayfası birkaç standart listeliyor. Onlar için kaynak kodu analizörleri geliştirmeye değerse, bunları uygulayan API'ler ve kütüphanelerle ilgileniyorum (ve diğer herhangi bir IoT de facto alana özgü standart).


@Basile Bu ticari mi yoksa FOSS mu olacak? Her durumda, ilerlemenizi takip etmenin herhangi bir yolu var mı? Bunun aylar, hatta yıllar alabileceğini anlıyorum, bu yüzden izlemek için bir UTL veya posta listesi çok hoş olacak
Mawg, Monica

Çoğunlukla bir düzine yıldan beri özgür yazılım üzerinde çalışıyorum, umarım FOSS olur. Bununla birlikte, bunun üzerinde çalışmaya başlamak için bazı konsorsiyumlara katılmam (veya biraz AR-GE hibesi veya başka bir fon almam) gerekiyor.
Basile Starynkevitch

1
Şunu mu demek istediniz: CMSIS keil.com/pack/doc/CMSIS/General/html/index.html
pjc50

1
IoT söz konusu olduğunda MQTT ve Mosquitto oldukça popülerdir. Belki Libmosquitto API'sı kod çözümleyiciniz için iyi bir hedef olabilir?
Bence Kaulics

1
IoT'nin özellikle ilgilendiğiniz herhangi bir yönü var mı? Bence Kaulics'in önerdiği iletişim tarafı var (MQTT, CoAP, 6LoWPAN vb.) Veya Android Things veya Ubuntu IoT gibi tüm IoT platformları var . Hangi kısmı ele almak istiyorsun?
Aurora0001

Yanıtlar:


8

Basile, sanırım burada ince bir ayrımımız yok.

IoT için standart gibi bir Posix'ten bahsettiğinizde, bir protokolü saran kütüphanelerden bahsettiğinizi düşünüyorum.

On yıllar boyunca ( öksürük ) telefon ve uydu iletişimi için protokol yığınları uygulamak için kullanıldığından, ( muhtemelen farkında olduğunuz gibi) bu protokollerin ihtiyaca göre zaten kesin olarak tanımlandığını söyleyebilirim. Örneğin, Zigbee https://en.wikipedia.org/wiki/IEEE_802.15.4 tarafından yönetilmektedir.

Bu standartlar iletilecek mesajları belirler ve bayt 0'ın bu, 1 ile 4 arasındaki baytların, vb. hikayeler ;-)

Dediğim gibi, herhangi bir protokol için, çok sayıda üretici olabilir. Ve herhangi bir üretici için, probleminiz olan birden fazla yazılım kütüphanesi olabilir.

Her protokolü saran birden fazla APIS olduğu sürece göreviniz çok zor.

Ne yazık ki, yalnızca bir şirket baskın hale gelirse Posix benzeri bir API olacaktır. Büyük bir hükümet buna çok para atarsa ​​ince bir olasılık olabilir, ancak bunun olduğunu göremiyorum. Açık Kaynak topluluğu tarafından Linux benzeri çaba olarak tek şansım.


Btw, sadece başka bir statik kod analizörü olmayacak, genel kod için değil, belirli belirli API'ler için tasarlandığını yeterince netleştirdiğinizi düşünmüyorum. Bunu söylüyorsunuz, IMO. Bunu tam olarak tanımladığınızda, projenizin gerçekte ne olduğunu bileceksiniz. Zaten biliyorsan, bunu vurgulamıyorsun (ama belki de yeterince iyi okumam, iki toplantı arasında koştum).

POSIX API'lerinin sözdizimi, çalıştığınız API'ların sözdizimi gibi derleyici tarafından da denetlenir. Bu yüzden, unitiatize kaynakların kullanımı, tahsis edilmiş kaynakları serbest bırakma vb. Gibi potansiyel olarak tehlikeli kodlar aradığınızı tahmin ediyorum - bu doğru mu?

Yine de harika bir proje gibi görünüyor ve ben bu soruyu oynadım.


resim açıklamasını buraya girin


1
API'lerin anlambilimiyle daha fazla ilgileniyorum (yalnızca veya çoğunlukla sözdizimiyle değil ). Ve evet, bahsettiğiniz şeyler (ve daha fazlası) için bu API'yı kullanarak kodu analiz etmek istiyorum. Bu şu anda sadece kaba bir fikir (ve bunu ihtiyaçlara uyarlayacağım) ve hala finanse etmenin yollarını (özellikle işbirlikçi Ar-Ge projeleri) bulmaya çalışıyorum.
Basile Starynkevitch

BTW, Qt örneği, bir API'nın (ve bir kütüphanenin) yasal bir standart olmadan bile önemli ve belki de baskın hale gelebileceğini göstermektedir.
Basile Starynkevitch

5

Çeşitli ağ protokolleri için standartlar zaten iyi tanımlanmıştır. Bulmayı umduğunuz gibi, IoT cihazlarına özgü standart davranışları uygulayan bir API. Işıkları açabilen, kapatabilen veya parlaklıklarının bir kısmına ayarlayabilen bir Light () işlevi gibi bir şey; Silahlanabilen veya devreden çıkarılabilen veya kapı açık veya kapı kapama olaylarında bir uyarı için kaydolabilen DoorSensor (); bu tür bir şey. Ancak, uygulamaya özgü olmayan herhangi bir API kitaplığının farkında değilim.

Eğer birisi varsa, Domoticz'de bir şeyler bulabilirsiniz . C ++ ile yazılmış açık kaynaklı bir ev otomasyon denetleyicisidir.


5

Hızlı yanıt olarak, IoT için özel bir kütüphane türü olduğunu düşünmüyorum, IoT'nin temel olarak " yeni gömülü sistemler " olduğunu söyleyebilirim, sadece adı değiştirdiler ve bağlantıyı buluta eklediler.

Bu yüzden C ++ programlama için kullandığım yanıtı veren, referans sayfam http://www.cplusplus.com/

Temelde IoT için hangi protokolü kullanırsanız kullanın (USB, TCP / IP, UDP, ZigBee vb.) İletişim kütüphanelerine ihtiyacınız olacaktır .

Ayrıca, iletişiminiz varsa güvenlik / şifrelemeye ihtiyacınız vardır .

Ve geri kalanı, donanımı kontrol ettiğiniz veya ölçtüğünüz bölüme bağlı olacaktır. Bu tür donanımlar için kütüphanelere (API / Bellenim) ihtiyacınız olacaktır .

Şüphesiz burada kaçırdığım birçok şey var ... hadi başkalarının cevaplarını görelim


2
Yani, temelde, sezgilerimin IoT'nin gömülü bilgi işlem için yeni gömülü kelime olduğunu, muhtemelen gömülü Linux sistemlerini doğruladığını mı düşünüyorsunuz?
Basile Starynkevitch

@BasileStarynkevitch Cihaz sınıfına bağlıdır. Fitness izleyicileri (takılı telefon uzantılarını izlemek yerine) Linux çalıştırmaz. Kendi kendine çalışan düğümler Linux çalıştırmaz. Dağıtılmış sompute yapan hub düğümleri) muhtemelen Linux çalıştırıyor. Bu yüzden kenardan buluta uzanan bir yığın hakkında konuşuyorum.
Sean Houlihane

1
Sorun değil. Peki , bu cihazlarda yaygın olarak kullanılan API'ler veya kütüphaneler nelerdir .
Basile Starynkevitch

1
ZigBee bir ağ protokolüne benzediğinden kapsam dışıdır. Bununla birlikte, ZigBee uygulayan C veya C ++ 'da yaygın olarak bulunan bir API ilginç olurdu
Basile Starynkevitch

4

Gömülü, ayrıca güvenli iletişim, provizyon (cihaz yönetimi) artı OTA güncellemeleri. Bu büyük bir yazılım paketidir ve aynı zamanda geliştirilecek yeni bir platform türü olarak ortaya çıkmaktadır.

Bulut çözümleri sunan çeşitli sağlayıcılar vardır, genellikle kendi istemci API'larına ve seçilen uç nokta işletim sistemlerine sahip olurlar.

Anlayabildiğim kadarıyla, çeşitli kablosuz protokoller herhangi bir yazılım yığınını gerçekten dikte etmiyor, bu nedenle seçiminizin istemci API'ları değil, büyük resim tarafından yönlendirilmesi gerekiyor. Karar verme faktörlerinden biri, açık kaynak uygulamanızdaki yığın için önemliyse olabilir.


1
IoT uygulamaları geliştirmiyorum, ancak IoT yazılım geliştiricilerinin yararına statik kaynak kodu analiz araçları geliştirmek istiyorum.
Basile Starynkevitch

1
Tamam, ilgili (tahmin) 4 veya 5 farklı yığın var ve birkaç yıl içinde hangi iki veya üç baskın olursa hangisini takip etmek istiyorsanız hepsini göz önünde bulundurmanız gerekir.
Sean Houlihane

1
Hangi hassas API'leri veya kütüphaneleri (C veya C ++ ile) düşünüyorsunuz? Lütfen bunları cevabınızda adlandırın!
Basile Starynkevitch

1
Bu tür API'lar üzerinde çalışan bir takım tanıyorsanız, lütfen onlara sorumu iletin
Basile Starynkevitch 22:17

3

Hedefinizin BOOST'a biraz benzediğini düşünüyorum:

C ++ Kitaplıklarını Artırın

"Mevcut uygulama" oluşturmayı ve referans uygulamaları sağlamayı, böylece Boost kütüphanelerinin nihai standardizasyon için uygun olmasını amaçlarlar.

Belki de Boost IoT'de önemli bir oyuncu olabilir: kesinlikle C ++ üzerinde bazı büyük iyileştirmeler yaptı.


1
Yorumlar uzun tartışmalar için değildir; bu sohbet sohbete taşındı .
anonymous2

2

IoTivity, OCF Spesifikasyonunun referans uygulamasıdır . Belgeleri ve kaynak kodunu GitHub deposunda bulabilirsiniz .

Özellik listesinden :

  • Kısıtlı cihazlara dağıtım için C ile yazılmış temel işlevler
  • Çoğu işlevsellik C ve C ++ ile kullanılabilir

Onların Çerçeve API'leri Bluetooth, Wi-Fi, ZigBee ve Z-Wave gibi çeşitli protokoller üzerinde keşif, veri iletimi, veri yönetimi (toplama, depolama ve analiz) ve cihaz yönetimi (örn provizyon, teşhis) izin verir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.