kopia lustrzana https://github.com/SP8EBC/ParaTNC
- KISS DID: distinguish size_byte value for integer and float types
- KISS DID: returning did value as first two bytes, before size_byte - KISS diagnostics: bugfix in NRC service identifier - APRS-IS comm: better way to close tcp connection in case of connecting failure - functions to send status via radio channel moved to separate files and refactored.master
rodzic
b4cd12017c
commit
7ece13496d
|
@ -12,6 +12,7 @@ C_SRCS += \
|
|||
../system/src/aprs/crc.c \
|
||||
../system/src/aprs/dac.c \
|
||||
../system/src/aprs/digi.c \
|
||||
../system/src/aprs/status.c \
|
||||
../system/src/aprs/telemetry.c \
|
||||
../system/src/aprs/wx.c
|
||||
|
||||
|
@ -24,6 +25,7 @@ OBJS += \
|
|||
./system/src/aprs/crc.o \
|
||||
./system/src/aprs/dac.o \
|
||||
./system/src/aprs/digi.o \
|
||||
./system/src/aprs/status.o \
|
||||
./system/src/aprs/telemetry.o \
|
||||
./system/src/aprs/wx.o
|
||||
|
||||
|
@ -36,6 +38,7 @@ C_DEPS += \
|
|||
./system/src/aprs/crc.d \
|
||||
./system/src/aprs/dac.d \
|
||||
./system/src/aprs/digi.d \
|
||||
./system/src/aprs/status.d \
|
||||
./system/src/aprs/telemetry.d \
|
||||
./system/src/aprs/wx.d
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ void aprsis_init(
|
|||
const char * callsign_with_ssid);
|
||||
aprsis_return_t aprsis_connect_and_login(const char * address, uint8_t address_ln, uint16_t port, uint8_t auto_send_beacon);
|
||||
aprsis_return_t aprsis_connect_and_login_default(uint8_t auto_send_beacon);
|
||||
void aprsis_disconnect(void);
|
||||
sim800_return_t aprsis_disconnect(void);
|
||||
void aprsis_receive_callback(srl_context_t* srl_context);
|
||||
void aprsis_check_alive(void);
|
||||
|
||||
|
@ -72,5 +72,6 @@ void aprsis_send_beacon(uint8_t async,
|
|||
void aprsis_igate_to_aprsis(AX25Msg *msg, const char * callsign_with_ssid);
|
||||
|
||||
char * aprsis_get_tx_buffer(void);
|
||||
uint8_t aprsis_get_aprsis_logged(void);
|
||||
|
||||
#endif /* APRSIS_H_ */
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
/*
|
||||
* aprsis_config.h
|
||||
*
|
||||
* Created on: Jul 22, 2023
|
||||
* Author: mateusz
|
||||
*/
|
||||
|
||||
#ifndef ETC_APRSIS_CONFIG_H_
|
||||
#define ETC_APRSIS_CONFIG_H_
|
||||
|
||||
|
||||
//!< How many times connection to APRS-IS should fail before reseting GSM modem
|
||||
#define APRSIS_FAILED_CONN_ATTEMPTS_TO_RESET_GSM 16u
|
||||
|
||||
|
||||
#endif /* ETC_APRSIS_CONFIG_H_ */
|
|
@ -13,7 +13,7 @@
|
|||
|
||||
//!< Size of a buffer used for diagnostic communication over KISS protocol
|
||||
//! Simply maximum size of a response to a request
|
||||
#define KISS_CONFIG_DIAGNOSTIC_BUFFER_LN 20
|
||||
#define KISS_CONFIG_DIAGNOSTIC_BUFFER_LN 24
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
#ifndef KISS_COMMUNICATION_KISS_COMMUNICATION_NRC_T_H_
|
||||
#define KISS_COMMUNICATION_KISS_COMMUNICATION_NRC_T_H_
|
||||
|
||||
#define KISS_COMMUNICATION_NRC_SERVICE 0x74U
|
||||
//#define KISS_COMMUNICATION_NRC_SERVICE KISS_NEGATIVE_RESPONSE_SERVICE
|
||||
|
||||
typedef enum kiss_communication_nrc_t {
|
||||
NRC_POSITIVE = 0x00,
|
||||
|
|
|
@ -10,9 +10,9 @@
|
|||
#include "drivers/serial.h"
|
||||
#include "gsm/sim800_state_t.h"
|
||||
|
||||
#define SW_VER "EA23"
|
||||
#define SW_DATE "28062023"
|
||||
#define SW_KISS_PROTO "A"
|
||||
#define SW_VER "EA24"
|
||||
#define SW_DATE "21072023"
|
||||
#define SW_KISS_PROTO "B"
|
||||
|
||||
#define SYSTICK_TICKS_PER_SECONDS 100
|
||||
#define SYSTICK_TICKS_PERIOD 10
|
||||
|
|
|
@ -23,4 +23,6 @@ extern uint16_t rte_main_going_sleep_count;
|
|||
|
||||
extern uint32_t rte_main_last_sleep_master_time;
|
||||
|
||||
extern uint8_t rte_main_reset_gsm_modem;
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1100,7 +1100,7 @@ int main(int argc, char* argv[]){
|
|||
#endif
|
||||
|
||||
#if defined(PARAMETEO)
|
||||
telemetry_send_status_powersave_registers(REGISTER_LAST_SLEEP, REGISTER_LAST_WKUP, REGISTER_COUNTERS, REGISTER_MONITOR, REGISTER_LAST_SLTIM);
|
||||
status_send_powersave_registers(REGISTER_LAST_SLEEP, REGISTER_LAST_WKUP, REGISTER_COUNTERS, REGISTER_MONITOR, REGISTER_LAST_SLTIM);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -321,7 +321,7 @@ void packet_tx_handler(const config_data_basic_t * const config_basic, const con
|
|||
|
||||
packet_tx_multi_per_call_handler();
|
||||
|
||||
telemetry_send_status_raw_values_modbus();
|
||||
status_send_raw_values_modbus();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -497,7 +497,7 @@ void packet_tx_handler(const config_data_basic_t * const config_basic, const con
|
|||
if (packet_tx_telemetry_descr_counter >= packet_tx_telemetry_descr_interval) {
|
||||
|
||||
#ifdef PARAMETEO
|
||||
telemetry_send_status_powersave_registers(REGISTER_LAST_SLEEP, REGISTER_LAST_WKUP, REGISTER_COUNTERS, REGISTER_MONITOR, REGISTER_LAST_SLTIM);
|
||||
status_send_powersave_registers(REGISTER_LAST_SLEEP, REGISTER_LAST_WKUP, REGISTER_COUNTERS, REGISTER_MONITOR, REGISTER_LAST_SLTIM);
|
||||
#endif
|
||||
|
||||
packet_tx_multi_per_call_handler();
|
||||
|
@ -520,7 +520,7 @@ void packet_tx_handler(const config_data_basic_t * const config_basic, const con
|
|||
//telemetry_send_status();
|
||||
}
|
||||
|
||||
telemetry_send_status();
|
||||
status_send();
|
||||
|
||||
|
||||
if (config_mode->wx_umb == 1) {
|
||||
|
@ -554,7 +554,7 @@ void packet_tx_handler(const config_data_basic_t * const config_basic, const con
|
|||
if (packet_tx_gsm_status_sent == 0) {
|
||||
|
||||
// send a status
|
||||
telemetry_send_status_gsm();
|
||||
status_send_gsm();
|
||||
|
||||
// network parameters are not queries while APRS-IS connection is pending
|
||||
// so no sense to send status more than once after the initialization
|
||||
|
|
|
@ -751,7 +751,7 @@ void pwr_save_pooling_handler(const config_data_mode_t * config, const config_da
|
|||
|
||||
// check if cutoff status has changed
|
||||
if (pwr_save_currently_cutoff != pwr_save_previously_cutoff) {
|
||||
telemetry_send_status_powersave_cutoff(vbatt, pwr_save_previously_cutoff, pwr_save_currently_cutoff);
|
||||
status_send_powersave_cutoff(vbatt, pwr_save_previously_cutoff, pwr_save_currently_cutoff);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
/*
|
||||
* status.h
|
||||
*
|
||||
* Created on: Jul 22, 2023
|
||||
* Author: mateusz
|
||||
*/
|
||||
|
||||
#ifndef INCLUDE_APRS_STATUS_H_
|
||||
#define INCLUDE_APRS_STATUS_H_
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
void status_send(void);
|
||||
|
||||
void status_send_raw_values_modbus(void);
|
||||
|
||||
void status_send_powersave_cutoff(uint16_t battery_voltage, int8_t vbatt_low, int8_t cutoff);
|
||||
void status_send_powersave_registers(uint32_t register_last_sleep, uint32_t register_last_wakeup, uint32_t register_counters, uint32_t monitor, uint32_t last_sleep_time);
|
||||
|
||||
void status_send_gsm(void);
|
||||
|
||||
|
||||
#endif /* INCLUDE_APRS_STATUS_H_ */
|
|
@ -89,14 +89,7 @@ void telemetry_send_values( uint8_t rx_pkts,
|
|||
const config_data_mode_t * const config_mode);
|
||||
#endif
|
||||
void telemetry_send_chns_description(const config_data_basic_t * const config_basic, const config_data_mode_t * const config_mode);
|
||||
void telemetry_send_status(void);
|
||||
|
||||
void telemetry_send_status_raw_values_modbus(void);
|
||||
|
||||
void telemetry_send_status_powersave_cutoff(uint16_t battery_voltage, int8_t vbatt_low, int8_t cutoff);
|
||||
void telemetry_send_status_powersave_registers(uint32_t register_last_sleep, uint32_t register_last_wakeup, uint32_t register_counters, uint32_t monitor, uint32_t last_sleep_time);
|
||||
|
||||
void telemetry_send_status_gsm(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -37,5 +37,6 @@ uint16_t gsm_sim800_get_response_start_idx(void);
|
|||
void gsm_sim800_create_status(char * buffer, int ln);
|
||||
|
||||
void gsm_sim800_decrease_counter(void);
|
||||
void gsm_sim800_inhibit(uint8_t _inhibit);
|
||||
|
||||
#endif /* INCLUDE_GSM_SIM800C_H_ */
|
||||
|
|
|
@ -0,0 +1,133 @@
|
|||
/*
|
||||
* status.c
|
||||
*
|
||||
* Created on: Jul 22, 2023
|
||||
* Author: mateusz
|
||||
*/
|
||||
|
||||
#include "status.h"
|
||||
|
||||
#include "main.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "ax25.h"
|
||||
|
||||
#ifdef PARAMETEO
|
||||
#include "pwr_save.h"
|
||||
|
||||
const char * telemetry_vbatt_normal = "VBATT_GOOD";
|
||||
const char * telemetry_vbatt_low = "VBATT_LOW";
|
||||
const char * telemetry_vbatt_cutoff = "VBATT_CUTOFF";
|
||||
const char * telemetry_vbatt_unknown = "VBATT_UNKNOWN";
|
||||
|
||||
#include "gsm/sim800c_gprs.h"
|
||||
#include "gsm/sim800c.h"
|
||||
#endif
|
||||
|
||||
void status_send(void) {
|
||||
memset(main_own_aprs_msg, 0x00, sizeof(main_own_aprs_msg));
|
||||
#ifdef STM32L471xx
|
||||
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ">ParaMETEO firmware %s-%s by SP8EBC - PV powered, fully outdoor, 3in1 APRS device", SW_VER, SW_DATE);
|
||||
#else
|
||||
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ">ParaTNC firmware %s-%s by SP8EBC", SW_VER, SW_DATE);
|
||||
#endif
|
||||
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
|
||||
WAIT_FOR_CHANNEL_FREE();
|
||||
afsk_txStart(&main_afsk);
|
||||
|
||||
}
|
||||
|
||||
|
||||
void status_send_raw_values_modbus(void) {
|
||||
#ifdef _MODBUS_RTU
|
||||
uint8_t status_ln = 0;
|
||||
|
||||
rtu_get_raw_values_string(main_own_aprs_msg, OWN_APRS_MSG_LN, &status_ln);
|
||||
|
||||
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, status_ln);
|
||||
WAIT_FOR_CHANNEL_FREE();
|
||||
afsk_txStart(&main_afsk);
|
||||
main_wait_for_tx_complete();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void status_send_powersave_cutoff(uint16_t battery_voltage, int8_t previous_cutoff, int8_t current_cutoff) {
|
||||
#ifdef PARAMETEO
|
||||
const char *p, *c;
|
||||
|
||||
// telemetry_vbatt_unknown
|
||||
|
||||
if ((previous_cutoff & CURRENTLY_CUTOFF) != 0) {
|
||||
p = telemetry_vbatt_cutoff;
|
||||
}
|
||||
else if ((previous_cutoff & CURRENTLY_VBATT_LOW) != 0) {
|
||||
p = telemetry_vbatt_low;
|
||||
}
|
||||
else if (((previous_cutoff & CURRENTLY_CUTOFF) == 0) && (previous_cutoff & CURRENTLY_VBATT_LOW) == 0){
|
||||
p = telemetry_vbatt_normal;
|
||||
}
|
||||
else {
|
||||
p = telemetry_vbatt_unknown;
|
||||
}
|
||||
|
||||
if ((current_cutoff & CURRENTLY_CUTOFF) != 0) {
|
||||
c = telemetry_vbatt_cutoff;
|
||||
}
|
||||
else if ((current_cutoff & CURRENTLY_VBATT_LOW) != 0) {
|
||||
c = telemetry_vbatt_low;
|
||||
}
|
||||
else if (((current_cutoff & CURRENTLY_CUTOFF) == 0) && (current_cutoff & CURRENTLY_VBATT_LOW) == 0){
|
||||
c = telemetry_vbatt_normal;
|
||||
}
|
||||
else {
|
||||
c = telemetry_vbatt_unknown;
|
||||
}
|
||||
|
||||
main_wait_for_tx_complete();
|
||||
|
||||
memset(main_own_aprs_msg, 0x00, sizeof(main_own_aprs_msg));
|
||||
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ">[powersave cutoff change][Vbatt: %dV][previous: %d - %s][currently: %d - %s]", battery_voltage, previous_cutoff, p, current_cutoff, c);
|
||||
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
|
||||
//while (main_ax25.dcd == 1);
|
||||
afsk_txStart(&main_afsk);
|
||||
main_wait_for_tx_complete();
|
||||
#endif
|
||||
}
|
||||
|
||||
void status_send_powersave_registers(uint32_t register_last_sleep, uint32_t register_last_wakeup, uint32_t register_counters, uint32_t monitor, uint32_t last_sleep_time) {
|
||||
main_wait_for_tx_complete();
|
||||
|
||||
memset(main_own_aprs_msg, 0x00, sizeof(main_own_aprs_msg));
|
||||
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ">[powersave registers][last_sleep_ts: 0x%lX][last_wakeup_ts: 0x%lX][sleep_wakeup_cntrs: 0x%lX][monitor: 0x%lX][last_sleep_time: 0x%lX]",register_last_sleep, register_last_wakeup, register_counters, monitor, last_sleep_time);
|
||||
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
|
||||
//while (main_ax25.dcd == 1);
|
||||
afsk_txStart(&main_afsk);
|
||||
main_wait_for_tx_complete();
|
||||
}
|
||||
|
||||
void status_send_gsm(void){
|
||||
main_wait_for_tx_complete();
|
||||
|
||||
// clear buffer
|
||||
memset(main_own_aprs_msg, 0x00, sizeof(main_own_aprs_msg));
|
||||
|
||||
// append general status information about network connection
|
||||
gsm_sim800_create_status(main_own_aprs_msg, OWN_APRS_MSG_LN);
|
||||
|
||||
// measure a lenght of existing status string
|
||||
const size_t size_so_far = strlen(main_own_aprs_msg);
|
||||
|
||||
// append an ip address
|
||||
sim800_gprs_create_status(main_own_aprs_msg + size_so_far, OWN_APRS_MSG_LN - size_so_far);
|
||||
|
||||
// full lenght of status string
|
||||
main_own_aprs_msg_len = strlen(main_own_aprs_msg);
|
||||
|
||||
// send message on radio
|
||||
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
|
||||
afsk_txStart(&main_afsk);
|
||||
|
||||
}
|
|
@ -19,18 +19,6 @@
|
|||
|
||||
uint16_t telemetry_counter = 0;
|
||||
|
||||
#ifdef PARAMETEO
|
||||
#include "pwr_save.h"
|
||||
|
||||
const char * telemetry_vbatt_normal = "VBATT_GOOD";
|
||||
const char * telemetry_vbatt_low = "VBATT_LOW";
|
||||
const char * telemetry_vbatt_cutoff = "VBATT_CUTOFF";
|
||||
const char * telemetry_vbatt_unknown = "VBATT_UNKNOWN";
|
||||
|
||||
#include "gsm/sim800c_gprs.h"
|
||||
#include "gsm/sim800c.h"
|
||||
#endif
|
||||
|
||||
void telemetry_send_chns_description_pv(const config_data_basic_t * const config_basic) {
|
||||
|
||||
// a buffer to assembly the 'call-ssid' string at the begining of the frame
|
||||
|
@ -536,109 +524,3 @@ void telemetry_send_values( uint8_t rx_pkts,
|
|||
afsk_txStart(&main_afsk);
|
||||
|
||||
}
|
||||
|
||||
void telemetry_send_status(void) {
|
||||
memset(main_own_aprs_msg, 0x00, sizeof(main_own_aprs_msg));
|
||||
#ifdef STM32L471xx
|
||||
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ">ParaMETEO firmware %s-%s by SP8EBC - PV powered, fully outdoor, 3in1 APRS device", SW_VER, SW_DATE);
|
||||
#else
|
||||
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ">ParaTNC firmware %s-%s by SP8EBC", SW_VER, SW_DATE);
|
||||
#endif
|
||||
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
|
||||
WAIT_FOR_CHANNEL_FREE();
|
||||
afsk_txStart(&main_afsk);
|
||||
|
||||
}
|
||||
|
||||
|
||||
void telemetry_send_status_raw_values_modbus(void) {
|
||||
#ifdef _MODBUS_RTU
|
||||
uint8_t status_ln = 0;
|
||||
|
||||
rtu_get_raw_values_string(main_own_aprs_msg, OWN_APRS_MSG_LN, &status_ln);
|
||||
|
||||
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, status_ln);
|
||||
WAIT_FOR_CHANNEL_FREE();
|
||||
afsk_txStart(&main_afsk);
|
||||
main_wait_for_tx_complete();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void telemetry_send_status_powersave_cutoff(uint16_t battery_voltage, int8_t previous_cutoff, int8_t current_cutoff) {
|
||||
#ifdef PARAMETEO
|
||||
const char *p, *c;
|
||||
|
||||
// telemetry_vbatt_unknown
|
||||
|
||||
if ((previous_cutoff & CURRENTLY_CUTOFF) != 0) {
|
||||
p = telemetry_vbatt_cutoff;
|
||||
}
|
||||
else if ((previous_cutoff & CURRENTLY_VBATT_LOW) != 0) {
|
||||
p = telemetry_vbatt_low;
|
||||
}
|
||||
else if (((previous_cutoff & CURRENTLY_CUTOFF) == 0) && (previous_cutoff & CURRENTLY_VBATT_LOW) == 0){
|
||||
p = telemetry_vbatt_normal;
|
||||
}
|
||||
else {
|
||||
p = telemetry_vbatt_unknown;
|
||||
}
|
||||
|
||||
if ((current_cutoff & CURRENTLY_CUTOFF) != 0) {
|
||||
c = telemetry_vbatt_cutoff;
|
||||
}
|
||||
else if ((current_cutoff & CURRENTLY_VBATT_LOW) != 0) {
|
||||
c = telemetry_vbatt_low;
|
||||
}
|
||||
else if (((current_cutoff & CURRENTLY_CUTOFF) == 0) && (current_cutoff & CURRENTLY_VBATT_LOW) == 0){
|
||||
c = telemetry_vbatt_normal;
|
||||
}
|
||||
else {
|
||||
c = telemetry_vbatt_unknown;
|
||||
}
|
||||
|
||||
main_wait_for_tx_complete();
|
||||
|
||||
memset(main_own_aprs_msg, 0x00, sizeof(main_own_aprs_msg));
|
||||
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ">[powersave cutoff change][Vbatt: %dV][previous: %d - %s][currently: %d - %s]", battery_voltage, previous_cutoff, p, current_cutoff, c);
|
||||
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
|
||||
//while (main_ax25.dcd == 1);
|
||||
afsk_txStart(&main_afsk);
|
||||
main_wait_for_tx_complete();
|
||||
#endif
|
||||
}
|
||||
|
||||
void telemetry_send_status_powersave_registers(uint32_t register_last_sleep, uint32_t register_last_wakeup, uint32_t register_counters, uint32_t monitor, uint32_t last_sleep_time) {
|
||||
main_wait_for_tx_complete();
|
||||
|
||||
memset(main_own_aprs_msg, 0x00, sizeof(main_own_aprs_msg));
|
||||
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ">[powersave registers][last_sleep_ts: 0x%lX][last_wakeup_ts: 0x%lX][sleep_wakeup_cntrs: 0x%lX][monitor: 0x%lX][last_sleep_time: 0x%lX]",register_last_sleep, register_last_wakeup, register_counters, monitor, last_sleep_time);
|
||||
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
|
||||
//while (main_ax25.dcd == 1);
|
||||
afsk_txStart(&main_afsk);
|
||||
main_wait_for_tx_complete();
|
||||
}
|
||||
|
||||
void telemetry_send_status_gsm(void){
|
||||
main_wait_for_tx_complete();
|
||||
|
||||
// clear buffer
|
||||
memset(main_own_aprs_msg, 0x00, sizeof(main_own_aprs_msg));
|
||||
|
||||
// append general status information about network connection
|
||||
gsm_sim800_create_status(main_own_aprs_msg, OWN_APRS_MSG_LN);
|
||||
|
||||
// measure a lenght of existing status string
|
||||
const size_t size_so_far = strlen(main_own_aprs_msg);
|
||||
|
||||
// append an ip address
|
||||
sim800_gprs_create_status(main_own_aprs_msg + size_so_far, OWN_APRS_MSG_LN - size_so_far);
|
||||
|
||||
// full lenght of status string
|
||||
main_own_aprs_msg_len = strlen(main_own_aprs_msg);
|
||||
|
||||
// send message on radio
|
||||
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
|
||||
afsk_txStart(&main_afsk);
|
||||
|
||||
}
|
||||
|
|
|
@ -111,6 +111,9 @@ char gsm_sim800_cellid[5] = {0, 0, 0, 0, 0};
|
|||
|
||||
char gsm_sim800_lac[5] = {0, 0, 0, 0, 0};
|
||||
|
||||
//! Inhibit GSM modem completely while controller is in apropriate power saving state
|
||||
int8_t gsm_sim800_keep_shutdown = 0;
|
||||
|
||||
inline static void gsm_sim800_power_off(void) {
|
||||
io___cntrl_vbat_g_disable();
|
||||
}
|
||||
|
@ -289,6 +292,10 @@ void gsm_sim800_init(gsm_sim800_state_t * state, uint8_t enable_echo) {
|
|||
|
||||
void gsm_sim800_initialization_pool(srl_context_t * srl_context, gsm_sim800_state_t * state) {
|
||||
|
||||
if (gsm_sim800_keep_shutdown == 1) {
|
||||
*state = SIM800_INHIBITED;
|
||||
}
|
||||
|
||||
if (*state == SIM800_UNKNOWN) {
|
||||
// turn power off
|
||||
gsm_sim800_power_off();
|
||||
|
@ -876,10 +883,19 @@ void gsm_sim800_tx_done_event_handler(srl_context_t * srl_context, gsm_sim800_st
|
|||
}
|
||||
|
||||
/**
|
||||
* Power cycle GSM modem
|
||||
* Power cycle GSM modem and reinitialize everything related to initial state.
|
||||
* @param state
|
||||
*/
|
||||
void gsm_sim800_reset(gsm_sim800_state_t * state) {
|
||||
|
||||
// do nothing if gsm modem must be kept in shutdown
|
||||
if (gsm_sim800_keep_shutdown == 1) {
|
||||
|
||||
*state = SIM800_INHIBITED;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// turn power off
|
||||
gsm_sim800_power_off();
|
||||
|
||||
|
@ -938,3 +954,7 @@ void gsm_sim800_decrease_counter(void) {
|
|||
gsm_reset_counter = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void gsm_sim800_inhibit(uint8_t _inhibit) {
|
||||
gsm_sim800_keep_shutdown = _inhibit;
|
||||
}
|
||||
|
|
Ładowanie…
Reference in New Issue