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

📄 scapi.h

📁 NEA1803 51单片机与12864 由串口中断收取数据 显示经度纬度 高度 速度 时间 使用卫星数-GPS development NEA1803 51 SCM and 12864 collect
💻 H
📖 第 1 页 / 共 5 页
字号:
	/** 确认码
	*/
	byte SureCode[16];

	byte pad[1];//崔宏威增加的一个成员用来对齐字节数

	/** 错误码
	 */
	ScInt ErrorCode;
                                                                                       
} ScRegisterInfo;


/**
 * SC要传给上层的其它信息:非显示信息
 */
typedef struct ScOtherEventInfo
{
	/// 车辆位置,用于计算自车位置到屏幕中心的距离
	ScLogPoint ptVehicle; 	

	/// ptVehicle是否有效
	byte bVehicle; 

	/// unused.
	byte pad[3];

} ScOtherEventInfo;

/**
 * 避让点描述信息 
 */
typedef struct ScConstraint
{
	/// 避让点经纬度
	ScObjPoint m_point;		

	/// 避让的路段ID
	ScObjecteId m_segID;		

	/// 避让路段的名字。最长为SC_OP_POINAME_MAXSIZE个字符
	ScWChar m_bufRoadName[SC_OP_POINAME_MAXSIZE];	

	/// 避让有效期。字符串格式。如 "20060105"
	ScWChar m_validTime[10];	
}ScConstraint;

/** 
 * 路线描述信息
 */
typedef struct ScRoutInfo 
{
	/// 路线长度
	ScLong m_lLength;		

	/// 在该路线上估计行驶时间,单位秒
	ScLong m_lTime;			

}ScRoutInfo ;


/** 
 * GPS位置信息
 */
typedef struct ScGPSEventInfo
{
	/// 经纬度(单位:NTU)
	ScLogPoint  position;

}ScGPSEventInfo;

/** \brief 观察者定义。定义了各模块会调用的回调函数。
 *
 * 导航系统在特定事件发生时会通过AppObserver发出通知
 * 系统不依赖于应用程序是否相应这些事件
 * 应用程序继承该类并实现其方法即可响应此通知
 * 注意:在处理任何事件时,都必须保证尽快返回,否则可能会引发系统错误
 */
class ScApObserver
{
public:
	/** 
	 * GPS事件
	 * 如果需要处理这些信息,需要重载此函数
	 *
	 * @param eventid 事件ID 参考 ScGPSEvent 
	 * @param pGI GPS信息, 当eventid = SC_GPS_POSITION时为位置信息,其它为空
	 * @return 0 事件未处理\n
	 * 1 事件已被处理\n
	 * 其它值的含义参考ScEventHandleType
	 */
	virtual ScInt GPSEvent( ScInt eventid, const ScGPSEventInfo * pGI) { return 0;}

	/** 
	 * 路径计算事件
	 * 如果需要处理这些信息,需要重载此函数
	 *
	 * @param eventid 事件ID 参考 ScRouteEvent 
	 * @return 0 事件未处理\n
	 * 1 事件已被处理\n其它值的含义参考ScEventHandleType
	 */
	virtual ScInt RouteEvent( ScInt eventid,ScRoutInfo* pRouteInfo) { return 0 ;}

	/** 
	 * 路径引导事件 
	 * 如果需要处理这些信息,需要重载此函数
	 *
	 * @param eventid 事件ID 参考 ScGuidEvent 
	 * @return 0 事件未处理\n
	 * 1 事件已被处理\n
	 * 其它值的含义参考ScEventHandleType
	 */
	virtual ScInt GuidEvent( ScInt eventid) { return 0 ;}

	/** 
	 * 错误事件
	 * 如果需要处理这些错误信息,需要重载此函数
	 *
	 * @param eventid 事件ID 
	 * @param pEI 详细错误信息
	 * @return 0 事件未处理\n
	 * 1 事件已被处理\n
	 * 其它值的含义参考ScEventHandleType
	 */
	virtual ScInt ErrorEvent(ScInt eventid, const ScErrorInfo * pEI ) { return 0; }

	/** 
	 * 绘制拐弯方向等其它信息
	 * 如果需要绘制这些信息,需要重载此函数
	 *
	 * @param pDI		绘制信息结构体 
	 * @return 0 事件未处理 \n
	 * 1 事件已被处理\n
	 * 其它值的含义参考ScEventHandleType
	 */
	virtual ScInt DrawInfo( ScDrawInfo * pDI) { return 0;  }

	/**
	 * 注册事件
	 * 处理数据库注册事件
	 *
	 * \param eventid		事件序号
	 * \param pRI			注册信息
	 */
	virtual ScInt RegisterEvent(ScInt eventid , ScRegisterInfo *pRI)  { return 0; }

	/**
	 * 其它非绘制事件
	 *
	 * \param pOI			其他事件消息
	 */
	virtual  ScInt OtherEvent(ScOtherEventInfo * pOI) { return 0; }

	/**  
	 *	RC计算过程中进度事件通知。
	 *
	 *  \param nPercent,进度的百分比。(0--100)
	 */ 
	virtual ScInt RcProcess(ScInt nPercent){return 0;}
};

///////////////////类型定义///////////////////////////////////////

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

//------------------------------------------------------------
//				系统API
//------------------------------------------------------------

/** \brief Sc初始化
 *
 * Sc初始化。在调用此函数时,需要保证窗口的大小是正确的。在win32平台可以通过
 * GetClientRect(...)来确认窗口大小。如果使用MFC的View结构,在CView::OnCreate
 * 中,窗口大小是(0,0,0,0),不是一个合法的窗口大小。
 *
 * @param pStartupParams 一个结构体指针,初始化信息应包含工作目录位置
 * @return 0 创建成功\n
 *         <0 创建失败
 */
SC_API ScInt ScInit(ScStartupParams * pStartupParams); 

/** \brief Sc退出
 *
 * 保存配置信息,释放所有分配的模块。在退出程序时,必须调用这个函数清理分配的
 *内存和资源。
 */
SC_API void ScExit();


/** \brief 载入地图数据库
 *
 * 根据数据库文件名载入数据库
 *
 * @param dbname 数据库名称,如“北京”,“上海”,请使用绝对路径
 * @return 0 创建成功\n
 *         <0 创建失败
 */
SC_API ScInt ScLoadDb(const ScWChar *dbname);

/** \brief 设定接收AP消息接收者
 *
 * 设定接收AP消息的类,在事件发生时对应模块会调用对应的虚方法
 */
SC_API ScInt ScSetApObserver(ScApObserver *apo);

//------------------------------------------------------------
//				状态API
//------------------------------------------------------------

/** \brief 获取系统状态
 *
 * 获取系统状态 
 *
 * @return 系统状态。是ScSystemStatus枚举值或多个进行按位或操作后的组合值
 */
SC_API ScLong ScGetSystemStatus();



//------------------------------------------------------------
//				绘制相关API
//------------------------------------------------------------

/** \brief 开始绘制
 *
 * 启动绘制, ScDrawMap和ScEndDraw必须连续调用
 *
 * @param drawmap 0 不绘制地图\n
 * 1 绘制地图
 */
SC_API void ScBeginDraw(ScInt drawmap);

/** \brief 绘制地图
 * 绘制地图
 */
SC_API void ScDrawMap();

/** \brief 结束绘制
 * 结束绘制
 */
SC_API void ScEndDraw();

/** \brief 将逻辑坐标值转换为设备坐标
 * 将逻辑坐标值转换为设备坐标
 *
 * @param [in] ptLog
 * @param [out] ptDev
 */
SC_API void ScLPtoDP(ScLogPoint *ptLog, ScDevPoint *ptDev);

/** \brief 将设备坐标转换为逻辑坐标
 * 将设备坐标转换为逻辑坐标
 *
 * @param [in] ptDev
 * @param [out] ptLog
 */
SC_API void ScDPtoLP(ScDevPoint *ptDev, ScLogPoint *ptLog);

/** \brief 将逻辑坐标转换为设备坐标
 *
 * 将逻辑坐标转换为设备坐标
 * 由于ScLPtoDP会在ptLog值特别大,同时地图比例尺特别小时会溢出
 * 为了解决这种情况,增加了这个函数。这个函数不保证ptDev和ptLog
 * 点的对应,只保证当ptLog在屏幕外时,ptDev是在ptLog到屏幕中心的
 * 连线上的一点,并且ptDev在屏幕外。
 */
SC_API ScInt ScLPtoDPClipped(ScLogPoint *ptLog, ScDevPoint *ptDev);

/** \brief 判断是否在地图的矩形区域内
 *
 * 判断是否在地图的矩形区域内
 *
 * @param [in] ptLog
 */
SC_API ScBool ScIsInMapRange(ScLogPoint *ptLog);

/** \brief 获得当前的比例尺
 *
 * 获得当前的比例尺
 */
SC_API ScLong ScGetScale();

/** \brief 获得当前的比例尺级数
 *
 * 获得当前的比例尺级数
 */
SC_API ScLong ScGetScaleIndex();

/** \brief 刷新地图
 * 
 * 刷新地图
 *
 * @param [in] param 0 只刷新地图\n
 * 1 根据客户区大小更新绘制矩形大小,并重新绘制地图
 */
SC_API void ScRefreshMap(ScInt resizing = 0);

/** \brief 缩放到显示整个地图
 * 缩放到显示整个地图
 */

SC_API void ScZoomAll();
/** \brief 旋转地图
 *
 * 按角度旋转地图,缩放后会自动刷新整个地图
 *
 * @param angle 旋转角度
 */
SC_API void ScRotateMap( ScInt angle );
/** \brief 按比例尺缩放
 *
 * 按比例尺缩放,缩放后会自动刷新整个地图
 *
 * @param ScLongitude 缩放中心点的经度逻辑坐标
 * @param latitude 缩放中心点的纬度逻辑坐标
 * @param scale 比例尺的分母
 */
SC_API void ScZoomScale(ScLong ScLongitude, ScLong latitude, ScInt scale);

/** \brief 按地图上矩形区域缩放地图
 *
 * 按地图上矩形区域缩放地图
 *
 * @param [in] minlon	最小经度
 * @param [in] maxlon	最大经度
 * @param [in] minlat	最小纬度
 * @param [in] maxlat	最大纬度
 */
SC_API void ScZoomMapRect(ScLong minlon, ScLong maxlon, ScLong minlat, ScLong maxlat);

/** \brief 平移地图
 *
 * 平移地图,平移后会自动刷新整个地图
 *
 * @param x x方向上的平移距离(设备坐标)
 * @param y y方向上的平移距离(设备坐标)
 */
SC_API void ScPanMapOffset(ScInt x, ScInt y);

/** \brief 获得屏幕中心点的经纬度(逻辑坐标)
 *
 * 获得屏幕中心点的经纬度(逻辑坐标)
 *
 * @param ScLongitude 经度
 * @param latitude 纬度
 */
SC_API void ScGetScreenCenterXY(ScLong &ScLongitude, ScLong &latitude);

/** \brief 定位到地图指定位置
 *
 * 定位到地图指定位置,并可设置比例尺
 *
 * @param longitude 定位后的地图中心经度
 * @param latitude 定位后的地图中心纬度
 * @param scalevalue 缩放后的比例尺
 * example: 	ScMapLocate(12144291,3125302, 4000);
 */
SC_API void ScMapLocate(ScLong longitude, ScLong latitude, ScLong scalevalue);

/** \brief 设定是否显示放大图
 *
 * 设定是否显示放大图
 *
 * @param [in] cgon 
 */
SC_API void ScSetCgOn(ScBool cgon);

/** \brief 设定放大图路径
 *
 * 设定放大图路径
 *
 * @param [in] 放大图路径,相对于ConfigFile的目录路径
 */
SC_API void ScSetCgPicDir(ScWChar *cgpicdir);

/** \brief 缩放到当前路径
 *
 * 缩放到当前路径
 */
SC_API ScInt ScZoomToRoute();

/** \brief AG语音播放
 *
 *	AG语音播放API
 *
 *	@param playStr 播报字串
 *	@param level 播报等级;0-异步,打断正在播报的\n
 * 1-同步,等待顺序播报
 */
SC_API void ScPlayString(const ScWChar *playStr, ScInt level);


/**** GPS ****/
typedef enum _SC_DCType
{
	SC_DC_GPS = 0x0001,  //GPS
}SC_DCType;


/** \brief GPS通讯方式
 * 通讯方式类型定义
 */
typedef enum _SC_CommType
{
	SC_SERIAL_COMM = 0x0001,				///< 串口
    SC_SOCKET_COMM = 0x0002,				///< 蓝牙
	SC_WIDCOM_COMM = 0x0003					///< widcom
	
}SC_CommType;

/** \brief 通讯方式选项
 * 通讯方式选项类型定义
 */
typedef enum SC_CommOption
{
	SC_CO_SPECIFIED		= 0x0001,			///< 指定专用设备地址或名称
	SC_CO_AUTODETECTED	= 0x0002,			///< 自动探测设备

}SC_CommOption;




//bluetooth device 
#ifdef __SYMBIAN32__
#include <e32std.h>
#include <bttypes.h>
#define SC_OP_BLUETOOTH
struct ScBluetoothDevice
{
	TBTDevAddr  tbdev;  
	TBuf<32>	DeviceName;
};
#endif

#ifdef WIN32
#define SC_OP_BLUETOOTH
struct ScBluetoothDevice
{
	ScWChar		name[SC_OP_DEVICENAME_MAXSIZE];    //device name.
	ScULong		address[2];  //device address  
};
#endif

//------------------------------------------------------------
//				GPS相关API
//------------------------------------------------------------

#define GPS_FOUND			0x0001
#define GPS_OPEN_FAILED		0x0002
#define GPS_SET_FAILED		0x0003
#define GPS_NOT				0x0004

/** \brief GPS参数
 * GPS参数
 */
typedef class ScGpsParams 
{
public:
	/** 
	 * 是numa格式还是moto的二进制格式
	 * - SC_CO_SPECIFIED
	 */
	SC_CommOption option;

	/** 
	 * 设备类型,是否是gps设备
	 * - SC_DC_GPS = 0x0001
	 */
	SC_DCType dcType;

	/** 
	 * 通讯方式,是串口通讯方式还是socket通讯方式
	 *	- SC_SERIAL_COMM = 0x0001	串口 
	 *	- SC_SOCKET_COMM = 0x0002	蓝牙
	 */
	SC_CommType commType;

	/** 
	 * gps状态,用于扫描
	 * - SCAN_STATUS_GPS_FOUND
	 * - SCAN_STATUS_OPEN_FAILED
	 * - SCAN_STATUS_OPEN_SUC
	 */
	ScInt Status;

	union 

⌨️ 快捷键说明

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