Skip to content. | Skip to navigation

Personal tools

Sections

bgdemo.bgs

Plain Text icon 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