service.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. const {
  2. createGroupsFromCodeInfo,
  3. parseCodeInfo
  4. } = require('../../domain/storage-access/code-info-parser.js')
  5. const {
  6. cloneImportedGroup,
  7. normalizeGroup
  8. } = require('../../domain/parameter-groups/model.js')
  9. const memoryService = require('./memory-service.js')
  10. function formatWordHex(value) {
  11. return Number(value || 0).toString(16).toUpperCase().padStart(4, '0')
  12. }
  13. async function syncCodeInfo(options = {}) {
  14. const result = await memoryService.readCodeInfoBlock(
  15. options.label || '同步info',
  16. options.kind || 'storage-info-read',
  17. {
  18. maxPacketLength: options.maxPacketLength,
  19. showModal: options.showModal !== false
  20. }
  21. )
  22. if (!result) {
  23. return {
  24. ok: false
  25. }
  26. }
  27. const codeInfo = parseCodeInfo(result.codeInfoBytes)
  28. const importedGroups = createGroupsFromCodeInfo(codeInfo, options)
  29. .map(cloneImportedGroup)
  30. .map(normalizeGroup)
  31. return {
  32. codeInfoAddress: result.codeInfoAddress,
  33. codeInfoAddressText: formatWordHex(result.codeInfoAddress),
  34. codeInfoByteLength: result.codeInfoByteLength,
  35. codeInfoByteLengthText: formatWordHex(result.codeInfoByteLength),
  36. codeInfoBytes: result.codeInfoBytes,
  37. codeInfo,
  38. infoBytes: result.infoBytes,
  39. groupCount: importedGroups.length,
  40. importedGroups,
  41. codeInfoMemoryType: result.codeInfoMemoryType,
  42. ok: true,
  43. structCount: codeInfo.structCount
  44. }
  45. }
  46. module.exports = {
  47. AREA: memoryService.AREA,
  48. readMemory: memoryService.readMemory,
  49. syncCodeInfo,
  50. writeMemory: memoryService.writeMemory
  51. }