9 // Ring Buffer読み込みポインタ個数
10 #define AD_RING_READ_NUM 2
11 // Ring Buffer読み込みポインター 1sec記録用
12 #define AD_RING_READ_PTR1 0
13 // Ring Buffer読み込みポインター 1min記録用
14 #define AD_RING_READ_PTR2 1
16 static AdData ad_ring_buf[AD_RING_NUM];
19 static pthread_mutex_t mutex_ad_ring = PTHREAD_MUTEX_INITIALIZER;
24 int ad_ring_init(void)
26 pthread_mutex_lock(&mutex_ad_ring);
27 ring = ring_create(AD_RING_READ_NUM);
29 PERRF("ERROR ring_create() == NULL\n");
30 pthread_mutex_unlock(&mutex_ad_ring);
33 ring_init(ring, AD_RING_NUM);
34 pthread_mutex_unlock(&mutex_ad_ring);
37 void ad_ring_clear_sec(void)
39 ring_clear(ring, AD_RING_READ_PTR1);
41 void ad_ring_clear_high(void)
43 ring_clear(ring, AD_RING_READ_PTR2);
45 void ad_ring_clear_latest(void)
47 ring_latest_set(ring, -1);
50 // 読み出し位置 1secデータ記録で使用
51 int ad_ring_read_get_sec(void)
53 return ring_read_get(ring, AD_RING_READ_PTR1);
55 void ad_ring_read_set_sec(int i)
57 ring_read_set(ring, AD_RING_READ_PTR1, i);
59 void ad_ring_read_plus_sec(void)
61 ring_read_plus(ring, AD_RING_READ_PTR1);
64 int ad_ring_read_get_high(void)
66 return ring_read_get(ring, AD_RING_READ_PTR2);
68 void ad_ring_read_set_high(int i)
70 ring_read_set(ring, AD_RING_READ_PTR2, i);
72 void ad_ring_read_plus_high(void)
74 ring_read_plus(ring, AD_RING_READ_PTR2);
78 int ad_ring_write_get(void)
80 return ring_write_get(ring);
82 void ad_ring_write_plus(void)
84 ring_write_plus(ring);
87 int ad_ring_num_get_sec(void)
89 return ring_num_get(ring, AD_RING_READ_PTR1);
92 int ad_ring_num_get_high(void)
94 return ring_num_get(ring, AD_RING_READ_PTR2);
97 int ad_ring_latest_get(void)
99 return ring_latest_get(ring);
101 void ad_ring_latest_set(int i)
103 ring_latest_set(ring, i);
106 AdData* ad_ring_get(int ptr)
109 pthread_mutex_lock(&mutex_ad_ring);
110 p = &ad_ring_buf[ptr];
111 pthread_mutex_unlock(&mutex_ad_ring);
117 void ad_ring_set(AdData *data)
121 pthread_mutex_lock(&mutex_ad_ring);
122 i = ring_write_get(ring);
123 ad_ring_buf[i] = *data;
125 ring_latest_set(ring, i);
126 pthread_mutex_unlock(&mutex_ad_ring);
134 int ad_ring_is_full(void)
136 return ring_is_full(ring, AD_RING_READ_PTR1);
143 static void test_ad_ring(void)
149 CU_ASSERT(ad_ring_read_get_sec() == 0);
150 ad_ring_clear_high();
151 CU_ASSERT(ad_ring_read_get_high() == 0);
152 ad_ring_clear_latest();
153 CU_ASSERT(ad_ring_latest_get() == -1);
156 ad_ring_read_plus_sec();
157 CU_ASSERT(ad_ring_read_get_sec() == 1);
158 ad_ring_read_plus_high();
159 CU_ASSERT(ad_ring_read_get_high() == 1);
160 ad_ring_write_plus();
161 CU_ASSERT(ad_ring_write_get() == 1);
164 ad_ring_read_set_sec(AD_RING_NUM - 1);
165 ad_ring_read_plus_sec();
166 CU_ASSERT(ad_ring_read_get_sec() == 0);
168 ad_ring_read_set_high(AD_RING_NUM - 1);
169 ad_ring_read_plus_high();
170 CU_ASSERT(ad_ring_read_get_high() == 0);
172 ring->write = AD_RING_NUM - 1;
173 ad_ring_write_plus();
174 CU_ASSERT(ad_ring_write_get() == 0);
178 ring->read[AD_RING_READ_PTR1] = 0;
179 CU_ASSERT(ad_ring_num_get_sec() == 1);
182 ring->read[AD_RING_READ_PTR1] = AD_RING_NUM - 1;
183 CU_ASSERT(ad_ring_num_get_sec() == 1);
186 ring->read[AD_RING_READ_PTR2] = 0;
187 CU_ASSERT(ad_ring_num_get_high() == 1);
190 ring->read[AD_RING_READ_PTR2] = AD_RING_NUM - 1;
191 CU_ASSERT(ad_ring_num_get_high() == 1);
195 void ad_ring_test(CU_pSuite test_suite)
197 CU_add_test(test_suite, "test_ad_ring", test_ad_ring);