unsigned char getDebugChar(void) { if (!remoteDebugInitialized) { remoteDebugInitialized = 1; debugInit(YOSEMITE_BAUD_115200, YOSEMITE_DATA_8BIT, YOSEMITE_PARITY_NONE, YOSEMITE_STOP_1BIT); } while ((SERIAL_READ(SERIAL_LINE_STATUS) & 0x1) == 0); return SERIAL_READ(SERIAL_RCV_BUFFER); }
void ntshell_execute( ntshell_t *p, int (*func_read)(char *buf, int cnt), int (*func_write)(const char *buf, int cnt), int (*func_cb)(const char *text)) { ntshell_user_data_t user_data; user_data.editor = &(p->editor); user_data.history = &(p->history); user_data.func_read = func_read; user_data.func_write = func_write; user_data.func_cb = func_cb; p->parser.user_data = &user_data; vtparse_init(&(p->parser), parser_callback); text_editor_init(GET_EDITOR(&(p->parser))); text_history_init(GET_HISTORY(&(p->parser))); SUGGEST_INDEX(&(p->parser)) = -1; SERIAL_WRITE(&(p->parser), ">", 1); while(1) { unsigned char ch; SERIAL_READ(&(p->parser), (char *)&ch, sizeof(ch)); vtparse(&(p->parser), &ch, sizeof(ch)); } }
int putDebugChar(unsigned char byte) { if (!remoteDebugInitialized) { remoteDebugInitialized = 1; debugInit(YOSEMITE_BAUD_115200, YOSEMITE_DATA_8BIT, YOSEMITE_PARITY_NONE, YOSEMITE_STOP_1BIT); } while ((SERIAL_READ(SERIAL_LINE_STATUS) & 0x20) == 0); SERIAL_WRITE(SERIAL_SEND_BUFFER, byte); return 1; }
void readValueSerial(char *data, byte size) { byte index = 0; byte timeout = 0; data[0] = '\0'; do { if (SERIAL_AVAILABLE() == 0) { delay(1); timeout++; } else { data[index] = SERIAL_READ(); timeout = 0; index++; } } while ((index == 0 || data[index-1] != ';') && (timeout < 10) && (index < size-1)); data[index] = '\0'; }
int main(void) { //DDRB = 0x00; //DEFINE PORTB INPUT //DDRB |= (1<<0); //int i=0; //char data[50]; //SERIAL_Init(9600,'D',1,8,'R'); //SPI_InitMaster(0,'M',8,'B',2); //NRF_PrintRegister(SETUP_RETR); //NRF_WriteRegister(SETUP_RETR, 0b00000000); //NRF_PrintRegister(SETUP_RETR); //NRF_ReadRegister(SETUP_RETR); /* SERIAL_SendCaracter('>'); while (1) { //PORTB |= (1<<0); //_delay_ms(1000); //PORTB &= ~(1<<0); //_delay_ms(1000); //_delay_ms(1000); data[i] = SERIAL_READ(); SERIAL_SendCaracter(data[i]); if(data[i] == 13){ data[i+1]=0; SERIAL_SendCaracter(10); SERIAL_SendCaracter(13); SERIAL_SendStringLn(data); SERIAL_SendCaracter('>'); i=-1; } i++; } */ DDRB |=(1<<CE); //SET CE TO OUTPUT. DDRB &= ~(1<< DDD2); //SET PD2 TO INPUT PORTD |= (1<<PORTD2);//SET PD2 TO HIGH EICRA |= (1<<ISC10); EIMSK |= (1<<INT0); sei(); SERIAL_Init(9600,'D',1,8,'R'); SPI_InitMaster(0,'M',8,'B',2); char data[1]; NRF_SET_PTX(); SERIAL_SendCaracter('>'); while(1) { NRF_Control(STANBY); NRF_FlushFifo(TX); data[0] = SERIAL_READ(); if(data[0] == 13) { SERIAL_SendStringLn(data[0]); } SERIAL_SendCaracter(data[0]); NRF_LoadTXPayload(data,1); NRF_ActivateTransmission(); _delay_ms(1); } }
void readSerialCommand() { // Check for serial message if (SERIAL_AVAILABLE()) { queryType = SERIAL_READ(); switch (queryType) { case 'A': // Receive roll and pitch rate mode PID readSerialPID(RATE_XAXIS_PID_IDX); readSerialPID(RATE_YAXIS_PID_IDX); rotationSpeedFactor = readFloatSerial(); break; case 'B': // Receive roll/pitch attitude mode PID readSerialPID(ATTITUDE_XAXIS_PID_IDX); readSerialPID(ATTITUDE_YAXIS_PID_IDX); readSerialPID(ATTITUDE_GYRO_XAXIS_PID_IDX); readSerialPID(ATTITUDE_GYRO_YAXIS_PID_IDX); windupGuard = readFloatSerial(); // defaults found in setup() of AeroQuad.pde break; case 'C': // Receive yaw PID readSerialPID(ZAXIS_PID_IDX); readSerialPID(HEADING_HOLD_PID_IDX); headingHoldConfig = readFloatSerial(); break; case 'D': // Altitude hold PID #if defined AltitudeHoldBaro || defined AltitudeHoldRangeFinder readSerialPID(BARO_ALTITUDE_HOLD_PID_IDX); PID[BARO_ALTITUDE_HOLD_PID_IDX].windupGuard = readFloatSerial(); altitudeHoldBump = readFloatSerial(); altitudeHoldPanicStickMovement = readFloatSerial(); minThrottleAdjust = readFloatSerial(); maxThrottleAdjust = readFloatSerial(); #if defined AltitudeHoldBaro baroSmoothFactor = readFloatSerial(); #else readFloatSerial(); #endif readSerialPID(ZDAMPENING_PID_IDX); #endif break; case 'E': // Receive sensor filtering values aref = readFloatSerial(); minArmedThrottle = readFloatSerial(); break; case 'F': // Receive transmitter smoothing values receiverXmitFactor = readFloatSerial(); for(byte channel = XAXIS; channel<LASTCHANNEL; channel++) { receiverSmoothFactor[channel] = readFloatSerial(); } break; case 'G': // Receive transmitter calibration values channelCal = (int)readFloatSerial(); receiverSlope[channelCal] = readFloatSerial(); break; case 'H': // Receive transmitter calibration values channelCal = (int)readFloatSerial(); receiverOffset[channelCal] = readFloatSerial(); break; case 'I': // Initialize EEPROM with default values initializeEEPROM(); // defined in DataStorage.h writeEEPROM(); storeSensorsZeroToEEPROM(); calibrateGyro(); zeroIntegralError(); #ifdef HeadingMagHold initializeMagnetometer(); #endif #ifdef AltitudeHoldBaro initializeBaro(); #endif break; case 'J': // calibrate gyros calibrateGyro(); break; case 'K': // Write accel calibration values accelScaleFactor[XAXIS] = readFloatSerial(); readFloatSerial(); accelScaleFactor[YAXIS] = readFloatSerial(); readFloatSerial(); accelScaleFactor[ZAXIS] = readFloatSerial(); readFloatSerial(); computeAccelBias(); storeSensorsZeroToEEPROM(); break; case 'L': // generate accel bias computeAccelBias(); #if defined(AeroQuadMega_CHR6DM) || defined(APM_OP_CHR6DM) calibrateKinematics(); accelOneG = meterPerSecSec[ZAXIS]; #endif storeSensorsZeroToEEPROM(); break; case 'M': // calibrate magnetometer #ifdef HeadingMagHold magBias[XAXIS] = readFloatSerial(); magBias[YAXIS] = readFloatSerial(); magBias[ZAXIS] = readFloatSerial(); writeEEPROM(); #else skipSerialValues(3); #endif break; case 'N': // battery monitor #ifdef BattMonitor batteryMonitorAlarmVoltage = readFloatSerial(); batteryMonitorThrottleTarget = readFloatSerial(); batteryMonitorGoingDownTime = readFloatSerial(); setBatteryCellVoltageThreshold(batteryMonitorAlarmVoltage); #else skipSerialValues(3); #endif break; case 'O': // define waypoints #ifdef UseGPSNavigator missionNbPoint = readIntegerSerial(); waypoint[missionNbPoint].latitude = readIntegerSerial(); waypoint[missionNbPoint].longitude = readIntegerSerial(); waypoint[missionNbPoint].altitude = readIntegerSerial(); #else for(byte i = 0; i < 4; i++) { readFloatSerial(); } #endif break; case 'P': // read Camera values #ifdef CameraControl cameraMode = readFloatSerial(); servoCenterPitch = readFloatSerial(); servoCenterRoll = readFloatSerial(); servoCenterYaw = readFloatSerial(); mCameraPitch = readFloatSerial(); mCameraRoll = readFloatSerial(); mCameraYaw = readFloatSerial(); servoMinPitch = readFloatSerial(); servoMinRoll = readFloatSerial(); servoMinYaw = readFloatSerial(); servoMaxPitch = readFloatSerial(); servoMaxRoll = readFloatSerial(); servoMaxYaw = readFloatSerial(); #ifdef CameraTXControl servoTXChannels = readFloatSerial(); #endif #else #ifdef CameraTXControl skipSerialValues(14) #else skipSerialValues(13); #endif #endif break; case 'R': //Rotate RotateDrone( readFloatSerial()); break; case 'S': StopMotors(); break; case 'T': ThrottleDrone(readFloatSerial()); break; case 'U': // Range Finder #if defined (AltitudeHoldRangeFinder) maxRangeFinderRange = readFloatSerial(); minRangeFinderRange = readFloatSerial(); #else skipSerialValues(2); #endif break; case 'V': // GPS #if defined (UseGPSNavigator) readSerialPID(GPSROLL_PID_IDX); readSerialPID(GPSPITCH_PID_IDX); readSerialPID(GPSYAW_PID_IDX); writeEEPROM(); #else skipSerialValues(9); #endif break; case 'W': // Write all user configurable values to EEPROM writeEEPROM(); // defined in DataStorage.h zeroIntegralError(); break; case 'X': // Stop sending messages break; case '1': // Calibrate ESCS's by setting Throttle high on all channels validateCalibrateCommand(1); break; case '2': // Calibrate ESC's by setting Throttle low on all channels validateCalibrateCommand(2); break; case '3': // Test ESC calibration if (validateCalibrateCommand(3)) { testCommand = readFloatSerial(); } break; case '4': // Turn off ESC calibration if (validateCalibrateCommand(4)) { calibrateESC = 0; testCommand = 1000; } break; case '5': // Send individual motor commands (motor, command) if (validateCalibrateCommand(5)) { for (byte motor = 0; motor < LASTMOTOR; motor++) { motorConfiguratorCommand[motor] = (int)readFloatSerial(); } } break; case 'Z': // fast telemetry transfer <--- get rid if this? if (readFloatSerial() == 1.0) fastTransfer = ON; else fastTransfer = OFF; break; } } }