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