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

📄 scapi.h

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

/** 
 * GPS事件	
 */
typedef enum ScGPSEvent 
{
	SC_GPS_DETECTING			= 0x0101,	///< 正在探测GPS
	SC_GPSNOTFOUND				= 0x0102,	///< 没有探测到GPS
	SC_GPSFOUND					= 0x0103,	///< 找到了GPS
	SC_GPSMATCHING				= 0x0104,	///< 正在进行GPS匹配
	SC_GPSCONNECTING			= 0x0105,	///< 正在连接GPS
	SC_GPS_CONNECTED			= 0x0106,	///< GPS已连接
	SC_GPS_DISCONNECTED			= 0x0107,	///< GPS已断开
	SC_GPS_FIXING				= 0x0108,	///< GPS正在定位中
	SC_GPS_FIXED				= 0x0109,	///< GPS已完成定位	
	SC_GPS_POSITION				= 0x010a,	///< 报告GPS位置
} ScGPSEvent ;


/** 
 * 路径计算事件
 */
typedef enum ScRouteEvent 
{
	SC_ROUTE_CALCULATING		= 0x0101,	///< 路径计算中
	SC_ROUTE_RECALCULATING		= 0x0102,	///< 路径重新计算中
	SC_ROUTE_SUCCESS			= 0x0103,	///< 路径计算成功
	SC_ROUTE_WAYPOINTOK			= 0x0104,	///< 航程点添加成功
	SC_ROUTE_CANCELLED			= 0x0105,	///< 路径计算已取消
	SC_ROUTE_DELETED			= 0x0106,	///< 路径已被删除
	SC_ROUTE_FAILED				= 0x0107,	///< 路径计算失败
	Sc_ROUTE_CONSTRAINT_INVALID = 0x0108	///< 避让路段无效

} ScRouteEvent;

/** 
 * 错误事件
 */
typedef enum ScErrorEvent 
{
   SC_ERR_OK					= 0,			///< 没有错误
   SC_ERR_UNKNOWNERROR			= 0xffff0001,	///< 未知错误
   SC_ERR_FAILEDTOREGISTERDLL	= 0xffff0002,	///< 注册DLL失败   
   SC_ERR_FAILEDTOCREATEINSTANCE= 0xffff0003,	///< 生成COM实例失败
   SC_ERR_FAILEDTOINITCONNECTION= 0xffff0004,	///< 初始化连接失败
   SC_ERR_FAILEDTOCREATESTYLES	= 0xffff0005,	///< 载入样式失败
   SC_ERR_FAILEDTOINITIALIZEMAP = 0xffff0006,	///< 初始化地图失败
   SC_ERR_FAILEDTOLOADMAPXML	= 0xffff0007,	///< 载入地图xml失败
   SC_ERR_FAILEDTOCREATEMAPCONTROL = 0xffff0008,///< 生成MapControl失败
   SC_ERR_MANEUVER_CREATE		= 0xffff0009,	///< 创建机动错误 
   SC_ERR_WAYPOINT_CREATE		= 0xffff000a,	///< 航程点创建错误 
   SC_ERR_WAYPOINT_ADD			= 0xffff000b,	///< 航程点添加错误 
   SC_ERR_ROUTECALC				= 0xffff000c,	///< 路径计算错误 
   SC_ERR_MANEUVER_NEAR			= 0xffff000d,	///< 取最近的机动时错误 
   SC_ERR_SHORTOFSTARTPOINT		= 0xffff000e,	///< 路径计算时缺少起点
   SC_ERR_SHORTOFENDPOINT		= 0xffff000f,	///< 缺少目的地
   SC_ERR_SHORTOFBOTH			= 0xffff0010,	///< 缺少起点和目的地   
   SC_ERR_TOOMANYWAYPOINT		= 0xffff0011,	///< 航程点添加失败,原因是航程点太多
   SC_ERR_WPTPOSITIONTOONEAR	= 0xffff0012,	///< 起点和终点位置太近
   SC_ERR_GUIDNOROUTE			= 0xffff0013,	///< 启动路径引导时没有路径
   SC_ERR_ALREADYGUIDING		= 0xffff0014,	///< 已经处于引导状态时不能再次启动引导
   SC_ERR_GETMANEUVERHEAD		= 0xffff0015,	///< 引导时取启动头失败
   SC_ERR_INVALIDNAME			= 0xffff0016,	///< 非法名称
   SC_ERR_NULLPOINTER			= 0xffff0017,	///< 空指针
   SC_ERR_WAYPOINT_SETPOS		= 0xffff0018,	///< 指定航程点位置时失败
   SC_ERR_VERSIONEXPIRED		= 0xffff0019,	///< 版本过期
   
};

