#include "ramses.h"
#include "elog.h"

/*  进一步对RAMSES 信息进行处理 */

// /**
//  * @brief 获取转换后的光谱数据
//  * 
//  * @param trios_ramses 设备描述符
//  * @param data 数据缓冲区
//  * @param num 缓冲区长度
//  * @return uint32_t 成功:数据长度 失败:0xffffffff
//  */
// uint32_t trios_ramses_get_data(struct trios_ramses *trios_ramses,int16_t *data,uint32_t num)
// {
//     int i;
//     int j;
//     uint8_t endian_mask;
//     endian_mask=endian_get_local_endian_mask(ENDIAN_MASK_LITTLE_ENDIAN);
//     if(num<(TRIOS_RAMSES_DATA_SIZE-8)*TRIOS_RAMSES_DATA_NUM/2)
//     {
//         return 0;
//     }
//     if((trios_ramses->flag&TRIOS_RAMSES_FLAG_MASK_RECVED_DATA)==0){
//         return 0;
//     }
//     for(i=0,j=0;i<TRIOS_RAMSES_DATA_NUM;i++){
//         if(endian_write(endian_mask,ENDIAN_WIDTH_MASK_2BYTE,&((uint8_t*)data)[j],trios_ramses->data[i].data,trios_ramses->data[i].data_size)!=0){
//             trios_ramses_clean_data_recved_flag(trios_ramses);
//             return 0xffffffff;
//         }
//         j+=trios_ramses->data[i].data_size;
//     }
//     return j/2;
// }
// /**
//  * @brief 获取X轴倾斜角度
//  * 
//  * @param trios_ramses 设备描述符
//  * @param incl_xgain 标定数据
//  * @param incl_xoffset 标定数据
//  * @return double 成功:X轴倾角 失败:NAN
//  */
// double trios_ramses_get_x_inclination_angle(struct trios_ramses *trios_ramses,double incl_xgain,double incl_xoffset)
// {
//     if((trios_ramses->flag&TRIOS_RAMSES_FLAG_MASK_RECVED_IP)==0){
//         return NAN;
//     }
//     return (trios_ramses->ip.data[4]-incl_xoffset)*incl_xgain;
// }
// /**
//  * @brief 获取Y轴倾斜角度
//  * 
//  * @param trios_ramses 设备描述符
//  * @param incl_ygain 标定数据
//  * @param incl_yoffset 标定数据
//  * @return double 成功:Y轴倾角 失败:NAN
//  */
// double trios_ramses_get_y_inclination_angle(struct trios_ramses *trios_ramses,double incl_ygain,double incl_yoffset)
// {
//     if((trios_ramses->flag&TRIOS_RAMSES_FLAG_MASK_RECVED_IP)==0){
//         return NAN;
//     }
//     return (trios_ramses->ip.data[5]-incl_yoffset)*incl_ygain;
// }
// /**
//  * @brief 获取设备倾角
//  * 
//  * @param x_inclination_angle X轴倾角
//  * @param y_inclination_angle Y轴倾角
//  * @return double 成功:设备倾角 失败:NAN
//  */
// double trios_ramses_get_inclination_angle(double x_inclination_angle,double y_inclination_angle)
// {
//     if(x_inclination_angle==NAN || y_inclination_angle==NAN){
//         return NAN;
//     }
//     return atan(sqrt(pow(tan(x_inclination_angle*M_PI/180),2)+pow(tan(y_inclination_angle*M_PI/180),2)));
// }
// /**
//  * @brief 获取压力
//  * 
//  * @param trios_ramses 设备描述符
//  * @param incl_kref 标定数据
//  * @param incl_kbg 标定数据
//  * @param press_gain 标定数据
//  * @param press_surface_bar 标定数据
//  * @param press_sens_mv_bar_1ma 标定数据
//  * @param press_sens_mv_bar_4ma 标定数据
//  * @return double 压力
//  */
// double trios_ramses_get_pressure(struct trios_ramses *trios_ramses,double incl_kref,double incl_kbg,double press_gain,double press_surface_bar,double press_sens_mv_bar_1ma,double press_sens_mv_bar_4ma)
// {
//     uint16_t npress;
//     uint16_t nbg;
//     uint16_t nrefh;
//     uint16_t nrefl;
//     double noffset;
//     double press_sens;
//     double vpress_v;
//     double p_bar;
//     if((trios_ramses->flag&TRIOS_RAMSES_FLAG_MASK_RECVED_IP)==0){
//         return NAN;
//     }
//     npress=((uint16_t)trios_ramses->ip.data[7]<<8)+trios_ramses->ip.data[6];
//     nbg=((uint16_t)trios_ramses->ip.data[11]<<8)+trios_ramses->ip.data[10];
//     nrefh=((uint16_t)trios_ramses->ip.data[13]<<8)+trios_ramses->ip.data[12];
//     nrefl=((uint16_t)trios_ramses->ip.data[15]<<8)+trios_ramses->ip.data[14];
//     noffset=nrefl-(incl_kref*(nrefh-nrefl));
//     vpress_v=incl_kbg*(npress-noffset)/(nbg-noffset);
//     press_sens=(press_sens_mv_bar_4ma<=0?press_sens_mv_bar_1ma:press_sens_mv_bar_4ma);
//     p_bar=1000.0*vpress_v/(press_sens*press_gain);
//     return p_bar-1.021;
// }
// /**
//  * @brief 获取深度(米)
//  * 
//  * @param pressure 压力
//  * @return double 成功:深度 失败:NAN
//  */
// double trios_ramses_get_depth_m(double pressure)
// {
//     if(pressure==NAN){
//         return NAN;
//     }
//     return pressure*10;
// }
// /**
//  * @brief 获取设备序列号
//  * 
//  * @param trios_ramses 设备描述符
//  * @return uint16_t 成功:设备序列号 失败:0xffff
//  */
// uint16_t trios_ramses_get_serial_number(struct trios_ramses *trios_ramses)
// {
//     if((trios_ramses->flag&TRIOS_RAMSES_FLAG_MASK_RECVED_INFO)==0){
//         return 0xffff;
//     }
//     return trios_ramses->infomation.serial_number;
// }


