libscrc 1.8.1

Creator: bradpython12

Last updated:

Add to Cart

Description:

libscrc 1.8.1

libscrc is a library for calculating CRC3 CRC4 CRC5 CRC6 CRC7 CRC8 CRC16 CRC24 CRC32 CRC64 CRC82.


CRCx
CRC8
CRC16
CRC24
CRC32
CRC64



CRC3-GSM
INTEL
MODBUS
BLE
FSC
GO-ISO

CRC3-ROHC
BCC
IBM
OPENPGP
CRC32
ECMA182

CRC4-ITU
LRC
XMODEM
LTE-A
MPEG2
WE

CRC5-ITU
MAXIM8
CCITT
LTE-B
ADLER32
XZ64

CRC5-EPC
ROHC
KERMIT
OS9
FLETCHER32


CRC5-USB
ITU8
MCRF4XX
FLEXRAY-A
POSIX


CRC6-ITU
CRC8
SICK
FLEXRAY-B
BZIP2


CRC6-GSM
SUM8
DNP
INTERLAKEN
JAMCRC


CRC6-DARC
FLETCHER8
X25
CRC24
AUTOSAR


CRC7
SMBUS
USB

C / ISCSI


CRC7-MMC
AUTOSAR
MAXIM16

D/BASE91-D


CRC7-UMTS
LTE
DECT(R/X)

Q / AIXM


CRC7-ROHC
SAE-J1850
TCP/UDP

XFER



I-CODE
CDMA2000

CKSUM


CAN15
GSM-A
FLETCHER16

XZ32


CAN17
NRSC-5
EPC16

AAL5


CAN21
WCDMA
PROFIBUS

ISO-HDLC



BLUETOOTH
BUYPASS

PKZIP


CRC10-ATM
DVB-S2
GENIBUS

ADCCP


CRC13-BBC
EBU
GSM16

V-42


MPT1327
DARC
RIELLO

STM32


CDMA2000
MIFARE
OPENSAFETY

ECMXF



LIN1.3
EN13757





LIN2.x
CMS

CRC30-CDMA



ID8


PHILIPS
DARC82


NMEA






MODBUS-ASC








Installation

Compile and install the library:
pip3 install libscrc
or:
python3 setup.py build
python3 setup.py install
You will need the administrative privileges to execute the last command.

Cross compile and install the library:
# vim setup.cfg
universal=1
plat-name=linux_armv7l

export CROSS_COMPILE=arm-linux-gnueabihf-
export CC='${CROSS_COMPILE}gcc -pthread'
export LDSHARED='${CROSS_COMPILE}gcc -shared'
export CFLAGS='-I/usr/include/python3.5m -I/usr/include/'

python3 setup.py build
# gcc version 6.2.1 20161016 (Linaro GCC 6.2-2016.11)

After installation you can run unit tests to make sure that the library works fine. Execute:
# python3 -m libscrc.test.modbus
# python3 -m libscrc.test.crc8
# python3 -m libscrc.test.crcx
# python3 -m libscrc.test.canx
# python3 -m libscrc.test.crc16
# python3 -m libscrc.test.crc24
# python3 -m libscrc.test.crc32
# python3 -m libscrc.test.crc64




Usage

In Python 3:
import libscrc
crc16 = libscrc.modbus(b'1234') # Calculate ASCII of modbus(rtu)
crc16 = libscrc.modbus(b'\x01\x02') # Calculate HEX of modbus(rtu)
crc16 = libscrc.modbus(bytearray( [ 0x01, 0x02 ] ))
You can also calculate CRC gradually( v1.4+ ):
import libscrc
crc16 = libscrc.xmodem(b'1234')
crc16 = libscrc.xmodem(b'5678', crc16)



Example


CRCx::
crc3 = libscrc.gsm3(b’1234’)
crc3 = libscrc.rohc3(b’1234’)
crc4 = libscrc.itu4(b’1234’)
crc4 = libscrc.g_704(b’1234’)
crc4 = libscrc.interlaken4(b’1234’)
crc5 = libscrc.itu5(b’1234’)
crc5 = libscrc.epc(b’1234’)
crc5 = libscrc.usb5(b’1234’)
crc6 = libscrc.itu6(b’1234’)
crc6 = libscrc.darc6(b’1234’)
crc7 = libscrc.mmc(b’1234’)
crc7 = libscrc.crc7(b’1234’)
crc7 = libscrc.umts7(b’1234’)
crc7 = libscrc.rohc7(b’1234’)
crc10 = libscrc.atm10(b’1234’)
crc10 = libscrc.gsm10(b’1234’)
crc10 = libscrc.crc10_cdma2000(b’1234’)
crc11 = libscrc.umts11(b’1234’)
crc11 = libscrc.flexray11(b’1234’)
crc12 = libscrc.umts12(b’1234’)
crc12 = libscrc.crc12_3gpp(b’1234’)
crc12 = libscrc.dect12(b’1234’)
crc12 = libscrc.crc12(b’1234’)
crc12 = libscrc.gsm12(b’1234’)
crc12 = libscrc.crc12_cdma2000(b’1234’)
crc13 = libscrc.bbc13(b’1234’)
crc14 = libscrc.darc14(b’1234’)
crc15 = libscrc.mpt1327(b’1234’)
crc15 = libscrc.can15(b’1234’)
crc17 = libscrc.can17(b’1234’)
crc21 = libscrc.can21(b’1234’)
crc30 = libscrc.cdma(b’1234’)
crc31 = libscrc.philips(b’1234’)
crc40 = libscrc.gsm40(b’1234’)
crc82 = libscrc.darc82(b’1234’)




CRC8::
crc8 = libscrc.intel(b’1234’)
crc8 = libscrc.bcc(b’1234’)
crc8 = libscrc.lrc(b’1234’)
crc8 = libscrc.maxim8(b’1234’)
crc8 = libscrc.rohc(b’1234’)
crc8 = libscrc.itu8(b’1234’)
crc8 = libscrc.crc8(b’1234’)
crc8 = libscrc.smbus(b’1234’)
crc8 = libscrc.autosar8(b’1234’)
crc8 = libscrc.lte8(b’1234’)
crc8 = libscrc.sae_j1850(b’1234’)
crc8 = libscrc.icode8(b’1234’)
crc8 = libscrc.gsm8_a(b’1234’)
crc8 = libscrc.nrsc_5(b’1234’)
crc8 = libscrc.wcdma8(b’1234’)
crc8 = libscrc.bluetooth(b’1234’)
crc8 = libscrc.dvb_s2(b’1234’)
crc8 = libscrc.ebu8(b’1234’)
crc8 = libscrc.darc8(b’1234’)
crc8 = libscrc.opensafety8(b’1234’)
crc8 = libscrc.i432_1(b’1234’)
crc8 = libscrc.mifare_mad(b’1234’)
crc8 = libscrc.tech_3250(b’1234’)
crc8 = libscrc.aes8(b’1234’)
crc8 = libscrc.lin(bytes([0x15, 0x5B, 0x67]))
crc8 = libscrc.lin2x(bytes([0x15, 0x5B, 0x67, 0x72, 0xAF, 0x5B]))
crc8 = libscrc.id8(b’21020020210229117’) # ID check code of China
crc8 = libscrc.nmea(b’$PFEC,GPint,RMC06*’) # National Marine Electronics Association
crc8 = libscrc.modbus_asc(b’010300010001’) # Modbus(ASCII) checksum. return value is bytes (b’FA’)




