久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区


曙海教育集團論壇VxWorks專區VxWorks 應用開發 → 實時操作系統VxWorks下電子海圖系統打印功能的實現


  共有8815人關注過本帖樹形打印

主題:實時操作系統VxWorks下電子海圖系統打印功能的實現

美女呀,離線,留言給我吧!
wangxinxin
  1樓 個性首頁 | 博客 | 信息 | 搜索 | 郵箱 | 主頁 | UC


加好友 發短信
等級:青蜂俠 帖子:1393 積分:14038 威望:0 精華:0 注冊:2010-11-12 11:08:23
實時操作系統VxWorks下電子海圖系統打印功能的實現  發帖心情 Post By:2010-12-1 11:34:46

1 前 言

  電子海圖系統是一種把需要向航海人員顯示和解釋的各種各樣信息融成一體的實時導航系統,是地理信息系統在艦船組合導航系統中的重要應用,被認為是繼雷達/ARPA之后在艦船導航方面又一項偉大的技術革命。與簡單地用顏色顯示的紙海圖相比,電子海圖系統包括更多的使用簡單、操作容易的地理和文字信息。作為一種自動判定儀器,它能夠連續測定船舶相對于陸地、圖示物標、導航標志和不可見礙航物的位置,對海上航行、安全和商業都有重要意義。

  VxWorks是一種嵌入式的實時操作系統。將應用較為廣泛的電子海圖系統移植到VxWorks操作系統下的主要原因有兩個:一是VxWorks系統的實時性,能夠很好的滿足導航系統實時性的要求;二是基于信息安全方面的考慮,海圖系統要求一種保密性好、沒有漏洞的操作系統,使用VxWorks操作系統,程序開發者可以進行最底層的程序開發,能夠完全控制系統的資源,確保海圖信息的安全。

2 電子海圖系統打印功能的總體設計思路

  在VxWorks操作系統中,實現電子海圖信息打印功能設計的總體思路是:首先將打印內容,包括圖像和報表,轉換成恰當格式的圖像文件,如PostScript文件,而后對于沒有內置PostScript語言解釋器的打印機,需要將PostScript語言解釋成打印機可以識別的語言,最后把圖像文件輸送到打印機。

  本文介紹基于內置有PostScript語言解釋器的HP LaserJet 1200打印機,在VxWorks操作系統下,完成電子海圖信息打印功能的實現過程。

