예제 #1
0
def _lindstrom(value, length):
    result = ba(floatbe=value, length=length) ^ ba(floatbe=2, length=length)
    if value < 0:
        result.invert()
    else:
        result.invert(0)
    return result.uintbe
예제 #2
0
 def f(self, value):
     assert isinstance(
         value, (np.float32, np.float64, float)), "Don't understand number"
     if isinstance(value, (np.float32)):
         result = ba(floatbe=value, length=32)
     elif isinstance(value, (np.float64, float)):
         result = ba(floatbe=value, length=64)
     bits = result.len
     self._ba = result
     self._m, self._e = (23, 8) if bits == 32 else (52, 11)
     self._f = value
예제 #3
0
def _rev_lindstrom(value, length):
    result = ba(uintbe=value, length=length)  # ^ ba(floatbe=2, length=length)
    if result.bin[0] == "1":
        result.invert(0)
    else:
        result.invert()
    return result.floatbe
예제 #4
0
 def f(self, value):
     assert isinstance(
         value, (np.float32, np.float64, float)), "Don't understand number"
     if isinstance(value, (np.float32)):
         result = ba(floatbe=value, length=32) ^ ba(floatbe=2, length=32)
     elif isinstance(value, (np.float64, float)):
         result = ba(floatbe=value, length=64) ^ ba(floatbe=2, length=64)
     bits = result.len
     if value < 0:
         result = ~result
     else:
         result = ba(uintbe=result.uintbe ^ (1 << result.len - 1),
                     length=result.len)
     self._ba = result
     self._m, self._e = (23, 8) if bits == 32 else (52, 11)
     self._f = value
    def prepare_message(self, rawmessage) -> list:
        """
        Parse the raw bitstring to decoded raw bytes with start stop bits removed and endianness fixed
        :param rawmessage:
        :return: list of bytes
        """

        if type(rawmessage) == ba:
            packet = rawmessage
        else:
            packet = ba(bin=rawmessage)

        try:
            # Save raw bitstream
            self.raw_message = packet.bin

            # Sync on preamble
            counter = 0
            bit = packet[0]
            while packet[counter] == bit:
                bit = not bit
                counter += 1

            packet = packet << (counter - 2)

            # Split bin string to raw packets
            message = [
                packet[i:i + RAW_BYTE_LENGTH]
                for i in range(0, len(packet), RAW_BYTE_LENGTH)
            ]

            # Remove start and stop bytes
            message = [byte[1:9] for byte in message]

            # Reverse bit order (Endianess is LSB)
            message = [byte[::-1] for byte in message]

            return message
        except Exception:
            raise PreambleError()
    def extract_message(self, prepared_message: list) -> list:
        """
        Remove preamble, syncwords and end word
        :param prepared_message:
        :return:
        """

        # Remove sync words
        for i, x in enumerate(SYNC):
            if prepared_message[i].uint != x:
                raise SyncError()

        prepared_message = prepared_message[len(SYNC):len(prepared_message)]

        # Remove stop and rest of bogus data in packet
        index = prepared_message.index(ba(int=STOP, length=8))
        prepared_message = prepared_message[:index]

        # Convert to numpy uint8 datatype
        prepared_message = [np.uint8(x.uint) for x in prepared_message]

        return prepared_message
예제 #7
0
CANID_4003_PROXI = 0x1E114003
CANID_4003_CLOCK = 0x0C214003

CANID_RADIO_STATION = 0x0A194005
CANID_RADIO_AUDIOCH = 0x06314005
CANID_RADIO_FREQUENCY = 0x0A114005

CANID_BM_STATUS = 0x0E094021
CANID_BM_PROXI = 0x1E114021
CANID_BM_WATCHDOG = 0x0A014021
CANID_BM_AUDIO_CHANNEL = 0x06314021
CANID_BM_TRACK_TIME = 0x08094021
CANID_BM_TEXT_MESSAGE = 0x0A394021

MASK_BUTTON_VOLUME_UP = ba(hex='0x8000')
MASK_BUTTON_VOLUME_DN = ba(hex='0x4000')
MASK_BUTTON_WINDOWS = ba(hex='0x0040')
MASK_BUTTON_MUTE = ba(hex='0x2000')
MASK_BUTTON_UP = ba(hex='0x1000')
MASK_BUTTON_DOWN = ba(hex='0x0800')
MASK_BUTTON_MENU = ba(hex='0x0080')
MASK_BUTTON_SOURCE = ba(hex='0x0400')

MASK_DOOR_DRIVER = ba(hex='0x0004000000000000')
MASK_DOOR_PASSENGER = ba(hex='0x0008000000000000')

MASK_ARROW_LEFT = ba(hex='0x000040000000')
MASK_ARROW_RIGHT = ba(hex='0x000020000000')

MASK_AUDIOCH_MUTED = ba(hex='0x0000000000000080')
 def get_axes(self, x, y):
     """generates the axes as
     from a binary value"""
     self.XAxis = ba(bin=x).int
     self.YAxis = ba(bin=y).int