Files
libstb-hal/libdvbci/misc.cpp
svenhoefer 7e5b1fc5d2 - formatting code using astyle
Conflicts:
	libarmbox/dmx.cpp
	libgeneric-pc/video_lib.h
	libspark/dmx.cpp

Signed-off-by: Thilo Graf <dbt@novatux.de>
2021-05-30 16:31:13 +02:00

125 lines
1.8 KiB
C++

#include <stdio.h>
#include <stdint.h>
#include <unistd.h>
#include <fcntl.h>
void hexdump(const uint8_t *data, unsigned int len)
{
while (len--)
printf("%02x ", *data++);
printf("\n");
}
int get_random(unsigned char *dest, int len)
{
int fd;
const char *urnd = "/dev/urandom";
fd = open(urnd, O_RDONLY);
if (fd <= 0)
{
printf("cannot open %s\n", urnd);
return -1;
}
if (read(fd, dest, len) != len)
{
printf("cannot read from %s\n", urnd);
close(fd);
return -2;
}
close(fd);
return len;
}
int parseLengthField(const unsigned char *pkt, int *len)
{
int i;
*len = 0;
if (!(*pkt & 0x80))
{
*len = *pkt;
return 1;
}
for (i = 0; i < (pkt[0] & 0x7F); ++i)
{
*len <<= 8;
*len |= pkt[i + 1];
}
return (pkt[0] & 0x7F) + 1;
}
int add_padding(uint8_t *dest, unsigned int len, unsigned int blocklen)
{
uint8_t padding = 0x80;
int count = 0;
while (len & (blocklen - 1))
{
*dest++ = padding;
++len;
++count;
padding = 0;
}
return count;
}
static int get_bin_from_nibble(int in)
{
if ((in >= '0') && (in <= '9'))
return in - 0x30;
if ((in >= 'A') && (in <= 'Z'))
return in - 0x41 + 10;
if ((in >= 'a') && (in <= 'z'))
return in - 0x61 + 10;
printf("fixme: unsupported chars in hostid\n");
return 0;
}
void str2bin(uint8_t *dst, char *data, int len)
{
int i;
for (i = 0; i < len; i += 2)
* dst++ = (get_bin_from_nibble(data[i]) << 4) | get_bin_from_nibble(data[i + 1]);
}
uint32_t UINT32(const unsigned char *in, unsigned int len)
{
uint32_t val = 0;
unsigned int i;
for (i = 0; i < len; i++)
{
val <<= 8;
val |= *in++;
}
return val;
}
int BYTE32(unsigned char *dest, uint32_t val)
{
*dest++ = val >> 24;
*dest++ = val >> 16;
*dest++ = val >> 8;
*dest++ = val;
return 4;
}
int BYTE16(unsigned char *dest, uint16_t val)
{
*dest++ = val >> 8;
*dest++ = val;
return 2;
}