yan zhang
/
NB_CLOCK_180505
clock
myScope/mybc95.cpp@1:013b9fdc4e78, 2018-05-12 (annotated)
- 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?
User | Revision | Line number | New 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 | } |