コード例 #1
0
ファイル: gps.c プロジェクト: ChrisNisbet01/cleanflight
gpsEnablePassthroughResult_e gpsEnablePassthrough(void)
{
    if (gpsData.state != GPS_RECEIVING_DATA)
        return GPS_PASSTHROUGH_NO_GPS;

    serialPort_t *gpsPassthroughPort = findOpenSerialPort(FUNCTION_GPS_PASSTHROUGH);
    if (gpsPassthroughPort) {

        waitForSerialPortToFinishTransmitting(gpsPassthroughPort);
        serialSetBaudRate(gpsPassthroughPort, serialConfig->gps_passthrough_baudrate);
    } else {
        gpsPassthroughPort = openSerialPort(FUNCTION_GPS_PASSTHROUGH, NULL, serialConfig->gps_passthrough_baudrate, MODE_RXTX, SERIAL_NOT_INVERTED);
        if (!gpsPassthroughPort) {
            return GPS_PASSTHROUGH_NO_SERIAL_PORT;
        }
    }

    LED0_OFF;
    LED1_OFF;

    while(1) {
        if (serialTotalBytesWaiting(gpsPort)) {
            LED0_ON;
            serialWrite(gpsPassthroughPort, serialRead(gpsPort));
            LED0_OFF;
        }
        if (serialTotalBytesWaiting(gpsPassthroughPort)) {
            LED1_ON;
            serialWrite(gpsPort, serialRead(gpsPassthroughPort));
            LED1_OFF;
        }
    }
    return GPS_PASSTHROUGH_ENABLED;
}
コード例 #2
0
ファイル: cc2538-prog.c プロジェクト: 1248/cc2538-prog
int run_command(int fd, uint8_t *data, uint8_t len)
{
    uint8_t inbuf[2];
    uint8_t sum = 0;
    uint8_t *sump = data;
    uint8_t i = len;
    uint8_t packet_len = len+2;

    while(i--)
        sum += *sump++;

    if (1 != serialWrite(fd, &packet_len, 1))
        return 1;
    if (1 != serialWrite(fd, &sum, 1))
        return 1;
    if (len != serialWrite(fd, data, len))
        return 1;
    if (2 != serialRead(fd, inbuf, 2))
        return 1;
    if (0x00 != inbuf[0] || 0xCC != inbuf[1])
    {
        fprintf(stderr, "NAK\n");
        return 1;
    }
    return 0;
}
コード例 #3
0
ファイル: ltm.c プロジェクト: Liquidas/betaflight
static void ltm_initialise_packet(uint8_t ltm_id)
{
    ltm_crc = 0;
    serialWrite(ltmPort, '$');
    serialWrite(ltmPort, 'T');
    serialWrite(ltmPort, ltm_id);
}
コード例 #4
0
ファイル: gps.c プロジェクト: iforce2d/cleanflight
void gpsEnablePassthrough(serialPort_t *gpsPassthroughPort)
{
    waitForSerialPortToFinishTransmitting(gpsState.gpsPort);
    waitForSerialPortToFinishTransmitting(gpsPassthroughPort);

    if(!(gpsState.gpsPort->mode & MODE_TX))
    serialSetMode(gpsState.gpsPort, gpsState.gpsPort->mode | MODE_TX);

    LED0_OFF;
    LED1_OFF;

    char c;
    while(1) {
        if (serialRxBytesWaiting(gpsState.gpsPort)) {
            LED0_ON;
            c = serialRead(gpsState.gpsPort);
            serialWrite(gpsPassthroughPort, c);
            LED0_OFF;
        }
        if (serialRxBytesWaiting(gpsPassthroughPort)) {
            LED1_ON;
            c = serialRead(gpsPassthroughPort);
            serialWrite(gpsState.gpsPort, c);
            LED1_OFF;
        }
    }
}
コード例 #5
0
void stmWriteCommand(serialStruct_t *s, char *msb, char *lsb, char *len, char *data) {
	char startAddress[9];
	char lenPlusData[128];
	char c;

	strncpy(startAddress, msb, sizeof(startAddress));
	strcat(startAddress, lsb);

	sprintf(lenPlusData, "%02x%s", stmHexToChar(len) - 1, data);

	write:
	// send WRITE MEMORY command
	do {
		c = getResults[5];
		serialWrite(s, &c, 1);
		c = 0xff ^ c;
		serialWrite(s, &c, 1);
	} while (!stmWaitAck(s, STM_RETRIES_LONG));

	// send address
	if (!stmWrite(s, startAddress)) {
		putchar('A');
		goto write;
	}

	// send len + data
	if (!stmWrite(s, lenPlusData)) {
		putchar('D');
		goto write;
	}

	putchar('='); fflush(stdout);
}
コード例 #6
0
int DLS::setOutputFilter (int nsamples, int nspikes, int nerrors)
{
    // Request Current Config
    char write_data[] = "s0fi\r\n";
    serialWrite(write_data, sizeof(write_data)/sizeof(write_data[0]));

    // Read Current Config
    char read_data[] = "g0fi+aa+bb+cc\r\n";
    serialRead(read_data);
    //
    // Check for error indicator (@) and parse error value.
    if (read_data[2]=='@') {
        char errcode_str [] = "000";
        sprintf (errcode_str, "%*s", 3, read_data+4);
        return(-1 * atoi (errcode_str));
    }

    char aa_str [] = "aa";
    aa_str[0] = read_data [5];
    aa_str[1] = read_data [6];
    char bb_str [] = "bb";
    bb_str[0] = read_data [8];
    bb_str[1] = read_data [9];
    char cc_str [] = "cc";
    cc_str[0] = read_data [11];
    cc_str[1] = read_data [12];

    if ((nsamples < 0) || (nsamples > 32))
        nsamples = atoi (aa_str);
    if (nspikes < 0)
        nspikes = atoi (bb_str);
    if (nerrors < 0)
        nerrors = atoi (cc_str);

    debug_print("samples %i\n", nsamples);
    debug_print("spikes %i\n", nspikes);
    debug_print("errors %i\n", nerrors);

    if (2*nspikes+nerrors > 0.4 * nsamples) {
        fprintf(stderr, "ERROR: Make sure that (2*nspikes + nerrors) <= nsamples\n");
        nspikes = atoi (bb_str);
        nerrors = atoi (cc_str);
        nsamples = atoi (aa_str);
    }

    char write_data2[] = "s0fi+aa+bb+cc\r\n";
    sprintf(write_data2, "s0fi+%02i+%02i+%02i\r\n",nsamples,nspikes,nerrors);

    serialWrite(write_data2, sizeof(write_data2)/sizeof(write_data[0]));

    int status = rxData();
    if (status < 0)
        printErrorMsg(status);

    return(status);
}
コード例 #7
0
ファイル: setupbluesmirf.c プロジェクト: KoraST/ft_BIU-1
int main(int argc, char *argv[]) {
	SerialPort SP;
	char buf[1025];
	int nr;

	if (argc<1) {
		printf("Usage: setupbluesmirf <device>\n");
		printf("  <device> must be your serial port, e.g, COM3: on Windows, or /dev/ttyS0 on Linux\n");
		return 0;
	}
		
	if (!serialOpenByName(&SP, argv[1])) {
		fprintf(stderr, "Could not open serial port %s\n", argv[1]);
		return 1;
	}
	
	// last parameter is timeout in 1/10 of a second
	if (!serialSetParameters(&SP, 57600, 8, 0, 1, 1)) {
		fprintf(stderr, "Could not modify serial port parameters\n");
		return 1;
	}
	
	nr = serialRead(&SP, 1024, buf);
	
	serialWrite(&SP, 3, "$$$");
	nr = serialRead(&SP, 1024, buf);
	if (nr > 0) {
		buf[nr]=0;
		printf("Received after $$$: %s", buf);
	} else {
		goto cleanup;
	}
	
	serialWrite(&SP, 2, "D\r");
	nr = serialRead(&SP, 1024, buf);
	if (nr > 0) {
		buf[nr]=0;
		printf("Received after D<cr>: %s", buf);
	} else {
		goto cleanup;
	}
	
	serialWrite(&SP, 9, "U,576K,N\r");
	nr = serialRead(&SP, 1024, buf);
	if (nr > 0) {
		buf[nr]=0;
		printf("Received after U,576K,N<cr>: %s", buf);
	} else {
		goto cleanup;
	}	
	
cleanup:
	serialClose(&SP);
	
	return 0;
}
コード例 #8
0
static uint8_t transmitIbusPacket(uint8_t *ibusPacket, size_t payloadLength)
{
    uint16_t checksum = calculateChecksum(ibusPacket, payloadLength + IBUS_CHECKSUM_SIZE);
    for (size_t i = 0; i < payloadLength; i++) {
        serialWrite(ibusSerialPort, ibusPacket[i]);
    }
    serialWrite(ibusSerialPort, checksum & 0xFF);
    serialWrite(ibusSerialPort, checksum >> 8);
    return payloadLength + IBUS_CHECKSUM_SIZE;
}
コード例 #9
0
ファイル: serial.c プロジェクト: jef79m/baseflight
void serialize16(int16_t a)
{
    static uint8_t t;
    t = a;
    serialWrite(core.mainport, t);
    checksum ^= t;
    t = a >> 8 & 0xff;
    serialWrite(core.mainport, t);
    checksum ^= t;
}
コード例 #10
0
ファイル: MegaJoy.c プロジェクト: 555learnwithme555/UnoJoy
// Get a 16 bit value off the serial port by doing two successive reads
//  Assumes that data is being transmitted high byte first
int16_t get16bitValue(int serialIndex){
	int16_t returnValue = 0;
	serialWrite(serialIndex);
	serialIndex++;
	returnValue = serialRead(25);
	
	serialWrite(serialIndex);
	serialIndex++;
	returnValue += serialRead(25) << 8;	
	return returnValue;
}
コード例 #11
0
ファイル: ctrlbox-firmware.c プロジェクト: lijon/ctrlbox
void loop() {
    for(i = 0; i < 6; ++i) {
        int old = accum[i];
        v = analogRead(i);
        v = smooth(v, &accum[i], 100);
        if(v != old) {
            serialWrite(0x80 | i);
            serialWrite(v >> 7);
            serialWrite(v & 0x7F);
            x = 5;
        }
    }
コード例 #12
0
static void serializeFrsky(uint8_t data)
{
    // take care of byte stuffing
    if (data == 0x5e) {
        serialWrite(frskyPort, 0x5d);
        serialWrite(frskyPort, 0x3e);
    } else if (data == 0x5d) {
        serialWrite(frskyPort, 0x5d);
        serialWrite(frskyPort, 0x3d);
    } else
        serialWrite(frskyPort, data);
}
コード例 #13
0
ファイル: stmbootloader.c プロジェクト: 739374663/esc32
int stmWriteLen(serialStruct_t *s, char *data, int len, unsigned char ck) {
	unsigned char c;
	int i;

	for (i = 0; i < len; i++) {
		c = data[i];
		ck ^= c;
		serialWrite(s, (char *)&c, 1);
	}
	serialWrite(s, (char *)&ck, 1);

	return stmWaitAck(s, STM_RETRIES_LONG);
}
コード例 #14
0
ファイル: servo.c プロジェクト: hlfshell/MQP-Project
/**
*void setServo(int servo, int pos)
*@param servo - int, what servo channel are we talking about?
*@param pos - int, the position or the speed of the servo being requested
*@param hf - int, whether or not the servo is in half or full duplex. 0 = half, 1 is full.
*@return void
*
*Sets a motor as half duplex or full duplex. All default as 
*/
void setServo(int servo, int pos, int hf){
	int startBit;

	//If the servo is in full duplex, set it to such.
	if(hf == FULL) servo += 8;
	
	startBit = STARTBIT;

	serialWrite(4, startBit);
	serialWrite(4, servo);
	serialWrite(4, pos);

}
コード例 #15
0
ファイル: level2.c プロジェクト: Feechka/UOBP
void writeEscapedByte(
 unsigned char byte,
 GioEndpoint *gioEndpoint){
 unsigned char escapeChar = ESCAPE_CHAR;
 switch(byte){
  case START_FLAG:
  case END_FLAG:
  case ESCAPE_CHAR:
    serialWrite(gioEndpoint, escapeChar);
  default:
   break;
 }
 serialWrite(gioEndpoint, byte);
}
コード例 #16
0
ファイル: main.cpp プロジェクト: JerryLutor/openLRSngDL
void slaveLoop()
{
  watchdogReset();
  uint32_t now = micros();
  bool     needHop=false;
  switch (state) {
  case 0: // waiting for packet
    if (RF_Mode == Received) {
      Green_LED_ON;
      Red_LED_OFF;
      // got packet
      lastReceived = now;
      lostpkts=0;
      linkQuality = (linkQuality << 1) | 1;

      RF_Mode = Receive;

      spiSendAddress(0x7f); // Send the package read command
      for (int16_t i = 0; i < bind_data.packetSize; i++) {
        rx_buf[i] = spiReadData();
      }

      uint8_t payloadBytes = (rx_buf[0] & 0x3f);
      if (payloadBytes > (bind_data.packetSize - 1)) {
        // INVALID DATA
        payloadBytes = 0;
      }

      // Check if this is a new packet from master and not a resent one
      if ((rx_buf[0] ^ tx_buf[0]) & MASTER_SEQ) {
        tx_buf[0] ^= MASTER_SEQ;
        if (payloadBytes) {
          // DATA FRAME
          if (bind_data.flags & PACKET_MODE) {
            serialWrite(0xf0);
            serialWrite(payloadBytes);
            CRCtx = 0;
          }
          for (uint8_t i=0; i < payloadBytes; i++) {
            serialWrite(rx_buf[1 + i]);
            if ((bind_data.flags & PACKET_MODE) && (bind_data.flags & PACKETCRC_MODE)) {
              CRC16_add(&CRCtx, rx_buf[1 + i]);
            }
          }
          if ((bind_data.flags & PACKET_MODE) && (bind_data.flags & PACKETCRC_MODE)) {
            serialWrite(CRCtx >> 8);
            serialWrite(CRCtx & 0xff);
          }
        }
      }
コード例 #17
0
  __interrupt void ReceiveInterrupt(void)
{
	char rec = UCA0RXBUF;
	if(rec == '1'){
		serialWrite('0');
	}else if(rec == '2'){
		serialWrite('9');
	}else if(rec == '3'){
		serialWrite('0');
	}else if(rec == '4'){
		serialWrite('1');
	}else if(rec == 'a' && alarm_state ==3){
		TA0CCR1 = period>>2;
		alarm_state = 4;
	}
コード例 #18
0
ファイル: serial.c プロジェクト: iforce2d/cleanflight
void serialPrint(serialPort_t *instance, const char *str)
{
    uint8_t ch;
    while ((ch = *(str++)) != 0) {
        serialWrite(instance, ch);
    }
}
コード例 #19
0
void sendPacket(TPacket *packet)
{
	char buffer[PACKET_SIZE];
	int len = serialize(buffer, packet, sizeof(TPacket));

	serialWrite(buffer, len);
}
コード例 #20
0
ファイル: term.c プロジェクト: byu-magicc/BreezySTM32
static void _putc(void *p, char c)
{
    (void)p; // avoid compiler warning about unused variable
    serialWrite(Serial1, c);

    while (!isSerialTransmitBufferEmpty(Serial1));
}
コード例 #21
0
ファイル: cli.c プロジェクト: 739374663/esc32
void cliUsage(cliCommand_t *cmd) {
    serialPrint("usage: ");
    serialPrint(cmd->name);
    serialWrite(' ');
    serialPrint(cmd->params);
    serialPrint("\r\n");
}
コード例 #22
0
ファイル: clSerial.cpp プロジェクト: Ryuk4/crappy
void Camera::serialWrite(char buffer[]){
    clFlushPort(serialRefPtr);
    unsigned int bufferlen= 20;
    unsigned int serialTimeout = 500;
    try{
        checkSerialCom(clSerialWrite(serialRefPtr, buffer, &bufferlen, serialTimeout));
    }catch(string const& error){
        cout << "Write ERROR:" << error << endl;
	serialWrite(buffer);
    }
    char *mybuff= NULL;

    unsigned int numBytes=256;
    mybuff = (char *) malloc(numBytes);
    try{
        checkSerialCom(clSerialRead(serialRefPtr, mybuff, &numBytes, serialTimeout));
    }catch(string const& error){
        free(mybuff);
        cout << "Read ERROR:" << error << endl;
// 	serialWrite(buffer);
	return;
    }
    char temp[8];
    strncpy(temp, mybuff, 8);
    cout << "Camera response:" << temp << endl;
    free(mybuff);
}
コード例 #23
0
ファイル: serial.c プロジェクト: jef79m/baseflight
void serialize32(uint32_t a)
{
    static uint8_t t;
    t = a;
    serialWrite(core.mainport, t);
    checksum ^= t;
    t = a >> 8;
    serialWrite(core.mainport, t);
    checksum ^= t;
    t = a >> 16;
    serialWrite(core.mainport, t);
    checksum ^= t;
    t = a >> 24;
    serialWrite(core.mainport, t);
    checksum ^= t;
}
コード例 #24
0
ファイル: main.c プロジェクト: LaughingLogic/baseflight
// keil/armcc version
int fputc(int c, FILE *f)
{
    // let DMA catch up a bit when using set or dump, we're too fast.
    while (!isSerialTransmitBufferEmpty(core.mainport));
    serialWrite(core.mainport, c);
    return c;
}
コード例 #25
0
// Print the null-terminated string 's' to the blackbox device and return the number of bytes written
int blackboxPrint(const char *s)
{
    int length;
    const uint8_t *pos;

    switch (masterConfig.blackbox_device) {

#ifdef USE_FLASHFS
        case BLACKBOX_DEVICE_FLASH:
            length = strlen(s);
            flashfsWrite((const uint8_t*) s, length, false); // Write asynchronously
        break;
#endif

        case BLACKBOX_DEVICE_SERIAL:
        default:
            pos = (uint8_t*) s;
            while (*pos) {
                serialWrite(blackboxPort, *pos);
                pos++;
            }

            length = pos - (uint8_t*) s;
        break;
    }

    return length;
}
コード例 #26
0
ファイル: mavlink.c プロジェクト: byu-magicc/ROSflight
// implement for mavlink convenience functions
inline void comm_send_ch(mavlink_channel_t chan, uint8_t ch)
{
  if (chan == MAVLINK_COMM_0)
  {
    serialWrite(Serial1, ch);
  }
}
コード例 #27
0
ファイル: OurTOS.c プロジェクト: cbrem/ourtos
static void _debugPrint(uint8_t scheduledTask, int32_t elapsedTime) {
	static uint16_t len;

	/* Print info about which task is currently running */
	len = sprintf(_debugMsgBuf, _debugMsgFmt, scheduledTask, elapsedTime);
	serialWrite(_debugMsgBuf, len);
}
コード例 #28
0
ファイル: blackbox_io.c プロジェクト: DTFUHF/betaflight
// Print the null-terminated string 's' to the blackbox device and return the number of bytes written
int blackboxPrint(const char *s)
{
    int length;
    const uint8_t *pos;

    switch (blackboxConfig()->device) {

#ifdef USE_FLASHFS
        case BLACKBOX_DEVICE_FLASH:
            length = strlen(s);
            flashfsWrite((const uint8_t*) s, length, false); // Write asynchronously
        break;
#endif

#ifdef USE_SDCARD
        case BLACKBOX_DEVICE_SDCARD:
            length = strlen(s);
            afatfs_fwrite(blackboxSDCard.logFile, (const uint8_t*) s, length); // Ignore failures due to buffers filling up
        break;
#endif

        case BLACKBOX_DEVICE_SERIAL:
        default:
            pos = (uint8_t*) s;
            while (*pos) {
                serialWrite(blackboxPort, *pos);
                pos++;
            }

            length = pos - (uint8_t*) s;
        break;
    }

    return length;
}
コード例 #29
0
ファイル: simplebgc.cpp プロジェクト: cvrobot/cradlehead
// Process incoming commands. Call it as frequently as possible, to prevent overrun of serial input buffer.
void simplebgc_process_inqueue() {
    int i; 
	while(sbgc_parser.read_cmd()) {
		SerialCommand &cmd = sbgc_parser.in_cmd;
		
		uint8_t error = 0;
		char tmp[12];
		switch(cmd.id) {
            case SBGC_CMD_GET_ANGLES:
                WOFL_get_angles_t t;
                memcpy(&t, cmd.data, cmd.len);//asume little endin
                WOFL_get_angles_send(t, wofl_parser);
                break;
   
		// Receive realtime data
		case SBGC_CMD_REALTIME_DATA_3:
		case SBGC_CMD_REALTIME_DATA_4:
			error = SBGC_cmd_realtime_data_unpack(rt_data, cmd);
			if(!error) {
				// Extract some usefull data
				/*
                rt_data.imu_angle[ROLL];
                rt_data.target_angle[ROLL];
				rt_data.imu_angle[PITCH];
                rt_data.target_angle[PITCH];
				rt_data.imu_angle[YAW];
                rt_data.target_angle[YAW];
                */
                memcpy(tmp,rt_data.rc_raw_data,12);
                serialXPrint(2,":");
                for(i=0;i<12;i++)
                    serialXWrite(2,tmp[i]);
				serialXWrite(2,'\n');
			} else {
				sbgc_parser.onParseError(error);
			}
			break;
		    default:
		        serialPrint("unparsed command:");
                serialWrite(cmd.id);
		        for(i=0;i<cmd.len;i++)
                    serialWrite(cmd.data[i]);
                serialWrite('\n');
		}
	}

}
コード例 #30
0
ファイル: openbci2ft.c プロジェクト: Cookdj0128/fieldtrip
int serialWriteSlow(SerialPort *SP, int size, void *buffer) {
    int i, retval = 0; 
    for (i=0; i<size; i++) {
        retval += serialWrite(SP, 1, buffer+i);
        usleep(100000);
    }
    return retval;
}