mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
trying to get radio init to work
This commit is contained in:
parent
dd3ba2bfe3
commit
aed72abf4e
@ -1,5 +1,5 @@
|
||||
SubDir TOP projects test_ping ;
|
||||
|
||||
Module test_ping : main.c : shell shell_commands ps uart0 posix_io auto_init vtimer cc110x ;
|
||||
Module test_ping : main.c : shell shell_commands ps uart0 posix_io auto_init vtimer 6lowpan cc110x transceiver ;
|
||||
|
||||
UseModule test_ping ;
|
||||
|
@ -1,3 +1,5 @@
|
||||
#include <main.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <vtimer.h>
|
||||
@ -7,60 +9,161 @@
|
||||
#include <shell.h>
|
||||
#include <shell_commands.h>
|
||||
#include <board_uart0.h>
|
||||
#include <transceiver.h>
|
||||
|
||||
// Prototypes
|
||||
void help(char * arg);
|
||||
void init(char * arg);
|
||||
void ping(char * arg);
|
||||
void stop(char * arg);
|
||||
#define STACKSIZE KERNEL_CONF_STACKSIZE_DEFAULT
|
||||
|
||||
char stack[STACKSIZE];
|
||||
|
||||
// Shell commands for this application
|
||||
const shell_command_t shell_commands[] =
|
||||
{ { "help", "Prints the help", help },
|
||||
{ "init", "Initializes this node with an address and a channel.", init },
|
||||
{ "ping", "Makes this node a pinging node", ping },
|
||||
{ "stop", "Stops the current node's pings and prints a summary", stop },
|
||||
{ NULL, NULL, NULL }
|
||||
};
|
||||
{ { "help", "Prints the help", help },
|
||||
{ "init",
|
||||
"Initializes this node with an address and a channel.",
|
||||
init },
|
||||
{ "ping", "Makes this node a pinging node", ping },
|
||||
{ "stop", "Stops the current node's pings and prints a summary",
|
||||
stop },
|
||||
{ NULL, NULL, NULL }
|
||||
};
|
||||
|
||||
/**
|
||||
* Initializes this node with a given radio address and on a given channel or
|
||||
* on a default channel, if no channel is given. A radio address must be given
|
||||
* in any case.
|
||||
*/
|
||||
// pid of ongoing ping thread, 0 if not set
|
||||
int pid_pingthread = 0;
|
||||
|
||||
// see header for documentation
|
||||
void init(char* arg) {
|
||||
//TODO implement
|
||||
transceiver_command_t tcmd;
|
||||
msg_t m;
|
||||
uint16_t addr = 0;
|
||||
uint16_t chan = 10;
|
||||
|
||||
printf("transceiver pid is %d.\n", transceiver_pid);
|
||||
|
||||
int res = sscanf(arg, "init %hu %hu", &addr, &chan);
|
||||
if (res == 1) {
|
||||
puts("Setting address, keeping default channel");
|
||||
|
||||
if (addr >= MIN_ADDR && addr <= MAX_ADDR
|
||||
&& chan >= MIN_CHAN && chan <= MAX_CHAN) {
|
||||
//addr. given, channel should be default, which is 10 for us
|
||||
//check for validity in any case, just to be sure
|
||||
|
||||
|
||||
puts("Initializing 6lowpan..");
|
||||
sixlowpan_init(TRANSCEIVER_CC1100,addr,0);
|
||||
puts("Address set, setting channel");
|
||||
|
||||
tcmd.data = &chan;
|
||||
m.type = SET_CHANNEL;
|
||||
m.content.ptr = (void*) &tcmd;
|
||||
|
||||
puts("waiting for transceiver..");
|
||||
msg_send_receive(&m, &m, transceiver_pid);
|
||||
puts("Channel set.");
|
||||
|
||||
} else {
|
||||
printf("ERROR: The address for the node has to be in %d to %d.\n",
|
||||
MIN_ADDR, MAX_ADDR);
|
||||
}
|
||||
|
||||
} else if (res == 2) {
|
||||
puts("Setting address and channel");
|
||||
|
||||
if (addr >= MIN_ADDR && addr <= MAX_ADDR
|
||||
&& chan >= MIN_CHAN && chan <= MAX_CHAN) {
|
||||
//addr. & channel are given, check validity
|
||||
|
||||
puts("Initializing 6lowpan..");
|
||||
sixlowpan_init(TRANSCEIVER_CC1100,addr,0);
|
||||
puts("address set, setting channel");
|
||||
|
||||
tcmd.data = &chan;
|
||||
m.type = SET_CHANNEL;
|
||||
m.content.ptr = (void*) &tcmd;
|
||||
|
||||
puts("waiting for transceiver..");
|
||||
msg_send_receive(&m, &m, transceiver_pid);
|
||||
puts("channel set");
|
||||
} else {
|
||||
printf("ERROR: The address for the node has to be in %d to %d.\n",
|
||||
MIN_ADDR, MAX_ADDR);
|
||||
printf("ERROR: The channel for the node has to be in %d to %d.\n",
|
||||
MIN_CHAN, MAX_CHAN);
|
||||
}
|
||||
//addr and channel given
|
||||
} else {
|
||||
//no correct argument given, but radio address is mandatory
|
||||
puts("Usage: init [radioaddr] (radiochannel)");
|
||||
puts("Use 'help init' for more information on this command.");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prints the shellcommands that are usable in this application for reference.
|
||||
*/
|
||||
void help(char* unused) {
|
||||
printf("These are the usable commands:\n");
|
||||
printf("\thelp (commandname)\n");
|
||||
printf("\tinit [address] (channel)\n");
|
||||
printf("\tping [address] (time)\n");
|
||||
printf("\tstop\n");
|
||||
printf("\n");
|
||||
printf("[] = mandatory, () = optional\n");
|
||||
// see header for documentation
|
||||
void help(char* cmdname) {
|
||||
char *command = cmdname;
|
||||
while (*command != '\0' && *command++ != ' ')
|
||||
; //Skip the command by going till first space
|
||||
|
||||
if (strlen(cmdname) == 4) {
|
||||
puts("These are the usable commands:");
|
||||
puts("\thelp (commandname)");
|
||||
puts("\tinit [address] (channel)");
|
||||
puts("\tping [address] (time)");
|
||||
puts("\tstop");
|
||||
puts("");
|
||||
puts("[] = mandatory, () = optional");
|
||||
} else if (!strcasecmp("init", command)) {
|
||||
puts("init: Initializes a node for radio communication.");
|
||||
puts(" +");
|
||||
puts(
|
||||
" +---[address]: The radio-address that this node should assume (range: 0 to 255)");
|
||||
puts(" + This argument is mandatory.");
|
||||
puts(" +");
|
||||
puts(" +---(channel): The radio-channel that this node should use");
|
||||
puts(" This argument is optional.");
|
||||
puts(" Uses a default channel if not given.");
|
||||
} else if (!strcasecmp("ping", command)) {
|
||||
puts(
|
||||
"ping: Sends ping-messages to another node and records statistics on the number");
|
||||
puts(
|
||||
" + of sent messages/received messages as well as the RTT of those pings.");
|
||||
puts(" +");
|
||||
puts(
|
||||
" +---[address]: The radio-address that this node should send its pings to)");
|
||||
puts(" + This argument is mandatory.");
|
||||
puts(" +");
|
||||
puts(
|
||||
" +---(time) : The duration (in seconds) that these ping messages should ");
|
||||
puts(" be sent over");
|
||||
puts(" This argument is optional.");
|
||||
puts(" Sends infinite pings when no time is given.");
|
||||
} else if (!strcasecmp("stop", command)) {
|
||||
puts("stop: Stops any ongoing pings this node sends out.");
|
||||
puts(
|
||||
" If this node is currently not sending any pings, this command does nothing.");
|
||||
} else {
|
||||
puts("The command given was not recognized. You gave:");
|
||||
puts(command);
|
||||
puts("Recognized commands are 'init','ping' and 'stop'");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends out pings from this node to another node in a continuous manner, until
|
||||
* the stop command is used.
|
||||
*/
|
||||
void ping(char* unused) {
|
||||
//TODO implement
|
||||
// see header for docs
|
||||
void ping() {
|
||||
//TODO implement
|
||||
}
|
||||
|
||||
/**
|
||||
* Stops any current pinging-action by this node and prints a summary of how
|
||||
* many pings got returned.
|
||||
* If the node was not pinging at the time of the method-call, this method does
|
||||
* nothing.
|
||||
*/
|
||||
void stop(char* unused) {
|
||||
//TODO implement
|
||||
//TODO implement
|
||||
if (pid_pingthread) {
|
||||
}
|
||||
}
|
||||
|
||||
void hellothread(){
|
||||
while(true){
|
||||
puts("Hello!");
|
||||
vtimer_usleep(1000*2000); //2secs
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -71,6 +174,8 @@ int main(void) {
|
||||
puts("Ping Test Application\n");
|
||||
puts("For commands type 'help'!\n");
|
||||
|
||||
thread_create(stack, STACKSIZE, PRIORITY_MAIN -3,8, hellothread,"hello");
|
||||
|
||||
posix_open(uart0_handler_pid, 0);
|
||||
|
||||
shell_t shell;
|
||||
@ -80,3 +185,4 @@ int main(void) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
45
projects/test_ping/main.h
Normal file
45
projects/test_ping/main.h
Normal file
@ -0,0 +1,45 @@
|
||||
#ifndef PING_TEST_H
|
||||
|
||||
#define PING_TEST_H
|
||||
|
||||
#define MIN_ADDR 1
|
||||
#define MIN_CHAN MIN_ADDR
|
||||
#define MAX_CHAN 14
|
||||
#define MAX_ADDR 255
|
||||
|
||||
/**
|
||||
* @brief Shows a helping text.
|
||||
* @param command the command name for which the help should be showed.
|
||||
*/
|
||||
void help(char * commandname);
|
||||
|
||||
/**
|
||||
* @brief Initializes a node for radio communication
|
||||
*
|
||||
* Initializes this node with a given radio address and on a given channel or
|
||||
* on a default channel, if no channel is given. A radio address must be given
|
||||
* in any case.
|
||||
*
|
||||
* @param arg
|
||||
*/
|
||||
void init(char * arg);
|
||||
|
||||
/**
|
||||
* @brief Pings another node.
|
||||
*
|
||||
* Sends out pings from this node to another node in a continuous manner, until
|
||||
* the stop command is used.
|
||||
*/
|
||||
void ping();
|
||||
|
||||
/**
|
||||
* Stops any current pinging-action by this node and prints a summary of how
|
||||
* many pings got returned.
|
||||
* If the node was not pinging at the time of the method-call, this method does
|
||||
* nothing.
|
||||
*
|
||||
* @param arg
|
||||
*/
|
||||
void stop(char * arg);
|
||||
|
||||
#endif /* PING_TEST_H */
|
Loading…
Reference in New Issue
Block a user