bgdemo.bgs
bgdemo.bgs
—
Plain Text,
5 KB (5849 bytes)
File contents
dim tmp(10) dim versionString(16) dim xyz(4) dim result dim channel dim tlen dim connected dim grange(2) event system_boot(major ,minor ,patch ,build ,ll_version ,protocol_version ,hw ) #set to advertising mode call gap_set_mode(gap_general_discoverable,gap_undirected_connectable) #set bondable mode # call sm_set_bondable_mode(1) #config spi&accelerometer # # hardware_io_port_write(port, mask, data) # uint8 port I/O port to write to 0,1,2 # uint8 mask Pins to modify # uint8 data Pin values to set # call hardware_io_port_write(1,$7,$3) call hardware_io_port_config_direction(1,$7) call hardware_io_port_write(1,$7,$7) # # Accelermoter data from cma3000-d0x specification #* (MSB) A A A A A A A RW 0 (LSB) #* | | | *- always zero #* | | *--- Read / Write Bit #* \-----------*------ Register address #* so the real byte sent to SPI bus must be calculated: #* BYTE = (Address * 4) + RW*2; # Control Register port 02*4 + 01h*2 write = 0Ah # # 06h = 0000b 0110b # bit 0 = 0b -> Interrupts enabled Measurement mode: data ready # bit 3:1 = 011b -> Measurement mode, 40 Hz Output Data Rate # bit 3:1 = 001b -> Measurement mode, 100 Hz Output Data Rate # bit 6 = 0b -> INT is active when INT pin is set to logic high # bit 7 = 0b -> 8g measurement range is selected # # try 0000 0011b = 03h, no interrupts 100 Hz call hardware_spi_transfer(0,2,"\x0a\x03") call hardware_io_port_write(1,$7,$3) #set g_range gatt to default current G range of 8G call attributes_write(g_range,0,2,$00) #Set versionString buffer to "MOEDAEAccel V01?" where ? is the latest version letter versionString(0:1)=$4d versionString(1:1)=$4f versionString(2:1)=$45 versionString(3:1)=$44 versionString(4:1)=$41 versionString(5:1)=$45 versionString(6:1)=$41 versionString(7:1)=$63 versionString(8:1)=$63 versionString(9:1)=$65 versionString(10:1)=$6c versionString(11:1)=$20 versionString(12:1)=$56 versionString(13:1)=$30 versionString(14:1)=$31 versionString(15:1)=$4d # write to gatt call attributes_write(xgatt_name, 0, 16, versionString(0:16)) #set display to command mode call hardware_io_port_write(1,$7,$1) call hardware_io_port_config_direction(1,$7) #Initialize the display call hardware_spi_transfer(0,11,"\x30\x30\x30\x39\x14\x56\x6d\x70\x0c\x06\x01") #Set display to data mode call hardware_io_port_write(1,$7,$3) #Write to the display. call hardware_spi_transfer(0,16,versionString(0:16)) # Change display data address call hardware_io_port_write(1,$7,$1) call hardware_spi_transfer(0,1,"\xc0") # Write "Connect: 0" to the displays 2nd line call hardware_io_port_write(1,$7,$3) call hardware_spi_transfer(0,9,"Connect:0") #start timer interval, repeating call hardware_set_soft_timer(10000,0,0) end # Connection event listener event connection_status(connection, flags, address, address_type, conn_interval, timeout, latency, bonding) # Device is connected. connected = 1 # Change display data address # C0h = address 40h (2nd line first character) plus bit 7 high call hardware_io_port_write(1,$7,$1) call hardware_spi_transfer(0,1,"\xc0") # Write "Connect: 1" to the displays 2nd line call hardware_io_port_write(1,$7,$3) call hardware_spi_transfer(0,9,"Connect:1") end event hardware_soft_timer(handle) call hardware_io_port_write(1,$7,$7) # 18h = port 06h*4 + 0*2 = 7:0 R 0h DOUTX call hardware_spi_transfer(0,2,"\x18\x00")(result,channel,tlen,tmp(0)) call hardware_io_port_write(1,$7,$3) xyz(0:1) = tmp(1:1) call hardware_io_port_write(1,$7,$7) # 18h = port 06h*4 + 0*2 = 7:0 R 0h DOUTY call hardware_spi_transfer(0,2,"\x1c\x00")(result,channel,tlen,tmp(2)) call hardware_io_port_write(1,$7,$3) xyz(1:1) = tmp(3:1) call hardware_io_port_write(1,$7,$7) # 18h = port 06h*4 + 0*2 = 7:0 R 0h DOUTZ call hardware_spi_transfer(0,2,"\x20\x00")(result,channel,tlen,tmp(4)) call hardware_io_port_write(1,$7,$3) xyz(2:1) = tmp(5:1) call attributes_write(xyz_data,0,3,xyz(0:3)) end # Listen for GATT write events event attributes_value(connection ,reason ,handle ,offset ,value_len, value) if handle = g_range then grange(0:1) = 8 grange(1:1) = 2 #change the g range call hardware_io_port_write(1,$7,$3) call hardware_io_port_config_direction(1,$7) call hardware_io_port_write(1,$7,$7) if value(offset:1) = 0 then # 8G mode 03h or 06h call hardware_spi_transfer(0,2,"\x0a\x03") else # 2G mode, 83h call hardware_spi_transfer(0,2,"\x0a\x83") end if call hardware_io_port_write(1,$7,$3) # Change display data address call hardware_io_port_write(1,$7,$1) call hardware_spi_transfer(0,1,"\xb3") # Write "Range: 8" to the displays 2nd line call hardware_io_port_write(1,$7,$3) call hardware_spi_transfer(0,2,"R:") # Change display data address call hardware_io_port_write(1,$7,$1) call hardware_spi_transfer(0,1,"\xb5") # Write value to the displays 2nd line call hardware_io_port_write(1,$7,$3) call hardware_spi_transfer(0,2,grange(value(offset:1):1)+48) end if end event connection_disconnected(handle,result) #connection disconnected, continue advertising call gap_set_mode(gap_general_discoverable,gap_undirected_connectable) connected = 0 # Change display data address call hardware_io_port_write(1,$7,$1) call hardware_spi_transfer(0,1,"\xc0") # Write "Connect: 0" to the displays 2nd line call hardware_io_port_write(1,$7,$3) call hardware_spi_transfer(0,9,"Connect:0") end