⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scapi.h

📁 NEA1803 51单片机与12864 由串口中断收取数据 显示经度纬度 高度 速度 时间 使用卫星数-GPS development NEA1803 51 SCM and 12864 collect
💻 H
📖 第 1 页 / 共 5 页
字号:
	{
		struct 
		{
			/** 
			 * 设备名
			 */
			ScWChar sDeviceName[SC_OP_DEVICENAME_MAXSIZE];  // FOR SC_SOCKET_COMM

			/** 
			 * widcom蓝牙的scn码 
			 */
			ScUChar scn;
			ScUChar pad[3];//崔宏威增加了一处对齐的问题
			union 
			{
				/** 
				 * 蓝牙地址
				 */
				ScInt	address[2];
				ScUChar address2[8];
			};
		}SocketParam;			///< socket参数

		// FOR SC_SERIAL_COMM
		struct 
		{  
			ScInt nPort;		///< 端口
			ScInt nBaudrate;	///< 波特率
			ScInt nStopbit;		///< 停止位
			ScInt nOddEven;		///< 奇偶校验
		}COMParam;				///< 串口参数
	};

} ScGpsParams;

#define SCAN_STATUS_OPEN_SUC		0x0001		///< 打开成功
#define SCAN_STATUS_OPEN_FAILED		0x0002		///< 打开失败
#define SCAN_STATUS_GPS_FOUND		0x0003		///< 发现GPS
 
/** \brief 串口扫描状态
 */
typedef struct tagCOMScanStatus
{
	ScInt Port;						///< 串口号
	ScInt BaudRate;					///< 波特率
	ScInt Status;					///< 状态

}COMSCANSTATUS;

/** \brief 启动GPS模块
 * 
 * 根据参数启动GPS模块
 * 
 * @param pParams GPS参数
 * @return  -1 失败\n
 * 0 成功
 */
SC_API long ScModuleGpsOpen(ScGpsParams * pParams = NULL) ;

/** \brief 关闭GPS模块
 *
 * 关闭GPS模块
 *
 */
SC_API long ScModuleGpsClose() ;

/** \brief 获得GPS状态
 * 
 * 获得GPS状态态
 *
 * \param SGpsInfo		GPS状态信息
 * \return 
 */
SC_API long ScGetGpsStatusInfo(ScGPSStatusInfo *SGpsInfo) ;

/** \brief 扫描串口
 * 
 * 扫描串口, 适合于pc。
 * 
 * \param BaudRate		串口波特率
 * \return
 */
SC_API long ScScanCOM(ScInt BaudRate = 9600);

/** \brief 获得串口扫描状态
 *
 * 获得串口扫描状态,返回值为已经扫描的串口个数,最大为32
 * 
 * \param pCOMScanStatus		串口扫描状态数组指针
 * \param byteSize				为pCOMScanStatus缓冲区的大小,至少要有sizeof(COMSCANSTATUS)*32
 * \return 如果数组数量少于32,返回0 否则返回串口扫描状态
 */
SC_API long ScGetScanStatus(COMSCANSTATUS* pCOMScanStatus, ScInt byteSize);

/** \brief 停止扫描串口
 * 停止扫描串口
 */
SC_API long ScStopScan();

/** \brief 全自动搜索
 * 
 * 全自动搜索, 包括串口和蓝牙,适合于ppc,连接gps设备
 *
 * \param BaudRate				波特率
 * \return
 */
SC_API long ScAutoFindGPS(ScInt BaudRate = 9600);

/** 获得自动扫描状态
 *
 * 获得自动扫描状态,包括串口和蓝牙,由于是同时搜索,所以顺序不保证
 *
 * 调用此函数的方法:
 *  ScGpsParams GPSParams[40];//至少需要有40个元素的大小(32 个串口+8个蓝牙)
 *  memset(&GPSParam, 0, sizeof(ScGpsParams)*40);
 *  ScGetAutoFindStatus(GPSParams, sizeof(ScGpsParams)*40);
 * 由于是动态扫描,所以此函数需要时时调用,才能获得最新的扫描状态
 * 自动扫描到gps后,会自动连接
 *
 * \param pGPSParam				全自动扫描的gps设备状态
 * \param byteSize				pGPSParam缓存区的大小 
 * \return 
 */
