Skip to content

Commit

Permalink
Tools: complete tool for ihex to cyacd file
Browse files Browse the repository at this point in the history
  • Loading branch information
Clement Leger committed Nov 9, 2015
1 parent fad8539 commit 57c286a
Show file tree
Hide file tree
Showing 6 changed files with 665 additions and 10 deletions.
12 changes: 12 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@

all:
$(MAKE) -C cyhostboot all
$(MAKE) -C ihex2cyacd all

install: all
$(MAKE) -C cyhostboot install
$(MAKE) -C ihex2cyacd install

clean:
$(MAKE) -C cyhostboot clean
$(MAKE) -C ihex2cyacd clean
4 changes: 4 additions & 0 deletions cyhostboot/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,7 @@ cyhostboot: $(OBJ_FILES) $(SRC_DIR)/cyhostboot.c $(BUILD_DIR)/cyhostboot_cmdline

clean:
rm -rf cyhostboot $(BUILD_DIR)

install:
cp cyhostboot /bin/

10 changes: 9 additions & 1 deletion ihex2cyacd/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ HDR_FILES := $(wildcard $(SRC_DIR)/*.h)
CFLAGS := -g -Wall -I$(BUILD_DIR)
LFLAGS :=

all: ihex2cyacd
all: check

$(BUILD_DIR)/ihex2cyacd_cmdline.c: $(SRC_DIR)/ihex2cyacd.ggo
@mkdir -p $(dir $@)
Expand All @@ -30,3 +30,11 @@ ihex2cyacd: $(OBJ_FILES) $(BUILD_DIR)/ihex2cyacd_cmdline.o

clean:
rm -rf ihex2cyacd $(BUILD_DIR)

check: ihex2cyacd
./ihex2cyacd -i test/Striplight_bootloadable.hex -o out.cyacd -b 4352
diff out.cyacd test/Striplight_bootloadable.cyacd

install:
cp ihex2cyacd /bin/

79 changes: 70 additions & 9 deletions ihex2cyacd/src/ihex2cyacd.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@

#include <ihex2cyacd_cmdline.h>

#define MAX_IHEX_FILE_LENGTH 512
#define MAX_IHEX_FILE_LENGTH 1024
#define MAX_IHEX_BIN_SIZE (1 << 16)

#ifdef DEBUG
#define dbg_printf(fmt, args...) printf(fmt, ## args)
Expand Down Expand Up @@ -46,7 +47,7 @@ static int parse_ihex_line(const char *line, uint8_t *length, uint16_t *addr, ui
return 1;
}
line++;

get_line_chars(line, tmp_buf, 2);
*length = strtol(tmp_buf, NULL, 16);
sum += *length;
Expand Down Expand Up @@ -82,12 +83,16 @@ int main(int argc, char **argv)
{
uint32_t bootloader_text_rows;
char *line_ptr;
uint8_t data[MAX_IHEX_FILE_LENGTH],length, type;
uint8_t data[MAX_IHEX_FILE_LENGTH], length, type;
uint16_t addr;
FILE *input_hex, *output_cyacd;
struct cyacd_header_info *infos;
size_t line_length = MAX_IHEX_FILE_LENGTH;
int ret;
int ret, i, line_empty;
uint32_t cur_row_num;
uint8_t crc;
uint8_t *all_data;
uint32_t last_addr = 0;

if (ihex2cyacd_cmdline_parser(argc, argv, &args_info) != 0) {
return EXIT_FAILURE;
Expand All @@ -105,24 +110,80 @@ int main(int argc, char **argv)
}
line_ptr = malloc(MAX_IHEX_FILE_LENGTH);
if(!line_ptr) {
printf("Failed to allocate data\n");
printf("Failed to allocate data to read file\n");
return 1;
}

all_data = calloc(1, MAX_IHEX_BIN_SIZE);
if(!all_data) {
printf("Failed to allocate all data\n");
return 1;
}

infos = &header_infos[args_info.cpu_arg];

bootloader_text_rows = args_info.bootloader_size_arg / infos->flash_row_size;

fprintf(output_cyacd, "%08x%02x00\r\n", infos->silicon_id, infos->silicon_rev);

while( getline(&line_ptr, &line_length, input_hex) > 0) {
while (getline(&line_ptr, &line_length, input_hex) > 0) {
ret = parse_ihex_line(line_ptr, &length, &addr, &type, data);
if (ret) {
printf("Failed to parse ihex file\n");
return 1;
}
line_length = MAX_IHEX_FILE_LENGTH;
/* TODO: concat data */

/* Skip non relevant line and bootloader reserved space one */
if (type != 00 || addr < args_info.bootloader_size_arg)
continue;

for (i = 0; i < length; i++)
all_data[addr + i] = data[i];

if (addr > last_addr)
last_addr = addr + length;
}
/* Write the output file */

