diff --git a/document/device/adc/adc.md b/document/device/adc/adc.md index 32e2736..725f295 100644 --- a/document/device/adc/adc.md +++ b/document/device/adc/adc.md @@ -84,6 +84,20 @@ int number; mr_dev_ioctl(ds, MR_CTL_ADC_GET_CHANNEL, &number); ``` +不依赖ADC接口: + +```c +/* 定义通道编号 */ +#define CHANNEL_NUMBER 5 + +/* 设置通道编号 */ +mr_dev_ioctl(ds, MR_CTL_SET_OFFSET, MR_MAKE_LOCAL(int, CHANNEL_NUMBER)); + +/* 获取通道编号 */ +int number; +mr_dev_ioctl(ds, MR_CTL_GET_OFFSET, &number); +``` + ### 设置/获取通道配置 通道配置: @@ -100,6 +114,17 @@ int state; mr_dev_ioctl(ds, MR_CTL_ADC_GET_CHANNEL_CONFIG, &state); ``` +不依赖ADC接口: + +```c +/* 设置通道配置 */ +mr_dev_ioctl(ds, MR_CTL_SET_CONFIG, MR_MAKE_LOCAL(int, MR_ENABLE)); + +/* 获取通道配置 */ +int state; +mr_dev_ioctl(ds, MR_CTL_GET_CONFIG, &state); +``` + ## 读取ADC设备通道值 ```c diff --git a/document/device/adc/adc_EN.md b/document/device/adc/adc_EN.md index a2b01c4..608fac1 100644 --- a/document/device/adc/adc_EN.md +++ b/document/device/adc/adc_EN.md @@ -87,6 +87,20 @@ int number; mr_dev_ioctl(ds, MR_CTL_ADC_GET_CHANNEL, &number); ``` +Independent of ADC interface: + +```c +/* Define channel number */ +#define CHANNEL_NUMBER 5 + +/* Set channel number */ +mr_dev_ioctl(ds, MR_CTL_SET_OFFSET, MR_MAKE_LOCAL(int, CHANNEL_NUMBER)); + +/* Get channel number */ +int number; +mr_dev_ioctl(ds, MR_CTL_GET_OFFSET, &number); +``` + ### Set/Get Channel Configure Channel configure: @@ -103,6 +117,17 @@ int state; mr_dev_ioctl(ds, MR_CTL_ADC_GET_CHANNEL_CONFIG, &state); ``` +Independent of ADC interface: + +```c +/* Set channel configure */ +mr_dev_ioctl(ds, MR_CTL_SET_CONFIG, MR_MAKE_LOCAL(int, MR_ENABLE)); + +/* Get channel configure */ +int state; +mr_dev_ioctl(ds, MR_CTL_GET_CONFIG, &state); +``` + ## Read ADC Device Channel Value ```c diff --git a/document/device/dac/dac.md b/document/device/dac/dac.md index ff14973..85eac1d 100644 --- a/document/device/dac/dac.md +++ b/document/device/dac/dac.md @@ -84,6 +84,20 @@ int number; mr_dev_ioctl(ds, MR_CTL_DAC_GET_CHANNEL, &number); ``` +不依赖DAC接口: + +```c +/* 定义通道编号 */ +#define CHANNEL_NUMBER 5 + +/* 设置通道编号 */ +mr_dev_ioctl(ds, MR_CTL_SET_OFFSET, MR_MAKE_LOCAL(int, CHANNEL_NUMBER)); + +/* 获取通道编号 */ +int number; +mr_dev_ioctl(ds, MR_CTL_GET_OFFSET, &number); +``` + ### 设置/获取通道配置 通道配置: @@ -100,6 +114,17 @@ int state; mr_dev_ioctl(ds, MR_CTL_DAC_GET_CHANNEL_CONFIG, &state); ``` +不依赖DAC接口: + +```c +/* 设置通道配置 */ +mr_dev_ioctl(ds, MR_CTL_SET_CONFIG, MR_MAKE_LOCAL(int, MR_ENABLE)); + +/* 获取通道配置 */ +int state; +mr_dev_ioctl(ds, MR_CTL_GET_CONFIG, &state); +``` + ## 写入DAC设备通道值 ```c diff --git a/document/device/dac/dac_EN.md b/document/device/dac/dac_EN.md index 51bbdbe..76539c9 100644 --- a/document/device/dac/dac_EN.md +++ b/document/device/dac/dac_EN.md @@ -87,6 +87,20 @@ int number; mr_dev_ioctl(ds, MR_CTL_DAC_GET_CHANNEL, &number); ``` +Independent of DAC interface: + +```c +/* Define channel number */ +#define CHANNEL_NUMBER 5 + +/* Set channel number */ +mr_dev_ioctl(ds, MR_CTL_SET_OFFSET, MR_MAKE_LOCAL(int, CHANNEL_NUMBER)); + +/* Get channel number */ +int number; +mr_dev_ioctl(ds, MR_CTL_GET_OFFSET, &number); +``` + ### Set/Get Channel Configure Channel configure: @@ -103,6 +117,17 @@ int state; mr_dev_ioctl(ds, MR_CTL_DAC_GET_CHANNEL_CONFIG, &state); ``` +Independent of DAC interface: + +```c +/* Set channel status */ +mr_dev_ioctl(ds, MR_CTL_SET_CONFIG, MR_MAKE_LOCAL(int, MR_ENABLE)); + +/* Get channel status */ +int state; +mr_dev_ioctl(ds, MR_CTL_GET_CONFIG, &state); +``` + ## Write DAC Device Channel Value ```c diff --git a/document/device/i2c/i2c.md b/document/device/i2c/i2c.md index 4d2ee47..d7e6964 100644 --- a/document/device/i2c/i2c.md +++ b/document/device/i2c/i2c.md @@ -120,6 +120,18 @@ mr_dev_ioctl(ds, MR_CTL_I2C_SET_CONFIG, &config); mr_dev_ioctl(ds, MR_CTL_I2C_GET_CONFIG, &config); ``` +不依赖I2C接口: + +```c +/* 设置默认配置 */ +int config[] = {100000, 0, 8}; + +/* 设置I2C设备配置 */ +mr_dev_ioctl(ds, MR_CTL_SET_CONFIG, &config); +/* 获取I2C设备配置 */ +mr_dev_ioctl(ds, MR_CTL_GET_CONFIG, &config); +``` + 注: - 如未手动配置,默认配置为: @@ -141,6 +153,17 @@ uint8_t reg; mr_dev_ioctl(ds, MR_CTL_I2C_GET_REG, ®); ``` +不依赖I2C接口: + +```c +/* 设置寄存器值 */ +mr_dev_ioctl(ds, MR_CTL_SET_OFFSET, MR_MAKE_LOCAL(int, 0x12)); + +/* 获取寄存器值 */ +uint8_t reg; +mr_dev_ioctl(ds, MR_CTL_GET_OFFSET, ®); +``` + 注: - 寄存器值仅在主机模式下生效。 @@ -158,6 +181,17 @@ mr_dev_ioctl(ds, MR_CTL_I2C_SET_RD_BUFSZ, &size); mr_dev_ioctl(ds, MR_CTL_I2C_GET_RD_BUFSZ, &size); ``` +不依赖I2C接口: + +```c +size_t size = 256; + +/* 设置读缓冲区大小 */ +mr_dev_ioctl(ds, MR_CTL_SET_RD_BUFSZ, &size); +/* 获取读缓冲区大小 */ +mr_dev_ioctl(ds, MR_CTL_GET_RD_BUFSZ, &size); +``` + 注:如未手动配置,将使用 `Kconfig`中配置的大小(默认为32Byte)。只有在从机模式下才使用读缓冲区。 ### 清空读缓冲区 @@ -166,6 +200,12 @@ mr_dev_ioctl(ds, MR_CTL_I2C_GET_RD_BUFSZ, &size); mr_dev_ioctl(ds, MR_CTL_I2C_CLR_RD_BUF, MR_NULL); ``` +不依赖I2C接口: + +```c +mr_dev_ioctl(ds, MR_CTL_CLR_RD_BUF, MR_NULL); +``` + ### 获取读缓冲区数据大小 ```c @@ -175,6 +215,15 @@ size_t size = 0; mr_dev_ioctl(ds, MR_CTL_I2C_GET_RD_DATASZ, &size); ``` +不依赖I2C接口: + +```c +size_t size = 0; + +/* 获取读缓冲区数据大小 */ +mr_dev_ioctl(ds, MR_CTL_GET_RD_DATASZ, &size); +``` + ### 设置/获取读回调函数 ```c @@ -196,6 +245,27 @@ mr_dev_ioctl(ds, MR_CTL_I2C_SET_RD_CALL, &call); mr_dev_ioctl(ds, MR_CTL_I2C_GET_RD_CALL, &callback); ``` +不依赖I2C接口: + +```c +/* 定义回调函数 */ +int call(int desc, void *args) +{ + /* 获取缓冲区数据大小 */ + ssize_t data_size = *(ssize_t *)args; + + /* 处理中断 */ + + return MR_EOK; +} +int (*callback)(int, void *args); + +/* 设置读回调函数 */ +mr_dev_ioctl(ds, MR_CTL_SET_RD_CALL, &call); +/* 获取读回调函数 */ +mr_dev_ioctl(ds, MR_CTL_GET_RD_CALL, &callback); +``` + ## 读取I2C设备数据 ```c diff --git a/document/device/i2c/i2c_EN.md b/document/device/i2c/i2c_EN.md index bdb5ba7..6ec53ab 100644 --- a/document/device/i2c/i2c_EN.md +++ b/document/device/i2c/i2c_EN.md @@ -124,6 +124,18 @@ mr_dev_ioctl(ds, MR_CTL_I2C_SET_CONFIG, &config); mr_dev_ioctl(ds, MR_CTL_I2C_GET_CONFIG, &config); ``` +Independent of I2C interface: + +```c +/* Set default configuration */ +int config[] = {100000, 0, 8}; + +/* Set I2C device configuration */ +mr_dev_ioctl(ds, MR_CTL_SET_CONFIG, &config); +/* Get I2C device configuration */ +mr_dev_ioctl(ds, MR_CTL_GET_CONFIG, &config); +``` + Note: - If not manually configured, the default configuration is: @@ -147,6 +159,17 @@ uint8_t reg; mr_dev_ioctl(ds, MR_CTL_I2C_GET_REG, ®); ``` +Independent of I2C interface: + +```c +/* Set register value */ +mr_dev_ioctl(ds, MR_CTL_SET_OFFSET, MR_MAKE_LOCAL(int, 0x12)); + +/* Get register value */ +uint8_t reg; +mr_dev_ioctl(ds, MR_CTL_GET_OFFSET, ®); +``` + Note: - The register value only takes effect in master mode. @@ -164,6 +187,17 @@ mr_dev_ioctl(ds, MR_CTL_I2C_SET_RD_BUFSZ, &size); mr_dev_ioctl(ds, MR_CTL_I2C_GET_RD_BUFSZ, &size); ``` +Independent of I2C interface: + +```c +size_t size = 256; + +/* Set read buffer size */ +mr_dev_ioctl(ds, MR_CTL_SET_RD_BUFSZ, &size); +/* Get read buffer size */ +mr_dev_ioctl(ds, MR_CTL_GET_RD_BUFSZ, &size); +``` + Note: If not manually configured, it will use the size configured in `Kconfig` (default 32Byte). The read buffer is only used in slave mode. @@ -173,6 +207,12 @@ used in slave mode. mr_dev_ioctl(ds, MR_CTL_I2C_CLR_RD_BUF, MR_NULL); ``` +Independent of I2C interface: + +```c +mr_dev_ioctl(ds, MR_CTL_CLR_RD_BUF, MR_NULL); +``` + ### Get Read Buffer Data Size ```c @@ -182,6 +222,15 @@ size_t size = 0; mr_dev_ioctl(ds, MR_CTL_I2C_GET_RD_DATASZ, &size); ``` +Independent of I2C interface: + +```c +size_t size = 0; + +/* Get read buffer data size */ +mr_dev_ioctl(ds, MR_CTL_GET_RD_DATASZ, &size); +``` + ### Set/Get Read Callback Function ```c @@ -203,6 +252,27 @@ mr_dev_ioctl(ds, MR_CTL_I2C_SET_RD_CALL, &call); mr_dev_ioctl(ds, MR_CTL_I2C_GET_RD_CALL, &callback); ``` +Independent of I2C interface: + +```c +/* Define callback function */ +int call(int desc, void *args) +{ + /* Get buffer data size */ + ssize_t data_size = *(ssize_t *)args; + + /* Handle interrupt */ + + return MR_EOK; +} +int (*callback)(int, void *args); + +/* Set read callback function */ +mr_dev_ioctl(ds, MR_CTL_SET_RD_CALL, &call); +/* Get read callback function */ +mr_dev_ioctl(ds, MR_CTL_GET_RD_CALL, &callback); +``` + ## Read I2C Device Data ```c diff --git a/document/device/pin/pin.md b/document/device/pin/pin.md index fd62710..bdc0a50 100644 --- a/document/device/pin/pin.md +++ b/document/device/pin/pin.md @@ -96,6 +96,20 @@ int number; mr_dev_ioctl(ds, MR_CTL_PIN_GET_NUMBER, &number); ``` +不依赖PIN接口: + +```c +/* 定义引脚编号 */ +#define PIN_NUMBER 45 + +/* 设置引脚编号 */ +mr_dev_ioctl(ds, MR_CTL_SET_OFFSET, MR_MAKE_LOCAL(int, PIN_NUMBER)); + +/* 获取引脚编号 */ +int number; +mr_dev_ioctl(ds, MR_CTL_GET_OFFSET, &number); +``` + ### 设置引脚模式 #### 引脚模式 @@ -125,6 +139,16 @@ mr_dev_ioctl(ds, MR_CTL_PIN_GET_NUMBER, &number); mr_dev_ioctl(ds, MR_CTL_PIN_SET_MODE, MR_MAKE_LOCAL(int, PIN_MODE)); ``` +不依赖PIN接口: + +```c +/* 定义引脚模式 */ +#define PIN_MODE 1 + +/* 设置引脚模式 */ +mr_dev_ioctl(ds, MR_CTL_SET_CONFIG, MR_MAKE_LOCAL(int, PIN_MODE)); +``` + ### 设置/获取外部中断回调函数 ```c @@ -148,6 +172,29 @@ int (*callback)(int desc, void *args); mr_dev_ioctl(ds, MR_CTL_PIN_GET_EXTI_CALL, &callback); ``` +不依赖PIN接口: + +```c +#define PIN_NUMBER 45 +/* 定义外部中断回调函数 */ +int call(int desc, void *args) +{ + /* 获取引脚编号 */ + ssize_t number = *(ssize_t *)args; + + /* 处理外部中断事件 */ + + return MR_EOK; +} + +/* 设置外部中断回调函数 */ +mr_dev_ioctl(ds, MR_CTL_SET_RD_CALL, call); + +/* 获取外部中断回调函数 */ +int (*callback)(int desc, void *args); +mr_dev_ioctl(ds, MR_CTL_GET_RD_CALL, &callback); +``` + 注: - 设置外部中断模式前需要先配置回调函数,否则将成为无回调中断。 diff --git a/document/device/pin/pin_EN.md b/document/device/pin/pin_EN.md index 92bb0fe..059172f 100644 --- a/document/device/pin/pin_EN.md +++ b/document/device/pin/pin_EN.md @@ -100,6 +100,20 @@ int number; mr_dev_ioctl(ds, MR_CTL_PIN_GET_NUMBER, &number); ``` +Independent of PIN interface: + +```c +/* Define pin number */ +#define PIN_NUMBER 45 + +/* Set pin number */ +mr_dev_ioctl(ds, MR_CTL_SET_OFFSET, MR_MAKE_LOCAL(int, PIN_NUMBER)); + +/* Get pin number */ +int number; +mr_dev_ioctl(ds, MR_CTL_GET_OFFSET, &number); +``` + ### Set Pin Mode #### Pin Mode @@ -129,6 +143,16 @@ And 5 external interrupt modes: mr_dev_ioctl(ds, MR_CTL_PIN_SET_MODE, MR_MAKE_LOCAL(int, PIN_MODE)); ``` +Independent of PIN interface: + +```c +/* Define pin mode */ +#define PIN_MODE 1 + +/* Set pin mode */ +mr_dev_ioctl(ds, MR_CTL_SET_CONFIG, MR_MAKE_LOCAL(int, PIN_MODE)); +``` + ### Set/Get External Interrupt Callback Function ```c @@ -152,6 +176,29 @@ int (*callback)(int desc, void *args); mr_dev_ioctl(ds, MR_CTL_PIN_GET_EXTI_CALL, &callback); ``` +Independent of PIN interface: + +```c +#define PIN_NUMBER 45 +/* Define external interrupt callback function */ +int call(int desc, void *args) +{ + /* Get pin number */ + ssize_t number = *(ssize_t *)args; + + /* Handle external interrupt event */ + + return MR_EOK; +} + +/* Set external interrupt callback function */ +mr_dev_ioctl(ds, MR_CTL_SET_RD_CALL, call); + +/* Get external interrupt callback function */ +int (*callback)(int desc, void *args); +mr_dev_ioctl(ds, MR_CTL_GET_RD_CALL, &callback); +``` + Note: - Before setting the external interrupt mode, you need to configure the callback function, otherwise, it becomes a diff --git a/document/device/serial/serial.md b/document/device/serial/serial.md index fd9daf4..125fa05 100644 --- a/document/device/serial/serial.md +++ b/document/device/serial/serial.md @@ -101,6 +101,18 @@ mr_dev_ioctl(ds, MR_CTL_SERIAL_SET_CONFIG, &config); mr_dev_ioctl(ds, MR_CTL_SERIAL_GET_CONFIG, &config); ``` +不依赖SERIAL接口: + +```c +/* 设置默认配置 */ +int config[] = {115200, 8, 1, 0, 0, 0}; + +/* 设置SERIAL设备配置 */ +mr_dev_ioctl(ds, MR_CTL_SET_CONFIG, &config); +/* 获取SERIAL设备配置 */ +mr_dev_ioctl(ds, MR_CTL_GET_CONFIG, &config); +``` + 注:如未手动配置,默认配置为: - 波特率:`115200` @@ -126,6 +138,22 @@ mr_dev_ioctl(ds, MR_CTL_SERIAL_SET_WR_BUFSZ, &size); mr_dev_ioctl(ds, MR_CTL_SERIAL_GET_WR_BUFSZ, &size); ``` +不依赖SERIAL接口: + +```c +size_t size = 256; + +/* 设置读缓冲区大小 */ +mr_dev_ioctl(ds, MR_CTL_SET_RD_BUFSZ, &size); +/* 获取读缓冲区大小 */ +mr_dev_ioctl(ds, MR_CTL_GET_RD_BUFSZ, &size); + +/* 设置写缓冲区大小 */ +mr_dev_ioctl(ds, MR_CTL_SET_WR_BUFSZ, &size); +/* 获取写缓冲区大小 */ +mr_dev_ioctl(ds, MR_CTL_GET_WR_BUFSZ, &size); +``` + 注:如未手动配置,将使用 `Kconfig`中配置的大小(默认为32Byte)。 ### 清空读/写缓冲区 @@ -135,6 +163,13 @@ mr_dev_ioctl(ds, MR_CTL_SERIAL_CLR_RD_BUF, MR_NULL); mr_dev_ioctl(ds, MR_CTL_SERIAL_CLR_WR_BUF, MR_NULL); ``` +不依赖SERIAL接口: + +```c +mr_dev_ioctl(ds, MR_CTL_CLR_RD_BUF, MR_NULL); +mr_dev_ioctl(ds, MR_CTL_CLR_WR_BUF, MR_NULL); +``` + ### 获取读/写缓冲区数据大小 ```c @@ -147,6 +182,18 @@ mr_dev_ioctl(ds, MR_CTL_SERIAL_GET_RD_DATASZ, &size); mr_dev_ioctl(ds, MR_CTL_SERIAL_GET_WR_DATASZ, &size); ``` +不依赖SERIAL接口: + +```c +size_t size = 0; + +/* 获取读缓冲区数据大小 */ +mr_dev_ioctl(ds, MR_CTL_GET_RD_DATASZ, &size); + +/* 获取写缓冲区数据大小 */ +mr_dev_ioctl(ds, MR_CTL_GET_WR_DATASZ, &size); +``` + ### 设置/获取读/写回调函数 ```c @@ -173,6 +220,32 @@ mr_dev_ioctl(ds, MR_CTL_SERIAL_SET_WR_CALL, &call); mr_dev_ioctl(ds, MR_CTL_SERIAL_GET_WR_CALL, &callback); ``` +不依赖SERIAL接口: + +```c +/* 定义回调函数 */ +int call(int desc, void *args) +{ + /* 获取缓冲区数据大小 */ + ssize_t data_size = *(ssize_t *)args; + + /* 处理中断 */ + + return MR_EOK; +} +int (*callback)(int, void *args); + +/* 设置读回调函数 */ +mr_dev_ioctl(ds, MR_CTL_SET_RD_CALL, &call); +/* 获取读回调函数 */ +mr_dev_ioctl(ds, MR_CTL_GET_RD_CALL, &callback); + +/* 设置写回调函数 */ +mr_dev_ioctl(ds, MR_CTL_SET_WR_CALL, &call); +/* 获取写回调函数 */ +mr_dev_ioctl(ds, MR_CTL_GET_WR_CALL, &callback); +``` + ## 读取SERIAL设备数据 ```c diff --git a/document/device/serial/serial_EN.md b/document/device/serial/serial_EN.md index e7f5bb4..b22f7d3 100644 --- a/document/device/serial/serial_EN.md +++ b/document/device/serial/serial_EN.md @@ -104,6 +104,19 @@ mr_dev_ioctl(ds, MR_CTL_SERIAL_SET_CONFIG, &config); mr_dev_ioctl(ds, MR_CTL_SERIAL_GET_CONFIG, &config); ``` +Independent of SERIAL interface: + +```c +/* Set default configuration */ +int config[] = {115200, 8, 1, 0, 0, 0}; + +/* Set SERIAL device configuration */ +mr_dev_ioctl(ds, MR_CTL_SET_CONFIG, &config); + +/* Get SERIAL device configuration */ +mr_dev_ioctl(ds, MR_CTL_GET_CONFIG, &config); +``` + Note: If not configured manually, the default configuration is: - Baud rate: `115200` @@ -131,6 +144,24 @@ mr_dev_ioctl(ds, MR_CTL_SERIAL_SET_WR_BUFSZ, &size); mr_dev_ioctl(ds, MR_CTL_SERIAL_GET_WR_BUFSZ, &size); ``` +Independent of SERIAL interface: + +```c +size_t size = 256; + +/* Set read buffer size */ +mr_dev_ioctl(ds, MR_CTL_SET_RD_BUFSZ, &size); + +/* Get read buffer size */ +mr_dev_ioctl(ds, MR_CTL_GET_RD_BUFSZ, &size); + +/* Set write buffer size */ +mr_dev_ioctl(ds, MR_CTL_SET_WR_BUFSZ, &size); + +/* Get write buffer size */ +mr_dev_ioctl(ds, MR_CTL_GET_WR_BUFSZ, &size); +``` + Note: If not configured manually, the size configured in `Kconfig` will be used (default is 32Byte). ### Clear Read/Write Buffer @@ -140,6 +171,13 @@ mr_dev_ioctl(ds, MR_CTL_SERIAL_CLR_RD_BUF, MR_NULL); mr_dev_ioctl(ds, MR_CTL_SERIAL_CLR_WR_BUF, MR_NULL); ``` +Independent of SERIAL interface: + +```c +mr_dev_ioctl(ds, MR_CTL_CLR_RD_BUF, MR_NULL); +mr_dev_ioctl(ds, MR_CTL_CLR_WR_BUF, MR_NULL); +``` + ### Get Read/Write Buffer Data Size ```c @@ -152,6 +190,18 @@ mr_dev_ioctl(ds, MR_CTL_SERIAL_GET_RD_DATASZ, &size); mr_dev_ioctl(ds, MR_CTL_SERIAL_GET_WR_DATASZ, &size); ``` +Independent of SERIAL interface: + +```c +size_t size = 0; + +/* Get read buffer data size */ +mr_dev_ioctl(ds, MR_CTL_GET_RD_DATASZ, &size); + +/* Get write buffer data size */ +mr_dev_ioctl(ds, MR_CTL_GET_WR_DATASZ, &size); +``` + ### Set/Get Read/Write Callback Function ```c @@ -180,6 +230,34 @@ mr_dev_ioctl(ds, MR_CTL_SERIAL_SET_WR_CALL, &call); mr_dev_ioctl(ds, MR_CTL_SERIAL_GET_WR_CALL, &callback); ``` +Independent of SERIAL interface: + +```c +/* Define callback function */ +int call(int desc, void *args) +{ + /* Get buffer data size */ + ssize_t data_size = *(ssize_t *)args; + + /* Handle interrupt */ + + return MR_EOK; +} +int (*callback)(int, void *args); + +/* Set read callback function */ +mr_dev_ioctl(ds, MR_CTL_SET_RD_CALL, &call); + +/* Get read callback function */ +mr_dev_ioctl(ds, MR_CTL_GET_RD_CALL, &callback); + +/* Set write callback function */ +mr_dev_ioctl(ds, MR_CTL_SET_WR_CALL, &call); + +/* Get write callback function */ +mr_dev_ioctl(ds, MR_CTL_GET_WR_CALL, &callback); +``` + ## Read Data from SERIAL Device ```c diff --git a/document/device/spi/spi.md b/document/device/spi/spi.md index 6e427d5..bfcffd5 100644 --- a/document/device/spi/spi.md +++ b/document/device/spi/spi.md @@ -126,6 +126,18 @@ mr_dev_ioctl(ds, MR_CTL_SPI_SET_CONFIG, &config); mr_dev_ioctl(ds, MR_CTL_SPI_GET_CONFIG, &config); ``` +不依赖SPI接口: + +```c +/* 设置默认配置 */ +int config[] = {3000000, 0, 0, 8, 1, 8}; + +/* 设置SPI设备配置 */ +mr_dev_ioctl(ds, MR_CTL_SET_CONFIG, &config); +/* 获取SPI设备配置 */ +mr_dev_ioctl(ds, MR_CTL_GET_CONFIG, &config); +``` + 注: - 如未手动配置,默认配置为: @@ -150,6 +162,17 @@ uint8_t reg; mr_dev_ioctl(ds, MR_CTL_SPI_GET_REG, ®); ``` +不依赖SPI接口: + +```c +/* 设置寄存器值 */ +mr_dev_ioctl(ds, MR_CTL_SET_OFFSET, MR_MAKE_LOCAL(int, 0x12)); + +/* 获取寄存器值 */ +uint8_t reg; +mr_dev_ioctl(ds, MR_CTL_GET_OFFSET, ®); +``` + 注: - 寄存器值仅在主机模式下生效。 @@ -167,6 +190,17 @@ mr_dev_ioctl(ds, MR_CTL_SPI_SET_RD_BUFSZ, &size); mr_dev_ioctl(ds, MR_CTL_SPI_GET_RD_BUFSZ, &size); ``` +不依赖SPI接口: + +```c +size_t size = 256; + +/* 设置读缓冲区大小 */ +mr_dev_ioctl(ds, MR_CTL_SET_RD_BUFSZ, &size); +/* 获取读缓冲区大小 */ +mr_dev_ioctl(ds, MR_CTL_GET_RD_BUFSZ, &size); +``` + 注:如未手动配置,将使用 `Kconfig`中配置的大小(默认为32Byte)。只有在从机模式下才使用读缓冲区。 ### 清空读缓冲区 @@ -175,6 +209,12 @@ mr_dev_ioctl(ds, MR_CTL_SPI_GET_RD_BUFSZ, &size); mr_dev_ioctl(ds, MR_CTL_SPI_CLR_RD_BUF, MR_NULL); ``` +不依赖SPI接口: + +```c +mr_dev_ioctl(ds, MR_CTL_CLR_RD_BUF, MR_NULL); +``` + ### 获取读缓冲区数据大小 ```c @@ -184,6 +224,15 @@ size_t size = 0; mr_dev_ioctl(ds, MR_CTL_SPI_GET_RD_DATASZ, &size); ``` +不依赖SPI接口: + +```c +size_t size = 0; + +/* 获取读缓冲区数据大小 */ +mr_dev_ioctl(ds, MR_CTL_GET_RD_DATASZ, &size); +``` + ### 设置/获取读回调函数 ```c @@ -205,6 +254,27 @@ mr_dev_ioctl(ds, MR_CTL_SPI_SET_RD_CALL, &call); mr_dev_ioctl(ds, MR_CTL_SPI_GET_RD_CALL, &callback); ``` +不依赖SPI接口: + +```c +/* 定义回调函数 */ +int call(int desc, void *args) +{ + /* 获取缓冲区数据大小 */ + ssize_t data_size = *(ssize_t *)args; + + /* 处理中断 */ + + return MR_EOK; +} +int (*callback)(int, void *args); + +/* 设置读回调函数 */ +mr_dev_ioctl(ds, MR_CTL_SET_RD_CALL, &call); +/* 获取读回调函数 */ +mr_dev_ioctl(ds, MR_CTL_GET_RD_CALL, &callback); +``` + ### 全双工传输 ```c @@ -226,6 +296,27 @@ if (size < 0) } ``` +不依赖SPI接口: + +```c +/* 定义传输结构体 */ +uint8_t buf[] = {0x01, 0x02, 0x03, 0x04}; +struct +{ + void *rd_buf; + const void *wr_buf; + size_t size; +} transfer = {buf, buf, sizeof(buf)}; + +/* 全双工传输 */ +ssize_t size = mr_dev_ioctl(ds, (0x01 << 8), &transfer); +/* 是否传输成功 */ +if (size < 0) +{ + +} +``` + ## 读取SPI设备数据 ```c diff --git a/document/device/spi/spi_EN.md b/document/device/spi/spi_EN.md index 83e81cc..6d6d636 100644 --- a/document/device/spi/spi_EN.md +++ b/document/device/spi/spi_EN.md @@ -130,6 +130,19 @@ mr_dev_ioctl(ds, MR_CTL_SPI_SET_CONFIG, &config); mr_dev_ioctl(ds, MR_CTL_SPI_GET_CONFIG, &config); ``` +Independent of SPI interface: + +```c +/* Set default configuration */ +int config[] = {3000000, 0, 0, 8, 1, 8}; + +/* Set SPI device configuration */ +mr_dev_ioctl(ds, MR_CTL_SET_CONFIG, &config); + +/* Get SPI device configuration */ +mr_dev_ioctl(ds, MR_CTL_GET_CONFIG, &config); +``` + Note: - If not configured manually, the default configuration is: @@ -156,6 +169,17 @@ uint8_t reg; mr_dev_ioctl(ds, MR_CTL_SPI_GET_REG, ®); ``` +Independent of SPI interface: + +```c +/* Set register value */ +mr_dev_ioctl(ds, MR_CTL_SPI_SET_REG, MR_MAKE_LOCAL(int, 0x12)); + +/* Get register value */ +uint8_t reg; +mr_dev_ioctl(ds, MR_CTL_SPI_GET_REG, ®); +``` + Note: - The register value is only effective in master mode. @@ -174,6 +198,18 @@ mr_dev_ioctl(ds, MR_CTL_SPI_SET_RD_BUFSZ, &size); mr_dev_ioctl(ds, MR_CTL_SPI_GET_RD_BUFSZ, &size); ``` +Independent of SPI interface: + +```c +size_t size = 256; + +/* Set read buffer size */ +mr_dev_ioctl(ds, MR_CTL_SET_RD_BUFSZ, &size); + +/* Get read buffer size */ +mr_dev_ioctl(ds, MR_CTL_GET_RD_BUFSZ, &size); +``` + Note: If not set manually, it will use the size configured in `Kconfig` (default 32Byte). The read buffer is only used in slave mode. @@ -183,6 +219,12 @@ in slave mode. mr_dev_ioctl(ds, MR_CTL_SPI_CLR_RD_BUF, MR_NULL); ``` +Independent of SPI interface: + +```c +mr_dev_ioctl(ds, MR_CTL_CLR_RD_BUF, MR_NULL); +``` + ### Get Read Buffer Data Size ```c @@ -192,6 +234,15 @@ size_t size = 0; mr_dev_ioctl(ds, MR_CTL_SPI_GET_RD_DATASZ, &size); ``` +Independent of SPI interface: + +```c +size_t size = 0; + +/* Get read buffer data size */ +mr_dev_ioctl(ds, MR_CTL_GET_RD_DATASZ, &size); +``` + ### Set/Get Read Callback Function ```c @@ -214,6 +265,28 @@ mr_dev_ioctl(ds, MR_CTL_SPI_SET_RD_CALL, &call); mr_dev_ioctl(ds, MR_CTL_SPI_GET_RD_CALL, &callback); ``` +Independent of SPI interface: + +```c +/* Define callback function */ +int call(int desc, void *args) +{ + /* Get buffer data size */ + ssize_t data_size = *(ssize_t *)args; + + /* Handle interrupt */ + + return MR_EOK; +} +int (*callback)(int, void *args); + +/* Set read callback function */ +mr_dev_ioctl(ds, MR_CTL_SET_RD_CALL, &call); + +/* Get read callback function */ +mr_dev_ioctl(ds, MR_CTL_GET_RD_CALL, &callback); +``` + ### Full-Duplex Transmission ```c @@ -236,6 +309,28 @@ if (size < 0) } ``` +Independent of SPI interface: + +```c +/* Define transfer structure */ +uint8_t buf[] = {0x01, 0x02, 0x03, 0x04}; +struct +{ + void *rd_buf; + const void *wr_buf; + size_t size; +} transfer = {buf, buf, sizeof(buf)}; + +/* Full-duplex transmission */ +ssize_t size = mr_dev_ioctl(ds, (0x01 << 8), &transfer); + +/* Check if transmission succeeded */ +if (size < 0) +{ + +} +``` + ## Read SPI Device Data ```c diff --git a/document/device/timer/timer.md b/document/device/timer/timer.md index 3b2cc22..2d40320 100644 --- a/document/device/timer/timer.md +++ b/document/device/timer/timer.md @@ -85,6 +85,20 @@ int mode; mr_dev_ioctl(ds, MR_CTL_TIMER_GET_MODE, &mode); ``` +不依赖TIMER接口: + +```c +/* 定义TIMER设备模式 */ +#define TIMER_MODE 1 + +/* 设置TIMER设备模式 */ +mr_dev_ioctl(ds, MR_CTL_SET_CONFIG, MR_MAKE_LOCAL(int, TIMER_MODE)); + +/* 获取TIMER设备模式 */ +int mode; +mr_dev_ioctl(ds, MR_CTL_GET_CONFIG, &mode); +``` + 注:如未手动配置,默认配置为: - 模式:`MR_TIMER_MODE_PERIOD` @@ -107,6 +121,24 @@ mr_dev_ioctl(ds, MR_CTL_TIMER_SET_TIMEOUT_CALL, &call); mr_dev_ioctl(ds, MR_CTL_TIMER_GET_TIMEOUT_CALL, &callback); ``` +不依赖TIMER接口: + +```c +/* 定义回调函数 */ +int call(int desc, void *args) +{ + /* 处理中断 */ + + return MR_EOK; +} +int (*callback)(int, void *args); + +/* 设置超时回调函数 */ +mr_dev_ioctl(ds, MR_CTL_SET_RD_CALL, &call); +/* 获取超时回调函数 */ +mr_dev_ioctl(ds, MR_CTL_GET_RD_CALL, &callback); +``` + ## 读取TIMER设备运行时间 ```c diff --git a/document/device/timer/timer_EN.md b/document/device/timer/timer_EN.md index c80868f..6bb6eec 100644 --- a/document/device/timer/timer_EN.md +++ b/document/device/timer/timer_EN.md @@ -87,6 +87,20 @@ int mode; mr_dev_ioctl(ds, MR_CTL_TIMER_GET_MODE, &mode); ``` +Independent of TIMER interface: + +```c +/* Define TIMER device mode */ +#define TIMER_MODE 1 + +/* Set TIMER device mode */ +mr_dev_ioctl(ds, MR_CTL_SET_CONFIG, MR_MAKE_LOCAL(int, TIMER_MODE)); + +/* Get TIMER device mode */ +int mode; +mr_dev_ioctl(ds, MR_CTL_GET_CONFIG, &mode); +``` + Note: The default configuration is: - Mode: `MR_TIMER_MODE_PERIOD` if not manually configured. @@ -109,6 +123,24 @@ mr_dev_ioctl(ds, MR_CTL_TIMER_SET_TIMEOUT_CALL, &call); mr_dev_ioctl(ds, MR_CTL_TIMER_GET_TIMEOUT_CALL, &callback); ``` +Independent of TIMER interface: + +```c +/* Define callback function */ +int call(int desc, void *args) +{ + /* Handle interrupt */ + + return MR_EOK; +} +int (*callback)(int, void *args); + +/* Set timeout callback function */ +mr_dev_ioctl(ds, MR_CTL_SET_RD_CALL, &call); +/* Get timeout callback function */ +mr_dev_ioctl(ds, MR_CTL_GET_RD_CALL, &callback); +``` + ## Read Running Time of TIMER Device ```c