SC_API long ScGetAutoFindStatus(ScGpsParams* pGPSParam, ScInt byteSize);

/** \brief 设置串口参数
 * 
 * 设置串口参数
 * 对ScUpdateOption进行封装,以便gps模块接口的完整性
 *
 * \param Port					端口号
 * \param BaudRate				波特率
 * \return 
 */
SC_API long ScSetCOMParam(ScInt Port, ScInt BaudRate);

/** \brief 获取串口参数
 * 
 * 获取串口参数
 *
 * \param Port					端口号
 * \param BaudRate				波特率
 * \return 
 */
SC_API long ScGetCOMParam(ScInt* Port, ScInt* BaudRate);

//------------------------------------------------------------
//				ScGlobals相关API
//------------------------------------------------------------

/** \brief 消息信息定义
 *
 * 消息信息定义 
 */
class ScMsgInfo
{
public:
	/**	\brief 消息序号
	 */
	ScInt m_msgid;

	/**	\brief 消息名
	 */
	const char *m_msgname;
};

class ScGlobals;


/** \brief 获取ScGlobals对象指针
 *
 * 和GetSc()功能一样,供外部程序调试使用。
 * 在sc内部只能使用GetSc()而不能使用ScGetSc()。
 *
 * @return ScGlobals对象指针
 */
SC_API ScGlobals *ScGetSc();

/** \brief 获取消息信息列表
 *
 * 获得消息列表,供调试用
 *
 * \return 消息列表指针
 */
SC_API const ScMsgInfo *ScGetMsgInfo();

/** \brief 按照消息序号取得消息
 *
 * 按照消息序号取得消息
 *
 * @param msgid			消息id
 * @return 消息指针
 */
const ScMsgInfo* ScGetMsgInfo(ScInt msgid );

/** \brief 设定Log窗口
 *
 * 设定Log窗口,供调试用
 *
 * \param wnd 窗口指针
 */
SC_API void ScSetDebugWnd(ScDebugWnd *wnd);

//------------------------------------------------------------
//				路径计算API
//------------------------------------------------------------

/** \brief 添加航程点
 * 添加航程点 (异步)
 * <p>
 * @param index 0:起点 ; 99:终点; 1-98: 途径点
 * @param pt 点坐标 其中pt.x 经度 ,pt.y纬度
 * @return true 成功, false 失败
 */
SC_API ScBool ScAddWayPoint(ScInt index , const ScLogPoint &pt);

/** \brief 清除航程点
 *
 * 清除航程点 (异步)
 * <p>
 * @param index 0:起点 ; 99:终点; 1-98: 途径点
 * @return true 成功, false 失败
 */
SC_API ScBool ScRemoveWayPoint(ScInt index);

/** \brief 清除所有航程点 
 *
 * 清除所有航程点
 *
 * \return 成功返回TRUE, 否则返回FALSE
 */
SC_API ScBool ScRemoveAllWayPoint();


/** \brief 执行路径计算(异步)
 *
 * 执行路径计算(异步)
 * <p>
 * @return true 成功, false 失败。当前总为true.
 */
SC_API ScBool ScRouteCalc();

/** \brief 清除路径(异步)
 *
 * 清除路径(异步)
 * <p>
 * @return true 成功, false 失败。当前总为true.
 */
SC_API ScBool ScRouteClear();

//------------------------------------------------------------
//				路径引导API
//------------------------------------------------------------

/** \brief 启动模拟引导
 *
 * \return
 */
SC_API ScBool ScStartSimNav();

/** \brief 停止模拟引导
 *
 * \return
 */
SC_API ScBool ScStopSimNav();

/** \brief 启动真实引导
 *
 * \return
 */
SC_API ScBool ScStartRealNav();

/** \brief 停止真实引导
 *
 * \return
 */
SC_API ScBool ScStopRealNav();


