平台信息:
内核: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. HDU - 2058 The sum problem(思路题)

    题目: Given a sequence 1,2,3,......N, your job is to calculate all the possible sub-sequences that the ...

  2. PHPExcel读取表格内容

    PHPExcel读取表格 先引入类IOFactory.php require_once '../PHPExcel/IOFactory.php'; $filePath = "test.xlsx ...

  3. poj 1363 火车进站 (栈的应用)

    Description There is a famous railway station in PopPush City. Country there is incredibly hilly. Th ...

  4. Far Relative’s Problem (贪心 计算来的最多客人)

    Description Famil Door wants to celebrate his birthday with his friends from Far Far Away. He has n  ...

  5. ASP.NET MVC的帮助类HtmlHelper和UrlHelper

    在ASP.NET MVC框架中没有了自己的控件,页面显示完全就回到了写html代码的年代.还好在asp.net mvc框架中也有自带的HtmlHelper和UrlHelper两个帮助类.另外在MvcC ...

  6. servlet页面没有跳转

    Boolean b = userService.selectByParams(user);if (b) { req.getSession().setAttribute("loginname& ...

  7. Android OkHttp与物理存储介质缓存:DiskLruCache(2)

     Android OkHttp与物理存储介质缓存:DiskLruCache(2) 本文在附录文章8,9的基础之上,把Android OkHttp与DiskLruCache相结合,综合此两项技术,实 ...

  8. hdu 1179最大匹配

    #include<stdio.h> #include<string.h> #define N 200 int map[N][N],visit[N],link[N],n,m; i ...

  9. [Nescafé 20] 玉蟾宫

    ★   输入文件:jademoon.in   输出文件:jademoon.out   简单对比 时间限制:1 s   内存限制:128 MB [背景] 有一天,小猫rainbow和freda来到了湘西 ...

  10. 莫(meng)比(bi)乌斯反演--BZOJ2301: [HAOI2011]Problem b

    n<=50000个询问,每次问a<=x<=b,c<=y<=d中有多少gcd(x,y)=K的(x,y).a,b,c,d,K<=50000. 这大概是入门题辣..这里记 ...