mirror of https://github.com/contiki-ng/mspsim
fixed more commands - TX probably works
This commit is contained in:
parent
d32d80e23f
commit
cca03fcfde
|
|
@ -413,11 +413,7 @@ public class CC2520 extends Chip implements USARTListener, RFListener, RFSource,
|
|||
status |= STATUS_XOSC16M_STABLE;
|
||||
if(DEBUG) log("Oscillator Stable Event.");
|
||||
setState(RadioState.IDLE);
|
||||
// if( (memory[REG_IOCFG1] & CCAMUX) == CCAMUX_XOSC16M_STABLE) {
|
||||
// updateCCA();
|
||||
// } else {
|
||||
// if(DEBUG) log("CCAMUX != CCA_XOSC16M_STABLE! Not raising CCA");
|
||||
// }
|
||||
updateCCA();
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -500,8 +496,6 @@ public class CC2520 extends Chip implements USARTListener, RFListener, RFSource,
|
|||
}
|
||||
|
||||
|
||||
// memory[REG_SNOP] = 0;
|
||||
// memory[REG_TXCTRL] = 0xa0ff;
|
||||
setModeNames(MODE_NAMES);
|
||||
setMode(MODE_POWER_OFF);
|
||||
currentFIFOP = false;
|
||||
|
|
@ -519,7 +513,6 @@ public class CC2520 extends Chip implements USARTListener, RFListener, RFSource,
|
|||
}
|
||||
|
||||
private void reset() {
|
||||
// setReg(REG_MDMCTRL0, 0x0ae2);
|
||||
memory[REG_RSSISTAT] = 0;
|
||||
|
||||
/* back to default configuration of GPIOs */
|
||||
|
|
@ -942,6 +935,18 @@ public class CC2520 extends Chip implements USARTListener, RFListener, RFSource,
|
|||
}
|
||||
}
|
||||
|
||||
void rxtxoff() {
|
||||
if (DEBUG) {
|
||||
log("Strobe RXTX-OFF!!! at " + cpu.cycles);
|
||||
if (stateMachine == RadioState.TX_ACK ||
|
||||
stateMachine == RadioState.TX_FRAME ||
|
||||
stateMachine == RadioState.RX_FRAME) {
|
||||
log("WARNING: turning off RXTX during " + stateMachine);
|
||||
}
|
||||
}
|
||||
setState(RadioState.IDLE);
|
||||
}
|
||||
|
||||
void stxon() {
|
||||
// State transition valid from IDLE state or all RX states
|
||||
if( (stateMachine == RadioState.IDLE) ||
|
||||
|
|
@ -982,71 +987,14 @@ public class CC2520 extends Chip implements USARTListener, RFListener, RFSource,
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Needs to get information about when it is possible to write
|
||||
// next data...
|
||||
private void strobe(int data) {
|
||||
// Resets, on/off of different things...
|
||||
if (DEBUG) {
|
||||
log("Strobe on: " + Utils.hex8(data)); // + " => " + Reg.values()[data]);
|
||||
}
|
||||
|
||||
if( (stateMachine == RadioState.POWER_DOWN) && (data != INS_SXOSCON) ) {
|
||||
if (DEBUG) log("Got command strobe: " + data + " in POWER_DOWN. Ignoring.");
|
||||
return;
|
||||
}
|
||||
|
||||
switch (data) {
|
||||
case INS_SNOP:
|
||||
if (DEBUG) log("SNOP => " + Utils.hex8(status) + " at " + cpu.cycles);
|
||||
break;
|
||||
case INS_SRFOFF:
|
||||
if (DEBUG) {
|
||||
log("Strobe RXTX-OFF!!! at " + cpu.cycles);
|
||||
if (stateMachine == RadioState.TX_ACK ||
|
||||
stateMachine == RadioState.TX_FRAME ||
|
||||
stateMachine == RadioState.RX_FRAME) {
|
||||
log("WARNING: turning off RXTX during " + stateMachine);
|
||||
}
|
||||
}
|
||||
setState(RadioState.IDLE);
|
||||
break;
|
||||
case INS_STXON:
|
||||
stxon();
|
||||
break;
|
||||
case INS_STXONCCA:
|
||||
stxoncca();
|
||||
break;
|
||||
case INS_SFLUSHRX:
|
||||
flushRX();
|
||||
break;
|
||||
case INS_SFLUSHTX:
|
||||
if (DEBUG) log("Flushing TXFIFO");
|
||||
flushTX();
|
||||
break;
|
||||
case INS_SXOSCON:
|
||||
//log("Strobe Oscillator On");
|
||||
startOscillator();
|
||||
break;
|
||||
case INS_SXOSCOFF:
|
||||
//log("Strobe Oscillator Off");
|
||||
stopOscillator();
|
||||
break;
|
||||
case INS_SACK:
|
||||
case INS_SACKPEND:
|
||||
// Set the frame pending flag for all future autoack based on SACK/SACKPEND
|
||||
ackFramePending = data == INS_SACKPEND;
|
||||
if (stateMachine == RadioState.RX_FRAME) {
|
||||
shouldAck = true;
|
||||
} else if (crcOk) {
|
||||
setState(RadioState.TX_ACK_CALIBRATE);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (DEBUG) {
|
||||
log("Unknown strobe command: " + data);
|
||||
}
|
||||
break;
|
||||
void sack(boolean pend) {
|
||||
// Set the frame pending flag for all future autoack based on SACK/SACKPEND
|
||||
ackFramePending = pend;
|
||||
if (stateMachine == RadioState.RX_FRAME) {
|
||||
shouldAck = true;
|
||||
} else if (crcOk) {
|
||||
setState(RadioState.TX_ACK_CALIBRATE);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1158,7 +1106,7 @@ public class CC2520 extends Chip implements USARTListener, RFListener, RFSource,
|
|||
cpu.scheduleTimeEventMillis(oscillatorEvent, 1);
|
||||
}
|
||||
|
||||
private void stopOscillator() {
|
||||
void stopOscillator() {
|
||||
status &= ~STATUS_XOSC16M_STABLE;
|
||||
setState(RadioState.POWER_DOWN);
|
||||
if (DEBUG) log("Oscillator Off.");
|
||||
|
|
@ -1213,7 +1161,7 @@ public class CC2520 extends Chip implements USARTListener, RFListener, RFSource,
|
|||
}
|
||||
|
||||
private void updateCCA() {
|
||||
// boolean oldCCA = cca;
|
||||
boolean oldCCA = cca;
|
||||
// int ccaMux = (memory[REG_IOCFG1] & CCAMUX);
|
||||
|
||||
// if (ccaMux == CCAMUX_CCA) {
|
||||
|
|
@ -1222,10 +1170,12 @@ public class CC2520 extends Chip implements USARTListener, RFListener, RFSource,
|
|||
// } else if (ccaMux == CCAMUX_XOSC16M_STABLE) {
|
||||
// cca = (status & STATUS_XOSC16M_STABLE) > 0;
|
||||
// }
|
||||
|
||||
cca = (status & STATUS_RSSI_VALID) > 0 && rssi < -95;
|
||||
|
||||
// if (cca != oldCCA) {
|
||||
// setInternalCCA(cca);
|
||||
// }
|
||||
if (cca != oldCCA) {
|
||||
setInternalCCA(cca);
|
||||
}
|
||||
}
|
||||
|
||||
private void setInternalCCA(boolean clear) {
|
||||
|
|
|
|||
|
|
@ -92,8 +92,16 @@ public class CC2520SPI {
|
|||
cc2520.stxoncca();
|
||||
}
|
||||
},
|
||||
new SPICommand("SRFOFF 0 1 0 0 0 1 0 1",cc2520),
|
||||
new SPICommand("SXOSCOFF 0 1 0 0 0 1 1 0",cc2520),
|
||||
new SPICommand("SRFOFF 0 1 0 0 0 1 0 1",cc2520) {
|
||||
public void executeSPICommand() {
|
||||
cc2520.rxtxoff();
|
||||
}
|
||||
},
|
||||
new SPICommand("SXOSCOFF 0 1 0 0 0 1 1 0",cc2520) {
|
||||
public void executeSPICommand() {
|
||||
cc2520.stopOscillator();
|
||||
}
|
||||
},
|
||||
new SPICommand("SFLUSHRX 0 1 0 0 0 1 1 1",cc2520) {
|
||||
public void executeSPICommand() {
|
||||
cc2520.flushRX();
|
||||
|
|
@ -102,10 +110,18 @@ public class CC2520SPI {
|
|||
new SPICommand("SFLUSHTX 0 1 0 0 1 0 0 0",cc2520) {
|
||||
public void executeSPICommand() {
|
||||
cc2520.flushTX();
|
||||
}
|
||||
}
|
||||
},
|
||||
new SPICommand("SACK 0 1 0 0 1 0 0 1",cc2520) {
|
||||
public void executeSPICommand() {
|
||||
cc2520.sack(false);
|
||||
}
|
||||
},
|
||||
new SPICommand("SACKPEND 0 1 0 0 1 0 1 0",cc2520) {
|
||||
public void executeSPICommand() {
|
||||
cc2520.sack(true);
|
||||
}
|
||||
},
|
||||
new SPICommand("SACK 0 1 0 0 1 0 0 1",cc2520),
|
||||
new SPICommand("SACKPEND 0 1 0 0 1 0 1 0",cc2520),
|
||||
new SPICommand("SNACK 0 1 0 0 1 0 1 1",cc2520),
|
||||
new SPICommand("SRXMASKBITSET 0 1 0 0 1 1 0 0",cc2520),
|
||||
new SPICommand("SRXMASKBITCLR 0 1 0 0 1 1 0 1",cc2520),
|
||||
|
|
|
|||
Loading…
Reference in New Issue