Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.idea
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "lib/libcrc"]
path = lib/libcrc
url = https://github.com/lammertb/libcrc
3 changes: 3 additions & 0 deletions checksum.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#pragma once

#include "lib/libcrc/include/checksum.h"
165 changes: 165 additions & 0 deletions helpers/meshimi_config.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
#include "meshimi_config.h"
#include "subghz/helpers/subghz_threshold_rssi.h"

// The order of items below is important
const char* const mode_text[MODE_COUNT] = {
"Simple RX",
"Simple TX",
"Meshtastic",
"LoRaWAN",
"Meshimi",
};
const MeshimiConfigMode mode_value[MODE_COUNT] = {
ModeSimpleRX,
ModeSimpleTX,
ModeMeshtastic,
ModeLoRaWAN,
ModeMeshimi,
};

const char* const spreading_factor_text[SPREADING_FACTOR_COUNT] = {
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12",
};

const char* const bandwidth_text[BANDWIDTH_COUNT] = {
"7.8kHz",
"10.4kHz",
"15.6kHz",
"20.8kHz",
"31.2kHz",
"41.7kHz",
"62.5kHz",
"125kHz",
"250kHz",
"500kHz",
};

const char* const coding_rate_text[CODING_RATE_COUNT] = {
"4_5",
"4_6",
"4_7",
"4_8",
};

const char* const ldro_text[LDRO_COUNT] = {
"OFF",
"ON",
};

struct MeshimiConfig {
MeshimiConfigMode mode;
uint32_t lora_frequency;
LoRaSpreadingFactor lora_spreading_factor;
LoRaBandwidth lora_bandwidth;
LoRaCodingRate lora_coding_rate;
LoRaLowDataRateOptimization lora_ldro;
};

MeshimiConfig* meshimi_config_alloc(void) {
MeshimiConfig* instance = malloc(sizeof(MeshimiConfig));

// TODO: Instantiate it from conf file stored at SD Card
instance->mode = ModeSimpleRX;
instance->lora_frequency = 868000000U;
instance->lora_spreading_factor = LoRaSpreadingFactor_SF7;
instance->lora_bandwidth = LoRaBandwidth_BW_125;
instance->lora_coding_rate = LoRaCodingRate_CR_4_7;
instance->lora_ldro = LoRaLowDataRateOptimization_LDRO_OFF;
return instance;
}

void meshimi_config_free(MeshimiConfig* instance) {
furi_assert(instance);
free(instance);
}

void meshimi_mode_set(MeshimiConfig* instance, MeshimiConfigMode mode) {
furi_assert(instance);
instance->mode = mode;
}

MeshimiConfigMode meshimi_mode_get(MeshimiConfig* instance) {
furi_assert(instance);
return instance->mode;
}

const char* meshimi_mode_get_text(MeshimiConfigMode mode) {
return mode_text[mode];
}

const enum MeshimiConfigMode* meshimi_mode_get_value() {
return mode_value;
}

void meshimi_spreading_factor_set(MeshimiConfig* instance, LoRaSpreadingFactor spreading_factor) {
furi_assert(instance);
instance->lora_spreading_factor = spreading_factor;
}

LoRaSpreadingFactor meshimi_spreading_factor_get(MeshimiConfig* instance) {
furi_assert(instance);
return instance->lora_spreading_factor;
}

const char* meshimi_spreading_factor_get_text(LoRaSpreadingFactor spreading_factor) {
return spreading_factor_text[spreading_factor];
}

void meshimi_bandwidth_set(MeshimiConfig* instance, LoRaBandwidth bandwidth) {
furi_assert(instance);
instance->lora_bandwidth = bandwidth;
}

LoRaBandwidth meshimi_bandwidth_get(MeshimiConfig* instance) {
furi_assert(instance);
return instance->lora_bandwidth;
}

const char* meshimi_bandwidth_get_text(LoRaBandwidth bandwidth) {
return bandwidth_text[bandwidth];
}

void meshimi_coding_rate_set(MeshimiConfig* instance, LoRaCodingRate coding_rate) {
furi_assert(instance);
instance->lora_coding_rate = coding_rate;
}

LoRaCodingRate meshimi_coding_rate_get(MeshimiConfig* instance) {
furi_assert(instance);
return instance->lora_coding_rate;
}

const char* meshimi_coding_rate_get_text(LoRaCodingRate coding_rate) {
return coding_rate_text[coding_rate];
}

void meshimi_ldro_set(MeshimiConfig* instance, LoRaLowDataRateOptimization ldro) {
furi_assert(instance);
instance->lora_ldro = ldro;
}

LoRaLowDataRateOptimization meshimi_ldro_get(MeshimiConfig* instance) {
furi_assert(instance);
return instance->lora_ldro;
}

const char* meshimi_ldro_get_text(LoRaLowDataRateOptimization ldro) {
return ldro_text[ldro];
}

void meshimi_frequency_set(MeshimiConfig* instance, uint32_t frequency) {
furi_assert(instance);
instance->lora_frequency = frequency;
}

uint32_t meshimi_frequency_get(MeshimiConfig* instance) {
furi_assert(instance);
return instance->lora_frequency;
}
190 changes: 190 additions & 0 deletions helpers/meshimi_config.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
#pragma once

#include <malloc.h>
#include "proto/spi.pb.h"

