OSDN Git Service

記録パス設定 記録CH設定 ファイル書込タイミング
[scilog/scilog.git] / ad_ring.h
1 #if     !defined(__AVG_RING_H__)
2 #define __AVG_RING_H__
3
4 #include <time.h>
5 #include <stdint.h>
6 #include "spi.h"
7
8 // リングバッファサイズ 個数
9 #define AD_RING_NUM     (60 * 5)
10
11 #define AD_CHNUM        6       // AD CH数
12 #define AD_SAMPLE       50      // AD ICの出力レート [Hz]
13 #define AD_BYTES        3       // AD 1sample dataのバイト数
14
15 // NAV-TIMEUTCパケットのデータ格納
16 typedef struct {
17     unsigned long   tow;    // ms GPS Millisecond Time of Week
18     unsigned long   tacc;   // ns Time Accuracy Estimate
19     long   nano;            // ns Nanoseconds of second, range -1e9 .. 1e9 (UTC)
20     unsigned int    year;   //  UTC
21     unsigned char   month;      // 
22     unsigned char   day;
23     unsigned char   hour;
24     unsigned char   min;
25     unsigned char   sec;
26     unsigned char   valid;  // Validity Flags
27                             //  bit0 validTOW 1 = Valid Time of Week
28                             //  bit1 validWKN 1 = Valid Week Number
29                             //  bit2 validUTC 1 = Valid UTC (Leap Seconds already known)
30 } UbloxNavTimeUtc;
31
32 // リングバッファのデータタイプ
33 typedef struct {
34         char    rescode;                                        // コマンドに対する返答 ACK/NAK/NUL
35         char    resdata[SPI_RESDATA_LEN];       // コマンドに対する返答データ
36         UbloxNavTimeUtc gps;                    // GPSタイムスタンプ SPIで受信
37         struct tm t;                                    // タイムスタンプ struct tmの月は(0〜11)なので注意 年は1900からのオフセット
38         int     freq;                                           // 平均周波数 Hz
39         int32_t data1sec[AD_CHNUM];             // 1sec平均値 SPIで受信
40         int32_t data[AD_CHNUM][AD_SAMPLE];      // AD_SAMPLE[Hz]の生データ SPIで受信
41         int32_t avg[AD_CHNUM][AD_SAMPLE];       // 平均後データ
42         unsigned int    checksum;       // SPI受信データのchecksumフィールド
43 } AdData;
44
45
46
47 int ad_ring_init(void);
48
49 void ad_ring_clear_sec(void);
50 void ad_ring_clear_high(void);
51 void ad_ring_clear_latest(void);
52
53 int ad_ring_read_get_sec(void);
54 void ad_ring_read_set_sec(int i);
55 void ad_ring_read_plus_sec(void);
56 int ad_ring_num_get_sec(void);
57
58 int ad_ring_read_get_high(void);
59 void ad_ring_read_set_high(int i);
60 void ad_ring_read_plus_high(void);
61 int ad_ring_num_get_high(void);
62
63 int ad_ring_write_get(void);
64 void ad_ring_write_plus(void);
65 int ad_ring_latest_get(void);
66 void ad_ring_latest_set(int i);
67 AdData* ad_ring_get(int ptr);
68 void ad_ring_set(AdData *data);
69 int ad_ring_full(void);
70
71 #ifdef  CUNIT
72         #include <CUnit/CUnit.h>
73         void ad_ring_test(CU_pSuite test_suite);
74 #endif
75
76 #endif