Add basic change for v1453

Change-Id: I9497a61bbc3717f66413794a4e7dee0347c0bc33
diff --git a/mbtk/test/others/mbtk_spi_write.c b/mbtk/test/others/mbtk_spi_write.c
new file mode 100755
index 0000000..be15742
--- /dev/null
+++ b/mbtk/test/others/mbtk_spi_write.c
@@ -0,0 +1,320 @@
+#include <stdint.h>

+#include <unistd.h>

+#include <stdio.h>

+#include <stdlib.h>

+#include <string.h>

+#include <stdarg.h>

+#include <getopt.h>

+#include <fcntl.h>

+#include <sys/ioctl.h>

+#include <linux/types.h>

+#include <linux/spi/spidev.h>

+ 

+#define 	SPI_DEBUG 1

+#define     DEBUG_SWITCH    1        /* 打开调试信息打印功能 */

+#define     ERR_DEBUG_SWITCH    1    /* 打印错误信息打印功能 */

+ 

+/**

+* 简单打印调试信息

+*/

+#if    DEBUG_SWITCH

+#define pr_debug(fmt,args...) printf(fmt, ##args)

+#else

+#define pr_debug(fmt,args...) /*do nothing */

+#endif

+ 

+/**

+* 错误信息打印

+* 自动打印发生错误时代码所在的位置

+*/

+#if    ERR_DEBUG_SWITCH

+#define pr_err(fmt,args...) printf("\nError:\nFile:<%s> Fun:[%s] Line:%d\n "fmt, __FILE__, __FUNCTION__, __LINE__, ##args)

+#else

+#define pr_err(fmt,args...) /*do nothing */

+#endif

+ 

+ 

+/*

+* 说明:SPI通讯实现

+*           方式一: 同时发送与接收实现函数: SPI_Transfer()

+*           方式二:发送与接收分开来实现

+*           SPI_Write() 只发送

+*           SPI_Read()  只接收

+*           两种方式不同之处:方式一,在发的过程中也在接收,第二种方式,收与发单独进行

+*  Created on: 2013-5-28

+*      Author: lzy

+*/

+static char device[64] = {0};

+static uint8_t mode = 0; /* SPI通信使用全双工,设置CPOL=0,CPHA=0。 */

+static uint8_t bits = 8; /* 8bits读写,MSB first。*/

+static uint32_t speed = 12 * 1000 * 1000;/* 设置12M传输速度 */

+static uint16_t delay = 0;

+static int g_SPI_Fd = 0;

+ 

+static void pabort(const char *s)

+{

+    perror(s);

+    abort();

+}

+ 

+/**

+*  功 能:同步数据传输

+* 入口参数 :

+*             TxBuf -> 发送数据首地址

+*             len -> 交换数据的长度

+* 出口参数:

+*             RxBuf -> 接收数据缓冲区

+* 返回值:0 成功

+* 开发人员:Lzy 2013-5-22

+*/

+int SPI_Transfer(const uint8_t *TxBuf, uint8_t *RxBuf, int len)

+{

+    int ret;

+    int fd = g_SPI_Fd;

+ 

+    struct spi_ioc_transfer tr =    {

+            .tx_buf = (unsigned long) TxBuf,

+            .rx_buf = (unsigned long) RxBuf,

+            .len =    len,

+            .delay_usecs = delay,

+    };

+ 

+    ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);

+    if (ret < 1)

+        pr_err("can't send spi message");

+    else

+    {

+#if SPI_DEBUG

+        int i;

+        pr_debug("\nmbtk: send spi message Succeed");

+        pr_debug("\nmbtk: SPI Send [Len:%d]: ", len);

+        for (i = 0; i < len; i++)

+        {

+            if (i % 8 == 0)

+            printf("\n\t");

+            printf("0x%02X ", TxBuf[i]);

+        }

+        printf("\n");

+ 

+        pr_debug("mbtk: SPI Receive [len:%d]:", len);

+        for (i = 0; i < len; i++)

+        {

+            if (i % 8 == 0)

+            printf("\n\t");

+            printf("0x%02X ", RxBuf[i]);

+        }

+        printf("\n");

+#endif

+    }

+    return ret;

+}

+ 

+/**

+* 功 能:发送数据

+* 入口参数 :

+*             TxBuf -> 发送数据首地址

+*            len ->  发送与长度

+*返回值:0 成功

+* 开发人员:Lzy 2013-5-22

+*/

+int SPI_Write(uint8_t *TxBuf, int len)

+{

+    int ret;

+    int fd = g_SPI_Fd;

+ 

+    ret = write(fd, TxBuf, len);

+    if (ret < 0)

+        pr_err("SPI Write error\n");

+    else

+    {

+#if SPI_DEBUG

+        int i;

+        pr_debug("\nSPI Write [Len:%d]: ", len);

+        for (i = 0; i < len; i++)

+        {

+            if (i % 8 == 0)

+            printf("\n\t");

+            printf("0x%02X ", TxBuf[i]);

+        }

+        printf("\n");

+ 

+#endif

+    }

+ 

+    return ret;

+}

+ 

