AT!GSTATUS
时间: 2023-08-28 22:11:50 浏览: 33
AT!GSTATUS是一种常用的AT指令,用于查询设备的网络状态和信息。发送这个指令后,设备将返回一个响应,其中包含有关当前网络连接状态、信号强度、运营商信息等的详细信息。
以下是一个可能的响应示例:
- !GSTATUS: Current Time: 1970/01/01 00:00:00
Modem Status: Online
RSSI: -70 dBm
Signal Quality: Excellent
Service: Full Service
Current Operator: China Mobile
Current RAT: LTE CAT-M1
这个响应提供了当前时间、调制解调器状态、接收信号强度指示(RSSI)、信号质量、服务状态、当前运营商和当前网络类型等信息。
请注意,具体的响应内容可能因设备和网络环境而异。您可以通过在移动设备上使用串口终端应用程序(如串口助手)发送AT!GSTATUS指令,并查看返回的响应以获取设备的网络状态和信息。
相关问题
STM32 驱动APDS9960的代码
你好,以下是 STM32 驱动 APDS996 的代码:
#include "stm32f10x.h"
#include "i2c.h"
#include "apds996.h"
void APDS996_Init(void)
{
I2C_WriteByte(APDS996_I2C_ADDR, APDS996_ENABLE, x00); // 关闭所有功能
I2C_WriteByte(APDS996_I2C_ADDR, APDS996_ATIME, DEFAULT_ATIME); // 设置 ADC 的采样时间
I2C_WriteByte(APDS996_I2C_ADDR, APDS996_WTIME, DEFAULT_WTIME); // 设置等待时间
I2C_WriteByte(APDS996_I2C_ADDR, APDS996_PPULSE, DEFAULT_PROX_PPULSE); // 设置近距离探测器的脉冲数
I2C_WriteByte(APDS996_I2C_ADDR, APDS996_POFFSET_UR, DEFAULT_POFFSET_UR); // 设置近距离探测器的偏移量
I2C_WriteByte(APDS996_I2C_ADDR, APDS996_POFFSET_DL, DEFAULT_POFFSET_DL);
I2C_WriteByte(APDS996_I2C_ADDR, APDS996_CONFIG1, DEFAULT_CONFIG1); // 设置配置寄存器 1
I2C_WriteByte(APDS996_I2C_ADDR, APDS996_PPULSE, DEFAULT_PPULSE); // 设置脉冲数
I2C_WriteByte(APDS996_I2C_ADDR, APDS996_CONTROL, DEFAULT_CONTROL); // 设置控制寄存器
I2C_WriteByte(APDS996_I2C_ADDR, APDS996_CONFIG2, DEFAULT_CONFIG2); // 设置配置寄存器 2
I2C_WriteByte(APDS996_I2C_ADDR, APDS996_ID, DEFAULT_ID); // 设置 ID 寄存器
I2C_WriteByte(APDS996_I2C_ADDR, APDS996_ENABLE, DEFAULT_ENABLE); // 开启所有功能
}
uint8_t APDS996_ReadID(void)
{
return I2C_ReadByte(APDS996_I2C_ADDR, APDS996_ID);
}
void APDS996_EnableGestureSensor(void)
{
uint8_t val;
I2C_WriteByte(APDS996_I2C_ADDR, APDS996_WTIME, xFF); // 设置等待时间
I2C_WriteByte(APDS996_I2C_ADDR, APDS996_PPULSE, DEFAULT_GESTURE_PPULSE); // 设置脉冲数
I2C_WriteByte(APDS996_I2C_ADDR, APDS996_GCONF1, x60); // 设置手势识别的配置寄存器 1
APDS996_SetGestureGain(DEFAULT_GESTURE_GAIN); // 设置手势识别的增益
APDS996_SetGestureLEDDrive(DEFAULT_GESTURE_LED_DRIVE); // 设置手势识别的 LED 驱动电流
APDS996_SetGestureWaitTime(DEFAULT_GESTURE_WAIT_TIME); // 设置手势识别的等待时间
I2C_WriteByte(APDS996_I2C_ADDR, APDS996_GCONF2, DEFAULT_GESTURE_GCONF2); // 设置手势识别的配置寄存器 2
val = I2C_ReadByte(APDS996_I2C_ADDR, APDS996_GCONF4);
val &= ~(APDS996_GFIFO_CLR | APDS996_GMODE);
val |= APDS996_GMODE_CONTINUOUS;
I2C_WriteByte(APDS996_I2C_ADDR, APDS996_GCONF4, val); // 设置手势识别的配置寄存器 4
I2C_WriteByte(APDS996_I2C_ADDR, APDS996_ENABLE, (APDS996_ENABLE_GEN | APDS996_ENABLE_PIEN | APDS996_ENABLE_AIEN | APDS996_ENABLE_WEN | APDS996_ENABLE_PEN)); // 开启手势识别、接近检测、环境光感应、等待、近距离探测器
}
void APDS996_DisableGestureSensor(void)
{
uint8_t val;
val = I2C_ReadByte(APDS996_I2C_ADDR, APDS996_GCONF4);
val &= ~(APDS996_GFIFO_CLR | APDS996_GMODE);
val |= APDS996_GMODE_SINGLE;
I2C_WriteByte(APDS996_I2C_ADDR, APDS996_GCONF4, val); // 设置手势识别的配置寄存器 4
I2C_WriteByte(APDS996_I2C_ADDR, APDS996_ENABLE, (APDS996_ENABLE_PIEN | APDS996_ENABLE_AIEN | APDS996_ENABLE_WEN | APDS996_ENABLE_PEN)); // 关闭手势识别,开启接近检测、环境光感应、等待、近距离探测器
}
void APDS996_SetGestureGain(uint8_t gain)
{
uint8_t val;
val = I2C_ReadByte(APDS996_I2C_ADDR, APDS996_GCONF2);
val &= ~APDS996_GGAIN_2X;
val |= (gain & x01) << 5;
I2C_WriteByte(APDS996_I2C_ADDR, APDS996_GCONF2, val); // 设置手势识别的增益
}
void APDS996_SetGestureLEDDrive(uint8_t drive)
{
uint8_t val;
val = I2C_ReadByte(APDS996_I2C_ADDR, APDS996_GCONF2);
val &= ~APDS996_GLDRIVE;
val |= (drive & x03) << 3;
I2C_WriteByte(APDS996_I2C_ADDR, APDS996_GCONF2, val); // 设置手势识别的 LED 驱动电流
}
void APDS996_SetGestureWaitTime(uint8_t time)
{
I2C_WriteByte(APDS996_I2C_ADDR, APDS996_GWTIME, time); // 设置手势识别的等待时间
}
uint8_t APDS996_ReadGesture(void)
{
uint8_t fifo_level, fifo_data[128], i;
uint8_t gstatus;
uint8_t motion;
uint8_t l, r, u, d;
uint8_t count;
uint8_t valid_gesture = ;
if (!(I2C_ReadByte(APDS996_I2C_ADDR, APDS996_GSTATUS) & APDS996_GVALID)) {
return APDS996_DIR_NONE;
}
fifo_level = I2C_ReadByte(APDS996_I2C_ADDR, APDS996_GFLVL);
if (fifo_level == ) {
return APDS996_DIR_NONE;
} else if (fifo_level > 32) {
fifo_level = 32;
}
I2C_ReadBytes(APDS996_I2C_ADDR, APDS996_GFIFO_U, fifo_data, fifo_level * 4);
for (i = ; i < fifo_level; i++) {
l = fifo_data[i * 4 + ];
r = fifo_data[i * 4 + 1];
u = fifo_data[i * 4 + 2];
d = fifo_data[i * 4 + 3];
if (l > APDS996_GESTURE_THRESHOLD_OUT && r > APDS996_GESTURE_THRESHOLD_OUT && u > APDS996_GESTURE_THRESHOLD_OUT && d > APDS996_GESTURE_THRESHOLD_OUT) {
motion = APDS996_DIR_NEAR;
} else if (l > APDS996_GESTURE_THRESHOLD_IN && r > APDS996_GESTURE_THRESHOLD_IN && u > APDS996_GESTURE_THRESHOLD_OUT && d > APDS996_GESTURE_THRESHOLD_OUT) {
motion = APDS996_DIR_FAR;
} else if (l > APDS996_GESTURE_THRESHOLD_OUT && r > APDS996_GESTURE_THRESHOLD_OUT && u > APDS996_GESTURE_THRESHOLD_IN && d > APDS996_GESTURE_THRESHOLD_IN) {
motion = APDS996_DIR_LEFT;
} else if (l > APDS996_GESTURE_THRESHOLD_IN && r > APDS996_GESTURE_THRESHOLD_IN && u > APDS996_GESTURE_THRESHOLD_OUT && d > APDS996_GESTURE_THRESHOLD_OUT) {
motion = APDS996_DIR_RIGHT;
} else if (l > APDS996_GESTURE_THRESHOLD_OUT && r > APDS996_GESTURE_THRESHOLD_OUT && u > APDS996_GESTURE_THRESHOLD_OUT && d > APDS996_GESTURE_THRESHOLD_IN) {
motion = APDS996_DIR_UP;
} else if (l > APDS996_GESTURE_THRESHOLD_OUT && r > APDS996_GESTURE_THRESHOLD_OUT && u > APDS996_GESTURE_THRESHOLD_IN && d > APDS996_GESTURE_THRESHOLD_OUT) {
motion = APDS996_DIR_DOWN;
} else {
motion = APDS996_DIR_NONE;
}
if (motion != APDS996_DIR_NONE) {
valid_gesture = 1;
}
if (valid_gesture) {
break;
}
}
if (!valid_gesture) {
return APDS996_DIR_NONE;
}
count = I2C_ReadByte(APDS996_I2C_ADDR, APDS996_GCOUNT);
if (count == ) {
return APDS996_DIR_NONE;
}
gstatus = I2C_ReadByte(APDS996_I2C_ADDR, APDS996_GSTATUS);
if (gstatus & APDS996_GSINT) {
I2C_WriteByte(APDS996_I2C_ADDR, APDS996_GINTP, x01);
}
return motion;
}
centOS vim插件全套配置
以下是一个基于Vundle插件管理器的完整vim插件配置样例,包含常用插件和快捷键绑定等:
```
set nocompatible " be iMproved, required
filetype off " required
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'
" Add your plugins here
Plugin 'scrooloose/nerdtree' " 文件树
Plugin 'tpope/vim-fugitive' " Git
Plugin 'jiangmiao/auto-pairs' " 自动补全括号
Plugin 'vim-airline/vim-airline' " 状态栏
Plugin 'vim-airline/vim-airline-themes' " 状态栏主题
Plugin 'tpope/vim-surround' " 快捷键快速包围文本
Plugin 'tpope/vim-repeat' " 使 . 命令支持插件操作
Plugin 'tpope/vim-commentary' " 快速注释
Plugin 'preservim/nerdcommenter' " 快速注释
Plugin 'vim-scripts/indentpython.vim' " Python缩进
Plugin 'SirVer/ultisnips' " 代码片段
Plugin 'honza/vim-snippets' " 代码片段
Plugin 'fatih/vim-go' " Golang 工具
" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required
" 定义快捷键
nnoremap <C-n> :NERDTreeToggle<CR> " 打开/关闭文件树
nnoremap <leader>gs :Git<CR> " 打开 Git 窗口
nnoremap <leader>gb :Git blame<CR> " Git blame
nnoremap <leader>gc :Git commit<CR> " Git commit
nnoremap <leader>gd :Gdiff<CR> " Git diff
nnoremap <leader>gl :Glog<CR> " Git log
nnoremap <leader>gp :Git push<CR> " Git push
nnoremap <leader>gs :Gstatus<CR> " Git status
nnoremap <leader>gw :Gwrite<CR> " Git write
" 设置状态栏主题
let g:airline_theme='molokai'
```
保存并退出`~/.vimrc`文件,然后打开vim,执行以下命令,安装配置好的插件:
```
:PluginInstall
```
Vundle将自动从GitHub上下载和安装已列出的插件。
至此,你的vim插件全套配置已完成。