1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-24 00:35:39 +03:00

correction and formating updated

This commit is contained in:
Thomas Miric 2018-01-25 17:38:19 +01:00
parent 8a1fd399bf
commit b965ffd389

View file

@ -93,7 +93,7 @@ enum exDataType_e {
EX_TYPE_DES = 255 // only for devicedescription
};
const uint8_t exDataTypeLen[]={
const uint8_t exDataTypeLen[] = {
[EX_TYPE_6b] = 1,
[EX_TYPE_14b] = 2,
[EX_TYPE_22b] = 3,
@ -102,7 +102,7 @@ const uint8_t exDataTypeLen[]={
[EX_TYPE_GPS] = 4
};
typedef struct exBusSensor_s{
typedef struct exBusSensor_s {
const char *label;
const char *unit;
const uint8_t exDataType;
@ -125,7 +125,7 @@ exBusSensor_t jetiExSensors[] = {
{ "Roll angle", "\xB0", EX_TYPE_14b, DECIMAL_MASK(1), EX_TYPE_SENSOR_DISABLED},
{ "Pitch angle", "\xB0", EX_TYPE_14b, DECIMAL_MASK(1), EX_TYPE_SENSOR_DISABLED},
{ "Heading", "\xB0", EX_TYPE_14b, DECIMAL_MASK(1), EX_TYPE_SENSOR_DISABLED},
/*{ "free", "\xB0", EX_TYPE_14b, DECIMAL_MASK(1), EX_TYPE_SENSOR_DISABLED},
/*{ "free", "\xB0", EX_TYPE_14b, DECIMAL_MASK(1), EX_TYPE_SENSOR_DISABLED},
{ "free", "", EX_TYPE_14b, DECIMAL_MASK(1), EX_TYPE_SENSOR_DISABLED},
{ "free", "", EX_TYPE_14b, DECIMAL_MASK(1), EX_TYPE_SENSOR_DISABLED},
{ "free", "", EX_TYPE_14b, DECIMAL_MASK(1), EX_TYPE_SENSOR_DISABLED},
@ -175,7 +175,7 @@ static uint8_t sendJetiExBusTelemetry(uint8_t packetID, uint8_t item);
uint8_t calcCRC8(uint8_t *pt, uint8_t msgLen)
{
uint8_t crc=0;
for (uint8_t mlen = 0; mlen < msgLen; mlen++) {
crc ^= pt[mlen];
crc = crc ^ (crc << 1) ^ (crc << 2) ^ (0x0e090700 >> ((crc >> 3) & 0x18));
@ -194,8 +194,8 @@ void initJetiExBusTelemetry(void)
jetiExBusTelemetryFrame[EXBUS_HEADER_SYNC] = 0x3B; // Startbytes
jetiExBusTelemetryFrame[EXBUS_HEADER_REQ] = 0x01;
jetiExBusTelemetryFrame[EXBUS_HEADER_DATA_ID] = 0x3A; // Ex Telemetry
// Init Ex Telemetry header
uint8_t *jetiExTelemetryFrame = &jetiExBusTelemetryFrame[EXBUS_HEADER_DATA];
jetiExTelemetryFrame[EXTEL_HEADER_SYNC] = 0x9F; // Startbyte
@ -204,24 +204,23 @@ void initJetiExBusTelemetry(void)
jetiExTelemetryFrame[EXTEL_HEADER_LSN_LB] = 0x00; // increment by telemetry count (%16) > only 15 values per device possible
jetiExTelemetryFrame[EXTEL_HEADER_LSN_HB] = 0x00;
jetiExTelemetryFrame[EXTEL_HEADER_RES] = 0x00; // reserved, by default 0x00
// Check which sensors are available
if (batteryConfig()->voltageMeterSource != VOLTAGE_METER_NONE) jetiExSensors[EX_VOLTAGE].parameter = EX_TYPE_SENSOR_ENABLED;
if (batteryConfig()->currentMeterSource != CURRENT_METER_NONE) jetiExSensors[EX_CURRENT].parameter = EX_TYPE_SENSOR_ENABLED;
if ((batteryConfig()->voltageMeterSource != VOLTAGE_METER_NONE) && (batteryConfig()->currentMeterSource != CURRENT_METER_NONE)) {
jetiExSensors[EX_POWER].parameter = EX_TYPE_SENSOR_ENABLED;
} jetiExSensors[EX_CAPACITY].parameter = EX_TYPE_SENSOR_ENABLED;
jetiExSensors[EX_CAPACITY].parameter = EX_TYPE_SENSOR_ENABLED;
}
if (sensors(SENSOR_BARO)) jetiExSensors[EX_ALTITUDE].parameter = EX_TYPE_SENSOR_ENABLED;
if (sensors(SENSOR_ACC)){
if (sensors(SENSOR_ACC)) {
jetiExSensors[EX_ROLL_ANGLE].parameter = EX_TYPE_SENSOR_ENABLED;
jetiExSensors[EX_PITCH_ANGLE].parameter = EX_TYPE_SENSOR_ENABLED;
}
if (sensors(SENSOR_MAG)) jetiExSensors[EX_HEADING].parameter = EX_TYPE_SENSOR_ENABLED;
for (uint8_t item = 0; item < JETI_EX_SENSOR_COUNT; item++ ) {
if (jetiExSensors[item].parameter == EX_TYPE_SENSOR_ENABLED) {
activeSensorList[activeSensors] = item;
@ -235,54 +234,53 @@ void createExTelemetrieTextMessage(uint8_t *exMessage, uint8_t messageID, const
{
uint8_t labelLength = strlen(sensor->label);
uint8_t unitLength = strlen(sensor->unit);
exMessage[EXTEL_HEADER_TYPE_LEN] = EXTEL_OVERHEAD + labelLength + unitLength;
exMessage[EXTEL_HEADER_LSN_LB] = messageID & 0xF0; // Device ID
exMessage[EXTEL_HEADER_ID] = messageID & 0x0F; // Sensor ID (%16)
exMessage[EXTEL_HEADER_DATA] = (labelLength << 3) + unitLength;
memcpy(&exMessage[EXTEL_HEADER_DATA + 1], sensor->label, labelLength);
memcpy(&exMessage[EXTEL_HEADER_DATA + 1 + labelLength], sensor->unit, unitLength);
exMessage[exMessage[EXTEL_HEADER_TYPE_LEN] + EXTEL_CRC_LEN] = calcCRC8(&exMessage[EXTEL_HEADER_TYPE_LEN], exMessage[EXTEL_HEADER_TYPE_LEN]);
}
int32_t getSensorValue(uint8_t sensor){
switch(sensor)
{
int32_t getSensorValue(uint8_t sensor) {
switch(sensor) {
case EX_VOLTAGE:
return (getBatteryVoltageLatest());
break;
case EX_CURRENT:
return (getAmperageLatest());
break;
case EX_ALTITUDE:
return (getEstimatedAltitude());
break;
case EX_CAPACITY:
return (getMAhDrawn());
break;
case EX_POWER:
return (getBatteryVoltageLatest()*getAmperageLatest()/100);
break;
case EX_ROLL_ANGLE:
return (attitude.values.roll);
break;
case EX_PITCH_ANGLE:
return (attitude.values.pitch);
break;
case EX_HEADING:
return (attitude.values.yaw);
break;
default: return -1;
}
}
@ -294,14 +292,14 @@ uint8_t createExTelemetrieValueMessage(uint8_t *exMessage, uint8_t item)
uint8_t iCount;
uint8_t messageSize;
uint32_t sensorValue;
exMessage[EXTEL_HEADER_LSN_LB] = item & 0xF0; // Device ID
uint8_t *p = &exMessage[EXTEL_HEADER_ID];
while (sensorItem <= (sensorItemStart | 0x0F)) {
*p++ = ((sensorItem & 0x0F) << 4) | jetiExSensors[sensorItem].exDataType; // Sensor ID (%16) | EX Data Type
sensorValue = getSensorValue(sensorItem);
iCount = exDataTypeLen[jetiExSensors[sensorItem].exDataType];
while (iCount > 1) {
@ -310,20 +308,19 @@ uint8_t createExTelemetrieValueMessage(uint8_t *exMessage, uint8_t item)
iCount--;
}
*p++ = (sensorValue & 0x9F) | jetiExSensors[sensorItem].decimals;
item++;
if (item > activeSensors)
break;
if (item > activeSensors) break;
sensorItem = activeSensorList[item];
if (EXTEL_MAX_PAYLOAD <= ((p-&exMessage[EXTEL_HEADER_ID]) + exDataTypeLen[jetiExSensors[sensorItem].exDataType]) + 1)
break;
if (EXTEL_MAX_PAYLOAD <= ((p-&exMessage[EXTEL_HEADER_ID]) + exDataTypeLen[jetiExSensors[sensorItem].exDataType]) + 1) break;
}
messageSize = (EXTEL_HEADER_LEN + (p-&exMessage[EXTEL_HEADER_ID]));
exMessage[EXTEL_HEADER_TYPE_LEN] = EXTEL_DATA_MSG | messageSize;
exMessage[messageSize + EXTEL_CRC_LEN] = calcCRC8(&exMessage[EXTEL_HEADER_TYPE_LEN], messageSize);
return item; // return the next item
}
@ -331,11 +328,11 @@ uint8_t createExTelemetrieValueMessage(uint8_t *exMessage, uint8_t item)
void createExBusMessage(uint8_t *exBusMessage, uint8_t *exMessage, uint8_t packetID)
{
uint16_t crc16;
exBusMessage[EXBUS_HEADER_PACKET_ID] = packetID;
exBusMessage[EXBUS_HEADER_SUBLEN] = (exMessage[EXTEL_HEADER_TYPE_LEN] & EXTEL_UNMASK_TYPE) + 2; // +2: startbyte & CRC8
exBusMessage[EXBUS_HEADER_MSG_LEN] = EXBUS_OVERHEAD + exBusMessage[EXBUS_HEADER_SUBLEN];
crc16 = jetiExBusCalcCRC16(exBusMessage, exBusMessage[EXBUS_HEADER_MSG_LEN] - EXBUS_CRC_LEN);
exBusMessage[exBusMessage[EXBUS_HEADER_MSG_LEN] - 2] = crc16;
exBusMessage[exBusMessage[EXBUS_HEADER_MSG_LEN] - 1] = crc16 >> 8;
@ -353,18 +350,18 @@ void handleJetiExBusTelemetry(void)
static uint8_t item = 0;
uint32_t timeDiff;
// Check if we shall reset frame position due to time
if (jetiExBusRequestState == EXBUS_STATE_RECEIVED) {
// to prevent timing issues from request to answer - max. 4ms
timeDiff = micros() - jetiTimeStampRequest;
if (timeDiff > 3000) { // include reserved time
jetiExBusRequestState = EXBUS_STATE_ZERO;
framesLost++;
return;
}
if ((jetiExBusRequestFrame[EXBUS_HEADER_DATA_ID] == EXBUS_EX_REQUEST) && (jetiExBusCalcCRC16(jetiExBusRequestFrame, jetiExBusRequestFrame[EXBUS_HEADER_MSG_LEN]) == 0)) {
// switch to TX mode
if (serialRxBytesWaiting(jetiExBusPort) == 0) {
@ -379,7 +376,7 @@ void handleJetiExBusTelemetry(void)
return;
}
}
// check the state if transmit is ready
if (jetiExBusTransceiveState == EXBUS_TRANS_IS_TX_COMPLETED) {
if (isSerialTransmitBufferEmpty(jetiExBusPort)) {
@ -397,9 +394,9 @@ uint8_t sendJetiExBusTelemetry(uint8_t packetID, uint8_t item)
static uint8_t sensorDescriptionCounter = 0xFF;
static uint8_t requestLoop = 0;
uint8_t *jetiExTelemetryFrame = &jetiExBusTelemetryFrame[EXBUS_HEADER_DATA];
if (requestLoop < 0xFF) {
while(1){
while(1) {
sensorDescriptionCounter++;
if(jetiExSensors[sensorDescriptionCounter].parameter >= EX_TYPE_SENSOR_ENABLED) break;
if (sensorDescriptionCounter == JETI_EX_SENSOR_COUNT ) {
@ -407,24 +404,20 @@ uint8_t sendJetiExBusTelemetry(uint8_t packetID, uint8_t item)
break;
}
}
createExTelemetrieTextMessage(jetiExTelemetryFrame, sensorDescriptionCounter, &jetiExSensors[sensorDescriptionCounter]);
createExBusMessage(jetiExBusTelemetryFrame, jetiExTelemetryFrame, packetID);
requestLoop++;
} else {
if(item == activeSensors) item = 0;
item = createExTelemetrieValueMessage(jetiExTelemetryFrame, item);
createExBusMessage(jetiExBusTelemetryFrame, jetiExTelemetryFrame, packetID);
}
serialWriteBuf(jetiExBusPort, jetiExBusTelemetryFrame, jetiExBusTelemetryFrame[EXBUS_HEADER_MSG_LEN]);
jetiExBusTransceiveState = EXBUS_TRANS_IS_TX_COMPLETED;
return item;
}
#endif // TELEMETRY
#endif // SERIAL_RX