-
Notifications
You must be signed in to change notification settings - Fork 0
/
mode4.c
98 lines (92 loc) · 2.4 KB
/
mode4.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/**
* @file mode4.c
* @author Benjamin Ming Yang @ Department of Geology, National Taiwan University
* @brief Program for Palert mode 4 data packet.
* @version 0.1
* @date 2024-06-02
*
* @copyright Copyright (c) 2024
*
*/
/* Standard C header include */
#include <stdio.h>
#include <stdint.h>
#include <string.h>
/* Local header include */
#include "libpalertc.h"
#include "mode4.h"
#include "misc.h"
/**
* @brief
*
* @param pam4h
* @return char*
*/
char *pac_m4_trigmode_get( const PALERT_M4_HEADER *pam4h )
{
/* */
#define X(a, b, c) b,
static char *trigmode_str[] = {
PALERT_TRIGMODE_TABLE
};
#undef X
#define X(a, b, c) c,
uint8_t trigmode_bit[] = {
PALERT_TRIGMODE_TABLE
};
#undef X
/* */
for ( int i = 0; i < PALERT_TRIGMODE_COUNT; i++ ) {
if ( pam4h->trigger_flag[0] & trigmode_bit[i] )
return trigmode_str[i];
}
return NULL;
}
/**
* @brief Parse the four kind of Palert IP address
*
* @param pam4h
* @param iptype
* @param dest
* @return char*
*/
char *pac_m4_ip_get( const PALERT_M4_HEADER *pam4h, const int iptype, char *dest )
{
switch ( iptype ) {
case PALERT_SET_IP:
misc_ipv4str_gen(dest, pam4h->palert_ip[0], pam4h->palert_ip[1], pam4h->palert_ip[2], pam4h->palert_ip[3]);
break;
case PALERT_NTP_IP:
misc_ipv4str_gen(dest, pam4h->ntp_server[0], pam4h->ntp_server[1], pam4h->ntp_server[2], pam4h->ntp_server[3]);
break;
case PALERT_TCP0_IP:
misc_ipv4str_gen(dest, pam4h->tcp0_server[1], pam4h->tcp0_server[0], pam4h->tcp0_server[3], pam4h->tcp0_server[2]);
break;
case PALERT_TCP1_IP:
misc_ipv4str_gen(dest, pam4h->tcp1_server[1], pam4h->tcp1_server[0], pam4h->tcp1_server[3], pam4h->tcp1_server[2]);
break;
case PALERT_TCP2_IP:
misc_ipv4str_gen(dest, pam4h->tcp2_server[1], pam4h->tcp2_server[0], pam4h->tcp2_server[3], pam4h->tcp2_server[2]);
break;
case PALERT_ADMIN0_IP:
misc_ipv4str_gen(dest, pam4h->admin0_server[1], pam4h->admin0_server[0], pam4h->admin0_server[3], pam4h->admin0_server[2]);
break;
case PALERT_ADMIN1_IP:
misc_ipv4str_gen(dest, pam4h->admin1_server[1], pam4h->admin1_server[0], pam4h->admin1_server[3], pam4h->admin1_server[2]);
break;
default:
fprintf(stderr, "pac_m4_ip_get: Unknown IP type for Palert mode 4 packet.\n");
break;
}
return dest;
}
/**
* @brief
*
* @param packet
* @return int
*/
int pac_m4_crc_check( const PALERT_M4_PACKET *packet )
{
return misc_crc16_cal( packet, PALERT_M4_CRC16_CAL_LENGTH ) ? 0 : 1;
}