Beispiel #1
0
void mspmsg_RAW_GPS_parse(struct S_MSP_RAW_GPS *target, struct S_MSG *msg) {
	dbg(DBG_MSP|DBG_VERBOSE,"Parsing MSP_RAW_GPS\n");
	target->fix = *msg->data;
	target->num_sat = *(msg->data+1);
	target->lat = *reverse32(msg->data+2);
	target->lon = *reverse32(msg->data+6);
	target->alt = *reverse16(msg->data+10);
	target->speed = *reverse16(msg->data+12);
	target->ground_course = *reverse16(msg->data+14);
}
Beispiel #2
0
void mspmsg_WP_parse(struct S_MSP_WP *target, struct S_MSG *msg) {
	dbg(DBG_MSP|DBG_VERBOSE,"Parsing MSP_WP\n");
	target->wp_no = *msg->data;
	target->action = *(msg->data+1);
	target->lat = *reverse32(msg->data+2);
	target->lon = *reverse32(msg->data+6);
	target->alt_hold = *reverse32(msg->data+10);
	target->param1 = *reverse16(msg->data+14);
	target->param2 = *reverse16(msg->data+16);
	target->param3 = *reverse16(msg->data+18);
	target->flag = *reverse16(msg->data+20);
}
Beispiel #3
0
bool TessdataManager::Init(const char *data_file_name, int debug_level) {
  int i;
  debug_level_ = debug_level;
  data_file_ = fopen(data_file_name, "rb");
  if (data_file_ == NULL) {
    tprintf("Error opening data file %s\n", data_file_name);
    tprintf("Please make sure the TESSDATA_PREFIX environment variable is set "
            "to the parent directory of your \"tessdata\" directory.\n");
    return false;
  }
  fread(&actual_tessdata_num_entries_, sizeof(inT32), 1, data_file_);
  swap_ = (actual_tessdata_num_entries_ > kMaxNumTessdataEntries);
  if (swap_) {
    actual_tessdata_num_entries_ = reverse32(actual_tessdata_num_entries_);
  }
  ASSERT_HOST(actual_tessdata_num_entries_ <= TESSDATA_NUM_ENTRIES);
  fread(offset_table_, sizeof(inT64),
        actual_tessdata_num_entries_, data_file_);
  if (swap_) {
    for (i = 0 ; i < actual_tessdata_num_entries_; ++i) {
      offset_table_[i] = reverse64(offset_table_[i]);
    }
  }
  if (debug_level_) {
    tprintf("TessdataManager loaded %d types of tesseract data files.\n",
            actual_tessdata_num_entries_);
    for (i = 0; i < actual_tessdata_num_entries_; ++i) {
      tprintf("Offset for type %d is %lld\n", i, offset_table_[i]);
    }
  }
  return true;
}
Beispiel #4
0
DictionaryReader::DictionaryReader(IBitStream *bstr)
    : _bstr(bstr), _isSupported(true), _decoderLoaded(false)
{
    _bstr->readSome(&_header, sizeof(LSDHeader));
    if (strcmp("LingVo", _header.magic) != 0)
        throw NotLSDException();
    if (_header.version == 0x142001 || _header.version == 0x152001) {
        _decoder.reset(new UserDictionaryDecoder());
    } else if (_header.version == 0x141004) {
        _decoder.reset(new SystemDictionaryDecoder(false));
    } else if (_header.version == 0x145001 || _header.version == 0x155001) {
        _decoder.reset(new AbbreviationDictionaryDecoder());
    } else if (_header.version == 0x151005) {
        _decoder.reset(new SystemDictionaryDecoder(true));
    } else {
        _isSupported = false;
        return;
    }

    uint8_t nameLen;
    bstr->readSome(&nameLen, 1);
    _name = readUnicodeString(bstr, nameLen, false);
    auto firstHeading = readUnicodeString(bstr, bstr->read(8), false); (void)firstHeading;
    auto lastHeading = readUnicodeString(bstr, bstr->read(8), false); (void)lastHeading;    
    auto capitals = readUnicodeString(bstr, reverse32(bstr->read(32)), false); (void)capitals;
    uint16_t iconLen;
    bstr->readSome(&iconLen, 2);
    _icon.resize(iconLen);
    bstr->readSome(&_icon[0], iconLen);
    bstr->seek(bstr->tell() + 4); // checksum
    bstr->readSome(&_pagesEnd, 4);
    bstr->readSome(&_overlayData, 4);
}
bool TessdataManager::Init(const char *data_file_name, int debug_level) {
  int i;
  debug_level_ = debug_level;
  data_file_ = fopen(data_file_name, "rb");
  if (data_file_ == NULL) {
// WILLUS MOD:  Insert "if (debug_level_)" line below to avoid printing error msg.
    if (debug_level_)
        tprintf("Error opening data file %s\n", data_file_name);
    return false;
  }
  fread(&actual_tessdata_num_entries_, sizeof(inT32), 1, data_file_);
  bool swap = (actual_tessdata_num_entries_ > kMaxNumTessdataEntries);
  if (swap) {
    actual_tessdata_num_entries_ = reverse32(actual_tessdata_num_entries_);
  }
  ASSERT_HOST(actual_tessdata_num_entries_ <= TESSDATA_NUM_ENTRIES);
  fread(offset_table_, sizeof(inT64),
        actual_tessdata_num_entries_, data_file_);
  if (swap) {
    for (i = 0 ; i < actual_tessdata_num_entries_; ++i) {
      offset_table_[i] = reverse64(offset_table_[i]);
    }
  }
  if (debug_level_) {
    tprintf("TessdataManager loaded %d types of tesseract data files.\n",
            actual_tessdata_num_entries_);
    for (i = 0; i < actual_tessdata_num_entries_; ++i) {
      tprintf("Offset for type %d is %lld\n", i, offset_table_[i]);
    }
  }
  return true;
}
static ERL_NIF_TERM tree_pair_dsha256_hash_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
    ErlNifBinary bin1, bin2;
    if (!enif_inspect_binary(env, argv[0], &bin1) || bin1.size != 32 || !enif_inspect_binary(env, argv[1], &bin2) || bin2.size != 32)
        return enif_make_badarg(env);
    
    ERL_NIF_TERM ret;
    unsigned char in[64];
    unsigned char *final_hash = enif_make_new_binary(env, 32, &ret);
    reverse32(&in[0], bin1.data);
    reverse32(&in[32], bin2.data);
    double_sha256(in, 64, final_hash);
    reverse32(final_hash, final_hash);
    
    return ret;
}
Beispiel #7
0
/**
 * Transfer a 25bit packet to RTC6705
 * This will just send it as a 32bit packet LSB meaning
 * extra 0's get truncated on RTC6705 end
 */
