====== LED の制御 ====== XG-50 には、以下のとおり LED が実装されています。 {{:xg_series_devel:lighting_up_led:xg-50_panel_leds.jpeg?600|XG-50 panel}} \\ |<24em 3em 2em 12em >| ^ シルク ^ 色 ^ Note ^ | PWR | @#ff0000: |**autoled** として OS が制御| |:::| @#00ff00: |boardctl() 経由で制御| | STS1 | @#ff0000: |LED driver((TCA6507)) 経由で制御| |:::| @#00ff00: |:::| | STS2 | @#ff0000: |:::| |:::| @#00ff00: |:::| | STS3 | @#ff0000: |:::| |:::| @#00ff00: |:::| \\ ===== POWER LED(緑) の制御 ===== **boardctl(BIOC_SET_LED)** で 点灯/消灯 を制御します。 bool onoff = true; boardctl(BIOC_SET_LED, (uintptr_t) onoff); \\ ===== STATUS LED の制御 ===== デフォルトの **CONFIG** では、LED driver として **/dev/leddrv0** が登録されます。 nsh> ls -l /dev/ /dev: cr--r--r-- 0 adc0 crw-rw-rw- 0 console crw-rw-rw- 0 i2c1 cr--r--r-- 0 leddrv0 <---- brw-rw-rw- 0 mtdblock0 crw-rw-rw- 0 null crw-rw-rw- 0 ptmx crw-rw-rw- 0 ramlog cr--r--r-- 0 random crw-rw-rw- 0 rtc0 crw-rw-rw- 0 timer0 crw-rw-rw- 0 ttyS0 crw-rw-rw- 0 ttyS1 crw-rw-rw- 0 ttyS2 crw-rw-rw- 0 ttyS3 crw-rw-rw- 0 zero nsh> \\ ioctl() により各 LED の ON/OFF を制御することができます。 #include #include #include #include #include int led_main(int argc, char **argv) { int fd, ret = -1; struct tca6507_onoff_s leds; /* この構造体でリクエストを発行 */ fd = open("/dev/leddrv0", O_RDONLY); if (fd > 0) { leds.led = LED_STATUS3_GREEN; /* STATUS LED 3 の Green を */ leds.on = 1; /* 点灯させる */ ioctl(fd, LEDIOC_ONOFF, (intptr_t) &leds); close(fd); ret = 0; } return ret; } \\ ===== LED OFF Switch ===== 電池で駆動させる場合など、LED の消費電力が問題になるケースがあります。\\ そのような用途で、LED を強制的に**消灯**させるスイッチを用意してあります。 {{:xg_series_devel:lighting_up_led:xg-50_panel_led_sw.jpeg?600|LED OFF Switch}} スイッチを右側にスライドさせると、LED が全消灯となります。 \\ ==== Switch 状態の取得 ==== boardctl() で LED OFF Switch の状態を取得することができます。 int sw_state; boardctl(BIOC_GET_LEDSW, (uintptr_t) &sw_state); # sw_state == 0 --> LED OFF