Hi All,
I was wondering if anyone knows where is the ipad source code located for the TechBasic platform the design guide referring to. (tidu886.pdf, page 13, section 5.2.2)
Regards,
Tibor
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Hi All,
I was wondering if anyone knows where is the ipad source code located for the TechBasic platform the design guide referring to. (tidu886.pdf, page 13, section 5.2.2)
Regards,
Tibor
!Wireless Motor Monitoring CC2650 Radio Protocol
!Edited by M. Raleigh
!10/27/2014
!Notes
!
!
PRINT
PRINT "This is a console program to rx/tx data from the WMMU via the CC2650 BLE Radio."
PRINT
PRINT "Press the Stop button to stop this program."
PRINT
connected = 0
System.showConsole
DIM zTemp AS INTEGER
zTemp = 1
DIM modecode AS INTEGER
modecode = 93
DIM firstvalue AS INTEGER
firstvalue = 15000
DIM RXData AS INTEGER
RXData = 66
DIM commandsAllowed AS INTEGER, commandTime AS DOUBLE, delay AS DOUBLE
delay = .5
! Set up variables to hold the peripheral and the characteristics
DIM WMMURadio AS BLEPeripheral
! Create the plots and arrays to hold the plot points.
DIM p as Plot, px as PlotPoint
DIM zDataBuff(400, 2)
! Create the controls.
DIM quit AS Button, send AS Button, samples AS Button, fourier AS Button, nextKHz AS Button, nextKHz2 AS Button, nextKHz3 AS Button, nextKHz4 AS Button
! Create and initialize the global tracking variables.
fileName$ = "wmmu_data.txt"
!Init GUI
!setUpGUI
! We will look for these services.
DIM servicesHeader AS STRING, services(1) AS STRING
servicesHeader = "-0451-4000-B000-000000000000"
services(1) = "FFF0"
accel% = 1
! Start the BLE service and begin scanning for devices.
debug = 0
BLE.startBLE
DIM uuid(0) AS STRING
BLE.startScan(uuid)
! Called when a peripheral is found. If it is a WMMU, we
! initiate a connection to it and stop scanning for peripherals.
!
! Parameters:
! time - The time when the peripheral was discovered.
! peripheral - The peripheral that was discovered.
! services - List of services offered by the device.
! advertisements - Advertisements (information provided by the
! device without the need to read a service/characteristic)
! rssi - Received Signal Strength Indicator
!
SUB BLEDiscoveredPeripheral (time AS DOUBLE, _
peripheral AS BLEPeripheral, _
services() AS STRING, _
advertisements(,) AS STRING, _
rssi)
IF peripheral.bleName = "SimpleBLEPeripheral" THEN
WMMURadio = peripheral
BLE.connect(WMMURadio)
BLE.stopScan
END IF
IF peripheral.bleName = "Simple BLE Peripheral" THEN
WMMURadio = peripheral
BLE.connect(WMMURadio)
BLE.stopScan
END IF
END SUB
! Called to report information about the connection status of the
! peripheral or to report that services have been discovered.
!
! Parameters:
! time - The time when the information was received.
! peripheral - The peripheral.
! kind - The kind of call. One of
! 1 - Connection completed
! 2 - Connection failed
! 3 - Connection lost
! 4 - Services discovered
! message - For errors, a human-readable error message.
! err - If there was an error, the Apple error number. If there
! was no error, this value is 0.
!
SUB BLEPeripheralInfo (time AS DOUBLE, _
peripheral AS BLEPeripheral, _
kind AS INTEGER, _
message AS STRING, _
err AS LONG)
IF kind = 1 THEN
! The connection was established. Look for available services.
IF debug THEN PRINT "Connection made."
peripheral.discoverServices(uuid)
ELSE IF kind = 2 OR kind = 3 THEN
IF debug THEN PRINT "Connection lost: "; kind
BLE.connect(WMMURadio)
ELSE IF kind = 4 THEN
! Services were found. If it is one of the ones we are interested
! in, begin discovery of its characteristics.
DIM availableServices(1) AS BLEService
availableServices = peripheral.services
FOR s = 1 to UBOUND(services, 1)
FOR a = 1 TO UBOUND(availableServices, 1)
print availableServices(a).uuid
IF services(s) = availableServices(a).uuid THEN
IF debug THEN PRINT "Discovering characteristics for "; services(s)
peripheral.discoverCharacteristics(uuid, availableServices(a))
END IF
NEXT
NEXT
END IF
END SUB
! Called to report information about a characteristic or included
! services for a service. If it is one we are interested in, start
! handling it.
!
! Parameters:
! time - The time when the information was received.
! peripheral - The peripheral.
! service - The service whose characteristic or included
! service was found.
! kind - The kind of call. One of
! 1 - Characteristics found
! 2 - Included services found
! message - For errors, a human-readable error message.
! err - If there was an error, the Apple error number. If there
! was no error, this value is 0.
!
SUB BLEServiceInfo (time AS DOUBLE, _
peripheral AS BLEPeripheral, _
service AS BLEService, _
kind AS INTEGER, _
message AS STRING, _
err AS LONG)
IF kind = 1 THEN
! Get the characteristics.
DIM characteristics(1) AS BLECharacteristic
characteristics = service.characteristics
FOR i = 1 TO UBOUND(characteristics, 1)
IF service.uuid = services(accel%) THEN
! Found the accelerometer.
print characteristics(i).uuid
SELECT CASE characteristics(i).uuid
CASE "FFF1"
! Tell the CC2650 to begin sending data.
IF debug THEN PRINT "Write Command"
DIM value(1) as INTEGER
value(1) = modecode
peripheral.writeCharacteristic(characteristics(i), value, 1)
connected=1
!peripheral.setNotify(characteristics(i), 1)
peripheral.readCharacteristic(characteristics(i))
CASE "FFF5"
!Used to recieve the actual wmmu fft data
IF debug THEN PRINT "RXing FFT Data"
DIM RXData(1) as INTEGER
!peripheral.setNotify(characteristics(i), 1)
peripheral.readCharacteristic(characteristics(i))
CASE "F000AA12" & servicesHeader
! Turn the accelerometer sensor on.
IF debug THEN PRINT "Accelerometer on."
DIM value(1) as INTEGER
value(1) = 1
peripheral.writeCharacteristic(characteristics(i), value, 1)
CASE "F000AA13" & servicesHeader
! Set the sample rate to 500ms.
DIM value(1) as INTEGER
value(1) = 50
IF debug THEN PRINT "Setting accelerometer sample rate to "; value(1)
peripheral.writeCharacteristic(characteristics(i), value, 1)
END SELECT
END IF
NEXT
END IF
END SUB
! Called to return information from a characteristic.
!
! Parameters:
! time - The time when the information was received.
! peripheral - The peripheral.
! characteristic - The characteristic whose information
! changed.
! kind - The kind of call. One of
! 1 - Called after a discoverDescriptors call.
! 2 - Called after a readCharacteristics call.
! 3 - Called to report status after a writeCharacteristics
! call.
! message - For errors, a human-readable error message.
! err - If there was an error, the Apple error number. If there
! was no error, this value is 0.
!
SUB BLECharacteristicInfo (time AS DOUBLE, _
peripheral AS BLEPeripheral, _
characteristic AS BLECharacteristic, _
kind AS INTEGER, _
message AS STRING, _
err AS LONG)
IF kind = 2 THEN
DIM value(1) AS INTEGER
value = characteristic.value
!input line$
SELECT CASE characteristic.uuid
CASE "FFF1"
! Update the accelerometer.
! IF value(1) = 94 THEN
! value(1) = 93
! ELSE
! value(1) = 94
! print value(1)
! print RXData
! END IF
value(1) = modecode
peripheral.writeCharacteristic(characteristic, value, 1)
peripheral.readCharacteristic(characteristic)
!delay = 0.2
CASE "FFF5"
! RX FFT Data
print value(1)
!print RXData
IF zTemp < 400 THEN
IF value(1) = 0 THEN
zTemp = 1
END IF
IF abs(firstvalue - value(1)) > 0 THEN
print value(2)
firstvalue=value(1)
value(1)=value(2)
FOR x = 1 TO 20
!print value(x)
zDataBuff(zTemp, 2) = value(x)
zTemp = zTemp + 1
NEXT
END IF
ELSE
setUpGUI
zTemp = 1
END IF
peripheral.readCharacteristic(characteristic)
END SELECT
ELSE IF kind = 3 AND err <> 0 THEN
PRINT "Error writing "; characteristic.uuid; ": ("; err; ") "; message
END IF
END SUB
!SUB nullEvent (time AS DOUBLE)
! IF connected = 1 THEN
! DIM characteristics(1) AS BLECharacteristic
! characteristics = WMMURadio.characteristics(1)
! FOR i = 1 TO UBOUND(characteristics, 1)
! ! Found the accelerometer.
! IF chacteristics(i).uuid = "FFF1" THEN
! WMMURadio.readCharacteristic(characteristics(i))
! END IF
! NEXT
! END IF
!END SUB
! Send the last recorded data file to an email.
SUB sendData
DIM e AS eMail
e = System.newEMail
IF e.canSendMail THEN
e.setSubject("Accelerometer data")
e.setMessage("Accelerometer data")
e.addAttachment(fileName$, "text/plain")
e.send
ELSE
button = Graphics.showAlert("Can't Send", _
"Email cannot be sent from this device.")
END IF
END SUB
! Creates a new button with a gradient fill.
!
! Parameters:
! x - Horizontal location.
! y - Vertical location.
! title - Name of the button.
!
! Returns: The new button.
FUNCTION newButton (x, y, title AS STRING) AS Button
DIM b AS Button
b = Graphics.newButton(x, y)
b.setTitle(title)
b.setBackgroundColor(1, 1, 1)
b.setGradientColor(0.6, 0.6, 0.6)
newButton = b
END FUNCTION
! Set up the user interface.
SUB setUpGUI
! Tell the accelerometer to update once every 0.05 seconds.
sensors.setAccelRate(0.05)
! Initialize the plot arrays.
FOR t = 1 TO 400
zDataBuff(t, 1) = t
NEXT
! Initialize the plot and show it.
p = Graphics.newPlot
p.setTitle("WMMU GRAPH DATA")
p.setXAxisLabel("Sample Number (X 2.4 = Hertz)")
p.setYAxisLabel("Magnitude")
p.showGrid(1)
p.setGridColor(0.8, 0.8, 0.8)
p.setAllowedGestures($0042)
px = p.newPlot(zDataBuff)
px.setColor(0, 1, 0)
px.setPointColor(0, 1, 0)
! Set the plot range and domain. This must be done
! after adding the first PlotPoint, since that also
! sets the range and domain.
p.setView(0, -1, 400, 256, 0)
! Show the graphics screen. Pass 1 as the parameter
! for full-screen mode.
system.showGraphics(1)
! Lock the screen in the current orientation.
orientation = 1 << (System.orientation - 1)
System.setAllowedOrientations(orientation)
! Set the plot size.
p.setRect(0, 0, Graphics.width, Graphics.height - 47)
! Draw the background.
Graphics.setPixelGraphics(0)
Graphics.setColor(0.886, 0.886, 0.886)
Graphics.fillRect(0, 0, Graphics.width, Graphics.height)
! Set up the user interface.
h = Graphics.height - 47
quit = newButton(Graphics.width - 82, h, "Quit")
send = newButton(Graphics.width - 266, h, "Send")
samples = newButton(Graphics.width - 466, h, "Samples")
fourier = newButton(Graphics.width - 566, h, "FFT(0-1KHz")
nextKHz = newButton(Graphics.width - 666, h, "FFT(1-2KHz)")
nextKHz2 = newButton(Graphics.width - 766, h, "FFT(2-3KHz)")
nextKHz3 = newButton(Graphics.width - 866, h, "FFT(3-4KHz)")
nextKHz4 = newButton(Graphics.width - 966, h, "FFT(4-5KHz)")
! If there is nothing to send, disable the Send button.
IF NOT EXISTS(fileName$) THEN
send.setEnabled(0)
END IF
END SUB
! Handle a tap on one of the buttons.
!
! Parameters:
! ctrl - The button that was tapped.
! time - The time when the event occurred.
SUB touchUpInside (ctrl AS Button, time AS DOUBLE)
IF ctrl = quit THEN
STOP
ELSE IF ctrl = send THEN
sendData
ELSE IF ctrl = samples THEN
modecode = 93
ELSE IF ctrl = fourier THEN
modecode = 94
ELSE IF ctrl = nextKHz THEN
modecode = 92
ELSE IF ctrl = nextKHz2 THEN
modecode = 91
ELSE IF ctrl = nextKHz3 THEN
modecode = 90
ELSE IF ctrl = nextKHz4 THEN
modecode = 89
END IF
END SUB
Hi,
Please see the source code in the attached file.
-Nathan
**Attention** This is a public forum