Exemplo n.º 1
0
// 8bit value (poke address value)
Item *poke(List *expression)
{
    uint16_t addr = eval_as_uint16(second(expression));
    if (third(expression)) {
        *((uint8_t *)(addr)) = eval_as_uint8(third(expression));
    }
    return peek(expression);
}
Exemplo n.º 2
0
// (set_pin <pinid> <value>)
Item *lio_setpin(List *expression)
{
    const uint8_t pinid = eval_as_uint8(second(expression));
    for (List *values = rest(rest(expression)); values; values = rest(values)) {
        set_pin_value(pinid, eval_as_uint16(first(values)));
    }
    return 0;
}
Exemplo n.º 3
0
// (pin_mode <pinid> IN|HIGH|OUT|PWM|ADC [value])
Item *lio_pinmode(List *expression)
{
    const uint8_t pinid = eval_as_uint8(second(expression));
    pin_mode(pinid, eval_as_string(third(expression)));
    Item *value = fourth(expression);
    if (value) {
        set_pin_value(pinid, eval_as_uint16(value));
    }
    return 0;
}
Exemplo n.º 4
0
Item *port(List *expression)
{
    uint16_t value = eval_as_uint16(second(expression));
    uint8_t i=0;
    for (List *remaining = rest(rest(expression)); remaining; remaining = rest(remaining)) {
        set_pin_value(eval_as_uint8(first(remaining)), value & (1<<i));
        i++;
    }
    return 0;
}
Exemplo n.º 5
0
Item *fmt(List *expression)
{
    char *fmt = (char *)eval_as_string(second(expression));
    uint16_t fmt_size = strlen(fmt)+1;

    uint16_t value = eval_as_uint16(third(expression));

    // move the format to the back of our fixed string buffer
    char *moved_fmt = str_buf+STRBUFSIZE-fmt_size;
    strcpy(moved_fmt, fmt);
    // and write the formatted string to the buffer
    snprintf(str_buf, STRBUFSIZE-fmt_size, moved_fmt, value);
    return string_retval();
}
Exemplo n.º 6
0
// (set_pin <pinid> <value>)
Item *lio_setpin(List *expression)
{
    const uint8_t pinid = eval_as_uint8(second(expression));
    set_pin_value(pinid, eval_as_uint16(third(expression)));
    return 0;
}
Exemplo n.º 7
0
// 8bit value (peek address)
Item *peek(List *expression)
{
    uint16_t addr = eval_as_uint16(second(expression));
    return uint8_retval(*((uint8_t *)(addr)));
}
Exemplo n.º 8
0
Item *every(List *expression)
{
    scheduler_add(eval_as_uint16(second(expression)),store_expression(rest(rest(expression))));
    return 0;
}