- added patch by Øyvind Harboe to Intel Hex Start Segment Address Record (Type 3)
authorntfreak <ntfreak@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Tue, 18 Dec 2007 21:29:44 +0000 (21:29 +0000)
committerntfreak <ntfreak@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Tue, 18 Dec 2007 21:29:44 +0000 (21:29 +0000)
- added support to parse Motorola Record Count (S5)

git-svn-id: svn://svn.berlios.de/openocd/trunk@241 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/target/image.c

index a0962b1f4d71cbf3a984efc4a912199d86a9ede2..a1a2a441eda92b6bc83da619950a3ae3bf1b427e 100644 (file)
@@ -265,6 +265,19 @@ int image_ihex_buffer_complete(image_t *image)
                                full_address = (full_address & 0xffff) | (upper_address << 4);
                        }
                }
+               else if (record_type == 3) /* Start Segment Address Record */
+               {
+                       u32 dummy;
+                       
+                       /* "Start Segment Address Record" will not be supported */
+                       /* but we must consume it, and do not create an error.  */
+                       while (count-- > 0)
+                       {
+                               sscanf(&lpszLine[bytes_read], "%2x", &dummy);
+                               cal_checksum += (u8)dummy;
+                               bytes_read += 2;
+                       }
+               }
                else if (record_type == 4) /* Extended Linear Address Record */
                {
                        u16 upper_address;
@@ -578,6 +591,18 @@ int image_mot_buffer_complete(image_t *image)
                                full_address++;
                        }
                }
+               else if (record_type == 5)
+               {
+                       /* S5 is the data count record, we ignore it */
+                       u32 dummy;
+                       
+                       while (count-- > 0)
+                       {
+                               sscanf(&lpszLine[bytes_read], "%2x", &dummy);
+                               cal_checksum += (u8)dummy;
+                               bytes_read += 2;
+                       }
+               }
                else if (record_type >= 7 && record_type <= 9)
                {
                        /* S7, S8, S9 - ending records for 32, 24 and 16bit */