3 打印驅動

  打印機驅動程序中的各個函數的實現:

  (1)基本的I/O函數的實現
  根據打印機并口的特點,驅動程序中要實現的基本的I/O函數應該是lptOpen(…)、lptRead(…)、lptWrite(…)和lptIoctl(…)。這4個基本函數的聲明分別是:

  LOCAL int lptOpen(LPT_DEV*pDev,char*name,int mode);  LOCAL int lptRead(LPT_DEV*pDev,char*pBuf,int size);
  LOCAL int lptWrite(LPT_DEV*pDev,char*pBuf,int size);
  LOCAL STATUS lptIoctl(LPT_DEV*pDev,int function,int arg);  其中LPT_DEV結構的定義為:
  typedef struct lptDev
  {
  DEV_HDR devHdr;
  BOOL created;/*TRUE if this device has been created*/
  BOOL autofeed;/* TRUE if enable autofeed */
  BOOL inservice;/* TRUE if interrupt in service */
  USHORT data; /* data register */
  USHORT stat; /* status register */
  USHORT ctrl; /* control register */
  int intCnt;/* interrupt count */
  int retryCnt; /* retry count */
  int busyWait; /* loop count for BUSY wait */
  int strobeWait;/* loop count for STROBE wait */
  int timeout; /* timeout second for syncSem */
  int intLevel; /* interrupt level */
  SEMAPHORE muteSem;/* mutex semaphore */
  SEMAPHORE syncSem;/* sync semaphore */
} LPT_DEV

  DEV_HDR是所有設備的頭結構,是由VxWorks系統定義的,定義為:

  typedef struct/* DEV_HDR device header for all device structures*/
{
  DL_NODE node; /* device linked list node */
  short drvNum; /* driver number for this device */
  char * name; /* device name */
} DEV_HDR

  (2)設備的硬件初始化函數xxDrv(…)的實現

  該函數的聲明為:
  STATUS lptDrv(int channels, LPT_RESOURCE *pResource)

  其中,參數channels 為打印并口的通道號;參數pResource是指向結構LPT_RESOURCE的指針,結構LPT_RESOURCE的定義為:

  typedef struct lptResource /* LPT_RESOURCE */
{
  int ioBase;/* IO base address */
  int intVector;/* interrupt vector */
  int intLevel; /* interrupt level */
  BOOL autofeed;/* TRUE if enable autofeed */
  int busyWait; /* loop count for BUSY wait */
  int strobeWait;/* loop count for STROBE wait */
  int retryCnt; /* retry count */
  int timeout; /* timeout second for syncSem */
}LPT_RESOURCE;

  該函數lptDrv(int channels, LPT_RESOURCE *pResource)完成了打印機并口的初始化,其中調用函數intConnect(…)和iosDrvInstall(…)的具體形式為:

  (void)intConnect((VOIDFUNCPTR*)INUM_TO_IVEC(pResource->intVector),
  (VOIDFUNCPTR)lptIntr, (int)pDev);
  lptDrvNum = iosDrvInstall (lptOpen, (FUNCPTR) NULL, lptOpen,
  (FUNCPTR) NULL, lptRead, lptWrite, lptIoctl);

  (3)設備的創建函數xxDevCreate(…)的實現

  該函數的聲明為:
  STATUS lptDevCreate (char *name, int channel)

  該函數將設備的創建標志置為TRUE,然后調用函數iosDevAdd (&lptDev[annel],devHdr.name, lptDrvNum) 將創建的設備加入I/O系統中。

  對于打印驅動程序,重點在于函數lptWrite(…)的編寫,這個函數的實現可采用兩種方式。一種是中斷方式,即將控制寄存器中的允許中斷位置為1,這樣,打印機每打印輸出一個字符后,立即向主機發出中斷請求信號,要求發送下一個字符;主機方面只要在中斷服務程序中實現數據傳輸即可,而不必循環查詢打印機的“忙”信號。另一種是查詢方式,用這種方式時,主機不停地測試打印機的“忙”信號,當檢測到打印機不忙時,便向其發送打印數據,若打印忙,則主機必須等待,直到打印機不忙。

  根據編寫打印機驅動程序的兩種方式,選用查詢方式,其流程如圖1。

圖片點擊可在新窗口打開查看

4 PostScript文件的生成

  在VxWorks操作系統的開發環境Tornado下,軟件包ZINC中的ZafPrinter類及ZafDisplay類提供的函數可完成PostScript文件的生成。ZafPrinter類繼承ZafDisplay 類而來,因此,在ZafPrinter 中除了繼承來的圖形顯示函數之外,還定義了與打印機接口相關的函數,如BeginJob(),EndJob(),BeginPage(),EndPage()等。

  在用ZINC自帶的程序生成PostScript文件時,需注意以下幾點:

  (1)將自定義的顏色值加入顏色表中,在i_print.cpp文件(在目錄…\Tornado\target\src\zinc\generic下)中,原來的顏色表定義為:

  static unsigned long psColorTable[16]=
  {
  0x00000000L, // 0-ZAF_CLR_BLACK
  0x00000080L, // 1-ZAF_CLR_BLUE
  0x00008000L, // 2-ZAF_CLR_GREEN
  0x00008080L, // 3-ZAF_CLR_CYAN
  0x00800000L, // 4-ZAF_CLR_RED
  0x00800080L, // 5-ZAF_CLR_MAGENTA
  0x00808000L, // 6-ZAF_CLR_BROWN
  0x00C0C0C0L, // 7-ZAF_CLR_LIGHTGRAY
  0x00808080L, // 8-ZAF_CLR_DARKGRAY
  0x000000FFL, // 9-ZAF_CLR_LIGHTBLUE
  0x0000FF00L, // 10-ZAF_CLR_LIGHTGREEN
  0x0000FFFFL, // 11-ZAF_CLR_LIGHTCYAN
  0x00FF0000L, // 12-ZAF_CLR_LIGHTRED
  0x00FF00FFL, // 13-ZAF_CLR_LIGHTMAGENTA
  0x00FFFF00L, // 14-ZAF_CLR_YELLOW
  0x00FFFFFFL, // 15-ZAF_CLR_WHITE
  };

  保留原有的16種顏色,再增加48種海圖中的顏色:

  0x00000000, 0x00000080, 0x0000b400, 0x0080ffff,
  0x00d20000, 0x00ff00ff, 0x00dc8000, 0x00c0c0c0,
  0x00ffc7ab, 0x000000ff, 0x0000ff00, 0x00c8ffff,
  0x00ff0000, 0x00ff96ff, 0x00ffffc0, 0x00ffffff,
  0x00ff02fd, 0x00ff02fd, 0x00ff02fd, 0x00ff02fd,
  0x00ff02fd, 0x00ff02fd, 0x00ff02fd, 0x00ff02fd,
  0x00ff02fd, 0x00ff02fd, 0x00ff02fd, 0x00ff02fd,
  0x00ff02fd, 0x00ff02fd, 0x00ff02fd, 0x00ff02fd,
  0x00000000, 0x000000ff, 0x0033aa00, 0x0060c0c0,
  0x00b03030, 0x00c040c0, 0x00804040, 0x00a0a0a0,
  0x00404040, 0x008080ff, 0x0080ff80, 0x0016edfe,
  0x00e02020, 0x00e010e0, 0x00ffff80, 0x00ffffff,

  這樣顏色表中共有64種可用顏色。

  同時將
  for(index = 0; index < 16; index++)
    colorTable[index]= psColorTable[index];

  改為:
  for(index = 0; index < 64; index++)
  colorTable[index]= psColorTable[index];

  (2)為使生成的PostScript文件盡可能的小,對原來海圖的畫圖程序做了一點改動。在原程序中,多邊形的繪制是通過畫兩點線完成的,這樣,生成PostScript文件比較大,可將其改為直接調用畫多邊形的函數Polygon()。經過這樣的改動,生成的PostScript文件減小了很多,原來的一頁圖生成的PostScript文件為3.65M,改動后不足1M。

