うおーるぼっとをiPhoneでコントロールするプログラムです。 iPhoneとはBTLEで接続しています。

Dependencies:   FatFileSystem HighSpeedAnalogIn TB6612FNG2 mbed

Committer:
jksoft
Date:
Fri May 10 11:48:07 2013 +0000
Revision:
0:373bcb197dc8
?????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jksoft 0:373bcb197dc8 1 /*
jksoft 0:373bcb197dc8 2 * Copyright (C) 2011-2012 by Matthias Ringwald
jksoft 0:373bcb197dc8 3 *
jksoft 0:373bcb197dc8 4 * Redistribution and use in source and binary forms, with or without
jksoft 0:373bcb197dc8 5 * modification, are permitted provided that the following conditions
jksoft 0:373bcb197dc8 6 * are met:
jksoft 0:373bcb197dc8 7 *
jksoft 0:373bcb197dc8 8 * 1. Redistributions of source code must retain the above copyright
jksoft 0:373bcb197dc8 9 * notice, this list of conditions and the following disclaimer.
jksoft 0:373bcb197dc8 10 * 2. Redistributions in binary form must reproduce the above copyright
jksoft 0:373bcb197dc8 11 * notice, this list of conditions and the following disclaimer in the
jksoft 0:373bcb197dc8 12 * documentation and/or other materials provided with the distribution.
jksoft 0:373bcb197dc8 13 * 3. Neither the name of the copyright holders nor the names of
jksoft 0:373bcb197dc8 14 * contributors may be used to endorse or promote products derived
jksoft 0:373bcb197dc8 15 * from this software without specific prior written permission.
jksoft 0:373bcb197dc8 16 * 4. Any redistribution, use, or modification is done solely for
jksoft 0:373bcb197dc8 17 * personal benefit and not for any commercial purpose or for
jksoft 0:373bcb197dc8 18 * monetary gain.
jksoft 0:373bcb197dc8 19 *
jksoft 0:373bcb197dc8 20 * THIS SOFTWARE IS PROVIDED BY MATTHIAS RINGWALD AND CONTRIBUTORS
jksoft 0:373bcb197dc8 21 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
jksoft 0:373bcb197dc8 22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
jksoft 0:373bcb197dc8 23 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS
jksoft 0:373bcb197dc8 24 * RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
jksoft 0:373bcb197dc8 25 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
jksoft 0:373bcb197dc8 26 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
jksoft 0:373bcb197dc8 27 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
jksoft 0:373bcb197dc8 28 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
jksoft 0:373bcb197dc8 29 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
jksoft 0:373bcb197dc8 30 * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
jksoft 0:373bcb197dc8 31 * SUCH DAMAGE.
jksoft 0:373bcb197dc8 32 *
jksoft 0:373bcb197dc8 33 * Please inquire about commercial licensing options at btstack@ringwald.ch
jksoft 0:373bcb197dc8 34 *
jksoft 0:373bcb197dc8 35 */
jksoft 0:373bcb197dc8 36
jksoft 0:373bcb197dc8 37 #pragma once
jksoft 0:373bcb197dc8 38
jksoft 0:373bcb197dc8 39 #include <stdint.h>
jksoft 0:373bcb197dc8 40
jksoft 0:373bcb197dc8 41 // MARK: Attribute PDU Opcodes
jksoft 0:373bcb197dc8 42 #define ATT_ERROR_RESPONSE 0x01
jksoft 0:373bcb197dc8 43
jksoft 0:373bcb197dc8 44 #define ATT_EXCHANGE_MTU_REQUEST 0x02
jksoft 0:373bcb197dc8 45 #define ATT_EXCHANGE_MTU_RESPONSE 0x03
jksoft 0:373bcb197dc8 46
jksoft 0:373bcb197dc8 47 #define ATT_FIND_INFORMATION_REQUEST 0x04
jksoft 0:373bcb197dc8 48 #define ATT_FIND_INFORMATION_REPLY 0x05
jksoft 0:373bcb197dc8 49 #define ATT_FIND_BY_TYPE_VALUE_REQUEST 0x06
jksoft 0:373bcb197dc8 50 #define ATT_FIND_BY_TYPE_VALUE_RESPONSE 0x07
jksoft 0:373bcb197dc8 51
jksoft 0:373bcb197dc8 52 #define ATT_READ_BY_TYPE_REQUEST 0x08
jksoft 0:373bcb197dc8 53 #define ATT_READ_BY_TYPE_RESPONSE 0x09
jksoft 0:373bcb197dc8 54 #define ATT_READ_REQUEST 0x0a
jksoft 0:373bcb197dc8 55 #define ATT_READ_RESPONSE 0x0b
jksoft 0:373bcb197dc8 56 #define ATT_READ_BLOB_REQUEST 0x0c
jksoft 0:373bcb197dc8 57 #define ATT_READ_BLOB_RESPONSE 0x0d
jksoft 0:373bcb197dc8 58 #define ATT_READ_MULTIPLE_REQUEST 0x0e
jksoft 0:373bcb197dc8 59 #define ATT_READ_MULTIPLE_RESPONSE 0x0f
jksoft 0:373bcb197dc8 60 #define ATT_READ_BY_GROUP_TYPE_REQUEST 0x10
jksoft 0:373bcb197dc8 61 #define ATT_READ_BY_GROUP_TYPE_RESPONSE 0x11
jksoft 0:373bcb197dc8 62
jksoft 0:373bcb197dc8 63 #define ATT_WRITE_REQUEST 0x12
jksoft 0:373bcb197dc8 64 #define ATT_WRITE_RESPONSE 0x13
jksoft 0:373bcb197dc8 65
jksoft 0:373bcb197dc8 66 #define ATT_PREPARE_WRITE_REQUEST 0x16
jksoft 0:373bcb197dc8 67 #define ATT_PREPARE_WRITE_RESPONSE 0x17
jksoft 0:373bcb197dc8 68 #define ATT_EXECUTE_WRITE_REQUEST 0x18
jksoft 0:373bcb197dc8 69 #define ATT_EXECUTE_WRITE_RESPONSE 0x19
jksoft 0:373bcb197dc8 70
jksoft 0:373bcb197dc8 71 #define ATT_HANDLE_VALUE_NOTIFICATION 0x1b
jksoft 0:373bcb197dc8 72 #define ATT_HANDLE_VALUE_CONFIRMATION 0x1c
jksoft 0:373bcb197dc8 73 #define ATT_HANDLE_VALUE_INDICATION 0x1d
jksoft 0:373bcb197dc8 74
jksoft 0:373bcb197dc8 75
jksoft 0:373bcb197dc8 76 #define ATT_WRITE_COMMAND 0x52
jksoft 0:373bcb197dc8 77 #define ATT_SIGNED_WRITE_COMAND 0xD2
jksoft 0:373bcb197dc8 78
jksoft 0:373bcb197dc8 79 // MARK: ATT Error Codes
jksoft 0:373bcb197dc8 80 #define ATT_ERROR_ATTRIBUTE_INVALID 0x01
jksoft 0:373bcb197dc8 81 #define ATT_ERROR_INVALID_OFFSET 0x07
jksoft 0:373bcb197dc8 82 #define ATT_ERROR_ATTRIBUTE_NOT_FOUND 0x0a
jksoft 0:373bcb197dc8 83 #define ATT_ERROR_UNSUPPORTED_GROUP_TYPE 0x10
jksoft 0:373bcb197dc8 84
jksoft 0:373bcb197dc8 85 // MARK: Attribute Property Flags
jksoft 0:373bcb197dc8 86 #define ATT_PROPERTY_BROADCAST 0x01
jksoft 0:373bcb197dc8 87 #define ATT_PROPERTY_READ 0x02
jksoft 0:373bcb197dc8 88 #define ATT_PROPERTY_WRITE_WITHOUT_RESPONSE 0x04
jksoft 0:373bcb197dc8 89 #define ATT_PROPERTY_WRITE 0x08
jksoft 0:373bcb197dc8 90 #define ATT_PROPERTY_NOTIFY 0x10
jksoft 0:373bcb197dc8 91 #define ATT_PROPERTY_INDICATE 0x20
jksoft 0:373bcb197dc8 92 #define ATT_PROPERTY_AUTHENTICATED_SIGNED_WRITE 0x40
jksoft 0:373bcb197dc8 93 #define ATT_PROPERTY_EXTENDED_PROPERTIES 0x80
jksoft 0:373bcb197dc8 94
jksoft 0:373bcb197dc8 95 // MARK: Attribute Property Flag, BTstack extension
jksoft 0:373bcb197dc8 96 // value is asked from client
jksoft 0:373bcb197dc8 97 #define ATT_PROPERTY_DYNAMIC 0x100
jksoft 0:373bcb197dc8 98 // 128 bit UUID used
jksoft 0:373bcb197dc8 99 #define ATT_PROPERTY_UUID128 0x200
jksoft 0:373bcb197dc8 100
jksoft 0:373bcb197dc8 101 // MARK: GATT UUIDs
jksoft 0:373bcb197dc8 102 #define GATT_PRIMARY_SERVICE_UUID 0x2800
jksoft 0:373bcb197dc8 103 #define GATT_SECONDARY_SERVICE_UUID 0x2801
jksoft 0:373bcb197dc8 104 #define GATT_CHARACTERISTICS_UUID 0x2803
jksoft 0:373bcb197dc8 105
jksoft 0:373bcb197dc8 106 #define GAP_SERVICE_UUID 0x1800
jksoft 0:373bcb197dc8 107 #define GAP_DEVICE_NAME_UUID 0x2a00
jksoft 0:373bcb197dc8 108
jksoft 0:373bcb197dc8 109 #define ATT_TRANSACTION_MODE_NONE 0x0
jksoft 0:373bcb197dc8 110 #define ATT_TRANSACTION_MODE_ACTIVE 0x1
jksoft 0:373bcb197dc8 111 #define ATT_TRANSACTION_MODE_EXECUTE 0x2
jksoft 0:373bcb197dc8 112 #define ATT_TRANSACTION_MODE_CANCEL 0x3
jksoft 0:373bcb197dc8 113
jksoft 0:373bcb197dc8 114 typedef struct att_connection {
jksoft 0:373bcb197dc8 115 uint16_t mtu;
jksoft 0:373bcb197dc8 116 } att_connection_t;
jksoft 0:373bcb197dc8 117
jksoft 0:373bcb197dc8 118 typedef uint8_t signature_t[12];
jksoft 0:373bcb197dc8 119
jksoft 0:373bcb197dc8 120 // ATT Client Read Callback for Dynamic Data
jksoft 0:373bcb197dc8 121 // - if buffer == NULL, don't copy data, just return size of value
jksoft 0:373bcb197dc8 122 // - if buffer != NULL, copy data and return number bytes copied
jksoft 0:373bcb197dc8 123 // @param offset defines start of attribute value
jksoft 0:373bcb197dc8 124 typedef uint16_t (*att_read_callback_t)(uint16_t handle, uint16_t offset, uint8_t * buffer, uint16_t buffer_size);
jksoft 0:373bcb197dc8 125
jksoft 0:373bcb197dc8 126 // ATT Client Write Callback for Dynamic Data
jksoft 0:373bcb197dc8 127 // @param handle to be written
jksoft 0:373bcb197dc8 128 // @param transaction - ATT_TRANSACTION_MODE_NONE for regular writes, ATT_TRANSACTION_MODE_ACTIVE for prepared writes and ATT_TRANSACTION_MODE_EXECUTE
jksoft 0:373bcb197dc8 129 // @param offset into the value - used for queued writes and long attributes
jksoft 0:373bcb197dc8 130 // @param buffer
jksoft 0:373bcb197dc8 131 // @param buffer_size
jksoft 0:373bcb197dc8 132 // @Param signature used for signed write commmands
jksoft 0:373bcb197dc8 133 typedef void (*att_write_callback_t)(uint16_t handle, uint16_t transaction_mode, uint16_t offset, uint8_t *buffer, uint16_t buffer_size, signature_t * signature);
jksoft 0:373bcb197dc8 134
jksoft 0:373bcb197dc8 135 // MARK: ATT Operations
jksoft 0:373bcb197dc8 136
jksoft 0:373bcb197dc8 137 void att_set_db(uint8_t const * db);
jksoft 0:373bcb197dc8 138
jksoft 0:373bcb197dc8 139 void att_set_read_callback(att_read_callback_t callback);
jksoft 0:373bcb197dc8 140
jksoft 0:373bcb197dc8 141 void att_set_write_callback(att_write_callback_t callback);
jksoft 0:373bcb197dc8 142
jksoft 0:373bcb197dc8 143 void att_dump_attributes(void);
jksoft 0:373bcb197dc8 144
jksoft 0:373bcb197dc8 145 // response buffer size = att_connection->mtu
jksoft 0:373bcb197dc8 146 uint16_t att_handle_request(att_connection_t * att_connection,
jksoft 0:373bcb197dc8 147 uint8_t * request_buffer,
jksoft 0:373bcb197dc8 148 uint16_t request_len,
jksoft 0:373bcb197dc8 149 uint8_t * response_buffer);
jksoft 0:373bcb197dc8 150
jksoft 0:373bcb197dc8 151 uint16_t att_prepare_handle_value_notification(att_connection_t * att_connection,
jksoft 0:373bcb197dc8 152 uint16_t handle,
jksoft 0:373bcb197dc8 153 uint8_t *value,
jksoft 0:373bcb197dc8 154 uint16_t value_len,
jksoft 0:373bcb197dc8 155 uint8_t * response_buffer);
jksoft 0:373bcb197dc8 156
jksoft 0:373bcb197dc8 157 uint16_t att_prepare_handle_value_indication(att_connection_t * att_connection,
jksoft 0:373bcb197dc8 158 uint16_t handle,
jksoft 0:373bcb197dc8 159 uint8_t *value,
jksoft 0:373bcb197dc8 160 uint16_t value_len,
jksoft 0:373bcb197dc8 161 uint8_t * response_buffer);
jksoft 0:373bcb197dc8 162
jksoft 0:373bcb197dc8 163
jksoft 0:373bcb197dc8 164