/** \brief 取路径规划结果
 *
 * @param plCount 结果项个数 
 * @param ppRIs 结果项指针
 * @return  true 成功, false 失败
 */
SC_API ScBool ScGetRouteResult(ScLong* plCount, ScRouteItem **ppRIs);


/**
 * 字段选项
 * 某位为1时,对应字段才有效。
 * 查询和更新操作同时适用
 * 可组合使用
 */
enum  {  
  SC_OP_MASK_COMMON = 0x00100000,					///< 通用设置掩码
  SC_OP_MASK_RC		= 0x00200000,					///< 路径计算设置掩码
  SC_OP_MASK_RG		= 0x00400000,					///< 路径引导设置掩码
  SC_OP_MASK_GLOBAL = 0x00800000,					///< 全局选项,退出后不保存
  SC_OP_MASK_GPS    = 0x01000000,					///< gps设置掩码
  SC_OP_NONE		= 0x00,							///< 无任何字段  

  SC_OP_SIMSPEED	= 	SC_OP_MASK_COMMON | 0x01,	///< 模拟引导速度
  SC_OP_RCWAY		=	SC_OP_MASK_COMMON | 0x02,	///< 路径计算策略
  SC_OP_RRCWAY		=	SC_OP_MASK_RG	  | 0x04,	///< 路径重计算方式
  SC_OP_VOICEFREQ	=	SC_OP_MASK_RG	  | 0x08,	///< 语音播报频度
  SC_OP_VOICEVOLUME =	SC_OP_MASK_COMMON | 0x10,	///< 语音播报音量
  SC_OP_DAYMODE		=	SC_OP_MASK_COMMON | 0x20,	///< 白天黑夜模式
  SC_OP_TURNBYTURN	=	SC_OP_MASK_COMMON | 0x40,	///< turnbyturn模式还是地图模式
  SC_OP_SEARCHRANGE	=	SC_OP_MASK_COMMON | 0x80,	///< 周边搜索范围  
  SC_OP_NORTHUP		=	SC_OP_MASK_COMMON | 0x100,	///< 地理北向朝上还是车头朝上  
  SC_OP_WAYDISTANCE =	SC_OP_MASK_RG	  | 0x200,	///< 偏航距离,m
  SC_OP_AUTOLOCATE	=   SC_OP_MASK_GLOBAL | 0x400,	///< 引导或运动时自动跟踪
  SC_OP_SCREENORIENT=	SC_OP_MASK_COMMON | 0x800,
  SC_OP_PORT        =   SC_OP_MASK_GPS    | 0x01,	///< GPS串口号
  SC_OP_BAUDRATE    =   SC_OP_MASK_GPS    | 0x02,	///< GPS波特率
  SC_OP_RT          =   SC_OP_MASK_GPS    | 0x04,	///< 是否记录轨迹
  
  SC_OP_ALL = 0xffffffff,							///< 全部字段都有效
};

/** \brief 用于AP的选项,简化版
 */
class ScOption
{
public:
	ScOption(){ flags = SC_OP_NONE; }
	virtual ~ScOption(){}

public:
	/** 字段标志
	 */
	ScLong flags;

	/** 模拟引导速度(cm/s)
	 */
	ScLong simspeed;

	/** 音量
	   - 0x11: 最小
	   - 0x12:  
	   - 0x13: 
	   - 0x14: 
	   - 0x15:
	   - 0x16:
	   - 0x17:
	   - 0x18:
	   - 0x19: 最大
	   如果高位为0则为静音
	 */
	ScLong voicevolume;

	/** 周边搜索范围,m 
	 */
	ScLong searchrange;

	/** 偏航距离
		- 0:不匹配
		- 1: 50米
		- 2: 100米
		- 3: 200米
		- 4: 300米
		- 5: 400米
		- <0: 作为0处理
		- >5: 作为5处理
	 */
	ScLong waydistance;
	ScLong reserved1;
	/** 计算方式:最短?
	 */
	byte rcway; 

	/** 路径重计算方式:快速?完全?
	 */
	byte rrcway; 

	/** 语音播报频度 
	 * - 2: 多
	 * - 1: 少
	 * - 0: 静音
	 */
	byte voicefreq;

