Generic communication interface between the wireless board (mote) and the sensor board. Any kind of sensor board can be connected to the mote using this specification given it provides a SPI peripheral, one input pin with interrupt capability and one digital output. The sensor board must implement a special register set from which all required information can be retrieved. Protocol: http://is.gd/wuQorh Github: http://is.gd/ySj1L9
util/buf_io.h
- Committer:
- marcelobarrosalmeida
- Date:
- 2014-04-08
- Revision:
- 1:acdf490d94a7
File content as of revision 1:acdf490d94a7:
/** @file buf_io.c Several functions for handling data in buffers. Basic functions: buf_io_[get|put][8|16|32|64|f|d]_[f|t][b|l]_ap[r] Notation: 8|16|32|64|f|d = data size (f for float, d for double) [f|t][b|l] = from/to big/little ap[r] = add pointer [reference] at the end Check buf_io.c for a proper implementation of these functions for your platform. */ #ifndef __BUF_IO__ #define __BUF_IO__ #ifdef __cplusplus extern "C" { #endif /** Pointer size */ #define POINTER_SIZE (sizeof(void *)) /** Number of elements in a array */ #define NUM_OF_ELEMENTS_IN_ARRAY(a) (sizeof(a)/sizeof(a[0])) /** @name next/prev macro functions Next/previous aligned address, avoiding data aborts in buffer operations. @{ */ #define __next_aligned_addr32(x) (((x) + 0x03) & 0xFFFFFFFC) #define __next_aligned_addr16(x) (((x) + 0x01) & 0xFFFFFFFE) #define __prev_aligned_addr32(x) ((x) & 0xFFFFFFFC) #define __prev_aligned_addr16(x) ((x) & 0xFFFFFFFE) /** @} */ /** @name swap functions Swap operations. @{ */ /** Swaps a 16 bits unsigned integer. @param ucShort 16 bits unsigned integer to be swapped @return 16 bits unsigned integer swapped @{ */ uint16_t buf_io_swap16 (uint16_t usShort); /** Swaps a 32 bits unsigned integer. @param ulLong 32 bits unsigned integer to be swapped @return 32 bits unsigned integer swapped @{ */ uint32_t buf_io_swap32 (uint32_t ulLong); /** Swaps a 16 bits unsigned integer inside a buffer. @param pucPtr Pointer where 16 bits unsigned integer is stored. */ void buf_io_swap16p(uint8_t *pucPtr); /** Swaps a 32 bits unsigned integer inside a buffer. @param pucPtr Pointer where 32 bits unsigned integer is stored. */ void buf_io_swap32p(uint8_t *pucPtr); /** Swaps 8 bits unsigned integer in a byte. @param ucChar 8 bits unsigned integer to be bit swapped @return 8 bits unsigned integer swapped */ uint8_t buf_io_swap8b (uint8_t ucChar); /** @} */ /** @name endianess dependent functions (GET) @{ */ uint8_t buf_io_get8_fl (uint8_t *buf); uint8_t buf_io_get8_fb (uint8_t *buf); uint8_t buf_io_get8_fl_apr (uint8_t **buf); uint8_t buf_io_get8_fb_apr (uint8_t **buf); #define buf_io_get8_fl_ap(x) buf_io_get8_fl_apr(&x) #define buf_io_get8_fb_ap(x) buf_io_get8_fb_apr(&x) uint16_t buf_io_get16_fl (uint8_t *buf); uint16_t buf_io_get16_fb (uint8_t *buf); uint16_t buf_io_get16_fl_apr (uint8_t **buf); uint16_t buf_io_get16_fb_apr (uint8_t **buf); #define buf_io_get16_fl_ap(x) buf_io_get16_fl_apr(&x) #define buf_io_get16_fb_ap(x) buf_io_get16_fb_apr(&x) uint32_t buf_io_get32_fl (uint8_t *buf); uint32_t buf_io_get32_fb (uint8_t *buf); uint32_t buf_io_get32_fl_apr (uint8_t **buf); uint32_t buf_io_get32_fb_apr (uint8_t **buf); #define buf_io_get32_fl_ap(x) buf_io_get32_fl_apr(&x) #define buf_io_get32_fb_ap(x) buf_io_get32_fb_apr(&x) uint64_t buf_io_get64_fl (uint8_t *buf); uint64_t buf_io_get64_fb (uint8_t *buf); uint64_t buf_io_get64_fl_apr (uint8_t **buf); uint64_t buf_io_get64_fb_apr (uint8_t **buf); #define buf_io_get64_fl_ap(x) buf_io_get64_fl_apr(&x) #define buf_io_get64_fb_ap(x) buf_io_get64_fb_apr(&x) float buf_io_getf_fl (uint8_t *src_ptr); float buf_io_getf_fb (uint8_t *src_ptr); float buf_io_getf_fl_apr (uint8_t **src_ptr); float buf_io_getf_fb_apr (uint8_t **src_ptr); #define buf_io_getf_fl_ap(x) buf_io_getf_fl_apr(&x) #define buf_io_getf_fb_ap(x) buf_io_getf_fb_apr(&x) double buf_io_getd_fl (uint8_t *src_ptr); double buf_io_getd_fb (uint8_t *src_ptr); double buf_io_getd_fl_apr (uint8_t **src_ptr); double buf_io_getd_fb_apr (uint8_t **src_ptr); #define buf_io_getd_fl_ap(x) buf_io_getd_fl_apr(&x) #define buf_io_getd_fb_ap(x) buf_io_getd_fb_apr(&x) /** @} */ /** @name endianess dependent functions (PUT) @{ */ void buf_io_put8_tl (uint8_t value, uint8_t *buf); void buf_io_put8_tb (uint8_t value, uint8_t *buf); void buf_io_put8_tl_apr (uint8_t value, uint8_t **buf); void buf_io_put8_tb_apr (uint8_t value, uint8_t **buf); #define buf_io_put8_tl_ap(v,x) buf_io_put8_tl_apr(v,&x) #define buf_io_put8_tb_ap(v,x) buf_io_put8_tb_apr(v,&x) void buf_io_put16_tl (uint16_t value, uint8_t *buf); void buf_io_put16_tb (uint16_t value, uint8_t *buf); void buf_io_put16_tl_apr (uint16_t value, uint8_t **buf); void buf_io_put16_tb_apr (uint16_t value, uint8_t **buf); #define buf_io_put16_tl_ap(v,x) buf_io_put16_tl_apr(v,&x) #define buf_io_put16_tb_ap(v,x) buf_io_put16_tb_apr(v,&x) void buf_io_put32_tl (uint32_t value, uint8_t *buf); void buf_io_put32_tb (uint32_t value, uint8_t *buf); void buf_io_put32_tl_apr (uint32_t value, uint8_t **buf); void buf_io_put32_tb_apr (uint32_t value, uint8_t **buf); #define buf_io_put32_tl_ap(v,x) buf_io_put32_tl_apr(v,&x) #define buf_io_put32_tb_ap(v,x) buf_io_put32_tb_apr(v,&x) void buf_io_put64_tl (uint64_t value, uint8_t *buf); void buf_io_put64_tb (uint64_t value, uint8_t *buf); void buf_io_put64_tl_apr (uint64_t value, uint8_t **buf); void buf_io_put64_tb_apr (uint64_t value, uint8_t **buf); #define buf_io_put64_tl_ap(v,x) buf_io_put64_tl_apr(v,&x) #define buf_io_put64_tb_ap(v,x) buf_io_put64_tb_apr(v,&x) void buf_io_putf_tl (float value, uint8_t *buf); void buf_io_putf_tb (float value, uint8_t *buf); void buf_io_putf_tl_apr (float value, uint8_t **buf); void buf_io_putf_tb_apr (float value, uint8_t **buf); #define buf_io_putf_tl_ap(v, x) buf_io_putf_tl_apr(v, &x) #define buf_io_putf_tb_ap(v, x) buf_io_putf_tb_apr(v, &x) void buf_io_putd_tl (double value, uint8_t *buf); void buf_io_putd_tb (double value, uint8_t *buf); void buf_io_putd_tl_apr (double value, uint8_t **buf); void buf_io_putd_tb_apr (double value, uint8_t **buf); #define buf_io_putd_tl_ap(v, x) buf_io_putd_tl_apr(v, &x) #define buf_io_putd_tb_ap(v, x) buf_io_putd_tb_apr(v, &x) /** @} */ #ifdef __cplusplus } #endif #endif /* __BUF_IO__ */