static rt_size_t wrtnode2r_spi_bridge_write(rt_device_t dev, rt_off_t pos, const void* buffer, rt_size_t size) { return rt_ringbuffer_put(&spi_bridge.write_buf, buffer, size); }
/** * This function will handle cdc bulk out endpoint request. * * @param func the usb function object. * @param size request size. * * @return RT_EOK. */ static rt_err_t _ep_out_handler(ufunction_t func, rt_size_t size) { rt_uint32_t level; struct vcom *data; RT_ASSERT(func != RT_NULL); RT_DEBUG_LOG(RT_DEBUG_USB, ("_ep_out_handler %d\n", size)); data = (struct vcom*)func->user_data; /* receive data from USB VCOM */ level = rt_hw_interrupt_disable(); rt_ringbuffer_put(&data->rx_ringbuffer, data->ep_out->buffer, size); rt_hw_interrupt_enable(level); /* notify receive data */ rt_hw_serial_isr(&data->serial); data->ep_out->request.buffer = data->ep_out->buffer; data->ep_out->request.size = EP_MAXPACKET(data->ep_out); data->ep_out->request.req_type = UIO_REQUEST_READ_MOST; rt_usbd_io_request(func->device, data->ep_out, &data->ep_out->request); return RT_EOK; }
/* send telnet option to remote */ static void send_option_to_client(struct telnet_session* telnet, rt_uint8_t option, rt_uint8_t value) { rt_uint8_t optbuf[4]; optbuf[0] = TELNET_IAC; optbuf[1] = option; optbuf[2] = value; optbuf[3] = 0; rt_mutex_take(telnet->tx_ringbuffer_lock, RT_WAITING_FOREVER); rt_ringbuffer_put(&telnet->tx_ringbuffer, optbuf, 3); rt_mutex_release(telnet->tx_ringbuffer_lock); send_to_client(telnet); }
/** * This function will handle cdc bulk out endpoint request. * * @param device the usb device object. * @param size request size. * * @return RT_EOK. */ static rt_err_t _ep_out_handler(udevice_t device, rt_size_t size) { rt_uint32_t level; RT_ASSERT(device != RT_NULL); /* receive data from USB VCOM */ level = rt_hw_interrupt_disable(); rt_ringbuffer_put(&rx_ringbuffer, ep_out->buffer, size); rt_hw_interrupt_enable(level); /* notify receive data */ rt_hw_serial_isr(&vcom_serial); dcd_ep_read(device->dcd, ep_out, ep_out->buffer, ep_out->ep_desc->wMaxPacketSize); return RT_EOK; }
/******************************************************************************* * Function Name : EP3_OUT_Callback * Description : * Input : None. * Output : None. * Return : None. *******************************************************************************/ void EP3_OUT_Callback(void) { rt_uint32_t level; rt_uint16_t size; /* receive data from USB VCOM */ level = rt_hw_interrupt_disable(); size = USB_SIL_Read(EP3_OUT, rx_buf); rt_ringbuffer_put(&rx_ringbuffer, rx_buf, size); rt_hw_interrupt_enable(level); /* Enable the receive of data on EP3 */ SetEPRxValid(ENDP3); /* notify receive data */ rt_hw_serial_isr(&vcom_serial); //return RT_EOK; }