Contiki 2.6

me.c

Go to the documentation of this file.
00001 /*
00002  * Copyright (c) 2005, Swedish Institute of Computer Science
00003  * All rights reserved. 
00004  *
00005  * Redistribution and use in source and binary forms, with or without 
00006  * modification, are permitted provided that the following conditions 
00007  * are met: 
00008  * 1. Redistributions of source code must retain the above copyright 
00009  *    notice, this list of conditions and the following disclaimer. 
00010  * 2. Redistributions in binary form must reproduce the above copyright 
00011  *    notice, this list of conditions and the following disclaimer in the 
00012  *    documentation and/or other materials provided with the distribution. 
00013  * 3. Neither the name of the Institute nor the names of its contributors 
00014  *    may be used to endorse or promote products derived from this software 
00015  *    without specific prior written permission. 
00016  *
00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 
00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 
00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 
00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 
00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
00027  * SUCH DAMAGE. 
00028  *
00029  * This file is part of the Contiki operating system.
00030  *
00031  * @(#)$Id: me.c,v 1.1 2006/06/17 22:41:18 adamdunkels Exp $
00032  */
00033 
00034 /** \addtogroup me
00035  * @{ */
00036 
00037 /**
00038  * \file
00039  * Implementation of the table-driven Manchester encoding and decoding.
00040  * \author
00041  * Adam Dunkels <adam@sics.se>
00042  */
00043 
00044 #include "me_tabs.h"
00045 
00046 /*---------------------------------------------------------------------------*/
00047 /**
00048  * Manchester encode an 8-bit byte.
00049  *
00050  * This function Manchester encodes an 8-bit byte into a 16-bit
00051  * word. The function me_decode() does the inverse operation.
00052  *
00053  * \param c The byte to be encoded
00054  *
00055  * \retval The encoded word.
00056  */
00057 /*---------------------------------------------------------------------------*/
00058 unsigned short
00059 me_encode(unsigned char c)
00060 {
00061   return me_encode_tab[c];
00062 }
00063 /*---------------------------------------------------------------------------*/
00064 /**
00065  * Decode a Manchester encoded 16-bit word.
00066  *
00067  * This function decodes a Manchester encoded 16-bit word into a 8-bit
00068  * byte. The function does not check for parity errors in the encoded
00069  * byte.
00070  *
00071  * \param m The 16-bit Manchester encoded word
00072  * \return The decoded 8-bit byte
00073  */
00074 /*---------------------------------------------------------------------------*/
00075 unsigned char
00076 me_decode16(unsigned short m)
00077 {
00078   unsigned char m1, m2, c;
00079 
00080   m1 = m >> 8;
00081   m2 = m & 0xff;
00082 
00083   c = (me_decode_tab[m1] << 4) |
00084     me_decode_tab[m2];
00085   return c;
00086 }
00087 /*---------------------------------------------------------------------------*/
00088 /**
00089  * Decode a Manchester encoded 8-bit byte.
00090  *
00091  * This function decodes a Manchester encoded 8-bit byte into 4
00092  * decoded bits.. The function does not check for parity errors in the
00093  * encoded byte.
00094  *
00095  * \param m The 8-bit Manchester encoded byte
00096  * \return The decoded 4 bits
00097  */
00098 /*---------------------------------------------------------------------------*/
00099 unsigned char
00100 me_decode8(unsigned char m)
00101 {
00102   return  me_decode_tab[m];
00103 }
00104 /*---------------------------------------------------------------------------*/
00105 /**
00106  * Check if an encoded byte is valid.
00107  */
00108 /*---------------------------------------------------------------------------*/
00109 unsigned char
00110 me_valid(unsigned char m)
00111 {
00112   return me_valid_tab[m];
00113 }
00114 /*---------------------------------------------------------------------------*/
00115 
00116 /** @} */
00117