CRC16::
crc16 = libscrc.ibm(b’1234’) # poly=0xA001 (default Reversed)
crc16 = libscrc.ibm(b’1234’, 0x8005) # poly=0x8005 (Normal)
crc16 = libscrc.modbus(b’1234’) # Modbus(RTU) checksum
crc16 = libscrc.xmodem(b’1234’)
crc16 = libscrc.zmodem(b’1234’)
crc16 = libscrc.ccitt(b’1234’)
crc16 = libscrc.ccitt_aug(b’1234’)
crc16 = libscrc.ccitt_true(b’1234’)
crc16 = libscrc.ccitt_false(b’1234’)
crc16 = libscrc.kermit(b’1234’)
crc16 = libscrc.mcrf4xx(b’1234’)
crc16 = libscrc.sick(b’1234’)
crc16 = libscrc.dnp(b’1234’)
crc16 = libscrc.x25(b’1234’)
crc16 = libscrc.usb16(b’1234’)
crc16 = libscrc.maxim16(b’1234’)
crc16 = libscrc.dect_r(b’1234’)
crc16 = libscrc.dect_x(b’1234’)
data = b’x45x00x00x3cx00x00x00x00x40x11x00x00xc0xa8x2bxc3x08x08x08x08x11’
crc16 = libscrc.tcp( data ) # 13933
crc16 = libscrc.udp( data ) # 13933
crc16 = libscrc.epc16(b’1234’) # RFID EPC(CRC16-PC-EPC)
crc16 = libscrc.profibus(b’1234’)
crc16 = libscrc.buypass(b’1234’)
crc16 = libscrc.genibus(b’1234’)
crc16 = libscrc.gsm16(b’1234’)
crc16 = libscrc.riello(b’1234’)
crc16 = libscrc.crc16_a(b’1234’)
crc16 = libscrc.cdma2000(b’1234’)
crc16 = libscrc.teledisk(b’1234’)
crc16 = libscrc.tms37157(b’1234’)
crc16 = libscrc.en13757(b’1234’)
crc16 = libscrc.t10_dif(b’1234’)
crc16 = libscrc.dds_110(b’1234’)
crc16 = libscrc.lj1200(b’1234’)
crc16 = libscrc.opensafety_a(b’1234’)
crc16 = libscrc.opensafety_b(b’1234’)
crc16 = libscrc.arc(b’1234’)
crc16 = libscrc.lha(b’1234’)
crc16 = libscrc.cms(b’1234’)
crc16 = libscrc.darc(b’1234’)
crc16 = libscrc.epc_c1g2(b’1234’)
crc16 = libscrc.icode16(b’1234’)
crc16 = libscrc.ibm_3740(b’1234’)
crc16 = libscrc.autosar16(b’1234’)
crc16 = libscrc.ibm_sdlc(b’1234’)
crc16 = libscrc.iso_hdlc16(b’1234’)
crc16 = libscrc.iec14443_3_b(b’1234’)
crc16 = libscrc.iec14443_3_a(b’1234’)
crc16 = libscrc.v41_lsb(b’1234’)
crc16 = libscrc.v41_msb(b’1234’)
crc16 = libscrc.spi_fujitsu(b’1234’)
crc16 = libscrc.umts(b’1234’)
crc16 = libscrc.verifone(b’1234’)
crc16 = libscrc.acorn(b’1234’)
crc16 = libscrc.lte16(b’1234’)
crc16 = libscrc.nrsc5(b’1234’)




CRC24::
crc24 = libscrc.ble(b’1234’)
crc24 = libscrc.flexraya(b’1234’)
crc24 = libscrc.flexrayb(b’1234’)
crc24 = libscrc.openpgp(b’1234’)
crc24 = libscrc.lte_a(b’1234’)
crc24 = libscrc.lte_b(b’1234’)
crc24 = libscrc.os9(b’1234’)
crc24 = libscrc.interlaken(b’1234’)
crc24 = libscrc.crc24(b’1234’)




CRC32::
crc32 = libscrc.fsc(b’1234’) # Ethernet frame sequence (FSC)
crc32 = libscrc.mpeg2(b’1234’) # MPEG2
crc32 = libscrc.crc32(b’1234’) # WinRAR, File
crc32 = libscrc.posix(b’1234’)
crc32 = libscrc.bzip2(b’1234’)
crc32 = libscrc.jamcrc(b’1234’)
crc32 = libscrc.autosar(b’1234’)
crc32 = libscrc.crc32_c(b’1234’)
crc32 = libscrc.crc32_d(b’1234’)
crc32 = libscrc.crc32_q(b’1234’)
crc32 = libscrc.xfer(b’1234’)
crc32 = libscrc.aixm(b’1234’)
crc32 = libscrc.base91_d(b’1234’)
crc32 = libscrc.cksum(b’1234’)
crc32 = libscrc.base91_c(b’1234’)
crc32 = libscrc.iscsi(b’1234’)
crc32 = libscrc.iso_hdlc(b’1234’)
crc32 = libscrc.xz32(b’1234’)
crc32 = libscrc.pkzip(b’1234’)
crc32 = libscrc.adccp(b’1234’)
crc32 = libscrc.v_42(b’1234’)
crc32 = libscrc.aal5(b’1234’)
crc32 = libscrc.stm32(b’1234’) # STM32 hardware calculate CRC32
crc32 = libscrc.ecmxf(b’1234’) # ECMXF




