Skip to content

Архитектура, security implementation

Radoslav Radev edited this page Sep 21, 2017 · 2 revisions

Програмата се състои от различни плъгини. Всеки от тях трябва да притежава(extends) Fragment, да имплементира(implements) PluginBase, а също може да имплементира някой от интерфейсите(Interfaces). Примерна декларация на плъгин би изглеждала така:

public class ConfigBuilderFragment extends Fragment implements PluginBase, PumpInterface, ConstraintsInterface

Всеки плъгин трябва да бъде разработен като самостоятелен код. Единствената редакция, която е необходима за интегрирането му с останалата част от програмата е в клас MainActivity и изглежда така:

pluginsList.add(SourceXdripFragment.newInstance());

Когато плъгина, който разработваме, трябва да се свърже с други плъгини, то това винаги трябва да става чрез клас ConfigBuilder. Например за да изпратим команда към помпата:

PumpInterface pump = MainApp.getConfigBuilder().getActivePump();
PumpEnactResult result = pump.deliverTreatment(insulin, carbs);

Самият ConfigBuilder е един вид интерфейс за помпата(PumpInterface) и интерфейс за ограниченията(ConstraintInterface). Така чрез извикване на функцията MainApp.getConfigBuilder().getActivePump() ConfigBuilder ще върне себе си като резултат. Така като изпращате команда към помпата ConfigBuilder първо проверява за спазване на ограниченията и тогава изпраща същинската команда към драйвера на помпата.

Това позволява добавянето на специфични ограничения към програмата, без необходимост от промяна на останалия код. Например чрез създаването и регистрирането на този Fragment:

public class BolusConstraint extends Fragment implements PluginBase, ConstraintsInterface {
    @Override
    public boolean isLoopEnabled() {
        return true; // Always enable, limit only things you want
    }

    @Override
    public boolean isClosedModeEnabled() {
        return true; // Always enable, limit only things you want
    }

    @Override
    public boolean isAutosensModeEnabled() {
        return true; // Always enable, limit only things you want
    }

    @Override
    public boolean isAMAModeEnabled() {
        return true; // Always enable, limit only things you want
    }

    @Override
    public APSResult applyBasalConstraints(APSResult request) {
        return request; // Don't change, limit only things you want
    }

    @Override
    public Double applyBasalConstraints(Double absoluteRate) {
        return absoluteRate; // Don't change, limit only things you want
    }

    @Override
    public Integer applyBasalConstraints(Integer percentRate) {
        return percentRate; // Don't change, limit only things you want
    }

    @Override
    public Double applyBolusConstraints(Double insulin) {
        if (insulin > 2d) insulin = 2d;
        return insulin;
    }

    @Override
    public Integer applyCarbsConstraints(Integer carbs) {
        return carbs; // Don't change, limit only things you want
    }

    @Override
    public Double applyMaxIOBConstraints(Double maxIob) {
        return maxIob; // Don't change, limit only things you want
    }

    @Override
    public int getType() {
        return PluginBase.CONSTRAINTS;
    }

    @Override
    public String getName() {
        return "Bolus Constraint";
    }

    @Override
    public boolean isEnabled() {
        return true; // Always enabled and cannot be disabled
    }

    @Override
    public boolean isVisibleInTabs() {
        return false; // No need to have own tab in GUI
    }

    @Override
    public boolean canBeHidden() {
        return true;
    }

    @Override
    public void setFragmentEnabled(boolean fragmentEnabled) {
        // Do nothing, always enabled
    }

    @Override
    public void setFragmentVisible(boolean fragmentVisible) {
        // Do nothing, always hidden
    }
}

Ние ограничаваме размера на болус до 2 единици навсякъде в програмата.

ConfigBuilder винаги преминава през всички регистрирани интерфейси на ограничения ('ConstraintInterfaces') и избира най-ограничената стойност, преди да я предаде към избрания драйвер на помпа.

Добавянето на драйвер на помпа може да включи интерфейса за ограниченията(ConstraintInterface) също, да зареди максималните стойности от помпата и да ги приложи като допълнително ограничение. Тогава например графичният интерфейс няма да позволи въвеждането на по-голям болус.

Getting Started:

How to install AndroidAPS:

Configuration:

Usage:

Sources:

CZ:

DE:

Български:

Въведение:

Инсталиране:

Конфигуриране:

Използване:

Източници:

Примери:

Подкрепа:

한국어:

Clone this wiki locally
You can’t perform that action at this time.