Skip to content

Commit

Permalink
ports/mega: Add bare i2c API to mega port
Browse files Browse the repository at this point in the history
Get/put register values to any i2c device.

Signed-off-by: Keith Packard <keithp@keithp.com>
  • Loading branch information
keith-packard committed Feb 3, 2021
1 parent 188bfd7 commit 94814cd
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 0 deletions.
3 changes: 3 additions & 0 deletions ports/mega/Makefile
Expand Up @@ -23,6 +23,8 @@ SNEK_LOCAL_SRC = \
$(SNEK_ATMEGA_SRC) \
$(SNEK_ATMEGA_MATH_SRC) \
snek-input.c \
snek-i2c.c \
snek-atmega-i2c.c \
snek-mega.c

SNEK_LOCAL_INC = \
Expand All @@ -34,6 +36,7 @@ SNEK_LOCAL_BUILTINS = \
$(SNEK_ATMEGA_MATH_BUILTINS) \
snek-math.builtin \
snek-input.builtin \
snek-i2c.builtin \
snek-mega.builtin

include $(SNEK_ROOT)/snek-install.defs
Expand Down
17 changes: 17 additions & 0 deletions snek-i2c.builtin
@@ -0,0 +1,17 @@
#
# Copyright © 2031 Keith Packard <keithp@keithp.com>
#
# 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.
#
# Low-level I2C functions
#
i2c.put, 3
i2c.get, 2
47 changes: 47 additions & 0 deletions snek-i2c.c
@@ -0,0 +1,47 @@
/*
* Copyright © 2021 Keith Packard <keithp@keithp.com>
*
* 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, write to the Free Software Foundation, Inc.,
* 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
*/

#include "snek.h"
#include "snek-i2c.h"

snek_poly_t
snek_builtin_i2c_put(snek_poly_t addr, snek_poly_t reg, snek_poly_t val)
{
uint8_t iaddr = snek_poly_get_soffset(addr);
uint8_t ireg = snek_poly_get_soffset(reg);
uint8_t ival = snek_poly_get_soffset(val);

if (snek_abort)
return SNEK_NULL;

snek_i2c_put(iaddr, ireg, ival);
return SNEK_NULL;
}

snek_poly_t
snek_builtin_i2c_get(snek_poly_t addr, snek_poly_t reg)
{
uint8_t iaddr = snek_poly_get_soffset(addr);
uint8_t ireg = snek_poly_get_soffset(reg);

if (snek_abort)
return SNEK_NULL;

uint8_t ival = snek_i2c_get(iaddr, ireg);
return snek_soffset_to_poly(ival);
}

0 comments on commit 94814cd

Please sign in to comment.