CRC64::
crc64 = libscrc.iso(b’1234’)
crc64 = libscrc.ecma182(b’1234’)
crc64 = libscrc.we(b’1234’)
crc64 = libscrc.xz64(b’1234’)




CRC82::
crc82 = libscrc.darc82(b’123456789’)






NOTICE

Revert gradually calculating function v1.4+ (2020-08-04)


V1.8.1(2022-08-18)

PyArg_ParseTuple() and formats which use # require the PY_SSIZE_T_CLEAN macro since python 3.10



V1.8(2022-03-04)

New add modbus (ASCII) LRC checksum.
CRC8 -> libscrc.modbus_asc()



V1.7(2021-06-07)

New add CRC8 -> libscrc.id8() and libscrc.nmea()
Update gradually calculate functions ( CRCx -> libscrc.umts12() libscrc.crc12_3gpp() )
Fixed Issues #8



V1.6(2021-01-18)

New add CRC32 -> libscrc.stm32()
New add CRC8 -> libscrc.lin() and libscrc.lin2x()



V1.4 (2020-08-04)

Revert gradually calculating function. ( Fixed Issues #4 )
Optimized code
Gradually calculate invalid functions( TODO )
CRCx -> libscrc.umts12() libscrc.crc12_3gpp()
CRC8 -> libscrc.intel() libscrc.lrc()
CRC16 -> libscrc.sick() libscrc.udp() libscrc.tcp() libscrc.fletcher16()
CRC32 -> libscrc.fletcher32()



V1.0 (2020-03-23)

New hacker8 hacker16 hacker32 hacker64
New FLETCHER8 FLETCHER16 FLETCHER32



V0.1.5 (2017-09-22)

New CRC4-ITU Poly = 0x03 Initial = 0x00 Xorout=0x00 Refin=True Refout=True
New CRC5-ITU Poly = 0x15 Initial = 0x00 Xorout=0x00 Refin=True Refout=True
New CRC5-EPC Poly = 0x09 Initial = 0x09 Xorout=0x00 Refin=False Refout=False
New CRC5-USB Poly = 0x05 Initial = 0x1F Xorout=0x1F Refin=True Refout=True
New CRC6-ITU Poly = 0x03 Initial = 0x00 Xorout=0x00 Refin=True Refout=True
New CRC7-MMC Poly = 0x09 Initial = 0x00 Xorout=0x00 Refin=False Refout=False



V0.1.4 (2017-09-21)

New CRC8-MAXIM8 Poly = 0x31 Initial = 0x00 Xorout=0x00 Refin=True Refout=True
New CRC8-ROHC Poly = 0x07 Initial = 0xFF Xorout=0x00 Refin=True Refout=True
New CRC8-ITU Poly = 0x07 Initial = 0x00 Xorout=0x55 Refin=False Refout=False
New CRC8-CRC8 Poly = 0x07 Initial = 0x00 Xorout=0x00 Refin=False Refout=False



V0.1.3 (2017-09-19)

New CRC16-X25
New CRC16-USB
New CRC16-MAXIM16
New CRC16-CCITT_FALSE
New CRC16-DECT


Bugfixes

Calculate CRC16-IBM of poly = 0x8005 is ERROR.





V0.1.2 (2017-08-22)

Platform Support

Win32 X64
Linux_x86_64
MacOSX_10_6_intel
ARMv7 (Toradex Ixora iMX6 Linux-4.1.41)


Bugfixes

Coding C99 standard.
Python/C API parsing arguments type error in linux.





V0.1.1 (2017-08-20)

New CRC16-DNP and CRC16-SICK

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.