5 PostScript 文件在VxWorks操作系統下的打印輸出

  要使用打印驅動程序,首先要調用函數lptDevCreate(char*name,intchannel)為LPT端口創建設備,其中端口號由參數channel指定,創建的設備的名稱為name。只能為一個端口號創建一個設備。
  創建設備成功之后,主機就可以向打印機發送PostScript文件了,其程序流程如圖2。

圖片點擊可在新窗口打開查看

6 漢字打印輸出的實現

  在VxWorks操作系統下,實現電子海圖中漢字的顯示和打印輸出功能的基本思路是:利用Windows操作系統中的TrueType字庫,根據需要顯示漢字的Unicode編碼,在TrueType字庫中找到該漢字的相應信息,按照TrueType字庫中存儲的信息,將漢字顯示或打印輸出。

  TrueType字庫由很多表組成,它是用一些閉合的輪廓線來描述每個字符的。若能夠訪問TrueType字庫獲得相應漢字的描述信息,就能將漢字畫出來。對于TrueType字庫的訪問,網上有開放的資源可以實現,這就是FreeType2,它為應用程序訪問字庫文件提供了統一的接口,支持的格式包括TrueType, OpenType, Type1, CID, CFF, Windows FON/FNT, X11 PCF等。要使用FreeType, 就要在相應的操作系統下對源代碼進行編譯,生成一個庫文件,然后在應用程序中調用相應的API庫函數。

  通過FreeType提供的庫函數,應用程序可以訪問TrueType字庫,根據所得到的TrueType漢字信息,就能實現TrueType字體的顯示或打印輸出。但是TrueType字庫的訪問是通過Unicode編碼進行的,也就是說,只有獲得了字符的Unicode編碼,才能在TrueType字庫中得到該字符的描述信息。在電子海圖程序中,字符的Unicode編碼的獲得是通過查表實現的。所謂的查表,是指將國際漢字字符集中所有字符的Unicode編碼,存在一個數組unsigned long gb2312_uni_data[87][94],根據字符的區位碼就可以得到相應的Unicode編碼。例如區號為qh,位號為wh的字符的Unicode編碼就是數組元素gb2312_uni_data[qh-1][wh-1]的值。

  保存所有字符的Unicode編碼的數組gb2312_uni_data[87][94]是在Windows操作系統下轉換得到的。具體的做法是將國際漢字字符集中的所有字符按照一定的格式保存成文本文件,然后從文件中讀出每個字符,調用函數MultiByteToWideChar(…)將其轉換成Unicode編碼,并將其保存。

  根據TrueType字庫中字符的信息,顯示或打印輸出字符有兩種途徑:一種是調用FreeType的API函數得到相應字符的輪廓線,然后將其填充;另一種是調用FreeType的API函數直接得到字符的位圖,再調用相應操作系統中的打點函數實現位圖的顯示。由于第二種方法實現起來比較簡單,并且海圖系統中的漢字不是很多,所以在海圖程序中使用的是第二種方法。

  在獲得相應漢字的字形位圖信息的基礎上,實現漢字打印輸出功能的關鍵是如何使用PostScript語言描述相應漢字字形的位圖信息。在程序的設計中,通過畫1個像素長度的直線來實現點的輸出,然后用一系列的點輸出位圖信息。其中,點的輸出用PostScript語言表示為:

  x y moveto
  x+1 y lineto

  根據漢字橫多豎少的特點,可以對以上產生的PostScript文件進行優化,如果N點在一條橫線上,就直接畫N長度的直線,用PostScript語言表示為:

  x y moveto
  x+N y line to

  這樣,就將原來的N條PostScript語句轉化為1條語句,從而減少了PostScript文件的長度。