/* Add cyacd header */
fprintf(output_cyacd, "%08X%02X00\r\n", infos->silicon_id, infos->silicon_rev);

cur_row_num = bootloader_text_rows;

for (addr = args_info.bootloader_size_arg; addr < last_addr; addr += infos->flash_row_size) {

line_empty = 1;
/* Is the line empty ? */
for (i = 0; i < infos->flash_row_size; i++) {
if (all_data[addr + i] != 0) {
line_empty = 0;
break;
}
}

/* If so, skip it */
if (line_empty) {
cur_row_num++;
continue;
}

fprintf(output_cyacd, ":00%04X%04X", cur_row_num, infos->flash_row_size);
crc = cur_row_num & 0xFF;
crc += (cur_row_num >> 8) & 0xFF;
crc += infos->flash_row_size & 0xFF;
crc += (infos->flash_row_size >> 8) & 0xFF;

for (i = 0; i < infos->flash_row_size; i++) {
crc += all_data[addr + i];
fprintf(output_cyacd, "%02X", all_data[addr + i]);
}

crc = ~crc + 1;
fprintf(output_cyacd, "%02X\r\n", crc);
cur_row_num++;
}

fclose(input_hex);
fclose(output_cyacd);


return 0;
Expand Down
49 changes: 49 additions & 0 deletions ihex2cyacd/test/Striplight_bootloadable.cyacd
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
04C811931100
:000022008000100020111100002D1400002D14000080B500AF024B83F3088800F08BF9C0460010002080B500AF104B104A12688021C9020A431A60182000F056FA0B4B0B4A12680B490A401A600A4B0B4A1A600B4B10221A600A4B802212061A60094B0A4A1A600A4B00221A60BD4680BD00010B40FFFFFBFF04010B40060000800C02024042
:000023008008010B4000000240100000800C020B4080B582B000AF72B64B4B01221A70FB1D00221A7023E0FB1D1A78131C5B009B185B00464A9B183B603B681A78597809020A43997809040A43DB781B061343191C3B681A795B791B0213439BB2081C191C00F0AEF9FB1D1A78FB1D01321A70FB1D1B78012BD7D9364A364B101C191C00F09C
:0000240080AFF9354B354A1A60354B364A1A60364B364A1A60364B00221A60364B00221A60354B992212041A60344B802212061A60334B992212041A60324B334A1A60334B992212041A60324B8C22D2041A60314B05221A60304B06221A60304A2F4B1B78DBB202210B43DBB213702D4A2C4B1B78DBB23C218B43DBB214210B43DBB21370E5
:0000250080264A264B1B78DBB216210B43DBB21370244BA0221A60244B244A1A60244B20221A60244B7F221A60234B244A1A60244B3C221A60234B244A1A60FFF733FF00F08FF9BD4602B080BD1C700F402C21000038210000602100000000014000009930040001403333330308000140003333000C0001400803044000500F4008500F400B
:000026008010500F4018500F4000001E1320500F4028500F402000004000800F4000700F4001700F4000000440080004400010C300180004400001044008010440B66D1B000002044008020440806D030010B5064C2378002B07D1054B002B02D0044800E000BF0123237010BDE8000020000000002821000008B5084B002B03D0074808490C
:000027008000E000BF07480368002B00D108BD064B002BFBD09847F9E70000000028210000EC000020D00000200000000080B582B000AF00F0EDFA00F0D3FD002000F094FC194B1B6E181C00F03BFC62B600233B6026E000237B601DE0C04600F06DFB031EFBD0114B1B6E181C00F02AFC0E4AAE235B00D35879683A68081C111C1A1C00F066
:000028008051FC012000F008FB322000F089FA7B6801337B607B680B2BDEDD3B6801333B603B680B2BD5DDD1E70C24000080B500AFFEE7C04680B586B000AF224B7B61224B3B61204B7B6135E03B691B68FB603B695B68BB603B699B683B6000237B600CE0FB681A68BB681A60BB680433BB60FB680433FB607B6804337B607A683B689A427E
:0000290080EED13B69DB683B6000237B6008E0BB6800221A60BB680433BB607B6804337B607A683B689A42F2D13B6910333B617B69013B7B617B69002BC6D100F007FEFFF775FFFEE701000000F027000080B582B000AF00237B600FE07B68032B04D8134B7A689200D35800E0114B124A796889008B507B6801337B607B682F2BECD9FFF7AE
:00002A008047FE0D4B00221A600C4B1B68002B02D10A4B00221A608023DB058022D205126801210A431A60BD4602B080BD001100002D14000000000020C8000020C000002080B582B000AF786039607A683B68101C00211A1C00F0E0FDBD4602B080BDC04680B586B000AF7860396000233B6100237B612FE07B699B007A68D3181B68BB6033
:00002B00800F23FB18BA681A70BB68FF229343BB6018E03B695B003A68D3181B781A1CBB68D318191C3B695B003A68D3185B780B703B6901333B610F23FB181A780F23FB18013A1A700F23FB181B78002BE1D17B6901337B617B69092BCCD9BD4606B080BD80B500AFBD4680BD90B585B000AF78607B68022B00D8BBE07B68302B00D9B7E0BE
:00002C00805E4B1B78DBB21A1E7B689A420AD35C4A0F23FB1812781A705A4A0E23FB1812781A703FE0584B1B78DBB21A1E7B689A420AD3564A0F23FB1812781A70544A0E23FB1812781A702DE0524B1B78DBB21A1E7B689A420AD3504A0F23FB1812781A704E4A0E23FB1812781A701BE04C4B1B78DBB21A1E7B689A420AD34A4A0F23FB1837
:00002D008012781A70484A0E23FB1812781A7009E0464A0F23FB1812781A70454A0E23FB1812781A707B68DA1E0C23FB1841498A5C1A700B23FC1800F0F1FC031C23700C23FB181B782F2B0DD97B682A2B0AD93A4B19221A60052000F0D7FC0D23FB1819221A7007E0344B1B68DAB20D23FB183F210A401A700C23FA180D23FB1812781B78CD
:00002E00809A4208D22C4B7A68033A2A498A5C1A60052000F0B9FC294B7A6825498C4662441278D2B21A60264B0F22BA1812781A60244B0E22BA1812781A60052000F014F90C23FA180D23FB1812781B789A4208D9194B7A68033A17498A5C1A60052000F093FC0B23FB181B78181C00F09BFC02E0002000F0CBF8BD4605B090BDC0F1FF0F49
:00002F0080C1F1FF0FC2F1FF0FC3F1FF0FC4F1FF0FC5F1FF0FC6F1FF0FC7F1FF0FC8F1FF0FC9F1FF0FCAF1FF0FCBF1FF0FCCF1FF0FCDF1FF0FDC2300002CFF0B4028FF0B401CFF0B4020FF0B4080B584B000AF021C3960FB1D1A7080239B05FB60FB1D1B781F2B02D9002000F091F8FB1D1B7810339B00FA68D3181B68BB60FB1D1B781033B2
:00003000809B00FA68D3183A681A60BB68181CBD4604B080BD90B587B000AF021CFB1D1A70BB1D0A1C1A70BB1D1B78032B02D9002000F06CF8FB1D1B781F2B02D9002000F065F8FB1D1B7803221340DB0006337B611323FC1800F022FC031C2370FB1D1B789B08DBB29B00144A944663441B68FB607B6903229A40131CDA43FB681340FB60D9
:0000310080BB1D1A787B699A40131CFA681343FB60FB1D1B789B08DBB29B00074A94466344FA681A601323FB181B78181C00F0FAFBBD4607B090BDC04600E400E080B582B000AF021CFB1D1A70054BFA1D12781F210A40012191400A1C1A60BD4602B080BD00E100E080B582B000AF021CFB1D1A70054BFA1D12781F210A40012191400A1CFA
:00003200801A60BD4602B080BD80E100E080B582B000AF021CFB1D1A7001BEBD4602B080BD80B582B000AF786009E00C4B1B68181C00F0AAFB7B680A4A944663447B607A6880231B029A42F0D8064B1B687A685343181C00F099FBBD4602B080BDE00000200080FFFFD800002080B582B000AF021CBB1D1A80BB1D1B88044A12785343181C98
:000033008000F082FBBD4602B080BDC046DC00002080B500AF174B03221A70174B1D221A70164B18221A70164B0E221A70154B01221A700023181C00F043F9124B00221A70002000F0D5F9002000F08EF90E4B1B78002B0AD10C4B01221A700C4B181C00F0F5F90B4B181C00F049FA0A4B01221A60BD4680BD91000F4041000F4021000F4050
:000034008031000F4072000F4004010020811B0000E11A00006C03002080B584B000AF78607B68002B05D01B4B00221A601A4B00221A70184B1A681949131C5B009B181B015B58FB60164B1B681A1CFB68D3401A1C144B1B681340FB60134BFA68D2B21A70FB681B0AFB60104BFA68D2B21A70FB681B0AFB600C4BFA68D2B21A700B4B012237
:00003500801A600B4B19221A700A4B00221A60BD4604B080BD0C01002070000F4024010020680300206403002042000F400801002072000F406C03002080B500AF064B1B68002B04D0054B00221A70012300E00023181CBD4680BDC0466C03002072000F4080B500AF1E4B1B680B2B34D81D4B19681B4B1A68501C1A4B18601B480B1C5B00CF
:00003600805B189B009B189B001A58184B1A60174B1A68174B1B68DA40164B1B681A40134B1A60154A114B1B68DBB213700F4B1B681A0A0E4B1A60104A0C4B1B68DBB213700A4B1B681A0A094B1A600B4A074B1B68DBB2137002E0094B11221A70BD4680BD080100200C0100202401002014010020680300206403002042000F4072000F40D5
:000037008080B500AF244B21221A70244B1B685A1C224B1A60214B1B680B2B38D8204A1F4B1B68DBB213701D4B1A681E49131C5B009B181B015A581C4B1A601B4B1A681B4B1B68DA401A4B1B681A40174B1A60194A154B1B68DBB21370134B1B681A0A124B1A60144A104B1B68DBB213700E4B1B681A0A0D4B1A600F4A0B4B1B68DBB2137066
:00003800800D4B01221A60044B09221A7002E00B4B01221A60BD4680BD72000F400C01002070000F402401002018010020680300206403002042000F40080100206C03002080B584B000AF78600023FB6021E00023BB6018E01249FA68131C5B009B189B00BA689B189B007A685A500D49FA68131C5B009B189B00BA689B189B007A685A50F2
:0000390080BB680133BB60BB680B2BE3D9FB680133FB60FB680B2BDAD9BD4604B080BDC0462401002080B584B000AFF860B9607A60FB68002B13DBBB68002B10DBFB680B2B0DDCBB680B2B0ADC0649BA68131C5B009B189B00FA689B189B007A685A50BD4604B080BD2401002080B582B000AF78607B68022B0FD002D8012B05D020E0032BC6
:00003A008010D0042B15D01BE0124B134A1A60134B01221A601BE00F4B114A1A600F4B02221A6014E00B4B0F4A1A600C4B03221A600DE0084B0C4A1A60084B04221A6006E0044B0A4A1A60054B00221A60C046BD4602B080BD640300207F7F7F00680300203F3F3F001F1F1F000F0F0F00FFFFFF0080B582B000AF78607B68002B0CD10E4B04
:00003B00800E4A1A600E4B05221A600E4B07221A600D4B20221A600CE0074B084A1A60084B05221A60074B07221A60074B20221A60C046BD4602B080BD78030020EC250000700300207C0300207403002080B582B000AF786000F048F87B68181C00F008F8032000F011F800F035F8BD4602B080BD80B582B000AF7860024B7A681A64BD460D
:00003C008002B080BD0000002090B585B000AF021CFB1D1A700623FB600B23FC1800F03EF9031C23700A4B0A4A1268C0218A43111CFA1D1078FA689040021C0A431A600B23FB181B78181C00F02DF9BD4605B090BD00E400E080B500AF024B01221A60BD4680BDC04600E100E080B500AF024B01221A60BD4680BDC04680E100E080B582B081
:00003D008000AF786000F04AF87B68181C00F008F8032000F011F800F037F8BD4602B080BD80B582B000AF7860024B7A689A64BD4602B080BD0000002090B585B000AF021CFB1D1A701623FB600B23FC1800F0E6F8031C23700A4B0A4A12680A491140FA1D1078FA689040021C0A431A600B23FB181B78181C00F0D6F8BD4605B090BDC0469C
:00003E008000E400E0FFFF3FFF80B500AF024B04221A60BD4680BDC04600E100E080B500AF024B04221A60BD4680BDC04680E100E080B500AF00F034F8BD4680BD80B500AF064B064A1268802109060A431A6000F019F800F01FF8BD4680BDC0460000074080B500AF064B1B78002B04D1FFF7E0FF034B01221A70FFF7E1FFBD4680BDC04613
:00003F00801C01002080B500AF0B20FFF797FCBD4680BDC04680B500AF00F064F8BD4680BD80B500AF1D4B1E4A1A601E4B00221A601D4B01221A601D4B1D4A1A601D4B07221A601D4B00221A601C4B01221A601C4B174A1A601B4B00221A600B20FFF782FC0B200321FFF716FC174B0B20191CFFF7EBFB164B00221A60154B00221A60154BF1
:000040008000221A60144B00221A60144B00221A60134B00221A60BD4680BDC046000007400B000002400007404800074000030740070000800403074010030740440007400002074004020740B1200000880E0740C80E0740480F0740080F0740C80F0740880F074080B500AF054B054A126805490A40902109040A431A60BD4680BDC04647
:000041008000000140FFFF0FFF0230800804D0C0460138FDD1C046C046C0467047EFF3108072B6704780F310887047C046C046C04680B500AF044B1B68002B02D0024B1B689847BD4680BDC046200100200E4B70B500251E1C0D4CE41AA410A54204D0AB00F35898470135F8E700F070FB084B00251E1C084CE41AA410A54204D0AB00F3582F
:000042008098470135F8E770BDD8270000D8270000D8270000E0270000031C8218934202D019700133FAE770470000000000300F40000400400F40000404000F4051300F402C310F4046320F404A330F4009400F4017410F4007420F4004430F4002600F40011811182114310C0108020F03070507070809090B060C040D020E0B0F0D1F0F36
:0000430080200B22042407260828062A09300831013201330234023508360437043E553F55580459045B045F01800183018404850289048A10924093019403950896389706980899069A269B089F01A241A902AB04AE40B020B207B301B418B640B70EB808BE40BF04C035C501C652C80DC9FFCAFFCBFFCDA0D804D904DA04DC99DD09DF01A5
:0000440080E040E140E2C0E4C0E6C0014002800514068007400D020E2810A816021701186019A01D3E1E0120022202232426882F0832803614374139553C203D023F0845084F8854105640574068A8695587048DA0C079C270C49ECA20CCF8CEEFD040D210E21000210102032009040A490B900E210F571289146D1612170818A419571A5A07
:00004500801B081E49224925A0275F28102A022D0130C0323833C03407350F373038203A023B884032460C47EB483449FF4AFF4BFF580459045A045B045C995D095F0162C0644065018101820785018B018C078D019F01A007A402A605A806AA01B101B201B402B604BE54BF01D804D904DF01014002800410068107010D800E6810A8164847
:000046008019841A041E681F1023402411258027082E402F1032803610370839553C113F8044804520468047085680570A5C805F1066056D026F01760A81028204858086048B528D0491559A409E829F01A0A8A122A280A340A501A614A708A810AB20AC01AE01B20AB440C0D9C2F0C45ECA50CC68CEBFD060D630D8C0E230E801EA40EC08F3
:0000470080EE8063086F02730887208C02D840DA80DC20E2405080564058025A805F2064016608840186408A088E4098029B20A080A880AF02B308B704D4E0D6E0D880E250EA3054405B145C088F10D403D603E402AB04AC08B040EC0402011101030405060708090A0B0C0E0F101112131415161718191B1C1D1E1F20212223252627282943
:00004800802A2B2E2F3031323334350000FFFF0000FFCC0000FF990000FF330000FF000000B3006600990099006600B3003300CC001919B3000033990000409900006699000099990000CC990000E6660000FF000033FF000066FF000080FF000099FF0000B2FF0000CCFF0000E5FF000000000000000055000000AA000000FF005500000096
:0000490080550055005500AA005500FF00AA000000AA005500AA00AA00AA00FF00FF000000FF005500FF00AA00FF00FF0000550000005555000055AA000055FF0055550000555555005555AA005555FF00AA550000AA555500AA55AA00AA55FF00FF550000FF555500FF55AA00FF55FF0000AA000000AA550000AAAA0000AAFF0055AA0000B5
:00004A008055AA550055AAAA0055AAFF00AAAA0000AAAA5500AAAAAA00AAAAFF00FFAA0000FFAA5500FFAAAA00FFAAFF0000FF000000FF550000FFAA0000FFFF0055FF000055FF550055FFAA0055FFFF00AAFF0000AAFF5500AAFFAA00AAFFFF00FFFF0000FFFF5500FFFFAA00FFFFFF00FF800000FF008000FF00FF008000FF000080FF0071
:00004B008000FF8000FF0000002020200000002000000000100000000000000000000000000000000000000000000000000000FF000010F0000020E0000030D0000040C0000050B0000060A00000709000008080000090700000A0600000B0500000C0400000D0300000E0200000FF0000000000000000005F00000007000700147F147F1482
:00004C0080242A7F2A12231308646236495522500005030000001C2241000041221C00082A1C2A0808083E080800503000000808080808006060000020100804023E5149453E00427F400042615149462141454B311814127F1027454545393C4A49493001710905033649494936064949291E003636000000563600000008142241141414B5
:00004D0080141441221408000201510906324979413E7E1111117E7F494949363E414141227F4141221C7F494949417F090901013E414151327F0808087F00417F41002040413F017F081422417F404040407F0204027F7F0408107F3E4141413E7F090909063E4151215E7F09192946464949493101017F01013F4040403F1F2040201F7F01
:00004E00802018207F63140814630304780403615149454300007F4141020408102041417F000004020102044040404040000102040020545454787F484444383844444420384444487F3854545418087E090102081454543C7F0804047800447D40002040443D00007F10284400417F40007C041804787C0804047838444444387C14141434
:00004F008008081414187C7C080404084854545420043F4440203C4040207C1C2040201C3C4030403C44281028440C5050503C4464544C44000836410000007F0000004136080008082A1C08081C2A0808F8B5C046F8BC08BC9E46704775130000CD140000F8B5C046F8BC08BC9E4670474D13000000280000D000002018000000980200004A
:00005000800000000000366E01C05D0000180000000000E02E00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000048
:0000FF008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C8111100002100000080170000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000DE
Loading

0 comments on commit 57c286a

Please sign in to comment.