func()

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()
}