Merge branch 'master' of ssh://contiki.git.sourceforge.net/gitroot/contiki/contiki
This commit is contained in:
commit
9d8be775d4
12 changed files with 281 additions and 164 deletions
|
@ -578,7 +578,7 @@ compress_hdr_hc06(rimeaddr_t *rime_destaddr)
|
||||||
/* Note that the payload length is always compressed */
|
/* Note that the payload length is always compressed */
|
||||||
|
|
||||||
/* Next header. We compress it if UDP */
|
/* Next header. We compress it if UDP */
|
||||||
#if UIP_CONF_UDP
|
#if UIP_CONF_UDP || UIP_CONF_ROUTER
|
||||||
if(UIP_IP_BUF->proto == UIP_PROTO_UDP) {
|
if(UIP_IP_BUF->proto == UIP_PROTO_UDP) {
|
||||||
iphc0 |= SICSLOWPAN_IPHC_NH_C;
|
iphc0 |= SICSLOWPAN_IPHC_NH_C;
|
||||||
}
|
}
|
||||||
|
@ -700,7 +700,7 @@ compress_hdr_hc06(rimeaddr_t *rime_destaddr)
|
||||||
|
|
||||||
uncomp_hdr_len = UIP_IPH_LEN;
|
uncomp_hdr_len = UIP_IPH_LEN;
|
||||||
|
|
||||||
#if UIP_CONF_UDP
|
#if UIP_CONF_UDP || UIP_CONF_ROUTER
|
||||||
/* UDP header compression */
|
/* UDP header compression */
|
||||||
if(UIP_IP_BUF->proto == UIP_PROTO_UDP) {
|
if(UIP_IP_BUF->proto == UIP_PROTO_UDP) {
|
||||||
PRINTF("IPHC: Uncompressed UDP ports on send side: %x, %x\n",
|
PRINTF("IPHC: Uncompressed UDP ports on send side: %x, %x\n",
|
||||||
|
|
|
@ -158,7 +158,8 @@ uip_ds6_periodic(void)
|
||||||
#if UIP_ND6_DEF_MAXDADNS > 0
|
#if UIP_ND6_DEF_MAXDADNS > 0
|
||||||
} else if((locaddr->state == ADDR_TENTATIVE)
|
} else if((locaddr->state == ADDR_TENTATIVE)
|
||||||
&& (locaddr->dadnscount <= uip_ds6_if.maxdadns)
|
&& (locaddr->dadnscount <= uip_ds6_if.maxdadns)
|
||||||
&& (timer_expired(&locaddr->dadtimer))) {
|
&& (timer_expired(&locaddr->dadtimer))
|
||||||
|
&& (uip_len == 0)) {
|
||||||
uip_ds6_dad(locaddr);
|
uip_ds6_dad(locaddr);
|
||||||
#endif /* UIP_ND6_DEF_MAXDADNS > 0 */
|
#endif /* UIP_ND6_DEF_MAXDADNS > 0 */
|
||||||
}
|
}
|
||||||
|
@ -195,7 +196,7 @@ uip_ds6_periodic(void)
|
||||||
case NBR_INCOMPLETE:
|
case NBR_INCOMPLETE:
|
||||||
if(locnbr->nscount >= UIP_ND6_MAX_MULTICAST_SOLICIT) {
|
if(locnbr->nscount >= UIP_ND6_MAX_MULTICAST_SOLICIT) {
|
||||||
uip_ds6_nbr_rm(locnbr);
|
uip_ds6_nbr_rm(locnbr);
|
||||||
} else if(stimer_expired(&locnbr->sendns)) {
|
} else if(stimer_expired(&locnbr->sendns) && (uip_len == 0)) {
|
||||||
locnbr->nscount++;
|
locnbr->nscount++;
|
||||||
PRINTF("NBR_INCOMPLETE: NS %u\n", locnbr->nscount);
|
PRINTF("NBR_INCOMPLETE: NS %u\n", locnbr->nscount);
|
||||||
uip_nd6_ns_output(NULL, NULL, &locnbr->ipaddr);
|
uip_nd6_ns_output(NULL, NULL, &locnbr->ipaddr);
|
||||||
|
@ -211,7 +212,7 @@ uip_ds6_periodic(void)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NBR_DELAY:
|
case NBR_DELAY:
|
||||||
if(stimer_expired(&locnbr->reachable)) {
|
if(stimer_expired(&locnbr->reachable) && (uip_len == 0)) {
|
||||||
locnbr->state = NBR_PROBE;
|
locnbr->state = NBR_PROBE;
|
||||||
locnbr->nscount = 1;
|
locnbr->nscount = 1;
|
||||||
PRINTF("DELAY: moving to PROBE + NS %u\n", locnbr->nscount);
|
PRINTF("DELAY: moving to PROBE + NS %u\n", locnbr->nscount);
|
||||||
|
@ -226,7 +227,7 @@ uip_ds6_periodic(void)
|
||||||
uip_ds6_defrt_rm(locdefrt);
|
uip_ds6_defrt_rm(locdefrt);
|
||||||
}
|
}
|
||||||
uip_ds6_nbr_rm(locnbr);
|
uip_ds6_nbr_rm(locnbr);
|
||||||
} else if(stimer_expired(&locnbr->sendns)) {
|
} else if(stimer_expired(&locnbr->sendns) && (uip_len == 0)) {
|
||||||
locnbr->nscount++;
|
locnbr->nscount++;
|
||||||
PRINTF("PROBE: NS %u\n", locnbr->nscount);
|
PRINTF("PROBE: NS %u\n", locnbr->nscount);
|
||||||
uip_nd6_ns_output(NULL, &locnbr->ipaddr, &locnbr->ipaddr);
|
uip_nd6_ns_output(NULL, &locnbr->ipaddr, &locnbr->ipaddr);
|
||||||
|
@ -241,7 +242,7 @@ uip_ds6_periodic(void)
|
||||||
|
|
||||||
#if UIP_CONF_ROUTER & UIP_ND6_SEND_RA
|
#if UIP_CONF_ROUTER & UIP_ND6_SEND_RA
|
||||||
/* Periodic RA sending */
|
/* Periodic RA sending */
|
||||||
if(stimer_expired(&uip_ds6_timer_ra)) {
|
if(stimer_expired(&uip_ds6_timer_ra) && (uip_len == 0)) {
|
||||||
uip_ds6_send_ra_periodic();
|
uip_ds6_send_ra_periodic();
|
||||||
}
|
}
|
||||||
#endif /* UIP_CONF_ROUTER & UIP_ND6_SEND_RA */
|
#endif /* UIP_CONF_ROUTER & UIP_ND6_SEND_RA */
|
||||||
|
|
|
@ -351,6 +351,11 @@ uip_nd6_ns_output(uip_ipaddr_t * src, uip_ipaddr_t * dest, uip_ipaddr_t * tgt)
|
||||||
} else {
|
} else {
|
||||||
uip_ds6_select_src(&UIP_IP_BUF->srcipaddr, &UIP_IP_BUF->destipaddr);
|
uip_ds6_select_src(&UIP_IP_BUF->srcipaddr, &UIP_IP_BUF->destipaddr);
|
||||||
}
|
}
|
||||||
|
if (uip_is_addr_unspecified(&UIP_IP_BUF->srcipaddr)) {
|
||||||
|
PRINTF("Dropping NS due to no suitable source address\n");
|
||||||
|
uip_len = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
UIP_IP_BUF->len[1] =
|
UIP_IP_BUF->len[1] =
|
||||||
UIP_ICMPH_LEN + UIP_ND6_NS_LEN + UIP_ND6_OPT_LLAO_LEN;
|
UIP_ICMPH_LEN + UIP_ND6_NS_LEN + UIP_ND6_OPT_LLAO_LEN;
|
||||||
|
|
||||||
|
|
|
@ -345,7 +345,9 @@
|
||||||
#define RG_CSMA_BE 0x2f
|
#define RG_CSMA_BE 0x2f
|
||||||
/** Access parameters for sub-register MIN_BE in register @ref RG_CSMA_SEED_1 */
|
/** Access parameters for sub-register MIN_BE in register @ref RG_CSMA_SEED_1 */
|
||||||
#define SR_MIN_BE 0x2e, 0xc0, 6
|
#define SR_MIN_BE 0x2e, 0xc0, 6
|
||||||
#define SR_reserved_2e_2 0x2e, 0x30, 4
|
/** Access parameters for AACK_SET_PD bit in register @ref RG_CSMA_SEED_1 */
|
||||||
|
#define SR_AACK_SET_PD 0x2e, 0x20, 5
|
||||||
|
//#define SR_reserved_2e_2 0x2e, 0x30, 4
|
||||||
/** Access parameters for sub-register I_AM_COORD in register @ref RG_CSMA_SEED_1 */
|
/** Access parameters for sub-register I_AM_COORD in register @ref RG_CSMA_SEED_1 */
|
||||||
#define SR_I_AM_COORD 0x2e, 0x08, 3
|
#define SR_I_AM_COORD 0x2e, 0x08, 3
|
||||||
/** Access parameters for sub-register CSMA_SEED_1 in register @ref RG_CSMA_SEED_1 */
|
/** Access parameters for sub-register CSMA_SEED_1 in register @ref RG_CSMA_SEED_1 */
|
||||||
|
|
|
@ -410,6 +410,11 @@
|
||||||
#define HAL_TCCR1B_CONFIG ( ( 1 << ICES1 ) | ( 1 << CS11 ) | ( 1 << CS10 ) )
|
#define HAL_TCCR1B_CONFIG ( ( 1 << ICES1 ) | ( 1 << CS11 ) | ( 1 << CS10 ) )
|
||||||
#define HAL_US_PER_SYMBOL ( 2 )
|
#define HAL_US_PER_SYMBOL ( 2 )
|
||||||
#define HAL_SYMBOL_MASK ( 0x7FFFffff )
|
#define HAL_SYMBOL_MASK ( 0x7FFFffff )
|
||||||
|
//#elif ( F_CPU == 7953408UL )
|
||||||
|
#elif ( F_CPU == 7954432UL )
|
||||||
|
#define HAL_TCCR1B_CONFIG ( ( 1 << ICES1 ) | ( 1 << CS11 ) | ( 1 << CS10 ) )
|
||||||
|
#define HAL_US_PER_SYMBOL ( 2 )
|
||||||
|
#define HAL_SYMBOL_MASK ( 0x7FFFffff )
|
||||||
#elif ( F_CPU == 4000000UL )
|
#elif ( F_CPU == 4000000UL )
|
||||||
#define HAL_TCCR1B_CONFIG ( ( 1 << ICES1 ) | ( 1 << CS11 ) | ( 1 << CS10 ) )
|
#define HAL_TCCR1B_CONFIG ( ( 1 << ICES1 ) | ( 1 << CS11 ) | ( 1 << CS10 ) )
|
||||||
#define HAL_US_PER_SYMBOL ( 1 )
|
#define HAL_US_PER_SYMBOL ( 1 )
|
||||||
|
|
|
@ -305,7 +305,8 @@ hal_rx_frame_t rxframe[RF230_CONF_RX_BUFFERS];
|
||||||
* \retval STATE_TRANSITION The radio transceiver's state machine is in
|
* \retval STATE_TRANSITION The radio transceiver's state machine is in
|
||||||
* transition between two states.
|
* transition between two states.
|
||||||
*/
|
*/
|
||||||
static uint8_t
|
//static uint8_t
|
||||||
|
uint8_t
|
||||||
radio_get_trx_state(void)
|
radio_get_trx_state(void)
|
||||||
{
|
{
|
||||||
return hal_subregister_read(SR_TRX_STATUS);
|
return hal_subregister_read(SR_TRX_STATUS);
|
||||||
|
@ -506,8 +507,6 @@ flushrx(void)
|
||||||
rxframe[rxframe_head].length=0;
|
rxframe[rxframe_head].length=0;
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
static uint8_t locked, lock_on, lock_off;
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
on(void)
|
on(void)
|
||||||
{
|
{
|
||||||
|
@ -581,19 +580,6 @@ off(void)
|
||||||
ENERGEST_OFF(ENERGEST_TYPE_LISTEN);
|
ENERGEST_OFF(ENERGEST_TYPE_LISTEN);
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
#define GET_LOCK() locked = 1
|
|
||||||
static void RELEASE_LOCK(void) {
|
|
||||||
if(lock_on) {
|
|
||||||
on();
|
|
||||||
lock_on = 0;
|
|
||||||
}
|
|
||||||
if(lock_off) {
|
|
||||||
off();
|
|
||||||
lock_off = 0;
|
|
||||||
}
|
|
||||||
locked = 0;
|
|
||||||
}
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
static void
|
static void
|
||||||
set_txpower(uint8_t power)
|
set_txpower(uint8_t power)
|
||||||
{
|
{
|
||||||
|
@ -608,6 +594,11 @@ set_txpower(uint8_t power)
|
||||||
hal_subregister_write(SR_TX_PWR, power);
|
hal_subregister_write(SR_TX_PWR, power);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
void rf230_setpendingbit(uint8_t value)
|
||||||
|
{
|
||||||
|
hal_subregister_write(SR_AACK_SET_PD, value);
|
||||||
|
}
|
||||||
|
#if 0
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
/**
|
/**
|
||||||
\brief Calibrate the internal RC oscillator
|
\brief Calibrate the internal RC oscillator
|
||||||
|
@ -623,7 +614,6 @@ set_txpower(uint8_t power)
|
||||||
void
|
void
|
||||||
calibrate_rc_osc_32k(void)
|
calibrate_rc_osc_32k(void)
|
||||||
{
|
{
|
||||||
#if 0
|
|
||||||
|
|
||||||
/* Calibrate RC Oscillator: The calibration routine is done by clocking TIMER2
|
/* Calibrate RC Oscillator: The calibration routine is done by clocking TIMER2
|
||||||
* from the external 32kHz crystal while running an internal timer simultaneously.
|
* from the external 32kHz crystal while running an internal timer simultaneously.
|
||||||
|
@ -713,31 +703,18 @@ calibrate_rc_osc_32k(void)
|
||||||
// PRR0 |= (1 << PRTIM2);/* |(1 << PRTIM1); */
|
// PRR0 |= (1 << PRTIM2);/* |(1 << PRTIM1); */
|
||||||
|
|
||||||
AVR_LEAVE_CRITICAL_REGION();
|
AVR_LEAVE_CRITICAL_REGION();
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
int
|
int
|
||||||
rf230_init(void)
|
rf230_init(void)
|
||||||
{
|
{
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
DEBUGFLOW('i');
|
DEBUGFLOW('i');
|
||||||
/* A jtag or brownout reset of the mcu tristates the RF230 control pins while
|
|
||||||
* it is in operation, which can result in a mulfunctioning condition when the
|
|
||||||
* radio is later re-initialized.
|
|
||||||
* This manifests as an incorrectly computed hardware FCS checksum.
|
|
||||||
* Setting up the pins before the poweron time delay seems to fix this.
|
|
||||||
*/
|
|
||||||
#if 1 //this works after a brownout or jtag reset
|
|
||||||
/* Initialize Hardware Abstraction Layer */
|
|
||||||
hal_init();
|
|
||||||
/* Wait in case VCC just applied */
|
|
||||||
delay_us(TIME_TO_ENTER_P_ON);
|
|
||||||
#else //this gives FCS errors 5 out of 6 times
|
|
||||||
/* Wait in case VCC just applied */
|
/* Wait in case VCC just applied */
|
||||||
delay_us(TIME_TO_ENTER_P_ON);
|
delay_us(TIME_TO_ENTER_P_ON);
|
||||||
/* Initialize Hardware Abstraction Layer */
|
/* Initialize Hardware Abstraction Layer */
|
||||||
hal_init();
|
hal_init();
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Calibrate oscillator */
|
/* Calibrate oscillator */
|
||||||
// printf_P(PSTR("\nBefore calibration OSCCAL=%x\n"),OSCCAL);
|
// printf_P(PSTR("\nBefore calibration OSCCAL=%x\n"),OSCCAL);
|
||||||
|
@ -751,7 +728,18 @@ rf230_init(void)
|
||||||
/* Do full rf230 Reset */
|
/* Do full rf230 Reset */
|
||||||
hal_set_rst_low();
|
hal_set_rst_low();
|
||||||
hal_set_slptr_low();
|
hal_set_slptr_low();
|
||||||
|
#if 1
|
||||||
|
/* On powerup a TIME_RESET delay is needed here, however on some other MCU reset
|
||||||
|
* (JTAG, WDT, Brownout) the radio may be sleeping. It can enter an uncertain
|
||||||
|
* state (sending wrong hardware FCS for example) unless the full wakeup delay
|
||||||
|
* is done.
|
||||||
|
* Wake time depends on board capacitance; use 2x the nominal delay for safety.
|
||||||
|
* See www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=78725
|
||||||
|
*/
|
||||||
|
delay_us(2*TIME_SLEEP_TO_TRX_OFF);
|
||||||
|
#else
|
||||||
delay_us(TIME_RESET);
|
delay_us(TIME_RESET);
|
||||||
|
#endif
|
||||||
hal_set_rst_high();
|
hal_set_rst_high();
|
||||||
|
|
||||||
/* Force transition to TRX_OFF */
|
/* Force transition to TRX_OFF */
|
||||||
|
@ -858,17 +846,11 @@ rf230_transmit(unsigned short payload_len)
|
||||||
{
|
{
|
||||||
int txpower;
|
int txpower;
|
||||||
uint8_t total_len;
|
uint8_t total_len;
|
||||||
uint8_t radiowason;
|
|
||||||
uint8_t tx_result;
|
uint8_t tx_result;
|
||||||
#if RF230_CONF_TIMESTAMPS
|
#if RF230_CONF_TIMESTAMPS
|
||||||
struct timestamp timestamp;
|
struct timestamp timestamp;
|
||||||
#endif /* RF230_CONF_TIMESTAMPS */
|
#endif /* RF230_CONF_TIMESTAMPS */
|
||||||
|
|
||||||
GET_LOCK();
|
|
||||||
|
|
||||||
/* Save receiver state */
|
|
||||||
radiowason=RF230_receive_on;
|
|
||||||
|
|
||||||
/* If radio is sleeping we have to turn it on first */
|
/* If radio is sleeping we have to turn it on first */
|
||||||
/* This automatically does the PLL calibrations */
|
/* This automatically does the PLL calibrations */
|
||||||
if (hal_get_slptr()) {
|
if (hal_get_slptr()) {
|
||||||
|
@ -954,7 +936,7 @@ rf230_transmit(unsigned short payload_len)
|
||||||
#if defined(__AVR_ATmega128RFA1__)
|
#if defined(__AVR_ATmega128RFA1__)
|
||||||
sei();
|
sei();
|
||||||
#endif
|
#endif
|
||||||
PRINTF("rf230_transmit:\n");
|
PRINTF("rf230_transmit: %d\n", (int)total_len);
|
||||||
#if DEBUG>1
|
#if DEBUG>1
|
||||||
/* Note the dumped packet will have a zero checksum unless compiled with RF230_CONF_CHECKSUM
|
/* Note the dumped packet will have a zero checksum unless compiled with RF230_CONF_CHECKSUM
|
||||||
* since we don't know what it will be if calculated by the hardware.
|
* since we don't know what it will be if calculated by the hardware.
|
||||||
|
@ -979,7 +961,7 @@ rf230_transmit(unsigned short payload_len)
|
||||||
#if RF230_CONF_AUTORETRIES
|
#if RF230_CONF_AUTORETRIES
|
||||||
tx_result = hal_subregister_read(SR_TRAC_STATUS);
|
tx_result = hal_subregister_read(SR_TRAC_STATUS);
|
||||||
#else
|
#else
|
||||||
tx_result=0;
|
tx_result=RADIO_TX_OK;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ENERGEST_CONF_LEVELDEVICE_LEVELS
|
#ifdef ENERGEST_CONF_LEVELDEVICE_LEVELS
|
||||||
|
@ -991,14 +973,6 @@ rf230_transmit(unsigned short payload_len)
|
||||||
set_txpower(txpower & 0xff);
|
set_txpower(txpower & 0xff);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Restore receive mode */
|
|
||||||
if(radiowason) {
|
|
||||||
DEBUGFLOW('l');
|
|
||||||
on();
|
|
||||||
} else {
|
|
||||||
off();
|
|
||||||
}
|
|
||||||
|
|
||||||
#if RF230_CONF_TIMESTAMPS
|
#if RF230_CONF_TIMESTAMPS
|
||||||
setup_time_for_transmission = txtime - timestamp.time;
|
setup_time_for_transmission = txtime - timestamp.time;
|
||||||
|
|
||||||
|
@ -1012,24 +986,24 @@ rf230_transmit(unsigned short payload_len)
|
||||||
|
|
||||||
ENERGEST_OFF(ENERGEST_TYPE_TRANSMIT);
|
ENERGEST_OFF(ENERGEST_TYPE_TRANSMIT);
|
||||||
if(RF230_receive_on) {
|
if(RF230_receive_on) {
|
||||||
|
DEBUGFLOW('l');
|
||||||
ENERGEST_ON(ENERGEST_TYPE_LISTEN);
|
ENERGEST_ON(ENERGEST_TYPE_LISTEN);
|
||||||
|
on();
|
||||||
} else {
|
} else {
|
||||||
#if RADIOALWAYSON
|
#if RADIOALWAYSON
|
||||||
/* Enable reception */
|
/* Enable reception */
|
||||||
on();
|
on();
|
||||||
#else
|
#else
|
||||||
/* Go to lower power TRX_OFF state (turn off PLL) */
|
off();
|
||||||
hal_subregister_write(SR_TRX_CMD, CMD_FORCE_TRX_OFF);
|
PRINTF("rf230_transmit: turning radio off\n");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
RELEASE_LOCK();
|
|
||||||
|
|
||||||
#if RF230_INSERTACK
|
#if RF230_INSERTACK
|
||||||
ack_pending = 0;
|
ack_pending = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (tx_result==1) { //success, data pending from adressee
|
if (tx_result==1) { //success, data pending from addressee
|
||||||
tx_result=RADIO_TX_OK; //handle as ordinary success
|
tx_result=RADIO_TX_OK; //handle as ordinary success
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1051,6 +1025,7 @@ rf230_transmit(unsigned short payload_len)
|
||||||
} else if (tx_result==5) { //Expected ACK, none received
|
} else if (tx_result==5) { //Expected ACK, none received
|
||||||
DEBUGFLOW('n');
|
DEBUGFLOW('n');
|
||||||
tx_result = RADIO_TX_NOACK;
|
tx_result = RADIO_TX_NOACK;
|
||||||
|
PRINTF("rf230_transmit: ACK not received\n");
|
||||||
RIMESTATS_ADD(badackrx); //ack was requested but not received
|
RIMESTATS_ADD(badackrx); //ack was requested but not received
|
||||||
} else if (tx_result==7) { //Invalid (Can't happen since waited for idle above?)
|
} else if (tx_result==7) { //Invalid (Can't happen since waited for idle above?)
|
||||||
DEBUGFLOW('o');
|
DEBUGFLOW('o');
|
||||||
|
@ -1076,7 +1051,6 @@ rf230_prepare(const void *payload, unsigned short payload_len)
|
||||||
ack_seqnum=*(((uint8_t *)payload)+2);
|
ack_seqnum=*(((uint8_t *)payload)+2);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
GET_LOCK();
|
|
||||||
DEBUGFLOW('p');
|
DEBUGFLOW('p');
|
||||||
|
|
||||||
// PRINTF("rf230: sending %d bytes\n", payload_len);
|
// PRINTF("rf230: sending %d bytes\n", payload_len);
|
||||||
|
@ -1094,9 +1068,7 @@ rf230_prepare(const void *payload, unsigned short payload_len)
|
||||||
#if RADIOSTATS
|
#if RADIOSTATS
|
||||||
RF230_sendfail++;
|
RF230_sendfail++;
|
||||||
#endif
|
#endif
|
||||||
#if DEBUG
|
PRINTF("rf230_prepare: packet too large (%d, max: %d)\n",total_len,RF230_MAX_TX_FRAME_LENGTH);
|
||||||
printf_P(PSTR("rf230_prepare: packet too large (%d, max: %d)\n"),total_len,RF230_MAX_TX_FRAME_LENGTH);
|
|
||||||
#endif
|
|
||||||
ret = -1;
|
ret = -1;
|
||||||
goto bail;
|
goto bail;
|
||||||
}
|
}
|
||||||
|
@ -1130,7 +1102,6 @@ rf230_prepare(const void *payload, unsigned short payload_len)
|
||||||
|
|
||||||
|
|
||||||
bail:
|
bail:
|
||||||
RELEASE_LOCK();
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
|
@ -1146,9 +1117,7 @@ rf230_send(const void *payload, unsigned short payload_len)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if((ret=rf230_prepare(payload, payload_len))) {
|
if((ret=rf230_prepare(payload, payload_len))) {
|
||||||
#if DEBUG
|
PRINTF("rf230_send: Unable to send, prep failed (%d)\n",ret);
|
||||||
printf_P(PSTR("rf230_send: Unable to send, prep failed (%d)\n"),ret);
|
|
||||||
#endif
|
|
||||||
goto bail;
|
goto bail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1169,20 +1138,13 @@ rf230_off(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we are called when the driver is locked, we indicate that the
|
/* If we are currently receiving a packet, we still call off(),
|
||||||
radio should be turned off when the lock is unlocked. */
|
as that routine waits until Rx is complete (packet uploaded in ISR
|
||||||
if(locked) {
|
so no worries about losing it). If using RX_AACK_MODE, chances are
|
||||||
lock_off = 1;
|
the packet is not for us and will be discarded. */
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If we are currently receiving a packet
|
|
||||||
we don't actually switch the radio off now, but signal that the
|
|
||||||
driver should switch off the radio once the packet has been
|
|
||||||
received and processed, by setting the 'lock_off' variable. */
|
|
||||||
if (!rf230_isidle()) {
|
if (!rf230_isidle()) {
|
||||||
lock_off = 1;
|
PRINTF("rf230_off: busy receiving\r\n");
|
||||||
return 1;
|
//return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
off();
|
off();
|
||||||
|
@ -1196,11 +1158,6 @@ rf230_on(void)
|
||||||
DEBUGFLOW('q');
|
DEBUGFLOW('q');
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if(locked) {
|
|
||||||
lock_on = 1;
|
|
||||||
DEBUGFLOW('r');
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
on();
|
on();
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -1349,7 +1306,16 @@ PROCESS_THREAD(rf230_process, ev, data)
|
||||||
rf230_pending = 0;
|
rf230_pending = 0;
|
||||||
|
|
||||||
packetbuf_clear();
|
packetbuf_clear();
|
||||||
|
|
||||||
|
/* Turn off interrupts to avoid ISR writing to the same buffers we are reading. */
|
||||||
|
HAL_ENTER_CRITICAL_REGION();
|
||||||
|
|
||||||
len = rf230_read(packetbuf_dataptr(), PACKETBUF_SIZE);
|
len = rf230_read(packetbuf_dataptr(), PACKETBUF_SIZE);
|
||||||
|
|
||||||
|
/* Restore interrupts. */
|
||||||
|
HAL_LEAVE_CRITICAL_REGION();
|
||||||
|
PRINTF("rf230_read: %u bytes lqi %u\n",len,rf230_last_correlation);
|
||||||
|
|
||||||
RF230PROCESSFLAG(1);
|
RF230PROCESSFLAG(1);
|
||||||
if(len > 0) {
|
if(len > 0) {
|
||||||
packetbuf_set_datalen(len);
|
packetbuf_set_datalen(len);
|
||||||
|
@ -1370,10 +1336,13 @@ PROCESS_THREAD(rf230_process, ev, data)
|
||||||
|
|
||||||
PROCESS_END();
|
PROCESS_END();
|
||||||
}
|
}
|
||||||
/* Get packet from Radio if any, else return zero.
|
/* Read packet that was uploaded from Radio in ISR, else return zero.
|
||||||
* The two-byte checksum is appended but the returned length does not include it.
|
* The two-byte checksum is appended but the returned length does not include it.
|
||||||
* Frames are buffered in the interrupt routine so this routine
|
* Frames are buffered in the interrupt routine so this routine
|
||||||
* does not access the hardware or change its status.
|
* does not access the hardware or change its status.
|
||||||
|
* However, this routine must be called with interrupts disabled to avoid ISR
|
||||||
|
* writing to the same buffer we are reading.
|
||||||
|
* As a result, PRINTF cannot be used in here.
|
||||||
*/
|
*/
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
static int
|
static int
|
||||||
|
@ -1433,44 +1402,40 @@ if (!RF230_receive_on) {
|
||||||
rf230_time_of_departure = 0;
|
rf230_time_of_departure = 0;
|
||||||
#endif /* RF230_CONF_TIMESTAMPS */
|
#endif /* RF230_CONF_TIMESTAMPS */
|
||||||
|
|
||||||
|
// can't use PRINTF as interrupts are disabled
|
||||||
// PRINTSHORT("r%d",rxframe[rxframe_head].length);
|
// PRINTSHORT("r%d",rxframe[rxframe_head].length);
|
||||||
PRINTF("rf230_read: %u bytes lqi %u crc %u\n",rxframe[rxframe_head].length,rxframe[rxframe_head].lqi,rxframe[rxframe_head].crc);
|
//PRINTF("rf230_read: %u bytes lqi %u crc %u\n",rxframe[rxframe_head].length,rxframe[rxframe_head].lqi,rxframe[rxframe_head].crc);
|
||||||
#if DEBUG>1
|
#if DEBUG>1
|
||||||
{
|
{
|
||||||
uint8_t i;
|
//uint8_t i;
|
||||||
PRINTF("0000");
|
//PRINTF("0000");
|
||||||
for (i=0;i<rxframe[rxframe_head].length;i++) PRINTF(" %02x",rxframe[rxframe_head].data[i]);
|
//for (i=0;i<rxframe[rxframe_head].length;i++) PRINTF(" %02x",rxframe[rxframe_head].data[i]);
|
||||||
PRINTF("\n");
|
//PRINTF("\n");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// GET_LOCK();
|
|
||||||
|
|
||||||
//if(len > RF230_MAX_PACKET_LEN) {
|
//if(len > RF230_MAX_PACKET_LEN) {
|
||||||
if(len > RF230_MAX_TX_FRAME_LENGTH) {
|
if(len > RF230_MAX_TX_FRAME_LENGTH) {
|
||||||
/* Oops, we must be out of sync. */
|
/* Oops, we must be out of sync. */
|
||||||
DEBUGFLOW('u');
|
DEBUGFLOW('u');
|
||||||
flushrx();
|
flushrx();
|
||||||
RIMESTATS_ADD(badsynch);
|
RIMESTATS_ADD(badsynch);
|
||||||
// RELEASE_LOCK();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(len <= AUX_LEN) {
|
if(len <= AUX_LEN) {
|
||||||
DEBUGFLOW('s');
|
DEBUGFLOW('s');
|
||||||
PRINTF("len <= AUX_LEN\n");
|
//PRINTF("len <= AUX_LEN\n");
|
||||||
flushrx();
|
flushrx();
|
||||||
RIMESTATS_ADD(tooshort);
|
RIMESTATS_ADD(tooshort);
|
||||||
// RELEASE_LOCK();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(len - AUX_LEN > bufsize) {
|
if(len - AUX_LEN > bufsize) {
|
||||||
DEBUGFLOW('v');
|
DEBUGFLOW('v');
|
||||||
PRINTF("len - AUX_LEN > bufsize\n");
|
//PRINTF("len - AUX_LEN > bufsize\n");
|
||||||
flushrx();
|
flushrx();
|
||||||
RIMESTATS_ADD(toolong);
|
RIMESTATS_ADD(toolong);
|
||||||
// RELEASE_LOCK();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/* Transfer the frame, stripping the footer, but copying the checksum */
|
/* Transfer the frame, stripping the footer, but copying the checksum */
|
||||||
|
@ -1500,8 +1465,8 @@ if (!RF230_receive_on) {
|
||||||
#if RF230_CONF_CHECKSUM
|
#if RF230_CONF_CHECKSUM
|
||||||
if(checksum != crc16_data(buf, len - AUX_LEN, 0)) {
|
if(checksum != crc16_data(buf, len - AUX_LEN, 0)) {
|
||||||
DEBUGFLOW('w');
|
DEBUGFLOW('w');
|
||||||
PRINTF("checksum failed 0x%04x != 0x%04x\n",
|
//PRINTF("checksum failed 0x%04x != 0x%04x\n",
|
||||||
checksum, crc16_data(buf, len - AUX_LEN, 0));
|
// checksum, crc16_data(buf, len - AUX_LEN, 0));
|
||||||
}
|
}
|
||||||
#if FOOTER_LEN
|
#if FOOTER_LEN
|
||||||
if(footer[1] & FOOTER1_CRC_OK &&
|
if(footer[1] & FOOTER1_CRC_OK &&
|
||||||
|
@ -1547,7 +1512,7 @@ if (!RF230_receive_on) {
|
||||||
#if FOOTER_LEN
|
#if FOOTER_LEN
|
||||||
} else {
|
} else {
|
||||||
DEBUGFLOW('x');
|
DEBUGFLOW('x');
|
||||||
PRINTF("bad crc");
|
//PRINTF("bad crc");
|
||||||
RIMESTATS_ADD(badcrc);
|
RIMESTATS_ADD(badcrc);
|
||||||
len = AUX_LEN;
|
len = AUX_LEN;
|
||||||
}
|
}
|
||||||
|
@ -1572,9 +1537,7 @@ if (!RF230_receive_on) {
|
||||||
void
|
void
|
||||||
rf230_set_txpower(uint8_t power)
|
rf230_set_txpower(uint8_t power)
|
||||||
{
|
{
|
||||||
GET_LOCK();
|
|
||||||
set_txpower(power);
|
set_txpower(power);
|
||||||
RELEASE_LOCK();
|
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
uint8_t
|
uint8_t
|
||||||
|
@ -1632,17 +1595,6 @@ rf230_cca(void)
|
||||||
uint8_t cca=0;
|
uint8_t cca=0;
|
||||||
uint8_t radio_was_off = 0;
|
uint8_t radio_was_off = 0;
|
||||||
|
|
||||||
/* If the radio is locked by an underlying thread (because we are
|
|
||||||
being invoked through an interrupt), we preted that the coast is
|
|
||||||
clear (i.e., no packet is currently being transmitted by a
|
|
||||||
neighbor). */
|
|
||||||
if(locked) {
|
|
||||||
DEBUGFLOW('|');
|
|
||||||
// return 1; rf230 hangs on occasion?
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Turn radio on if necessary. If radio is currently busy return busy channel */
|
/* Turn radio on if necessary. If radio is currently busy return busy channel */
|
||||||
/* This may happen when testing radio duty cycling with RADIOALWAYSON */
|
/* This may happen when testing radio duty cycling with RADIOALWAYSON */
|
||||||
if(RF230_receive_on) {
|
if(RF230_receive_on) {
|
||||||
|
|
|
@ -88,6 +88,14 @@ ifdef WITH_UIP
|
||||||
CFLAGS += -DWITH_UIP=1
|
CFLAGS += -DWITH_UIP=1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
## Copied from Makefile.include, since Cooja overrides CFLAGS et al
|
||||||
|
ifdef UIP_CONF_IPV6
|
||||||
|
CFLAGS += -DUIP_CONF_IPV6=1
|
||||||
|
ifneq ($(UIP_CONF_RPL),0)
|
||||||
|
CFLAGS += -DUIP_CONF_IPV6_RPL=1
|
||||||
|
endif # UIP_CONF_RPL
|
||||||
|
endif # UIP_CONF_IPV6
|
||||||
|
|
||||||
REDEF_PRINTF=1 # Redefine functions to enable printf()s inside Cooja
|
REDEF_PRINTF=1 # Redefine functions to enable printf()s inside Cooja
|
||||||
|
|
||||||
### Define custom targets
|
### Define custom targets
|
||||||
|
|
|
@ -67,7 +67,7 @@ $1-makes:
|
||||||
$(MAKE) -C ../../examples/irc TARGET=$1
|
$(MAKE) -C ../../examples/irc TARGET=$1
|
||||||
$(MAKE) -C ../../examples/email TARGET=$1
|
$(MAKE) -C ../../examples/email TARGET=$1
|
||||||
$(MAKE) -C ../../examples/ftp TARGET=$1
|
$(MAKE) -C ../../examples/ftp TARGET=$1
|
||||||
$(MAKE) -C ../../../../contikiprojects/vandenbrande.com/twitter/platform/$1
|
$(MAKE) -C ../../../contikiprojects/vandenbrande.com/twitter/platform/$1
|
||||||
endef
|
endef
|
||||||
|
|
||||||
$(eval $(call makes,apple2enh))
|
$(eval $(call makes,apple2enh))
|
||||||
|
@ -125,7 +125,7 @@ apple2enh-4-disk: apple2enh-makes
|
||||||
java -jar $(AC) -p contiki-4.dsk dhcp.system sys 0 < ../apple2enh/loader.system
|
java -jar $(AC) -p contiki-4.dsk dhcp.system sys 0 < ../apple2enh/loader.system
|
||||||
java -jar $(AC) -cc65 contiki-4.dsk dhcp bin 0 < ../../cpu/6502/dhcp/dhcp-client.apple2enh
|
java -jar $(AC) -cc65 contiki-4.dsk dhcp bin 0 < ../../cpu/6502/dhcp/dhcp-client.apple2enh
|
||||||
java -jar $(AC) -p contiki-4.dsk breadbox.system sys 0 < ../apple2enh/loader.system
|
java -jar $(AC) -p contiki-4.dsk breadbox.system sys 0 < ../apple2enh/loader.system
|
||||||
java -jar $(AC) -cc65 contiki-4.dsk breadbox bin < ../../../../contikiprojects/vandenbrande.com/twitter/platform/apple2enh/breadbox64.apple2enh
|
java -jar $(AC) -cc65 contiki-4.dsk breadbox bin < ../../../contikiprojects/vandenbrande.com/twitter/platform/apple2enh/breadbox64.apple2enh
|
||||||
java -jar $(AC) -p contiki-4.dsk cs8900a.eth rel 0 < ../../cpu/6502/dhcp/cs8900a.eth
|
java -jar $(AC) -p contiki-4.dsk cs8900a.eth rel 0 < ../../cpu/6502/dhcp/cs8900a.eth
|
||||||
java -jar $(AC) -p contiki-4.dsk lan91c96.eth rel 0 < ../../cpu/6502/dhcp/lan91c96.eth
|
java -jar $(AC) -p contiki-4.dsk lan91c96.eth rel 0 < ../../cpu/6502/dhcp/lan91c96.eth
|
||||||
java -jar $(AC) -p contiki-4.dsk a2e.stdmou.mou rel 0 < $(CC65_HOME)/mou/a2e.stdmou.mou
|
java -jar $(AC) -p contiki-4.dsk a2e.stdmou.mou rel 0 < $(CC65_HOME)/mou/a2e.stdmou.mou
|
||||||
|
@ -150,35 +150,35 @@ c64-1-disk: c64-makes
|
||||||
|
|
||||||
c64-2-disk: c64-makes
|
c64-2-disk: c64-makes
|
||||||
$(C1541) -format contiki,00 d64 contiki-2.d64
|
$(C1541) -format contiki,00 d64 contiki-2.d64
|
||||||
$(C1541) -attach contiki-2.d64 -write dummy.cfg contiki.cfg,u
|
$(C1541) -attach contiki-2.d64 -write dummy.cfg contiki.cfg,u
|
||||||
$(C1541) -attach contiki-2.d64 -write ../../cpu/6502/dhcp/dhcp-client.c64 dhcp,p
|
$(C1541) -attach contiki-2.d64 -write ../../cpu/6502/dhcp/dhcp-client.c64 dhcp,p
|
||||||
$(C1541) -attach contiki-2.d64 -write ../../examples/email/email-client.c64 email,p
|
$(C1541) -attach contiki-2.d64 -write ../../examples/email/email-client.c64 email,p
|
||||||
$(C1541) -attach contiki-2.d64 -write ../../examples/ftp/ftp-client.c64 ftp,p
|
$(C1541) -attach contiki-2.d64 -write ../../examples/ftp/ftp-client.c64 ftp,p
|
||||||
$(C1541) -attach contiki-2.d64 -write ../../../../contikiprojects/vandenbrande.com/twitter/platform/c64/breadbox64.c64 breadbox64,p
|
$(C1541) -attach contiki-2.d64 -write ../../../contikiprojects/vandenbrande.com/twitter/platform/c64/breadbox64.c64 breadbox64,p
|
||||||
$(C1541) -attach contiki-2.d64 -write ../../cpu/6502/dhcp/cs8900a.eth cs8900a.eth,u
|
$(C1541) -attach contiki-2.d64 -write ../../cpu/6502/dhcp/cs8900a.eth cs8900a.eth,u
|
||||||
$(C1541) -attach contiki-2.d64 -write ../../cpu/6502/dhcp/lan91c96.eth lan91c96.eth,u
|
$(C1541) -attach contiki-2.d64 -write ../../cpu/6502/dhcp/lan91c96.eth lan91c96.eth,u
|
||||||
$(C1541) -attach contiki-2.d64 -write $(CC65_HOME)/mou/c64-1351.mou c64-1351.mou,u
|
$(C1541) -attach contiki-2.d64 -write $(CC65_HOME)/mou/c64-1351.mou c64-1351.mou,u
|
||||||
|
|
||||||
$(eval $(call makes,c128))
|
$(eval $(call makes,c128))
|
||||||
|
|
||||||
c128-1-disk: c128-makes
|
c128-1-disk: c128-makes
|
||||||
$(C1541) -format contiki,00 d71 contiki-1.d71
|
$(C1541) -format contiki,00 d71 contiki-1.d71
|
||||||
$(C1541) -attach contiki-1.d71 -write dummy.cfg contiki.cfg,u
|
$(C1541) -attach contiki-1.d71 -write dummy.cfg contiki.cfg,u
|
||||||
$(C1541) -attach contiki-1.d71 -write ../../cpu/6502/dhcp/dhcp-client.c128 dhcp,p
|
$(C1541) -attach contiki-1.d71 -write ../../cpu/6502/dhcp/dhcp-client.c128 dhcp,p
|
||||||
$(C1541) -attach contiki-1.d71 -write ../../examples/webserver/webserver-example.c128 webserver,p
|
$(C1541) -attach contiki-1.d71 -write ../../examples/webserver/webserver-example.c128 webserver,p
|
||||||
$(C1541) -attach contiki-1.d71 -write ../../examples/webbrowser/webbrowser.c128 webbrowser,p
|
$(C1541) -attach contiki-1.d71 -write ../../examples/webbrowser/webbrowser.c128 webbrowser,p
|
||||||
$(C1541) -attach contiki-1.d71 -write ../../examples/wget/wget.c128 wget,p
|
$(C1541) -attach contiki-1.d71 -write ../../examples/wget/wget.c128 wget,p
|
||||||
$(C1541) -attach contiki-1.d71 -write ../../examples/irc/irc-client.c128 irc,p
|
$(C1541) -attach contiki-1.d71 -write ../../examples/irc/irc-client.c128 irc,p
|
||||||
$(C1541) -attach contiki-1.d71 -write ../../examples/email/email-client.c128 email,p
|
$(C1541) -attach contiki-1.d71 -write ../../examples/email/email-client.c128 email,p
|
||||||
$(C1541) -attach contiki-1.d71 -write ../../examples/ftp/ftp-client.c128 ftp,p
|
$(C1541) -attach contiki-1.d71 -write ../../examples/ftp/ftp-client.c128 ftp,p
|
||||||
$(C1541) -attach contiki-1.d71 -write ../../../../contikiprojects/vandenbrande.com/twitter/platform/c128/breadbox64.c128 breadbox64,p
|
$(C1541) -attach contiki-1.d71 -write ../../../contikiprojects/vandenbrande.com/twitter/platform/c128/breadbox64.c128 breadbox64,p
|
||||||
$(C1541) -attach contiki-1.d71 -write ../../cpu/6502/dhcp/cs8900a.eth cs8900a.eth,u
|
$(C1541) -attach contiki-1.d71 -write ../../cpu/6502/dhcp/cs8900a.eth cs8900a.eth,u
|
||||||
$(C1541) -attach contiki-1.d71 -write ../../cpu/6502/dhcp/lan91c96.eth lan91c96.eth,u
|
$(C1541) -attach contiki-1.d71 -write ../../cpu/6502/dhcp/lan91c96.eth lan91c96.eth,u
|
||||||
$(C1541) -attach contiki-1.d71 -write $(CC65_HOME)/mou/c128-1351.mou c128-1351.mou,u
|
$(C1541) -attach contiki-1.d71 -write $(CC65_HOME)/mou/c128-1351.mou c128-1351.mou,u
|
||||||
$(C1541) -attach contiki-1.d71 -write ../../examples/webserver/httpd-cfs/index.htm index.htm,u
|
$(C1541) -attach contiki-1.d71 -write ../../examples/webserver/httpd-cfs/index.htm index.htm,u
|
||||||
$(C1541) -attach contiki-1.d71 -write ../../examples/webserver/httpd-cfs/backgrnd.gif backgrnd.gif,u
|
$(C1541) -attach contiki-1.d71 -write ../../examples/webserver/httpd-cfs/backgrnd.gif backgrnd.gif,u
|
||||||
$(C1541) -attach contiki-1.d71 -write ../../examples/webserver/httpd-cfs/contiki.gif contiki.gif,u
|
$(C1541) -attach contiki-1.d71 -write ../../examples/webserver/httpd-cfs/contiki.gif contiki.gif,u
|
||||||
$(C1541) -attach contiki-1.d71 -write ../../examples/webserver/httpd-cfs/notfound.htm notfound.htm,u
|
$(C1541) -attach contiki-1.d71 -write ../../examples/webserver/httpd-cfs/notfound.htm notfound.htm,u
|
||||||
|
|
||||||
$(eval $(call makes,atari))
|
$(eval $(call makes,atari))
|
||||||
|
|
||||||
|
@ -221,10 +221,10 @@ atari-3-disk: atari-makes
|
||||||
|
|
||||||
atari-4-disk: atari-makes
|
atari-4-disk: atari-makes
|
||||||
mkdir -p atr
|
mkdir -p atr
|
||||||
cp ../atari/dos.sys atr/dos.sys
|
cp ../atari/dos.sys atr/dos.sys
|
||||||
cp ../atari/dup.sys atr/dup.sys
|
cp ../atari/dup.sys atr/dup.sys
|
||||||
cp dummy.cfg atr/contiki.cfg
|
cp dummy.cfg atr/contiki.cfg
|
||||||
cp ../../cpu/6502/dhcp/dhcp-client.atari atr/dhcp.com
|
cp ../../cpu/6502/dhcp/dhcp-client.atari atr/dhcp.com
|
||||||
cp ../../../../contikiprojects/vandenbrande.com/twitter/platform/atari/breadbox64.atari atr/breadbox.com
|
cp ../../../contikiprojects/vandenbrande.com/twitter/platform/atari/breadbox64.atari atr/breadbox.com
|
||||||
$(DIR2ATR) -b Dos25 1040 contiki-4.atr atr
|
$(DIR2ATR) -b Dos25 1040 contiki-4.atr atr
|
||||||
rm -r atr
|
rm -r atr
|
||||||
|
|
|
@ -1474,6 +1474,7 @@ public class CollectServer implements SerialConnectionListener {
|
||||||
boolean resetSensorLog = false;
|
boolean resetSensorLog = false;
|
||||||
boolean useSensorLog = true;
|
boolean useSensorLog = true;
|
||||||
boolean useSerialOutput = true;
|
boolean useSerialOutput = true;
|
||||||
|
String host = null;
|
||||||
String command = null;
|
String command = null;
|
||||||
String logFileToLoad = null;
|
String logFileToLoad = null;
|
||||||
String comPort = null;
|
String comPort = null;
|
||||||
|
@ -1482,6 +1483,18 @@ public class CollectServer implements SerialConnectionListener {
|
||||||
String arg = args[i];
|
String arg = args[i];
|
||||||
if (arg.length() == 2 && arg.charAt(0) == '-') {
|
if (arg.length() == 2 && arg.charAt(0) == '-') {
|
||||||
switch (arg.charAt(1)) {
|
switch (arg.charAt(1)) {
|
||||||
|
case 'a':
|
||||||
|
if (i + 1 < n) {
|
||||||
|
host = args[++i];
|
||||||
|
int pIndex = host.indexOf(':');
|
||||||
|
if (pIndex > 0) {
|
||||||
|
port = Integer.parseInt(host.substring(pIndex + 1));
|
||||||
|
host = host.substring(0, pIndex);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
usage(arg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 'c':
|
case 'c':
|
||||||
if (i + 1 < n) {
|
if (i + 1 < n) {
|
||||||
command = args[++i];
|
command = args[++i];
|
||||||
|
@ -1527,7 +1540,12 @@ public class CollectServer implements SerialConnectionListener {
|
||||||
|
|
||||||
CollectServer server = new CollectServer();
|
CollectServer server = new CollectServer();
|
||||||
SerialConnection serialConnection;
|
SerialConnection serialConnection;
|
||||||
if (port > 0) {
|
if (host != null) {
|
||||||
|
if (port <= 0) {
|
||||||
|
port = 60001;
|
||||||
|
}
|
||||||
|
serialConnection = new TCPClientConnection(server, host, port);
|
||||||
|
} else if (port > 0) {
|
||||||
serialConnection = new UDPConnection(server, port);
|
serialConnection = new UDPConnection(server, port);
|
||||||
} else if (command == null) {
|
} else if (command == null) {
|
||||||
serialConnection = new SerialDumpConnection(server);
|
serialConnection = new SerialDumpConnection(server);
|
||||||
|
@ -1560,11 +1578,12 @@ public class CollectServer implements SerialConnectionListener {
|
||||||
if (arg != null) {
|
if (arg != null) {
|
||||||
System.err.println("Unknown argument '" + arg + '\'');
|
System.err.println("Unknown argument '" + arg + '\'');
|
||||||
}
|
}
|
||||||
System.err.println("Usage: java CollectServer [-n] [-i] [-r] [-f [file]] [-p port] [-c command] [COMPORT]");
|
System.err.println("Usage: java CollectServer [-n] [-i] [-r] [-f [file]] [-a host:port] [-p port] [-c command] [COMPORT]");
|
||||||
System.err.println(" -n : Do not read or save sensor data log");
|
System.err.println(" -n : Do not read or save sensor data log");
|
||||||
System.err.println(" -r : Clear any existing sensor data log at startup");
|
System.err.println(" -r : Clear any existing sensor data log at startup");
|
||||||
System.err.println(" -i : Do not allow serial output");
|
System.err.println(" -i : Do not allow serial output");
|
||||||
System.err.println(" -f : Read serial data from standard in");
|
System.err.println(" -f : Read serial data from standard in");
|
||||||
|
System.err.println(" -a : Connect to specified host:port");
|
||||||
System.err.println(" -p : Read data from specified UDP port");
|
System.err.println(" -p : Read data from specified UDP port");
|
||||||
System.err.println(" -c : Use specified command for serial data input/output");
|
System.err.println(" -c : Use specified command for serial data input/output");
|
||||||
System.err.println(" COMPORT: The serial port to connect to");
|
System.err.println(" COMPORT: The serial port to connect to");
|
||||||
|
|
|
@ -0,0 +1,130 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2012, Swedish Institute of Computer Science.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. Neither the name of the Institute nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* -----------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* TCPClientConnection
|
||||||
|
*
|
||||||
|
* Authors : Niclas Finne
|
||||||
|
*/
|
||||||
|
|
||||||
|
package se.sics.contiki.collect;
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.PrintStream;
|
||||||
|
import java.net.Socket;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class TCPClientConnection extends SerialConnection {
|
||||||
|
|
||||||
|
private final String host;
|
||||||
|
private final int port;
|
||||||
|
|
||||||
|
private Socket client;
|
||||||
|
private BufferedReader in;
|
||||||
|
private PrintStream out;
|
||||||
|
|
||||||
|
public TCPClientConnection(SerialConnectionListener listener, String host, int port) {
|
||||||
|
super(listener);
|
||||||
|
this.host = host;
|
||||||
|
this.port = port;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getConnectionName() {
|
||||||
|
return "<tcp://" + host + ':' + port + '>';
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void open(String comPort) {
|
||||||
|
close();
|
||||||
|
this.comPort = comPort == null ? "" : comPort;
|
||||||
|
|
||||||
|
isClosed = false;
|
||||||
|
try {
|
||||||
|
client = new Socket(host, port);
|
||||||
|
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
|
||||||
|
out = new PrintStream(client.getOutputStream());
|
||||||
|
System.out.println("Opened TCP connection to " + host + ':' + port);
|
||||||
|
/* Start thread listening on UDP */
|
||||||
|
Thread readInput = new Thread(new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
String line;
|
||||||
|
while (isOpen && (line = in.readLine()) != null) {
|
||||||
|
serialData(line);
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
lastError = "Error when reading from SerialConnection TCP: " + e;
|
||||||
|
System.err.println(lastError);
|
||||||
|
if (!isClosed) {
|
||||||
|
e.printStackTrace();
|
||||||
|
closeConnection();
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
System.out.println("SerialConnection TCP terminated.");
|
||||||
|
closeConnection();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, "TCP thread");
|
||||||
|
isOpen = true;
|
||||||
|
serialOpened();
|
||||||
|
readInput.start();
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
lastError = "Failed to open TCP connection to " + host + ':' + port + ": " + e;
|
||||||
|
System.err.println(lastError);
|
||||||
|
e.printStackTrace();
|
||||||
|
closeConnection();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void doClose() {
|
||||||
|
try {
|
||||||
|
if (in != null) {
|
||||||
|
in.close();
|
||||||
|
in = null;
|
||||||
|
}
|
||||||
|
if (out != null) {
|
||||||
|
out.close();
|
||||||
|
out = null;
|
||||||
|
}
|
||||||
|
if (client != null) {
|
||||||
|
client.close();
|
||||||
|
client = null;
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,8 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<simconf>
|
<simconf>
|
||||||
<project>[CONTIKI_DIR]/tools/cooja/apps/mrm</project>
|
|
||||||
<project>[CONTIKI_DIR]/tools/cooja/apps/mspsim</project>
|
|
||||||
<project>[CONTIKI_DIR]/tools/cooja/apps/avrora</project>
|
|
||||||
<simulation>
|
<simulation>
|
||||||
<title>My simulation</title>
|
<title>My simulation</title>
|
||||||
<delaytime>0</delaytime>
|
<delaytime>0</delaytime>
|
||||||
|
@ -22,8 +19,8 @@
|
||||||
se.sics.cooja.mspmote.SkyMoteType
|
se.sics.cooja.mspmote.SkyMoteType
|
||||||
<identifier>sky1</identifier>
|
<identifier>sky1</identifier>
|
||||||
<description>Sky Mote Type #sky1</description>
|
<description>Sky Mote Type #sky1</description>
|
||||||
<source>[CONTIKI_DIR]/examples/sky-shell-exec/sky-shell-exec.c</source>
|
<source EXPORT="discard">[CONTIKI_DIR]/examples/sky-shell-exec/sky-shell-exec.c</source>
|
||||||
<commands>echo CLEANING
|
<commands EXPORT="discard">echo CLEANING
|
||||||
make clean TARGET=sky
|
make clean TARGET=sky
|
||||||
|
|
||||||
echo COMPILING CONTIKI EXECUTABLE
|
echo COMPILING CONTIKI EXECUTABLE
|
||||||
|
@ -35,7 +32,7 @@ make sky-shell-exec.sky CORE=sky-shell-exec.sky TARGET=sky
|
||||||
make sky-shell-exec.sky CORE=sky-shell-exec.sky TARGET=sky
|
make sky-shell-exec.sky CORE=sky-shell-exec.sky TARGET=sky
|
||||||
make sky-shell-exec.sky CORE=sky-shell-exec.sky TARGET=sky
|
make sky-shell-exec.sky CORE=sky-shell-exec.sky TARGET=sky
|
||||||
make sky-shell-exec.sky CORE=sky-shell-exec.sky TARGET=sky</commands>
|
make sky-shell-exec.sky CORE=sky-shell-exec.sky TARGET=sky</commands>
|
||||||
<firmware>[CONTIKI_DIR]/examples/sky-shell-exec/sky-shell-exec.sky</firmware>
|
<firmware EXPORT="copy">[CONTIKI_DIR]/examples/sky-shell-exec/sky-shell-exec.sky</firmware>
|
||||||
<moteinterface>se.sics.cooja.interfaces.Position</moteinterface>
|
<moteinterface>se.sics.cooja.interfaces.Position</moteinterface>
|
||||||
<moteinterface>se.sics.cooja.interfaces.IPAddress</moteinterface>
|
<moteinterface>se.sics.cooja.interfaces.IPAddress</moteinterface>
|
||||||
<moteinterface>se.sics.cooja.interfaces.Mote2MoteRelations</moteinterface>
|
<moteinterface>se.sics.cooja.interfaces.Mote2MoteRelations</moteinterface>
|
||||||
|
@ -44,12 +41,10 @@ make sky-shell-exec.sky CORE=sky-shell-exec.sky TARGET=sky</commands>
|
||||||
<moteinterface>se.sics.cooja.mspmote.interfaces.SkyButton</moteinterface>
|
<moteinterface>se.sics.cooja.mspmote.interfaces.SkyButton</moteinterface>
|
||||||
<moteinterface>se.sics.cooja.mspmote.interfaces.SkyFlash</moteinterface>
|
<moteinterface>se.sics.cooja.mspmote.interfaces.SkyFlash</moteinterface>
|
||||||
<moteinterface>se.sics.cooja.mspmote.interfaces.SkyByteRadio</moteinterface>
|
<moteinterface>se.sics.cooja.mspmote.interfaces.SkyByteRadio</moteinterface>
|
||||||
<moteinterface>se.sics.cooja.mspmote.interfaces.SkySerial</moteinterface>
|
<moteinterface>se.sics.cooja.mspmote.interfaces.MspSerial</moteinterface>
|
||||||
<moteinterface>se.sics.cooja.mspmote.interfaces.SkyLED</moteinterface>
|
<moteinterface>se.sics.cooja.mspmote.interfaces.SkyLED</moteinterface>
|
||||||
</motetype>
|
</motetype>
|
||||||
<mote>
|
<mote>
|
||||||
se.sics.cooja.mspmote.SkyMote
|
|
||||||
<motetype_identifier>sky1</motetype_identifier>
|
|
||||||
<breakpoints />
|
<breakpoints />
|
||||||
<interface_config>
|
<interface_config>
|
||||||
se.sics.cooja.interfaces.Position
|
se.sics.cooja.interfaces.Position
|
||||||
|
@ -61,6 +56,11 @@ make sky-shell-exec.sky CORE=sky-shell-exec.sky TARGET=sky</commands>
|
||||||
se.sics.cooja.mspmote.interfaces.MspMoteID
|
se.sics.cooja.mspmote.interfaces.MspMoteID
|
||||||
<id>1</id>
|
<id>1</id>
|
||||||
</interface_config>
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
se.sics.cooja.mspmote.interfaces.MspSerial
|
||||||
|
<history>ls~;~K~;ls~;read hello-world.b64~;</history>
|
||||||
|
</interface_config>
|
||||||
|
<motetype_identifier>sky1</motetype_identifier>
|
||||||
</mote>
|
</mote>
|
||||||
</simulation>
|
</simulation>
|
||||||
<plugin>
|
<plugin>
|
||||||
|
@ -70,7 +70,6 @@ make sky-shell-exec.sky CORE=sky-shell-exec.sky TARGET=sky</commands>
|
||||||
<height>200</height>
|
<height>200</height>
|
||||||
<location_x>0</location_x>
|
<location_x>0</location_x>
|
||||||
<location_y>0</location_y>
|
<location_y>0</location_y>
|
||||||
<minimized>false</minimized>
|
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
se.sics.cooja.plugins.MoteInterfaceViewer
|
se.sics.cooja.plugins.MoteInterfaceViewer
|
||||||
|
@ -84,7 +83,6 @@ make sky-shell-exec.sky CORE=sky-shell-exec.sky TARGET=sky</commands>
|
||||||
<height>551</height>
|
<height>551</height>
|
||||||
<location_x>3</location_x>
|
<location_x>3</location_x>
|
||||||
<location_y>347</location_y>
|
<location_y>347</location_y>
|
||||||
<minimized>false</minimized>
|
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
se.sics.cooja.mspmote.plugins.MspStackWatcher
|
se.sics.cooja.mspmote.plugins.MspStackWatcher
|
||||||
|
@ -94,7 +92,6 @@ make sky-shell-exec.sky CORE=sky-shell-exec.sky TARGET=sky</commands>
|
||||||
<height>201</height>
|
<height>201</height>
|
||||||
<location_x>247</location_x>
|
<location_x>247</location_x>
|
||||||
<location_y>-1</location_y>
|
<location_y>-1</location_y>
|
||||||
<minimized>false</minimized>
|
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
se.sics.cooja.plugins.ScriptRunner
|
se.sics.cooja.plugins.ScriptRunner
|
||||||
|
@ -151,7 +148,7 @@ while (!msg.contains("Contiki>")) {
|
||||||
log.testFailed();
|
log.testFailed();
|
||||||
} else {
|
} else {
|
||||||
log.log("VERIFIED: " + msg + "\n");
|
log.log("VERIFIED: " + msg + "\n");
|
||||||
sb.replace(0, msg.length()-1, new String(""));
|
sb.replace(0, msg.trim().length(), new String(""));
|
||||||
}
|
}
|
||||||
|
|
||||||
YIELD();
|
YIELD();
|
||||||
|
@ -192,8 +189,7 @@ while (true) {
|
||||||
log.log("> ELF loader error: " + msg +"\n");
|
log.log("> ELF loader error: " + msg +"\n");
|
||||||
log.testFailed();
|
log.testFailed();
|
||||||
}
|
}
|
||||||
}
|
}</script>
|
||||||
</script>
|
|
||||||
<active>true</active>
|
<active>true</active>
|
||||||
</plugin_config>
|
</plugin_config>
|
||||||
<width>600</width>
|
<width>600</width>
|
||||||
|
@ -201,7 +197,6 @@ while (true) {
|
||||||
<height>700</height>
|
<height>700</height>
|
||||||
<location_x>215</location_x>
|
<location_x>215</location_x>
|
||||||
<location_y>199</location_y>
|
<location_y>199</location_y>
|
||||||
<minimized>false</minimized>
|
|
||||||
</plugin>
|
</plugin>
|
||||||
</simconf>
|
</simconf>
|
||||||
|
|
||||||
|
|
Binary file not shown.
Loading…
Add table
Reference in a new issue