Пример #1
0
//matrix determinent
//the original matrix is saved in stead of destoryed, so the copy of 
//matrix is used	
double Matrix::det(void)
{
	McoStatus status;
	int32	i, j, k;
	double	**max, **temp;
	double 	returnval;

	//if not a square matrix, return singular error
	if( _row != _col){
		_set_status(MCO_SINGULAR);
		return 0;
	}
	
	max = (double**)McoMalloc(sizeof( double*)*_row);
	if(!max){
		_set_status(MCO_MEM_ALLOC_ERROR);
		return 0;
	}
	for( j = 0; j < _row; j++){
		max[j] = (double*)McoMalloc(sizeof(double)*_col);
		if(!max[j]){
			_set_status(MCO_MEM_ALLOC_ERROR);
			for(k = j-1; k >= 0; k--)
				McoFree((void *) max[k]);	
			McoFree((void *) max);
			return 0.0;
		}
	}
		
	//copy the original matrix
	for( i = 0; i < _row; i++)
		for( j = 0; j < _col; j++)
			max[i][j] = _m[i][j];

	temp = _m;
	_m = max;
	status = _ludcmp();
	if(status != MCO_SUCCESS){ //singular matrix, everything assigned to 0
		returnval = 0.0;
	}	
	else {
		returnval = _m[0][0];
		for( i = 1; i < _row; i++)
			returnval *= _m[i][i];
	}				
	
	for( i = 0; i < _row; i++)				
		McoFree((void *) _m[i]);
	McoFree((void *) _m);	
		
	_m = temp;

	return returnval;
}	
static void
pan_add_cb (NMRemoteSettings *settings,
            NMRemoteConnection *connection,
            GError *error,
            gpointer user_data)
{
	NmaBtDevice *self = NMA_BT_DEVICE (user_data);

	if (error)
		_set_status (self, _("Failed to create PAN connection: %s"), error->message);
	else
		_set_status (self, _("Your phone is now ready to use!"));

	recheck_services_enabled (self);
	_set_busy (self, FALSE);
}
Пример #3
0
static void
_dbus_cb_get_status(void *data, DBusMessage *reply, DBusError *error)
{
   if (!_dbus_check_msg(reply, error)) return;

   _set_status(data, reply);
}
static void
dun_error (NmaBtDevice *self, const char *func, GError *error, const char *fallback)
{
	g_warning ("%s: DUN error: %s", func, (error && error->message) ? error->message : fallback);
	_set_status (self, _("Error: %s"), (error && error->message) ? error->message : fallback);

	_set_busy (self, FALSE);
	dun_cleanup (self);
	recheck_services_enabled (self);
}
Пример #5
0
//transverse of matrix
Matrix& Matrix::T(void)
{
	int32	i,j;
	double ** newm;
	double tempval;

//added on 8/12 to take out smatrix class	
	if( _row == _col){
		for(i = 0; i < _row; i++){
			for(j = i; j < _col; j++){
				tempval = _m[i][j];
				_m[i][j] = _m[j][i];
				_m[j][i] = tempval;
			}
		}
	
		return *this;
	}
//end of modification

	
	newm = (double**)McoMalloc(sizeof(double*)*_col);
	if(!newm){
		_set_status(MCO_MEM_ALLOC_ERROR);
		return *this;
	}
		
	for(i = 0; i < _col; i++){
		newm[i] = (double*)McoMalloc(sizeof(double)*_row);
		if(!newm[i]){
			for(j = i-1; j >= 0; j--)
				McoFree((void *) newm[j]);
			McoFree((void *) newm);
		}
	}
			
	for( i = 0; i < _row; i++){
		for(j = 0; j < _col; j++){
			newm[j][i] = _m[i][j];
		}
	}
	
	for(i = 0; i < _row; i++){
		McoFree((void *) _m[i]);
	}
	McoFree((void *) _m);
	
	_m = newm;
	int32 temprow = _col;
	_col = _row;
	_row = temprow;
	
	return *this;
}
Пример #6
0
void
rgb_led_enable(void)
{
  _set_status(LED_IS_ON);
  SHD_PORT &= ~SHD_PIN;
  power_timer2_enable();
  rgb_counter = 0;
  //normal operation, just overflow
  TCCR2A = 0;
  TCCR2B = 1;
  //enable interrupts
  TIMSK2 |= _BV(TOIE2);
  sei();
}
Пример #7
0
static void
_dbus_cb_status_change(void *data, DBusMessage *msg)
{
   DBusMessageIter iter, array;

   dbus_message_iter_init(msg, &iter);
   
   if (dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_STRUCT)
     {
	_set_status(data, msg);
     }
   else if (dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_INT32)
     {
	/* XXX audacious.. */
	_dbus_send_msg("/Player", "GetStatus", _dbus_cb_get_status, data);
     }

   _dbus_send_msg("/TrackList", "GetCurrentTrack", _dbus_cb_current_track, data);
}
static void
dun_start (NmaBtDevice *self)
{
	NmaBtDevicePrivate *priv = NMA_BT_DEVICE_GET_PRIVATE (self);
	gboolean have_mm = FALSE, have_mm1 = TRUE;

	g_message ("%s: starting DUN device discovery...", __func__);

	_set_status (self, _("Detecting phone configuration..."));

	/* ModemManager stuff */
	priv->mm_proxy = dbus_g_proxy_new_for_name (priv->bus,
	                                            MM_SERVICE,
	                                            MM_PATH,
	                                            MM_INTERFACE);
	g_assert (priv->mm_proxy);
	have_mm = _name_has_owner (priv->bus, MM_SERVICE);

	dbus_g_object_register_marshaller (g_cclosure_marshal_VOID__BOXED,
	                                   G_TYPE_NONE,
	                                   G_TYPE_BOXED,
	                                   G_TYPE_INVALID);
	dbus_g_proxy_add_signal (priv->mm_proxy, "DeviceAdded",
	                         DBUS_TYPE_G_OBJECT_PATH, G_TYPE_INVALID);
	dbus_g_proxy_connect_signal (priv->mm_proxy, "DeviceAdded",
								 G_CALLBACK (modem_added), self,
								 NULL);

	dbus_g_proxy_add_signal (priv->mm_proxy, "DeviceRemoved",
	                         DBUS_TYPE_G_OBJECT_PATH, G_TYPE_INVALID);
	dbus_g_proxy_connect_signal (priv->mm_proxy, "DeviceRemoved",
								 G_CALLBACK (modem_removed), self,
								 NULL);

#if WITH_MODEM_MANAGER_1
	/* ModemManager1 stuff */
	{
		priv->dbus_connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
		if (priv->dbus_connection) {
			priv->modem_manager_1 = mm_manager_new_sync (priv->dbus_connection,
			                                             G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE,
			                                             NULL,
			                                             NULL);
			if (priv->modem_manager_1) {
				g_signal_connect (priv->modem_manager_1,
				                  "object-added",
				                  G_CALLBACK (modem_object_added),
				                  self);
				g_signal_connect (priv->modem_manager_1,
				                  "object-removed",
				                  G_CALLBACK (modem_object_removed),
				                  self);
			}
		}

		have_mm1 = !!priv->modem_manager_1;
	}
#endif

	/* Ensure at least one of ModemManager or ModemManager1 are around */
	if (!have_mm && !have_mm1) {
		dun_error (self, __func__, NULL, _("ModemManager is not running"));
		return;
	}

	/* Bluez */
	priv->dun_proxy = dbus_g_proxy_new_for_name (priv->bus,
	                                             BLUEZ_SERVICE,
	                                             priv->object_path,
	                                             BLUEZ_SERIAL_INTERFACE);
	g_assert (priv->dun_proxy);

	priv->dun_timeout_id = g_timeout_add_seconds (45, dun_timeout_cb, self);

	g_message ("%s: calling Connect...", __func__);

	/* Watch for BT device property changes */
	dbus_g_object_register_marshaller (_nma_marshal_VOID__STRING_BOXED,
	                                   G_TYPE_NONE,
	                                   G_TYPE_STRING, G_TYPE_VALUE,
	                                   G_TYPE_INVALID);
	dbus_g_proxy_add_signal (priv->dun_proxy, "PropertyChanged",
	                         G_TYPE_STRING, G_TYPE_VALUE, G_TYPE_INVALID);
	dbus_g_proxy_connect_signal (priv->dun_proxy, "PropertyChanged",
	                             G_CALLBACK (dun_property_changed), self, NULL);

	/* Request a connection to the device and get the port */
	dbus_g_proxy_begin_call_with_timeout (priv->dun_proxy, "Connect",
	                                      dun_connect_cb,
	                                      self,
	                                      NULL,
	                                      20000,
	                                      G_TYPE_STRING, "dun",
	                                      G_TYPE_INVALID);

	g_message ("%s: waiting for Connect success...", __func__);
}
Пример #9
0
//matrix inverse ( only matrix with _row == _col can be inversed	
//if the matrix is singular, 0 matrix will be given
//mathod to use in matrix operation is singular value decomposition
Matrix& Matrix::inv(void)
{
	McoStatus status;
	int32	i, j, k;
	double	**max;
	
	//if not a square matrix, return singular error
	if( _row != _col){
		_set_status(MCO_SINGULAR);
		return *this;
	}

	status = _ludcmp();
	if(status != MCO_SUCCESS){ //singular matrix, everything assigned to 0
		for(i = 0; i < _row; i++)
			for(j = 0; j < _col; j++)
				_m[i][j] = 0.0;
		_set_status(MCO_SINGULAR);
	}
				
	else{
		max = (double**)McoMalloc(sizeof(double*)*_row);
		if(!max){
			_set_status(MCO_MEM_ALLOC_ERROR);
			return *this;
		}
		for( j = 0; j < _row; j++){
			max[j] = (double*)McoMalloc(sizeof(double)*_col);
			if(!max[j]){
				_set_status(MCO_MEM_ALLOC_ERROR);
				for(k = j-1; k >= 0; k--)
					McoFree((void *) max[k]);	
				McoFree((void *) max);
				return *this;
			}
		}
		
		//set to a I matrix and solve the inverse
		for( i = 0; i < _row; i++){
			for( j = 0; j < _col; j++)
				max[i][j] = 0.0;
			max[i][i] = 1.0;	
			
			_lubksb(max[i]);
		}
		
		//fix on 8/12
		//note!!, because the max contains the transverse of
		//of the inverse, do transverse and get it back
		double tempval;
		for( i = 0; i < _row; i++){
			for( j = i; j < _col; j++){
				tempval = max[i][j];
				max[i][j] = max[j][i];
				max[j][i] = tempval;
			}
		}
		//end of fix
		
		for( i = 0; i < _row; i++)				
			McoFree((void *) _m[i]);
		
		McoFree((void *) _m);	
		
		_m = max;		
	}				
	
	return *this;
}	
Пример #10
0
int d2save_set_expansion(d2save_t d2s, int val)
{
    return _set_status(d2s, STATUSBIT_EXPANSION, val);
}
Пример #11
0
int d2save_set_hardcore(d2save_t d2s, int val)
{
    return _set_status(d2s, STATUSBIT_HARDCORE, val);
}
Пример #12
0
int d2save_set_died(d2save_t d2s, int val)
{
    return _set_status(d2s, STATUSBIT_DIED, val);
}