Použití objektů zásad skupiny v aplikacích vysoké úrovně
Azure Sphere podporuje objekty GPO (vstup/výstup pro obecné účely). GPIO je typ programovatelného digitálního kolíku na integrovaném obvodu. Objekty zásad skupiny nemají předdefinované funkce a jejich chování může aplikace přizpůsobit. Mezi běžné použití objektů GPO patří změna stavu hardwarových zařízení, ovládání LED diod a čtení stavu přepínačů.
Poznámka
Toto téma popisuje, jak používat objekty zásad skupiny v aplikaci vysoké úrovně. Informace o použití GPIO v RTApps najdete v tématu Použití periferních zařízení v aplikaci podporující reálném čase .
Aplikace azure Sphere vysoké úrovně můžou komunikovat s objekty zásad skupiny voláním rozhraní API GPIO applibs. Ukázka GPIO_HighLevelApp ukazuje, jak komunikovat s objekty zásad skupiny na zařízení MT3620.
Pro GPIO se podporují následující operace:
- Čtení vstupu
- Nastavení výstupu na vysokou nebo nízkou hodnotu
- Dotazování / přerušení softwaru
Požadavky GPIO
Aplikace, které komunikují s objekty zásad skupiny, musí obsahovat příslušné soubory hlaviček pro GPIO a přidat nastavení GPIO do manifestu aplikace.
Všechny aplikace musí nastavit svůj cílový hardware a zahrnout odpovídající soubor hlavičky definice hardwaru.
Soubory hlaviček
#include <applibs/gpio.h>
#include "path-to-your-target-hardware.h"
Nahraďte path-to-your-target-hardware.h cestou k souboru hlaviček pro váš hardware.
Nastavení manifestu aplikace
Nastavení GPIO v manifestu aplikace obsahuje seznam objektů zásad skupiny, ke kterým aplikace přistupuje. GpIO může současně používat jenom jedna aplikace. Pokud chcete tato nastavení nakonfigurovat, přidejte Gpio
funkci do manifestu aplikace a pak do této funkce přidejte jednotlivé gpio.
Manifest aplikace Azure Sphere obsahuje další podrobnosti.
V kódu použijte konstanty definované pro váš hardware k identifikaci objektů GIO. Kompilátor při sestavování aplikace přeloží tyto hodnoty na nezpracované hodnoty.
Tady je například výňatek z manifestu aplikace pro aplikaci, která cílí na panel pro vývoj referencí MT3620 (RDB) a získá tři své objekty zásad skupiny (1, 8 a 12):
"Gpio": [ "$MT3620_RDB_HEADER1_PIN6_GPIO", "$MT3620_RDB_LED1_RED", "$MT3620_RDB_BUTTON_A" ]
Následující úryvek ukazuje, jak zadat stejné objekty zásad skupiny v aplikaci, která cílí na úvodní sadu Avnet MT3620:
"Gpio": [ "$AVNET_MT3620_SK_GPIO1", "$AVNET_MT3620_SK_USER_LED_RED", "$AVNET_MT3620_SK_USER_BUTTON_A" ]
Otevření objektu GPIO jako vstupu
Pokud potřebujete číst z objektu GPIO, ale ne do něj zapisovat, můžete ho otevřít jako vstup. Voláním GPIO_OpenAsInput otevřete GPIO a nastavte ho na vstup. Tím se načte popisovač souboru pro operace s GPIO. Můžete číst z GPIO, když je nastavený na vstup, ale nemůžete do něj zapisovat. Pokud je gpIO nastavený na vstup, musíte ho zavřít , abyste ho mohli nastavit na výstup.
Otevření objektu GPIO jako výstupu
Pokud potřebujete zapisovat do GPIO, musíte ho otevřít jako výstup. Voláním GPIO_OpenAsOutput otevřete GPIO a nastavte ho na výstup. Tím se načte popisovač souboru pro operace s objektem GPIO, nastaví se výstupní režim a počáteční hodnota. Když je GPIO nastavený na výstup, můžete do něj zapisovat a číst z něj. Pokud je hodnota GPIO nastavená na výstup, musíte ho před nastavením vstupu zavřít .
Dotazování na GPIO
Když je GPIO otevřený, můžete v něm sledovat události, například stisknutí tlačítka. K tomu je potřeba nastavit časovač, který se bude dotazovat na GPIO. Přerušení hardwaru pro objekty zásad skupiny se v Azure Sphere nepodporují, takže je potřeba použít dotazování. Ukázka GPIO ukazuje, jak se dotazovat na GPIO.
Čtení z GPIO
Pokud chcete číst z GPIO, zavolejte GPIO_GetValue.
Zápis do GPIO
Pokud chcete zapisovat do GPIO, zavolejte GPIO_SetValue.
Nastavení síly jednotky GPIO
Síla pohonu kolíku GPIO odkazuje na množství proudu použitého k jeho pohonu. Toto množství aktuálního stavu je obvykle nastaveno na výchozí hodnotu. Některé scénáře, například jasnější LED diody nebo vyšší výkon senzorů, však vyžadují vyladění síly pohonu na určité kolíky GPIO.
Pokud chcete nastavit sílu jednotky, nejprve pomocí struktury gpiopin_request určete konfiguraci síly jednotky pro jeden nebo více kolíků GPIO. Dále předejte gpiopin_request
a GPIO_SET_PIN_CONFIG_IOCTL volání IOCTL.
Následující fragment kódu ukazuje, jak nastavit sílu jednotky dvou pinů GPIO, které jsou zadány v lineoffsets
poli gpiopin_request
struktury.
//get chip file descriptor
int chipfd = __z_azsp_open("/dev/gpiochip0", O_CLOEXEC);
//set drive strength for the requested pins
struct gpiopin_request pinreq;
memset(&pinreq, 0, sizeof(pinreq));
pinreq.linecount = 2;
pinreq.lineoffsets[0] = SAMPLE_RGBLED_BLUE;
pinreq.lineoffsets[1] = SAMPLE_RGBLED_RED;
pinreq.config_type = PIN_CONFIG_DRIVE_STRENGTH;
pinreq.config_arg = 16;
result = ioctl(chipfd, GPIO_SET_PIN_CONFIG_IOCTL, &pinreq);
if (result < 0) {
close(chipfd);
return -1;
}
//do other work like setting pins as output
struct gpiohandle_request request;
memset(&request, 0, sizeof(request));
request.flags = GPIOHANDLE_REQUEST_OUTPUT;
request.lines = 2;
request.lineoffsets[0] = SAMPLE_RGBLED_BLUE;
request.lineoffsets[1] = SAMPLE_RGBLED_RED;
request.default_values[0] = 1;
request.default_values[1] = 1;
result = ioctl(chipfd, GPIO_GET_LINEHANDLE_IOCTL, &request);
if (result < 0) {
close(chipfd);
return -1;
}
Zavření objektu GPIO
Pokud chcete gpio zavřít, zavolejte funkci POSIX close().
Podpora pro MT3620
Podporované funkce GPIO pro čip MT3620 jsou uvedené ve stavu podpory MT3620. Uživatelská příručka pro vývojovou desku MT3620 popisuje rozložení připínáčku a funkce připnutí na RDB MT3620.
Složka HardwareDefinitions v instalačním adresáři sady Microsoft Azure Sphere SDK obsahuje definice pro běžné vývojové panely, moduly a čipy Azure Sphere. Obsahuje hlavičky a soubory JSON, které definují hlavní rozhraní pro MT3620, MT3620 RDB a další hardware MT3620. Výchozí umístění složky HardwareDefinitions je C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions
ve Windows a /opt/azurespheresdk/HardwareDefinitions
v Linuxu.