1
0

memory-service.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. const storageAccessProtocol = require('../../protocols/storage-access/index.js')
  2. const settingsService = require('../../store/settings-store.js')
  3. function resolveMaxPacketLength(value) {
  4. const settings = settingsService.getState()
  5. const numberValue = Number(value === undefined ? settings.parameterMaxPacketLength : value)
  6. if (Number.isFinite(numberValue) && Math.round(numberValue) === 0) return 0
  7. if (Number.isFinite(numberValue) && numberValue > 0) return Math.round(numberValue)
  8. return 64
  9. }
  10. function normalizeTransferOptions(options = {}) {
  11. const maxPacketLength = options.maxPacketLength === undefined ? options.maxFrameBytes : options.maxPacketLength
  12. return {
  13. maxFrameBytes: resolveMaxPacketLength(maxPacketLength),
  14. onChunk: options.onChunk,
  15. showModal: options.showModal !== false
  16. }
  17. }
  18. async function readMemory(area, startAddress, byteLength, label, kind, options = {}) {
  19. return storageAccessProtocol.client.readMemory(
  20. area,
  21. startAddress,
  22. byteLength,
  23. label,
  24. kind,
  25. normalizeTransferOptions(options)
  26. )
  27. }
  28. async function writeMemory(area, startAddress, bytes, label, kind, options = {}) {
  29. return storageAccessProtocol.client.writeMemory(
  30. area,
  31. startAddress,
  32. bytes,
  33. label,
  34. kind,
  35. normalizeTransferOptions(options)
  36. )
  37. }
  38. async function readCodeInfoBlock(label, kind, options = {}) {
  39. return storageAccessProtocol.client.readCodeInfoBlock(
  40. label,
  41. kind,
  42. normalizeTransferOptions(options)
  43. )
  44. }
  45. module.exports = {
  46. AREA: storageAccessProtocol.AREA,
  47. readCodeInfoBlock,
  48. readMemory,
  49. resolveMaxPacketLength,
  50. writeMemory
  51. }