TFTPLoader.Mos 992 B

1234567891011121314151617181920212223242526272829303132
  1. MODULE TFTPLoader; (** AUTHOR "Timothée Martiel"; PURPOSE "Module implementing file loading using TFTP for the Zynq Bootloader"; *)
  2. IMPORT
  3. EnetBase, EnetTftp,
  4. Loader;
  5. VAR
  6. tx: EnetTftp.Transfer;
  7. (** TFTP Loader *)
  8. PROCEDURE Load (CONST name, host: ARRAY OF CHAR);
  9. VAR
  10. src: EnetBase.IpAddr;
  11. ignore: LONGINT;
  12. BEGIN
  13. IF ~EnetBase.StrToIpAddr(host, src) THEN Loader.NotifyDone(Loader.InvalidHost); RETURN END;
  14. IF ~EnetTftp.ReadFile(tx, name, "octet", src, TftpReceiver, NIL, ignore) THEN Loader.NotifyDone(Loader.ImageTransferError) END
  15. END Load;
  16. (** Handler for TFTP protocol *)
  17. PROCEDURE TftpReceiver (transfer: EnetTftp.Transfer; VAR buf: ARRAY OF CHAR; ofs, len, res: LONGINT; packet: EnetBase.Packet; endOfFile: BOOLEAN);
  18. BEGIN
  19. ASSERT(transfer = tx);
  20. IF (res = 0) & (len > 0) THEN
  21. Loader.CopyToRam(buf, ofs, len)
  22. END;
  23. IF endOfFile & ~Loader.error THEN Loader.NotifyDone(res) END
  24. END TftpReceiver;
  25. BEGIN
  26. Loader.RegisterLoader("TFTP", Load)
  27. END TFTPLoader.