mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-15 04:15:44 +03:00
moved source files around in preparation to adding makefile build way
added makefile (thx gke) added linker script (thx gke) moved startups into src directory as well no code changes. git-svn-id: https://afrodevices.googlecode.com/svn/trunk/baseflight@105 7c89a4a9-59b9-e629-4cfe-3a2d53b20e61
This commit is contained in:
parent
aae8ef4c3d
commit
5091f3e9ff
45 changed files with 229 additions and 14182 deletions
274
src/serial.c
Executable file
274
src/serial.c
Executable file
|
@ -0,0 +1,274 @@
|
|||
#include "board.h"
|
||||
#include "mw.h"
|
||||
|
||||
// signal that we're in cli mode
|
||||
uint8_t cliMode = 0;
|
||||
|
||||
void serialize16(int16_t a)
|
||||
{
|
||||
uartWrite(a);
|
||||
uartWrite(a >> 8 & 0xff);
|
||||
}
|
||||
|
||||
void serialize8(uint8_t a)
|
||||
{
|
||||
uartWrite(a);
|
||||
}
|
||||
|
||||
void UartSendData()
|
||||
{
|
||||
// Data transmission acivated when the ring is not empty
|
||||
}
|
||||
|
||||
void serialCom(void)
|
||||
{
|
||||
uint8_t i;
|
||||
|
||||
// in cli mode, all uart stuff goes to here. enter cli mode by sending #
|
||||
if (cliMode) {
|
||||
cliProcess();
|
||||
return;
|
||||
}
|
||||
|
||||
if (uartAvailable()) {
|
||||
switch (uartRead()) {
|
||||
case '#':
|
||||
uartPrint("\r\nEntering CLI Mode, type 'exit' to return\r\n");
|
||||
cliMode = 1;
|
||||
break;
|
||||
|
||||
#ifdef BTSERIAL
|
||||
case 'K': //receive RC data from Bluetooth Serial adapter as a remote
|
||||
rcData[THROTTLE] = (SerialRead(0) * 4) + 1000;
|
||||
rcData[ROLL] = (SerialRead(0) * 4) + 1000;
|
||||
rcData[PITCH] = (SerialRead(0) * 4) + 1000;
|
||||
rcData[YAW] = (SerialRead(0) * 4) + 1000;
|
||||
rcData[AUX1] = (SerialRead(0) * 4) + 1000;
|
||||
break;
|
||||
#endif
|
||||
#ifdef LCD_TELEMETRY
|
||||
case 'A': // button A press
|
||||
case '1':
|
||||
if (telemetry == 1)
|
||||
telemetry = 0;
|
||||
else {
|
||||
telemetry = 1;
|
||||
LCDclear();
|
||||
}
|
||||
break;
|
||||
case 'B': // button B press
|
||||
case '2':
|
||||
if (telemetry == 2)
|
||||
telemetry = 0;
|
||||
else {
|
||||
telemetry = 2;
|
||||
LCDclear();
|
||||
}
|
||||
break;
|
||||
case 'C': // button C press
|
||||
case '3':
|
||||
if (telemetry == 3)
|
||||
telemetry = 0;
|
||||
else {
|
||||
telemetry = 3;
|
||||
LCDclear();
|
||||
#if defined(LOG_VALUES) && defined(DEBUG)
|
||||
cycleTimeMax = 0; // reset min/max on transition on->off
|
||||
cycleTimeMin = 65535;
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
case 'D': // button D press
|
||||
case '4':
|
||||
if (telemetry == 4)
|
||||
telemetry = 0;
|
||||
else {
|
||||
telemetry = 4;
|
||||
LCDclear();
|
||||
}
|
||||
break;
|
||||
case '5':
|
||||
if (telemetry == 5)
|
||||
telemetry = 0;
|
||||
else {
|
||||
telemetry = 5;
|
||||
LCDclear();
|
||||
}
|
||||
break;
|
||||
case '6':
|
||||
if (telemetry == 6)
|
||||
telemetry = 0;
|
||||
else {
|
||||
telemetry = 6;
|
||||
LCDclear();
|
||||
}
|
||||
break;
|
||||
case '7':
|
||||
if (telemetry == 7)
|
||||
telemetry = 0;
|
||||
else {
|
||||
telemetry = 7;
|
||||
LCDclear();
|
||||
}
|
||||
break;
|
||||
#if defined(LOG_VALUES) && defined(DEBUG)
|
||||
case 'R':
|
||||
//Reset logvalues
|
||||
if (telemetry == 'R')
|
||||
telemetry = 0;
|
||||
else {
|
||||
telemetry = 'R';
|
||||
LCDclear();
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
#ifdef DEBUG
|
||||
case 'F':
|
||||
{
|
||||
if (telemetry == 'F')
|
||||
telemetry = 0;
|
||||
else {
|
||||
telemetry = 'F';
|
||||
LCDclear();
|
||||
}
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
case 'a': // button A release
|
||||
case 'b': // button B release
|
||||
case 'c': // button C release
|
||||
case 'd': // button D release
|
||||
break;
|
||||
#endif
|
||||
case 'M': // Multiwii @ arduino to GUI all data
|
||||
serialize8('M');
|
||||
serialize8(VERSION); // MultiWii Firmware version
|
||||
for (i = 0; i < 3; i++)
|
||||
serialize16(accSmooth[i]);
|
||||
for (i = 0; i < 3; i++)
|
||||
serialize16(gyroData[i]);
|
||||
for (i = 0; i < 3; i++)
|
||||
serialize16(magADC[i]);
|
||||
serialize16(EstAlt);
|
||||
serialize16(heading); // compass
|
||||
for (i = 0; i < 8; i++)
|
||||
serialize16(servo[i]);
|
||||
for (i = 0; i < 8; i++)
|
||||
serialize16(motor[i]);
|
||||
for (i = 0; i < 8; i++)
|
||||
serialize16(rcData[i]);
|
||||
serialize8(sensors(SENSOR_ACC) << 1 | sensors(SENSOR_BARO) << 2 | sensors(SENSOR_MAG) << 3 | sensors(SENSOR_GPS) << 4);
|
||||
serialize8(accMode | baroMode << 1 | magMode << 2 | (GPSModeHome | GPSModeHold) << 3);
|
||||
#if defined(LOG_VALUES)
|
||||
serialize16(cycleTimeMax);
|
||||
cycleTimeMax = 0;
|
||||
#else
|
||||
serialize16(cycleTime);
|
||||
#endif
|
||||
serialize16(i2cGetErrorCounter());
|
||||
for (i = 0; i < 2; i++)
|
||||
serialize16(angle[i]);
|
||||
serialize8(cfg.mixerConfiguration);
|
||||
for (i = 0; i < PIDITEMS; i++) {
|
||||
serialize8(cfg.P8[i]);
|
||||
serialize8(cfg.I8[i]);
|
||||
serialize8(cfg.D8[i]);
|
||||
}
|
||||
serialize8(cfg.rcRate8);
|
||||
serialize8(cfg.rcExpo8);
|
||||
serialize8(cfg.rollPitchRate);
|
||||
serialize8(cfg.yawRate);
|
||||
serialize8(cfg.dynThrPID);
|
||||
for (i = 0; i < CHECKBOXITEMS; i++) {
|
||||
serialize8(cfg.activate1[i]);
|
||||
serialize8(cfg.activate2[i] | (rcOptions[i] << 7)); // use highest bit to transport state in mwc
|
||||
|
||||
}
|
||||
serialize16(GPS_distanceToHome);
|
||||
serialize16(GPS_directionToHome);
|
||||
serialize8(GPS_numSat);
|
||||
serialize8(GPS_fix);
|
||||
serialize8(GPS_update);
|
||||
serialize16(intPowerMeterSum);
|
||||
serialize16(intPowerTrigger1);
|
||||
serialize8(vbat);
|
||||
serialize16(BaroAlt / 10); // 4 variables are here for general monitoring purpose
|
||||
serialize16(debug2); // debug2
|
||||
serialize16(debug3); // debug3
|
||||
serialize16(debug4); // debug4
|
||||
serialize8('M');
|
||||
// UartSendData();
|
||||
break;
|
||||
case 'O': // arduino to OSD data - contribution from MIS
|
||||
serialize8('O');
|
||||
for (i = 0; i < 3; i++)
|
||||
serialize16(accSmooth[i]);
|
||||
for (i = 0; i < 3; i++)
|
||||
serialize16(gyroData[i]);
|
||||
serialize16(EstAlt * 10.0f);
|
||||
serialize16(heading); // compass - 16 bytes
|
||||
for (i = 0; i < 2; i++)
|
||||
serialize16(angle[i]); //20
|
||||
for (i = 0; i < 6; i++)
|
||||
serialize16(motor[i]); //32
|
||||
for (i = 0; i < 6; i++) {
|
||||
serialize16(rcData[i]);
|
||||
} //44
|
||||
serialize8(sensors(SENSOR_ACC) << 1 | sensors(SENSOR_BARO) << 2 | sensors(SENSOR_MAG) << 3);
|
||||
serialize8(accMode | baroMode << 1 | magMode << 2);
|
||||
serialize8(vbat); // Vbatt 47
|
||||
serialize8(VERSION); // MultiWii Firmware version
|
||||
serialize8('O'); //49
|
||||
// UartSendData();
|
||||
break;
|
||||
case 'R': // reboot to bootloader (oops, apparently this w as used for other trash, fix later)
|
||||
systemReset(true);
|
||||
break;
|
||||
|
||||
case 'X': // dynamic mixer
|
||||
i = uartReadPoll();
|
||||
if (i > 64 && i < 64 + MULTITYPE_LAST) {
|
||||
serialize8('O');
|
||||
serialize8('K');
|
||||
cfg.mixerConfiguration = i - '@'; // A..B..C.. index
|
||||
writeParams();
|
||||
systemReset(false);
|
||||
break;
|
||||
}
|
||||
serialize8('N');
|
||||
serialize8('G');
|
||||
break;
|
||||
|
||||
case 'W': //GUI write params to eeprom @ arduino
|
||||
// while (uartAvailable() < (7 + 3 * PIDITEMS + 2 * CHECKBOXITEMS)) { }
|
||||
for (i = 0; i < PIDITEMS; i++) {
|
||||
cfg.P8[i] = uartReadPoll();
|
||||
cfg.I8[i] = uartReadPoll();
|
||||
cfg.D8[i] = uartReadPoll();
|
||||
}
|
||||
cfg.rcRate8 = uartReadPoll();
|
||||
cfg.rcExpo8 = uartReadPoll(); //2
|
||||
cfg.rollPitchRate = uartReadPoll();
|
||||
cfg.yawRate = uartReadPoll(); //4
|
||||
cfg.dynThrPID = uartReadPoll(); //5
|
||||
for (i = 0; i < CHECKBOXITEMS; i++) {
|
||||
cfg.activate1[i] = uartReadPoll();
|
||||
cfg.activate2[i] = uartReadPoll();
|
||||
}
|
||||
#if defined(POWERMETER)
|
||||
cfg.powerTrigger1 = (uartReadPoll() + 256 * uartReadPoll()) / PLEVELSCALE; // we rely on writeParams() to compute corresponding pAlarm value
|
||||
#else
|
||||
uartReadPoll();
|
||||
uartReadPoll(); //7 so we unload the two bytes
|
||||
#endif
|
||||
writeParams();
|
||||
break;
|
||||
case 'S': //GUI to arduino ACC calibration request
|
||||
calibratingA = 400;
|
||||
break;
|
||||
case 'E': //GUI to arduino MAG calibration request
|
||||
calibratingM = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue