1-Wire API for Java Software Development Kit
1-Wire API for Java Software Development Kit (w skrócie OWAPI lub 1-Wire API SDK) – pakiet klas i interfejsów napisanych w języku Java składających się na całokształt abstrakcyjnej, niezależnej od środowiska uruchomieniowego, wysokopoziomowej warstwy dostępu do sieci 1-Wire, rozpowszechniany na zasadach licencji MIT.
Architektura[edytuj]
Z klas składających się na całość pakietu OWAPI, poza wieloma pomocniczymi, wyróżniają się dwie specjalne:
- abstrakcyjna klasa adaptera 1-Wire – DSPortAdapeter,
- abstrakcyjna klasa kontenera 1-Wire – OneWireContainer.
Adapter 1-Wire[edytuj]
Każda z instancji klas jednego z adapterów 1-Wire stanowi abstrakcyjny obiekt fizycznego urządzenia podłączonego do jednego z portów komputera hosta (RS232, LPT lub USB), które stanowi pomost pomiędzy środowiskiem wykonawczym a strukturą sieci 1-Wire. W skład realizowanych przez nią metod wchodzą te realizujące komunikację niskopoziomową (zapis oraz odczyt bitu lub bajtu na magistralę 1-Wire), oraz te wysokopoziomowe, jak np. przeszukiwanie magistrali 1-Wire pod kątem odnalezienia układów spełniających zadany warunek.
W zależności od platformy, różne są też sterowniki, z których korzysta OWAPI do komunikacji z adapterem.
- Microsoft Windows – natywne sterowniki 1-Wire dla Windows, lub RXTX,
- Linux – sterownik RXTX,
- TINI – brak sterowników, ponieważ wsparcie dla komunikacji 1-Wire zintegrowane jest w platformie TINI,
- inne systemy operacyjne – RXTX.
Istnieją cztery podstawowe modele adapterów 1-Wire:
- DS9097E - podłączany do portu RS-232,
- DS1410E - podłączany do portu LPT,
- DS9097U - podłączany do portu RS-232,
- DS9490 - podłączany do USB.
Każdy z nich jednak realizuje tą samą funkcjonalność i ich wymiana nie ma żadnego wpływu na implementację.
Poniższy kod przeszukuje wszystkie porty USB od numeru 0 do 30, a następnie tworzy i zwraca obiekt adaptera 1-Wire dla pierwszego portu, na którym został on wykryty.
DSPortAdapter adapter = null;
for(int i = 0; i < 30; i++) {
try {
adapter = OneWireAccessProvider.getAdapter("{DS9490}", "USB" + i);
if(adapter != null) {
return adapter;
}
} catch(OneWireException e) {
// ignoruj blad podczas przeszukiwania
}
}
Kontener 1-Wire[edytuj]
Kontener 1-Wire jest drugą z klas specjalnych współistniejąca w pakiecie OWAPI. Wszystkie instancje klas z niej dziedziczących, reprezentują fizyczne układy podłączone do magistrali 1-Wire. Według aktualnej dokumentacji technicznej jest ich 34[1].
Obiekty abstrakcyjnej klasy kontenera 1-Wire same w sobie nie posiadają żadnej szczególnej funkcjonalności, lecz grupują wspólne dla wszystkich układów 1-Wire metody i pozwalają między innymi na:
- sprawdzenie czy element jest w danym momencie podłączony do sieci 1-Wire,
- sprawdzenie czy element jest w stanie alarmu,
- ustawienie na magistrali najlepszej dla układu prędkości komunikacji,
- odczytanie banków pamięci układu (o ile takie w danym układzie są dostępne).
Każda z podklas kontenera jest bardziej wyspecjalizowana i odpowiada tylko jednemu typowi układu, który jest rozpoznawany po tzw. kodzie rodziny (ang. family code), który jest zapisany w ostatnim bajcie adresu każdego z układów. Oczywiście w każdej z rodzin mogą istnieć różne wariacje pojedynczego układu, który de facto spełnia tą samą funkcjonalność, lecz w różnych wariantach sprzętowych (np. ekonomicznym lub full service).
Przykładowo klasa kontenera układu do pomiaru temperatury posiada wyspecjalizowane metody służące tylko i wyłącznie do konwersji i odczytu temperatury, podobnie jak inne klasy kontenerów (np. układu do pomiaru wilgotności lub napięcia).
Poniższy kod ilustruje odczyt banków pamięci dowolnego układu 1-Wire.
MemoryBank bank;
Enumeration banks = owd.getMemoryBanks();
while (banks.hasMoreElements()) {
bank = (MemoryBank) banks.nextElement();
// czy bank jest Paged Memory
if (bank instanceof PagedMemoryBank) {
PagedMemoryBank pagedMemory = (PagedMemoryBank) bank;
// ...
}
// czy bank jest One-Time-Programable
if (bank instanceof OTPMemoryBank) {
OTPMemoryBank oneTimeProg = (OTPMemoryBank) mb;
// ...
}
}
Przypisy[edytuj]
Bibliografia[edytuj]
- ftp://ftp.dalsemi.com/pub/auto_id/softdev/owapi/index.html (ang.)
- https://web.archive.org/web/20120809014335/http://www.maxim-ic.com/products/ibutton/software/1wire/1wire_api.cfm (ang.)
- https://web.archive.org/web/20120602010208/http://datasheets.maxim-ic.com/en/ds/DS9097U-009-DS9097U-S09.pdf (ang.)
Linki zewnętrzne[edytuj]
- Dokumentacja javadoc pakietu OWAPI (ang.)
- Wykaz kodów rodziny i rozkazów sterujących dla poszczególnych układów 1-Wire (ang.)
This article "1-Wire API for Java Software Development Kit" is from Wikipedia. The list of its authors can be seen in its historical and/or the page Edithistory:1-Wire API for Java Software Development Kit.