Rev 1020 | Rev 1028 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed
| Rev 1020 | Rev 1022 | ||
|---|---|---|---|
| Line 90... | Line 90... | ||
| 90 | { |
90 | { |
| 91 | //print("node was reset and bios just started, ver:" + biosVersion); |
91 | //print("node was reset and bios just started, ver:" + biosVersion); |
| 92 | if (this.myProgramming) |
92 | if (this.myProgramming) |
| 93 | { |
93 | { |
| 94 | this.myProgrammingHexAddress = this.myProgrammingHex.getAddrLower(); |
94 | this.myProgrammingHexAddress = this.myProgrammingHex.getAddrLower(); |
| 95 | this.myProgrammingWantAck = this |
95 | this.myProgrammingWantAck = ((this.myProgrammingHexAddress<<8)|(this.myProgrammingHexAddress>>8))&0xffff; |
| 96 | 96 | ||
| 97 | var canMessage = new CanNMTMessage("nmt", "Pgm_Start"); |
97 | var canMessage = new CanNMTMessage("nmt", "Pgm_Start"); |
| 98 | canMessage.setData("HardwareId", this.myHardwareId); |
98 | canMessage.setData("HardwareId", this.myHardwareId); |
| 99 | canMessage.setData(" |
99 | canMessage.setData("Address0", this.myProgrammingHexAddress&0xff); |
| - | 100 | canMessage.setData("Address1", (this.myProgrammingHexAddress>>8)&0xff); |
|
| 100 | canMessage.setData(" |
101 | canMessage.setData("Address3", (this.myProgrammingHexAddress>>16)&0xff); |
| - | 102 | canMessage.setData("Address4", (this.myProgrammingHexAddress>>24)&0xff); |
|
| 101 | canMessage.send(); |
103 | canMessage.send(); |
| 102 | this.myProgrammingState = "DATA"; |
104 | this.myProgrammingState = "DATA"; |
| 103 | 105 | ||
| 104 | this.myProgrammingCallback(true, "START", "Started programming of node"); |
106 | this.myProgrammingCallback(true, "START", "Started programming of node"); |
| 105 | } |
107 | } |
| Line 124... | Line 126... | ||
| 124 | switch (this.myProgrammingState) |
126 | switch (this.myProgrammingState) |
| 125 | { |
127 | { |
| 126 | case "DATA": |
128 | case "DATA": |
| 127 | var offset = this.myProgrammingHexOffset; |
129 | var offset = this.myProgrammingHexOffset; |
| 128 | 130 | ||
| 129 | this.myProgrammingWantAck = offset; |
131 | this.myProgrammingWantAck = ((offset<<8)|(offset>>8))&0xffff; |
| 130 | //var bytesLeft = this.myProgrammingHex.getAddrUpper() - (this.myProgrammingHexAddress+this.myProgrammingHexOffset); |
132 | //var bytesLeft = this.myProgrammingHex.getAddrUpper() - (this.myProgrammingHexAddress+this.myProgrammingHexOffset); |
| 131 | var bytesLeft = this.myProgrammingHex.getLength() - this.myProgrammingHexOffset; |
133 | var bytesLeft = this.myProgrammingHex.getLength() - this.myProgrammingHexOffset; |
| 132 | 134 | ||
| 133 | this.myProgrammingCallback(true, "DBG", "bytesLeft: "+bytesLeft+", this.myProgrammingHex.getLength(): "+this.myProgrammingHex.getLength()+""); |
- | |
| 134 | //here we must handle the possibility that data is less then 48 bits |
135 | //here we must handle the possibility that data is less then 48 bits |
| 135 | var canMessage = new CanNMTMessage("nmt", "Pgm_Data_48"); |
136 | var canMessage = new CanNMTMessage("nmt", "Pgm_Data_48"); |
| 136 | switch (bytesLeft) |
137 | switch (bytesLeft) |
| 137 | { |
138 | { |
| 138 | case 1: |
139 | case 1: |
| 139 | canMessage = new CanNMTMessage("nmt", "Pgm_Data_8"); |
140 | canMessage = new CanNMTMessage("nmt", "Pgm_Data_8"); |
| 140 | this.myProgrammingCallback(true, "DBG", "Pgm_Data_8"); |
- | |
| 141 | break; |
141 | break; |
| 142 | case 2: |
142 | case 2: |
| 143 | canMessage = new CanNMTMessage("nmt", "Pgm_Data_16"); |
143 | canMessage = new CanNMTMessage("nmt", "Pgm_Data_16"); |
| 144 | this.myProgrammingCallback(true, "DBG", "Pgm_Data_16"); |
- | |
| 145 | break; |
144 | break; |
| 146 | case 3: |
145 | case 3: |
| 147 | canMessage = new CanNMTMessage("nmt", "Pgm_Data_24"); |
146 | canMessage = new CanNMTMessage("nmt", "Pgm_Data_24"); |
| 148 | this.myProgrammingCallback(true, "DBG", "Pgm_Data_24"); |
- | |
| 149 | break; |
147 | break; |
| 150 | case 4: |
148 | case 4: |
| 151 | canMessage = new CanNMTMessage("nmt", "Pgm_Data_32"); |
149 | canMessage = new CanNMTMessage("nmt", "Pgm_Data_32"); |
| 152 | this.myProgrammingCallback(true, "DBG", "Pgm_Data_32"); |
- | |
| 153 | break; |
150 | break; |
| 154 | case 5: |
151 | case 5: |
| 155 | canMessage = new CanNMTMessage("nmt", "Pgm_Data_40"); |
152 | canMessage = new CanNMTMessage("nmt", "Pgm_Data_40"); |
| 156 | this.myProgrammingCallback(true, "DBG", "Pgm_Data_40"); |
- | |
| 157 | break; |
153 | break; |
| 158 | } |
154 | } |
| 159 | 155 | ||
| 160 | canMessage.setData(" |
156 | canMessage.setData("Offset0", offset&0xff); |
| - | 157 | canMessage.setData("Offset1", (offset>>8)&0xff); |
|
| 161 | for (var i=0; i<bytesLeft && i<6; i++) |
158 | for (var i=0; i<bytesLeft && i<6; i++) |
| 162 | { |
159 | { |
| 163 | switch (i) |
160 | switch (i) |
| 164 | { |
161 | { |
| 165 | case 0: |
162 | case 0: |
| 166 | canMessage.setData("Data0", this.myProgrammingHex.getByte(offset)); |
163 | canMessage.setData("Data0", this.myProgrammingHex.getByte(offset)); |
| 167 | this.myProgrammingCallback(true, "DBG", "Data0"); |
- | |
| 168 | break; |
164 | break; |
| 169 | case 1: |
165 | case 1: |
| 170 | canMessage.setData("Data1", this.myProgrammingHex.getByte(offset)); |
166 | canMessage.setData("Data1", this.myProgrammingHex.getByte(offset)); |
| 171 | this.myProgrammingCallback(true, "DBG", "Data1"); |
- | |
| 172 | break; |
167 | break; |
| 173 | case 2: |
168 | case 2: |
| 174 | canMessage.setData("Data2", this.myProgrammingHex.getByte(offset)); |
169 | canMessage.setData("Data2", this.myProgrammingHex.getByte(offset)); |
| 175 | this.myProgrammingCallback(true, "DBG", "Data2"); |
- | |
| 176 | break; |
170 | break; |
| 177 | case 3: |
171 | case 3: |
| 178 | canMessage.setData("Data3", this.myProgrammingHex.getByte(offset)); |
172 | canMessage.setData("Data3", this.myProgrammingHex.getByte(offset)); |
| 179 | this.myProgrammingCallback(true, "DBG", "Data3"); |
- | |
| 180 | break; |
173 | break; |
| 181 | case 4: |
174 | case 4: |
| 182 | canMessage.setData("Data4", this.myProgrammingHex.getByte(offset)); |
175 | canMessage.setData("Data4", this.myProgrammingHex.getByte(offset)); |
| 183 | this.myProgrammingCallback(true, "DBG", "Data4"); |
- | |
| 184 | break; |
176 | break; |
| 185 | case 5: |
177 | case 5: |
| 186 | canMessage.setData("Data5", this.myProgrammingHex.getByte(offset)); |
178 | canMessage.setData("Data5", this.myProgrammingHex.getByte(offset)); |
| 187 | this.myProgrammingCallback(true, "DBG", "Data5"); |
- | |
| 188 | break; |
179 | break; |
| 189 | } |
180 | } |
| 190 | offset++; |
181 | offset++; |
| 191 | } |
182 | } |
| 192 | canMessage.send(); |
183 | canMessage.send(); |
| Line 198... | Line 189... | ||
| 198 | 189 | ||
| 199 | this.myProgrammingCallback(true, "PROGRESS", this.myProgrammingHexOffset + ":" + this.myProgrammingHex.getLength()); |
190 | this.myProgrammingCallback(true, "PROGRESS", this.myProgrammingHexOffset + ":" + this.myProgrammingHex.getLength()); |
| 200 | break; |
191 | break; |
| 201 | 192 | ||
| 202 | case "END": |
193 | case "END": |
| 203 | this.myProgrammingWantAck = this |
194 | this.myProgrammingWantAck = ((this.myProgrammingHex.getCRC16()<<8)|(this.myProgrammingHex.getCRC16()>>8))&0xffff; |
| 204 | 195 | ||
| 205 | var canMessage = new CanNMTMessage("nmt", "Pgm_End"); |
196 | var canMessage = new CanNMTMessage("nmt", "Pgm_End"); |
| 206 | canMessage.send(); |
197 | canMessage.send(); |
| 207 | 198 | ||
| 208 | this.myProgrammingState = "CRC"; |
199 | this.myProgrammingState = "CRC"; |