/**
 * 注册事件
 */
typedef enum  ScRegisterEvent 
{
//	SC_REG_MACHINESN_REQUIRED	= 0x01,			///< 需要机器码
	SC_REG_PRODUCTSN_REQUIRED	= 0x02,			///< 需要产品码
	SC_REG_SURECODE_REQUIRED	= 0x03,			///< 需要确认码,此时捎带有安装码
	SC_REG_FAILED				= 0x04,			///< 注册失败
	SC_REG_OK					= 0x05,			///< 注册成功
} ScRegisterEvent;

/** 
 * GPS状态
 */
enum ScGPSStatus
{
	SC_GPS_SEARCHING			= 1,			///< 搜索中
	SC_GS_DISCONNECTED			= 2,			///< 断开连接
	SC_GS_ERROR					= 3,			///< 连接失败
		
	SC_GS_FIXING				= 4,			///< 连接,未定位
	SC_GS_FIXED					= 5,			///< 连接,已定位
		
};

/** 
 * 系统状态
 * 低16位为实际业务状态
 * 高16位为SC_SS_RUNNING才为可正常进行业务操作的状态
 * 高16位为SC_SS_DEADTHWARRANT表示需借助外部才能恢复到正常状态,暂未使用
 * 如状态为0x00020000,即为正常运行状态
 * 如状态为0x00020001,即为正常的地图浏览状态
 */
enum ScSystemStatus
{	
	SC_SS_BROWSER				= 0x01,			///< 地图浏览状态
	SC_SS_SIMGUIDING			= 0x02,			///< 模拟引导状态
	SC_SS_REALGUIDING			= 0x04,			///< 真实引导
	SC_SS_GPSTRACKING			= 0x08,			///< GPS跟踪

	SC_SS_SYSTEMMASK			= 0xffff,		///< 状态掩码
	SC_SS_UNINITIALIZED			= 0x00,			///< 尚未初始化
	SC_SS_INITIALIZING			= 0x00010000,	///< 系统在初始化过程中
	SC_SS_RUNNING				= 0x00020000,	///< 系统正在正常运行中
	SC_SS_SHUTDOWNING			= 0x00040000,	///< 系统在关闭过程中
	SC_SS_PAUSED				= 0x00080000,	///< 系统处于暂停状态
	SC_SS_DEADTHWARRANT			= 0x00100000,	///< 系统因某种致命错误而无法自动恢复到正常状态
};


/** 
 * 消息来源
 */
enum ScMessageSource
{	
	SC_MS_SIMNAV				= 1,			///< 模拟引导	
	SC_MS_REALNAV				= 2,			///< 实际引导状态
	SC_MS_PLAYBACK				= 3,			///< 轨迹回放
};


///////////////////////////常量定义//////////////////////////////////
//SC_LOG: 只能SC内部使用
//外部请使用ScDebugMsg
//ScDebugMsg只能在ScInit之后调用才有效
//日志内容附带有产生日志时的时间戳和内存信息。
//日志文件名:debug.YYYYMMDD_HHMMSS.XXXXXXXX.txt,XXXXXXXX为SC本次运行产生的日志文件序号
//产生日志的条件:
//1.编译SC时必须使用SC_OP_LOG这个宏
//2.必须在工作目录下放置debug.log.txt文件,才能
//3.SC_OP_FILELOG: 在工作目录的log子目录下创建日志文件
//4.SC_OP_DEBUGLOG: 在WIN32下,生成调试信息(OutputDebugString)
//5.SC_OP_CONSOLELOG: 生成控制台信息

#ifdef SC_OP_LOG
#include "filelog.h"
#define SC_LOG	CFileLog::LogIt
#else
#define SC_LOG Sc_NullLog
#endif

inline void  Sc_NullLog(const ScChar *msg,...){}
inline void  Sc_NullLog(const ScWChar *msg,...){}


