Ejemplo n.º 1
0
// reset for vs10xx
void VS10XX::reset()
{
  putInReset();
  delay(100);//it is a must
  /* Send dummy SPI byte to initialize atmel SPI */
  ////SPIPutCharWithoutWaiting(0xFF);  
  deselectControlBus();
  deselectDataBus();
  releaseFromReset();
  while (!readDREQ());
  /* Set clock register, doubler etc. */
  writeRegister(SPI_CLOCKF, 0xc0, 0x00); 
  Serial.print("\r\nClockF:");
  Serial.println(readRegister(SPI_CLOCKF),HEX);
  /* Wait for DREQ */
  while (!readDREQ());
  softReset();//comment this, as it will be executed everytime playing a music file.

  writeRegister(SPI_WRAMADDR, 0xc0, 0x13);
  
  /* Switch on the analog parts */
  setVolume(40,40);
  //setVolume(0xff,0xff);
  //SPISetFastClock();
}
Ejemplo n.º 2
0
/**
 * Write handler for PHY Control register.
 *
 * Handles reset.
 *
 * @param   index       Register index in register array.
 * @param   value       The value to store (ignored).
 */
static void Phy::regWritePCTRL(PPHY pPhy, uint32_t index, uint16_t u16Value)
{
    if (u16Value & PCTRL_RESET)
        softReset(pPhy);
    else
        regWriteDefault(pPhy, index, u16Value);
}
Ejemplo n.º 3
0
int Caen785Module::singleShot()
{
    softReset();
    configure();
    if(pollTrigger()) return acquireSingleEventMBLT();
    return -1;
}
Ejemplo n.º 4
0
void Engine::setAccType(QString type) {
    if (currentType != type || recoveredDStack) {
        if (dStack.isEmpty()) {
            currentType = type;
            executeInstructionOnStack("Factory"); // No tr
            state = sAppend;
        } else {
            if (recoveredDStack) {
                //don't call dualReset() or recoveredDStack will be deleted
                dStack.clear();
                iStack.clear();
                braceCount = 0;
                softReset();
                changeResetState(drNone);
                putData(recoveredDStack);
            }
            wantedType = type;

            if (currentType == "NONE") // workaround for bug #3356
                currentType = dStack.top()->getType();

            if (currentType != wantedType) {
                if (!recoveredDStack)
                    executeInstructionOnStack("Convert"); // No tr
                else  // don't convert recoveredStack
                    recoveredDStack = 0;
            }
        }
        // Doublecheck the type in case a factory or convert doesn't go as planned.
        currentType = dStack.top()->getType();
        emit(stackChanged());
    }
    changeResetState(drs);
}
Ejemplo n.º 5
0
bool X86AtaDevice::isAttached() const
{
    softReset(); /* waits until master drive is ready again */
    outb(_ioPort + kAtaRegisterDriveSelect, 0xA0 | _slaveBit << 4);
    outb(_ioPort + kAtaRegisterLbaLow, 0x0);
    outb(_ioPort + kAtaRegisterLbaMid, 0x0);
    outb(_ioPort + kAtaRegisterLbaHigh, 0x0);
    outb(_ioPort + kAtaRegisterCommand, 0xEC);
    return waitForStatus(-1) != 0;
}
Ejemplo n.º 6
0
uint8_t myGRBL::begin() {
	if (_connected) _conn.end();
	_conn.begin(_speed);
	_connected = true;
	uint8_t retCode = softReset();
	if (!_ready) {
		_conn.end();
		_connected = false;
	}
	return retCode;
}
Ejemplo n.º 7
0
bool SI7021::begin() {

	Wire.begin();
    Wire.beginTransmission(I2C_ADDR);

    if (Wire.endTransmission() == 0) {
        _si_exists = true;
        softReset();
    }
    return _si_exists;
}
Ejemplo n.º 8
0
void DW1000Class::reset() {
	if(_rst < 0) {
		softReset();
	} else {
		digitalWrite(_rst, LOW);
		delay(10);
		digitalWrite(_rst, HIGH);
		delay(10);
		// force into idle mode (although it should be already after reset)
		idle();
	}
}
Ejemplo n.º 9
0
void DomainHandler::hardReset() {
    softReset();

    qCDebug(networking) << "Hard reset in NodeList DomainHandler.";
    _iceDomainID = QUuid();
    _iceServerSockAddr = HifiSockAddr();
    _hostname = QString();
    _sockAddr.clear();

    // clear any pending path we may have wanted to ask the previous DS about
    _pendingPath.clear();
}
Ejemplo n.º 10
0
Sensirion::Sensirion(uint8_t data, uint8_t clock)
{
  // Pins for software SPI
  _pinData = data;
  _pinClock = clock;
  
  // set DDR for software SPI pins
  pinMode(_pinClock, OUTPUT);
  pinMode(_pinData, OUTPUT);
  
  softReset();
}
Ejemplo n.º 11
0
	void PowerMonitor::begin(int voltage,int f)								// initialisation of powermionitor, **** include the option to have this initialise for 110V systems or 220/230 etc 
	{
	Serial.begin(38400); // 78M6613 only speaks at 38400 baud, this will hopefully change in later revisions
	//set the defualt values for the shield, Vmax + alarms, frequency + alarms, IAmax, IBmax, IAcreep, IBcreep,
	// VMAX = 356,892 according to the Vdivider on the board
	// f = 50.00 Hz +- 1 Hz)
	// Imax A = 65.4, IAcreep =default, IAmax
	// Imax B = 0  IBcreep =default, IBmax	
	// note that all the factory defaults are for 120 Vrms, 60 Hz power systems, we will change these to correspond to 230V 50 Hz systems now
				delay(2000);	
				Serial.println("I");
				delay(100); // wait 1.5 second for pMon to send its welcome string
				Serial.flush();
				delay(20);
				vMaxSet(374.80);	// set the external RMS voltage corresponding to 250 mVpk input of the ADC (A0) // 332.222 on V0.2, 356.892 on V 1, V0.2 477.8021536

				iMaxSet(1,65.470);	// set the external RMS current corresponding to 250 mVpk input of the ADC (A2)(A4)
				alarmCurrentMaxThreshold( 65.000); // threshold for max current alarm, factory  default = 15.000(D9) // channel A only
				
				if(voltage >=100 && voltage <=120)
		{
				alarmVoltageSAGthreshold(80.0); // threshold for voltage SAG detection  factory defualt = 80.0( D4)
				alarmVoltageMinThreshold(100.000); // threshold for min voltage alarm, factory  default = 100.000 (D5)
				alarmVoltageMaxThreshold(140.000); // threshold for max voltage alarm, factory  default = 140.000 (D6)		
		}
				if(voltage >=200 && voltage <=240)
		{
				alarmVoltageSAGthreshold(160.0); // threshold for voltage SAG detection  factory defualt = 80.0( D4)
				alarmVoltageMinThreshold(200.000); // threshold for min voltage alarm, factory  default = 100.000 (D5)
				alarmVoltageMaxThreshold(260.000); // threshold for max voltage alarm, factory  default = 140.000 (D6)
				alarmCurrentMaxThreshold( 65.000); // threshold for max current alarm, factory  default = 15.000(D9) // channel A only
		}
				
				if(f >=49 &&f <=51)
		{
				alarmFreqMinThreshold(49.00); // minimum threshold for frequency alarm factory  defualt = 59.00 Hz ( D2)
				alarmFreqMaxThreshold(51.00); // maximum threshold for frequency alarm factory defualt = 61.00 Hz ( D3)
		}
				if(f >=59 &&f <=61)
		{
				alarmFreqMinThreshold(59.00); // minimum threshold for frequency alarm factory  defualt = 59.00 Hz ( D2)
				alarmFreqMaxThreshold(61.00); // maximum threshold for frequency alarm factory defualt = 61.00 Hz ( D3)
		}
		
				applyDefaultSettings(); // U, note, CE must be disabled before sending U, and reenabsed afterwards			
				softReset();			// reset device
				delay(1000);
				Serial.flush();
	}
