void writeHeader() { #if defined(RTCLOCK) f_puts("Date,Time,", &g_oLogFile); #else f_puts("Time,", &g_oLogFile); #endif #if defined(FRSKY) #if !defined(CPUARM) f_puts("Buffer,RX,TX,A1,A2,", &g_oLogFile); #if defined(FRSKY_HUB) if (IS_USR_PROTO_FRSKY_HUB()) { f_puts("GPS Date,GPS Time,Long,Lat,Course,GPS Speed(kts),GPS Alt,Baro Alt(", &g_oLogFile); f_puts(TELEMETRY_BARO_ALT_UNIT, &g_oLogFile); f_puts("),Vertical Speed,Air Speed(kts),Temp1,Temp2,RPM,Fuel," TELEMETRY_CELLS_LABEL "Current,Consumption,Vfas,AccelX,AccelY,AccelZ,", &g_oLogFile); } #endif #if defined(WS_HOW_HIGH) if (IS_USR_PROTO_WS_HOW_HIGH()) { f_puts("WSHH Alt,", &g_oLogFile); } #endif #endif #if defined(CPUARM) char label[TELEM_LABEL_LEN+7]; for (int i=0; i<MAX_SENSORS; i++) { TelemetrySensor & sensor = g_model.telemetrySensors[i]; if (sensor.logs) { memset(label, 0, sizeof(label)); zchar2str(label, sensor.label, TELEM_LABEL_LEN); if (sensor.unit != UNIT_RAW && sensor.unit != UNIT_GPS && sensor.unit != UNIT_DATETIME) { strcat(label, "("); strncat(label, STR_VTELEMUNIT+1+3*sensor.unit, 3); strcat(label, ")"); } strcat(label, ","); f_puts(label, &g_oLogFile); } } #endif #endif #if defined(PCBTARANIS) for (uint8_t i=1; i<NUM_STICKS+NUM_POTS+1; i++) { const char * p = STR_VSRCRAW + i * STR_VSRCRAW[0] + 2; for (uint8_t j=0; j<STR_VSRCRAW[0]-1; ++j) { if (!*p) break; f_putc(*p, &g_oLogFile); ++p; } f_putc(',', &g_oLogFile); } f_puts("SA,SB,SC,SD,SE,SF,SG,SH\n", &g_oLogFile); #else f_puts("Rud,Ele,Thr,Ail,P1,P2,P3,THR,RUD,ELE,3POS,AIL,GEA,TRN\n", &g_oLogFile); #endif }
const char * zchar2string(const char * zstring, int size) { if (size > (int)sizeof(_zchar2stringResult) ) { return 0; } zchar2str(_zchar2stringResult, zstring, size); return _zchar2stringResult; }
/*luadoc @function getFlightMode(mode) Return flight mode data. @param mode (number) flight mode number to return (0 - 8). If mode parameter is not specified (or contains invalid value), then the current flight mode data is returned. @retval multiple returns 2 values: * (number) (current) flight mode number (0 - 8) * (string) (current) flight mode name @status current Introduced in 2.1.7 */ static int luaGetFlightMode(lua_State *L) { int mode = luaL_optinteger(L, 1, -1); if (mode < 0 || mode >= MAX_FLIGHT_MODES) { mode = mixerCurrentFlightMode; } lua_pushnumber(L, mode); char name[sizeof(g_model.flightModeData[0].name)+1]; zchar2str(name, g_model.flightModeData[mode].name, sizeof(g_model.flightModeData[0].name)); lua_pushstring(L, name); return 2; }
/** Return field data for a given field name */ bool luaFindFieldByName(const char * name, LuaField & field, unsigned int flags=0) { // TODO better search method (binary lookup) for (unsigned int n=0; n<DIM(luaSingleFields); ++n) { if (!strcmp(name, luaSingleFields[n].name)) { field.id = luaSingleFields[n].id; if (flags & FIND_FIELD_DESC) { strncpy(field.desc, luaSingleFields[n].desc, sizeof(field.desc)-1); field.desc[sizeof(field.desc)-1] = '\0'; } else { field.desc[0] = '\0'; } return true; } } // search in multiples unsigned int len = strlen(name); for (unsigned int n=0; n<DIM(luaMultipleFields); ++n) { const char * fieldName = luaMultipleFields[n].name; unsigned int fieldLen = strlen(fieldName); if (!strncmp(name, fieldName, fieldLen)) { unsigned int index; if (len == fieldLen+1 && isdigit(name[fieldLen])) { index = name[fieldLen] - '1'; } else if (len == fieldLen+2 && isdigit(name[fieldLen]) && isdigit(name[fieldLen+1])) { index = 10 * (name[fieldLen] - '0') + (name[fieldLen+1] - '1'); } else { continue; } if (index < luaMultipleFields[n].count) { field.id = luaMultipleFields[n].id + index; if (flags & FIND_FIELD_DESC) { snprintf(field.desc, sizeof(field.desc)-1, luaMultipleFields[n].desc, index+1); field.desc[sizeof(field.desc)-1] = '\0'; } else { field.desc[0] = '\0'; } return true; } } } // search in telemetry field.desc[0] = '\0'; for (int i=0; i<MAX_SENSORS; i++) { if (isTelemetryFieldAvailable(i)) { char sensorName[TELEM_LABEL_LEN+1]; int len = zchar2str(sensorName, g_model.telemetrySensors[i].label, TELEM_LABEL_LEN); if (!strncmp(sensorName, name, len)) { if (name[len] == '\0') { field.id = MIXSRC_FIRST_TELEM + 3*i; field.desc[0] = '\0'; return true; } else if (name[len] == '-' && name[len+1] == '\0') { field.id = MIXSRC_FIRST_TELEM + 3*i + 1; field.desc[0] = '\0'; return true; } else if (name[len] == '+' && name[len+1] == '\0') { field.id = MIXSRC_FIRST_TELEM + 3*i + 2; field.desc[0] = '\0'; return true; } } } } return false; // not found }
const char * OpenTxSimulator::getPhaseName(unsigned int phase) { static char buff[sizeof(g_model.flightModeData[0].name)+1]; zchar2str(buff, g_model.flightModeData[phase].name, sizeof(g_model.flightModeData[0].name)); return buff; }