// extern int Ramses_Deal_Data_Frame(Ramses_TypeDef *pRamses, uint8_t *buf, uint16_t size);

// int Ramses_Deal_Data_Frame(Ramses_TypeDef *pRamses, uint8_t *buf, uint16_t size)
// {
//     int i;
//     int j = 0;

//     for(i=0;i<size;i++){
// 		log_i("recv_buf i %d   %02X,  recv_buf_p %d",i, buf[i], ramses.recv_buf_p);
//         if ( ramses.recv_buf_p==0 && buf[i]!=0x23 ){  // 下标为0，找0x23 可以过滤0x13 0x11
// 			log_i("recv_buf i  0x23" );
//             continue; 
//         }
//         if(ramses.recv_flag_40==1){
//             if(buf[i]==0x64){
//                 ramses.recv_buf[ramses.recv_buf_p++]=0x40;
//             }
//             else if(buf[i]==0x65){
//                 ramses.recv_buf[ramses.recv_buf_p++]=0x23;
//             }
//             else if(buf[i]==0x66){
//                 ramses.recv_buf[ramses.recv_buf_p++]=0x11;
//             }
//             else if(buf[i]==0x67){
//                 ramses.recv_buf[ramses.recv_buf_p++]=0x13;
//             }
//             else{
//                 ramses.data_index=0;
//                 ramses.recv_flag_40=0;
//                 ramses.recv_buf_p=0;
//                 continue;
//             }
//             ramses.recv_flag_40=0;
//         }
//         else if(buf[i]==0x40){
//             ramses.recv_flag_40=1;
//         }
//         else{  //  每帧 recv_buf中的 数组下标
// 			// log_i("buf[i]  -> %d  %02X" ,i, buf[i]);
//             ramses.recv_buf[ramses.recv_buf_p++]=buf[i];
// 			j++ ;
//         }
	
