[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[paparazzi-commits] [5287] x
From: |
antoine drouin |
Subject: |
[paparazzi-commits] [5287] x |
Date: |
Mon, 09 Aug 2010 22:30:19 +0000 |
Revision: 5287
http://svn.sv.gnu.org/viewvc/?view=rev&root=paparazzi&revision=5287
Author: poine
Date: 2010-08-09 22:30:18 +0000 (Mon, 09 Aug 2010)
Log Message:
-----------
x
Added Paths:
-----------
paparazzi3/trunk/sw/airborne/fms/fms_crc.c
paparazzi3/trunk/sw/airborne/fms/fms_crc.h
paparazzi3/trunk/sw/airborne/fms/fms_spi_link_crc.c
paparazzi3/trunk/sw/airborne/fms/fms_spi_link_crc.h
Added: paparazzi3/trunk/sw/airborne/fms/fms_crc.c
===================================================================
--- paparazzi3/trunk/sw/airborne/fms/fms_crc.c (rev 0)
+++ paparazzi3/trunk/sw/airborne/fms/fms_crc.c 2010-08-09 22:30:18 UTC (rev
5287)
@@ -0,0 +1,74 @@
+
+#include "fms/fms_crc.h"
+
+crc_t crc__table[256];
+
+void crc__init(uint32_t polynomial) {
+ crc_t crc_remainder;
+ uint32_t crc_dividend;
+ crc_t top_bit = (1 << (CRC__WIDTH - 1));
+ uint8_t bit;
+ for(crc_dividend = 0; crc_dividend < 256; crc_dividend++) {
+ crc_remainder = crc_dividend << (CRC__WIDTH - 8);
+ for(bit = 8; bit > 0; bit--) {
+ if(crc_remainder & top_bit) {
+ crc_remainder = (crc_remainder << 1) ^ polynomial;
+ }
+ else {
+ crc_remainder = (crc_remainder << 1);
+ }
+ }
+ crc__table[crc_dividend] = crc_remainder;
+ }
+
+#if 0
+ int i=0;
+ while (i<256) {
+ printf("%03d ",crc__table[i]);
+ if ((i%8)==7) printf("\n");
+ i++;
+ }
+#endif
+
+}
+
+#define POLYNOMIAL 0x31
+#define WIDTH (8 * sizeof(uint8_t))
+#define TOPBIT (1 << (WIDTH - 1))
+uint8_t crc__calc_block_crc8(const uint8_t buf[], uint32_t len) {
+ crc_t _remainder = 0;
+ for (int byte = 0; byte < len; ++byte) {
+ _remainder ^= (buf[byte] << (WIDTH - 8));
+ for (uint8_t bit = 8; bit > 0; --bit) {
+ if (_remainder & TOPBIT)
+ _remainder = (_remainder << 1) ^ POLYNOMIAL;
+ else
+ _remainder = (_remainder << 1);
+ }
+ }
+ return (_remainder);
+}
+
+#if 0
+uint8_t crc__calc_block_crc8(const uint8_t buffer[], uint32_t buffer_length) {
+ int counter;
+ uint16_t crc = 0;
+ for(counter = 0; counter < buffer_length; counter++) {
+ crc = crc ^ crc__table[ ( crc ^ *(char *)(buffer)++ ) & 0x00FF ];
+ }
+ return crc;
+}
+#endif
+
+
+uint16_t crc__calc_block_crc16(const void * buffer, uint32_t buffer_length) {
+ int counter;
+ crc_t crc = 0;
+ for(counter = 0; counter < buffer_length; counter++) {
+ crc = (crc << 8) ^ crc__table[ ( (crc >> 8) ^ *(char *)(buffer)++ ) &
0x00FF ];
+ }
+ return crc;
+}
+
+
+
Added: paparazzi3/trunk/sw/airborne/fms/fms_crc.h
===================================================================
--- paparazzi3/trunk/sw/airborne/fms/fms_crc.h (rev 0)
+++ paparazzi3/trunk/sw/airborne/fms/fms_crc.h 2010-08-09 22:30:18 UTC (rev
5287)
@@ -0,0 +1,21 @@
+#ifndef __CRC_H__
+#define __CRC_H__
+
+#include "std.h"
+
+typedef uint8_t crc_t;
+
+#define CRC__WIDTH (8 * sizeof(crc_t))
+
+void crc__init(uint32_t polynomial);
+
+extern uint8_t crc__calc_block_crc8(const uint8_t buffer[], uint32_t
buffer_length);
+uint16_t crc__calc_block_crc16(const void * buffer,
+ uint32_t buffer_length);
+
+#define crc8__check(buffer, length, crc) \
+ (crc == crc__calc_block_crc8((buffer), (length)));
+#define crc16__check(buffer, length, crc) \
+ (crc == crc__calc_block_crc16((buffer), (length)));
+
+#endif /* __CRC_H__ */
Added: paparazzi3/trunk/sw/airborne/fms/fms_spi_link_crc.c
===================================================================
--- paparazzi3/trunk/sw/airborne/fms/fms_spi_link_crc.c
(rev 0)
+++ paparazzi3/trunk/sw/airborne/fms/fms_spi_link_crc.c 2010-08-09 22:30:18 UTC
(rev 5287)
@@ -0,0 +1,59 @@
+#include "fms_spi_link.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <stdint.h>
+#include <sys/ioctl.h>
+#include <linux/types.h>
+#include <linux/spi/spidev.h>
+
+int spi_link_init(void) {
+
+ spi_link.device = "/dev/spidev1.1";
+ // spi_link.mode = 0;
+ // spi_link.mode = SPI_CPHA | SPI_CPOL | SPI_LSB_FIRST;
+ spi_link.mode = SPI_CPHA;
+ // spi_link.mode = SPI_LSB_FIRST;
+ spi_link.bits = 8;
+ spi_link.speed = 3000000;
+ // spi_link.speed = 18000000;
+ spi_link.delay = 1;
+
+ spi_link.fd = open(spi_link.device, O_RDWR);
+ if (spi_link.fd < 0)
+ return -1;
+
+ int ret = 0;
+ ret = ioctl(spi_link.fd, SPI_IOC_WR_MODE, &spi_link.mode);
+ if (ret == -1)
+ return -2;
+
+ ret = ioctl(spi_link.fd, SPI_IOC_WR_BITS_PER_WORD, &spi_link.bits);
+ if (ret == -1)
+ return -3;
+
+ ret = ioctl(spi_link.fd, SPI_IOC_WR_MAX_SPEED_HZ, &spi_link.speed);
+ if (ret == -1)
+ return -4;
+
+ return 0;
+}
+
+int spi_link_send(const void *buf_out, size_t count, void *buf_in) {
+
+ int ret;
+
+ struct spi_ioc_transfer tr = {
+ .tx_buf = (unsigned long)buf_out,
+ .rx_buf = (unsigned long)buf_in,
+ .len = count,
+ .delay_usecs = spi_link.delay,
+ .speed_hz = spi_link.speed,
+ .bits_per_word = spi_link.bits,
+ };
+ ret = ioctl(spi_link.fd, SPI_IOC_MESSAGE(1), &tr);
+
+ return ret;
+
+}
Added: paparazzi3/trunk/sw/airborne/fms/fms_spi_link_crc.h
===================================================================
--- paparazzi3/trunk/sw/airborne/fms/fms_spi_link_crc.h
(rev 0)
+++ paparazzi3/trunk/sw/airborne/fms/fms_spi_link_crc.h 2010-08-09 22:30:18 UTC
(rev 5287)
@@ -0,0 +1,21 @@
+#ifndef FMS_SPI_LINK_H
+#define FMS_SPI_LINK_H
+
+#include <inttypes.h>
+#include <unistd.h>
+
+struct SpiLink {
+ int fd;
+ char* device;
+ uint8_t mode;
+ uint8_t bits;
+ uint32_t speed;
+ uint16_t delay;
+};
+
+struct SpiLink spi_link;
+
+extern int spi_link_init(void);
+extern int spi_link_send(const void *buf_out, size_t count, void* buf_in);
+
+#endif /* FMS_SPI_LINK_H */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [paparazzi-commits] [5287] x,
antoine drouin <=