SC_API void ScDebugMsg(const ScChar *, ...);
SC_API void ScDebugMsg(const ScWChar *, ...);

//////////////// POIInfo部分 //////////////////
// 要显示一个POIINFO,用户需要拥有两件武器:DisplayMode和PoiInfo对象
// 在程序开始后(各模块创建后),用户才可以创建自己的DisplayMode和PoiInfo。
// 概念上,一个DisplayMode是一种显示模式,这种显示模式下可以显示某一种
// 类型的多个POI。
// 例如用户需要显示很多图标POI,那么他需要创建一个图标的DisplayMode,
// 然后在合适的情况下调用新增POI函数
// 事实上PoiInfo不仅仅可以显示PoiInfo,还可以显示线。
enum {
	POIINFO_POINT = 0x1, // 点POI,仅仅显示一个图标
	POIINFO_POINTSTYLE=0x2, // 点POI
	POIINFO_POINTTEXT=0x3, // 点POI,图标+文字
	POIINFO_POINTSTYLETEXT=0x4, // 点POI,图标+文字
	POIINFO_LINE=0x5, // 线POI
	POIINFO_ROAD=0x6  // 路段POI,绘制某一个路段
}; /**< POIINFO的类型 */



/**
 * POIINFO的基类,每个类型必须以这个基本类型为头。
 */
class ScPoiInfo {
public:
	virtual ScInt GetType() const = 0;
};

/**
 * POIINFO_POINT类型, 在地图某点位置绘制一个图标。
 * 图标可以绘制在一个圆形上。
 */
class ScPointPoiInfo : public ScPoiInfo
{
public:
	ScInt GetType() const { return POIINFO_POINT; }
	
	ScLogPoint point;	/**< 图标中心点位置 */
	ScUChar iconindex;	/**< 图标在图标文件种的索引值 */
	ScUChar reserved[3];
};

/**
 * POIINFO_POINTSTYLE类型,在地图某点位置绘制一个图标
 */
class ScPointStylePoiInfo : public ScPoiInfo
{
public:
	ScInt GetType() const { return POIINFO_POINTSTYLE; }
	
	ScLogPoint point; /**< 图标点位置 */
};

/**
 * POIINFO_POINTTEXT类型,在地图某点位置绘制一个图标和文字
 */
class ScPointTextPoiInfo : public ScPoiInfo
{
public:
	ScInt GetType() const { return POIINFO_POINTTEXT; }
	
	ScLogPoint point; /**< 点位置 */
	ScWChar name[32]; /**< 文字内容 */
	ScUChar iconindex; /**< 图标在图标文件种的索引值 */
};

/**
 * POIINFO_POINTSTYLETEXT类型,在地图某点位置绘制一个图标和文字
 * 和POIINFO_POINTEXT类似,不同之处在于绘制图标时是用styleid指定。
 */
class ScPointStyleTextPoiInfo : public ScPoiInfo
{
public:
	ScInt GetType() const { return POIINFO_POINTSTYLETEXT; }
	
	ScLogPoint point;
	ScWChar name[32];
};

/**
 * POIINFO_LINE类型
 */
class ScLinePoiInfo : public ScPoiInfo
{
public:
	ScLinePoiInfo() { numpoints = 0; points = NULL; selfcontain = 0;}

	ScInt GetType() const { return POIINFO_LINE; }
	
	ScUInt numpoints; /**< 点数目*/
	ScLogPoint *points; /**< 点坐标 */
	ScUInt selfcontain;
};

/**
 * POIINFO_ROAD
 */
class ScRoadPoiInfo : public ScPoiInfo
{
public:
	ScInt GetType() const { return POIINFO_ROAD; }

	ScLong idhigh;
	ScLong idlow;
};


