}
//least significant bit first
-uint32_t bytebits_to_byteLSBF(uint8_t* src, size_t numbits)
+uint32_t bytebits_to_byteLSBF(uint8_t *src, size_t numbits)
{
uint32_t num = 0;
for(int i = 0 ; i < numbits ; i++)
{
- num = (num << 1) | (*src);
- src++;
+ num = (num << 1) | *(src + (numbits-(i+1)));
}
return num;
}
// by marshmellow
// takes a array of binary values, start position, length of bits per parity (includes parity bit),
-// Parity Type (1 for odd 0 for even), and binary Length (length to run)
+// Parity Type (1 for odd; 0 for even; 2 for just drop it), and binary Length (length to run)
size_t removeParity(uint8_t *BitStream, size_t startIdx, uint8_t pLen, uint8_t pType, size_t bLen)
{
uint32_t parityWd = 0;
}
j--;
// if parity fails then return 0
+ if (pType != 2) {
if (parityTest(parityWd, pLen, pType) == 0) return -1;
+ }
bitCnt+=(pLen-1);
parityWd = 0;
}
// Ask/Biphase Demod then try to locate an ISO 11784/85 ID
// BitStream must contain previously askrawdemod and biphasedemoded data
-int ISO11784demodBI(uint8_t *dest, size_t *size)
+int FDXBdemodBI(uint8_t *dest, size_t *size)
{
//make sure buffer has enough data
if (*size < 128) return -1;
*size = numBits;
return errCnt;
}
+// on successful return 1 otherwise return 0
+int VikingDecode(uint8_t *BitStream,
+ size_t size,
+ size_t *startIdx,
+ uint8_t *id_bits,
+ size_t id_bits_size)
+{
+ //no arguments needed - built this way in case we want this to be a direct call from "data " cmds in the future
+ // otherwise could be a void with no arguments
+ //set defaults
+ uint32_t i = 0;
+ uint32_t lastcheckindex = size - (id_bits_size * 2);
+ int found = 0;
+ while (i < lastcheckindex)
+ {
+ if (memcmp(BitStream + i,id_bits,id_bits_size) == 0)
+ {
+ *startIdx = i;
+ found = 1;
+ break;
+ }
+ i++;
+ }
+ return found;
+}
+
+