aroarfw

include/aroarfw/msg.h

Go to the documentation of this file.
00001 //msg.h:
00002 
00003 /*
00004  *      Copyright (C) Philipp 'ph3-der-loewe' Schafft - 2010
00005  *
00006  *  This file is part of aroarfw, a RoarAudio framework for
00007  *  embedded systems (µControlers).
00008  *
00009  *  This file is free software; you can redistribute it and/or modify
00010  *  it under the terms of the GNU General Public License version 3
00011  *  or (at your option) any later version as published by
00012  *  the Free Software Foundation.
00013  *
00014  *  aroarfw is distributed in the hope that it will be useful,
00015  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00016  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00017  *  GNU General Public License for more details.
00018  *
00019  *  You should have received a copy of the GNU General Public License
00020  *  along with this software; see the file COPYING.  If not, write to
00021  *  the Free Software Foundation, 51 Franklin Street, Fifth Floor,
00022  *  Boston, MA 02110-1301, USA.
00023  */
00024 
00025 #ifndef _AROARFW_MSG_H_
00026 #define _AROARFW_MSG_H_
00027 
00028 #include <aroarfw/types.h>
00029 #include <aroarfw/proto.h>
00030 #include <aroarfw/byteorder.h>
00031 
00033 #define RMSG_V0_MAX_HEADER_LEN 10
00034 
00036 #define RMSG_V1_MAX_HEADER_LEN 11
00037 
00039 #define RMSG_V2_MAX_HEADER_LEN 20
00040 
00042 typedef unsigned char rmsg_v0_t[RMSG_V0_MAX_HEADER_LEN];
00043 
00045 typedef unsigned char rmsg_v1_t[RMSG_V1_MAX_HEADER_LEN];
00046 
00048 typedef unsigned char rmsg_v2_t[RMSG_V2_MAX_HEADER_LEN];
00049 
00051 typedef union {
00053  unsigned char version;
00054 
00056  rmsg_v0_t v0;
00057 
00059  rmsg_v1_t v1;
00060 
00062  rmsg_v2_t v2;
00063 } rmsg_t;
00064 
00069 //void   rmsg0_init  (rmsg_v0_t msg, rcmd_t cmd);
00070 #define rmsg0_init(msg,cmd) ((msg)[1]=                \
00071                              ((msg)[0]=               \
00072                               (msg)[2]=(msg)[3]=      \
00073                               (msg)[4]=(msg)[5]=      \
00074                               (msg)[6]=(msg)[7]=      \
00075                               (msg)[8]=(msg)[9]= 0) + \
00076                              (cmd))
00077 
00082 #define rmsg0_getcmd(msg) (((unsigned char*)(msg))[1])
00083 
00088 //void   rmsg0_setlen(rmsg_v0_t msg, size_t len);
00089 #define rmsg0_setlen(msg, len) ((void)RBO_H2NB16(&(((unsigned char*)(msg))[8]), (len)))
00090 
00095 //size_t rmsg0_getlen(rmsg_v0_t msg);
00096 #define rmsg0_getlen(msg) RBO_NB2H16(&(((unsigned char*)(msg))[8]))
00097 
00102 //void   rmsg0_setsid(rmsg_v0_t msg, rsid_t sid);
00103 #define rmsg0_setsid(msg, sid) ((void)RBO_H2NB16(&(((unsigned char*)(msg))[2]), (sid)))
00104 
00109 //rsid_t rmsg0_getsid(rmsg_v0_t msg);
00110 #define rmsg0_getsid(msg) RBO_NB2H16(&(((unsigned char*)(msg))[8]))
00111 
00116 //void   rmsg0_setpos(rmsg_v0_t msg, rpos_t pos);
00117 #define rmsg0_setpos(msg, pos) ((void)RBO_H2NB32(&(((unsigned char*)(msg))[4]), (pos)))
00118 
00123 //rpos_t rmsg0_getpos(rmsg_v0_t msg);
00124 #define rmsg0_getpos(msg) RBO_NB2H16(&(((unsigned char*)(msg))[4]))
00125 
00135 //size_t rmsg0_len   (rmsg_v0_t msg);
00136 #define rmsg0_len(msg) RMSG_V0_MAX_HEADER_LEN
00137 
00148 #define rmsg0_header(msg) (msg)
00149 
00150 
00151 // Message version independed:
00152 
00160 #define rmsg_version(msg) (((unsigned char*)msg)[0])
00161 
00162 #endif
00163 
00164 //ll