172 lines
4.5 KiB
C
Executable File
172 lines
4.5 KiB
C
Executable File
/* -----------------------------------------------------------------------------
|
|
* parser.h
|
|
*
|
|
* iPDC - Phasor Data Concentrator
|
|
*
|
|
* Copyright (C) 2011 Nitesh Pandit
|
|
* Copyright (C) 2011 Kedar V. Khandeparkar
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
*
|
|
* Authors:
|
|
* Nitesh Pandit <panditnitesh@gmail.com>
|
|
* Kedar V. Khandeparkar <kedar.khandeparkar@gmail.com>
|
|
*
|
|
* ----------------------------------------------------------------------------- */
|
|
|
|
|
|
#include <stdint.h>
|
|
#define MAXBUFLEN 2000
|
|
|
|
|
|
/* ---------------------------------------------------------------- */
|
|
/* Data Structure prototypes */
|
|
/* ---------------------------------------------------------------- */
|
|
|
|
/* ---------------------------------------------------------------- */
|
|
/* Configuartion Frame Data Structure */
|
|
/* ---------------------------------------------------------------- */
|
|
|
|
struct cfg_frame {
|
|
|
|
unsigned char *framesize;
|
|
unsigned char *idcode;
|
|
unsigned char *soc;
|
|
unsigned char *fracsec;
|
|
unsigned char *time_base;
|
|
unsigned char *num_pmu;
|
|
struct for_each_pmu **pmu;
|
|
unsigned char *data_rate;
|
|
struct cfg_frame *cfgnext;
|
|
|
|
}*cfgfirst;
|
|
|
|
|
|
struct for_each_pmu{
|
|
|
|
unsigned char *stn;
|
|
unsigned char *idcode;
|
|
unsigned char *data_format;
|
|
struct format *fmt;
|
|
unsigned char *phnmr;
|
|
unsigned char *annmr;
|
|
unsigned char *dgnmr;
|
|
struct channel_names *cnext;
|
|
unsigned char **phunit;
|
|
unsigned char **anunit;
|
|
unsigned char **dgunit;
|
|
unsigned char *fnom;
|
|
unsigned char *cfg_cnt;
|
|
};
|
|
|
|
struct channel_names {
|
|
|
|
unsigned char **phnames;
|
|
unsigned char **angnames;
|
|
struct dgnames *first;
|
|
};
|
|
|
|
struct dgnames {
|
|
|
|
unsigned char **dgn; // Stores 16 digital names for each word
|
|
struct dgnames *dg_next;
|
|
};
|
|
|
|
struct format{
|
|
|
|
unsigned char freq;
|
|
unsigned char analog;
|
|
unsigned char phasor;
|
|
unsigned char polar;
|
|
};
|
|
|
|
|
|
/* ---------------------------------------------------------------- */
|
|
/* Data Frame Data Structure */
|
|
/* ---------------------------------------------------------------- */
|
|
|
|
struct data_frame {
|
|
|
|
unsigned char *framesize;
|
|
unsigned char *idcode;
|
|
unsigned char *soc;
|
|
unsigned char *fracsec;
|
|
int num_pmu;
|
|
struct data_for_each_pmu **dpmu;
|
|
struct data_frame *dnext;
|
|
};
|
|
|
|
struct data_for_each_pmu {
|
|
|
|
unsigned char *stat;
|
|
int phnmr;
|
|
int annmr;
|
|
int dgnmr;
|
|
struct format *fmt;
|
|
unsigned char **phasors;
|
|
unsigned char **analog;
|
|
unsigned char *freq;
|
|
unsigned char *dfreq;
|
|
unsigned char **digital;
|
|
};
|
|
|
|
/* ---------------------------------------------------------------- */
|
|
/* Status change Data Structure */
|
|
/* ---------------------------------------------------------------- */
|
|
|
|
struct status_change_pmupdcid {
|
|
|
|
unsigned char idcode[3];
|
|
struct status_change_pmupdcid *pmuid_next;
|
|
|
|
}*root_pmuid;
|
|
|
|
|
|
/* ---------------------------------------------------------------- */
|
|
/* Function prototypes */
|
|
/* ---------------------------------------------------------------- */
|
|
|
|
void cfgparser(unsigned char []);
|
|
|
|
void write_cfg_to_file();
|
|
|
|
int dataparser(unsigned char data[]);
|
|
|
|
int check_statword(unsigned char stat[]);
|
|
|
|
void add_id_to_status_change_list(unsigned char idcode[]);
|
|
|
|
void remove_id_from_status_change_list(unsigned char idcode[]);
|
|
|
|
unsigned int to_intconvertor(unsigned char []);
|
|
|
|
void long_int_to_ascii_convertor(unsigned long int n,unsigned char hex[]);
|
|
|
|
void int_to_ascii_convertor(unsigned int n,unsigned char hex[]);
|
|
|
|
void copy_cbyc(unsigned char dst[],unsigned char *s,int size);
|
|
|
|
int ncmp_cbyc(unsigned char dst[],unsigned char src[],int size);
|
|
|
|
void byte_by_byte_copy(unsigned char dst[],unsigned char src[],int index,int n);
|
|
|
|
unsigned long int to_long_int_convertor(unsigned char array[]);
|
|
|
|
uint16_t compute_CRC(unsigned char *message,int length);
|
|
|
|
float decode_ieee_single(const void *v);
|
|
|
|
/**************************************** End of File *******************************************************/
|