#define MODE_COUNT 5
typedef enum MeshimiConfigMode {
ModeSimpleRX = 0,
ModeSimpleTX = 1,
ModeMeshtastic = 2,
ModeLoRaWAN = 3,
ModeMeshimi = 4,
} MeshimiConfigMode;

#define SPREADING_FACTOR_COUNT 8
#define BANDWIDTH_COUNT 10
#define CODING_RATE_COUNT 4
#define LDRO_COUNT 2
#define FREQUENCY_TEXT_LEN 10

typedef struct {
MeshimiConfigMode mode;
uint32_t lora_frequency;
LoRaSpreadingFactor lora_spreading_factor;
LoRaBandwidth lora_bandwidth;
LoRaCodingRate lora_coding_rate;
LoRaLowDataRateOptimization lora_ldro;
} MeshimiConfigData;

typedef struct MeshimiConfig MeshimiConfig;

/**
* Allocate MeshimiConfig
*
* @return MeshimiConfig*
*/
MeshimiConfig* meshimi_config_alloc(void);

/**
* Free MeshimiConfig
*
* @param instance Pointer to a MeshimiConfig
*/
void meshimi_config_free(MeshimiConfig* instance);

/**
* Set Mode
*
* @param instance Pointer to a MeshimiConfig
* @param MeshimiConfigMode Mode
*/
void meshimi_mode_set(MeshimiConfig* instance, MeshimiConfigMode mode);

/**
* Get Mode
*
* @param instance Pointer to a MeshimiConfig
* @return MeshimiConfigMode Mode
*/
MeshimiConfigMode meshimi_mode_get(MeshimiConfig* instance);

/**
* Get text representation of the mode
*
* @param MeshimiConfigMode mode
* @return
*/
const char* meshimi_mode_get_text(MeshimiConfigMode mode);

const enum MeshimiConfigMode* meshimi_mode_get_value();

/**
* Set Spreading Factor
*
* @param instance Pointer to a MeshimiConfig
* @param LoRaSpreadingFactor Spreading Factor
*/
void meshimi_spreading_factor_set(MeshimiConfig* instance, LoRaSpreadingFactor spreading_factor);

/**
* Get Spreading Factor
*
* @param instance Pointer to a MeshimiConfig
* @return LoRaSpreadingFactor
*/
LoRaSpreadingFactor meshimi_spreading_factor_get(MeshimiConfig* instance);

/**
* Get text representation of the spreading_factor
*
* @param LoRaSpreadingFactor spreading_factor
* @return
*/
const char* meshimi_spreading_factor_get_text(LoRaSpreadingFactor spreading_factor);

/**
* Set Bandwidth
*
* @param instance Pointer to a MeshimiConfig
* @param LoRaBandwidth bandwidth
*/
void meshimi_bandwidth_set(MeshimiConfig* instance, LoRaBandwidth bandwidth);

/**
* Get Bandwidth
*
* @param instance Pointer to a MeshimiConfig
* @return LoRaBandwidth
*/
LoRaBandwidth meshimi_bandwidth_get(MeshimiConfig* instance);

/**
* Get text representation of the bandwidth
*
* @param LoRaSpreadingFactor bandwidth
* @return
*/
const char* meshimi_bandwidth_get_text(LoRaBandwidth bandwidth);

/**
* Set Coding Rate
*
* @param instance Pointer to a MeshimiConfig
* @param LoRaCodingRate coding_rate
*/
void meshimi_coding_rate_set(MeshimiConfig* instance, LoRaCodingRate coding_rate);

/**
* Get Coding Rate
*
* @param instance Pointer to a MeshimiConfig
* @return LoRaCodingRate
*/
LoRaCodingRate meshimi_coding_rate_get(MeshimiConfig* instance);

/**
* Get text representation of the coding rate
*
* @param LoRaCodingRate coding_rate
* @return
*/
const char* meshimi_coding_rate_get_text(LoRaCodingRate coding_rate);

/**
* Set Low DataRate Optimization
*
* @param instance Pointer to a MeshimiConfig
* @param LoRaCodingRate ldro
*/
void meshimi_ldro_set(MeshimiConfig* instance, LoRaLowDataRateOptimization ldro);

/**
* Get Low DataRate Optimization
*
* @param instance Pointer to a MeshimiConfig
* @return LoRaLowDataRateOptimization
*/
LoRaLowDataRateOptimization meshimi_ldro_get(MeshimiConfig* instance);

/**
* Get text representation of the low dataRate optimization
*
* @param LoRaLowDataRateOptimization ldro
* @return
*/
const char* meshimi_ldro_get_text(LoRaLowDataRateOptimization ldro);

/**
* Set Frequency
*
* @param instance Pointer to a MeshimiConfig
* @param uint32_t frequency
*/
void meshimi_frequency_set(MeshimiConfig* instance, uint32_t frequency);

/**
* Get Frequency
*
* @param instance Pointer to a MeshimiConfig
* @return uint32_t
*/
uint32_t meshimi_frequency_get(MeshimiConfig* instance);

/**
* Get text representation of the frequency
*
* @param uint32_t frequency
* @return
*/
const char* meshimi_frequency_get_text(uint32_t frequency);
Binary file added icons/Meshimi/Meshimi_128x64.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions lib/libcrc
Submodule libcrc added at 7719e2
Loading