diff --git a/hwconf/hw_gesc.c b/hwconf/hw_gesc.c
index 5971a937..505fe34f 100644
--- a/hwconf/hw_gesc.c
+++ b/hwconf/hw_gesc.c
@@ -2,18 +2,18 @@
Copyright 2018 Benjamin Vedder benjamin@vedder.se
This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
- */
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+ */
#include "hw.h"
#include "ch.h"
@@ -36,7 +36,7 @@
#include "lora/rfm95w.h"
#endif
-// Threads
+ // Threads
THD_FUNCTION(mag_thread, arg);
static THD_WORKING_AREA(mag_thread_wa, 512);
static bool mag_thread_running = false;
@@ -46,7 +46,7 @@ static volatile bool i2c_running = false;
static volatile int angle = 0;
//private functions
-static void terminal_cmd_doublepulse(int argc, const char **argv);
+static void terminal_cmd_doublepulse(int argc, const char** argv);
// I2C configuration
@@ -66,32 +66,32 @@ void hw_init_gpio(void) {
// LEDs
palSetPadMode(LED_GREEN_GPIO, LED_GREEN_PIN,
- PAL_MODE_OUTPUT_PUSHPULL |
- PAL_STM32_OSPEED_HIGHEST);
+ PAL_MODE_OUTPUT_PUSHPULL |
+ PAL_STM32_OSPEED_HIGHEST);
palSetPadMode(LED_RED_GPIO, LED_RED_PIN,
- PAL_MODE_OUTPUT_PUSHPULL |
- PAL_STM32_OSPEED_HIGHEST);
+ PAL_MODE_OUTPUT_PUSHPULL |
+ PAL_STM32_OSPEED_HIGHEST);
// GPIOA Configuration: Channel 1 to 3 as alternate function push-pull
palSetPadMode(GPIOA, 8, PAL_MODE_ALTERNATE(GPIO_AF_TIM1) |
- PAL_STM32_OSPEED_HIGHEST |
- PAL_STM32_PUDR_FLOATING);
+ PAL_STM32_OSPEED_HIGHEST |
+ PAL_STM32_PUDR_FLOATING);
palSetPadMode(GPIOA, 9, PAL_MODE_ALTERNATE(GPIO_AF_TIM1) |
- PAL_STM32_OSPEED_HIGHEST |
- PAL_STM32_PUDR_FLOATING);
+ PAL_STM32_OSPEED_HIGHEST |
+ PAL_STM32_PUDR_FLOATING);
palSetPadMode(GPIOA, 10, PAL_MODE_ALTERNATE(GPIO_AF_TIM1) |
- PAL_STM32_OSPEED_HIGHEST |
- PAL_STM32_PUDR_FLOATING);
+ PAL_STM32_OSPEED_HIGHEST |
+ PAL_STM32_PUDR_FLOATING);
palSetPadMode(GPIOB, 13, PAL_MODE_ALTERNATE(GPIO_AF_TIM1) |
- PAL_STM32_OSPEED_HIGHEST |
- PAL_STM32_PUDR_FLOATING);
+ PAL_STM32_OSPEED_HIGHEST |
+ PAL_STM32_PUDR_FLOATING);
palSetPadMode(GPIOB, 14, PAL_MODE_ALTERNATE(GPIO_AF_TIM1) |
- PAL_STM32_OSPEED_HIGHEST |
- PAL_STM32_PUDR_FLOATING);
+ PAL_STM32_OSPEED_HIGHEST |
+ PAL_STM32_PUDR_FLOATING);
palSetPadMode(GPIOB, 15, PAL_MODE_ALTERNATE(GPIO_AF_TIM1) |
- PAL_STM32_OSPEED_HIGHEST |
- PAL_STM32_PUDR_FLOATING);
+ PAL_STM32_OSPEED_HIGHEST |
+ PAL_STM32_PUDR_FLOATING);
// Hall sensors
palSetPadMode(HW_HALL_ENC_GPIO1, HW_HALL_ENC_PIN1, PAL_MODE_INPUT_PULLUP);
@@ -100,22 +100,22 @@ void hw_init_gpio(void) {
// Phase filters
palSetPadMode(PHASE_FILTER_GPIO, PHASE_FILTER_PIN,
- PAL_MODE_OUTPUT_PUSHPULL |
- PAL_STM32_OSPEED_HIGHEST);
+ PAL_MODE_OUTPUT_PUSHPULL |
+ PAL_STM32_OSPEED_HIGHEST);
PHASE_FILTER_OFF();
- // Current filter
+ // Current filter
palSetPadMode(GPIOD, 2,
- PAL_MODE_OUTPUT_PUSHPULL |
- PAL_STM32_OSPEED_HIGHEST);
+ PAL_MODE_OUTPUT_PUSHPULL |
+ PAL_STM32_OSPEED_HIGHEST);
CURRENT_FILTER_OFF();
// AUX pin
AUX_OFF();
palSetPadMode(AUX_GPIO, AUX_PIN,
- PAL_MODE_OUTPUT_PUSHPULL |
- PAL_STM32_OSPEED_HIGHEST);
+ PAL_MODE_OUTPUT_PUSHPULL |
+ PAL_STM32_OSPEED_HIGHEST);
// ADC Pins
palSetPadMode(GPIOA, 0, PAL_MODE_INPUT_ANALOG);
@@ -149,26 +149,26 @@ void hw_init_gpio(void) {
}
void hw_setup_adc_channels(void) {
-/*
- * ADC Vector
- *
- * 0 (1): IN0 SENS1
- * 1 (2): IN1 SENS2
- * 2 (3): IN2 SENS3
- * 3 (1): IN10 CURR1
- * 4 (2): IN11 CURR2
- * 5 (3): IN12 CURR3
- * 6 (1): IN5 ADC_EXT1
- * 7 (2): IN6 ADC_EXT2
- * 8 (3): IN3 TEMP_MOS
- * 9 (1): IN14 TEMP_MOTOR
- * 10 (2): IN15
- * 11 (3): IN13 AN_IN
- * 12 (1): Vrefint
- */
+ /*
+ * ADC Vector
+ *
+ * 0 (1): IN0 SENS1
+ * 1 (2): IN1 SENS2
+ * 2 (3): IN2 SENS3
+ * 3 (1): IN10 CURR1
+ * 4 (2): IN11 CURR2
+ * 5 (3): IN12 CURR3
+ * 6 (1): IN5 ADC_EXT1
+ * 7 (2): IN6 ADC_EXT2
+ * 8 (3): IN3 TEMP_MOS
+ * 9 (1): IN14 TEMP_MOTOR
+ * 10 (2): IN15
+ * 11 (3): IN13 AN_IN
+ * 12 (1): Vrefint
+ */
- // ADC1 regular channels
+ // ADC1 regular channels
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_15Cycles);
ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 2, ADC_SampleTime_15Cycles);
ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 3, ADC_SampleTime_15Cycles);
@@ -212,15 +212,15 @@ void hw_start_i2c(void) {
if (!i2c_running) {
palSetPadMode(HW_I2C_SCL_PORT, HW_I2C_SCL_PIN,
- PAL_MODE_ALTERNATE(HW_I2C_GPIO_AF) |
- PAL_STM32_OTYPE_OPENDRAIN |
- PAL_STM32_OSPEED_MID1 |
- PAL_STM32_PUDR_PULLUP);
+ PAL_MODE_ALTERNATE(HW_I2C_GPIO_AF) |
+ PAL_STM32_OTYPE_OPENDRAIN |
+ PAL_STM32_OSPEED_MID1 |
+ PAL_STM32_PUDR_PULLUP);
palSetPadMode(HW_I2C_SDA_PORT, HW_I2C_SDA_PIN,
- PAL_MODE_ALTERNATE(HW_I2C_GPIO_AF) |
- PAL_STM32_OTYPE_OPENDRAIN |
- PAL_STM32_OSPEED_MID1 |
- PAL_STM32_PUDR_PULLUP);
+ PAL_MODE_ALTERNATE(HW_I2C_GPIO_AF) |
+ PAL_STM32_OTYPE_OPENDRAIN |
+ PAL_STM32_OSPEED_MID1 |
+ PAL_STM32_PUDR_PULLUP);
i2cStart(&HW_I2C_DEV, &i2cfg);
i2c_running = true;
@@ -252,21 +252,21 @@ void hw_try_restore_i2c(void) {
i2cAcquireBus(&HW_I2C_DEV);
palSetPadMode(HW_I2C_SCL_PORT, HW_I2C_SCL_PIN,
- PAL_STM32_OTYPE_OPENDRAIN |
- PAL_STM32_OSPEED_MID1 |
- PAL_STM32_PUDR_PULLUP);
+ PAL_STM32_OTYPE_OPENDRAIN |
+ PAL_STM32_OSPEED_MID1 |
+ PAL_STM32_PUDR_PULLUP);
palSetPadMode(HW_I2C_SDA_PORT, HW_I2C_SDA_PIN,
- PAL_STM32_OTYPE_OPENDRAIN |
- PAL_STM32_OSPEED_MID1 |
- PAL_STM32_PUDR_PULLUP);
+ PAL_STM32_OTYPE_OPENDRAIN |
+ PAL_STM32_OSPEED_MID1 |
+ PAL_STM32_PUDR_PULLUP);
palSetPad(HW_I2C_SCL_PORT, HW_I2C_SCL_PIN);
palSetPad(HW_I2C_SDA_PORT, HW_I2C_SDA_PIN);
chThdSleep(1);
- for(int i = 0;i < 16;i++) {
+ for (int i = 0;i < 16;i++) {
palClearPad(HW_I2C_SCL_PORT, HW_I2C_SCL_PIN);
chThdSleep(1);
palSetPad(HW_I2C_SCL_PORT, HW_I2C_SCL_PIN);
@@ -283,16 +283,16 @@ void hw_try_restore_i2c(void) {
palSetPad(HW_I2C_SDA_PORT, HW_I2C_SDA_PIN);
palSetPadMode(HW_I2C_SCL_PORT, HW_I2C_SCL_PIN,
- PAL_MODE_ALTERNATE(HW_I2C_GPIO_AF) |
- PAL_STM32_OTYPE_OPENDRAIN |
- PAL_STM32_OSPEED_MID1 |
- PAL_STM32_PUDR_PULLUP);
+ PAL_MODE_ALTERNATE(HW_I2C_GPIO_AF) |
+ PAL_STM32_OTYPE_OPENDRAIN |
+ PAL_STM32_OSPEED_MID1 |
+ PAL_STM32_PUDR_PULLUP);
palSetPadMode(HW_I2C_SDA_PORT, HW_I2C_SDA_PIN,
- PAL_MODE_ALTERNATE(HW_I2C_GPIO_AF) |
- PAL_STM32_OTYPE_OPENDRAIN |
- PAL_STM32_OSPEED_MID1 |
- PAL_STM32_PUDR_PULLUP);
+ PAL_MODE_ALTERNATE(HW_I2C_GPIO_AF) |
+ PAL_STM32_OTYPE_OPENDRAIN |
+ PAL_STM32_OSPEED_MID1 |
+ PAL_STM32_PUDR_PULLUP);
HW_I2C_DEV.state = I2C_STOP;
i2cStart(&HW_I2C_DEV, &i2cfg);
@@ -316,7 +316,7 @@ THD_FUNCTION(mag_thread, arg) {
hw_start_i2c();
chThdSleepMilliseconds(10);
- for(;;) {
+ for (;;) {
if (i2c_running) {
txbuf[0] = 0x0c;
txbuf[1] = 0x0d;
@@ -324,8 +324,8 @@ THD_FUNCTION(mag_thread, arg) {
status = i2cMasterTransmitTimeout(&HW_I2C_DEV, temp_addr, txbuf, 2, rxbuf, 2, tmo);
i2cReleaseBus(&HW_I2C_DEV);
- if (status == MSG_OK){
- angle = rxbuf[0] | rxbuf[1]<<8;
+ if (status == MSG_OK) {
+ angle = rxbuf[0] | rxbuf[1] << 8;
} else {
hw_try_restore_i2c();
}
@@ -338,12 +338,12 @@ int gsvesc_get_angle() {
return angle;
}
-static void terminal_cmd_doublepulse(int argc, const char **argv)
+static void terminal_cmd_doublepulse(int argc, const char** argv)
{
(void)argc;
(void)argv;
- int preface,pulse1,breaktime,pulse2;
+ int preface, pulse1, breaktime, pulse2;
int utick;
int deadtime = -1;
@@ -369,7 +369,7 @@ static void terminal_cmd_doublepulse(int argc, const char **argv)
}
timeout_configure_IWDT_slowest();
- utick = (int)( SYSTEM_CORE_CLOCK / 1000000 );
+ utick = (int)(SYSTEM_CORE_CLOCK / 1000000);
mcpwm_deinit();
mcpwm_foc_deinit();
gpdrive_deinit();
@@ -395,7 +395,7 @@ static void terminal_cmd_doublepulse(int argc, const char **argv)
// Time Base configuration
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
- TIM_TimeBaseStructure.TIM_Period = (preface+pulse1)*utick;
+ TIM_TimeBaseStructure.TIM_Period = (preface + pulse1) * utick;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
@@ -404,7 +404,7 @@ static void terminal_cmd_doublepulse(int argc, const char **argv)
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
- TIM_OCInitStructure.TIM_Pulse = preface*utick;
+ TIM_OCInitStructure.TIM_Pulse = preface * utick;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
@@ -460,14 +460,14 @@ static void terminal_cmd_doublepulse(int argc, const char **argv)
//Timer 4 triggert Timer 1
TIM_Cmd(TIM4, ENABLE);
TIM_Cmd(TIM4, DISABLE);
- TIM1->ARR = (breaktime+pulse2)*utick;
- TIM1->CCR1 = breaktime*utick;
- while ( TIM1->CNT != 0 );
+ TIM1->ARR = (breaktime + pulse2) * utick;
+ TIM1->CCR1 = breaktime * utick;
+ while (TIM1->CNT != 0);
TIM_Cmd(TIM4, ENABLE);
chThdSleepMilliseconds(1);
TIM_CtrlPWMOutputs(TIM1, DISABLE);
- mc_configuration *mcconf = mempools_alloc_mcconf();
+ mc_configuration* mcconf = mempools_alloc_mcconf();
*mcconf = *mc_interface_get_configuration();
switch (mcconf->motor_type) {
@@ -477,7 +477,7 @@ static void terminal_cmd_doublepulse(int argc, const char **argv)
break;
case MOTOR_TYPE_FOC:
- mcpwm_foc_init(mcconf,mcconf);
+ mcpwm_foc_init(mcconf, mcconf);
break;
case MOTOR_TYPE_GPD:
diff --git a/lora/SX1278.c b/lora/SX1278.c
index e2c13d29..3654801e 100644
--- a/lora/SX1278.c
+++ b/lora/SX1278.c
@@ -6,6 +6,21 @@
*
* work based on DORJI.COM sample code and
* https://github.com/realspinner/SX1278_LoRa
+ *
+ * Modified for vesc firmware by schardt@team-ctech.de
+
+ This code uses InvertIQ function to create a simple Gateway/Node logic.
+ VESC = Gateway
+ Gateway - Sends messages with enableInvertIQ()
+ - Receives messages with disableInvertIQ()
+
+ Node - Sends messages with disableInvertIQ()
+ - Receives messages with enableInvertIQ()
+
+ With this arrangement a Gateway never receive messages from another Gateway
+ and a Node never receive message from another Node.
+ Only Gateway to Node and vice versa.
+ *
*/
#include "conf_general.h"
diff --git a/lora/lora.c b/lora/lora.c
index ed9bc623..a7910bac 100644
--- a/lora/lora.c
+++ b/lora/lora.c
@@ -47,74 +47,70 @@ PACKET_STATE_t packet_state;
SX1278_t SX1278;
// Private functions
-static void process_packet(unsigned char *data, unsigned int len);
-static void send_packet(unsigned char *data, unsigned int len);
+static void process_packet(unsigned char* data, unsigned int len);
+static void send_packet(unsigned char* data, unsigned int len);
-void rfm95w_send_packet(unsigned char *data, unsigned int len) {
+void lora_send_packet(unsigned char* data, unsigned int len) {
if (!send_mutex_init_done) {
chMtxObjectInit(&send_mutex);
send_mutex_init_done = true;
-}
+ }
chMtxLock(&send_mutex);
packet_send_packet(data, len, &packet_state);
chMtxUnlock(&send_mutex);
}
-static void process_packet(unsigned char *data, unsigned int len) {
- commands_process_packet(data, len, rfm95w_send_packet);
+static void process_packet(unsigned char* data, unsigned int len) {
+ commands_process_packet(data, len, lora_send_packet);
}
-static void send_packet(unsigned char *data, unsigned int len) {
+static void send_packet(unsigned char* data, unsigned int len) {
int erg;
- commands_printf("Send, len %d",len);
- erg= SX1278_LoRaEntryTx(&SX1278, len, 2000);
- commands_printf("EntryTX: %d",erg);
- erg=SX1278_LoRaTxPacket(&SX1278, (uint8_t*) data, len, 2000);
- commands_printf("TXPacket: %d",erg);
+ erg = SX1278_LoRaEntryTx(&SX1278, len, 100);
+ erg = SX1278_LoRaTxPacket(&SX1278, (uint8_t*)data, len, 100);
}
-void rfm95w_init(void) {
+void lora_init(void) {
packet_init(send_packet, process_packet, &packet_state);
- palSetPadMode(HW_RFM95W_SPI_PORT_SCK, HW_RFM95W_SPI_PIN_SCK, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST);
- palSetPadMode(HW_RFM95W_SPI_PORT_MISO, HW_RFM95W_SPI_PIN_MISO,PAL_MODE_INPUT);
- palSetPadMode(HW_RFM95W_SPI_PORT_NSS, HW_RFM95W_SPI_PIN_NSS, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST);
- palSetPadMode(HW_RFM95W_SPI_PORT_MOSI, HW_RFM95W_SPI_PIN_MOSI, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST);
- palSetPadMode(HW_RFM95W_SPI_PORT_DIO0, HW_RFM95W_SPI_PIN_DIO0, PAL_MODE_INPUT);
- palSetPadMode(HW_RFM95W_SPI_PORT_RESET, HW_RFM95W_SPI_PIN_RESET, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST);
- SX1278_init(&SX1278, 868000000, SX1278_POWER_17DBM, SX1278_LORA_SF_7, SX1278_LORA_BW_125KHZ, SX1278_LORA_CR_4_5, SX1278_LORA_CRC_DIS, 100);
+ palSetPadMode(HW_LORA_SPI_PORT_SCK, HW_LORA_SPI_PIN_SCK, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST);
+ palSetPadMode(HW_LORA_SPI_PORT_MISO, HW_LORA_SPI_PIN_MISO, PAL_MODE_INPUT);
+ palSetPadMode(HW_LORA_SPI_PORT_NSS, HW_LORA_SPI_PIN_NSS, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST);
+ palSetPadMode(HW_LORA_SPI_PORT_MOSI, HW_LORA_SPI_PIN_MOSI, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST);
+ palSetPadMode(HW_LORA_SPI_PORT_DIO0, HW_LORA_SPI_PIN_DIO0, PAL_MODE_INPUT);
+ palSetPadMode(HW_LORA_SPI_PORT_RESET, HW_LORA_SPI_PIN_RESET, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST);
+ SX1278_init(&SX1278, 868000000, SX1278_POWER_17DBM, SX1278_LORA_SF_7, SX1278_LORA_BW_250KHZ, SX1278_LORA_CR_4_5, SX1278_LORA_CRC_DIS, 100);
if (!thread_is_running) {
chThdCreateStatic(packet_process_thread_wa, sizeof(packet_process_thread_wa), NORMALPRIO, packet_process_thread, NULL);
- thread_is_running = true;
+ thread_is_running = true;
}
}
-void rfm95w_stop(void) {
+void lora_stop(void) {
}
static THD_FUNCTION(packet_process_thread, arg) {
(void)arg;
unsigned char buffer[128];
- chRegSetThreadName("rfm95w proc");
+ chRegSetThreadName("LoRa proc");
- buffer[0]=COMM_GET_VALUES;
+ buffer[0] = COMM_GET_VALUES;
- while(!commands_is_initialized() ) {
- chThdSleepMilliseconds(10);
+ while (!commands_is_initialized()) {
+ chThdSleepMilliseconds(10);
}
- for(;;) {
+ for (;;) {
//simulate a received packet to trigger send_packet
- commands_process_packet(buffer, 1, rfm95w_send_packet);
- //SX1278_LoRaEntryRx(&SX1278,100,100);
- //if ( SX1278_LoRaRxPacket(&SX1278) ) {
- //process_packet(SX1278.rxBuffer, SX1278.readBytes);
- //}
- chThdSleepMilliseconds(500);
+ commands_process_packet(buffer, 1, lora_send_packet);
+ SX1278_LoRaEntryRx(&SX1278, 100, 100);
+ if (SX1278_LoRaRxPacket(&SX1278)) {
+ process_packet(SX1278.rxBuffer, SX1278.readBytes);
+ }
}
}