本文整理汇总了C++中LOG函数的典型用法代码示例。如果您正苦于以下问题:C++ LOG函数的具体用法?C++ LOG怎么用?C++ LOG使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了LOG函数的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: UPD7759_update
/*
* Update emulation of an uPD7759 output stream
*/
static void UPD7759_update (int chip, INT16 *buffer, int left)
{
struct UPD7759voice *voice = &updadpcm[chip];
int i;
/* see if there's actually any need to generate samples */
LOG(3,(errorlog,"UPD7759_update %d (%d)\n", left, voice->available));
if (left > 0)
{
/* if this voice is active */
if (voice->playing)
{
voice->available -= left;
if( upd7759_intf->mode == UPD7759_SLAVE_MODE )
{
while( left-- > 0 )
{
*buffer++ = voice->data[voice->tail];
#if OVERSAMPLE
if( (voice->counter++ % OVERSAMPLE) == 0 )
#endif
voice->tail = (voice->tail + 1) % DATA_MAX;
}
}
else
{
unsigned char *base = voice->base;
int val;
#if OVERSAMPLING
int i, delta;
#endif
while( left > 0 )
{
/* compute the new amplitude and update the current voice->step */
val = base[(voice->sample / 2) & voice->mask] >> (((voice->sample & 1) << 2) ^ 4);
voice->step = FALL_OFF(voice->step) + index_shift[val & (INDEX_SHIFT_MAX-1)];
if (voice->step > STEP_MAX) voice->step = STEP_MAX;
else if (voice->step < STEP_MIN) voice->step = STEP_MIN;
voice->signal = FALL_OFF(voice->signal) + diff_lookup[voice->step * 16 + (val & 15)];
if (voice->signal > SIGNAL_MAX) voice->signal = SIGNAL_MAX;
else if (voice->signal < SIGNAL_MIN) voice->signal = SIGNAL_MIN;
#if OVERSAMPLING
i = 0;
delta = voice->signal - voice->old_signal;
while (voice->counter > 0 && left > 0)
{
*sample++ = voice->old_signal + delta * i / oversampling;
if (++i == oversampling) i = 0;
voice->counter -= voice->freq;
left--;
}
voice->old_signal = voice->signal;
#else
while (voice->counter > 0 && left > 0)
{
*buffer++ = voice->signal;
voice->counter -= voice->freq;
left--;
}
#endif
voice->counter += emulation_rate;
/* next! */
if( ++voice->sample > voice->count )
{
while (left-- > 0)
{
*buffer++ = voice->signal;
voice->signal = FALL_OFF(voice->signal);
}
voice->playing = 0;
break;
}
}
}
}
else
{
/* voice is not playing */
for (i = 0; i < left; i++)
示例2: ChangeTimeSpeedFunc
void ChangeTimeSpeedFunc(unsigned long newRate)
{
kSpeedRate = newRate / 1000.0f;
LOG("New Speed Rate:");
LOG(kSpeedRate);
}
示例3: hid_init
//.........这里部分代码省略.........
if (res >= 0) {
/* Serial Number */
if (desc.iSerialNumber > 0)
cur_dev->serial_number =
get_usb_string(handle, desc.iSerialNumber);
/* Manufacturer and Product strings */
if (desc.iManufacturer > 0)
cur_dev->manufacturer_string =
get_usb_string(handle, desc.iManufacturer);
if (desc.iProduct > 0)
cur_dev->product_string =
get_usb_string(handle, desc.iProduct);
#ifdef INVASIVE_GET_USAGE
{
/*
This section is removed because it is too
invasive on the system. Getting a Usage Page
and Usage requires parsing the HID Report
descriptor. Getting a HID Report descriptor
involves claiming the interface. Claiming the
interface involves detaching the kernel driver.
Detaching the kernel driver is hard on the system
because it will unclaim interfaces (if another
app has them claimed) and the re-attachment of
the driver will sometimes change /dev entry names.
It is for these reasons that this section is
#if 0. For composite devices, use the interface
field in the hid_device_info struct to distinguish
between interfaces. */
unsigned char data[256];
#ifdef DETACH_KERNEL_DRIVER
int detached = 0;
/* Usage Page and Usage */
res = libusb_kernel_driver_active(handle, interface_num);
if (res == 1) {
res = libusb_detach_kernel_driver(handle, interface_num);
if (res < 0)
LOG("Couldn't detach kernel driver, even though a kernel driver was attached.");
else
detached = 1;
}
#endif
res = libusb_claim_interface(handle, interface_num);
if (res >= 0) {
/* Get the HID Report Descriptor. */
res = libusb_control_transfer(handle, LIBUSB_ENDPOINT_IN|LIBUSB_RECIPIENT_INTERFACE, LIBUSB_REQUEST_GET_DESCRIPTOR, (LIBUSB_DT_REPORT << 8)|interface_num, 0, data, sizeof(data), 5000);
if (res >= 0) {
unsigned short page=0, usage=0;
/* Parse the usage and usage page
out of the report descriptor. */
get_usage(data, res, &page, &usage);
cur_dev->usage_page = page;
cur_dev->usage = usage;
}
else
LOG("libusb_control_transfer() for getting the HID report failed with %d\n", res);
/* Release the interface */
res = libusb_release_interface(handle, interface_num);
if (res < 0)
LOG("Can't release the interface.\n");
}
else
LOG("Can't claim interface %d\n", res);
#ifdef DETACH_KERNEL_DRIVER
/* Re-attach kernel driver if necessary. */
if (detached) {
res = libusb_attach_kernel_driver(handle, interface_num);
if (res < 0)
LOG("Couldn't re-attach kernel driver.\n");
}
#endif
}
#endif /* INVASIVE_GET_USAGE */
libusb_close(handle);
}
/* VID/PID */
cur_dev->vendor_id = dev_vid;
cur_dev->product_id = dev_pid;
/* Release Number */
cur_dev->release_number = desc.bcdDevice;
/* Interface Number */
cur_dev->interface_number = interface_num;
}
}
} /* altsettings */
} /* interfaces */
libusb_free_config_descriptor(conf_desc);
}
}
libusb_free_device_list(devs, 1);
return root;
}
示例4: LOG
void Script::AddArgument(ElementHandle argument) {
LOG(TRACE) << "Entering Script::AddArgument(ElementHandle)";
this->AddArgument(argument->element());
}
示例5: LOG
Status Database::dropCollection( OperationContext* txn, const StringData& fullns ) {
LOG(1) << "dropCollection: " << fullns << endl;
massertNamespaceNotIndex( fullns, "dropCollection" );
Collection* collection = getCollection( txn, fullns );
if ( !collection ) {
// collection doesn't exist
return Status::OK();
}
{
NamespaceString s( fullns );
verify( s.db() == _name );
if( s.isSystem() ) {
if( s.coll() == "system.profile" ) {
if ( _profile != 0 )
return Status( ErrorCodes::IllegalOperation,
"turn off profiling before dropping system.profile collection" );
}
else {
return Status( ErrorCodes::IllegalOperation, "can't drop system ns" );
}
}
}
BackgroundOperation::assertNoBgOpInProgForNs( fullns );
audit::logDropCollection( currentClient.get(), fullns );
try {
Status s = collection->getIndexCatalog()->dropAllIndexes(txn, true);
if ( !s.isOK() ) {
warning() << "could not drop collection, trying to drop indexes"
<< fullns << " because of " << s.toString();
return s;
}
}
catch( DBException& e ) {
stringstream ss;
ss << "drop: dropIndexes for collection failed. cause: " << e.what();
ss << ". See http://dochub.mongodb.org/core/data-recovery";
warning() << ss.str() << endl;
return Status( ErrorCodes::InternalError, ss.str() );
}
verify( collection->_details->getTotalIndexCount( txn ) == 0 );
LOG(1) << "\t dropIndexes done" << endl;
Top::global.collectionDropped( fullns );
Status s = _dbEntry->dropCollection( txn, fullns );
_clearCollectionCache( txn, fullns ); // we want to do this always
if ( !s.isOK() )
return s;
DEV {
// check all index collection entries are gone
string nstocheck = fullns.toString() + ".$";
scoped_lock lk( _collectionLock );
for ( CollectionMap::const_iterator i = _collections.begin();
i != _collections.end();
++i ) {
string temp = i->first;
if ( temp.find( nstocheck ) != 0 )
continue;
log() << "after drop, bad cache entries for: "
<< fullns << " have " << temp;
verify(0);
}
}
return Status::OK();
}
示例6: commit
void commit( set<DiskLoc>* dupsToDrop,
CurOp* op,
bool mayInterrupt ) {
Timer timer;
IndexCatalogEntry* entry = _real->_btreeState;
bool dupsAllowed = !entry->descriptor()->unique() ||
ignoreUniqueIndex(entry->descriptor());
bool dropDups = entry->descriptor()->dropDups() || inDBRepair;
BtreeBuilder<V> btBuilder(dupsAllowed, entry);
BSONObj keyLast;
scoped_ptr<BSONObjExternalSorter::Iterator> i( _phase1.sorter->iterator() );
// verifies that pm and op refer to the same ProgressMeter
ProgressMeter& pm = op->setMessage("Index Bulk Build: (2/3) btree bottom up",
"Index: (2/3) BTree Bottom Up Progress",
_phase1.nkeys,
10);
while( i->more() ) {
RARELY killCurrentOp.checkForInterrupt( !mayInterrupt );
ExternalSortDatum d = i->next();
try {
if ( !dupsAllowed && dropDups ) {
LastError::Disabled led( lastError.get() );
btBuilder.addKey(d.first, d.second);
}
else {
btBuilder.addKey(d.first, d.second);
}
}
catch( AssertionException& e ) {
if ( dupsAllowed ) {
// unknown exception??
throw;
}
if( e.interrupted() ) {
killCurrentOp.checkForInterrupt();
}
if ( ! dropDups )
throw;
/* we could queue these on disk, but normally there are very few dups,
* so instead we keep in ram and have a limit.
*/
if ( dupsToDrop ) {
dupsToDrop->insert(d.second);
uassert( 10092,
"too may dups on index build with dropDups=true",
dupsToDrop->size() < 1000000 );
}
}
pm.hit();
}
pm.finished();
op->setMessage("Index Bulk Build: (3/3) btree-middle",
"Index: (3/3) BTree Middle Progress");
LOG(timer.seconds() > 10 ? 0 : 1 ) << "\t done building bottom layer, going to commit";
btBuilder.commit( mayInterrupt );
if ( btBuilder.getn() != _phase1.nkeys && ! dropDups ) {
warning() << "not all entries were added to the index, probably some "
<< "keys were too large" << endl;
}
}
示例7: SendSOAPRequest
UPnPResultCode MythXMLClient::GetConnectionInfo( const QString &sPin, DatabaseParams *pParams, QString &sMsg )
{
if (pParams == NULL)
return UPnPResult_InvalidArgs;
int nErrCode = 0;
QString sErrDesc;
QStringMap list;
sMsg.clear();
list.insert( "Pin", sPin );
QDomDocument xmlResults = SendSOAPRequest(
"GetConnectionInfo", list, nErrCode, sErrDesc, m_bInQtThread);
// --------------------------------------------------------------
// Is this a valid response?
// --------------------------------------------------------------
QDomNode oNode = xmlResults.namedItem( "GetConnectionInfoResult" );
if (UPnPResult_Success == nErrCode && !oNode.isNull())
{
QDomNode dbNode = oNode.namedItem( "Database" );
pParams->dbHostName = GetNodeValue( dbNode, "Host" , QString());
pParams->dbPort = GetNodeValue( dbNode, "Port" , 0 );
pParams->dbUserName = GetNodeValue( dbNode, "UserName" , QString());
pParams->dbPassword = GetNodeValue( dbNode, "Password" , QString());
pParams->dbName = GetNodeValue( dbNode, "Name" , QString());
pParams->dbType = GetNodeValue( dbNode, "Type" , QString());
QDomNode wolNode = oNode.namedItem( "WOL" );
pParams->wolEnabled = GetNodeValue( wolNode, "Enabled" , false );
pParams->wolReconnect = GetNodeValue( wolNode, "Reconnect", 0 );
pParams->wolRetry = GetNodeValue( wolNode, "Retry" , 0 );
pParams->wolCommand = GetNodeValue( wolNode, "Command" , QString());
QDomNode verNode = oNode.namedItem( "Version" );
pParams->verVersion = GetNodeValue( verNode, "Version" , "" );
pParams->verBranch = GetNodeValue( verNode, "Branch" , "" );
pParams->verProtocol = GetNodeValue( verNode, "Protocol" , "" );
pParams->verBinary = GetNodeValue( verNode, "Binary" , "" );
pParams->verSchema = GetNodeValue( verNode, "Schema" , "" );
if ((pParams->verProtocol != MYTH_PROTO_VERSION) ||
(pParams->verSchema != MYTH_DATABASE_VERSION))
// incompatible version, we cannot use this backend
{
LOG(VB_GENERAL, LOG_ERR,
QString("MythXMLClient::GetConnectionInfo Failed - "
"Version Mismatch (%1,%2) != (%3,%4)")
.arg(pParams->verProtocol)
.arg(pParams->verSchema)
.arg(MYTH_PROTO_VERSION)
.arg(MYTH_DATABASE_VERSION));
sMsg = QObject::tr("Version Mismatch", "UPNP Errors");
return UPnPResult_ActionFailed;
}
return UPnPResult_Success;
}
else
{
sMsg = sErrDesc;
LOG(VB_GENERAL, LOG_ERR,
QString("MythXMLClient::GetConnectionInfo Failed - (%1) %2")
.arg(nErrCode) .arg(sErrDesc));
}
if (( nErrCode == UPnPResult_HumanInterventionRequired ) ||
( nErrCode == UPnPResult_ActionNotAuthorized ) ||
( nErrCode == 501 ))
{
// Service calls no longer return UPnPResult codes,
// convert standard 501 to UPnPResult code for now.
sMsg = QObject::tr("Not Authorized", "UPNP Errors");
return UPnPResult_ActionNotAuthorized;
}
sMsg = QObject::tr("Unknown Error", "UPNP Errors");
return UPnPResult_ActionFailed;
}
示例8: icscf_db_get_nds
/**
* Get the NDS list from the database.
* @param d - array of string to fill with the db contents
* @returns 1 on success, 0 on error
*/
int icscf_db_get_nds(str *d[])
{
db_key_t keys_ret[] = {"trusted_domain"};
db_res_t * res = 0 ;
str s;
int i;
if (!icscf_db_check_init(hdl_nds))
goto error;
DBG("DBG:"M_NAME":icscf_db_get_nds: fetching list of NDS for I-CSCF \n");
if (dbf.query(hdl_nds, 0, 0, 0, keys_ret, 0, 1, NULL, & res) < 0) {
LOG(L_ERR, "ERR:"M_NAME":icscf_db_get_nds: db_query failed\n");
goto error;
}
if (res->n == 0) {
DBG("DBG:"M_NAME":icscf_db_get_nds: I-CSCF has no NDS trusted domains in db\n");
*d=shm_malloc(sizeof(str));
if (*d==NULL){
LOG(L_ERR, "ERR:"M_NAME":icscf_db_get_nds: failed shm_malloc for 0 domains\n");
goto error;
}
(*d)[0].s=0;
(*d)[0].len=0;
}
else {
*d=shm_malloc(sizeof(str)*(res->n+1));
if (*d==NULL){
LOG(L_ERR, "ERR:"M_NAME":icscf_db_get_nds: failed shm_malloc for %d domains\n",
res->n);
goto error;
}
for(i=0;i<res->n;i++){
s.s = (char*) res->rows[i].values[0].val.string_val;
s.len = strlen(s.s);
(*d)[i].s = shm_malloc(s.len);
if ((*d)[i].s==NULL) {
LOG(L_ERR, "ERR:"M_NAME":icscf_db_get_nds: failed shm_malloc for %d bytes\n",
s.len);
(*d)[i].len = 0;
}else{
(*d)[i].len = s.len;
memcpy((*d)[i].s,s.s,s.len);
}
}
(*d)[res->n].s=0;
(*d)[res->n].len=0;
}
LOG(L_INFO, "INF:"M_NAME":icscf_db_get_nds: Loaded %d trusted domains\n",
res->n);
dbf.free_result( hdl_nds, res);
return 1;
error:
if (res)
dbf.free_result( hdl_nds, res);
*d=shm_malloc(sizeof(str));
if (*d==NULL)
LOG(L_ERR, "ERR:"M_NAME":icscf_db_get_nds: failed shm_malloc for 0 domains\n");
else {
(*d)[0].s=0;
(*d)[0].len=0;
}
return 0;
}
示例9: repairDatabasesAndCheckVersion
void repairDatabasesAndCheckVersion(OperationContext* txn) {
LOG(1) << "enter repairDatabases (to check pdfile version #)";
ScopedTransaction transaction(txn, MODE_X);
Lock::GlobalWrite lk(txn->lockState());
vector<string> dbNames;
StorageEngine* storageEngine = txn->getServiceContext()->getGlobalStorageEngine();
storageEngine->listDatabases(&dbNames);
// Repair all databases first, so that we do not try to open them if they are in bad shape
if (storageGlobalParams.repair) {
invariant(!storageGlobalParams.readOnly);
for (vector<string>::const_iterator i = dbNames.begin(); i != dbNames.end(); ++i) {
const string dbName = *i;
LOG(1) << " Repairing database: " << dbName;
fassert(18506, repairDatabase(txn, storageEngine, dbName));
}
}
const repl::ReplSettings& replSettings = repl::getGlobalReplicationCoordinator()->getSettings();
// On replica set members we only clear temp collections on DBs other than "local" during
// promotion to primary. On pure slaves, they are only cleared when the oplog tells them
// to. The local DB is special because it is not replicated. See SERVER-10927 for more
// details.
const bool shouldClearNonLocalTmpCollections =
!(checkIfReplMissingFromCommandLine(txn) || replSettings.usingReplSets() ||
replSettings.isSlave());
const bool shouldDoCleanupForSERVER23299 = isSubjectToSERVER23299(txn);
for (vector<string>::const_iterator i = dbNames.begin(); i != dbNames.end(); ++i) {
const string dbName = *i;
LOG(1) << " Recovering database: " << dbName;
Database* db = dbHolder().openDb(txn, dbName);
invariant(db);
// First thing after opening the database is to check for file compatibility,
// otherwise we might crash if this is a deprecated format.
auto status = db->getDatabaseCatalogEntry()->currentFilesCompatible(txn);
if (!status.isOK()) {
if (status.code() == ErrorCodes::CanRepairToDowngrade) {
// Convert CanRepairToDowngrade statuses to MustUpgrade statuses to avoid logging a
// potentially confusing and inaccurate message.
//
// TODO SERVER-24097: Log a message informing the user that they can start the
// current version of mongod with --repair and then proceed with normal startup.
status = {ErrorCodes::MustUpgrade, status.reason()};
}
severe() << "Unable to start mongod due to an incompatibility with the data files and"
" this version of mongod: "
<< redact(status);
severe() << "Please consult our documentation when trying to downgrade to a previous"
" major release";
quickExit(EXIT_NEED_UPGRADE);
return;
}
// Check if admin.system.version contains an invalid featureCompatibilityVersion.
// If a valid featureCompatibilityVersion is present, cache it as a server parameter.
if (dbName == "admin") {
if (Collection* versionColl =
db->getCollection(FeatureCompatibilityVersion::kCollection)) {
BSONObj featureCompatibilityVersion;
if (Helpers::findOne(txn,
versionColl,
BSON("_id" << FeatureCompatibilityVersion::kParameterName),
featureCompatibilityVersion)) {
auto version = FeatureCompatibilityVersion::parse(featureCompatibilityVersion);
if (!version.isOK()) {
severe() << version.getStatus();
fassertFailedNoTrace(40283);
}
serverGlobalParams.featureCompatibility.version.store(version.getValue());
}
}
}
// Major versions match, check indexes
const string systemIndexes = db->name() + ".system.indexes";
Collection* coll = db->getCollection(systemIndexes);
unique_ptr<PlanExecutor> exec(
InternalPlanner::collectionScan(txn, systemIndexes, coll, PlanExecutor::YIELD_MANUAL));
BSONObj index;
PlanExecutor::ExecState state;
while (PlanExecutor::ADVANCED == (state = exec->getNext(&index, NULL))) {
const BSONObj key = index.getObjectField("key");
const string plugin = IndexNames::findPluginName(key);
if (db->getDatabaseCatalogEntry()->isOlderThan24(txn)) {
if (IndexNames::existedBefore24(plugin)) {
continue;
}
//.........这里部分代码省略.........
示例10: register_stuff
/*
* This function tries to register the AFP DNS
* SRV service type.
*/
static void register_stuff(const AFPObj *obj) {
uint port;
const struct vol *volume;
DSI *dsi;
char name[MAXINSTANCENAMELEN+1];
DNSServiceErrorType error;
TXTRecordRef txt_adisk;
TXTRecordRef txt_devinfo;
char tmpname[256];
// If we had already registered, then we will unregister and re-register
if(svc_refs) unregister_stuff();
/* Register our service, prepare the TXT record */
TXTRecordCreate(&txt_adisk, 0, NULL);
if( 0 > TXTRecordPrintf(&txt_adisk, "sys", "waMa=0,adVF=0x100") ) {
LOG ( log_error, logtype_afpd, "Could not create Zeroconf TXTRecord for sys");
goto fail;
}
/* Build AFP volumes list */
int i = 0;
for (volume = getvolumes(); volume; volume = volume->v_next) {
if (convert_string(CH_UCS2, CH_UTF8_MAC, volume->v_u8mname, -1, tmpname, 255) <= 0) {
LOG ( log_error, logtype_afpd, "Could not set Zeroconf volume name for TimeMachine");
goto fail;
}
if (volume->v_flags & AFPVOL_TM) {
if (volume->v_uuid) {
LOG(log_info, logtype_afpd, "Registering volume '%s' with UUID: '%s' for TimeMachine",
volume->v_localname, volume->v_uuid);
if( 0 > TXTRecordKeyPrintf(&txt_adisk, "dk%u", i++, "adVN=%s,adVF=0xa1,adVU=%s",
tmpname, volume->v_uuid) ) {
LOG ( log_error, logtype_afpd, "Could not set Zeroconf TXTRecord for dk%u", i);
goto fail;
}
} else {
LOG(log_warning, logtype_afpd, "Registering volume '%s' for TimeMachine. But UUID is invalid.",
volume->v_localname);
if( 0 > TXTRecordKeyPrintf(&txt_adisk, "dk%u", i++, "adVN=%s,adVF=0xa1", tmpname) ) {
LOG ( log_error, logtype_afpd, "Could not set Zeroconf TXTRecord for dk%u", i);
goto fail;
}
}
}
}
/* AFP_DNS_SERVICE_TYPE */
svc_ref_count = 1;
if (i) {
/* ADISK_SERVICE_TYPE */
svc_ref_count++;
}
if (obj->options.mimicmodel) {
/* DEV_INFO_SERVICE_TYPE */
svc_ref_count++;
}
// Allocate the memory to store our service refs
svc_refs = calloc(svc_ref_count, sizeof(DNSServiceRef));
assert(svc_refs);
svc_ref_count = 0;
port = atoi(obj->options.port);
if (convert_string(obj->options.unixcharset,
CH_UTF8,
obj->options.hostname,
-1,
name,
MAXINSTANCENAMELEN) <= 0) {
LOG(log_error, logtype_afpd, "Could not set Zeroconf instance name");
goto fail;
}
LOG(log_info, logtype_afpd, "Registering server '%s' with Bonjour",
dsi->bonjourname);
error = DNSServiceRegister(&svc_refs[svc_ref_count++],
0, // no flags
0, // all network interfaces
name,
AFP_DNS_SERVICE_TYPE,
"", // default domains
NULL, // default host name
htons(port),
0, // length of TXT
NULL, // no TXT
RegisterReply, // callback
NULL); // no context
if (error != kDNSServiceErr_NoError) {
LOG(log_error, logtype_afpd, "Failed to add service: %s, error=%d",
AFP_DNS_SERVICE_TYPE, error);
goto fail;
//.........这里部分代码省略.........
示例11: LOG
// Called before quitting
bool j1Input::CleanUp()
{
LOG("Quitting SDL event subsystem");
SDL_QuitSubSystem(SDL_INIT_EVENTS);
return true;
}
示例12: free
/* This function returns a newly allocated wide string containing the USB
device string numbered by the index. The returned string must be freed
by using free(). */
static wchar_t *get_usb_string(libusb_device_handle *dev, uint8_t idx)
{
char buf[512];
int len;
wchar_t *str = NULL;
wchar_t wbuf[256];
/* iconv variables */
iconv_t ic;
size_t inbytes;
size_t outbytes;
size_t res;
const char *inptr;
char *outptr;
/* Determine which language to use. */
uint16_t lang;
lang = get_usb_code_for_current_locale();
if (!is_language_supported(dev, lang))
lang = get_first_language(dev);
/* Get the string from libusb. */
len = libusb_get_string_descriptor(dev,
idx,
lang,
(unsigned char*)buf,
sizeof(buf));
if (len < 0)
return NULL;
/* buf does not need to be explicitly NULL-terminated because
it is only passed into iconv() which does not need it. */
/* Initialize iconv. */
ic = iconv_open("WCHAR_T", "UTF-16LE");
if (ic == (iconv_t)-1) {
LOG("iconv_open() failed\n");
return NULL;
}
/* Convert to native wchar_t (UTF-32 on glibc/BSD systems).
Skip the first character (2-bytes). */
inptr = buf+2;
inbytes = len-2;
outptr = (char*) wbuf;
outbytes = sizeof(wbuf);
res = iconv(ic, &inptr, &inbytes, &outptr, &outbytes);
if (res == (size_t)-1) {
LOG("iconv() failed\n");
goto err;
}
/* Write the terminating NULL. */
wbuf[sizeof(wbuf)/sizeof(wbuf[0])-1] = 0x00000000;
if (outbytes >= sizeof(wbuf[0]))
*((wchar_t*)outptr) = 0x00000000;
/* Allocate and copy the string. */
str = wcsdup(wbuf);
err:
iconv_close(ic);
return str;
}
示例13: read_callback
static void read_callback(struct libusb_transfer *transfer)
{
hid_device *dev = transfer->user_data;
int res;
if (transfer->status == LIBUSB_TRANSFER_COMPLETED) {
struct input_report *rpt = malloc(sizeof(*rpt));
rpt->data = malloc(transfer->actual_length);
memcpy(rpt->data, transfer->buffer, transfer->actual_length);
rpt->len = transfer->actual_length;
rpt->next = NULL;
pthread_mutex_lock(&dev->mutex);
/* Attach the new report object to the end of the list. */
if (dev->input_reports == NULL) {
/* The list is empty. Put it at the root. */
dev->input_reports = rpt;
pthread_cond_signal(&dev->condition);
}
else {
/* Find the end of the list and attach. */
struct input_report *cur = dev->input_reports;
int num_queued = 0;
while (cur->next != NULL) {
cur = cur->next;
num_queued++;
}
cur->next = rpt;
/* Pop one off if we've reached 30 in the queue. This
way we don't grow forever if the user never reads
anything from the device. */
if (num_queued > 30) {
return_data(dev, NULL, 0);
}
}
pthread_mutex_unlock(&dev->mutex);
}
else if (transfer->status == LIBUSB_TRANSFER_CANCELLED) {
dev->shutdown_thread = 1;
return;
}
else if (transfer->status == LIBUSB_TRANSFER_NO_DEVICE) {
dev->shutdown_thread = 1;
return;
}
else if (transfer->status == LIBUSB_TRANSFER_TIMED_OUT) {
//LOG("Timeout (normal)\n");
}
else {
LOG("Unknown transfer code: %d\n", transfer->status);
}
/* Re-submit the transfer object. */
res = libusb_submit_transfer(transfer);
if (res != 0) {
LOG("Unable to submit URB. libusb error code: %d\n", res);
dev->shutdown_thread = 1;
}
}
示例14: find_sample
static int find_sample(int num, int sample_num,struct UPD7759sample *sample)
{
int j;
int nextoff = 0;
unsigned char *memrom;
unsigned char *header; /* upd7759 has a 4 byte what we assume is an identifier (bytes 1-4)*/
unsigned char *data;
memrom = memory_region(upd7759_intf->region[num]);
numsam = (unsigned int)memrom[0]; /* get number of samples from sound rom */
header = &(memrom[1]);
if (memcmp (header, "\x5A\xA5\x69\x55",4) == 0)
{
LOG(1,(errorlog,"uPD7759 header verified\n"));
}
else
{
LOG(1,(errorlog,"uPD7759 header verification failed\n"));
}
LOG(1,(errorlog,"Number of samples in UPD7759 rom = %d\n",numsam));
/* move the header pointer to the start of the sample offsets */
header = &(memrom[5]);
if (sample_num > numsam) return 0; /* sample out of range */
nextoff = 2 * sample_num;
sample->offset = ((((unsigned int)(header[nextoff]))<<8)+(header[nextoff+1]))*2;
data = &memory_region(upd7759_intf->region[num])[sample->offset];
/* guesswork, probably wrong */
j = 0;
if (!data[j]) j++;
if ((data[j] & 0xf0) != 0x50) j++;
// Added and Modified by Takahiro Nogi. 1999/10/28
#if 0 // original
switch (data[j])
{
case 0x53: sample->freq = 8000; break;
case 0x59: sample->freq = 6000; break;
case 0x5f: sample->freq = 5000; break;
default:
sample->freq = 5000;
}
#else // modified by Takahiro Nogi. 1999/10/28
switch (data[j] & 0x1f)
{
case 0x13: sample->freq = 8000; break;
case 0x19: sample->freq = 6000; break;
case 0x1f: sample->freq = 5000; break;
default: // ???
sample->freq = 5000;
}
#endif
if (sample_num == numsam)
{
sample->length = 0x20000 - sample->offset;
}
else
sample->length = ((((unsigned int)(header[nextoff+2]))<<8)+(header[nextoff+3]))*2 -
((((unsigned int)(header[nextoff]))<<8)+(header[nextoff+1]))*2;
if (errorlog)
{
data = &memory_region(upd7759_intf->region[num])[sample->offset];
fprintf( errorlog,"play sample %3d, offset $%06x, length %5d, freq = %4d [data $%02x $%02x $%02x]\n",
sample_num,
sample->offset,
sample->length,
sample->freq,
data[0],data[1],data[2]);
}
return 1;
}