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.
263 lines
8.1 KiB
263 lines
8.1 KiB
2 years ago
|
/**
|
||
|
* @file Ramses.h
|
||
|
* @author Esea (info@eseaoptics.com)
|
||
|
* @brief Ramses 光谱仪驱动
|
||
|
* @version 1.0
|
||
|
* @date 2023-08-27
|
||
|
*
|
||
|
* @copyright ESEA (c) 2020
|
||
|
*
|
||
|
*/
|
||
|
#ifndef TRIOS_REMSES_H_
|
||
|
#define TRIOS_REMSES_H_
|
||
|
#include <stddef.h>
|
||
|
#include <stdint.h>
|
||
|
#include <string.h>
|
||
|
#include "uart_helper.h"
|
||
|
#include "uart_interface.h"
|
||
|
|
||
|
#define Ramses_CMD_SIZE (8)
|
||
|
#define Ramses_DATA_SIZE (64+8)
|
||
|
#define Ramses_DATA_NUM (8)
|
||
|
#define Ramses_IP_SIZE (16+8)
|
||
|
#define Ramses_INFO_SIZE (8+8)
|
||
|
|
||
|
#define Ramses_Rcv_Buf_Size (1024)
|
||
|
#define Ramses_Command_Number 2
|
||
|
|
||
|
#define Ramses_FLAG_MASK_BUSY ((uint32_t)1<<(uint32_t)0)
|
||
|
#define Ramses_FLAG_MASK_RECVED_IP ((uint32_t)1<<(uint32_t)1)
|
||
|
#define Ramses_FLAG_MASK_RECVED_DATA ((uint32_t)1<<(uint32_t)2)
|
||
|
#define Ramses_FLAG_MASK_RECVED_INFO ((uint32_t)1<<(uint32_t)3)
|
||
|
|
||
|
typedef int (*Ramses_send_fun)(void *send_class,uint8_t *buf,uint32_t size);
|
||
|
|
||
|
typedef enum
|
||
|
{
|
||
|
MODULE_RAMSESE_STATE_WAIT,
|
||
|
MODULE_RAMSESE_STATE_START,
|
||
|
MODULE_RAMSESE_STATE_SEND_CMD,
|
||
|
MODULE_RAMSESE_STATE_CHECK_SENSOR,
|
||
|
MODULE_RAMSESE_STATE_GET_DATA,
|
||
|
MODULE_RAMSESE_STATE_OK,
|
||
|
MODULE_RAMSESE_STATE_ERROR,
|
||
|
MODULE_RAMSESE_STATE_STOP
|
||
|
} MODULE_RAMSESE_WORK_STATE;
|
||
|
|
||
|
enum trios_integration_time{
|
||
|
TRIOS_INTEGRATION_TIME_AUTO,
|
||
|
TRIOS_INTEGRATION_TIME_4MS,
|
||
|
TRIOS_INTEGRATION_TIME_8MS,
|
||
|
TRIOS_INTEGRATION_TIME_16MS,
|
||
|
TRIOS_INTEGRATION_TIME_32MS,
|
||
|
TRIOS_INTEGRATION_TIME_64MS,
|
||
|
TRIOS_INTEGRATION_TIME_128MS,
|
||
|
TRIOS_INTEGRATION_TIME_256MS,
|
||
|
TRIOS_INTEGRATION_TIME_512MS,
|
||
|
TRIOS_INTEGRATION_TIME_1024MS,
|
||
|
TRIOS_INTEGRATION_TIME_2048MS,
|
||
|
TRIOS_INTEGRATION_TIME_4096MS,
|
||
|
TRIOS_INTEGRATION_TIME_8192MS
|
||
|
};
|
||
|
struct Ramses_data
|
||
|
{
|
||
|
uint16_t dev_id;
|
||
|
uint8_t module_id;
|
||
|
uint8_t framebyte;
|
||
|
uint8_t data_size;
|
||
|
uint8_t *data;
|
||
|
uint8_t raw[Ramses_DATA_SIZE];
|
||
|
};
|
||
|
struct Ramses_ip
|
||
|
{
|
||
|
uint16_t dev_id;
|
||
|
uint8_t module_id;
|
||
|
uint8_t framebyte;
|
||
|
uint8_t data_size;
|
||
|
uint8_t *data;
|
||
|
uint8_t raw[Ramses_IP_SIZE];
|
||
|
};
|
||
|
|
||
|
struct Ramses_infomation
|
||
|
{
|
||
|
uint16_t dev_id;
|
||
|
uint8_t module_id;
|
||
|
uint16_t serial_number;
|
||
|
uint8_t firmware_number[2];
|
||
|
uint8_t individual_information[Ramses_INFO_SIZE-8];
|
||
|
};
|
||
|
|
||
|
typedef struct trios_ramses
|
||
|
{
|
||
|
// UartHelper_TypeDef *uarthelper;
|
||
|
volatile MODULE_RAMSESE_WORK_STATE state;
|
||
|
volatile uint8_t send_flag; /* 发送标志位 */
|
||
|
volatile Uart_Status_TypeDef send_status; /* 发送状态 1:正在发送 busy,0:发送ok,*/
|
||
|
volatile Uart_Status_TypeDef status; /* 发送状态 0: ready , 1:正在发送 busy,2:发送ok,*/
|
||
|
volatile uint8_t step; /* 0 : normal , 1 : get wavelength , 2 : get sn 3: 空*/
|
||
|
// volatile uint8_t command_seq ; /* 命令序号 */
|
||
|
|
||
|
uint8_t flag;
|
||
|
uint8_t flag_ip;
|
||
|
uint8_t data_index;
|
||
|
uint8_t recv_buf_p;
|
||
|
uint8_t data_size;
|
||
|
uint8_t recv_flag_40;
|
||
|
uint8_t cmd_buf[Ramses_CMD_SIZE];
|
||
|
|
||
|
struct Ramses_infomation infomation;
|
||
|
struct Ramses_ip ip;
|
||
|
struct Ramses_data data[Ramses_DATA_NUM];
|
||
|
uint8_t recv_buf[Ramses_DATA_SIZE];
|
||
|
uint16_t sn;
|
||
|
uint8_t error;
|
||
|
|
||
|
uint8_t data_ok; /* 接收数据完整可以处理 */
|
||
|
volatile uint16_t size_received;
|
||
|
uint64_t timebase;
|
||
|
uint64_t timeout_ms;
|
||
|
uint64_t timeout_enable;
|
||
|
|
||
|
void *send_class;
|
||
|
Ramses_send_fun send_fun;
|
||
|
|
||
|
}Ramses_TypeDef;
|
||
|
extern Ramses_TypeDef *ramses ;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
static inline void Ramses_clean_data_recved_flag(Ramses_TypeDef *ramses)
|
||
|
{
|
||
|
ramses->flag&=~Ramses_FLAG_MASK_RECVED_DATA;
|
||
|
}
|
||
|
static inline void Ramses_clean_ip_recved_flag(Ramses_TypeDef *ramses)
|
||
|
{
|
||
|
ramses->flag&=~Ramses_FLAG_MASK_RECVED_IP;
|
||
|
}
|
||
|
static inline void Ramses_clean_info_recved_flag(Ramses_TypeDef *ramses)
|
||
|
{
|
||
|
ramses->flag&=~Ramses_FLAG_MASK_RECVED_INFO;
|
||
|
}
|
||
|
|
||
|
int Ramses_init( );
|
||
|
int Ramses_send_cmd(Ramses_TypeDef *ramses,uint16_t dev_id,uint8_t module_id,uint8_t instruction,uint8_t parameter1,uint8_t parameter2);
|
||
|
int Ramses_cmd_messung(Ramses_TypeDef *ramses,uint8_t module_id);
|
||
|
int Ramses_cmd_set_integration_time(Ramses_TypeDef *ramses,enum trios_integration_time integration_time);
|
||
|
int Ramses_cmd_get_infomation(Ramses_TypeDef *ramses,uint8_t module_id);
|
||
|
uint32_t Ramses_get_ip_raw(Ramses_TypeDef *ramses,uint8_t *buf,uint32_t size);
|
||
|
uint32_t Ramses_get_data_raw(Ramses_TypeDef *ramses,uint8_t *buf,uint32_t size);
|
||
|
uint32_t Ramses_get_data(Ramses_TypeDef *ramses,int16_t *data,uint32_t num);
|
||
|
double Ramses_get_x_inclination_angle(Ramses_TypeDef *ramses,double incl_xgain,double incl_xoffset);
|
||
|
double Ramses_get_y_inclination_angle(Ramses_TypeDef *ramses,double incl_ygain,double incl_yoffset);
|
||
|
double Ramses_get_inclination_angle(double x_inclination_angle,double y_inclination_angle);
|
||
|
double Ramses_get_pressure(Ramses_TypeDef *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);
|
||
|
double Ramses_get_depth_m(double pressure);
|
||
|
uint16_t Ramses_get_serial_number(Ramses_TypeDef *ramses);
|
||
|
void Ramses_receive_callback(Ramses_TypeDef *ramses,uint8_t *buf,uint32_t size);
|
||
|
void Ramses_clean_flag(Ramses_TypeDef *ramses,uint8_t mask);
|
||
|
uint8_t Ramses_get_flag(Ramses_TypeDef *ramses,uint8_t mask);
|
||
|
|
||
|
void Ramses_Set_Timeout(Ramses_TypeDef *ramses, uint16_t timeout_ms );
|
||
|
int Ramses_Get_Timeout( Ramses_TypeDef *ramses );
|
||
|
|
||
|
void Ramses_Set_Sendbuf( Ramses_TypeDef *ramses, uint8_t * buf, uint16_t size );
|
||
|
void Ramses_Set_Rcvbuf( Ramses_TypeDef *ramses, uint8_t * buf, uint16_t size );
|
||
|
|
||
|
void Ramses_Set_State (Ramses_TypeDef *ramses, MODULE_RAMSESE_WORK_STATE state);
|
||
|
|
||
|
// void Ramses_Setup ();
|
||
|
void Ramses_Port ();
|
||
|
void Ramses_Task(void * argument);
|
||
|
int Ramses_copy(Ramses_TypeDef *ramses ,uint16_t size);
|
||
|
/* 再封装演示 */
|
||
|
typedef struct
|
||
|
{
|
||
|
uint8_t (*init)( );
|
||
|
uint8_t (*port)(void);
|
||
|
|
||
|
GPIO_TypeDef *sel_gpio;
|
||
|
GPIO_TypeDef *dplx_gpio;
|
||
|
GPIO_TypeDef *de_gpio;
|
||
|
uint16_t sel_pin;
|
||
|
uint16_t dplx_pin;
|
||
|
uint16_t de_pin;
|
||
|
|
||
|
Uart_Interface_Type_Typedef interface_type; /* 0: common, 1: 485 ,2:3160*/
|
||
|
Uart_RS_Mode_TypeDef mode_232_485; /* 0 commome 1:485*/
|
||
|
Uart_Transmode_TypeDef trans_type; /* 0 :polling, 1: IT 2: DMA*/
|
||
|
Uart_Transmode_TypeDef rcv_type; /* 0 :polling, 1: IT 2: DMA*/
|
||
|
Uart_IDLE_Enable_TypeDef idle_enable_disable; /* 0 :不启用空闲 , 1: 启用空闲/
|
||
|
|
||
|
SC6_TypeDef *sample; /*不是常量 不能直接初始化*/
|
||
|
|
||
|
}My_Ramses_TypeDef;
|
||
|
extern My_Ramses_TypeDef myramses ;
|
||
|
#endif
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
// typedef struct
|
||
|
// {
|
||
|
// UartHelper_TypeDef *uarthelper;
|
||
|
// UART_HandleTypeDef *huart;
|
||
|
// uint8_t interface_type; /* 0: common, 1: 485 ,2:3160*/
|
||
|
// uint8_t mode_232_485; /* 0: common, 1: 485 */
|
||
|
// uint8_t trans_type; /* 0 :polling, 1: IT 2: DMA*/
|
||
|
// uint8_t rcv_type; /* 0 :polling, 1: IT 2: DMA*/
|
||
|
// uint8_t idle_enable_disable; /* 0 不开启空闲中断 , 1 开启空闲中断 */
|
||
|
// uint8_t trans_mode; /* 0 :polling, 1: IT 2: DMA*/
|
||
|
|
||
|
// uint8_t *send_buf;
|
||
|
// uint16_t size_send;
|
||
|
// uint8_t *rcv_buf;
|
||
|
// uint16_t size_rcv;
|
||
|
|
||
|
// volatile uint8_t send_flag; /* 发送标志位 */
|
||
|
// Uart_Status_TypeDef send_status; /* 发送状态 1:正在发送 busy,0:发送ok,*/
|
||
|
// Uart_Status_TypeDef status; /* 发送状态 1:正在发送 busy,0:发送ok,*/
|
||
|
|
||
|
// uint8_t command_seq ; /* 命令序号 */
|
||
|
// uint8_t mode; /* 0 : normal , 1 : get wavelength , 2 : get sn */
|
||
|
|
||
|
// uint8_t result_Buf[SC6_Rcv_Buf_Size];
|
||
|
// uint8_t SC6_Data_Buf[SC6_Rcv_Buf_Size*2];
|
||
|
// uint8_t SC6_Raw_Buf[SC6_Rcv_Buf_Size*3];
|
||
|
|
||
|
// uint8_t *data_start_tag;
|
||
|
// uint8_t *data_end_tag;
|
||
|
|
||
|
// uint8_t start_cmd_valid ;
|
||
|
// uint8_t stop_cmd_valid ;
|
||
|
// uint8_t *start_cmd_buf;
|
||
|
// uint8_t *stop_cmd_buf;
|
||
|
|
||
|
// uint8_t rcv_ok; /* 接收数据完整可以处理 */
|
||
|
// uint8_t data_begin_flag; /* 接收数据完整可以处理 */
|
||
|
// uint8_t data_ok; /* 接收数据完整可以处理 */
|
||
|
// uint16_t size_received;
|
||
|
|
||
|
|
||
|
|
||
|
// uint32_t timebase;
|
||
|
// uint16_t timeout_ms;
|
||
|
|
||
|
// uint8_t (*Init)(void); //初始化触摸屏控制器
|
||
|
// // uint8_t (*Setup)( ); //扫描触摸屏.0,屏幕扫描;1,物理坐标;
|
||
|
// uint8_t (*Port)( ); //扫描触摸屏.0,屏幕扫描;1,物理坐标;
|
||
|
|
||
|
// }SC6_TypeDef;
|