⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sk.c

📁 本程序在S3C44B0 uClinux的嵌入式GUI
💻 C
📖 第 1 页 / 共 5 页
字号:
 length = LongToStr(DT->tm_min,Data_Buf); if(length<2) { Data_Buf[1] = Data_Buf[0];  Data_Buf[0] = 0x30;} DT_buf[5]=CharToBCD(Data_Buf);  //分钟 memmove(DATE,DT_buf,6);}//---------------------------------------------------------------------------//功能: 设置linux下的系统时间 (红旗2000郭永仕提供)//参数: datestr: 所要设置的系统时间 格式为:"YYYYMMDDHHMMSS" 例:"20040305100101"表示2004年3月5日10点1分0秒//注意: 此功能只能在root用户下使用//该函数不检查datestr的正确性,调用前确保datestr的正确.//时间秒在这里没用到int GYSSetSystemDate(unsigned char *datestr){    char date[13];    char datecmd[25];        memset(date,0,13);    //date的格式是mmddhhmmyyyy,跟datestr不一样    memcpy(date,datestr+4,8);    memcpy(date+8,datestr,4);    sprintf(datecmd,"date %s",date);    system(datecmd);	//执行date MMDDHHMMYYYY命令    system("hwclock --systohc");	//执行hwclock --systohc命令更新bios时间    return 1;}/*//功能: 设置linux下的系统时间 (红旗2000郭永仕提供)//参数: datestr: 所要设置的系统时间 格式为:"YYYYMMDDHHMMSS" 例:"20040305100101"表示2004年3月5日10点1分0秒//注意: 此功能只能在root用户下使用int GYSSetSystemDate(unsigned char *datestr){    char year[5];    char month[3];    char day[3];    char hours[3];    char minutes[3];    char seconds[3];    time_t when;    struct tm t;    struct timeval tv;    int ret;        if(strlen(datestr)!=14)    {	printf("invalid date\n");	return -1;    }        //初始化变量    memset(year,0,5);  memset(month,0,3);  memset(day,0,3);    memset(hours,0,3);  memset(minutes,0,3);  memset(seconds,0,3);        //将 年月日时分秒 信息填入日期时间结构    memcpy(year,datestr,4);  memcpy(month,datestr+4,2);  memcpy(day,datestr+6,2);    memcpy(hours,datestr+8,2);  memcpy(minutes,datestr+10,2);  memcpy(seconds,datestr+12,2);        t.tm_year=atoi(year)-1900;		//年 年减去1900,如2004年是104    t.tm_mon=atoi(month)-1;		//月 0是一月,1是二月......    t.tm_mday=atoi(day);		//日 1~    t.tm_hour=atoi(hours);		//时 0~23    t.tm_min=atoi(minutes);		//分 0~59    t.tm_sec=atoi(seconds);		//秒 0~59    if(t.tm_year<104 || t.tm_mon<0 || t.tm_mon>11 || t.tm_mday<1 || t.tm_mday>31	    || t.tm_hour<0 || t.tm_hour>23 || t.tm_min<0 || t.tm_min>59	    || t.tm_sec<0 || t.tm_sec>59)    {	printf("invalid date\n");	return -1;    }    when=mktime(&t);    tv.tv_sec=when;    tv.tv_usec=0;    ret=settimeofday(&tv,(struct timezone *)0);    return ret;}*///---------------------------------------------------------------------------//功能: 设置时间//参数: timeInfoStr: 所要设置时间 格式为:"HH-MM" 例:"1001"表示设置时间为当天10点1分//返回: 0:正常  -1:设置系统时间参数错int MySetTime(unsigned char *timeInfoStr){  unsigned char sys_date_time[20];  unsigned char tmp_data[10];  int i,err;    memset(sys_date_time,0x0,20);  memset(tmp_data,0x0,10);    SystemDateToBcd(tmp_data);  //得到当前系统日期  for(i=0;i<4;i++)    BCDtoChar(&sys_date_time[i*2],tmp_data[i]);  memmove(&sys_date_time[8],timeInfoStr,2);  //得到需要设置的时间    memmove(&sys_date_time[10],&timeInfoStr[3],2);  memmove(&sys_date_time[12],"00",2);  //当前秒为'00'    err = GYSSetSystemDate(sys_date_time);  //设置当前时间       if(err == -1)    return 0xa3;  //参数错误      return 0;  }//---------------------------------------------------------------------------/* 功能: 延时 2001.11.22 增加 *//* 参数: MSEL:延时毫秒数      */void Morra(int MSEL){  usleep(MSEL);}//---------------------------------------------------------------------------//工作状态握手//ESC,CMD81,SUB00,LEN=5,CheckSum//ESC,CMD81,SUB00,LEN=6,err,CheckSumint WorkHandshake(void){   int err=0;   unsigned char work_handshake_command[] = {0x1b,0x81,0,5,0,0};   unsigned char return_buf[20];   memset(return_buf,0x0,20);      err = SendCommand(work_handshake_command,work_handshake_command[3],return_buf);  //接收数据   if(err || return_buf[4])   { if(err) return err;       else  return return_buf[4];   }   return err;}//---------------------------------------------------------------------------//ESC,CMD81,SUB01,LEN=7+数据长,addr(int),data数据,CheckSum  (MAX数据长=132)//ESC,CMD81,SUB01,LEN=6,err,CheckSum    见err表//功能:向 eeprom 写//参数:   add: 写入Eeprom的地址//     length: 写入数据长度//        buf: 写入数据内容//返回: =0:操作成功 !=0:见错误对照表int WriteEeprom(int add,int length,unsigned char *buf){  unsigned char write_eeprom_command[200] = {0x1b,0x81,0x01,0,0,0};            int err=0;  unsigned char return_buf[20];          short write_address;  memset(&write_eeprom_command[3],0,190);  //初始化write_eeprom_command[200]数据部分  write_eeprom_command[3] = 7 + length;    //发送全部数据长度  write_address = add;  memmove(&write_eeprom_command[4],(unsigned char *)&write_address,2);  //写Eeprom地址  memmove(&write_eeprom_command[6],buf,length);  //需要写的数据内容  memset(return_buf,0x0,20);  err = SendCommand(write_eeprom_command,write_eeprom_command[3],return_buf);  //发送命令  if(err || return_buf[4])  { if(err)  return err;    else     return 0x85; //return return_buf[4];   //Eeprom写失败  }  return err;}//---------------------------------------------------------------------------//ESC,CMD81,SUB02,LEN=8,addr(int),len,CheckSum   (MAX len =132)//ESC,CMD81,SUB02,LEN=5+数据长,data数据,CheckSum//功能:从 eeprom 读//参数:   add: 写入Eeprom的地址//     length: 写入数据长度//        buf: 写入数据内容//返回: =0:操作成功 !=0:见错误对照表int ReadEeprom(int add,int length,unsigned char *buf){  unsigned char read_eeprom_command[10] = {0x1b,0x81,0x02,8,0,0,10,0,0};            int err=0;          short addr;  unsigned char return_buf[200];  memset(return_buf,0x0,200);  addr = add;  memmove(&read_eeprom_command[4],(unsigned char *)&addr,2);  if(length>132)    read_eeprom_command[6] = 132;  else    read_eeprom_command[6] = length;  err = SendCommand(read_eeprom_command,read_eeprom_command[3],return_buf);  //接收数据  if(err)  return err;  memmove(buf,&return_buf[4],length);  return err;}//---------------------------------------------------------------------------//向 flash rom 写//ESC,CMD81,SUB03,LEN=9+数据长,addr(long),data数据,CheckSum  (MAX数据长=132)//ESC,CMD81,SUB03,LEN=6,err,CheckSum    见err表int WriteFlash(int dataLength,int dataAddress,unsigned char *data){   int err=0;  unsigned char write_flash_command[200] = {0x1b,0x81,0x03,0,0,0};  unsigned char return_buf[20];  memset(&write_flash_command[3],0x0,197);  write_flash_command[3] = 9 + dataLength;  //命令长度  memmove(&write_flash_command[4],(unsigned char *)&dataAddress,4);  memmove(&write_flash_command[8],data,dataLength);  memset(return_buf,0x0,20);  err = SendCommand(write_flash_command,write_flash_command[3],return_buf);  //接收数据  if(err || return_buf[4])  { if(err)  return err;    else     return 0x86; //return return_buf[4];   //Flash页读写失败  }  return err;}//---------------------------------------------------------------------------//从 flash rom 读//ESC,CMD81,SUB04,LEN=10,addr(long),len,CheckSum   (MAX len =132)//ESC,CMD81,SUB04,LEN=5+数据长,data数据,CheckSumint ReadFlash(int dataLength,unsigned long dataAddress,unsigned char *data){   int err;  unsigned char read_flash_command[20] = {0x1b,0x81,0x04,10,0};  unsigned char return_buf[200];  memset(&read_flash_command[4],0x0,16);  memset(return_buf,0x0,200);  memmove(&read_flash_command[4],(unsigned char *)&dataAddress,4); //读数据起始地址  read_flash_command[8] = dataLength;  //读出数据长度  err = SendCommand(read_flash_command,read_flash_command[3],return_buf);  //发送命令  if(err)  return err;  memmove(data,&return_buf[4],dataLength);  return err;}//---------------------------------------------------------------------------//Eeprom_Add_18  3个字节 为本次税控器命令执行状态 // 第一个字节 是命令号 // 第二个字节 命令执行状态(如果和第一个字节相同表示命令已完成)   // 第三个字节 打印执行状态(如果和前两个字节相同表示打印已完成)// 需要相应的命令包括: 82 83 84 85 87 88 8c 8d 93 98int WriteFunAppState(unsigned char command_number){  int err;	  unsigned char state[5];   //状态  memset(state,0x0,5);	  state[0] = command_number;	  err = WriteEeprom(EepromAdd_18+2,1,state);  //EepromAdd_18+2 //写此标志表示此命令已执行完成  return err;}//---------------------------------------------------------------------------//得到卡状态//ESC,CMD81,SUB05,LEN=5,CheckSum//ESC,CMD81,SUB05,LEN=7,card_in(卡插入),type(卡类型),CheckSum//卡插入=1; 卡类型 >= 0x10->45db041卡,>=0x01->用户卡,>=0x02->管理卡int GetCardState(unsigned char *ifCardInfix,unsigned char *cardType){  int err;  unsigned char get_card_state_command[] = {0x1b,0x81,0x05,5,0,0};  unsigned char return_buf[20];  memset(return_buf,0x0,20);  err = SendCommand(get_card_state_command,get_card_state_command[3],return_buf);  //发送命令  if(err)  return err;  *ifCardInfix = return_buf[4];  *cardType = return_buf[5];  return err;}//---------------------------------------------------------------------------//向 IC 卡 写 (AT45DB041)//ESC,CMD81,SUB06,LEN=9+数据长,addr(long),data数据,CheckSum  (MAX数据长=132)//ESC,CMD81,SUB06,LEN=6,err,CheckSum    见err表int Write45DB041Card(int dataLength,unsigned char *writeData,int writeAddress){            int err;  unsigned char write_45DB041card_command[150] = {0x1b,0x81,0x06,0,0};  unsigned char return_buf[20];  memset(&write_45DB041card_command[3],0x0,147);  write_45DB041card_command[3] = 9+dataLength;  memmove(&write_45DB041card_command[4],(unsigned char *)&writeAddress,4);  memmove(&write_45DB041card_command[8],writeData,dataLength);  err = SendCommand(write_45DB041card_command,write_45DB041card_command[3],return_buf);  //发送命令  if(err || return_buf[4])  { if(err)  return err;    else     return return_buf[4];  }  return err;}//---------------------------------------------------------------------------//显示 一个字//ESC,CMD81,SUB08,LEN=7,pos(显示位置0--15),char(要显示的asc字符),CheckSumvoid LCDShowChar(unsigned char buf,int position){  unsigned char show_command[30] = {0x1b,0x81,0x08,7,0,0,0,0};            int err;              show_command[4] = position;  //字符显示位置  show_command[5] = buf;  //所显示的字符  //idComm1 = ComPortInit( SKPORT , 9600 );  idComm1 = ComPortInit( SKPORT , 38400 );  if(idComm1 == -1)  return;  //打开串口失败  err = SendOneCommand(show_command,show_command[3]);  //发送命令    close(idComm1);  //关闭串口  sleep(1);      printf("LCDShowChar Function err=%d\n",err);}//---------------------------------------------------------------------------//显示 一行字//ESC,CMD81,SUB09,LEN=5+16,str[16](要显示的字符串,不足补0x20),CheckSumvoid LCDShowLineString(unsigned char *buf){  unsigned char show_command[30] = {0x1b,0x81,0x09,5+16,0};            int err,length;  memset(&show_command[4],0x20,10);  length = strlen(buf);  if(length > 16)    length = 16;  memmove(&show_command[4],buf,length);  //idComm1 = ComPortInit( SKPORT , 9600 );  idComm1 = ComPortInit( SKPORT , 38400 );  if(idComm1 == -1)  return;  //打开串口失败  err = SendOneCommand(show_command,show_command[3]);  //发送命令  close(idComm1);  //关闭串口  sleep(1);  printf("LCDShowLineString Function err=%d\n",err);}//---------------------------------------------------------------------------//显示 时钟//ESC,CMD81,SUB0A,LEN=5,CheckSumvoid LCDShowData(void){  unsigned char show_command[10] = {0x1b,0x81,0x0a,5,0};            int err;  //idComm1 = ComPortInit( SKPORT , 9600 );  idComm1 = ComPortInit( SKPORT , 38400 );  if(idComm1 == -1)  return;  //打开串口失败  err = SendOneCommand(show_command,show_command[3]);  //发送命令  close(idComm1);  //关闭串口  printf("LCDShowData Function err=%d\n",err);}//---------------------------------------------------------------------------//进入 自检//ESC,CMD81,SUB0B,LEN=5,CheckSum//ESC,CMD81,SUB0B,LEN=6,err,CheckSumint IntoTest(void){  int err=0;  unsigned char into_test_command[] = {0x1b,0x81,0x0b,5,0,0};  unsigned char return_buf[20];  memset(return_buf,0x0,20);  err = SendCommand(into_test_command,into_test_command[3],return_buf);  //接收数据  if(err || return_buf[4])  { if(err)  return err;    else     return return_buf[4];  }  return err;}//---------------------------------------------------------------------------//税控初始化时向Flash写一页日期//ESC,CMD81,SUB0d,LEN=5+24,DATA...,CheckSum//ESC,CMD81,SUB0d,LEN=6,err,CheckSum//参数: DATA格式: 页号(short int)、写入日期个数(1byte)、本页起始偏移地址(1byte)、写入第一个日期字节数(1byte)//                、写入第二个日期字节数(1byte)写入第三个日期字节数(1byte)、日期数据(12byte) 19个字节int WritePageFlash(unsigned char *data){    int err=0;   unsigned char write_page_flash_command[30] = {0x1b,0x81,0x0d,5+19,0,0};   unsigned char return_buf[20];  memmove(&write_page_flash_command[4],data,19);  err = SendCommand(write_page_flash_command,write_page_flash_command[3],return_buf);  //接收数据  if(err || return_buf[4])  { if(err)  return err;    else     return return_buf[4];  }  usleep(50);  return err;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -