summaryrefslogtreecommitdiffstats
path: root/templates/wandboard/conf/conf-notes.txt
blob: fc5c6a1b80f912573c81b30536669ac31b28e2e7 (plain)
1
../../common/conf-notes.txt
ight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ }
/*
 * Copyright (C) 2016 "IoT.bzh"
 * Author Fulup Ar Foll <fulup@iot.bzh>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#define _GNU_SOURCE
#include <stdio.h>
#include <string.h>
#include <time.h>

#include "test-binding.h"

// default api to print log when apihandle not avaliable
afb_dynapi *AFB_default;

// Config Section definition (note: controls section index should match handle
// retrieval in HalConfigExec)
static CtlSectionT ctrlSections[] = {
    {.key = "plugins", .loadCB = PluginConfig},
    {.key = "onload", .loadCB = OnloadConfig},
    {.key = "controls", .loadCB = ControlConfig},

    {.key = NULL}};

static void ctrlapi_ping(AFB_ReqT request) {
  static int count = 0;

  count++;
  AFB_ReqNotice(request, "Controller:ping count=%d", count);
  AFB_ReqSucess(request, json_object_new_int(count), NULL);

  return;
}

// Every HAL export the same API & Interface Mapping from SndCard to AudioLogic
// is done through alsaHalSndCardT
static AFB_ApiVerbs CtrlApiVerbs[] = {
    /* VERB'S NAME         FUNCTION TO CALL         SHORT DESCRIPTION */
    {.verb = "ping", .callback = ctrlapi_ping, .info = "ping test for API"},
    {.verb = NULL} /* marker for end of the array */
};

static int CtrlLoadStaticVerbs(afb_dynapi *apiHandle, AFB_ApiVerbs *verbs) {
  int errcount = 0;

  for (int idx = 0; verbs[idx].verb; idx++) {
    errcount += afb_dynapi_add_verb(
        apiHandle, CtrlApiVerbs[idx].verb, NULL, CtrlApiVerbs[idx].callback,
        (void *)&CtrlApiVerbs[idx], CtrlApiVerbs[idx].auth, 0);
  }

  return errcount;
};

static int CtrlInitOneApi(AFB_ApiT apiHandle) {

  AFB_default =
      apiHandle; // hugely hack to make all V2 AFB_DEBUG to work in fileutils

  // retrieve section config from api handle
  CtlConfigT *ctrlConfig = (CtlConfigT *)afb_dynapi_get_userdata(apiHandle);
  int err = CtlConfigExec(apiHandle, ctrlConfig);

  return err;
}

// next generation dynamic API-V3 mode
#include <signal.h>

static int CtrlLoadOneApi(void *cbdata, AFB_ApiT apiHandle) {
  CtlConfigT *ctrlConfig = (CtlConfigT *)cbdata;

  // save closure as api's data context
  afb_dynapi_set_userdata(apiHandle, ctrlConfig);

  // add static controls verbs
  int err = CtrlLoadStaticVerbs(apiHandle, CtrlApiVerbs);
  if (err) {
    AFB_ApiError(apiHandle, "CtrlLoadSection fail to register static V2 verbs");
    goto OnErrorExit;
  }

  // load section for corresponding API
  err = CtlLoadSections(apiHandle, ctrlConfig, ctrlSections);

  // declare an event event manager for this API;
  afb_dynapi_on_event(apiHandle, CtrlDispatchApiEvent);

  // init API function (does not receive user closure ???
  afb_dynapi_on_init(apiHandle, CtrlInitOneApi);

  afb_dynapi_seal(apiHandle);
  return err;

OnErrorExit:
  return 1;
}

int afbBindingVdyn(afb_dynapi *apiHandle) {

  AFB_default = apiHandle;
  AFB_ApiNotice(apiHandle, "Controller in afbBindingVdyn");

  const char *dirList = getenv("CONTROL_CONFIG_PATH");
  if (!dirList)
    dirList = CONTROL_CONFIG_PATH;

  const char *configPath = CtlConfigSearch(apiHandle, dirList, "4a-");
  if (!configPath) {
    AFB_ApiError(apiHandle, "CtlPreInit: No 4a-%s-* config found in %s ",
                 GetBinderName(), dirList);
    goto OnErrorExit;
  }

  // load config file and create API
  CtlConfigT *ctrlConfig = CtlLoadMetaData(apiHandle, configPath);
  if (!ctrlConfig) {
    AFB_ApiError(apiHandle,
                 "CtrlBindingDyn No valid control config file in:\n-- %s",
                 configPath);
    goto OnErrorExit;
  }

  if (!ctrlConfig->api) {
    AFB_ApiError(apiHandle,
                 "CtrlBindingDyn API Missing from metadata in:\n-- %s",
                 configPath);
    goto OnErrorExit;
  }

  AFB_ApiNotice(apiHandle, "Controller API='%s' info='%s'", ctrlConfig->api,
                ctrlConfig->info);
  // create one API per config file (Pre-V3 return code ToBeChanged)
  int status = afb_dynapi_new_api(apiHandle, ctrlConfig->api, ctrlConfig->info,
                                  1, CtrlLoadOneApi, ctrlConfig);

  return status;

OnErrorExit:
  return -1;
}