struct DisplayMode
{
	// 显示模式有两种调用模式,同步和异步。
	// 在同步模式下,MD不会保存POIINFO对象。而是在MD需要绘制POI时,
	// 给对应的模块发送SMG_MSG_DRAWPOI消息,然后在由该模块调用ScMDDrawPoi
	// 来完成绘制工作。
	// SC外部只能使用异步模式。此时任何ScMDPoiAdd加入的POI将保存在MD内部
	// 在合适的时候绘制
	enum {
		CALLMODE_SYNC,
		CALLMODE_ASYNC
	};
	ScUChar callmode; // 0 = sync, 1 = async
	// POI显示的位置:或者在地图的最顶一层(在动态注记下)
	// 或者在地图的顶部(在动态注记上)
	enum {
		PLACE_LAYER,
		PLACE_TOP
	};
	ScUChar place;	// 0 = in layer, or 1 = in after da
	// POI只有在这个比例尺范围内才显示
	ScUChar minscaleindex;
	ScUChar maxscaleindex;
	// 是否可见
	ScUChar visible;
	ScUChar reserved[3];
	enum {
		DISPLAY_POINT = 0x01,
		DISPLAY_POINTSTYLE=0x02,
		DISPLAY_TEXT = 0x04,
		DISPLAY_TEXTSTYLE=0x08,
		DISPLAY_LINE = 0x10,
		DISPLAY_LINESTYLE=0x20
	};

	// 显示类型,注意实际上只有POINT和TEXT类型可以同时存在
	// 这个类型和传入的POI类型必须匹配。
	ScInt displaytype; // bit01=PointSetting, bit23 = TextSetting // bit45=LineSetting
	union {
		struct PointSettings {
			ScWChar iconfile[16];
			ScInt circlecolor;
			ScInt circleradius;
		} ps;
		struct PointStyleSettings {
			ScInt pointstyleid;
			ScInt circlecolor;
			ScInt circleradius;
		} pss;
	}pointu;
	/** 有文字时,textflags的位标志 */
	enum {
		TEXT_HASBACKGROUND = 0x1,
		TEXT_HASFRAME = 0x2
	};
	union {
		struct TextSettings {
			ScWChar fontname[16];
			ScInt fontheight;
			ScInt fontcolor;
			ScInt backcolor;
			ScInt framecolor;
			ScInt flags; //  MD_TEXT_HAS_BACKGROUND, MD_TEXT_HAS_FRAME
		} ts;
		struct TextStyleSetting {
			ScInt labelstyleid;
		} tss;
	}textu;
	union {
		struct LineSetting {
			ScInt linecolor;
			ScUChar blendmode;	// 0 =PEN, 1=XOR
			ScUChar linewidth;
			ScUChar arrowtype; // 0 = no arrow, 1 = arrow, 2=cross arrow
			ScUChar reserved;
		} ls;
		struct LineStyleSetting {
			ScInt linestyleid;
			ScUChar blendmode;
			ScUChar reserved[3];
		} lss;
	}lineu;
};
// predefined position
// layer
// 0 = 路径
// 1 = 路书和轨迹
// top
// 0 = 地址簿
// 1 = 事件点
// 2 = 周边设施
// 3 = 路书

#define MD_POS_ROUTE 0
#define MD_POS_TRACK_LINE 1

#define MD_POS_ADDRBOOK 0
#define MD_POS_EVENTPOS 1
#define MD_POS_ROUNDPOI 2
#define MD_POS_TRACk_ICON 3

SC_API ScInt ScMDRegisterDisplay(int position, const DisplayMode *dm);
SC_API ScInt ScMDUnregisterDisplay(ScInt handle);
SC_API ScInt ScMDModifyDisplay(ScInt handle, const DisplayMode *dm);
SC_API ScInt ScMDGetDisplay(ScInt handle, DisplayMode *dm);
SC_API ScInt ScMDPoiAdd(ScInt handle, ScPoiInfo *poi);
SC_API ScInt ScMDPoiRemoveAll(ScInt handle);

SC_API ScInt ScAddrBookIconFile(ScWChar *filename, ScInt maxlen);

///////////////////////////////// 路书相关 /////////////////////////////////////
//#ifdef SC_MOD_TRAVELOGUE
struct ScTvlInfo
{
	ScWChar filename[32];
	ScInt type;
	ScWChar author[32];
	ScInt starttime;	/**< the time the first point of track is recorded, in elapsed seconds since Jan, 1st, 1970 */
	ScLong edittime;
	ScWChar startcity[10];
	ScWChar endcity[10];
	ScInt infopointcnt;
};
struct ScTvlAttr
{
	ScUInt color;
	ScUChar visible;
	ScUChar reserved[3];
};
struct ScTvlPickInfo
{
	ScInt tvlid;
	ScInt pointid;
};
struct ScTvlPoint
{
	ScWChar name[20];
	enum {
		TLP_HEAD,
		TLP_POINT,
		TLP_LINE
	};
	unsigned short type;
	ScLong mileage;
	ScLong iconIndex;
	ScLong remindRadius;
	ScLong lon;
	ScLong lat;
	ScLong desLen;
#define MAX_DESC_LENGTH 128
	ScWChar pDes[MAX_DESC_LENGTH];
	ScLong resLen;
	ScWChar pRes[MAX_DESC_LENGTH];
};
/** 扫描目录,重新读取track文件 */
SC_API ScInt ScTvlScan();
/** 获得track数目 */
SC_API ScInt ScTvlGetTrackNum();