Ejemplo n.º 12
0
X86AtaDevice::Type X86AtaDevice::type() const
{
    softReset(); /* waits until master drive is ready again */
    outb(_ioPort + kAtaRegisterDriveSelect, 0xA0 | _slaveBit<<4);
    ioWait(); /* wait 400ns for drive select to work */
    uint8_t cl = inb(_ioPort + kAtaRegisterCylinderLow);	/* get the "signature bytes" */
    uint8_t ch = inb(_ioPort + kAtaRegisterCylinderHigh);

    /* differentiate ATA, ATAPI, SATA and SATAPI */
    if (cl==0x14 && ch==0xEB) return Type::PATAPI;
    if (cl==0x69 && ch==0x96) return Type::SATAPI;
    if (cl==0 && ch == 0) return Type::PATA;
    if (cl==0x3c && ch==0xc3) return Type::SATA;
    return Type::Unknown;
}
Ejemplo n.º 13
0
void Engine::hardReset() {
    while (!dStack.isEmpty())
        delete dStack.pop();
    dStack.clear();
    while (!iStack.isEmpty())
        delete iStack.pop();
    iStack.clear();
    braceCount = 0;
    if (recoveredDStack) {
        delete recoveredDStack;
        recoveredDStack = 0;
    }
    softReset();
    changeResetState(drNone);
}
boolean ESP8266::begin(void)
{
	connected = false;
	pinMode(ESP8266_RST, OUTPUT);
	clearAllRequests();
	hardReset();
	lastActivityTimestamp = 0;
	DBGBEG();
	_wifiSerial.begin(ESP8266_BAUD_RATE);

	//_wifiSerial.flush();
	//_wifiSerial.setTimeout(ESP8266_SERIAL_TIMEOUT);
	state = STATE_IDLE;
	attemptCounter = 0;
	softReset();
}
Ejemplo n.º 15
0
void DomainHandler::hardReset() {
    emit resetting();

    softReset();

    qCDebug(networking) << "Hard reset in NodeList DomainHandler.";
    _iceDomainID = QUuid();
    _iceServerSockAddr = HifiSockAddr();
    _hostname = QString();
    _sockAddr.clear();

    _hasCheckedForAccessToken = false;
    _domainConnectionRefusals.clear();

    // clear any pending path we may have wanted to ask the previous DS about
    _pendingPath.clear();
}
Ejemplo n.º 16
0
void Adafruit_VS1053::reset() {
    // TODO: http://www.vlsi.fi/player_vs1011_1002_1003/modularplayer/vs10xx_8c.html#a3
    // hardware reset
    if (_reset >= 0) {
        digitalWrite(_reset, LOW);
        delay(100);
        digitalWrite(_reset, HIGH);
    }
    digitalWrite(_cs, HIGH);
    digitalWrite(_dcs, HIGH);
    delay(100);
    softReset();
    delay(100);

    sciWrite(VS1053_REG_CLOCKF, 0x6000);

    setVolume(40, 40);
}
Ejemplo n.º 17
0
void DomainHandler::hardReset() {
    emit resetting();

    softReset();
    _isInErrorState = false;
    emit redirectErrorStateChanged(_isInErrorState);

    qCDebug(networking) << "Hard reset in NodeList DomainHandler.";
    _pendingDomainID = QUuid();
    _iceServerSockAddr = HifiSockAddr();
    _sockAddr.clear();
    _domainURL = QUrl();

    _domainConnectionRefusals.clear();

    _hasCheckedForAccessToken = false;

    // clear any pending path we may have wanted to ask the previous DS about
    _pendingPath.clear();
}
Ejemplo n.º 18
0
boolean Adafruit_VS1053::prepareRecordOgg(char *plugname) {
  sciWrite(VS1053_REG_CLOCKF, 0xC000);  // set max clock
  delay(1);    while (! readyForData() );

  sciWrite(VS1053_REG_BASS, 0);  // clear Bass
  
  softReset();
  delay(1);    while (! readyForData() );

  sciWrite(VS1053_SCI_AIADDR, 0);
  // disable all interrupts except SCI
  sciWrite(VS1053_REG_WRAMADDR, VS1053_INT_ENABLE);
  sciWrite(VS1053_REG_WRAM, 0x02);

  int pluginStartAddr = loadPlugin(plugname);
  if (pluginStartAddr == 0xFFFF) return false;
  Serial.print("Plugin at $"); Serial.println(pluginStartAddr, HEX);
  if (pluginStartAddr != 0x34) return false;

  return true;
}
Ejemplo n.º 19
0
void loop(){
  if (dataLesen()==1) {
  //QFF-Berechnung
  x = ((temp + konst1)/(qfe/100)*exp(((temp+konst1+konst2)*11.5526-26821)/(temp+konst1+konst2-1060)));
  qff = (qfe/100)*exp(konst2*10.5152/(x+temp+konst1+konst2));
  //Messwerten abschicken
  if (client.connect(serverName, 80)) {
    //Serial.println("Verbunden ... sende ... fertig!");
    // URL anrufen:
    client.print("GET /upload.php?TEMP=");
    client.print(temp);
    client.print("&TAU=");
    client.print(taupunkt);
    client.print("&QFE=");
    client.print(qfe/100, 1);
    client.print("&QFF=");
    client.print(qff,1);
    client.print("&FEUCHTE=");
    client.print(feuchte);
    client.println("&key=root HTTP/1.0\n");
    client.println("Host: localhost");
    client.println("User-Agent: Arduino");
    client.println();
    client.stop();
  } 
  if (!client.connected()) {
    /*Serial.println();
    Serial.println("disconnecting.");*/
    client.stop();
}    
  delay(899500);
  softReset();
/*  else {
    // 2. Worst-Case-Szenario
    Serial.println("connection failed");
  }*/
}
}
Ejemplo n.º 20
0
void DW1000Class::begin(int irq, int rst) {
	// generous initial init/wake-up-idle delay
	delay(5);
	// start SPI
 	SPI.begin(); 
	SPI.usingInterrupt(irq);
	// pin and basic member setup
	_rst = rst;
	_irq = irq;
	_deviceMode = IDLE_MODE;
	pinMode(_rst, OUTPUT);
	digitalWrite(_rst, HIGH);
	// reset chip (either soft or hard)
	if(_rst <= 0) {
		softReset();
	} else {
		reset();
	}
	// try locking clock at PLL speed (should be done already, 
	// but just to be sure)
	enableClock(AUTO_CLOCK);
	delay(5);
	// default network and node id
	writeValueToBytes(_networkAndAddress, 0xFF, LEN_PANADR);
	writeNetworkIdAndDeviceAddress();
	// default system configuration
	memset(_syscfg, 0, LEN_SYS_CFG);
	setDoubleBuffering(false);
	setInterruptPolarity(true);
	writeSystemConfigurationRegister();
	// default interrupt mask, i.e. no interrupts
	clearInterrupts();
	writeSystemEventMaskRegister();
	// attach interrupt
	attachInterrupt(_irq, DW1000Class::handleInterrupt, RISING);
}
Ejemplo n.º 21
0
void CODECClass::configure() {
	hardReset();
	PAGE_SELECT(0x00);
	softReset();

	//Clock
	write(0x0B, 0x81);	//NDAC on, div = 1
	write(0x0C, 0x82);	//MDAC on, div = 2
	write(0x0D, 0x00);	//DAC OSR = 128
	write(0x0E, 0x80);	// ^
	write(0x12, 0x81);	//NADC on, div = 1
	write(0x13, 0x82);	//NADC on, div = 2
	write(0x14, 0x80);	//ADC OSR = 128

	//Interface
	write(0x1B, 0x00);	//I2S, 16b, WCLK & BCLK inputs

	//Processing Block
	write(0x3C, 0x08);	//DAC: PRB_P8
	write(0x3D, 0x01);	//ADC: PRB_R1

	//Analog PS
	PAGE_SELECT(0x01);
	write(0x01, 0x08);	//Disable AVDD/DVDD connection
	write(0x02, 0x01);	//Enable AVDD LDO
	write(0x0A, 0x3B);	//Output common mode is 1.65V, Full chip CM is 0.9V, HP powered from LDO (1.8-3.6V)

	//Power up
	write(0x47, 0x31);	//Analog inputs power up in 3ms
	write(0x7B, 0x01);	//Reference powers up in 40ms
	write(0x14, 0x65);	//Headphone powers up in 50ms, charges for 5 time constants @ 6k ohms

	//DAC routing
	write(0x0C, 0x08);	//Left DAC -> Left headphone
	write(0x0D, 0x08);	//Right DAC -> Right headphone
	write(0x0E, 0x08);	//Left DAC -> Left line out
	write(0x0F, 0x08);	//Right DAC -> Right line out

	//ADC routing
	write(0x34, 0xC0);	//IN1L -> MICPGA L+, 40k
	write(0x36, 0xC0);	//CM -> MICPGA L-, 40k
	write(0x37, 0xC0);	//IN1R -> MICPGA R+, 40k
	write(0x39, 0xC0);	//CM -> MICPGA R-, 40k
	
	//1Hz filter L
	PAGE_SELECT(0x08);
	write(0x18, 0x7F);
	write(0x19, 0xFF);
	write(0x1A, 0x00);
	write(0x1C, 0x80);
	write(0x1D, 0x01);
	write(0x1E, 0x00);
	write(0x20, 0x7F);
	write(0x21, 0xFC);
	write(0x22, 0x00);

	//1Hz filter R
	PAGE_SELECT(0x09);
	write(0x20, 0x7F);
	write(0x21, 0xFF);
	write(0x22, 0x00);
	write(0x24, 0x80);
	write(0x25, 0x01);
	write(0x26, 0x00);
	write(0x28, 0x7F);
	write(0x29, 0xFC);
	write(0x2A, 0x00);

	return;
}
int main(int argc, char **argv)
{
	if (!bcm2835_init())
		return 1;

	bcm2835_spi_begin();
	bcm2835_spi_setBitOrder(BCM2835_SPI_BIT_ORDER_MSBFIRST); // The default
	bcm2835_spi_setDataMode(BCM2835_SPI_MODE0); // The default
	bcm2835_spi_setClockDivider(BCM2835_SPI_CLOCK_DIVIDER_65536); // The default
	bcm2835_spi_chipSelect(BCM2835_SPI_CS0); // The default
	bcm2835_spi_setChipSelectPolarity(BCM2835_SPI_CS0, LOW); // the default
	
	softReset();
	/*
	printf("status: %d \n", readStatus());
	printf("config: %d \n", readConfig());
	printf("mode: %d \n", readMode());
	printf("gain: %d \n", gainSetting);
	*/
	
	//changeInput(0);
	//changeGain(AD7794_GAIN_8);
	//delay(changeInputDelay); //Time to value is ready
	
	long fullData;
	int readAmount = 10;
	int delayMilis=20;
	while(1){
		long input0 = readAvgValueFromInput(0, readAmount, delayMilis);
		printf("Value at input %d: %d / %06X\n", currentInput, input0, input0);
		long input1 = readAvgValueFromInput(1, readAmount, delayMilis);
		printf("Value at input %d: %d / %06X\n", currentInput, input1, input1);
		long input2 = readAvgValueFromInput(2, readAmount, delayMilis);
		printf("Value at input %d: %d / %06X\n", currentInput, input2, input2);
		long input3 = readAvgValueFromInput(3, readAmount, delayMilis);
		printf("Value at input %d: %d / %06X\n", currentInput, input3, input3);
		
		long avg = (input0 + input1 + input2 + input3) / 4;
		printf("avg: %d / %06X\n", avg, avg);
	}
	
	
	int loopc=0;
	while(1){
		fullData = readSingleValue();
		printf("Value at input %d: %d / %06X\n", currentInput, fullData, fullData);
		
		printf("status: %d \n", readStatus());
		++loopc;
		if (loopc>=10){
			if (currentInput<3){
				changeInput(currentInput+1);
			} else {
				changeInput(0);
			}
			delay(changeInputDelay);
			loopc=0;
		} else {
			delay(delayMilis);
		}
	}
	
	bcm2835_spi_end();
	return 0;
}
Ejemplo n.º 23
0
uint8_t BayGPRSInterface::init(uint8_t unlock_only){
	uint8_t count=0;
	init_start:
	uint8_t i=0;
	printP("AT"); //Wake up
	delay(200);
	println();
	wait_forOK(1000);
	printlnP("AT"); //Check communication
	if(! wait_forOK(200)){
		//communication ok!
		printlnP("ATE0"); //Command echo off
		wait_forOK(500);
		printlnP("AT+CSCLK=2"); //Auto-Sleepmode
		wait_forOK(500);
		//Check PIN
		printlnP("AT+CPIN?");
		while(wait_forPGM(PSTR("+CPIN: "),5000,7,_base64buffer)){
			printlnP("AT");
			wait_forOK(200);
			printlnP("AT+CFUN=0");
			//Disable
			wait_forOK(10000);
			printlnP("AT+CFUN=1");
			//delay(2000);
			//Enable
			wait_forOK(10000);
			printlnP("AT");
			wait_forOK(200);
			printlnP("AT+CPIN?");
			i++;
			if(i>2) return 6;
		}
		if(_base64buffer[5]=='U') return 3; //SIM PUK
		if(_base64buffer[5]=='I'){ //SIM PIN
			printlnP("AT");
			wait_forOK(200);
			printP("AT+CPIN=\"");
			print(_pin);
			println("\"");
			if(wait_forOK(30000)) {
			  return 2; //Wrong PIN
			}
			wait_for("SMS Ready",(unlock_only?5000:60000));
		}
		//Return here - Moden will try to connect and attach in the background!
		if(unlock_only) return 0;
		// Waiting for Modem to Connect
		for(i=0;i<127;i++){
			if(isRegistered()) break;
			delay(500);
		}
		if(i==127) return 4;
		for(i=0;i<127;i++){
			if(isAttached()) break;
			delay(500);
		}
		if(i==127) return 5;
		return 0;
	}

	softReset();
	softSwitch();
	i_begin(_baud);
	skipChars();
	printP("AT"); //Will autoconfigure BAUD-Rate - Auto BAUD-Rate did not work with Sleep-Mode!
	delay(100);
	println();
	printP("AT+IPR=");
	println(_baud);
	wait_forOK(200);
	count++;

	if(count>1) return 1;
	goto init_start;
}
Ejemplo n.º 24
0
// TODO: Should probably return boolean
uint8_t Sensirion::reset(void)
{
  return softReset();
}
Ejemplo n.º 25
0
void DomainHandler::hardReset() {
    softReset();
    _hostname = QString();
    _sockAddr.setAddress(QHostAddress::Null);
}
Ejemplo n.º 26
0
// Reset
void Engine::dualReset() {
    if (drs == drHard)
        hardReset();
    else
        softReset();
}
Ejemplo n.º 27
0
Error SynopsisUSB::initialize()
{
    Error r = USBController::initialize();

    if (r != ESUCCESS)
        return r;

    // Map USB host controller registers
    if (m_io.map(IO_BASE + Base, PAGESIZE*2,
                 Memory::User|Memory::Readable|Memory::Writable|Memory::Device) != IO::Success)
    {
        ERROR("failed to map I/O registers");
        return EIO;
    }

    // Check device ID
    if (m_io.read(VendorId) != DefaultVendorId)
    {
        ERROR("incompatible vendorId: " << m_io.read(VendorId) << " != " << DefaultVendorId);
        return EIO;
    }

    DEBUG("UserId: " << m_io.read(UserId) << " VendorId: " << m_io.read(VendorId));
    NOTICE("Synopsis Design Ware USB-on-the-go Host Controller found");

    // Initialize power manager
    if (m_power.initialize() != BroadcomPower::Success)
    {
        ERROR("failed to initialize power manager");
        return EIO;
    }
    // Power on the USB subsystem
    if (m_power.enable(BroadcomPower::USB) != BroadcomPower::Success)
    {
        ERROR("failed to power on the USB subsystem");
        return EIO;
    }
    DEBUG("powered on");

    // Soft-Reset
    softReset();
    DEBUG("software reset done");

    // Setup DMA
    m_io.write(RxFIFOSize, 1024);
    m_io.write(TxFIFOSize, (1024 << 16) | 1024);
    m_io.write(PeriodTxFIFOSize, (1024 << 16) | 2048);
    m_io.set(AHBConfig, DMAEnable | AXIWait);

    // Enable the USB controller interrupt on the ARM's interrupt controller
    addIRQHandler(InterruptNumber, (IRQHandlerFunction) &SynopsisUSB::interruptHandler);
    addIRQHandler(0, (IRQHandlerFunction) &SynopsisUSB::interruptHandler); // TODO: ARM does not have IRQ_REG() yet
    ProcessCtl(SELF, WatchIRQ, InterruptNumber);
    ProcessCtl(SELF, EnableIRQ, InterruptNumber);
    DEBUG("interrupt handler installed");

    // Clear all pending core interrupts
    m_io.write(CoreIntMask, 0);
    m_io.write(CoreInterrupt, 0xffffffff);

    // Enable core host channel and port interrupts
    m_io.write(CoreIntMask, CoreIntChannel | CoreIntPort);

    // Enable interrupts globally on the USB host controller.
    m_io.set(AHBConfig, InterruptEnable);
    DEBUG("interrupts enabled");

    // Power-on host port (virtual root hub)
    u32 val = m_io.read(HostPortControl);
    val &= ~(HostPortEnable | HostPortEnableChanged |
             HostPortConnectChanged | HostPortCurrentChanged);
    val |= HostPortPower;
    m_io.write(HostPortControl, val);
    DEBUG("poweron host port");

    // Begin host port reset (raise the reset signal)
    val = m_io.read(HostPortControl);
    val &= ~(HostPortEnable | HostPortEnableChanged |
             HostPortConnectChanged | HostPortCurrentChanged);
    val |=  HostPortReset;
    m_io.write(HostPortControl, val);

#warning TODO: implement real sleep() now. We need it here.
    sleep(60);

    // Finish host port reset (lower the reset signal)
    val = m_io.read(HostPortControl);
    val &= ~(HostPortEnable | HostPortEnableChanged |
             HostPortConnectChanged | HostPortCurrentChanged);
    m_io.write(HostPortControl, val);
    DEBUG("host port reset done");

    // Clear host port interrupt flags
    val = m_io.read(HostPortControl);
    val |= HostPortEnableChanged | HostPortConnectChanged | HostPortCurrentChanged;
    m_io.write(HostPortControl, val);

    DEBUG("host port (root hub) enabled");
    DEBUG("host port status=" << m_io.read(HostPortControl) << " connected=" <<
        (m_io.read(HostPortControl) & HostPortConnect));

    // Done.
    return ESUCCESS;
}
Ejemplo n.º 28
0
uns8 ScriptCtrl_Add(struct led_cmd *pCmd)
{
	/* We have to reject all commands until buffer was cleared completely */
	if(gScriptBuf.isClearing) {
		return SCRIPTBUFFER_FULL;
	}

	switch(pCmd->cmd)
	{
	case CLEAR_SCRIPT:
		//Trace_String("Clearing script buffer;");
		gScriptBuf.isClearing = TRUE;
		return OK;
	case LOOP_ON:
		gScriptBuf.loopStart[gScriptBuf.loopDepth] = gScriptBuf.write;
		gScriptBuf.loopDepth++;
		return ScriptCtrl_Write(pCmd);
	case LOOP_OFF:
	{
		gScriptBuf.loopDepth--;
		uns8 loopStart = gScriptBuf.loopStart[gScriptBuf.loopDepth];
		pCmd->data.loopEnd.startIndex = ScriptBufInc(loopStart);
		pCmd->data.loopEnd.depth = gScriptBuf.loopDepth;
		uns8 numLoops = pCmd->data.loopEnd.numLoops;
		pCmd->data.loopEnd.counter = numLoops;
		/*Trace_String("Add LOOP_OFF: ");
		Trace_Hex(gScriptBuf.write);
		Trace_Hex(pCmd->data.loopEnd.startIndex);
		Trace_Hex(pCmd->data.loopEnd.depth);
		Trace_Hex(pCmd->data.loopEnd.counter);
		Trace_String(";");*/
		return ScriptCtrl_Write(pCmd);
	}
	case WAIT:
	{
		return ScriptCtrl_Write(pCmd);
	}
	case START_BL:
	{
		CommandIO_CreateResponse(&g_ResponseBuf, START_BL, OK);
		CommandIO_SendResponse(&g_ResponseBuf);
		Platform_EnableBootloaderAutostart();
		softReset();
		/* never reach this */
		return OK;
	}
#ifdef __CC8E__
	case GET_RTC:
	{
		return OK;
	}
	case SET_RTC:
	{
		g_RtcTime.tm_year = pCmd->data.set_rtc.tm_year;
		g_RtcTime.tm_mon = pCmd->data.set_rtc.tm_mon;
		g_RtcTime.tm_mday = pCmd->data.set_rtc.tm_mday;
		g_RtcTime.tm_wday = pCmd->data.set_rtc.tm_wday;
		g_RtcTime.tm_hour = pCmd->data.set_rtc.tm_hour;
		g_RtcTime.tm_min = pCmd->data.set_rtc.tm_min;
		g_RtcTime.tm_sec = pCmd->data.set_rtc.tm_sec;
		Rtc_Ctl(RTC_SET_TIME, &g_RtcTime);
		return OK;
	}
#endif /* #ifdef __CC8E__ */
	case SET_COLOR_DIRECT:
	{
		Ledstrip_SetColorDirect((uns8 *)&pCmd->data.set_color_direct.ptr_led_array);
		return NO_RESPONSE;
	}
#ifdef __CC8E__
	case GET_CYCLETIME:
	{
		return OK;
	}
	case GET_TRACE:
	{
		return OK;
	}
#endif /* #ifdef __CC8E__ */
	case GET_FW_VERSION:
	{
		return OK;
	}
	case SET_FADE:
	{
		return ScriptCtrl_Write(pCmd);
	}
	case SET_GRADIENT:
	{
		return ScriptCtrl_Write(pCmd);
	}
	case GET_LED_TYP:
	{
		return OK;
	}
	default:
	{
		return BAD_COMMAND_CODE;
	}
	}

}