# OVLADAČ
# úloha na procvičení bitových operací
#
# Motivace:
# Máme zařízení, které ovládáme pomocí 8 relé (např. spínají 8 osvětlovacích 
# těles). Ovladač je připojen k počítači pomocí 8 vodičů, kterými lze najednou
# sepnout/rozepnout všechna relé a najednou přečíst jejich stav. Stav je repre-
# zentován celým číslem, jednotlivé vodiče jsou vlasně bity tohoto čísla (0 je
# pro rozepnuté relé, 1 pro sepnuté). Relé jsou pro jednoduchost očíslována 0
# až 7, relé 0 odpovídá bitu 0 (tj. řádu 2^0), relé 1 bitu 1 (řádu 2^1) atd.
# Např. tedy číslo 133 (0b1000_0101 binárně) znamená, že jsou sepnutá relé 0,
# 2 a 7 (resp. tato relé chceme sepnout, ostatní rozepnout). 
#
# Řekněme, že pro běžnou obsluhu toto uspořádání není úplně přívětivé. Proto 
# jsme si vytvořili program v jazyce Python, který nám umožňuje příjemnější 
# ovládání pomocí příkazů typu "sepni relé č. 5". Program je prakticky hotov,
# zbývá dokončit pouze čtyři funkce:
#    zapnout - sepne relé požadovaného čísla, stav ostatních je zachován
#    vypnout - rozepne relé požadovaného čísla, stav ostatních je zachován
#    prepnout - stav všech relé se změní na opačný
#    stav_rele - vypíše aktuální stav relé v požadovaném formátu, např.
#       "  stav relé: 0+ 1- 2+ 3- 4- 5- 6- 7+" pro výše uvedený stav 133
# Všechny funkce mají parametr 'stav', ve kterém je předán aktuální stav
# všech relé (celé číslo v rozsahu 0 až 255). První tři vrací hodnotu typu
# 'int' (0 až 255) s požadovaným novým nastavením relé, poslední funkce nemá
# určenou návratovou hodnotu.
# ---------------------------------------------------------------

def zapnout(stav, cislo):
    pass    

def vypnout(stav, cislo):
    pass    

def prepnout(stav):
    pass    
    
def stav_rele(stav):
    pass    

# ---------------------------------------------------------------
#
# Relé ovládáme ve smyčce pomocí příkazu z klávesnice:
#  - zapnutí: '+' a číslo relé, např. "+4"
#  - vypnutí: '-' a číslo relé, např. "-0"
#  - přepnutí všech: "x"
#  - ukončení: prázdný vstup

stav = 0b0000_0000 # no počátku jsou všechna relé rozepnuta
print("=== Ovládání relé ===")
stav_rele(stav)
# v cyklu čteme a vykonáváme příkazy
while (True):
    vstup = input("Zadej příkaz: ")
    # kontrola na ukončení
    if vstup == "":
        break
    # přepnutí relé
    elif vstup == "x":
        print("  přepnutí všech")
        stav = prepnout(stav) & 0xff
        stav_rele(stav)
    # zapnutí/vypnutí relé - kontrola správného formátu vstupu
    elif len(vstup) == 2 and vstup[0] in "+-" and vstup[1] in "01234567":
        rele = int(vstup[1]) # určení relé
        if vstup[0] == '+': # zapnutí
            print("  zapnout", rele)
            stav = zapnout(stav, rele) & 0xff
        else: # vypnutí
            print("  vypnout", rele)
            stav = vypnout(stav, rele) & 0xff
        stav_rele(stav) 
    else:
        print("  # chyba vstupu!")
print("  konec")