7 結束語

  VxWorks實時操作系統的特點決定了在此操作系統中開發驅動程序的重要性。根據需要配置相應的設備,并實現硬件的驅動,是VxWorks系統中進行軟件設計與開發的前提。本文介紹的電子海圖系統打印功能的總體設計思想及實現方法,已在哈爾濱工程大學研制的某型電子海圖系統的二次開發中得到應用。


支持(0中立(0反對(0單帖管理 | 引用 | 回復 回到頂部

返回版面帖子列表

實時操作系統VxWorks下電子海圖系統打印功能的實現








簽名
久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区
亚洲一区二区三区免费观看| 久久精品一二三区| 国产精品网曝门| 日韩午夜av电影| 制服丝袜成人动漫| 欧美成人乱码一区二区三区| 视频一区三区| 在线观看欧美一区| 色狠狠桃花综合| 欧美日韩国产美| 精品少妇一区二区三区日产乱码| 欧美福利一区二区三区| 国产福利一区二区三区视频在线| 最新国产の精品合集bt伙计| 琪琪久久久久日韩精品| 欧美成人a∨高清免费观看| 日本中文不卡| 一本大道久久a久久精二百| 91小视频在线免费看| 国产午夜精品一区二区| 欧美性videosxxxxx| 免费日韩av电影| 致1999电视剧免费观看策驰影院| 国产精品传媒毛片三区| 国产高清无密码一区二区三区| 一区二区三区四区不卡在线| 久久九九久久九九| 1000部国产精品成人观看| 欧美精品一区二区三| 欧美色图在线观看| 日韩美女一区二区三区四区| 91黄色激情网站| 日韩欧美在线观看一区二区三区| 91久久香蕉国产日韩欧美9色| 精品欧美日韩| 免费观看成人鲁鲁鲁鲁鲁视频| 国产精品不卡在线观看| 久久综合色之久久综合| 欧美日本在线观看| 日本一区二区在线不卡| 337p日本欧洲亚洲大胆精品| 欧美日韩国产综合一区二区三区| 日产国产精品精品a∨| 国产日韩欧美综合精品| 91在线免费看| 一区二区三区四区国产| 色视频一区二区三区| 久久久久久久久一区二区| 国产精品一区而去| 欧洲国内综合视频| 国产精品国产三级国产有无不卡| 国产欧美精品在线观看| 久久人人爽爽爽人久久久| 日韩精品一区二| 一区二区三区国产| zzijzzij亚洲日本少妇熟睡| 成人一区二区三区| 亚洲欧美在线网| 国产欧美综合在线| 久久99久国产精品黄毛片色诱| 日韩av电影免费观看高清完整版 | 国产欧美日韩视频一区二区三区| 国产美女在线精品| 日本不卡高清视频一区| 午夜精品区一区二区三| 亚欧精品在线| 久久久亚洲高清| 免费成人av在线播放| 久久国内精品视频| 日本视频一区二区不卡| 中文字幕一区二区三区在线乱码| 在线免费观看一区二区三区| 欧美亚洲日本国产| 亚洲欧洲一区二区在线播放| 日韩理论在线观看| 成人精品鲁一区一区二区| 91久久精品一区二区别| 国产一区二区中文字幕免费看| 精品蜜桃传媒| www久久精品| 国产91精品一区二区| 国产成人女人毛片视频在线| 精品无人区一区二区三区| 日韩精彩视频| 国产精品伦一区二区三级视频| 亚洲老司机在线| 99国产高清| 欧美精品一区二区三区一线天视频| 久久久精品综合| 国产黄色精品网站| 欧美日韩成人综合天天影院| 中文字幕乱码日本亚洲一区二区| 亚洲视频 欧洲视频| 五月激情六月综合| 日韩av在线电影观看| 8v天堂国产在线一区二区| 国产日韩精品久久久| 一级精品视频在线观看宜春院| 奇米四色…亚洲| 色婷婷国产精品综合在线观看| 日韩欧美国产高清| 国产精品99久久久久久有的能看| 成人动漫在线观看视频| 亚洲高清在线观看一区| 欧美日本高清视频在线观看| 欧美猛男男办公室激情| 国产欧美日韩在线| 成人爽a毛片一区二区免费| 色一情一乱一伦一区二区三区丨 | 久久久精品中文字幕麻豆发布| 国产精品美女久久久久久| 香蕉成人伊视频在线观看| 国产成人精品免费在线| 久久大香伊蕉在人线观看热2| 国产一区二区三区四区五区入口| 91亚洲精品久久久蜜桃| 伊人久久大香线蕉成人综合网| 日韩欧美一二三四区| 夜夜夜精品看看| 日本精品一区| 日日噜噜夜夜狠狠视频欧美人 | 国产乱国产乱300精品| 国产一级二级三级精品| 欧美日韩高清一区二区三区| 国产精品久久久久7777按摩| 乱一区二区av| 欧美一级搡bbbb搡bbbb| 日日夜夜免费精品视频| 国产美女99p| 亚洲成人激情av| 欧美日韩亚洲综合在线| 亚洲国产精品久久久男人的天堂| www.日韩大片| 中文字幕中文字幕一区二区| 成人自拍视频在线观看| 一本色道久久综合狠狠躁的推荐| 欧美激情综合网| 日本成人三级电影网站| 国产欧美日韩三级| 日韩免费av一区二区三区| 欧美国产激情二区三区| 国产盗摄精品一区二区三区在线| 欧美一区二区在线视频观看| 欧美日韩一区中文字幕| 一区二区在线观看免费视频播放| 不卡的电影网站| 亚洲欧美日韩精品久久久久| 成人18视频| 性久久久久久久| 欧美成人高清电影在线| 国内精品久久久久影院色| 中文字幕av日韩精品| 亚洲裸体在线观看| 欧洲在线/亚洲| 99在线观看视频| 青青草国产成人99久久| 伊人狠狠色丁香综合尤物| 一区二区三区高清| 9191国产精品| 欧美xxxx黑人又粗又长密月| 亚洲欧洲另类国产综合| 国产伦精品一区二区| 国产拍揄自揄精品视频麻豆| 北条麻妃国产九九精品视频| 欧美一级精品大片| 日本一区二区在线| 成人免费看片app下载| 亚洲精品在线观| 亚洲欧美日韩国产yyy| 午夜伊人狠狠久久| 精品国产乱码久久久久久蜜臀 | 日韩三级视频在线看| 国产麻豆精品视频| 日韩毛片视频在线看| 欧美日韩一区在线播放 | 精品国产乱码久久久久久蜜臀| 高清av一区二区| 亚洲国产另类av| 国产欧美日韩综合| 制服丝袜亚洲色图| 一本一道久久a久久精品 | 欧美亚洲免费高清在线观看| 亚洲一区二区三区美女| 日韩一区二区三区资源| 日韩精品免费专区| 国产精品拍天天在线| 欧美国产二区| 91视频你懂的| 国产精品一品视频| 日韩电影免费在线看| 欧美精品v日韩精品v韩国精品v| 韩国v欧美v亚洲v日本v| 欧美一级高清片在线观看| 91在线精品一区二区三区| 久久综合五月天婷婷伊人| 国产91在线看| 日本午夜一本久久久综合| 欧美一区二区三区视频| 91麻豆免费在线观看| 亚洲欧美一区二区久久 |