#include #include "verify.h" #include #include #include "msg.h" #define MAXITEM 16 #define MAXLINE 1024 static const char* filename = "debug/verify_data"; static FILE* file = NULL; static int index_i = 0; static int index_j = 0; static int index_count = 0; static int index_i_upper = 0 ; static int index_j_upper = 0; typedef struct verify_item_s{ float pix, piy, piz; float pjx, pjy, pjz; float r2; int fix, fiy, fiz; int fjx, fjy, fjz; char pad[76]; }verify_item_t; static verify_item_t* vitem = NULL; char* get_vitem(void) { return (char*)vitem; } int set_uppers(int i_upper, int j_upper) { index_i_upper = i_upper; index_j_upper = j_upper; return 0; } int save_item(int count , int i, int j, float _pix, float _piy, float _piz, float _pjx, float _pjy, float _pjz, float _r2, int _fix, int _fiy, int _fiz, int _fjx, int _fjy, int _fjz) { char buf[MAXLINE]; if (file == NULL){ printf("ERROR: file is NULL\n"); return -1; } if (fprintf(file, "%d %d %d %f %f %f %f %f %f %f %d %d %d %d %d %d\n", count, i, j, _pix, _piy, _piz, _pjx, _pjy, _pjz, _r2, _fix, _fiy, _fiz, _fjx, _fjy, _fjz) <= 0){ printf("ERROR: printing to file failed\n"); return -1; } return 0; } int save_input(int count , int i, int j, float _pix, float _piy, float _piz, float _pjx, float _pjy, float _pjz) { char buf[MAXLINE]; if (file == NULL){ printf("ERROR: file is NULL\n"); return -1; } if (fprintf(file, "%d %d %d %f %f %f %f %f %f %f %d %d %d %d %d %d\n", count, i, j, _pix, _piy, _piz, _pjx, _pjy, _pjz, 0, 0, 0, 0, 0, 0, 0) <= 0){ printf("ERROR: printing to file failed\n"); return -1; } return 0; } static int fcmp(float a, float b) { float tmp = a - b; if (tmp > 1.0e-4){ return 1; }else if (tmp < -1.0e-4){ return -1; } return 0; } static int icmp(int a, int b) { /* float tmp = a - b; tmp= 1.0*tmp/a; if (tmp > 1.0e-4){ return 1; }else if (tmp < -1.0e-4){ return -1; } */ return a ==b ? 0:1; } int compare_input(int count ,int i, int j, float _pix, float _piy, float _piz, float _pjx, float _pjy, float _pjz) { verify_item_t* item; item = &vitem[i*index_j_upper + j]; if ( fcmp(item->pix, _pix) == 0 && fcmp(item->piy, _piy) == 0 && fcmp(item->piz, _piz) == 0 && fcmp(item->pjx, _pjx) == 0 && fcmp(item->pjy, _pjy) == 0 && fcmp(item->pjz, _pjz) == 0 ){ return 0; } printf("ERROR: input match error\n"); printf("input: %f %f %f %f %f %f\n", _pix, _piy, _piz, _pjx, _pjy, _pjz); printf("indsk: %f %f %f %f %f %f %f %d %d %d %d %d %d\n", item->pix, item->piy, item->piz, item->pjx, item->pjy, item->pjz, item->r2, item->fix, item->fiy, item->fiz, item->fjx, item->fjy, item->fjz); return -1; } int compare_item(int count , int i, int j, float _pix, float _piy, float _piz, float _pjx, float _pjy, float _pjz, float _r2, int _fix, int _fiy, int _fiz, int _fjx, int _fjy, int _fjz) { verify_item_t* item; item = &vitem[i*index_j_upper + j]; if ( fcmp(item->pix, _pix) == 0 && fcmp(item->piy, _piy) == 0 && fcmp(item->piz, _piz) == 0 && fcmp(item->pjx, _pjx) == 0 && fcmp(item->pjy, _pjy) == 0 && fcmp(item->pjz, _pjz) == 0 && fcmp(item->r2, _r2) == 0 && icmp(item->fix, _fix) == 0 && icmp(item->fiy, _fiy) == 0 && icmp(item->fiz, _fiz) == 0 && icmp(item->fjx, _fjx) == 0 && icmp(item->fjy, _fjy) == 0 && icmp(item->fjz, _fjz) == 0 ){ return 0; } printf("ERROR: not match\n"); printf("input: %f %f %f %f %f %f %f %d %d %d %d %d %d\n", _pix, _piy, _piz, _pjx, _pjy, _pjz, _r2, _fix, _fiy, _fiz, _fjx, _fjy, _fjz); printf("indsk: %f %f %f %f %f %f %f %d %d %d %d %d %d\n", item->pix, item->piy, item->piz, item->pjx, item->pjy, item->pjz, item->r2, item->fix, item->fiy, item->fiz, item->fjx, item->fjy, item->fjz); return -1; } int close_disk_file(void) { if(vitem){ free(vitem); vitem = NULL; } fclose(file); file = 0; return 0; } static int dump_vitem_to_file(const char* f) { int i, j; FILE* fs = fopen(f, "w"); if (fs == NULL){ printf("ERROR: opening file(%s) failed\n", f); return -1; } for (i =0; i < index_i_upper; i++){ for (j= i+1; j < index_j_upper; j++){ verify_item_t* item = &vitem[i* index_j_upper + j]; if (fprintf(fs, "%d %d %d %f %f %f %f %f %f %f %d %d %d %d %d %d\n", 0, i, j, item->pix, item->piy, item->piz, item->pjx, item->pjy, item->pjz, item->r2, item->fix, item->fiy, item->fiz, item->fjx, item->fjy, item->fjz) <= 0){ printf("fprintf failed \n"); return -1; } } } fclose(fs); } int open_disk_file_for_read(void) { char buf[MAXLINE]; int count, i, j; float pix, piy, piz, pjx,pjy, pjz; float r2; int fix, fiy, fiz, fjx, fjy, fjz; file = fopen( filename , "r+"); if (file == NULL){ printf("ERROR: Loading verify file (%s) failed\n", filename); return -1; } //construct data struct if (index_i_upper == 0 || index_j_upper == 0){ printf("PPU ERROR: index uppers not set\n"); return -1; } vitem = (verify_item_t*)memalign(128, index_i_upper*index_j_upper*sizeof(verify_item_t)); if (vitem == NULL){ printf("ERROR: malloc failed for vitem\n"); return -1; } while( fgets(buf, MAXLINE, file) != NULL){ sscanf(buf, "%d %d %d %f %f %f %f %f %f %f %d %d %d %d %d %d", &count, &i, &j, &pix, &piy, &piz,&pjx, &pjy, &pjz, &r2, &fix, &fiy, &fiz, &fjx, &fjy, &fjz); int idx = i*index_j_upper + j; vitem[idx].pix = pix; vitem[idx].piy = piy; vitem[idx].piz = piz; vitem[idx].pjx = pjx; vitem[idx].pjy = pjy; vitem[idx].pjz = pjz; vitem[idx].r2 = r2; vitem[idx].fix = fix; vitem[idx].fiy = fiy; vitem[idx].fiz = fiz; vitem[idx].fjx = fjx; vitem[idx].fjy = fjy; vitem[idx].fjz = fjz; } fclose(file); file = NULL; //dump_vitem_to_file("/tmp/tmpdata"); printf("Verification data struct completed\n"); return 0; } int open_disk_file_for_write(void) { file = fopen( filename , "w+"); if (file == NULL){ printf("ERROR: Loading verify file (%s) failed\n", filename); return -1; } return 0; } int set_file_name(const char* fname) { if (fname == NULL){ printf("ERROR: fname is NULL\n"); return -1; } filename = fname; return 0; } const char* get_file_name(void) { return filename; }