平台信息:
内核:linux3.0.68 
系统:android/android6.0
平台:RK3288

作者:庄泽彬(欢迎转载,请注明作者)

邮箱:2760715357@qq.com

说明:通过I2C总线获取摄像头的ID号。

一、查看规格书,确定摄像头存放ID号的寄存器地址.

二、应用层通过I2C总线的编程模型获取摄像头的Sensor ID.详细的代码如下:

camera.cpp

 #include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h> /* Definition of AT_* constants */
#include <unistd.h> #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <time.h>
#include <fcntl.h>
#include <dlfcn.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <sys/stat.h> #include <sys/types.h>
#include <sys/stat.h>
#include <sys/file.h>
#include <string.h>
#include <pthread.h>
//#include <linux/videodev.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <errno.h>
#include <fcntl.h>
#include <time.h>
#include <sys/time.h>
#include <signal.h>
//#include <linux/ion.h>
//#include "ion.h"
#include "../../system/core/libion/kernel-headers/linux/rockchip_ion.h"
//#include <linux/android_pmem.h>
#include <linux/videodev2.h>
#include <linux/fb.h>
#include <linux/version.h> #include "camsys_head.h" #define CAMSYS_DEVNAME "/dev/camsys_marvin" static int camsys_fd = -; //hkw add;
int extdev_register()
{
int err = ;
int numLane = ;
camsys_devio_name_t extdev; extdev.dev_id = CAMSYS_DEVID_SENSOR_1B;
strlcpy((char*)extdev.avdd.name, "NC",sizeof(extdev.avdd.name));
extdev.avdd.min_uv = ;
extdev.avdd.max_uv = ;
strlcpy((char*)extdev.dovdd.name,"NC",sizeof(extdev.dovdd.name));
extdev.dovdd.min_uv = ;
extdev.dovdd.max_uv = ;
strlcpy((char*)extdev.dvdd.name, "NC",sizeof(extdev.dvdd.name));
strlcpy((char*)extdev.afvdd.name, "NC",sizeof(extdev.afvdd.name));
strlcpy((char*)extdev.pwrdn.name, "RK30_PIN2_PB7",sizeof(extdev.pwrdn.name));
extdev.pwrdn.active = 0x00;
strlcpy((char*)extdev.pwren.name, "RK30_PIN0_PC1",sizeof(extdev.pwren.name));
extdev.pwren.active = 0x01;
strlcpy((char*)extdev.rst.name,"RK30_PIN2_PB5",sizeof(extdev.rst.name));
extdev.rst.active = 0x0;
strlcpy((char*)extdev.afpwrdn.name,"NC",sizeof(extdev.afpwrdn.name));
strlcpy((char*)extdev.afpwr.name,"NC",sizeof(extdev.afpwr.name));
extdev.phy.type = CamSys_Phy_Mipi;
//extdev.phy.info.mipi.phy_index = 1; //MIPI_PHY_INDEX;
extdev.phy.info.mipi.data_en_bit = 0x01; //? /*if (numLane == 1) {
extdev.phy.info.mipi.data_en_bit = 0x01;
extdev.phy.info.mipi.bit_rate = 656;
} else if (numLane == 2) {
extdev.phy.info.mipi.data_en_bit = 0x03;
extdev.phy.info.mipi.bit_rate = 328;
} else if (numLane == 4) {
extdev.phy.info.mipi.data_en_bit = 0x0f;
extdev.phy.info.mipi.bit_rate = 408;
}*/
extdev.clk.in_rate = ; printf("----CAMSYS_REGISTER_DEVIO----\n");
err = ioctl(camsys_fd, CAMSYS_REGISTER_DEVIO, &extdev);
if (err<) {
printf("CAMSYS_REGISTER_DEVIO failed\n");
} return err;
} //int extdev_init(unsigned int *i2cbase)
int extdev_init()
{
int err,i2cbytes,i;
struct rk_sensor_reg *sensor_reg;
unsigned char *i2cchar;
camsys_sysctrl_t sysctl;
camsys_i2c_info_t i2cinfo;
int id = ; sysctl.dev_mask = (CAMSYS_DEVID_SENSOR_1B & HAL_DEVID_EXTERNAL);
sysctl.ops = CamSys_Avdd;
sysctl.on = ;
err = ioctl(camsys_fd, CAMSYS_SYSCTRL, &sysctl);
if (err<) {
printf("CamSys_Avdd on failed!");
} sysctl.ops = CamSys_Dvdd;
sysctl.on = ;
err = ioctl(camsys_fd, CAMSYS_SYSCTRL, &sysctl);
if (err<) {
printf("CamSys_Dvdd on failed!\n");
} sysctl.ops = CamSys_Dovdd;
sysctl.on = ;
err = ioctl(camsys_fd, CAMSYS_SYSCTRL, &sysctl);
if (err<) {
printf("CamSys_Dovdd on failed!");
}
usleep(); sysctl.dev_mask = (CAMSYS_DEVID_SENSOR_1B | CAMSYS_DEVID_MARVIN);
sysctl.ops = CamSys_ClkIn;
sysctl.on = ;
err = ioctl(camsys_fd, CAMSYS_SYSCTRL, &sysctl);
if (err<) {
printf("CamSys_ClkIn on failed\n");
} //1)power en
usleep();
sysctl.dev_mask = (CAMSYS_DEVID_SENSOR_1B & HAL_DEVID_EXTERNAL);
sysctl.ops = CamSys_PwrEn;
sysctl.on = ;
err = ioctl(camsys_fd, CAMSYS_SYSCTRL, &sysctl);
if (err<) {
printf("CamSys_PwrEn on failed");
} //2)reset
usleep();
sysctl.ops = CamSys_Rst;
sysctl.on = ;
err = ioctl(camsys_fd, CAMSYS_SYSCTRL, &sysctl);
if (err<) {
printf("CamSys_Rst on failed\n");
} //3)power down control
usleep();
//sysctl.dev_mask = CAMSYS_DEVID_SENSOR_1B;
sysctl.ops = CamSys_PwrDn;
sysctl.on = ;
err = ioctl(camsys_fd, CAMSYS_SYSCTRL, &sysctl);
if (err<) {
printf("CamSys_PwrDn on failed");
}
usleep(); i2cinfo.bus_num = ;
i2cinfo.slave_addr = 0x6C; //0x6c; //0x20;
i2cinfo.reg_addr = 0x0103;
i2cinfo.reg_size = ;
i2cinfo.val = 0x01;
i2cinfo.val_size = 0x01;
i2cinfo.i2cbuf_directly = ;
i2cinfo.speed = ; err = ioctl(camsys_fd, CAMSYS_I2CWR, &i2cinfo);
if(err<) {
printf("softreset::CAMSYS_I2CWR failed\n");
i2cinfo.slave_addr = 0x20;
err = ioctl(camsys_fd, CAMSYS_I2CWR, &i2cinfo);
if(err<){
printf("softreset again::CAMSYS_I2CWR failed\n");
printf("zhuang:{ ID:0x%x }\n",id);
goto end;
}
}/* else {
printf("I2c write: 0x%x : 0x%x\n",i2cinfo.reg_addr,i2cinfo.val);
}*/ usleep(); i2cinfo.reg_addr = 0x300a;
i2cinfo.val_size = 0x01;
err = ioctl(camsys_fd, CAMSYS_I2CRD, &i2cinfo);
if (err<) {
printf("CAMSYS_I2CRD failed\n");
printf("zhuang:{ ID:0x%x }\n",id);
goto end;
} else {
printf("I2c read: 0x%x : 0x%x\n",i2cinfo.reg_addr,i2cinfo.val);
id = (i2cinfo.val<<);
} i2cinfo.reg_addr = 0x300b;
err = ioctl(camsys_fd, CAMSYS_I2CRD, &i2cinfo);
if (err<) {
printf("CAMSYS_I2CRD failed\n");
printf("{ ID:0x%x }\n",id);
goto end;
} else {
printf("I2c read: 0x%x : 0x%x\n",i2cinfo.reg_addr,i2cinfo.val);
id |= i2cinfo.val;
} i2cinfo.reg_addr = 0x3011;
err = ioctl(camsys_fd, CAMSYS_I2CRD, &i2cinfo);
if (err<) {
printf("CAMSYS_I2CRD failed\n");
printf("{ ID:0x%x }\n",id);
goto end;
} else {
printf("IO Streng I2c read: 0x%x : 0x%x\n",i2cinfo.reg_addr,i2cinfo.val);
}
fprintf(stderr,"zhuang-cam:0x%x\r\n",id);
printf("\n!!!!!!!!!!Back Camera ID: 0x%x; default:0x008858!!!!!!!!!!\n",id);
if(id == 0x5648){
printf("{ ID:0x%x }\n",id);
}else{
printf("{ ID:0x%x }\n",id);
}
/*
i2cinfo.reg_addr = 0x300c;
err = ioctl(camsys_fd, CAMSYS_I2CRD, &i2cinfo);
if (err<0) {
printf("CAMSYS_I2CRD failed\n");
} else {
printf("I2c read: 0x%x : 0x%x\n",i2cinfo.reg_addr,i2cinfo.val);
} i2cinfo.reg_addr = 0x302a;
err = ioctl(camsys_fd, CAMSYS_I2CRD, &i2cinfo);
if (err<0) {
printf("CAMSYS_I2CRD failed\n");
} else {
printf("I2c read: 0x%x : 0x%x\n",i2cinfo.reg_addr,i2cinfo.val);
}
*/
/*
i2cchar = (unsigned char*)i2cbase;
sensor_reg = sensor_test;
i2cbytes = 0x00;
for (i=0; i<sizeof(sensor_test)/sizeof(struct rk_sensor_reg); i++) {
*i2cchar++ = (sensor_reg->reg&0xff00)>>8;
*i2cchar++ = (sensor_reg->reg&0xff);
*i2cchar++ = (sensor_reg->val&0xff);
sensor_reg++;
i2cbytes += 3;
} i2cinfo.bus_num = 3;
i2cinfo.slave_addr = 0x6c;
i2cinfo.i2cbuf_directly = 1;
i2cinfo.i2cbuf_bytes = ((3<<16)|i2cbytes);
i2cinfo.speed = 100000;
err = ioctl(camsys_fd, CAMSYS_I2CWR, &i2cinfo);
if (err<0) {
printf("CAMSYS_I2CWR buf failed\n");
}
printf("Sensor init!\n");
*/
end:
return ;
} int main(int argc,char **argv)
{
int ret = -;
camsys_devio_name_t extdev;
camsys_i2c_info_t i2cinfo;
int id = ; ret = access(CAMSYS_DEVNAME,O_RDWR);
if(ret < ){
printf("access %s failed\r\n",CAMSYS_DEVNAME);
return -;
} camsys_fd = open(CAMSYS_DEVNAME,O_RDWR);
if(camsys_fd < ){
printf("open %s failed\r\n",CAMSYS_DEVNAME);
return -;
} extdev_register();
extdev_init(); if(camsys_fd > )
close(camsys_fd); printf("camera:id = 0x%x\r\n",id); return ;
}

