Changeset 389 for azure_iot_hub/trunk/asp3_dcre/cfg/SRecord.rb
- Timestamp:
- May 22, 2019, 10:03:37 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
azure_iot_hub/trunk/asp3_dcre/cfg/SRecord.rb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby;charset=UTF-8
r388 r389 7 7 # Copyright (C) 2015 by FUJI SOFT INCORPORATED, JAPAN 8 8 # 9 # ä¸è¨èä½æ¨©è 10 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 11 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 12 # å¤ã»åé 13 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 14 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 15 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 16 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 17 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 18 # ç¨ã§ããå½¢ã§åé 19 å¸ããå ´åã«ã¯ï¼åé 20 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 21 # è 22 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 23 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 24 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 25 # ç¨ã§ããªãå½¢ã§åé 26 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 27 # ã¨ï¼ 28 # (a) åé 29 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 30 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 31 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 32 # (b) åé 33 å¸ã®å½¢æ 34 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 35 # å ±åãããã¨ï¼ 36 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 37 # 害ãããï¼ä¸è¨èä½æ¨©è 38 ããã³TOPPERSããã¸ã§ã¯ããå 39 責ãããã¨ï¼ 40 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 41 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 42 ããã³TOPPERSããã¸ã§ã¯ãã 43 # å 44 責ãããã¨ï¼ 9 # 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 10 # ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 11 # 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 12 # (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 13 # 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 14 # スコード中に含まれていること. 15 # (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 16 # 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 17 # 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 18 # の無保証規定を掲載すること. 19 # (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 20 # 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 21 # と. 22 # (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 23 # 作権表示,この利用条件および下記の無保証規定を掲載すること. 24 # (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 25 # 報告すること. 26 # (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 27 # 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 28 # また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 29 # 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 30 # 免責すること. 45 31 # 46 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 47 ã 48 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 49 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 50 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 51 # ã®è²¬ä»»ãè² ããªãï¼ 32 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 33 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 34 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 35 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 36 # の責任を負わない. 52 37 # 53 38 # $Id$ … … 55 40 56 41 # 57 # S ã¬ã³ã¼ããã¡ã¤ã«å¦çã¯ã©ã¹42 # Sレコードファイル処理クラス 58 43 # 59 44 60 45 # 61 # S ã¬ã³ã¼ããã¡ã¤ã«ãå¤æ°ã«èªã¿è¾¼ã¿ï¼è¦æ±ãããçªå°ã®ãã¼ã¿ãè¿ãï¼46 # Sレコードファイルを変数に読み込み,要求された番地のデータを返す. 62 47 # 63 # @sRecDataã¯ï¼å 64 é çªå°ããã¼ã¨ãï¼ããããã®ãã¼ã¿ï¼ãããµãã³ãå½¢å¼ï¼ 65 # ãå¤ã¨ãããã¯ãæ ¼ç´ãããããã·ã¥ã§ããï¼é£ç¶ãããããã¯ã¯ï¼1ã¤ã®ã 66 # ããã¯ã«ã¾ã¨ãã¦æ ¼ç´ãããã®ã¨ããï¼ããããªãã¨ï¼ãã¼ã¿ã®ååºãããµã¼ 67 # ããé¢åã«ãªãï¼ï¼ 48 # @sRecDataは,先頭番地をキーとし,そこからのデータ(ヘキサダンプ形式) 49 # を値とブロックが格納されたハッシュである.連続するブロックは,1つのブ 50 # ロックにまとめて格納するものとする(そうしないと,データの取出しやサー 51 # チが面倒になる). 68 52 # 69 53 class SRecord … … 74 58 prevData = "" 75 59 file.each do |line| 76 # ãã¼ã¿ã¬ã³ã¼ãã«ããåå²60 # データレコードにより分岐 77 61 case line.slice(0, 2) 78 62 when "S1" 79 # ãã¼ã¿é·ï¼ã¢ãã¬ã¹å[2byte]+ãã§ãã¯ãµã å1byteãæ¸ç®ï¼63 # データ長(アドレス分[2byte]+チェックサム分1byteを減算) 80 64 length = line.slice(2, 2).hex - 2 - 1 81 65 82 # ã¢ãã¬ã¹ï¼4æå=2byteï¼66 # アドレス(4文字=2byte) 83 67 address = line.slice(4, 4).hex 84 68 85 # ãã¼ã¿ï¼ãã®æç¹ã§ã¯æååã§åã£ã¦ããï¼69 # データ(この時点では文字列で取っておく) 86 70 data = line.slice(8, length * 2) 87 71 when "S2" 88 # ãã¼ã¿é·ï¼ã¢ãã¬ã¹å[3byte]+ãã§ãã¯ãµã å1byteãæ¸ç®ï¼72 # データ長(アドレス分[3byte]+チェックサム分1byteを減算) 89 73 length = line.slice(2, 2).hex - 3 - 1 90 74 91 # ã¢ãã¬ã¹ï¼6æå=3byteï¼75 # アドレス(6文字=3byte) 92 76 address = line.slice(4, 6).hex 93 77 94 # ãã¼ã¿ï¼ãã®æç¹ã§ã¯æååã§åã£ã¦ããï¼78 # データ(この時点では文字列で取っておく) 95 79 data = line.slice(10, length * 2) 96 80 when "S3" 97 # ãã¼ã¿é·ï¼ã¢ãã¬ã¹å[4byte]+ãã§ãã¯ãµã å1byteãæ¸ç®ï¼81 # データ長(アドレス分[4byte]+チェックサム分1byteを減算) 98 82 length = line.slice(2, 2).hex - 4 - 1 99 83 100 # ã¢ãã¬ã¹ï¼8æå=4byteï¼84 # アドレス(8文字=4byte) 101 85 address = line.slice(4, 8).hex 102 86 103 # ãã¼ã¿ï¼ãã®æç¹ã§ã¯æååã§åã£ã¦ããï¼87 # データ(この時点では文字列で取っておく) 104 88 data = line.slice(12, length * 2) 105 89 else … … 108 92 109 93 if !address.nil? 110 # ãã¼ã¿ãæ ¼ç´ãã94 # データを格納する 111 95 if address == prevAddress + prevData.size / 2 112 96 prevData << data … … 122 106 end 123 107 124 # ãã¼ã¿åå¾108 # データ取得 125 109 def get_data(address, size) 126 110 endAddress = address + size … … 134 118 end 135 119 136 # ãã¼ã¿æ¸è¾¼ã¿120 # データ書込み 137 121 def set_data(address, data) 138 122 endAddress = address + data.size / 2 … … 141 125 142 126 if nEndBlock < address || endAddress < block 143 # éãªãããªã127 # 重なりがない 144 128 elsif address < block 145 # æ°è¦ãã¼ã¿ã®æ¹ãå 146 é çªå°ãå°ãã 147 # ããã§ã¯ endAddress >= block ãæç«ãã¦ãã 129 # 新規データの方が先頭番地が小さい 130 # ここでは endAddress >= block が成立している 148 131 offset = (endAddress - block) * 2 149 132 data << blockData[offset..-1] 150 133 @sRecData.delete(block) 151 134 else 152 # ç»é²æ¸ã¿ãã¼ã¿ã®æ¹ãå 153 é çªå°ãå°ãããåã 135 # 登録済みデータの方が先頭番地が小さいか同じ 154 136 offset = (address - block) * 2 155 137 address = block … … 162 144 end 163 145 164 # å¤ã¨ãã¦ã®ãã¼ã¿åå¾146 # 値としてのデータ取得 165 147 def get_value(address, size, signed) 166 148 targetData = get_data(address, size) … … 169 151 else 170 152 if $endianLittle 171 # ãªãã«ã¨ã³ãã£ã¢ã³ã®å ´åï¼ãã¤ããªã¼ãã¼ãéã«ãã153 # リトルエンディアンの場合,バイトオーダーを逆にする 172 154 reverseData = "" 173 # å¾ããã2æåãã¤æãåºãï¼ä¸¦ã³æ¿ãã155 # 後ろから2文字ずつ抜き出し,並び替える 174 156 while targetData.size > 0 175 157 reverseData << targetData[-2, 2] … … 181 163 end 182 164 183 # è² ã®æ°ã®å¦ç165 # 負の数の処理 184 166 if signed && (returnData & (1 << (size * 8 - 1))) != 0 185 167 returnData -= (1 << (size * 8)) -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.