Merge from Triface project.
authorasterix <asterix@38d2e660-2303-0410-9eaa-f027e97ec537>
Wed, 5 Mar 2008 23:36:49 +0000 (23:36 +0000)
committerasterix <asterix@38d2e660-2303-0410-9eaa-f027e97ec537>
Wed, 5 Mar 2008 23:36:49 +0000 (23:36 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@1164 38d2e660-2303-0410-9eaa-f027e97ec537

app/triface/hw/hw_adc.h [new file with mode: 0644]
app/triface/hw/hw_boot.h [new file with mode: 0644]
app/triface/hw/hw_buzzer.h [new file with mode: 0644]
app/triface/hw/hw_input.h [new file with mode: 0644]
app/triface/hw/hw_sipo.h [new file with mode: 0644]
cpu/avr/drv/sipo.c [new file with mode: 0644]
cpu/avr/drv/sipo.h [new file with mode: 0644]
net/keytag.c [new file with mode: 0644]
net/keytag.h [new file with mode: 0644]

diff --git a/app/triface/hw/hw_adc.h b/app/triface/hw/hw_adc.h
new file mode 100644 (file)
index 0000000..5beea2e
--- /dev/null
@@ -0,0 +1,63 @@
+/**
+ * \file
+ * <!--
+ * This file is part of BeRTOS.
+ *
+ * Bertos 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 2 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
+ *
+ * As a special exception, you may use this file as part of a free software
+ * library without restriction.  Specifically, if other files instantiate
+ * templates or use macros or inline functions from this file, or you compile
+ * this file and link it with other files to produce an executable, this
+ * file does not by itself cause the resulting executable to be covered by
+ * the GNU General Public License.  This exception does not however
+ * invalidate any other reasons why the executable file might be covered by
+ * the GNU General Public License.
+ *
+ * Copyright 2003, 2004, 2006 Develer S.r.l. (http://www.develer.com/)
+ * Copyright 2000 Bernardo Innocenti <bernie@codewiz.org>
+ *
+ * -->ght 2006 Develer S.r.l. (http://www.develer.com/)
+ *
+ * \brief Macro for HW_AIN_H
+ *
+ *
+ * \version $Id$
+ *
+ * \author Andrea Grandi <andrea@develer.com>
+ */
+
+#ifndef HW_ADC_H
+#define HW_ADC_H
+
+#include <avr/io.h>
+
+#define START_CONVERTION (ADCSRA |= BV(ADSC))
+#define ENABLE_ADC (ADCSRA |= BV(ADEN))
+#define SET_AI_ADLAR (ADMUX &= ~BV(ADLAR))
+
+/** Microseconds to wait before starting conversion after changing a channel */
+#define STABILIZING_AI_CHANNEL_TIME 125
+
+/** Number of AIN channels */
+#define ADC_CHANNEL_NUM 4
+
+void adc_set_active_ain(int ai);
+void adc_init(void);
+void adc_set_vref_avcc(void);
+int adc_read_ai_channel(int channel);
+
+#endif // HW_ADC_H
+
diff --git a/app/triface/hw/hw_boot.h b/app/triface/hw/hw_boot.h
new file mode 100644 (file)
index 0000000..8deeaec
--- /dev/null
@@ -0,0 +1,70 @@
+/**
+ * \file
+ * <!--
+ * This file is part of BeRTOS.
+ *
+ * Bertos 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 2 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
+ *
+ * As a special exception, you may use this file as part of a free software
+ * library without restriction.  Specifically, if other files instantiate
+ * templates or use macros or inline functions from this file, or you compile
+ * this file and link it with other files to produce an executable, this
+ * file does not by itself cause the resulting executable to be covered by
+ * the GNU General Public License.  This exception does not however
+ * invalidate any other reasons why the executable file might be covered by
+ * the GNU General Public License.
+ *
+ * Copyright 2003, 2004, 2006 Develer S.r.l. (http://www.develer.com/)
+ * Copyright 2000 Bernardo Innocenti <bernie@codewiz.org>
+ *
+ * -->
+ *
+ * \brief Macro for boot loader.
+ *
+ *
+ * \version $Id$
+ *
+ * \author Daniele Basile <asterix@develer.com>
+ * \author Francesco Sacchi <batt@develer.com>
+ */
+
+#ifndef HW_BOOT_H
+#define HW_BOOT_H
+
+#include <avr/io.h>
+
+/* Set up function pointer to RESET vector */
+void (*rom_start)(void) NORETURN = 0x0000;
+
+#define START_APP() rom_start()
+
+#define BOOT_INIT do \
+{ \
+       /* Enable change of Interrupt Vectors */ \
+       MCUCR = BV(IVCE); \
+       /* Move interrupts to boot Flash section */ \
+       MCUCR = BV(IVSEL); \
+} while(0)
+
+#define BOOT_END do \
+{ \
+       /* Enable change of Interrupt Vectors */ \
+       MCUCR = BV(IVCE); \
+       /* Move interrupts to boot Flash section */ \
+       MCUCR = 0; \
+} while(0)
+
+#endif // HW_BOOT_H
+
diff --git a/app/triface/hw/hw_buzzer.h b/app/triface/hw/hw_buzzer.h
new file mode 100644 (file)
index 0000000..ae92ebd
--- /dev/null
@@ -0,0 +1,55 @@
+/**
+ * \file
+ * <!--
+ * This file is part of BeRTOS.
+ *
+ * Bertos 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 2 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
+ *
+ * As a special exception, you may use this file as part of a free software
+ * library without restriction.  Specifically, if other files instantiate
+ * templates or use macros or inline functions from this file, or you compile
+ * this file and link it with other files to produce an executable, this
+ * file does not by itself cause the resulting executable to be covered by
+ * the GNU General Public License.  This exception does not however
+ * invalidate any other reasons why the executable file might be covered by
+ * the GNU General Public License.
+ *
+ * Copyright 2003, 2004, 2006 Develer S.r.l. (http://www.develer.com/)
+ * Copyright 2000 Bernardo Innocenti <bernie@codewiz.org>
+ *
+ * -->
+ *
+ * \brief Buzzer hardware-specific definitions
+ *
+ * \version $Id$
+ *
+ * \author     Francesco Sacchi <batt@develer.com>
+ *             Andrea Grandi <andrea@develer.com>
+ */
+
+#ifndef HW_BUZZER_H
+#define HW_BUZZER_H
+
+#include <avr/io.h>
+#include <cfg/macros.h>
+
+#define BUZZER_BIT     BV(PE3)
+#define IS_BUZZER_ON   (PORTE & BUZZER_BIT)
+#define BUZZER_HW_INIT  do { DDRE |= BV(DDE3); } while (0)
+#define BUZZER_ON       do { PORTE |= BUZZER_BIT; } while (0)
+#define BUZZER_OFF      do { PORTE &= ~BUZZER_BIT; } while (0)
+
+#endif /* HW_BUZZER_H */
+
diff --git a/app/triface/hw/hw_input.h b/app/triface/hw/hw_input.h
new file mode 100644 (file)
index 0000000..6ab0bba
--- /dev/null
@@ -0,0 +1,71 @@
+/**
+ * \file
+ * <!--
+ * This file is part of BeRTOS.
+ *
+ * Bertos 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 2 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
+ *
+ * As a special exception, you may use this file as part of a free software
+ * library without restriction.  Specifically, if other files instantiate
+ * templates or use macros or inline functions from this file, or you compile
+ * this file and link it with other files to produce an executable, this
+ * file does not by itself cause the resulting executable to be covered by
+ * the GNU General Public License.  This exception does not however
+ * invalidate any other reasons why the executable file might be covered by
+ * the GNU General Public License.
+ *
+ * Copyright 2003, 2004, 2006 Develer S.r.l. (http://www.develer.com/)
+ * Copyright 2000 Bernardo Innocenti <bernie@codewiz.org>
+ *
+ * -->>
+ *
+ * \brief Macro for HW_INPUT_H
+ *
+ *
+ * \version $Id$
+ *
+ * \author Andrea Grandi <andrea@develer.com>
+ */
+#ifndef HW_INPUT_H
+#define HW_INPUT_H
+
+/* Set pins as input and enable pull-up */
+#define INPUT_INIT_D do                                        \
+{                                                              \
+       (DDRD &= ~(BV(PD4) | BV(PD5) | BV(PD6) | BV(PD7)));     \
+       (PORTD |= (BV(PD4) | BV(PD5) | BV(PD6) | BV(PD7)));     \
+} while(0)
+
+#define INPUT_INIT_E do                                                \
+{                                                              \
+       (DDRE &= ~(BV(PE4) | BV(PE5) | BV(PE6) | BV(PE7)));     \
+       ATOMIC((PORTE |= (BV(PE4) | BV(PE5) | BV(PE6) | BV(PE7))));     \
+} while(0)
+
+#define INPUT_INIT do { INPUT_INIT_D; INPUT_INIT_E;} while(0)
+
+INLINE uint8_t INPUT_GET(void)
+{
+       uint8_t out_d, out_e;
+       out_d = PIND;
+       out_e = PINE;
+
+       out_d >>= 4;
+       out_e = out_e & 0xF0;
+
+       return out_e | out_d;
+}
+
+#endif // HW_INPUT_H
diff --git a/app/triface/hw/hw_sipo.h b/app/triface/hw/hw_sipo.h
new file mode 100644 (file)
index 0000000..d2f4b63
--- /dev/null
@@ -0,0 +1,59 @@
+/**
+ * \file
+ * <!--
+ * This file is part of BeRTOS.
+ *
+ * Bertos 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 2 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
+ *
+ * As a special exception, you may use this file as part of a free software
+ * library without restriction.  Specifically, if other files instantiate
+ * templates or use macros or inline functions from this file, or you compile
+ * this file and link it with other files to produce an executable, this
+ * file does not by itself cause the resulting executable to be covered by
+ * the GNU General Public License.  This exception does not however
+ * invalidate any other reasons why the executable file might be covered by
+ * the GNU General Public License.
+ *
+ * Copyright 2003, 2004, 2006 Develer S.r.l. (http://www.develer.com/)
+ * Copyright 2000 Bernardo Innocenti <bernie@codewiz.org>
+ *
+ * -->
+ *
+ * \brief Macro for HW_SIPO_H
+ *
+ *
+ * \version $Id$
+ *
+ * \author Andrea Grandi <andrea@develer.com>
+ */
+#ifndef HW_SIPO_H
+#define HW_SIPO_H
+
+#define LOAD_HIGH     (PORTB |= BV(PB3))
+#define LOAD_LOW      (PORTB &= ~BV(PB3))
+#define LOAD_INIT     (DDRB |= BV(PB3))
+#define SET_SCK_OUT   (DDRB |= BV(PB1))
+#define SET_SOUT_OUT  (DDRB |= BV(PB2))
+#define CLOCK_HIGH    (PORTB |= BV(PB1))
+#define CLOCK_LOW     (PORTB &= ~BV(PB1))
+#define SET_SOUT_HIGH (PORTB |= BV(PB2))
+#define SET_SOUT_LOW  (PORTB &= ~BV(PB2))
+#define CLOCK_PULSE   do { CLOCK_HIGH; CLOCK_LOW; } while(0)
+
+#define OE_OUT        (DDRG |= BV(PG3))
+#define OE_LOW        (PORTG &= BV(PG3))
+
+
+#endif // HW_SIPO_H
diff --git a/cpu/avr/drv/sipo.c b/cpu/avr/drv/sipo.c
new file mode 100644 (file)
index 0000000..014f946
--- /dev/null
@@ -0,0 +1,80 @@
+/**
+ * \file
+ * <!--
+ * This file is part of BeRTOS.
+ *
+ * Bertos 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 2 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
+ *
+ * As a special exception, you may use this file as part of a free software
+ * library without restriction.  Specifically, if other files instantiate
+ * templates or use macros or inline functions from this file, or you compile
+ * this file and link it with other files to produce an executable, this
+ * file does not by itself cause the resulting executable to be covered by
+ * the GNU General Public License.  This exception does not however
+ * invalidate any other reasons why the executable file might be covered by
+ * the GNU General Public License.
+ *
+ * Copyright 2008 Develer S.r.l. (http://www.develer.com/)
+ *
+ * -->
+ *
+ * \version $Id$
+ *
+ * \author Andrea Grandi <andrea@develer.com>
+ *
+ * \brief SIPO Module
+ *
+ * The SIPO module trasform a serial input in
+ * a parallel output. Please check hw_sipo.h
+ * file to customize hardware relative parameters.
+ *
+ */
+
+#include <drv/ser.h>
+#include "sipo.h"
+
+Serial *sipo_port;
+
+/** Initialize the SIPO port */
+void sipo_init(void)
+{
+       CLOCK_LOW;
+       SET_SOUT_LOW;
+       LOAD_LOW;
+       SET_SCK_OUT;
+       SET_SOUT_OUT;
+       LOAD_INIT;
+       sipo_putchar(0x0);
+       OE_OUT;
+       OE_LOW;
+}
+
+/** Write a char in the SIPO port and manage the LOAD pin */
+void sipo_putchar(uint8_t c)
+{
+       for(int i = 0; i <= 7; i++)
+       {
+               if((c & BV(i)) == 0)
+                       SET_SOUT_LOW;
+               else
+                       SET_SOUT_HIGH;
+
+               CLOCK_PULSE;
+       }
+
+       LOAD_HIGH;
+       LOAD_LOW;
+}
+
diff --git a/cpu/avr/drv/sipo.h b/cpu/avr/drv/sipo.h
new file mode 100644 (file)
index 0000000..15df226
--- /dev/null
@@ -0,0 +1,51 @@
+/**
+ * \file
+ * <!--
+ * This file is part of BeRTOS.
+ *
+ * Bertos 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 2 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
+ *
+ * As a special exception, you may use this file as part of a free software
+ * library without restriction.  Specifically, if other files instantiate
+ * templates or use macros or inline functions from this file, or you compile
+ * this file and link it with other files to produce an executable, this
+ * file does not by itself cause the resulting executable to be covered by
+ * the GNU General Public License.  This exception does not however
+ * invalidate any other reasons why the executable file might be covered by
+ * the GNU General Public License.
+ *
+ * Copyright 2008 Develer S.r.l. (http://www.develer.com/)
+ *
+ * -->
+ *
+ * \brief Macro for SIPO_H
+ *
+ *
+ * \version $Id$
+ *
+ * \author Andrea Grandi <andrea@develer.com>
+ */
+
+#ifndef SIPO_H
+#define SIPO_H
+
+#include <avr/io.h>
+#include <hw/hw_sipo.h>
+
+void sipo_init(void);
+void sipo_putchar(uint8_t c);
+
+#endif // SIPO_H
+
diff --git a/net/keytag.c b/net/keytag.c
new file mode 100644 (file)
index 0000000..afc21b1
--- /dev/null
@@ -0,0 +1,110 @@
+/**
+ * \file
+ * <!--
+ * This file is part of BeRTOS.
+ *
+ * Bertos 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 2 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
+ *
+ * As a special exception, you may use this file as part of a free software
+ * library without restriction.  Specifically, if other files instantiate
+ * templates or use macros or inline functions from this file, or you compile
+ * this file and link it with other files to produce an executable, this
+ * file does not by itself cause the resulting executable to be covered by
+ * the GNU General Public License.  This exception does not however
+ * invalidate any other reasons why the executable file might be covered by
+ * the GNU General Public License.
+ *
+ * Copyright 2008 Develer S.r.l. (http://www.develer.com/)
+ *
+ * -->
+ *
+ * \author Andrea Grandi <andrea@develer.com>
+ *
+ * \brief Tag protocol (protocol).
+ *
+ * TAG protocol is decribed in this way:
+ * <pre>
+ * ---------------------------------------------------
+ * |STX (0x02)|data...(10 HEX chars)|CR|LF|ETX (0x03)|
+ * ---------------------------------------------------
+ * </pre>
+ */
+
+#include "keytag.h"
+
+#include <drv/timer.h>
+#include <drv/ser.h>
+
+#include <cfg/macros.h>
+#include <cfg/debug.h>
+
+static void keytag_clearPkt(struct TagPacket *pkt)
+{
+       pkt->sync = false;
+       pkt->len = 0;
+}
+
+void keytag_init(struct TagPacket *pkt)
+{
+       keytag_clearPkt(pkt);
+}
+
+void keytag_poll(struct TagPacket *pkt)
+{
+       int c;
+
+       /* Get all chars from buffer */
+       while ((c = ser_getchar_nowait(pkt->tag_ser)) != EOF)
+       {
+               /* Search for STX char in received chars */
+               if (c == TAG_STX)
+               {
+                       /* When STX is found a new packet begins */
+                       if (pkt->sync)
+                               kprintf("TAG double sync!\n");
+                       keytag_clearPkt(pkt);
+                       pkt->sync = true;
+               }
+               else if (pkt->sync)
+               {
+                       /* Check for end of packet */
+                       if (c == TAG_ETX)
+                       {
+                               pkt->buf[TAG_MAX_PRINT_CHARS] = '\x0';
+                               /* Write read TAG on communication serial */
+                               ser_printf(pkt->comm_ser, "tag %s", pkt->buf);
+                               pkt->sync = false;
+                       }
+                       else
+                       {
+                               /* Check for buffer overflow */
+                               if (pkt->len >= TAG_MAX_LEN)
+                               {
+                                       kprintf("TAG buffer overflow\n");
+                                       pkt->sync = false;
+                               }
+                               else
+                               {
+                                       /* Add every char after STX to tag reading buffer */
+                                       if (pkt->sync)
+                                       {
+                                               pkt->buf[pkt->len] = c;
+                                               pkt->len++;
+                                       }
+                               }
+                       }
+               }
+       }
+}
diff --git a/net/keytag.h b/net/keytag.h
new file mode 100644 (file)
index 0000000..651f134
--- /dev/null
@@ -0,0 +1,81 @@
+/**
+ * \file
+ * <!--
+ * This file is part of BeRTOS.
+ *
+ * Bertos 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 2 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
+ *
+ * As a special exception, you may use this file as part of a free software
+ * library without restriction.  Specifically, if other files instantiate
+ * templates or use macros or inline functions from this file, or you compile
+ * this file and link it with other files to produce an executable, this
+ * file does not by itself cause the resulting executable to be covered by
+ * the GNU General Public License.  This exception does not however
+ * invalidate any other reasons why the executable file might be covered by
+ * the GNU General Public License.
+ *
+ * Copyright 2008 Develer S.r.l. (http://www.develer.com/)
+ *
+ * -->
+ *
+ * \author Andrea Grandi <andrea@develer.com>
+ *
+ * \brief Tag protocol. (interface).
+ */
+
+#ifndef NET_KEYTAG_H
+#define NET_KEYTAG_H
+
+/**
+ * Starting communication char (STX).
+ */
+#define TAG_STX 0x02
+
+/**
+ * Ending communication char (ETX).
+ */
+#define TAG_ETX 0x03
+
+/**
+ * Max buffer lenght
+ */
+#define TAG_MAX_LEN 14
+
+#define TAG_SER_PORT 0
+#define TAG_SER_BAUDRATE 9600
+
+/**
+ * Max number of chars to print in the communication serial
+ */
+#define TAG_MAX_PRINT_CHARS 12
+
+#include <drv/ser.h>
+
+/**
+ * Structure of a Tag packet
+ */
+typedef struct TagPacket
+{
+       struct Serial *tag_ser;         // Tag serial
+       struct Serial *comm_ser;        // Communication serial
+       bool sync;                      // Status flag: true if we find an STX
+       uint16_t len;                   // Packet lenght
+       uint8_t buf[TAG_MAX_LEN];       // Reception buffer
+} TagPacket;
+
+void keytag_init(struct TagPacket *pkt);
+void keytag_poll(struct TagPacket *pkt);
+
+#endif /* NET_TAG_H */