camera_head.h代码如下:

#ifndef __RKCAMSYS_HEAR_H__
#define __RKCAMSYS_HEAR_H__ #include <linux/ioctl.h> /*
* C A M S Y S H E A D F I L E V E R S I O N
*
*v0.0.1:
* 1) test version;
*v0.0.2:
* 1) modify camsys_irqcnnt_t;
*v0.0.3:
* 1) add support cif phy for marvin;
*v0.0.4:
* 1) add clock information in struct camsys_devio_name_s;
*v0.0.5:
* 1) add pwren control
*v0.6.0:
* 1) add support mipi phy configuration;
* 2) add support io domain and mclk driver strength configuration;
*v0.7.0:
1) add flash_trigger_out control
*v0.8.0:
1) support isp iommu
*v0.9.0:
1) add dev_name in struct camsys_devio_name_s;
*v0.a.0:
1) support external flash IC
*v0.b.0:
1) add CamSys_SensorBit0_CifBit4 in enum camsys_cifio_e.
2) support sensor powerup sequence configurable.
*/
#define CAMSYS_HEAD_VERSION KERNEL_VERSION(0,0xb,0) #define CAMSYS_MARVIN_DEVNAME "camsys_marvin"
#define CAMSYS_CIF0_DEVNAME "camsys_cif0"
#define CAMSYS_CIF1_DEVNAME "camsys_cif1" #define CAMSYS_NAME_LEN 32 #define CAMSYS_DEVID_MARVIN 0x00000001
#define CAMSYS_DEVID_CIF_0 0x00000002
#define CAMSYS_DEVID_CIF_1 0x00000004
#define CAMSYS_DEVID_INTERNAL 0x000000FF #define CAMSYS_DEVID_SENSOR_1A 0x01000000
#define CAMSYS_DEVID_SENSOR_1B 0x02000000
#define CAMSYS_DEVID_SENSOR_2 0x04000000
#define CAMSYS_DEVID_EXTERNAL 0xFF000000
#define CAMSYS_DEVID_EXTERNAL_NUM 8 #define CAMSYS_DEVCFG_FLASHLIGHT 0x00000001
#define CAMSYS_DEVCFG_PREFLASHLIGHT 0x00000002
#define CAMSYS_DEVCFG_SHUTTER 0x00000004 //Sensor power up sequence define
//type: bit0-bit4
#define SENSOR_PWRSEQ_BEGIN 0x00
#define SENSOR_PWRSEQ_AVDD 0x01
#define SENSOR_PWRSEQ_DOVDD 0x02
#define SENSOR_PWRSEQ_DVDD 0x03
#define SENSOR_PWRSEQ_CLKIN 0x04
#define SENSOR_PWRSEQ_PWR 0x05
#define SENSOR_PWRSEQ_RST 0x06
#define SENSOR_PWRSEQ_PWRDN 0x07
#define SENSOR_PWRSEQ_END 0x0F
#define SENSOR_PWRSEQ_CNT 0x07 #define VCM_PWRSEQ_BEGIN 0x00
#define VCM_PWRSEQ_VDD 0x01
#define VCM_PWRSEQ_PWR 0x02
#define VCM_PWRSEQ_PWRDN 0x03
#define VCM_PWRSEQ_END 0x0F
#define VCM_PWRSEQ_CNT 0x03 #define POWERSEQ_SET(type,idx) (type<<(idx*4))
#define POWERSEQ_GET(seq,idx) ((seq>>(idx*4))&0x0f) typedef struct camsys_irqsta_s {
unsigned int ris; //Raw interrupt status
unsigned int mis; //Masked interrupt status
} camsys_irqsta_t; typedef struct camsys_irqcnnt_s {
int pid;
unsigned int timeout; //us unsigned int mis;
unsigned int icr;
} camsys_irqcnnt_t; typedef enum camsys_mmap_type_e { //this type can be filled in mmap offset argument
CamSys_Mmap_RegisterMem,
CamSys_Mmap_I2cMem, CamSys_Mmap_End
} camsys_mmap_type_t; typedef struct camsys_querymem_s {
camsys_mmap_type_t mem_type;
unsigned long mem_offset; unsigned int mem_size;
} camsys_querymem_t; typedef struct camsys_i2c_info_s {
unsigned char bus_num;
unsigned short slave_addr;
unsigned int reg_addr; //i2c device register address
unsigned int reg_size; //register address size
unsigned int val;
unsigned int val_size; //register value size
unsigned int i2cbuf_directly;
unsigned int i2cbuf_bytes;
unsigned int speed; //100000 == 100KHz
} camsys_i2c_info_t; typedef struct camsys_reginfo_s {
unsigned int dev_mask;
unsigned int reg_offset;
unsigned int val;
} camsys_reginfo_t; typedef enum camsys_sysctrl_ops_e { CamSys_Vdd_Start_Tag,
CamSys_Avdd,
CamSys_Dovdd,
CamSys_Dvdd,
CamSys_Afvdd,
CamSys_Vdd_End_Tag, CamSys_Gpio_Start_Tag,
CamSys_PwrDn,
CamSys_Rst,
CamSys_AfPwr,
CamSys_AfPwrDn,
CamSys_PwrEn,
CamSys_Gpio_End_Tag, CamSys_Clk_Start_Tag,
CamSys_ClkIn,
CamSys_Clk_End_Tag, CamSys_Phy_Start_Tag,
CamSys_Phy,
CamSys_Phy_End_Tag,
CamSys_Flash_Trigger_Start_Tag,
CamSys_Flash_Trigger,
CamSys_Flash_Trigger_End_Tag,
CamSys_IOMMU } camsys_sysctrl_ops_t; typedef struct camsys_regulator_info_s {
unsigned char name[CAMSYS_NAME_LEN];
int min_uv;
int max_uv;
} camsys_regulator_info_t; typedef struct camsys_gpio_info_s {
unsigned char name[CAMSYS_NAME_LEN];
unsigned int active;
} camsys_gpio_info_t; typedef struct camsys_iommu_s{
int client_fd;
int map_fd;
unsigned long linear_addr;
unsigned long len;
}camsys_iommu_t; typedef struct camsys_sysctrl_s {
unsigned int dev_mask;
camsys_sysctrl_ops_t ops;
unsigned int on; unsigned int rev[];
} camsys_sysctrl_t; typedef struct camsys_flash_info_s {
unsigned char fl_drv_name[CAMSYS_NAME_LEN];
camsys_gpio_info_t fl; //fl_trig
camsys_gpio_info_t fl_en;
} camsys_flash_info_t; typedef struct camsys_mipiphy_s {
unsigned int data_en_bit; // data lane enable bit;
unsigned int bit_rate; // Mbps/lane
unsigned int phy_index; // phy0,phy1
} camsys_mipiphy_t; typedef enum camsys_fmt_e {
CamSys_Fmt_Yuv420_8b = 0x18,
CamSys_Fmt_Yuv420_10b = 0x19,
CamSys_Fmt_LegacyYuv420_8b = 0x19, CamSys_Fmt_Yuv422_8b = 0x1e,
CamSys_Fmt_Yuv422_10b = 0x1f, CamSys_Fmt_Raw_6b = 0x28,
CamSys_Fmt_Raw_7b = 0x29,
CamSys_Fmt_Raw_8b = 0x2a,
CamSys_Fmt_Raw_10b = 0x2b,
CamSys_Fmt_Raw_12b = 0x2c,
CamSys_Fmt_Raw_14b = 0x2d,
} camsys_fmt_t; typedef enum camsys_cifio_e {
CamSys_SensorBit0_CifBit0 = 0x00,
CamSys_SensorBit0_CifBit2 = 0x01,
CamSys_SensorBit0_CifBit4 = 0x02,
} camsys_cifio_t; typedef struct camsys_cifphy_s {
unsigned int cif_num;
camsys_fmt_t fmt;
camsys_cifio_t cifio; } camsys_cifphy_t; typedef enum camsys_phy_type_e {
CamSys_Phy_Mipi,
CamSys_Phy_Cif, CamSys_Phy_end
} camsys_phy_type_t; typedef struct camsys_extdev_phy_s {
camsys_phy_type_t type;
union {
camsys_mipiphy_t mipi;
camsys_cifphy_t cif;
} info; } camsys_extdev_phy_t; typedef struct camsys_extdev_clk_s {
unsigned int in_rate;
unsigned int driver_strength; //0 - 3
} camsys_extdev_clk_t; typedef struct camsys_devio_name_s {
unsigned char dev_name[CAMSYS_NAME_LEN];
unsigned int dev_id; camsys_regulator_info_t avdd; // sensor avdd power regulator name
camsys_regulator_info_t dovdd; // sensor dovdd power regulator name
camsys_regulator_info_t dvdd; // sensor dvdd power regulator name "NC" describe no regulator
camsys_regulator_info_t afvdd; camsys_gpio_info_t pwrdn; // standby gpio name
camsys_gpio_info_t rst; // hard reset gpio name
camsys_gpio_info_t afpwr; // auto focus vcm driver ic power gpio name
camsys_gpio_info_t afpwrdn; // auto focus vcm driver ic standby gpio
camsys_gpio_info_t pwren; // power enable gpio name camsys_flash_info_t fl; camsys_extdev_phy_t phy;
camsys_extdev_clk_t clk; unsigned int dev_cfg; // function bit mask configuration
} camsys_devio_name_t; typedef struct camsys_version_s {
unsigned int drv_ver;
unsigned int head_ver;
} camsys_version_t; /*
* I O C T L C O D E S F O R R O C K C H I P S C A M S Y S D E V I C E S
*
*/
#define HAL_DEVID_EXTERNAL CAMSYS_DEVID_EXTERNAL //!< just external devices included
#define CAMSYS_IOC_MAGIC 'M'
#define CAMSYS_IOC_MAXNR 14 #define CAMSYS_VERCHK _IOR(CAMSYS_IOC_MAGIC, 0, camsys_version_t) #define CAMSYS_I2CRD _IOWR(CAMSYS_IOC_MAGIC, 1, camsys_i2c_info_t)
#define CAMSYS_I2CWR _IOW(CAMSYS_IOC_MAGIC, 2, camsys_i2c_info_t) #define CAMSYS_SYSCTRL _IOW(CAMSYS_IOC_MAGIC, 3, camsys_sysctrl_t)
#define CAMSYS_REGRD _IOWR(CAMSYS_IOC_MAGIC, 4, camsys_reginfo_t)
#define CAMSYS_REGWR _IOW(CAMSYS_IOC_MAGIC, 5, camsys_reginfo_t)
#define CAMSYS_REGISTER_DEVIO _IOW(CAMSYS_IOC_MAGIC, 6, camsys_devio_name_t)
#define CAMSYS_DEREGISTER_DEVIO _IOW(CAMSYS_IOC_MAGIC, 7, unsigned int)
#define CAMSYS_IRQCONNECT _IOW(CAMSYS_IOC_MAGIC, 8, camsys_irqcnnt_t)
#define CAMSYS_IRQWAIT _IOR(CAMSYS_IOC_MAGIC, 9, camsys_irqsta_t)
#define CAMSYS_IRQDISCONNECT _IOW(CAMSYS_IOC_MAGIC, 10, camsys_irqcnnt_t) #define CAMSYS_QUREYMEM _IOR(CAMSYS_IOC_MAGIC, 11, camsys_querymem_t)
#define CAMSYS_QUREYIOMMU _IOW(CAMSYS_IOC_MAGIC, 12, int)
#endif

Android.mk如下:

 LOCAL_PATH := $(call my-dir)

 include $(CLEAR_VARS)

 LOCAL_MODULE_TAGS := optional

 LOCAL_MODULE := camera

 LOCAL_SRC_FILES := camera.cpp

 include $(BUILD_EXECUTABLE)

三、实现结果:已经成果获取对应寄存器的地址的内容

RK3288获取摄像头的Sensor ID【原创】的更多相关文章

  1. 关于GPL329A中获取摄像头sensor id的问题

    首先我拿到了sensor_id应用程序的源码,我要在上面添加获取ov2685 的 sensor id的代码. 利用find . -name  get_sensor_id找到该代码编译之后生成的a.ou ...

  2. iOS UIWebView中javascript与Objective-C交互、获取摄像头

    UIWebView是iOS开发中常用的一个视图控件,多数情况下,它被用来显示HTML格式的内容. 支持的文档格式 除了HTML以外,UIWebView还支持iWork, Office等文档格式: Ex ...

  3. Opencv+MFC获取摄像头数据,显示在Picture控件

    分为两步:OpenCV获取摄像头数据+图像在Picture上显示 第一步:OpenCV获取摄像头数据 参考:http://www.cnblogs.com/epirus/archive/2012/06/ ...

  4. UIWebView中javascript与Objective-C交互、获取摄像头

    UIWebView是iOS开发中常用的一个视图控件,多数情况下,它被用来显示HTML格式的内容. 支持的文档格式 除了HTML以外,UIWebView还支持iWork, Office等文档格式: Ex ...

  5. C\C++下获取系统进程或线程ID(转)

    在程序开发时有时需要获取线程和进程ID以分析程序运行 ()windows下获取进程或线程ID 通过调用系统提供的GetCurProcessId或GetNowThreadID来获取当前程序代码运行时的进 ...

  6. jQuery获取带点的id元素

    一般jQuery获取某个id为elem元素,只需用$('#elem')就行了,但是如果id中不小心包括了'.' ,那么我吗就会发现这时候jQuery就不能获取到这个元素了.但是使用dom原生的getE ...

  7. 如何获取应用宝APP ID

    二百二维码支持绑定应用宝ID后,android 扫码下载后,微信直接下载APP,不打开应用宝页面,非常方便APP进行推广 那如何获取应用宝APP ID呢, 请参考下面的教程    一, 打开http: ...

  8. PHP获取MySql新增记录ID值的方法

    今天发现用mysql_insert_id()获取到的新增记录的id不正确, 虽然发现源代码的事务写的有问题,但是最根本的原因是,我插入数据的id类型是bigint型 获取MySql新增记录ID值的方法 ...

  9. Yii2框架查询指定字段和获取添加数据的id

    指定字段: $historyinfo = Healthy::find()->select(['healthy_id','pet_name','hardware_name','hardware_c ...

随机推荐

  1. P2347 砝码称重(动态规划递推,背包,洛谷)

    题目链接:P2347 砝码称重 参考题解:点击进入 纪念我第一道没理解题意的题 ''但不包括一个砝码也不用的情况'',这句话我看成了每个砝码起码放一个 然后就做不出来了 思路: 1.这题数据很小,10 ...

  2. 浅谈Session的使用(原创)

    目录 浅谈Session的使用(原创) 1.引言 2.Session域的生命周期 2.1 Session的创建 2.2 Session的销毁 3.那么,session被销毁后,其中存放的属性不就都访问 ...

  3. SpringAOP的简单实现

    AOP,即面向切面编程,springAOP采用的是动态代理的技术 其主要作用可以做一些与业务逻辑无关,但却必须的操作,例如日志记录,权限管理,检查数据,等等.首先,来做一个小实现来方便理解 首先,建立 ...

  4. CentOS虚拟机挂载Windows共享目录

    Windows文件共享使用了SMB协议(又称CIFS协议),该协议主要提供了文件共享和打印共享功能,分别使用TCP 139和445端口.UNIX.Linux系统提供了该协议的开源实现samba.为了方 ...

  5. First C program

    come from https://mooc.study.163.com/learn/1000002011?tid=2001530003#/learn/content?type=detail& ...

  6. 用二分法计算a的n次幂<算法分析>

    实验目的:1.复习java编程:2.掌握二分法的基本原理:3.掌握使用java程序进行二分法计算a的n次幂.实验步骤:1.由用户输入a及n(均为整数):2.利用二分法完成计算,并将中间结果打印出来. ...

  7. Win 2003 创建 IP 安全策略来屏蔽端口的图文教程

    (本文用示例的方法讲解 IP 安全策略的设置方法,具体的设置还是要根据个人实际的需要来设置.另外 Windows Server 2008 与此类似.千一网络编辑注) IP安全性(Internet Pr ...

  8. 餐巾(cogs 461)

    [问题描述] 一个餐厅在相继的N天里,第i天需要Ri块餐巾(i=l,2,…,N).餐厅可以从三种途径获得餐巾. (1)购买新的餐巾,每块需p分: (2)把用过的餐巾送到快洗部,洗一块需m天,费用需f分 ...

  9. 【HDOJ6148】Valley Numer(数位DP)

    题意: 1≤T≤200 ● 1≤length(N)≤100 思路: 设f[i,j,k,l]为第i位为j,前i位是否贴上限(0/1),递减或递增(0/1)方案数 g[i,j,k]为不到n位,第i位为j, ...

  10. sqlserver2008 存储过程使用表参数

    ----首先,我们定义一个表值参数类型,其实就是一个表变量   Create type dbo.tp_Demo_MultiRowsInsert as Table   (   [PName] [Nvar ...