// 		//    每帧数据数量 大于7 判断类型，且长度校验通过 
//         if(ramses.recv_buf_p>7 && ramses.recv_buf_p==8+(2<<(ramses.recv_buf[1]>>5))){
// 				// j++ ;
//             if(ramses.recv_buf[4]==0xff){   // 0xff  表征 SN信息帧
// 				log_i(" info frame .... ") ;
//                 if(ramses.recv_buf_p!=Ramses_INFO_SIZE){
//                     ramses.recv_flag_40=0;
//                     ramses.recv_buf_p=0;
//                     continue;
//                 }
//                 ramses.information.dev_id=((uint16_t)ramses.recv_buf[1]<<8)+ramses.recv_buf[2];
//                 ramses.information.module_id=ramses.recv_buf[3];
//                 ramses.information.serial_number=((uint16_t)ramses.recv_buf[8]<<8)+ramses.recv_buf[7];
//                 ramses.information.firmware_number[0]=ramses.recv_buf[10];
//                 ramses.information.firmware_number[1]=ramses.recv_buf[9];
//                 memcpy(ramses.information.individual_information,&ramses.recv_buf[7],Ramses_INFO_SIZE-12);
//                 ramses.recv_buf_p=0;
//                 ramses.flag|=Ramses_FLAG_MASK_RECVED_INFO;
//                 ramses.flag&=~Ramses_FLAG_MASK_BUSY;
//             }
//             else if(ramses.recv_buf[4]==0xfe){  // 0xfe错误
//                 ramses.data_index=0;
//                 ramses.recv_flag_40=0;
//                 ramses.recv_buf_p=0;
//                 continue;
//             }
//             else{
//                 if(ramses.recv_buf[3]==0x80 || ramses.recv_buf[3]==0x30 || ramses.recv_buf[3]==0x00){
//                     // log_i("....  0x80 0x 30  0x00");
//                     if((ramses.flag&Ramses_FLAG_MASK_RECVED_DATA)!=0){  // 判断为数据帧
//                         ramses.data_index=0;
//                         ramses.recv_flag_40=0;
//                         ramses.recv_buf_p=0;
//                         continue;
//                     }
//                     if(ramses.recv_buf_p!=Ramses_DATA_SIZE){
//                         ramses.recv_flag_40=0;
//                         ramses.recv_buf_p=0;
//                         continue;
//                     }
//                     if(ramses.recv_buf[4]!=Ramses_DATA_NUM-1-ramses.data_index){
//                         ramses.data_index=0;
//                         ramses.recv_flag_40=0;
//                         ramses.recv_buf_p=0;
//                         continue;
//                     }
//                     memcpy(ramses.data[ramses.data_index].raw,ramses.recv_buf,Ramses_DATA_SIZE);
//                     ramses.data[ramses.data_index].dev_id=((uint16_t)ramses.recv_buf[1]<<8)+ramses.recv_buf[2];
//                     ramses.data[ramses.data_index].module_id=ramses.recv_buf[3];
//                     ramses.data[ramses.data_index].framebyte=ramses.recv_buf[4];
//                     ramses.data[ramses.data_index].data=&ramses.data[ramses.data_index].raw[7];
//                     ramses.data[ramses.data_index].data_size=Ramses_DATA_SIZE-8;
//                     ramses.data_index++;
//                     ramses.recv_buf_p=0;
//                     if(ramses.data_index==Ramses_DATA_NUM){
//                         ramses.data_index=0;
//                         ramses.flag|=Ramses_FLAG_MASK_RECVED_DATA;
//                         ramses.flag&=~Ramses_FLAG_MASK_BUSY;
//                     }
//                 }
//                 else if(ramses.recv_buf[3]==0x20){
//                     if((ramses.flag&Ramses_FLAG_MASK_RECVED_IP)!=0){  // 判断为IP帧
//                         ramses.data_index=0;
//                         ramses.recv_flag_40=0;
//                         ramses.recv_buf_p=0;
//                         continue;
//                     }
//                     if(ramses.recv_buf_p!=Ramses_IP_SIZE){
//                         ramses.recv_flag_40=0;
//                         ramses.recv_buf_p=0;
//                         continue;
//                     }
//                     memcpy(ramses.ip.raw,ramses.recv_buf,Ramses_IP_SIZE);
//                     ramses.ip.dev_id=((uint16_t)ramses.recv_buf[1]<<8)+ramses.recv_buf[2];
//                     ramses.ip.module_id=ramses.recv_buf[3];
//                     ramses.ip.framebyte=ramses.recv_buf[4];
//                     ramses.ip.data=&ramses.ip.raw[7];
//                     ramses.ip.data_size=Ramses_IP_SIZE-8;
//                     ramses.recv_buf_p=0;
//                     ramses.flag|=Ramses_FLAG_MASK_RECVED_IP;
//                 }
//                 else{
//                     ramses.data_index=0;
//                     ramses.recv_flag_40=0;
//                     ramses.recv_buf_p=0;
//                     continue;
//                 }
//             }
//         }
    
// 	} 
// 	log_i("cb   i %d  j %d",i,j);
// 	return 0;
// }