mirror of
https://github.com/espressif/esptool.git
synced 2025-10-22 16:37:36 +08:00
fix(espefuse): Fix compatibility with Bitstring>=4
bitstring==4 dropped class alias for BitStream. BitString was just an alias in all supported bitstring versions: https://github.com/scott-griffiths/bitstring/blob/bitstring-3.1.6/bitstring.py#L4247 Closes https://github.com/espressif/esptool/issues/797
This commit is contained in:
@@ -10,7 +10,7 @@ import binascii
|
|||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from bitstring import BitArray, BitString, CreationError
|
from bitstring import BitArray, BitStream, CreationError
|
||||||
|
|
||||||
import esptool
|
import esptool
|
||||||
|
|
||||||
@@ -155,14 +155,14 @@ class EfuseBlockBase(EfuseProtectBase):
|
|||||||
self.len = param.len
|
self.len = param.len
|
||||||
self.key_purpose_name = param.key_purpose
|
self.key_purpose_name = param.key_purpose
|
||||||
bit_block_len = self.get_block_len() * 8
|
bit_block_len = self.get_block_len() * 8
|
||||||
self.bitarray = BitString(bit_block_len)
|
self.bitarray = BitStream(bit_block_len)
|
||||||
self.bitarray.set(0)
|
self.bitarray.set(0)
|
||||||
self.wr_bitarray = BitString(bit_block_len)
|
self.wr_bitarray = BitStream(bit_block_len)
|
||||||
self.wr_bitarray.set(0)
|
self.wr_bitarray.set(0)
|
||||||
self.fail = False
|
self.fail = False
|
||||||
self.num_errors = 0
|
self.num_errors = 0
|
||||||
if self.id == 0:
|
if self.id == 0:
|
||||||
self.err_bitarray = BitString(bit_block_len)
|
self.err_bitarray = BitStream(bit_block_len)
|
||||||
self.err_bitarray.set(0)
|
self.err_bitarray.set(0)
|
||||||
else:
|
else:
|
||||||
self.err_bitarray = None
|
self.err_bitarray = None
|
||||||
@@ -336,7 +336,7 @@ class EfuseBlockBase(EfuseProtectBase):
|
|||||||
# in bitstring = [N] ... [2][1][0] (to get a correct bitstring
|
# in bitstring = [N] ... [2][1][0] (to get a correct bitstring
|
||||||
# need to reverse new_data)
|
# need to reverse new_data)
|
||||||
# *[x] - means a byte.
|
# *[x] - means a byte.
|
||||||
data = BitString(bytes=new_data[::-1], length=len(new_data) * 8)
|
data = BitStream(bytes=new_data[::-1], length=len(new_data) * 8)
|
||||||
if self.parent.debug:
|
if self.parent.debug:
|
||||||
print(
|
print(
|
||||||
"\twritten : {} ->\n\tto write: {}".format(self.get_bitstring(), data)
|
"\twritten : {} ->\n\tto write: {}".format(self.get_bitstring(), data)
|
||||||
@@ -563,7 +563,7 @@ class EfuseFieldBase(EfuseProtectBase):
|
|||||||
field_len = int(re.search(r"\d+", self.efuse_type).group())
|
field_len = int(re.search(r"\d+", self.efuse_type).group())
|
||||||
if self.efuse_type.startswith("bytes"):
|
if self.efuse_type.startswith("bytes"):
|
||||||
field_len *= 8
|
field_len *= 8
|
||||||
self.bitarray = BitString(field_len)
|
self.bitarray = BitStream(field_len)
|
||||||
self.bit_len = field_len
|
self.bit_len = field_len
|
||||||
self.bitarray.set(0)
|
self.bitarray.set(0)
|
||||||
self.update(self.parent.blocks[self.block].bitarray)
|
self.update(self.parent.blocks[self.block].bitarray)
|
||||||
|
@@ -10,7 +10,7 @@ import argparse
|
|||||||
import json
|
import json
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from bitstring import BitString
|
from bitstring import BitStream
|
||||||
|
|
||||||
import esptool
|
import esptool
|
||||||
|
|
||||||
@@ -627,7 +627,7 @@ def burn_bit(esp, efuses, args):
|
|||||||
efuses.force_write_always = args.force_write_always
|
efuses.force_write_always = args.force_write_always
|
||||||
num_block = efuses.get_index_block_by_name(args.block)
|
num_block = efuses.get_index_block_by_name(args.block)
|
||||||
block = efuses.blocks[num_block]
|
block = efuses.blocks[num_block]
|
||||||
data_block = BitString(block.get_block_len() * 8)
|
data_block = BitStream(block.get_block_len() * 8)
|
||||||
data_block.set(0)
|
data_block.set(0)
|
||||||
try:
|
try:
|
||||||
data_block.set(True, args.bit_number)
|
data_block.set(True, args.bit_number)
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from bitstring import BitString
|
from bitstring import BitStream
|
||||||
|
|
||||||
|
|
||||||
class EmulateEfuseControllerBase(object):
|
class EmulateEfuseControllerBase(object):
|
||||||
@@ -26,18 +26,19 @@ class EmulateEfuseControllerBase(object):
|
|||||||
self.efuse_file = efuse_file
|
self.efuse_file = efuse_file
|
||||||
if self.efuse_file:
|
if self.efuse_file:
|
||||||
try:
|
try:
|
||||||
self.mem = BitString(
|
self.mem = BitStream(
|
||||||
open(self.efuse_file, "a+b"), length=self.REGS.EFUSE_MEM_SIZE * 8
|
bytes=open(self.efuse_file, "rb").read(),
|
||||||
|
length=self.REGS.EFUSE_MEM_SIZE * 8,
|
||||||
)
|
)
|
||||||
except ValueError:
|
except (ValueError, FileNotFoundError):
|
||||||
# the file is empty or does not fit the length.
|
# the file is empty or does not fit the length.
|
||||||
self.mem = BitString(length=self.REGS.EFUSE_MEM_SIZE * 8)
|
self.mem = BitStream(length=self.REGS.EFUSE_MEM_SIZE * 8)
|
||||||
self.mem.set(0)
|
self.mem.set(0)
|
||||||
self.mem.tofile(open(self.efuse_file, "a+b"))
|
self.mem.tofile(open(self.efuse_file, "a+b"))
|
||||||
else:
|
else:
|
||||||
# efuse_file is not provided
|
# efuse_file is not provided
|
||||||
# it means we do not want to keep the result of efuse operations
|
# it means we do not want to keep the result of efuse operations
|
||||||
self.mem = BitString(self.REGS.EFUSE_MEM_SIZE * 8)
|
self.mem = BitStream(self.REGS.EFUSE_MEM_SIZE * 8)
|
||||||
self.mem.set(0)
|
self.mem.set(0)
|
||||||
|
|
||||||
""" esptool method start >> """
|
""" esptool method start >> """
|
||||||
@@ -159,7 +160,7 @@ class EmulateEfuseControllerBase(object):
|
|||||||
# checks fields which have the write protection bit.
|
# checks fields which have the write protection bit.
|
||||||
# if the write protection bit is set, we need to protect that area from changes.
|
# if the write protection bit is set, we need to protect that area from changes.
|
||||||
write_disable_bit = self.read_field("WR_DIS", bitstring=False)
|
write_disable_bit = self.read_field("WR_DIS", bitstring=False)
|
||||||
mask_wr_data = BitString(len(wr_data))
|
mask_wr_data = BitStream(len(wr_data))
|
||||||
mask_wr_data.set(0)
|
mask_wr_data.set(0)
|
||||||
blk = self.Blocks.get(self.Blocks.BLOCKS[num_blk])
|
blk = self.Blocks.get(self.Blocks.BLOCKS[num_blk])
|
||||||
if blk.write_disable_bit is not None and write_disable_bit & (
|
if blk.write_disable_bit is not None and write_disable_bit & (
|
||||||
@@ -206,7 +207,7 @@ class EmulateEfuseControllerBase(object):
|
|||||||
block.pos = block.length - (
|
block.pos = block.length - (
|
||||||
field.word * 32 + field.pos + raw_data.length
|
field.word * 32 + field.pos + raw_data.length
|
||||||
)
|
)
|
||||||
block.overwrite(BitString(raw_data.length))
|
block.overwrite(BitStream(raw_data.length))
|
||||||
self.overwrite_mem_from_block(blk, block)
|
self.overwrite_mem_from_block(blk, block)
|
||||||
|
|
||||||
def clean_mem(self):
|
def clean_mem(self):
|
||||||
|
@@ -6,7 +6,7 @@
|
|||||||
#
|
#
|
||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
from bitstring import BitString
|
from bitstring import BitStream
|
||||||
|
|
||||||
import reedsolo
|
import reedsolo
|
||||||
|
|
||||||
@@ -138,5 +138,5 @@ class EmulateEfuseController(EmulateEfuseControllerBase):
|
|||||||
block.pos = block.length - (
|
block.pos = block.length - (
|
||||||
field.word * 32 + field.pos + raw_data.length
|
field.word * 32 + field.pos + raw_data.length
|
||||||
)
|
)
|
||||||
block.overwrite(BitString(raw_data.length))
|
block.overwrite(BitStream(raw_data.length))
|
||||||
self.overwrite_mem_from_block(blk, block)
|
self.overwrite_mem_from_block(blk, block)
|
||||||
|
2
setup.py
2
setup.py
@@ -117,7 +117,7 @@ setup(
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
install_requires=[
|
install_requires=[
|
||||||
"bitstring>=3.1.6,<4",
|
"bitstring>=3.1.6",
|
||||||
"cryptography>=2.1.4",
|
"cryptography>=2.1.4",
|
||||||
"ecdsa>=0.16.0",
|
"ecdsa>=0.16.0",
|
||||||
"pyserial>=3.0",
|
"pyserial>=3.0",
|
||||||
|
@@ -30,7 +30,7 @@ import sys
|
|||||||
import tempfile
|
import tempfile
|
||||||
import time
|
import time
|
||||||
|
|
||||||
from bitstring import BitString
|
from bitstring import BitStream
|
||||||
|
|
||||||
# Make command line options --port, --reset-port and --chip available
|
# Make command line options --port, --reset-port and --chip available
|
||||||
from conftest import arg_chip, arg_port, arg_reset_port
|
from conftest import arg_chip, arg_port, arg_reset_port
|
||||||
@@ -115,7 +115,7 @@ class EfuseTestCase:
|
|||||||
self, log, file_path, repeat=1, reverse_order=False, offset=0
|
self, log, file_path, repeat=1, reverse_order=False, offset=0
|
||||||
):
|
):
|
||||||
with open(file_path, "rb") as f:
|
with open(file_path, "rb") as f:
|
||||||
data = BitString("0x00") * offset + BitString(f)
|
data = BitStream("0x00") * offset + BitStream(f)
|
||||||
blk = data.readlist(f"{data.len // 8}*uint:8")
|
blk = data.readlist(f"{data.len // 8}*uint:8")
|
||||||
blk = blk[::-1] if reverse_order else blk
|
blk = blk[::-1] if reverse_order else blk
|
||||||
hex_blk = " ".join(f"{num:02x}" for num in blk)
|
hex_blk = " ".join(f"{num:02x}" for num in blk)
|
||||||
|
Reference in New Issue
Block a user