OSDN Git Service

SDへの書き込み間隔を長くする
[scilog/scilog.git] / thread_rcv.c
index 1c54492..78452f9 100644 (file)
@@ -7,6 +7,7 @@
 #include <sys/types.h>\r
 #include <string.h>\r
 \r
+#include "debug_print.h"\r
 #include "spi.h"\r
 #include "ad_ring.h"\r
 #include "conf.h"\r
@@ -40,6 +41,11 @@ static int decode(char *buf, AdData *ad)
        gps = &(ad->gps);\r
 \r
        if (*ptr++ != SPI_HEAD_CHAR) return -1;\r
+       // Response Code\r
+       ad->rescode = *ptr++;\r
+       // Response Data\r
+       memcpy(ad->resdata, ptr, SPI_RESDATA_LEN);\r
+       ptr += SPI_RESDATA_LEN;\r
        // GPS\r
        gps->tow = *((int32_t*)ptr); ptr += 4;\r
        gps->tacc = *((int32_t*)ptr); ptr += 4;\r
@@ -64,6 +70,7 @@ static int decode(char *buf, AdData *ad)
                }\r
        }\r
        // Checksum\r
+       memcpy(&(ad->checksum), ptr, SPI_CHECKSUM_LEN);\r
        \r
        // gps->struct tm\r
        ad->t.tm_year = gps->year - 1900;\r
@@ -100,14 +107,23 @@ static void do_avg(int freq, AdData *ad)
 }\r
 void* thread_rcv(void* pParam)\r
 {\r
-       while(1) {\r
-               fd_set  fds;\r
-               char    buf[SPI_DATA_LEN+256];\r
-               int     i;\r
-//             int     ch;\r
-               int     fd_spi;\r
-               AdData  ad, *ad_ptr;\r
 \r
+       fd_set  fds;\r
+       char    buf[SPI_DATA_LEN+256];\r
+       int     i;\r
+       int     fd_spi;\r
+       AdData  ad, *ad_ptr;\r
+#if 0\r
+char   cmd[SPI_CMD_LEN];\r
+char   c;\r
+c=0;\r
+#endif\r
+       // spiドライバのリングバッファクリア\r
+       spi_buf_clear();\r
+       // spi送信コマンド長セット\r
+       spi_tx_len_set(SPI_CMD_LEN);\r
+\r
+       while(1) {\r
                fd_spi = spi_get_fd();\r
                // select の準備\r
                FD_ZERO(&fds);\r
@@ -117,9 +133,18 @@ void* thread_rcv(void* pParam)
                i = select(fd_spi + 1, &fds, NULL, NULL, NULL);    // 読みselect\r
                if(i <= 0) syslog(LOG_ERR, "%s: select returned with signal or error. ret=%d\n", __FUNCTION__, i);\r
                if(FD_ISSET(fd_spi, &fds)) {\r
+#if 0\r
+// SPI送信データセット\r
+memset(cmd, 0, SPI_CMD_LEN);\r
+cmd[0] = SPI_HEAD_CHAR;\r
+cmd[1] = 1;\r
+cmd[2] = 2;\r
+cmd[3] = c++;\r
+spi_tx_set(cmd);\r
+#endif\r
                        // 受信した\r
                        i = spi_dnum_get();\r
-//printf("thread_rcv(): wakeup dnum=%d rcv_len=%d\n", i, spi_rcvd_len_get());\r
+//PDEBUG("thread_rcv(): wakeup dnum=%d rcv_len=%d\n", i, spi_rcvd_len_get());\r
                        while(i-- > 0) {\r
                                memset(&ad, 0, sizeof(ad));\r
                                // データ取得\r
@@ -129,22 +154,25 @@ void* thread_rcv(void* pParam)
                                ad.freq = conf_freq_get();\r
                                // 平均 仮コード 要変更\r
                                do_avg(AD_SAMPLE, &ad);\r
-#if 0\r
-printf("%04d/%02d/%02d %02d:%02d:%02d.%09ld,%6lums,%6luns,%02X",\r
-       ad.t.year, ad.t.month, ad.t.day, ad.t.hour, ad.t.min, ad.t.sec, ad.t.nano,\r
-       ad.t.tow, ad.t.tacc, ad.t.valid);\r
+#if 1\r
+int    ch;\r
+PDEBUG("%04d/%02d/%02d %02d:%02d:%02d.%09ld,%6lums,%6luns,%02X",\r
+       ad.gps.year, ad.gps.month, ad.gps.day, ad.gps.hour, ad.gps.min, ad.gps.sec, ad.gps.nano,\r
+       ad.gps.tow, ad.gps.tacc, ad.gps.valid);\r
 for(ch = 0; ch < AD_CHNUM; ch++) {\r
-       printf(",%+7ld", ad.data1sec[ch]);\r
+       PDEBUG(",%+7ld", ad.data1sec[ch]);\r
 }\r
-printf("\r\n");\r
+PDEBUG("\r\n");\r
+#endif\r
+#if 0\r
 for(ch = 0; ch < AD_CHNUM; ch++) {\r
-       printf(",%+7ld", ad.data[ch][0]);\r
+       PDEBUG(",%+7ld", ad.data[ch][0]);\r
 }\r
-printf("\r\n");\r
+PDEBUG("\r\n");\r
 for(ch = 0; ch < AD_CHNUM; ch++) {\r
-       printf(",%+7ld", ad.data[ch][49]);\r
+       PDEBUG(",%+7ld", ad.data[ch][49]);\r
 }\r
-printf("\r\n");\r
+PDEBUG("\r\n");\r
 #endif\r
                                // ADリングバッファに書き込み\r
                                ad_ptr = ad_ring_get(ad_ring_write_get());\r