+/**

+* 功 能:接收数据

+* 出口参数:

+*         RxBuf -> 接收数据缓冲区

+*         rtn -> 接收到的长度

+* 返回值:>=0 成功

+* 开发人员:Lzy 2013-5-22

+*/

+int SPI_Read(uint8_t *RxBuf, int len)

+{

+    int ret;

+    int fd = g_SPI_Fd;

+    ret = read(fd, RxBuf, len);

+    if (ret < 0)

+        pr_err("SPI Read error\n");

+    else

+    {

+#if SPI_DEBUG

+        int i;

+        pr_debug("SPI Read [len:%d]:", len);

+        for (i = 0; i < len; i++)

+        {

+            if (i % 8 == 0)

+            printf("\n\t");

+            printf("0x%02X ", RxBuf[i]);

+        }

+        printf("\n");

+#endif

+    }

+ 

+    return ret;

+}

+ 

+/**

+* 功 能:打开设备  并初始化设备

+* 入口参数 :

+* 出口参数:

+* 返回值:0 表示已打开  0XF1 表示SPI已打开 其它出错

+* 开发人员:Lzy 2013-5-22

+*/

+int SPI_Open(void)

+{

+    int fd;

+    int ret = 0;

+ 

+    if (g_SPI_Fd != 0) /* 设备已打开 */

+        return 0xF1;

+ 

+    fd = open(device, O_RDWR);

+    if (fd < 0)

+        pabort("can't open device");

+    else

+        pr_debug("SPI - Open Succeed. Start Init SPI...\n");

+ 

+    g_SPI_Fd = fd;

+    /*

+     * spi mode

+     */

+    ret = ioctl(fd, SPI_IOC_WR_MODE, &mode);

+    if (ret == -1)

+        pabort("can't set spi mode");

+ 

+    ret = ioctl(fd, SPI_IOC_RD_MODE, &mode);

+    if (ret == -1)

+        pabort("can't get spi mode");

+ 

+    /*

+     * bits per word

+     */

+    ret = ioctl(fd, SPI_IOC_WR_BITS_PER_WORD, &bits);

+    if (ret == -1)

+        pabort("can't set bits per word");

+ 

+    ret = ioctl(fd, SPI_IOC_RD_BITS_PER_WORD, &bits);

+    if (ret == -1)

+        pabort("can't get bits per word");

+ 

+    /*

+     * max speed hz

+     */

+    ret = ioctl(fd, SPI_IOC_WR_MAX_SPEED_HZ, &speed);

+    if (ret == -1)

+        pabort("can't set max speed hz");

+ 

+    ret = ioctl(fd, SPI_IOC_RD_MAX_SPEED_HZ, &speed);

+    if (ret == -1)

+        pabort("can't get max speed hz");

+ 

+    pr_debug("spi mode: %d\n", mode);

+    pr_debug("bits per word: %d\n", bits);

+    pr_debug("max speed: %d KHz (%d MHz)\n", speed / 1000, speed / 1000 / 1000);

+ 

+    return ret;

+}

+ 

+/**

+* 功 能:关闭SPI模块

+*/

+int SPI_Close(void)

+{

+    int fd = g_SPI_Fd;

+ 

+    if (fd == 0) /* SPI是否已经打开*/

+        return 0;

+    close(fd);

+    g_SPI_Fd = 0;

+ 

+    return 0;

+}

+ 

+/**

+* 功 能:自发自收测试程序

+*         接收到的数据与发送的数据如果不一样 ,则失败

+* 说明:

+*         在硬件上需要把输入与输出引脚短跑

+* 开发人员:Lzy 2013-5-22

+*/

+int SPI_LookBackTest(void)

+{

+    int ret, i;

+    const int BufSize = 16;

+    uint8_t tx[BufSize], rx[BufSize];

+ 

+    bzero(rx, sizeof(rx));

+    for (i = 0; i < BufSize; i++)

+        tx[i] = i;

+ 

+    pr_debug("\nSPI - LookBack Mode Test...\n");

+    ret = SPI_Transfer(tx, rx, BufSize);

+    if (ret > 1)

+    {

+        ret = memcmp(tx, rx, BufSize);

+        if (ret != 0)

+        {

+            pr_err("LookBack Mode Test error\n");

+//            pabort("error");

+        }

+        else

+            pr_debug("SPI - LookBack Mode  OK\n");

+    }

+ 

+    return ret;

+}

+ 

+int main(int argc, char *argv[])

+{

+    int ret = 0;

+

+    if(argc == 2)

+    {

+        memset(device, 0x0, 64);

+        memcpy(device, argv[1], strlen(argv[1]));

+        printf("device: %s\n", device);

+    }

+    else

+    {

+        printf("format: mbtk_spi_write <dev>\n");

+        return -1;

+    }

+    ret = SPI_Open();

+    if (ret)

+        return ret;

+ 

+    SPI_LookBackTest();

+ 

+//    unsigned char buf[10];

+//    SPI_Write(buf, 10);

+//    SPI_Read(buf, 10);

+ 

+    SPI_Close();

+ 

+return 0;

+}

+