You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
279 lines
11 KiB
279 lines
11 KiB
#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;
|
|
// }
|