0 REM History 0 REM 3-July-2009 0 REM Implemented request via button @ERASE 0 REM $1 is the bt address of your phone 1 001CA46AAA39 0 REM $2 state 0 REM $2[0] = 49 SPP 0 REM $2[0] = 50 DUN 2 0 @INIT 40 0 REM Init variables, 0 REM set up i/o on pins 40 PRINTS"-INIT\r\n 0 REM R requested pumps by button 41 R=0 0 REM C is phone conn state 0 REM 1=connected 43 C=0 0 REM U=pumps/U 44 U=1 0 REM P=units to be pumped 45 P=0 46 PRINTS"Set 9-I Start 47 A=pioin(9); 48 PRINTS"Set 10-O Charge 49 A=pioout(10); 50 A=pioclr(10); 51 PRINTS"Set 5-I Charged 52 A=pioin(5); 53 PRINTS"Set 4-O Pump 54 A=pioout(4); 55 A=pioclr(4); 56 PRINTS"Set 11-O Indicator 57 A=pioout(11); 58 A=pioclr(11); 0 REM Register pin 9 only 0 REM for pump start signal. 59 A=pioirq"P00000000100"; 60 RETURN @IDLE 60 0 REM switch profile based on $2 0 REM 2=ASCII 50 60 A=pioset(11); 61 A=pioclr(11); 62 IF$2[0]=50THEN65 63 A=slave-2 64 RETURN 0 REM DUN profile 65 A=dun$1 66 RETURN @SLAVE 70 0 REM 5 sec to enter + 70 TIMEOUTS 5 71 INPUTS $0 0 REM enter + for SPP 72 IF$0[0]=43THEN77 73 $2="2" 0 REM disconnect SPP 74 A=disconnect 0 76 RETURN 0 REM SPP - start shell 77 $2="1" 78 A=shell 79 PRINTS"\r\n-iPump Ready\r\n 80 RETURN 0 REM Master @MASTER 90 90 ALARM 2 91 RETURN @PIN 100 95 $0="1234 96 RETURN 0 REM Handle button press 0 REM requests. 0 REM Use ALARM as this 0 REM get interrupted 0 REM by PIO_IRQ which 0 REM is perfect as user 0 REM just passes for 3 0 REM seconds once they 0 REM have made their 0 REM requests. @PIO_IRQ 100 100 PRINTS"-PIO_IRQ\r\n"; 102 A=pioget(9); 103 IFA=1THEN107; 106 RETURN; 0 REM 0 if R>0 in confirm 0 REM phase 107 IFR=0THEN113 0 REM Use has confirmed, 0 REM do pumping. 108 PRINTS"Confirm start\r\n"; 109 R=0; 0 REM Confirm pumping will start 110 GOSUB400; 0 REM do pumping 111 GOSUB200; 112 RETURN; 113 P=P+1; 114 PRINTS"Requested "; 115 PRINTS P; 116 PRINTS" pumps\r\n"; 0 REM Confirm to user 117 GOSUB400; 0 REM 117 A=pioset(11); 0 REM 118 FORF=1TO8 0 REM 119 NEXTF 0 REM 120 A=pioclr(11); 121 PRINTS"..confirmed\r\n"; 122 ALARM 3; 123 RETURN; @ALARM 170 170 PRINTS"ALARM\r\n"; 0 REM If P>0 the user has 0 REM requested units. 171 IFP=0THEN190 0 REM if R>0 then cancel 0 REM pumping 172 IFR=0THEN182 173 R=0; 174 P=0; 175 PRINTS"Pumping aborted\r\n"; 176 RETURN; 182 PRINTS"Req user confirm\r\n"; 0 REM store requested pump 0 REM and use to determine 0 REM user confirm 183 R=P; 0 REM must now confirm with 0 REM user. 0 REM 184 A=pioset(11); 0 REM 185 FORF=1TO8 0 REM 186 NEXTF 0 REM 187 A=pioclr(11); 184 GOSUB400 0 REM User must now press again 0 REM to confirm before pump 0 REM starts. Check by seeing 0 REM P>R. Set off alarm again 0 REM as no response in 3 0 REM 3 secs means pumping cancelled. 185 ALARM 3 0 REM 188 PRINTS"User confirm2\r\n"; 189 RETURN 190 IFC=1THEN200 191 GOTO250; 192 RETURN 200 $0="Start pump"; 201 GOSUB600; 202 FORE=1TOP 203 FORF=1TOU 204 $0="Pump unit part "; 205 PRINTV F; 206 PRINTV"/"; 207 PRINTV U; 208 GOSUB600; 209 PRINTS"Charging..."; 210 A=pioset(10); 211 A=pioget(5); 212 IFA=1THEN211 213 PRINTS"done\r\n"; 214 A=pioclr(10); 215 PRINTS"Pumping..."; 216 A=pioirq"P00000000000"; 217 A=pioset(4); 218 A=pioclr(4); 219 A=pioirq"P00000000100"; 220 PRINTS"done\r\n"; 221 NEXTF; 222 PRINTS"Pumped units "; 223 PRINTS E; 224 PRINTS"/"; 225 PRINTS P; 226 PRINTS"\r\n"; 227 NEXTE; 228 PRINTS"Pumping done!\r\n"; 229 PRINTS"\r\n"; 230 P=0; 231 RETURN 250 IFC=1THEN255 251 D=0; 252 $0="AT*SEJCOMM=1\r"; 253 PRINTM $0; 254 C=1; 255 $0[0]=0; 256 TIMEOUTM 1; 257 INPUTM $0; 258 A=strcmp "DOSE"; 259 IFA=0THEN280 260 A=strcmp "OK"; 261 IFA=0THEN281 262 A=strcmp "CONNECT"; 263 IFA=0THEN284 264 D=D+1; 265 IFD<>10THEN270 0 REM Check connection 267 $0="ACK:"; 268 GOSUB600; 269 GOTO255; 270 IFD<14THEN279 0 REM Connection lost 271 $2="0"; 273 C=0; 274 A=pioset(11); 275 A=pioclr(11); 276 A=disconnect 1; 277 A=slave-2; 278 RETURN; 279 GOTO255; 280 P=1; 281 D=0; 282 IFP=0THEN284 283 GOSUB200; 284 GOTO255; 0 REM Pulse vibrator 0 REM 400 A=pioirq"P00000000000"; 400 A=pioset(11); 402 FORF=1TO8 403 NEXTF 404 A=pioclr(11); 0 REM 405 A=pioirq"P00000000100"; 0 REM 406 PRINTS"V\r\n"; 407 RETURN 500 IFS=1THEN510 501 IFS=2THEN520 502 $0="AT*SEJCOMM=1\r" 503 PRINTM $0; 504 S=1 505 ALARM 1 506 RETURN 510 $0="X\r" 511 GOSUB 301 512 S=2 513 ALARM 1 514 RETURN 520 A=pioset(4); 521 A=pioclr(4); 522 GOSUB303; 523 ALARM 1; 524 RETURN 0 REM Print to SPP or DUN 0 REM $2[0] = 49 SPP 0 REM $2[0] = 50 DUN 600 PRINTV"\r"; 601 IFC=0THEN604 602 PRINTM$0; 603 RETURN; 604 PRINTV"\n"; 605 PRINTS$0; 606 RETURN;