static void rtc6705Transfer(uint32_t command)
{
    command = reverse32(command);

    ENABLE_RTC6705;

    spiTransferByte(RTC6705_SPI_INSTANCE, (command >> 24) & 0xFF);
    spiTransferByte(RTC6705_SPI_INSTANCE, (command >> 16) & 0xFF);
    spiTransferByte(RTC6705_SPI_INSTANCE, (command >> 8) & 0xFF);
    spiTransferByte(RTC6705_SPI_INSTANCE, (command >> 0) & 0xFF);

    DISABLE_RTC6705;
}
static ERL_NIF_TERM scrypt_hash_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
    ErlNifBinary bin;
    if (!enif_inspect_binary(env, argv[0], &bin) || bin.size != 80)
        return enif_make_badarg(env);
    
    ERL_NIF_TERM ret;
    unsigned char *final_hash = enif_make_new_binary(env, 32, &ret);
    scrypt_1024_1_1_256(bin.data, final_hash);
    reverse32(final_hash, final_hash);
    
    return ret;
}
static ERL_NIF_TERM dsha256_hash_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
    ErlNifBinary bin;
    if (!enif_inspect_binary(env, argv[0], &bin))
        return enif_make_badarg(env);
    
    ERL_NIF_TERM ret;
    unsigned char *final_hash = enif_make_new_binary(env, 32, &ret);
    double_sha256(bin.data, bin.size, final_hash);
    reverse32(final_hash, final_hash);
    
    return ret;
}
Beispiel #10
0
void mspmsg_MISC_parse(struct S_MSP_MISC *misc, struct S_MSG *msg) {
	dbg(DBG_MSP|DBG_VERBOSE,"Parsing MSP_MISC\n");
	misc->intPowerTrigger1 = *reverse16(msg->data);
	misc->minthrottle = *reverse16(msg->data+2);
	misc->maxthrottle = *reverse16(msg->data+4);
	misc->mincommand = *reverse16(msg->data+6);
	misc->failsafe_throttle = *reverse16(msg->data+8);
	misc->arm = *reverse16(msg->data+10);
	misc->lifetime = *reverse32(msg->data+12);
	misc->mag_declination = *reverse16(msg->data+16);
	misc->vbatscale = *(msg->data+18);
	misc->vbatlevel_warn1 = *(msg->data+19);
	misc->vbatlevel_warn2 = *(msg->data+20);
	misc->vbatlevel_crit = *(msg->data+21);
}
Beispiel #11
0
void mspmsg_SET_MISC_serialize(struct S_MSG *target, struct S_MSP_MISC *src) {
	dbg(DBG_MSP|DBG_VERBOSE,"Preparing MSP_SET_MISC\n");
	target->message_id = MSP_SET_MISC;
	if (src==NULL) {
		target->size = 0;
		return;
	}	    

    memcpy(target->data,reverse16(&src->intPowerTrigger1),2);
    memcpy(target->data+2,reverse16(&src->minthrottle),2);
    memcpy(target->data+4,reverse16(&src->maxthrottle),2);
    memcpy(target->data+6,reverse16(&src->mincommand),2);
    memcpy(target->data+8,reverse16(&src->failsafe_throttle),2);
    memcpy(target->data+10,reverse16(&src->arm),2);
    memcpy(target->data+12,reverse32(&src->lifetime),4);
    memcpy(target->data+16,reverse16(&src->mag_declination),2);
    target->data[18] = src->vbatscale;
    target->data[19] = src->vbatlevel_warn1;	
    target->data[20] = src->vbatlevel_warn2;	
    target->data[21] = src->vbatlevel_crit;	

    target->size = 22;
}
Beispiel #12
0
void mspmsg_ALTITUDE_parse(struct S_MSP_ALTITUDE *target, struct S_MSG *msg) {
	dbg(DBG_MSP|DBG_VERBOSE,"Parsing MSP_ALTITUDE\n");
	target->EstAlt = *reverse32(msg->data);
	target->vario = *reverse16(msg->data+4);
}