358 lines
8.5 KiB
C
358 lines
8.5 KiB
C
#include <my_global.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <stdint.h>
|
|
#include <stdarg.h>
|
|
#include <string.h>
|
|
#include <termios.h>
|
|
#include <unistd.h>
|
|
#include <fcntl.h>
|
|
#include <sys/ioctl.h>
|
|
#include <sys/types.h>
|
|
#include <sys/stat.h>
|
|
#include <mysql/mysql.h>
|
|
#include <signal.h>
|
|
|
|
|
|
char *server = "localhost"; /* server host (default=localhost) */
|
|
char *user = "root"; /* username (default=login name) */
|
|
char *password = "raspberry"; /* password (default=none) */
|
|
char *database = "adatok"; /* database name (default=none) */
|
|
|
|
MYSQL * con;
|
|
|
|
/*
|
|
struct buf_struct
|
|
{
|
|
uint8_t chamber_id; //fix 0x00 felsőbb egység állítsa be
|
|
uint8_t ch_id; //jumper configurable lsb module ch0-1 select next 4 bit 16 modul select next 1 bit xy board select
|
|
uint32_t inte_data; //integrated curve
|
|
uint16_t peak_amp;
|
|
uint16_t width;
|
|
uint32_t time_sec;
|
|
uint32_t time_ns;
|
|
uint16_t cmp_level;
|
|
uint16_t reserved;
|
|
|
|
};
|
|
*/
|
|
|
|
struct events
|
|
{
|
|
int start_ns;
|
|
int end_ns;
|
|
int time_sec;
|
|
int length;
|
|
};
|
|
|
|
void sigintHandler(int sig_num)
|
|
{
|
|
signal(SIGINT, sigintHandler);
|
|
mysql_close(con);
|
|
printf("\nExiting... \n");
|
|
exit(1);
|
|
}
|
|
|
|
|
|
void finish_with_error(MYSQL *con)
|
|
{
|
|
fprintf(stderr, "%s\n", mysql_error(con));
|
|
mysql_close(con);
|
|
exit(1);
|
|
}
|
|
|
|
//pointerre mutató pointert kell átadni, hogy tudja módosítani az eredeti pointert
|
|
void mysql_connect(MYSQL **con)
|
|
{
|
|
*con = mysql_init(NULL);
|
|
|
|
if (*con == NULL)
|
|
{
|
|
fprintf(stderr, "mysql_init() failed\n");
|
|
exit(1);
|
|
}
|
|
|
|
printf("Mysql: Connecting to %s@%s as %s\n",database,server,user);
|
|
if (mysql_real_connect(*con, server, user, password, database, 0, NULL, 0) == NULL)
|
|
{
|
|
finish_with_error(*con);
|
|
}
|
|
else printf("Mysql: Connected succesfully!\n");
|
|
}
|
|
/*
|
|
int mysql_write(struct buf_struct adatok)
|
|
{
|
|
char data[300];
|
|
printf("MySQL: Adatok beírása...\n");
|
|
snprintf(data,300,"INSERT INTO fb_55(chamber_id,ch_id,inte_data,peak_amp,width,time_sec,time_ns,cmp_lvl) VALUES(%d,%d,%d,%d,%d,%ld,%ld,%d)",adatok.chamber_id,adatok.ch_id,adatok.inte_data,adatok.peak_amp,adatok.width,adatok.time_sec,adatok.time_ns, adatok.cmp_level);
|
|
mysql_query(conn,data);
|
|
}
|
|
*/
|
|
|
|
//lekéri a megadott másodpercben történt események time_ns oszlopát növekvő sorrendbe rendezve egy tömbbe
|
|
//bemenő paraméterek: array: null pointerre mutató pointer futás után egy int tömbre mutató pointer lesz használat után free vel felszabadítani!!!!
|
|
// size: előzú tömb mérete lesz benne
|
|
int time_ns_col_to_array(MYSQL *con, int **array, int *size, int time_sec, char * table_name)
|
|
{
|
|
char q_string[100];
|
|
int ret = 1;
|
|
|
|
snprintf(q_string,100, "SELECT time_ns FROM`%s`WHERE time_sec=%d ORDER BY`time_ns`ASC", table_name, time_sec);
|
|
|
|
if (mysql_query(con, q_string))
|
|
{
|
|
finish_with_error(con);
|
|
}
|
|
printf("lekeres ok\n");
|
|
|
|
|
|
MYSQL_RES *result = mysql_store_result(con);
|
|
|
|
if (result == NULL)
|
|
{
|
|
finish_with_error(con);
|
|
}
|
|
printf("store ok\n");
|
|
|
|
if( mysql_num_fields(result) != 1) //1 oszlopot kérek le (time_ns)
|
|
{
|
|
printf("oszlop nem 1\n");
|
|
//mysql_close(con);
|
|
//exit(1);
|
|
return -1;
|
|
}
|
|
|
|
MYSQL_ROW row;
|
|
int i;
|
|
int row_count = mysql_num_rows(result);
|
|
|
|
*array = (int*) malloc(row_count * sizeof(int));
|
|
|
|
printf("realoc ok\n");
|
|
|
|
//while ((row = mysql_fetch_row(result)))
|
|
for(i=0;i<row_count ;i++)
|
|
{
|
|
if((row = mysql_fetch_row(result)) == NULL)
|
|
{
|
|
ret = -1; //hiba
|
|
break;
|
|
}
|
|
if(row[0] != NULL)
|
|
{
|
|
(*array)[i] = atoi(row[0]);
|
|
}
|
|
}
|
|
|
|
mysql_free_result(result);
|
|
|
|
*size = row_count; //feltöltött tömb mérete
|
|
|
|
return ret;
|
|
}
|
|
|
|
int find(
|
|
int* array, int array_size, int time_sec, //bemenő tömb
|
|
struct events** event_array, int *event_array_size, //kimenő tömb
|
|
int time_diff,int min_event_length //max időbeli különbség 2 egymás után következő között
|
|
)
|
|
{
|
|
int i;
|
|
int start_ns;
|
|
int event_count = 0; //struktúra tömb indexeléshez
|
|
int event_length = 0;
|
|
*event_array = (struct events*) malloc(array_size * sizeof(struct events)); //legrosszabb esetet feltételezve
|
|
|
|
*event_array_size = 0;
|
|
min_event_length--; //legaláb 2 különben hiba
|
|
|
|
start_ns = array[0];
|
|
for(i=0;i<(array_size-1);i++)
|
|
{
|
|
if((array[i] + time_diff) < array[i+1]) //ha nagyobb a különbség mint a megengedett
|
|
{
|
|
if(event_length >= min_event_length)
|
|
{
|
|
(*((*event_array) + event_count)).start_ns = start_ns; //kezdő elem
|
|
(*((*event_array) + event_count)).end_ns = array[i]; //utolsó elemnek a még jó idejü
|
|
(*((*event_array) + event_count)).time_sec = time_sec; //ebben a másodpercben volt az esemény, későbbi hazsnálatra
|
|
(*((*event_array) + event_count)).length = event_length + 1;
|
|
event_count++;
|
|
}
|
|
start_ns = array[i+1];
|
|
event_length = 0;
|
|
}
|
|
else
|
|
event_length++;
|
|
}
|
|
|
|
if(event_length >= min_event_length) //utolsó lemaradt elem vizsgálata
|
|
{
|
|
(*((*event_array) + event_count)).start_ns = start_ns; //kezdő elem
|
|
(*((*event_array) + event_count)).end_ns = array[i]; //utolsó elemnek a még jó idejü
|
|
(*((*event_array) + event_count)).time_sec = time_sec; //ebben a másodpercben volt az esemény, későbbi hazsnálatra
|
|
(*((*event_array) + event_count)).length = event_length + 1;
|
|
event_count++;
|
|
}
|
|
|
|
*event_array_size = event_count;
|
|
|
|
}
|
|
|
|
int mysql_write_event_data_row(MYSQL *con, int row_buffer[], int id)
|
|
{
|
|
char data[300];
|
|
snprintf(data,300,"INSERT INTO `event_data` (chamber,sec,id,ch_id,inte_data,peak_amp,time_ns,width,cmp_lvl) VALUES(%d,%d,%d,%d,%d,%d,%d,%d,%d)",
|
|
row_buffer[0], row_buffer[5], id, row_buffer[1],row_buffer[2], row_buffer[3], row_buffer[6], row_buffer[4], row_buffer[7]);
|
|
if (mysql_query(con,data))
|
|
{
|
|
finish_with_error(con);
|
|
}
|
|
}
|
|
|
|
int fill_event_table(struct events *event_time_buf, int event_time_buf_size, MYSQL *con, char * table_name)
|
|
{
|
|
static int event_id=0;
|
|
int i;
|
|
char q_string[100];
|
|
|
|
int row_buff[8];
|
|
|
|
for(i=0;i<event_time_buf_size;i++)
|
|
{
|
|
snprintf(q_string,150,"SELECT * FROM `%s` where time_sec =%d AND time_ns >=%d AND time_ns <=%d ORDER BY `ch_id` ASC"
|
|
, table_name, event_time_buf[i].time_sec, event_time_buf[i].start_ns, event_time_buf[i].end_ns );
|
|
printf("data:%s",q_string);
|
|
if (mysql_query(con, q_string))
|
|
{
|
|
finish_with_error(con);
|
|
}
|
|
//printf("lekeres ok\n");
|
|
|
|
MYSQL_RES *result = mysql_store_result(con);
|
|
|
|
if (result == NULL)
|
|
{
|
|
finish_with_error(con);
|
|
}
|
|
//printf("store ok\n");
|
|
|
|
if( mysql_num_fields(result) != 8)
|
|
{
|
|
printf("oszlop nem 8\n");
|
|
//mysql_close(con);
|
|
//exit(1);
|
|
return -1;
|
|
}
|
|
|
|
MYSQL_ROW row;
|
|
if(mysql_num_rows(result) != event_time_buf[i].length)
|
|
{
|
|
printf("sorok szama nem egyezik meg!");
|
|
return -1;
|
|
}
|
|
|
|
int j,k;
|
|
//while ((row = mysql_fetch_row(result)))
|
|
for(j=0;j<event_time_buf[i].length ;j++) //összetartozó sorok
|
|
{
|
|
if((row = mysql_fetch_row(result)) == NULL)
|
|
{
|
|
printf("row null error");
|
|
mysql_free_result(result);
|
|
return -1; //hiba
|
|
}
|
|
for(k=0;k<8;k++) //soron belül oszlopok
|
|
{
|
|
if(row[k] != NULL)
|
|
{
|
|
row_buff[k] = atoi(row[k]);
|
|
}
|
|
}
|
|
|
|
mysql_write_event_data_row(con,row_buff,event_id);
|
|
|
|
}
|
|
|
|
event_id++;
|
|
mysql_free_result(result);
|
|
printf("for i:%d",i);
|
|
}
|
|
|
|
}
|
|
int main(int argc,char* argv[])
|
|
{
|
|
signal(SIGINT, sigintHandler); //CTRL + C kezelése. csak szórakozás
|
|
mysql_connect(&con);
|
|
|
|
int *array = NULL;
|
|
int size;
|
|
int sec;
|
|
|
|
struct events* event_buf = NULL;
|
|
int event_buf_size;
|
|
|
|
printf("end sec:");
|
|
scanf("%d",&sec);
|
|
|
|
/*
|
|
time_ns_col_to_array(con, &array, &size, sec, "fb_55"); //másodpercet főként itt beállítani!!!
|
|
|
|
for(int i=0;i<size;i++)
|
|
printf("%d\n",array[i]);
|
|
|
|
find(array, size, sec, &event_buf, &event_buf_size, 2000, 2);
|
|
printf("\nevnet array length:%d\n",event_buf_size);
|
|
|
|
for(int i=0;i<event_buf_size;i++)
|
|
printf("\nstart:%d, end:%d length:%d\n",event_buf[i].start_ns, event_buf[i].end_ns, event_buf[i].length);
|
|
|
|
free(array);
|
|
free(event_buf);
|
|
*/
|
|
|
|
|
|
for(int j=10;j<sec;j++)
|
|
{
|
|
time_ns_col_to_array(con, &array, &size, j, "fb_55"); //másodpercet főként itt beállítani!!!
|
|
|
|
//for(int i=0;i<size;i++)
|
|
//printf("%d\n",array[i]);
|
|
|
|
find(array, size, j, &event_buf, &event_buf_size, 4000, 4);
|
|
printf("\nevnet array length:%d\n",event_buf_size);
|
|
|
|
//for(int i=0;i<event_buf_size;i++)
|
|
//printf("\nstart:%d, end:%d length:%d\n",event_buf[i].start_ns, event_buf[i].end_ns, event_buf[i].length);
|
|
|
|
fill_event_table(event_buf, event_buf_size, con, "fb_55");
|
|
|
|
free(array);
|
|
free(event_buf);
|
|
printf("ok\n");
|
|
}
|
|
|
|
printf("end\n");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mysql_close(con);
|
|
}
|
|
|