1
2
3
4
5
6
7
8
9
10
11
12
13#include "sys.h"
14#include "idi.h"
15#include "divas.h"
16#include "adapter.h"
17#include "divalog.h"
18
19#include "uxio.h"
20
21
22static int m_count;
23
24#define MAX_BUFFERED_MSGS (1000)
25
26
27typedef struct klog_link{
28 klog_t klog;
29 struct klog_link *next;
30}KNODE;
31
32
33KNODE *head;
34KNODE *tail;
35
36
37
38
39
40
41
42char *DivasLogFifoRead(void)
43
44{
45 KNODE *old_head;
46
47 if(head==NULL)
48 {
49
50 return NULL;
51 }
52
53 m_count--;
54
55 old_head = head;
56 head = head->next;
57
58 return((char *)old_head);
59}
60
61
62
63
64
65void DivasLogFifoWrite(char *entry, int length)
66
67{
68 KNODE *new_klog;
69
70 if(head == NULL)
71 {
72
73 tail=NULL;
74 m_count=0;
75 new_klog=UxAlloc(sizeof(KNODE));
76
77 if(new_klog==NULL)
78 {
79 return;
80 }
81
82 m_count++;
83 memset(new_klog, 0, sizeof(KNODE));
84
85
86 head=tail=new_klog;
87 tail->next=NULL;
88 }
89 else
90 {
91 new_klog=UxAlloc(sizeof(KNODE));
92
93 if(new_klog==NULL)
94 {
95 return;
96 }
97
98 m_count++;
99 memset(new_klog, 0, sizeof(KNODE));
100
101
102 tail->next=new_klog;
103 tail=new_klog;
104 tail->next=NULL;
105 }
106
107 if (length > sizeof(klog_t))
108 {
109 length = sizeof(klog_t);
110 }
111
112 memcpy(&tail->klog, entry, length);
113
114 return;
115}
116
117
118
119
120int DivasLogFifoEmpty(void)
121{
122 return (m_count == 0);
123}
124
125
126
127
128int DivasLogFifoFull(void)
129{
130 return (m_count == MAX_BUFFERED_MSGS);
131}
132
133
134
135
136
137void DivasLogIdi(card_t *card, ENTITY *e, int request)
138
139{
140 klog_t klog;
141
142 memset(&klog, 0, sizeof(klog));
143
144 klog.time_stamp = UxTimeGet();
145
146 klog.length = sizeof(ENTITY) > sizeof(klog.buffer) ?
147 sizeof(klog.buffer) : sizeof(ENTITY);
148
149 klog.card = (int) (card - DivasCards);
150
151 klog.type = request ? KLOG_IDI_REQ : KLOG_IDI_CALLBACK;
152 klog.code = 0;
153 memcpy(klog.buffer, e, klog.length);
154
155
156
157 DivasLogAdd(&klog, sizeof(klog));
158
159 return;
160}
161