summaryrefslogtreecommitdiffstats
path: root/rf_test/radio.c
diff options
context:
space:
mode:
authorSadeep Madurange <sadeep@asciimx.com>2024-12-07 19:35:20 +0800
committerSadeep Madurange <sadeep@asciimx.com>2024-12-07 19:35:20 +0800
commitddf550e831489939df75e6a3ec43d65560ae6c64 (patch)
tree5fe4fed53b8b41cc94de200269627869d95a50dd /rf_test/radio.c
parent9ed70e05ffb6b0bdc8cd3c5160b5f21457b04654 (diff)
downloadsmart-home-ddf550e831489939df75e6a3ec43d65560ae6c64.tar.gz
radio init.
Diffstat (limited to 'rf_test/radio.c')
-rw-r--r--rf_test/radio.c86
1 files changed, 51 insertions, 35 deletions
diff --git a/rf_test/radio.c b/rf_test/radio.c
index 6f8c9c4..ddc3e7c 100644
--- a/rf_test/radio.c
+++ b/rf_test/radio.c
@@ -6,14 +6,50 @@
#include "radio.h"
#include "serial.h"
-#define SPI_SS PB2
-#define SPI_SCK PB5
-#define SPI_MISO PB4
-#define SPI_MOSI PB3
-#define SPI_DDR DDRB
-#define SPI_PORT PORTB
+#define SPI_SS PB2
+#define SPI_SCK PB5
+#define SPI_MISO PB4
+#define SPI_MOSI PB3
+#define SPI_DDR DDRB
+#define SPI_PORT PORTB
-#define MAX_POWER_LEVEL 23
+#define OP_MODE_SLEEP 0x00
+#define OP_MODE_STDBY 0x04
+#define OP_MODE_FS 0x08
+#define OP_MODE_RX 0x10
+#define OP_MODE_TX 0x0C
+
+#define MAX_POWER_LEVEL 23
+
+static inline void set_power_level(uint8_t pwl)
+{
+ uint8_t pa_mask;
+
+ if (pwl < 16) {
+ pwl += 16;
+ pa_mask = 0x40;
+ } else {
+ pwl += pwl < 20 ? 10 : 8;
+ pa_mask = 0x40 | 0x20;
+ }
+
+ write_reg(0x5A, 0x5D);
+ write_reg(0x5C, 0x7C);
+ write_reg(0x11, (pa_mask | pwl));
+}
+
+static inline set_mode(uint8_t mode)
+{
+ write_reg(0x01, ((read_reg(0x01) & 0xE3) | mode));
+
+ switch (mode) {
+ case OP_MODE_TX:
+ write_reg(0x5A, 0x5D);
+ write_reg(0x5C, 0x7C);
+ break;
+ case OP_MODE_RX:
+ }
+}
static inline uint8_t read_reg(uint8_t reg)
{
@@ -103,34 +139,6 @@ uint8_t radio_recv(char *buf, uint8_t n)
return read_len;
}
-static inline void set_high_power_pa(uint8_t enable)
-{
- write_reg(0x5A, (enable ? 0x5D : 0x55));
- write_reg(0x5C, (enable ? 0x7C : 0x70));
-}
-
-static inline void set_power_level(uint8_t pwl)
-{
- uint8_t pa_mask;
-
- if (pwl < 16) {
- pwl += 16;
- pa_mask = 0x40;
- } else {
- pwl += pwl < 20 ? 10 : 8;
- pa_mask = 0x40 | 0x20;
- }
-
- set_high_power_pa(1);
- write_reg(0x11, (pa_mask | pwl));
-}
-
-void radio_high_power(void)
-{
- write_reg(0x13, 0x0F);
- set_power_level(MAX_POWER_LEVEL);
-}
-
void radio_init(struct radio_cfg *cfg)
{
SPI_DDR |= (1 << SPI_SS) | (1 << SPI_SCK) | (1 << SPI_MOSI);
@@ -185,4 +193,12 @@ void radio_init(struct radio_cfg *cfg)
// disable encryption
write_reg(0x3D, ((read_reg(0x3D) & 0xFE) | 0x00));
+
+ // enable high power amps
+ write_reg(0x13, 0x0F);
+ set_power_level(MAX_POWER_LEVEL);
+
+ write_reg(0x01, ((read_reg(0x01) & 0xE3) | 0x04));
+ while (!(read_reg(0x27) & 0x80))
+ ;
}