mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2026-01-01 01:41:18 +01:00
* added getter and setter for the channel to transceiver
* receiving now seems to work...
This commit is contained in:
parent
c1e536d59c
commit
d378ee1930
@ -203,14 +203,15 @@ void cc1100_switch_to_rx(void) {
|
||||
}
|
||||
|
||||
void cc1100_wakeup_from_rx(void) {
|
||||
if (radio_state != RADIO_RX) return;
|
||||
if (radio_state != RADIO_RX) {
|
||||
return;
|
||||
}
|
||||
DEBUG("CC1100 going to idle\n");
|
||||
cc1100_spi_strobe(CC1100_SIDLE);
|
||||
radio_state = RADIO_IDLE;
|
||||
}
|
||||
|
||||
char* cc1100_get_marc_state(void)
|
||||
{
|
||||
char* cc1100_get_marc_state(void) {
|
||||
uint8_t state;
|
||||
|
||||
// Save old radio state
|
||||
@ -289,12 +290,17 @@ void switch_to_pwd(void) {
|
||||
}
|
||||
|
||||
uint8_t cc1100_set_channel(uint8_t channr) {
|
||||
if (channr > MAX_CHANNR) {
|
||||
uint8_t state = cc1100_spi_read_status(CC1100_MARCSTATE) & MARC_STATE;
|
||||
if (state != 1) && ((channr > MAX_CHANNR)) {
|
||||
return 0;
|
||||
}
|
||||
write_register(CC1100_CHANNR, channr*10);
|
||||
radio_channel = channr;
|
||||
return 1;
|
||||
return radio_channel;
|
||||
}
|
||||
|
||||
uint8_t cc1100_get_channel(void) {
|
||||
return radio_channel;
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/* Internal functions */
|
||||
@ -304,8 +310,6 @@ static uint8_t receive_packet_variable(uint8_t *rxBuffer, uint8_t length) {
|
||||
uint8_t status[2];
|
||||
uint8_t packetLength = 0;
|
||||
|
||||
printf("Current radio state: %s\r\n", cc1100_state_to_text(radio_state));
|
||||
printf("Current MARC state: %s\r\n", cc1100_get_marc_state());
|
||||
/* Any bytes available in RX FIFO? */
|
||||
if ((cc1100_spi_read_status(CC1100_RXBYTES) & BYTES_IN_RXFIFO)) {
|
||||
LED_GREEN_TOGGLE;
|
||||
|
||||
@ -96,6 +96,7 @@ void cc1100_switch_to_pwd(void);
|
||||
|
||||
void cc1100_disable_interrupts(void);
|
||||
uint8_t cc1100_set_channel(uint8_t channr);
|
||||
uint8_t cc1100_get_channel(void);
|
||||
|
||||
void cc1100_print_config(void);
|
||||
#endif
|
||||
|
||||
@ -11,25 +11,42 @@
|
||||
#define SHELL_STACK_SIZE (4096)
|
||||
#define RADIO_STACK_SIZE (4096)
|
||||
|
||||
int transceiver_pid;
|
||||
int radio_pid;
|
||||
char shell_stack_buffer[SHELL_STACK_SIZE];
|
||||
char radio_stack_buffer[RADIO_STACK_SIZE];
|
||||
|
||||
void trans_run(char *unused);
|
||||
void trans_chan(char *chan);
|
||||
void trans_register(char *unused);
|
||||
|
||||
msg mesg;
|
||||
transceiver_command_t tcmd;
|
||||
|
||||
shell_t shell;
|
||||
const shell_command_t sc[] = {
|
||||
{"trun", "Run the transceiver thread", trans_run},
|
||||
{"tchan", "Set the channel for cc1100", trans_chan},
|
||||
{"treg", "Register application for CC1100", trans_register},
|
||||
{NULL, NULL, NULL}};
|
||||
|
||||
void trans_run(char *unused) {
|
||||
puts("NOP");
|
||||
void trans_chan(char *chan) {
|
||||
unsigned int c;
|
||||
|
||||
tcmd.transceivers = TRANSCEIVER_CC1100;
|
||||
tcmd.data = &c;
|
||||
mesg.content.ptr = (char*) &tcmd;
|
||||
if (sscanf(chan, "tchan %u", &c)) {
|
||||
printf("Trying to set channel %u\n", c);
|
||||
mesg.type = SET_CHANNEL;
|
||||
}
|
||||
else {
|
||||
mesg.type = GET_CHANNEL;
|
||||
}
|
||||
msg_send_receive(&mesg, &mesg, transceiver_pid);
|
||||
printf("Got channel: %hu\n", c);
|
||||
}
|
||||
|
||||
void trans_register(char *unused) {
|
||||
transceiver_register(TRANSCEIVER_CC1100, active_thread->pid);
|
||||
transceiver_register(TRANSCEIVER_CC1100, radio_pid);
|
||||
}
|
||||
|
||||
void shell_runner(void) {
|
||||
@ -49,9 +66,11 @@ void radio(void) {
|
||||
|
||||
int main(void) {
|
||||
thread_create(shell_stack_buffer, SHELL_STACK_SIZE, PRIORITY_MAIN-1, CREATE_STACKTEST, shell_runner, "shell");
|
||||
thread_create(radio_stack_buffer, RADIO_STACK_SIZE, PRIORITY_MAIN-2, CREATE_STACKTEST, radio, "radio");
|
||||
radio_pid = thread_create(radio_stack_buffer, RADIO_STACK_SIZE, PRIORITY_MAIN-2, CREATE_STACKTEST, radio, "radio");
|
||||
transceiver_init(TRANSCEIVER_CC1100);
|
||||
transceiver_start();
|
||||
transceiver_pid = transceiver_start();
|
||||
extern void cc1100_set_channel(uint8_t c);
|
||||
cc1100_set_channel(6);
|
||||
|
||||
while (1) {
|
||||
// LED_GREEN_TOGGLE;
|
||||
|
||||
@ -25,6 +25,8 @@ enum transceiver_msg_type_t {
|
||||
SND_ACK, ///< request for sending an acknowledgement
|
||||
SWITCH_RX, ///< switch transceiver to RX sate
|
||||
POWERDOWN, ///< power down transceiver
|
||||
GET_CHANNEL, ///< Get current channel
|
||||
SET_CHANNEL, ///< Set a new channel
|
||||
|
||||
/* Error messages */
|
||||
ENOBUFFER,
|
||||
@ -49,8 +51,8 @@ typedef struct {
|
||||
|
||||
typedef struct {
|
||||
transceiver_type_t transceivers;
|
||||
radio_packet_t *packet;
|
||||
} send_packet_t;
|
||||
void *data;
|
||||
} transceiver_command_t;;
|
||||
|
||||
extern void *transceiver_rx_buffer;
|
||||
|
||||
|
||||
@ -40,7 +40,9 @@ char transceiver_stack[TRANSCEIVER_STACK_SIZE];
|
||||
static void run(void);
|
||||
static void receive_packet(uint16_t type, uint8_t pos);
|
||||
static void receive_cc1100_packet(radio_packet_t *trans_p);
|
||||
static uint8_t send_packet(transceiver_type_t t, radio_packet_t *pkt);
|
||||
static uint8_t send_packet(transceiver_type_t t, void *pkt);
|
||||
static uint8_t get_channel(transceiver_type_t t);
|
||||
static uint8_t set_channel(transceiver_type_t t, void *channel);
|
||||
|
||||
void transceiver_init(transceiver_type_t t) {
|
||||
uint8_t i;
|
||||
@ -90,11 +92,9 @@ uint8_t transceiver_register(transceiver_type_t t, int pid) {
|
||||
/*------------------------------------------------------------------------------------*/
|
||||
void run(void) {
|
||||
msg m;
|
||||
send_packet_t *spkt;
|
||||
transceiver_command_t *cmd;
|
||||
|
||||
while (1) {
|
||||
DEBUG("Waiting for messages\n");
|
||||
/* TODO: check here if message was lost, while handling the last */
|
||||
msg_receive(&m);
|
||||
DEBUG("Transceiver: Message received\n");
|
||||
switch (m.type) {
|
||||
@ -103,8 +103,18 @@ void run(void) {
|
||||
receive_packet(m.type, m.content.value);
|
||||
break;
|
||||
case SND_PKT:
|
||||
spkt = (send_packet_t*) m.content.ptr;
|
||||
send_packet(spkt->transceivers, spkt->packet);
|
||||
cmd = (transceiver_command_t*) m.content.ptr;
|
||||
send_packet(cmd->transceivers, cmd->data);
|
||||
break;
|
||||
case GET_CHANNEL:
|
||||
cmd = (transceiver_command_t*) m.content.ptr;
|
||||
*((uint8_t*) cmd->data) = get_channel(cmd->transceivers);
|
||||
msg_reply(&m, &m);
|
||||
break;
|
||||
case SET_CHANNEL:
|
||||
cmd = (transceiver_command_t*) m.content.ptr;
|
||||
*((uint8_t*) cmd->data) = set_channel(cmd->transceivers, cmd->data);
|
||||
msg_reply(&m, &m);
|
||||
break;
|
||||
default:
|
||||
DEBUG("Unknown message received\n");
|
||||
@ -151,6 +161,7 @@ static void receive_packet(uint16_t type, uint8_t pos) {
|
||||
|
||||
if (type == RCV_PKT_CC1100) {
|
||||
receive_cc1100_packet(&trans_p);
|
||||
m.content.value = transceiver_buffer_pos;
|
||||
}
|
||||
else {
|
||||
puts("Invalid transceiver type");
|
||||
@ -189,7 +200,26 @@ static void receive_cc1100_packet(radio_packet_t *trans_p) {
|
||||
}
|
||||
|
||||
|
||||
static uint8_t send_packet(transceiver_type_t t, radio_packet_t *pkt) {
|
||||
static uint8_t send_packet(transceiver_type_t t, void *pkt) {
|
||||
uint8_t res = 0;
|
||||
return res;
|
||||
}
|
||||
|
||||
static uint8_t set_channel(transceiver_type_t t, void *channel) {
|
||||
uint8_t c = *((uint8_t*) channel);
|
||||
switch (t) {
|
||||
case TRANSCEIVER_CC1100:
|
||||
return cc1100_set_channel(c);
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
static uint8_t get_channel(transceiver_type_t t) {
|
||||
switch (t) {
|
||||
case TRANSCEIVER_CC1100:
|
||||
return cc1100_get_channel();
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user