	/** 白天黑夜
	 * - 0 : 黑夜
	 * - 1 : 白天
	 */
	byte daymode;

	/** turnbyturn模式还是地图模式
	 */
	byte turnbyturn;

	/** 地理北向还是车头朝上
	 * - 0 : 地理北向
	 * - 1 : 车头上   
	 */
	byte northup;

	/** 引导或车辆移动时是否自动移动地图,不影响内部引导状态
	 */
	byte autolocate;

	/**
	 * - 0 : 竖屏
	 * - 1 : 横屏
	 */
	byte screenorientation;

	/** 串口号
	 */
	ScLong port;

	/** 波特率
	 */
	ScLong baudrate;

	/** 是否记录轨迹
	 */
	ScInt iRecTrk;
};

/** \brief 更新选项
 * @param pOption 选项指针
 * @return true 成功 , false 失败
 */
SC_API ScBool ScUpdateOption(const ScOption * pOption);

/** \brief 查询选项
 *
 * @param pOption 选项指针
 * @return true 成功 , false 失败 
 */
SC_API ScBool ScQueryOption(ScOption * pOption);


/** \brief 释放数组数据
 *
 * @param ppData 指向需要释放的数组的指针的地址
 * @return 1 成功, 0,参数为空,-1 ppData指向的指针为空
 * 函数返回后ppData纸向的指针被置为空。
 */
SC_API ScInt ScFreeData(void ** ppData);

/////////////////////API  定义////////////////////////////////////

///////////////////////////常量定义//////////////////////////////////


/** 
 * 事件返回值
 */
typedef enum ScEventHandleType 
{
	SC_IGNORED		= 0x0,			///< 事件被忽略
	SC_CONTINUED	= 0x1,			///< 事件已被处理,并且事件处理者允许继续进行当前处理过程
	SC_PROCESSED	= 0x2,			///< 事件已被处理,并且不允许交由其它处理者处理
	SC_TERMINATED	= 0x4,			///< 事件处理者要求终止当前处理过程

} ScEventHandleType;


/** 
 * 引导事件类型定义
 */
typedef enum ScGuidEvent {
	SC_GUID_OUTOFROAD			= 0x0101,	///< 偏离道路
	SC_GUID_OUTOFROUTE			= 0x0102,	///< 偏离路径
	SC_GUID_VEHICLESTOPPED		= 0x0103,	///< 车辆停止
	SC_GUID_VEHICLERUNNING		= 0x0104,	///< 车辆开动
	SC_GUID_SIMNAVSTARTED		= 0x0105,	///< 模拟引导开始
	SC_GUID_SIMNAVSTOPPED		= 0x0106,	///< 模拟引导已终止
	SC_GUID_SIMNAVCOMPLETED		= 0x0107,	///< 模拟引导正常结束
	SC_GUID_REALNAVSTARTED		= 0x0108,	///< 真实引导开始
	SC_GUID_REALNAVSTOPPED		= 0x0109,	///< 真实引导已终止
	SC_GUID_REALNAVCOMPLETED	= 0x0110,	///< 真实引导正常结束
	SC_GUID_RETURNTOROAD		= 0x0111,	///< 偏离道路后回到道路
	SC_GUID_RETURNTOROUTE		= 0x0112,	///< 偏离路径后回到路径
	SC_GUID_PREOUTOFROAD		= 0x0113,	///< 第一次检测到偏离道路
	SC_GUID_PREOUTOFROUTE		= 0x0114,	///< 第一次检测到偏离路径
	SC_GUID_PRERETURNTOROAD		= 0x0115,	///< 第一次检测到回到道路
	SC_GUID_PRERETURNTOROUTE	= 0x0116,	///< 第一次检测到回到路径
	SC_GUID_READY				= 0x0117,	///< 引导准备就绪。上层AP应在此时启动引导
	SC_GUID_GPSFIXED			= 0x0118,	///< 引导中GPS重新定位
	SC_GUID_GPSFIXING			= 0x0119,	///< 引导中GPS定位中

} ScGuidEvent ;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -