You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

113 lines
2.8 KiB

/*
Copyright Jeroen Vreeken (pe1rxq@amsat.org), 2016
Copyright Stichting C.A. Muller Radioastronomiestation, 2016
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <controller/controller_block.h>
#include <log/log.h>
/*
inputs outputs
nr name nr name
----------------------
| |
---| 0 a 0 qa |----
| |
---| 1 b 1 qb |----
| |
----------------------
*/
struct io {
bool q;
bool *i;
};
struct controller_block_private {
struct io io[2];
};
static void calculate_2(struct controller_block *block)
{
struct controller_block_private *priv = block->private;
priv->io[0].q = *priv->io[0].i & !(*priv->io[1].i);
priv->io[1].q = *priv->io[1].i & !(*priv->io[0].i);
}
static struct controller_block_interm_list interms_2[] = {
{ "a", CONTROLLER_BLOCK_TERM_BOOL, offsetof(struct controller_block_private, io[0].i) },
{ "b", CONTROLLER_BLOCK_TERM_BOOL, offsetof(struct controller_block_private, io[1].i) },
{ NULL }
};
static struct controller_block_outterm_list outterms_2[] = {
{ "qa", CONTROLLER_BLOCK_TERM_BOOL, offsetof(struct controller_block_private, io[0].q) },
{ "qb", CONTROLLER_BLOCK_TERM_BOOL, offsetof(struct controller_block_private, io[1].q) },
{ NULL }
};
static struct controller_block * block_ex(struct controller_block *block)
{
if (controller_block_add(block))
goto err_block;
return block;
err_block:
controller_block_free(block);
return NULL;
}
static struct controller_block *block_err(struct controller_block *block)
{
controller_block_free(block);
return NULL;
}
static struct controller_block * block_ex2_create(char *name, int argc, va_list val)
{
struct controller_block *block;
if (!(block = controller_block_alloc("ex2", name, sizeof(struct controller_block_private))))
return NULL;
if (controller_block_interm_list_init(block, interms_2))
return block_err(block);
if (controller_block_outterm_list_init(block, outterms_2))
return block_err(block);
block->calculate = calculate_2;
return block_ex(block);
}
BLOCK_CREATE(ex2) = {
.create = block_ex2_create,
.args = { NULL },
};