| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- const {
- formatBytes
- } = require('../../utils/binary-utils.js')
- const FILE_SIZES = {
- 16: 16 * 1024,
- 32: 32 * 1024
- }
- const FLASH_LAYOUTS = {
- 16: {
- capacity: FILE_SIZES[16],
- startAddress: 0x0400,
- endAddress: 0x4000
- },
- 32: {
- capacity: FILE_SIZES[32],
- startAddress: 0x0800,
- endAddress: 0x8000
- }
- }
- const FLASH_SIZE_TEXT = Object.keys(FILE_SIZES)
- .map((sizeKb) => formatBytes(FILE_SIZES[sizeKb]))
- .join(' 或 ')
- const CHIP_FLASH_SIZE_KB = {
- FU6572L: 32,
- FU6572N: 32,
- FU6572T: 32,
- FU6565N: 32,
- FU6565T: 32,
- FU6563N: 32,
- FU6562L: 32,
- FU6562LA: 32,
- FU6562Q: 32,
- FU6562S: 32,
- FU6562T: 32,
- FU6532N: 32,
- FU6532T: 32,
- FU6522L: 32,
- FU6522N: 32,
- FU6522T: 32,
- FU6812L2: 16,
- FU6812N2: 16,
- FU6812S2: 16,
- FU6812V: 16,
- FU6861Q2: 16,
- FU6861N2: 16,
- FU6861NF2: 16,
- FU6861L2: 16,
- FU6862L: 16,
- FU6862Q: 16,
- FU6872P: 16
- }
- const CHIP_FAMILY_FLASH_SIZE_KB = {
- 65: 32,
- 68: 16
- }
- function normalizeModel(value) {
- const text = String(value || '').trim()
- return text && text !== '--' ? text : ''
- }
- function extractChipModels(chipModel) {
- const model = normalizeModel(chipModel).toUpperCase()
- return model.match(/FU\d{4}[A-Z0-9]*/g) || []
- }
- function inferFlashSizeKb(chipModel) {
- const models = extractChipModels(chipModel)
- for (const model of models) {
- if (CHIP_FLASH_SIZE_KB[model]) return CHIP_FLASH_SIZE_KB[model]
- const family = model.slice(2, 4)
- if (CHIP_FAMILY_FLASH_SIZE_KB[family]) return CHIP_FAMILY_FLASH_SIZE_KB[family]
- }
- const text = normalizeModel(chipModel).toUpperCase()
- if (/(^|[^0-9])32\s*K(B)?([^0-9]|$)/.test(text)) return 32
- if (/(^|[^0-9])16\s*K(B)?([^0-9]|$)/.test(text)) return 16
- return null
- }
- function inferFlashSizeKbFromBytes(byteLength) {
- return Number(Object.keys(FILE_SIZES).find((sizeKb) => FILE_SIZES[sizeKb] === byteLength)) || null
- }
- function inferUpgradeFlashSizeKb(chipModel, byteLength) {
- return inferFlashSizeKb(chipModel) || inferFlashSizeKbFromBytes(byteLength)
- }
- function getFlashLayout(chipModel, byteLength) {
- const sizeKb = inferUpgradeFlashSizeKb(chipModel, byteLength)
- return sizeKb ? FLASH_LAYOUTS[sizeKb] : null
- }
- function getFirmwareValidation(byteLength, chipModel) {
- const chipSizeKb = inferFlashSizeKb(chipModel)
- const firmwareSizeKb = inferFlashSizeKbFromBytes(byteLength)
- const sizeKb = chipSizeKb || firmwareSizeKb
- const layout = sizeKb ? FLASH_LAYOUTS[sizeKb] : null
- const normalizedChipModel = normalizeModel(chipModel)
- if (!byteLength) {
- return {
- isReady: false,
- text: chipSizeKb
- ? `需要 ${formatBytes(FLASH_LAYOUTS[chipSizeKb].capacity)} .bin`
- : `请选择 ${FLASH_SIZE_TEXT} .bin`
- }
- }
- if (!layout) {
- return {
- isReady: false,
- text: `文件 ${formatBytes(byteLength)},应为 ${FLASH_SIZE_TEXT}`
- }
- }
- if (byteLength !== layout.capacity) {
- return {
- isReady: false,
- text: `文件 ${formatBytes(byteLength)},应为 ${formatBytes(layout.capacity)}`
- }
- }
- return {
- isReady: true,
- text: chipSizeKb
- ? `匹配 ${formatBytes(layout.capacity)}`
- : `${normalizedChipModel ? `${normalizedChipModel} 未识别,` : '未读到芯片型号,'}按 ${formatBytes(layout.capacity)} 尝试`
- }
- }
- module.exports = {
- CHIP_FAMILY_FLASH_SIZE_KB,
- CHIP_FLASH_SIZE_KB,
- FILE_SIZES,
- FLASH_LAYOUTS,
- FLASH_SIZE_TEXT,
- extractChipModels,
- getFirmwareValidation,
- getFlashLayout,
- inferFlashSizeKb,
- inferFlashSizeKbFromBytes,
- inferUpgradeFlashSizeKb,
- normalizeModel
- }
|