in newt/mfg/emit.go [360:440]
func (me *MfgEmitter) emitManifest() ([]byte, error) {
hashBytes, err := me.Mfg.Hash(0xff)
if err != nil {
return nil, err
}
sigs, err := me.createSigs()
if err != nil {
return nil, err
}
mm := manifest.MfgManifest{
Name: me.Name,
BuildTime: time.Now().Format(time.RFC3339),
Format: MANIFEST_FORMAT,
MfgHash: hex.EncodeToString(hashBytes),
Version: me.Ver.String(),
Device: me.Device,
BinPath: mfg.MFG_BIN_IMG_FILENAME,
HexPath: mfg.MFG_HEX_IMG_FILENAME,
Signatures: sigs,
FlashAreas: me.FlashMap.SortedAreas(),
Bsp: me.BspName,
EraseVal: 0xff,
}
for i, t := range me.Targets {
mmt := manifest.MfgManifestTarget{
Name: t.Name,
ManifestPath: MfgTargetManifestPath(me.Name, i),
Offset: t.Offset,
Size: t.Size,
Extra: t.ExtraManifest,
}
if t.IsBoot {
mmt.BinPath = MfgTargetBinPath(me.Name, i)
} else {
mmt.ImagePath = MfgTargetImgPath(me.Name, i)
}
mmt.HexPath = MfgTargetHexPath(me.Name, i)
mm.Targets = append(mm.Targets, mmt)
}
basePath := project.GetProject().BasePath
for i, r := range me.Raws {
mmr := manifest.MfgManifestRaw{
Filename: strings.TrimPrefix(r.Filename, basePath+"/"),
Offset: r.Offset,
Size: r.Size,
BinPath: MfgRawBinPath(me.Name, i),
Extra: r.ExtraManifest,
}
mm.Raws = append(mm.Raws, mmr)
}
if me.Meta != nil {
mmm := manifest.MfgManifestMeta{
EndOffset: me.Mfg.MetaOff + int(me.Mfg.Meta.Footer.Size),
Size: int(me.Mfg.Meta.Footer.Size),
}
mmm.Hash = me.Meta.Hash
mmm.FlashMap = me.Meta.FlashMap
for _, mmr := range me.Meta.Mmrs {
mmm.Mmrs = append(mmm.Mmrs, manifest.MfgManifestMetaMmr{
Area: mmr.Area.Name,
Device: mmr.Area.Device,
EndOffset: mmr.Area.Offset + mmr.Area.Size,
})
}
mm.Meta = &mmm
}
return mm.MarshalJson()
}