clock

Dependencies:   mbed

Committer:
donghuoyinzi
Date:
Sat May 12 03:03:14 2018 +0000
Revision:
1:013b9fdc4e78
Parent:
0:17e9016529cf
Child:
2:e54d9d87c6cb
180512

Who changed what in which revision?

UserRevisionLine numberNew contents of line
donghuoyinzi 0:17e9016529cf 1 #include "mybc95.h"
donghuoyinzi 0:17e9016529cf 2
donghuoyinzi 1:013b9fdc4e78 3 char buf_bc95Tx[7]="";
donghuoyinzi 1:013b9fdc4e78 4 char bc95Act::buf[50]= {0x00};
donghuoyinzi 1:013b9fdc4e78 5 char bc95Act::buf_bc95Tx[buf_bc95TxSize]= {0x00};
donghuoyinzi 1:013b9fdc4e78 6 char bc95Act::buf_bc95Rx[buf_bc95RxSize]= {0x00};
donghuoyinzi 1:013b9fdc4e78 7 int bc95Act::stpSe=0;
donghuoyinzi 1:013b9fdc4e78 8 int bc95Act::cnt=0;
donghuoyinzi 1:013b9fdc4e78 9 int bc95Act::cntche;
donghuoyinzi 1:013b9fdc4e78 10 int bc95Act::cntlink=0;
donghuoyinzi 1:013b9fdc4e78 11 int bc95Act::year=0;
donghuoyinzi 1:013b9fdc4e78 12 int bc95Act::mon=0;
donghuoyinzi 1:013b9fdc4e78 13 int bc95Act::day=0;
donghuoyinzi 1:013b9fdc4e78 14 int bc95Act::hour=0;
donghuoyinzi 1:013b9fdc4e78 15 int bc95Act::min=0;
donghuoyinzi 1:013b9fdc4e78 16 int bc95Act::sec=0;
donghuoyinzi 1:013b9fdc4e78 17 const int mon_table[12]= {31,28,31,30,31,30,31,31,30,31,30,31};
donghuoyinzi 0:17e9016529cf 18 /*****************************
donghuoyinzi 0:17e9016529cf 19 Fun.: base initialization of bc95。
donghuoyinzi 0:17e9016529cf 20 Desc.:
donghuoyinzi 0:17e9016529cf 21 Auth. Vesion:2017.7.2
donghuoyinzi 0:17e9016529cf 22 *****************************/
donghuoyinzi 0:17e9016529cf 23 void bc95Act::init(void)
donghuoyinzi 0:17e9016529cf 24 {
donghuoyinzi 0:17e9016529cf 25 know::uart3.baud(9600);
donghuoyinzi 0:17e9016529cf 26 know::uart3.attach(&getISR,SerialBase::RxIrq);
donghuoyinzi 0:17e9016529cf 27 }
donghuoyinzi 0:17e9016529cf 28
donghuoyinzi 0:17e9016529cf 29 /*****************************
donghuoyinzi 0:17e9016529cf 30 Fun.: initialization of bc95 start。
donghuoyinzi 0:17e9016529cf 31 Desc.:
donghuoyinzi 0:17e9016529cf 32 Auth. Vesion:2017.7.2
donghuoyinzi 0:17e9016529cf 33 *****************************/
donghuoyinzi 0:17e9016529cf 34 void bc95Act::start(void)
donghuoyinzi 0:17e9016529cf 35 {
donghuoyinzi 0:17e9016529cf 36 know::pow.write(1); //BC95POW_ON();
donghuoyinzi 0:17e9016529cf 37 wait(50);
donghuoyinzi 0:17e9016529cf 38 }
donghuoyinzi 0:17e9016529cf 39
donghuoyinzi 0:17e9016529cf 40 /*****************************
donghuoyinzi 0:17e9016529cf 41 Fun.: initialization of bc95 data。
donghuoyinzi 0:17e9016529cf 42 Desc.:
donghuoyinzi 0:17e9016529cf 43 Auth. Vesion:2017.7.2
donghuoyinzi 0:17e9016529cf 44 *****************************/
donghuoyinzi 0:17e9016529cf 45 void bc95Act::data(void)
donghuoyinzi 0:17e9016529cf 46 {
donghuoyinzi 0:17e9016529cf 47 stpSe=1;
donghuoyinzi 0:17e9016529cf 48 cnt=0;
donghuoyinzi 0:17e9016529cf 49 }
donghuoyinzi 0:17e9016529cf 50
donghuoyinzi 0:17e9016529cf 51 /*****************************
donghuoyinzi 0:17e9016529cf 52 Fun.: initialization of bc95 ready。
donghuoyinzi 0:17e9016529cf 53 Desc.:
donghuoyinzi 0:17e9016529cf 54 Auth. Vesion:2017.7.2
donghuoyinzi 0:17e9016529cf 55 *****************************/
donghuoyinzi 0:17e9016529cf 56 void bc95Act::ready(void)
donghuoyinzi 0:17e9016529cf 57 {
donghuoyinzi 0:17e9016529cf 58
donghuoyinzi 0:17e9016529cf 59 }
donghuoyinzi 0:17e9016529cf 60
donghuoyinzi 0:17e9016529cf 61 /*****************************
donghuoyinzi 0:17e9016529cf 62 Fun.: bc95 revoke
donghuoyinzi 0:17e9016529cf 63 Desc.:
donghuoyinzi 0:17e9016529cf 64 Auth. Vesion:2017.7.2
donghuoyinzi 0:17e9016529cf 65 *****************************/
donghuoyinzi 0:17e9016529cf 66 void bc95Act::revok(void)
donghuoyinzi 0:17e9016529cf 67 {
donghuoyinzi 0:17e9016529cf 68 know::pow.write(0); //BC95POW_OFF();
donghuoyinzi 0:17e9016529cf 69 }
donghuoyinzi 0:17e9016529cf 70
donghuoyinzi 0:17e9016529cf 71 /*****************************
donghuoyinzi 0:17e9016529cf 72 Fun.: get time。
donghuoyinzi 0:17e9016529cf 73 Desc.:
donghuoyinzi 0:17e9016529cf 74 Auth. Vesion:2017.7.2
donghuoyinzi 0:17e9016529cf 75 *****************************/
donghuoyinzi 0:17e9016529cf 76 void bc95Act::get_tim(void)
donghuoyinzi 0:17e9016529cf 77 {
donghuoyinzi 1:013b9fdc4e78 78 tm *tim;
donghuoyinzi 1:013b9fdc4e78 79 time_t seconds=time(NULL);
donghuoyinzi 1:013b9fdc4e78 80 tim=localtime(&seconds);
donghuoyinzi 1:013b9fdc4e78 81
donghuoyinzi 1:013b9fdc4e78 82 buf_bc95Tx[0]=char(tim->tm_year-100);
donghuoyinzi 1:013b9fdc4e78 83 buf_bc95Tx[1]=char(tim->tm_mon);
donghuoyinzi 1:013b9fdc4e78 84 buf_bc95Tx[2]=char(tim->tm_mday);
donghuoyinzi 1:013b9fdc4e78 85 buf_bc95Tx[3]=char(tim->tm_hour);
donghuoyinzi 1:013b9fdc4e78 86 buf_bc95Tx[4]=char(tim->tm_min);
donghuoyinzi 1:013b9fdc4e78 87 buf_bc95Tx[5]=char(tim->tm_sec);
donghuoyinzi 0:17e9016529cf 88 }
donghuoyinzi 0:17e9016529cf 89
donghuoyinzi 0:17e9016529cf 90 /*****************************
donghuoyinzi 0:17e9016529cf 91 Fun.: get know。
donghuoyinzi 0:17e9016529cf 92 Desc.:
donghuoyinzi 0:17e9016529cf 93 Auth. Vesion:2017.7.2
donghuoyinzi 0:17e9016529cf 94 *****************************/
donghuoyinzi 0:17e9016529cf 95 void bc95Act::get_knw(void)
donghuoyinzi 0:17e9016529cf 96 {
donghuoyinzi 0:17e9016529cf 97 if(bc95Act::stpSe==1){
donghuoyinzi 0:17e9016529cf 98 know::uart3.printf("AT+CCLK?\r\n");
donghuoyinzi 0:17e9016529cf 99 jump_Judg(2,250);
donghuoyinzi 0:17e9016529cf 100
donghuoyinzi 0:17e9016529cf 101 }
donghuoyinzi 0:17e9016529cf 102 if(bc95Act::stpSe==2) CheckOK(200,1,10); //10是最大的查询次数
donghuoyinzi 0:17e9016529cf 103 if(bc95Act::stpSe==250){ //规范250是失败
donghuoyinzi 1:013b9fdc4e78 104 know::polSta[15]="2";
donghuoyinzi 0:17e9016529cf 105 bc95Act::stpSe=0;
donghuoyinzi 0:17e9016529cf 106 }
donghuoyinzi 0:17e9016529cf 107 if(bc95Act::stpSe==200){ //规范200是成功,
donghuoyinzi 0:17e9016529cf 108 bc95Act::stpSe=0;
donghuoyinzi 0:17e9016529cf 109 //know::magtsk();
donghuoyinzi 1:013b9fdc4e78 110 know::polSta[15]="1";
donghuoyinzi 0:17e9016529cf 111 }
donghuoyinzi 0:17e9016529cf 112 return;
donghuoyinzi 0:17e9016529cf 113 }
donghuoyinzi 0:17e9016529cf 114
donghuoyinzi 0:17e9016529cf 115 /*****************************************
donghuoyinzi 0:17e9016529cf 116 Fun.: rtc set。
donghuoyinzi 0:17e9016529cf 117 Desc.:
donghuoyinzi 0:17e9016529cf 118 Auth. Vesion:2017.7.2
donghuoyinzi 0:17e9016529cf 119 *****************************************/
donghuoyinzi 0:17e9016529cf 120 void bc95Act::setrtc(void)
donghuoyinzi 0:17e9016529cf 121 {
donghuoyinzi 0:17e9016529cf 122 uint32_t secc;
donghuoyinzi 0:17e9016529cf 123
donghuoyinzi 0:17e9016529cf 124 changdate();
donghuoyinzi 0:17e9016529cf 125 secc=changsec();
donghuoyinzi 0:17e9016529cf 126 set_time(secc);
donghuoyinzi 0:17e9016529cf 127 }
donghuoyinzi 0:17e9016529cf 128
donghuoyinzi 0:17e9016529cf 129 void bc95Act::changdate (void)
donghuoyinzi 0:17e9016529cf 130 {
donghuoyinzi 0:17e9016529cf 131 unsigned char temp1=0;
donghuoyinzi 0:17e9016529cf 132
donghuoyinzi 0:17e9016529cf 133 int i;
donghuoyinzi 0:17e9016529cf 134
donghuoyinzi 1:013b9fdc4e78 135 for(temp1=0; temp1<27; temp1++) {
donghuoyinzi 0:17e9016529cf 136 year= (buf[temp1+5]-0x30)*10+(buf [temp1+6]-0x30)+2000; //年
donghuoyinzi 0:17e9016529cf 137 mon = (buf[temp1+8]-0x30)*10+(buf [temp1+9]-0x30); //月
donghuoyinzi 0:17e9016529cf 138 day = (buf[temp1+11]-0x30)*10+(buf [temp1+12]-0x30); //日
donghuoyinzi 1:013b9fdc4e78 139
donghuoyinzi 0:17e9016529cf 140 if((buf[temp1+23]== '0') && (buf [temp1+24] == '0')) //UTC
donghuoyinzi 1:013b9fdc4e78 141 hour =(buf[temp1+14]-0x30)*10+(buf [temp1+15]-0x30)+8; //时
donghuoyinzi 0:17e9016529cf 142 else if((buf[temp1+23]== '0') && (buf [temp1+24] == '8')) //EAST 8
donghuoyinzi 1:013b9fdc4e78 143 hour=(buf[temp1+14]-0x30)*10+(buf[temp1+15]-0x30);
donghuoyinzi 0:17e9016529cf 144 else hour=(buf[temp1+14]-0x30)*10+(buf[temp1+15]-0x30)+8;
donghuoyinzi 0:17e9016529cf 145 min=(buf[temp1+17]-0x30)*10+(buf[temp1+18]-0x30); //分
donghuoyinzi 1:013b9fdc4e78 146 sec= (buf[temp1+20]-0x30)*10+(buf[temp1+21]-0x30); //秒
donghuoyinzi 0:17e9016529cf 147 }
donghuoyinzi 1:013b9fdc4e78 148 for(i=0; i<27; i++) buf[i]=0;
donghuoyinzi 0:17e9016529cf 149 }
donghuoyinzi 0:17e9016529cf 150
donghuoyinzi 0:17e9016529cf 151 uint32_t bc95Act::changsec (void)
donghuoyinzi 0:17e9016529cf 152 {
donghuoyinzi 0:17e9016529cf 153 uint16_t t;
donghuoyinzi 0:17e9016529cf 154 uint32_t seccount=0;
donghuoyinzi 0:17e9016529cf 155
donghuoyinzi 1:013b9fdc4e78 156 for(t=1970; t< year; t++) {
donghuoyinzi 0:17e9016529cf 157 if(Is_Leap_Year(t)) seccount+=31622400;
donghuoyinzi 1:013b9fdc4e78 158 else seccount+=31536000;
donghuoyinzi 0:17e9016529cf 159 }
donghuoyinzi 0:17e9016529cf 160 mon-=1;
donghuoyinzi 1:013b9fdc4e78 161 for(t=0; t< mon; t++) {
donghuoyinzi 0:17e9016529cf 162 seccount+=(uint32_t) mon_table[t]*86400;
donghuoyinzi 1:013b9fdc4e78 163 if(Is_Leap_Year(year)&&t==1) seccount+=86400;
donghuoyinzi 0:17e9016529cf 164 }
donghuoyinzi 1:013b9fdc4e78 165 seccount+=(uint32_t)( day-1)*86400;
donghuoyinzi 0:17e9016529cf 166 seccount+=(uint32_t) hour*3600;
donghuoyinzi 1:013b9fdc4e78 167 seccount+=(uint32_t) min*60;
donghuoyinzi 0:17e9016529cf 168 seccount+= sec;
donghuoyinzi 1:013b9fdc4e78 169 return seccount;
donghuoyinzi 0:17e9016529cf 170 }
donghuoyinzi 0:17e9016529cf 171
donghuoyinzi 0:17e9016529cf 172 /*****************************************
donghuoyinzi 0:17e9016529cf 173 Fun.: 闰年判断。
donghuoyinzi 0:17e9016529cf 174 Desc.:
donghuoyinzi 0:17e9016529cf 175 Auth. Vesion:2017.7.2
donghuoyinzi 0:17e9016529cf 176 *****************************************/
donghuoyinzi 0:17e9016529cf 177 uint8_t bc95Act::Is_Leap_Year(uint16_t year)
donghuoyinzi 0:17e9016529cf 178 {
donghuoyinzi 1:013b9fdc4e78 179 if(year%4==0) {
donghuoyinzi 1:013b9fdc4e78 180 if(year%100==0) {
donghuoyinzi 1:013b9fdc4e78 181 if(year%400==0)return 1;//
donghuoyinzi 1:013b9fdc4e78 182 else return 0;
donghuoyinzi 1:013b9fdc4e78 183 } else return 1;
donghuoyinzi 1:013b9fdc4e78 184 } else return 0;
donghuoyinzi 0:17e9016529cf 185 }
donghuoyinzi 0:17e9016529cf 186
donghuoyinzi 0:17e9016529cf 187 /*****************************
donghuoyinzi 0:17e9016529cf 188 Fun.: 判断AT指令返回值。
donghuoyinzi 0:17e9016529cf 189 Desc.:
donghuoyinzi 0:17e9016529cf 190 Auth. Vesion:2017.7.2
donghuoyinzi 0:17e9016529cf 191 *****************************/
donghuoyinzi 0:17e9016529cf 192 void bc95Act::jump_Judg(int Chekstep,int Nexnexstep){
donghuoyinzi 0:17e9016529cf 193 bc95Act::stpSe =Chekstep;
donghuoyinzi 0:17e9016529cf 194 bc95Act::cntche=0;
donghuoyinzi 0:17e9016529cf 195 bc95Act::cntlink++;
donghuoyinzi 0:17e9016529cf 196 if(bc95Act::cntlink>2){
donghuoyinzi 0:17e9016529cf 197 bc95Act::stpSe=Nexnexstep;
donghuoyinzi 0:17e9016529cf 198 bc95Act::cntlink=0;
donghuoyinzi 0:17e9016529cf 199 }
donghuoyinzi 0:17e9016529cf 200 }
donghuoyinzi 0:17e9016529cf 201
donghuoyinzi 0:17e9016529cf 202 void bc95Act::CheckOK(int Nexstp,int Lastp,int maxstp)
donghuoyinzi 0:17e9016529cf 203 {
donghuoyinzi 0:17e9016529cf 204 if(know::polSta[17]=="1"){
donghuoyinzi 0:17e9016529cf 205 know::polSta[17]="0";
donghuoyinzi 0:17e9016529cf 206 bc95Act::stpSe=Nexstp;
donghuoyinzi 0:17e9016529cf 207 bc95Act::cntlink=0;
donghuoyinzi 0:17e9016529cf 208 }
donghuoyinzi 0:17e9016529cf 209 else{
donghuoyinzi 0:17e9016529cf 210 bc95Act::stpSe= bc95Act::stpSe;
donghuoyinzi 0:17e9016529cf 211 bc95Act::cntche++;
donghuoyinzi 0:17e9016529cf 212 if(bc95Act::cntche>maxstp) bc95Act::stpSe=Lastp;
donghuoyinzi 0:17e9016529cf 213 }
donghuoyinzi 0:17e9016529cf 214 }
donghuoyinzi 0:17e9016529cf 215
donghuoyinzi 0:17e9016529cf 216 void bc95Act::put(void)
donghuoyinzi 0:17e9016529cf 217 {
donghuoyinzi 1:013b9fdc4e78 218 know::uart3.printf("AT+NSOCR=DGRAM,17,9090,1\r\n");
donghuoyinzi 0:17e9016529cf 219 wait_ms(50);
donghuoyinzi 1:013b9fdc4e78 220 know::uart3.printf("%s",know::polDat[2].c_str());
donghuoyinzi 0:17e9016529cf 221 wait_ms(50);
donghuoyinzi 1:013b9fdc4e78 222 know::uart3.printf("AT+NSOCL=0\r\n");
donghuoyinzi 0:17e9016529cf 223 wait_ms(50);
donghuoyinzi 0:17e9016529cf 224
donghuoyinzi 1:013b9fdc4e78 225 know::polSta[16]=1;
donghuoyinzi 0:17e9016529cf 226 }
donghuoyinzi 0:17e9016529cf 227
donghuoyinzi 0:17e9016529cf 228 /*****************************
donghuoyinzi 0:17e9016529cf 229 Fun.: bc95接收数据中断函数。
donghuoyinzi 0:17e9016529cf 230 Desc.:
donghuoyinzi 0:17e9016529cf 231 Auth. Vesion:2017.7.2
donghuoyinzi 0:17e9016529cf 232 *****************************/
donghuoyinzi 0:17e9016529cf 233 void bc95Act::getISR(void)
donghuoyinzi 0:17e9016529cf 234 {
donghuoyinzi 0:17e9016529cf 235 char buf;
donghuoyinzi 0:17e9016529cf 236
donghuoyinzi 0:17e9016529cf 237 buf=know::uart3.getc();
donghuoyinzi 0:17e9016529cf 238 bc95Act::buf[cnt]=buf;
donghuoyinzi 0:17e9016529cf 239 cnt++;
donghuoyinzi 0:17e9016529cf 240 if(cnt>5&&buf==0x0D) cnt=0;
donghuoyinzi 0:17e9016529cf 241 if(cnt>40) cnt=0;
donghuoyinzi 0:17e9016529cf 242 }