Skip to content

Commit

Permalink
Changed main back to the task scheduler. Fixed the pins associated wi…
Browse files Browse the repository at this point in the history
…th reseting and chip select. Added the address of radio_task to the running_state functions. Updated radio task innit. Created a interrupt_received funciton that will be called when GPIO IRQ.
  • Loading branch information
Spirou7 committed Dec 7, 2024
1 parent 691e610 commit 2b19daa
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 21 deletions.
27 changes: 12 additions & 15 deletions src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,6 @@
*/
slate_t slate;

int send();

void interrupt_recieved(uint gpio, uint32_t events);

int receive();

int check_version();

const uint RADIO_INTERRUPT_PIN = 28;

rfm9x_t radio_module;
/**
* Main code entry point.
Expand Down Expand Up @@ -61,23 +51,25 @@ int main()
*/
LOG_INFO("main: Dispatching the state machine...");

gpio_init(RADIO_INTERRUPT_PIN);
gpio_set_dir(RADIO_INTERRUPT_PIN, GPIO_IN);
gpio_pull_down(RADIO_INTERRUPT_PIN);

/*
// Set interrupt handler for the radio
gpio_set_irq_enabled_with_callback(RADIO_INTERRUPT_PIN, GPIO_IRQ_EDGE_RISE,
true, &interrupt_recieved);
bool interruptPin = gpio_get(RADIO_INTERRUPT_PIN);
printf("Interrupt pin (before): %d\n", interruptPin);
*/

/*

while (true)
{
sched_dispatch(&slate);
}
*/



/*
// send();
// receive();
uint reset = 21;
Expand All @@ -100,16 +92,19 @@ int main()
receive(radio_module);
sleep_ms(1000);
}
*/

// rfm9x_init(&radio_module);
// check_version();
/*
* We should NEVER be here so something bad has happened.
* @todo reboot!
*/

ERROR("We reached the end of the code - this is REALLY BAD!");
}

/*
int check_version(rfm9x_t radio_module)
{
LOG_INFO("%d\n", rfm9x_version(&radio_module));
Expand Down Expand Up @@ -137,6 +132,7 @@ void interrupt_recieved(uint gpio, uint32_t events)
}
}
// screen /dev/tty.usbmodem1101
int receive(rfm9x_t radio_module)
{
char data[256];
Expand All @@ -147,6 +143,7 @@ int receive(rfm9x_t radio_module)
printf("Interrupt pin: %d\n", interruptPin);
}
/*
uint8_t rfm9x_send(rfm9x_t *r, char *data, uint32_t l, uint8_t keep_listening,
Expand Down
4 changes: 2 additions & 2 deletions src/pins.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,5 @@
#define RFM9X_CLK (SPI0_CLK)
#define RFM9X_TX (SPI0_TX)
#define RFM9X_RX (SPI0_RX)
#define RFM9X_RESET (22)
#define RFM9X_CS (21)
#define RFM9X_RESET (21)
#define RFM9X_CS (20)
4 changes: 2 additions & 2 deletions src/state_machine/states/running.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
#include "state_machine/tasks/tasks.h"

sched_state_t running_state = {.name = "running",
.num_tasks = 2,
.task_list = {&print_task, &blink_task},
.num_tasks = 3,
.task_list = {&print_task, &blink_task, &radio_task},
.get_next_state = &running_get_next_state};

sched_state_t *running_get_next_state(slate_t *slate)
Expand Down
51 changes: 49 additions & 2 deletions src/state_machine/tasks/radio_task.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,23 +14,70 @@
#include "pins.h"

#include "hardware/spi.h"
#include "hardware/gpio.h"

const uint RADIO_INTERRUPT_PIN = 28;
const bool ENABLE_IRQ = true;

static slate_t* s;

int receive(rfm9x_t radio_module);

void interrupt_recieved(uint gpio, uint32_t events)
{
LOG_INFO("Interrupt received on pin %d\n", gpio);
if (gpio == RADIO_INTERRUPT_PIN)
{
LOG_INFO("Radio interrupt received\n");
//receive(radio_module);

receive(s->radio);
}
}

void radio_task_init(slate_t *slate)
{
s = slate;
gpio_init(RADIO_INTERRUPT_PIN);
gpio_set_dir(RADIO_INTERRUPT_PIN, GPIO_IN);
gpio_pull_down(RADIO_INTERRUPT_PIN);

// transmit queue
queue_init(&slate->tx_queue, sizeof(packet_t), TX_QUEUE_SIZE);

// receive queue
queue_init(&slate->rx_queue, sizeof(packet_t), RX_QUEUE_SIZE);

// create the radio here
slate->radio = rfm9x_mk(RFM9X_SPI, RFM9X_RESET, RFM9X_CS, RFM9X_TX, RFM9X_RX, RFM9X_CLK);

// initialize the radio here
rfm9x_init(&slate->radio);
printf("Brought up RFM9X v%d", rfm9x_version(&slate->radio));

gpio_set_irq_enabled_with_callback(RADIO_INTERRUPT_PIN, GPIO_IRQ_EDGE_RISE,
ENABLE_IRQ, &interrupt_recieved);

LOG_INFO("Brought up RFM9X v%d", rfm9x_version(&slate->radio));
}


// When it sees something in the transmit queue, switches into recieve mode and
// send a packet. Otherwise, be in recieve mode. When it recieves a packet, it
// inturrupts the CPU to immediately recieve.
void radio_task_dispatch(slate_t *slate)
{


}

// screen /dev/tty.usbmodem1101
int receive(rfm9x_t radio_module)
{
char data[256];
uint8_t n = rfm9x_receive(&radio_module, &data[0], 1, 0, 0, 1);
printf("Received %d\n", n);

bool interruptPin = gpio_get(RADIO_INTERRUPT_PIN);
printf("Interrupt pin: %d\n", interruptPin);
}

sched_task_t radio_task = {.name = "radio",
Expand Down
5 changes: 5 additions & 0 deletions src/state_machine/tasks/tasks.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,10 @@
* Tasks are built from the tasks folder, which we cannot depend on to avoid
* circularity.
*/

// Extern -> assumes that these variables exist in another file, and accesses them.

// Each of these variables will be covered
extern sched_task_t print_task;
extern sched_task_t blink_task;
extern sched_task_t radio_task;

0 comments on commit 2b19daa

Please sign in to comment.