/** 删除序号为tvlid的track */
SC_API ScInt ScTvlRemoveTrack(ScInt tvlid);
/** 为序号为tvlid的track改名,newname为新的不带目录和后缀的名字 */
SC_API ScInt ScTvlRenameTrack(ScInt tvlid, const ScWChar *newname);
SC_API ScInt ScTvlGetInfo(ScInt tvlid, ScTvlInfo *info);
SC_API ScInt ScTvlZoomToTrack(ScInt tvlid);
SC_API ScInt ScTvlGetTrackPointNum(ScInt tvlid);
SC_API const ScLogPoint *ScTvlGetTrackPoint(ScInt tvlid);
/** 设定导航路径,如果tvlid为-1,那么设定为不导航 */
SC_API ScInt ScTvlSetGuideTrk(ScInt tvlid);
SC_API ScInt ScTvlGetGuideTrk();
SC_API ScInt ScTvlPointNum(ScInt tvlid);
SC_API ScInt ScTvlGetPoint(ScInt tvlid, ScInt pointid, ScTvlPoint *pnt);
SC_API ScInt ScTvlLocatePoint(ScInt tvlid, ScInt pointid);
SC_API ScInt ScTvlGetAttr(ScInt tvlid, ScTvlAttr *attr);
SC_API ScInt ScTvlSetAttr(ScInt tvlid, const ScTvlAttr *attr);
SC_API ScInt ScTvlPick(const ScDevPoint *pt, ScTvlPickInfo *info, ScInt maxnumpoints);
//#endif

/////////////////////////////////////////////////////////////////////////////////////////////////
/**
	搜索相关定义&API
*/

//----------POI Type------------------------

/** 
 * POI类别
 */
struct ScPOIType {
	ScInt    nID; //POI类别ID   设施点类型编码/如果该类型下有子类型,改编码为最小设施点类型编码
	ScInt    nMaxID;  // 最大设施点类型编码/如果该类型下没有子类型,改编码无用设为0
	ScWChar  sName[SC_POITYPENAME_MAXSIZE]; //POI类别名称
};

struct ScPOITypeRange{
	ScInt    nID; //POI类别ID   设施点类型编码/如果该类型下有子类型,改编码为最小设施点类型编码
	ScInt    nMaxID;  // 最大设施点类型编码/如果该类型下没有子类型,改编码无用设为0
};

//返回结果
#define SC_SUCCEEDED(Status)	((HRESULT)(Status) >= 0)
#define SC_FAILED(Status)		((HRESULT)(Status)<0)

enum ScResult
{
	S_SC_OK = 0x0,
	S_SC_NORESULT = 0x1000, //查询成功但无结果
	E_ERROR_IN_PARA	 = 0x80001000, //输入参数错误
	E_FAIL_OPERATION = 0x80001001, //操作失败,
	E_FAIL_NOFUNTION = 0x80001002, //无此功能

	E_FAIL_NOBUILD =0xFFFFFFFF,  //未编译此功能

};

#define ScResult ScInt
enum SC_POITYPE_QUERYTYPE
{
	SC_POITYPE_COMMON	= 0x0, //常规POI <smge:Common>true</smge:Common>
	SC_POITYPE_CLASS1	= 0x1, //取得第1等级类别
	SC_POITYPE_CLASS2	= 0x2, //取得第2等级类别
	SC_POITYPE_CLASS3	= 0x3, //取得第3等级类别 
	SC_POITYPE_CURRENT	= 0x8, //取得当前设定POITYPE,或关系枚举,与SC_POITYPE_CLASS1/SC_POITYPE_CLASS2/SC_POITYPE_CLASS3联合使用

⌨️ 快捷键说明

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