mbed base bard check program for BlueTooth USB dongle module (3 switches, 6 leds, I2C LCD, A/D)
Fork of BTstack by
spp_demo.cpp@3:7b7d1273e2d5, 2016-10-17 (annotated)
- Committer:
- tamaki
- Date:
- Mon Oct 17 00:25:18 2016 +0000
- Revision:
- 3:7b7d1273e2d5
- Parent:
- 1:b657594559be
mbed base bard check program
; for BlueTooth USB dongle module
; (3 switches, 6 leds, I2C LCD, A/D)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tamaki | 3:7b7d1273e2d5 | 1 | #if 1 |
va009039 | 0:1ed23ab1345f | 2 | /* |
va009039 | 0:1ed23ab1345f | 3 | * spp_demo |
tamaki | 3:7b7d1273e2d5 | 4 | VS-02 android remotecontroler application |
tamaki | 3:7b7d1273e2d5 | 5 | mbed LED1,LED2,LED3,LED4 on/off control |
tamaki | 3:7b7d1273e2d5 | 6 | serial baudrate = 921600,8bit,stop 1bit,none parity |
va009039 | 0:1ed23ab1345f | 7 | */ |
tamaki | 3:7b7d1273e2d5 | 8 | //mbed pin layout |
tamaki | 3:7b7d1273e2d5 | 9 | //1 GND |
tamaki | 3:7b7d1273e2d5 | 10 | //2 |
tamaki | 3:7b7d1273e2d5 | 11 | //3 |
tamaki | 3:7b7d1273e2d5 | 12 | //4 |
tamaki | 3:7b7d1273e2d5 | 13 | //5 SD SDI |
tamaki | 3:7b7d1273e2d5 | 14 | //6 SD SDO |
tamaki | 3:7b7d1273e2d5 | 15 | //7 SD SCK |
tamaki | 3:7b7d1273e2d5 | 16 | //8 SD CS |
tamaki | 3:7b7d1273e2d5 | 17 | //9 I2C sda |
tamaki | 3:7b7d1273e2d5 | 18 | //10 I2C sci |
tamaki | 3:7b7d1273e2d5 | 19 | //11 SPI mosi |
tamaki | 3:7b7d1273e2d5 | 20 | //12 SPI miso |
tamaki | 3:7b7d1273e2d5 | 21 | //13 SPI sck |
tamaki | 3:7b7d1273e2d5 | 22 | //14 SW0 |
tamaki | 3:7b7d1273e2d5 | 23 | //15 SW1 |
tamaki | 3:7b7d1273e2d5 | 24 | //16 SW2 |
tamaki | 3:7b7d1273e2d5 | 25 | //17 Vr |
tamaki | 3:7b7d1273e2d5 | 26 | //18 D/A |
tamaki | 3:7b7d1273e2d5 | 27 | //19 Ain1 |
tamaki | 3:7b7d1273e2d5 | 28 | //20 |
tamaki | 3:7b7d1273e2d5 | 29 | //21 PWMOut1 |
tamaki | 3:7b7d1273e2d5 | 30 | //22 PWMOut2 |
tamaki | 3:7b7d1273e2d5 | 31 | //23 PWMOut3 |
tamaki | 3:7b7d1273e2d5 | 32 | //24 PWMOut4 |
tamaki | 3:7b7d1273e2d5 | 33 | //25 PWMOut5 |
tamaki | 3:7b7d1273e2d5 | 34 | //26 PWMOut6 |
tamaki | 3:7b7d1273e2d5 | 35 | //27 LCD scl : ACM1602NI-4(ACM1602NI 1Vss,2Vdd,3Vo,4SCL,5SDA,6LED+,7LED-) |
tamaki | 3:7b7d1273e2d5 | 36 | //28 LCD sda : ACM1602NI-5 |
tamaki | 3:7b7d1273e2d5 | 37 | //29 |
tamaki | 3:7b7d1273e2d5 | 38 | //30 |
tamaki | 3:7b7d1273e2d5 | 39 | //31 USB D+ |
tamaki | 3:7b7d1273e2d5 | 40 | //32 USB D- |
tamaki | 3:7b7d1273e2d5 | 41 | // |
tamaki | 3:7b7d1273e2d5 | 42 | /* |
tamaki | 3:7b7d1273e2d5 | 43 | 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
tamaki | 3:7b7d1273e2d5 | 44 | 0 0 0 0 1 S0 S1 S2 1 0 2 3 "LeftArrow" "RightArrow" |
tamaki | 3:7b7d1273e2d5 | 45 | 1 |
tamaki | 3:7b7d1273e2d5 | 46 | */ |
tamaki | 3:7b7d1273e2d5 | 47 | |
va009039 | 0:1ed23ab1345f | 48 | #include "mbed.h" |
va009039 | 0:1ed23ab1345f | 49 | #include <btstack/hci_cmds.h> |
va009039 | 0:1ed23ab1345f | 50 | #include <btstack/run_loop.h> |
va009039 | 0:1ed23ab1345f | 51 | #include <btstack/sdp_util.h> |
va009039 | 0:1ed23ab1345f | 52 | #include "hci.h" |
va009039 | 0:1ed23ab1345f | 53 | #include "l2cap.h" |
va009039 | 0:1ed23ab1345f | 54 | #include "btstack_memory.h" |
va009039 | 0:1ed23ab1345f | 55 | #include "remote_device_db.h" |
va009039 | 0:1ed23ab1345f | 56 | #include "rfcomm.h" |
va009039 | 1:b657594559be | 57 | extern "C" { |
va009039 | 0:1ed23ab1345f | 58 | #include "sdp.h" |
va009039 | 1:b657594559be | 59 | } |
va009039 | 0:1ed23ab1345f | 60 | #include "config.h" |
va009039 | 0:1ed23ab1345f | 61 | #include "debug.h" |
va009039 | 0:1ed23ab1345f | 62 | #include "bd_addr.h" // class bd_addr |
va009039 | 0:1ed23ab1345f | 63 | |
tamaki | 3:7b7d1273e2d5 | 64 | #include "ACM1602NI.h" |
tamaki | 3:7b7d1273e2d5 | 65 | //#include "SDFileSystem.h" |
tamaki | 3:7b7d1273e2d5 | 66 | |
va009039 | 0:1ed23ab1345f | 67 | Serial pc(USBTX, USBRX); |
tamaki | 3:7b7d1273e2d5 | 68 | |
tamaki | 3:7b7d1273e2d5 | 69 | DigitalOut brd_led1(LED1), brd_led2(LED2), brd_led3(LED3), brd_led4(LED4); |
tamaki | 3:7b7d1273e2d5 | 70 | |
tamaki | 3:7b7d1273e2d5 | 71 | DigitalOut led1(p21); |
tamaki | 3:7b7d1273e2d5 | 72 | DigitalOut led2(p22); |
tamaki | 3:7b7d1273e2d5 | 73 | DigitalOut led3(p23); |
tamaki | 3:7b7d1273e2d5 | 74 | DigitalOut led4(p24); |
tamaki | 3:7b7d1273e2d5 | 75 | DigitalOut led5(p25); |
tamaki | 3:7b7d1273e2d5 | 76 | DigitalOut led6(p26); |
tamaki | 3:7b7d1273e2d5 | 77 | DigitalIn sw1(p14); |
tamaki | 3:7b7d1273e2d5 | 78 | DigitalIn sw2(p15); |
tamaki | 3:7b7d1273e2d5 | 79 | DigitalIn sw3(p16); |
tamaki | 3:7b7d1273e2d5 | 80 | AnalogIn vr(p17); |
tamaki | 3:7b7d1273e2d5 | 81 | |
tamaki | 3:7b7d1273e2d5 | 82 | /* |
tamaki | 3:7b7d1273e2d5 | 83 | SDFileSystem *Sd; |
tamaki | 3:7b7d1273e2d5 | 84 | FILE *fp; |
tamaki | 3:7b7d1273e2d5 | 85 | */ |
va009039 | 0:1ed23ab1345f | 86 | |
tamaki | 3:7b7d1273e2d5 | 87 | static Timer timer; |
tamaki | 3:7b7d1273e2d5 | 88 | static int VSC2btn[20];//VS-C2 button push then 1, other 0 |
tamaki | 3:7b7d1273e2d5 | 89 | //0:left arrow up |
tamaki | 3:7b7d1273e2d5 | 90 | //1:left arrow right |
tamaki | 3:7b7d1273e2d5 | 91 | //2:left arrow down |
tamaki | 3:7b7d1273e2d5 | 92 | //3:left arrow left |
tamaki | 3:7b7d1273e2d5 | 93 | //4:right arrow up |
tamaki | 3:7b7d1273e2d5 | 94 | //5:right arrow right |
tamaki | 3:7b7d1273e2d5 | 95 | //6:right arrow down |
tamaki | 3:7b7d1273e2d5 | 96 | //7:right arrow left |
tamaki | 3:7b7d1273e2d5 | 97 | //8:select |
tamaki | 3:7b7d1273e2d5 | 98 | //9:start |
tamaki | 3:7b7d1273e2d5 | 99 | static int module_status = 0;//0 timer set mode, 1 timer run mode, 2 timer complete |
tamaki | 3:7b7d1273e2d5 | 100 | static int time_cnt = 0;//use run mode timer counter |
tamaki | 3:7b7d1273e2d5 | 101 | static int time_set = 0;//use set mode timer counter |
tamaki | 3:7b7d1273e2d5 | 102 | |
tamaki | 3:7b7d1273e2d5 | 103 | |
tamaki | 3:7b7d1273e2d5 | 104 | //LCD class |
tamaki | 3:7b7d1273e2d5 | 105 | ACM1602NI lcd(p28, p27); //sda scl |
tamaki | 3:7b7d1273e2d5 | 106 | |
tamaki | 3:7b7d1273e2d5 | 107 | #define HEARTBEAT_PERIOD_MS 100 |
va009039 | 0:1ed23ab1345f | 108 | |
va009039 | 0:1ed23ab1345f | 109 | static uint8_t rfcomm_channel_nr = 1; |
va009039 | 0:1ed23ab1345f | 110 | static uint16_t rfcomm_channel_id = 0; |
va009039 | 0:1ed23ab1345f | 111 | static uint8_t spp_service_buffer[128]; |
va009039 | 0:1ed23ab1345f | 112 | |
tamaki | 3:7b7d1273e2d5 | 113 | static void data_recv(uint8_t *packet, uint16_t size); |
tamaki | 3:7b7d1273e2d5 | 114 | |
va009039 | 0:1ed23ab1345f | 115 | // Bluetooth logic |
va009039 | 0:1ed23ab1345f | 116 | static void packet_handler (void * connection, uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){ |
va009039 | 0:1ed23ab1345f | 117 | bd_addr_t event_addr; |
va009039 | 0:1ed23ab1345f | 118 | uint8_t rfcomm_channel_nr; |
va009039 | 0:1ed23ab1345f | 119 | uint16_t mtu; |
va009039 | 0:1ed23ab1345f | 120 | int err; |
va009039 | 0:1ed23ab1345f | 121 | switch (packet_type) { |
va009039 | 0:1ed23ab1345f | 122 | case HCI_EVENT_PACKET: |
va009039 | 0:1ed23ab1345f | 123 | switch (packet[0]) { |
va009039 | 0:1ed23ab1345f | 124 | |
va009039 | 0:1ed23ab1345f | 125 | case BTSTACK_EVENT_STATE: |
va009039 | 0:1ed23ab1345f | 126 | // bt stack activated, get started - set local name |
va009039 | 0:1ed23ab1345f | 127 | if (packet[2] == HCI_STATE_WORKING) { |
tamaki | 3:7b7d1273e2d5 | 128 | hci_send_cmd(&hci_write_local_name, "mbed seminar"); |
va009039 | 0:1ed23ab1345f | 129 | } |
va009039 | 0:1ed23ab1345f | 130 | break; |
va009039 | 0:1ed23ab1345f | 131 | |
va009039 | 0:1ed23ab1345f | 132 | case HCI_EVENT_COMMAND_COMPLETE: |
va009039 | 0:1ed23ab1345f | 133 | if (COMMAND_COMPLETE_EVENT(packet, hci_read_bd_addr)){ |
va009039 | 0:1ed23ab1345f | 134 | bt_flip_addr(event_addr, &packet[6]); |
va009039 | 0:1ed23ab1345f | 135 | log_info("BD-ADDR: %s\n\r", bd_addr_to_str(event_addr)); |
va009039 | 0:1ed23ab1345f | 136 | break; |
va009039 | 0:1ed23ab1345f | 137 | } |
va009039 | 0:1ed23ab1345f | 138 | if (COMMAND_COMPLETE_EVENT(packet, hci_write_local_name)){ |
va009039 | 0:1ed23ab1345f | 139 | hci_discoverable_control(1); |
va009039 | 0:1ed23ab1345f | 140 | break; |
va009039 | 0:1ed23ab1345f | 141 | } |
va009039 | 0:1ed23ab1345f | 142 | break; |
va009039 | 0:1ed23ab1345f | 143 | |
va009039 | 0:1ed23ab1345f | 144 | case HCI_EVENT_LINK_KEY_REQUEST: |
va009039 | 0:1ed23ab1345f | 145 | // deny link key request |
va009039 | 0:1ed23ab1345f | 146 | log_info("Link key request\n\r"); |
va009039 | 0:1ed23ab1345f | 147 | bt_flip_addr(event_addr, &packet[2]); |
va009039 | 0:1ed23ab1345f | 148 | hci_send_cmd(&hci_link_key_request_negative_reply, &event_addr); |
va009039 | 0:1ed23ab1345f | 149 | break; |
va009039 | 0:1ed23ab1345f | 150 | |
va009039 | 0:1ed23ab1345f | 151 | case HCI_EVENT_PIN_CODE_REQUEST: |
va009039 | 0:1ed23ab1345f | 152 | // inform about pin code request |
va009039 | 0:1ed23ab1345f | 153 | log_info("Pin code request - using '0000'\n\r"); |
va009039 | 0:1ed23ab1345f | 154 | bt_flip_addr(event_addr, &packet[2]); |
va009039 | 0:1ed23ab1345f | 155 | hci_send_cmd(&hci_pin_code_request_reply, &event_addr, 4, "0000"); |
va009039 | 0:1ed23ab1345f | 156 | break; |
va009039 | 0:1ed23ab1345f | 157 | |
va009039 | 0:1ed23ab1345f | 158 | case RFCOMM_EVENT_INCOMING_CONNECTION: |
va009039 | 0:1ed23ab1345f | 159 | // data: event (8), len(8), address(48), channel (8), rfcomm_cid (16) |
va009039 | 0:1ed23ab1345f | 160 | bt_flip_addr(event_addr, &packet[2]); |
va009039 | 0:1ed23ab1345f | 161 | rfcomm_channel_nr = packet[8]; |
va009039 | 0:1ed23ab1345f | 162 | rfcomm_channel_id = READ_BT_16(packet, 9); |
va009039 | 0:1ed23ab1345f | 163 | log_info("RFCOMM channel %u requested for %s\n\r", rfcomm_channel_nr, bd_addr_to_str(event_addr)); |
va009039 | 0:1ed23ab1345f | 164 | rfcomm_accept_connection_internal(rfcomm_channel_id); |
va009039 | 0:1ed23ab1345f | 165 | break; |
va009039 | 0:1ed23ab1345f | 166 | |
va009039 | 0:1ed23ab1345f | 167 | case RFCOMM_EVENT_OPEN_CHANNEL_COMPLETE: |
va009039 | 0:1ed23ab1345f | 168 | // data: event(8), len(8), status (8), address (48), server channel(8), rfcomm_cid(16), max frame size(16) |
va009039 | 0:1ed23ab1345f | 169 | if (packet[2]) { |
va009039 | 0:1ed23ab1345f | 170 | log_info("RFCOMM channel open failed, status %u\n\r", packet[2]); |
va009039 | 0:1ed23ab1345f | 171 | } else { |
va009039 | 0:1ed23ab1345f | 172 | rfcomm_channel_id = READ_BT_16(packet, 12); |
va009039 | 0:1ed23ab1345f | 173 | mtu = READ_BT_16(packet, 14); |
va009039 | 0:1ed23ab1345f | 174 | log_info("\n\rRFCOMM channel open succeeded. New RFCOMM Channel ID %u, max frame size %u\n\r", rfcomm_channel_id, mtu); |
va009039 | 0:1ed23ab1345f | 175 | } |
va009039 | 0:1ed23ab1345f | 176 | break; |
va009039 | 0:1ed23ab1345f | 177 | |
va009039 | 0:1ed23ab1345f | 178 | case RFCOMM_EVENT_CHANNEL_CLOSED: |
va009039 | 0:1ed23ab1345f | 179 | rfcomm_channel_id = 0; |
va009039 | 0:1ed23ab1345f | 180 | break; |
va009039 | 0:1ed23ab1345f | 181 | |
va009039 | 0:1ed23ab1345f | 182 | default: |
va009039 | 0:1ed23ab1345f | 183 | break; |
va009039 | 0:1ed23ab1345f | 184 | } |
va009039 | 0:1ed23ab1345f | 185 | break; |
va009039 | 0:1ed23ab1345f | 186 | |
va009039 | 0:1ed23ab1345f | 187 | case RFCOMM_DATA_PACKET: |
va009039 | 0:1ed23ab1345f | 188 | // loopback |
va009039 | 0:1ed23ab1345f | 189 | if (rfcomm_channel_id) { |
va009039 | 0:1ed23ab1345f | 190 | err = rfcomm_send_internal(rfcomm_channel_id, packet, size); |
va009039 | 0:1ed23ab1345f | 191 | if (err) { |
va009039 | 0:1ed23ab1345f | 192 | log_info("rfcomm_send_internal -> error %d", err); |
va009039 | 0:1ed23ab1345f | 193 | } |
va009039 | 0:1ed23ab1345f | 194 | } |
tamaki | 3:7b7d1273e2d5 | 195 | |
tamaki | 3:7b7d1273e2d5 | 196 | data_recv(packet, size); |
tamaki | 3:7b7d1273e2d5 | 197 | |
tamaki | 3:7b7d1273e2d5 | 198 | // led3 = !led3; |
va009039 | 0:1ed23ab1345f | 199 | break; |
va009039 | 0:1ed23ab1345f | 200 | default: |
va009039 | 0:1ed23ab1345f | 201 | break; |
va009039 | 0:1ed23ab1345f | 202 | } |
va009039 | 0:1ed23ab1345f | 203 | } |
va009039 | 0:1ed23ab1345f | 204 | |
tamaki | 3:7b7d1273e2d5 | 205 | static void data_recv(uint8_t *packet, uint16_t size){ |
tamaki | 3:7b7d1273e2d5 | 206 | int i; |
tamaki | 3:7b7d1273e2d5 | 207 | static int timerp[12]; |
tamaki | 3:7b7d1273e2d5 | 208 | static int timers[12]; |
tamaki | 3:7b7d1273e2d5 | 209 | // char ind[4]; |
tamaki | 3:7b7d1273e2d5 | 210 | log_info("packet(size:%d) = ", size); |
tamaki | 3:7b7d1273e2d5 | 211 | |
tamaki | 3:7b7d1273e2d5 | 212 | //recive char display mode |
tamaki | 3:7b7d1273e2d5 | 213 | //for analys recieve char |
tamaki | 3:7b7d1273e2d5 | 214 | // for (i = 0; i < size; i++){ |
tamaki | 3:7b7d1273e2d5 | 215 | // log_info("%c", packet[i]); |
tamaki | 3:7b7d1273e2d5 | 216 | // } |
tamaki | 3:7b7d1273e2d5 | 217 | // log_info("\n\r"); |
tamaki | 3:7b7d1273e2d5 | 218 | |
tamaki | 3:7b7d1273e2d5 | 219 | |
tamaki | 3:7b7d1273e2d5 | 220 | //VS-02 remote controler corss key |
tamaki | 3:7b7d1273e2d5 | 221 | //packet |
tamaki | 3:7b7d1273e2d5 | 222 | // 9 right arrow: 1 up(triangle), 2 right(circle), 4 down(closs), 8 left(quad) |
tamaki | 3:7b7d1273e2d5 | 223 | // 10 L R Button : 1 L2, 2 R2, 4 L1, 8 R1 |
tamaki | 3:7b7d1273e2d5 | 224 | // 12 left arrow: 1 up, 2 right, 4 down, 8 left |
tamaki | 3:7b7d1273e2d5 | 225 | // 13 1 select, 2 R3, 4 L3, 8 start |
tamaki | 3:7b7d1273e2d5 | 226 | if(packet[0] == 'w'){ |
tamaki | 3:7b7d1273e2d5 | 227 | log_info("%c", packet[9]); |
tamaki | 3:7b7d1273e2d5 | 228 | log_info("%c", packet[10]); |
tamaki | 3:7b7d1273e2d5 | 229 | log_info("%c", packet[12]); |
tamaki | 3:7b7d1273e2d5 | 230 | log_info("%c", packet[13]); |
tamaki | 3:7b7d1273e2d5 | 231 | switch (packet[9]) { |
tamaki | 3:7b7d1273e2d5 | 232 | case '1': |
tamaki | 3:7b7d1273e2d5 | 233 | timers[4] = timerp[4]; |
tamaki | 3:7b7d1273e2d5 | 234 | timerp[4] = timer.read_ms(); |
tamaki | 3:7b7d1273e2d5 | 235 | log_info("%d", timerp[4]-timers[4]); |
tamaki | 3:7b7d1273e2d5 | 236 | if((timerp[4]-timers[4])>150){ |
tamaki | 3:7b7d1273e2d5 | 237 | VSC2btn[4]=1; |
tamaki | 3:7b7d1273e2d5 | 238 | } |
tamaki | 3:7b7d1273e2d5 | 239 | break; |
tamaki | 3:7b7d1273e2d5 | 240 | case '2': |
tamaki | 3:7b7d1273e2d5 | 241 | timers[5] = timerp[5]; |
tamaki | 3:7b7d1273e2d5 | 242 | timerp[5] = timer.read_ms(); |
tamaki | 3:7b7d1273e2d5 | 243 | log_info("%d", timerp[5]-timers[5]); |
tamaki | 3:7b7d1273e2d5 | 244 | if((timerp[5]-timers[5])>150){ |
tamaki | 3:7b7d1273e2d5 | 245 | VSC2btn[5]=1; |
tamaki | 3:7b7d1273e2d5 | 246 | } |
tamaki | 3:7b7d1273e2d5 | 247 | break; |
tamaki | 3:7b7d1273e2d5 | 248 | case '4': |
tamaki | 3:7b7d1273e2d5 | 249 | timers[6] = timerp[6]; |
tamaki | 3:7b7d1273e2d5 | 250 | timerp[6] = timer.read_ms(); |
tamaki | 3:7b7d1273e2d5 | 251 | log_info("%d", timerp[6]-timers[6]); |
tamaki | 3:7b7d1273e2d5 | 252 | if((timerp[6]-timers[6])>150){ |
tamaki | 3:7b7d1273e2d5 | 253 | VSC2btn[6]=1; |
tamaki | 3:7b7d1273e2d5 | 254 | } |
tamaki | 3:7b7d1273e2d5 | 255 | break; |
tamaki | 3:7b7d1273e2d5 | 256 | case '8': |
tamaki | 3:7b7d1273e2d5 | 257 | timers[7] = timerp[7]; |
tamaki | 3:7b7d1273e2d5 | 258 | timerp[7] = timer.read_ms(); |
tamaki | 3:7b7d1273e2d5 | 259 | log_info("%d", timerp[7]-timers[7]); |
tamaki | 3:7b7d1273e2d5 | 260 | if((timerp[7]-timers[7])>150){ |
tamaki | 3:7b7d1273e2d5 | 261 | VSC2btn[7]=1; |
tamaki | 3:7b7d1273e2d5 | 262 | } |
tamaki | 3:7b7d1273e2d5 | 263 | break; |
tamaki | 3:7b7d1273e2d5 | 264 | case '0': |
tamaki | 3:7b7d1273e2d5 | 265 | VSC2btn[4]=0; |
tamaki | 3:7b7d1273e2d5 | 266 | VSC2btn[5]=0; |
tamaki | 3:7b7d1273e2d5 | 267 | VSC2btn[6]=0; |
tamaki | 3:7b7d1273e2d5 | 268 | VSC2btn[7]=0; |
tamaki | 3:7b7d1273e2d5 | 269 | break; |
tamaki | 3:7b7d1273e2d5 | 270 | |
tamaki | 3:7b7d1273e2d5 | 271 | } |
tamaki | 3:7b7d1273e2d5 | 272 | switch (packet[12]) { |
tamaki | 3:7b7d1273e2d5 | 273 | case '1': |
tamaki | 3:7b7d1273e2d5 | 274 | timers[0] = timerp[0]; |
tamaki | 3:7b7d1273e2d5 | 275 | timerp[0] = timer.read_ms(); |
tamaki | 3:7b7d1273e2d5 | 276 | log_info("%d", timerp[0]-timers[0]); |
tamaki | 3:7b7d1273e2d5 | 277 | if((timerp[0]-timers[0])>150){ |
tamaki | 3:7b7d1273e2d5 | 278 | VSC2btn[0]=1; |
tamaki | 3:7b7d1273e2d5 | 279 | } |
tamaki | 3:7b7d1273e2d5 | 280 | break; |
tamaki | 3:7b7d1273e2d5 | 281 | case '2': |
tamaki | 3:7b7d1273e2d5 | 282 | timers[1] = timerp[1]; |
tamaki | 3:7b7d1273e2d5 | 283 | timerp[1] = timer.read_ms(); |
tamaki | 3:7b7d1273e2d5 | 284 | log_info("%d", timerp[1]-timers[1]); |
tamaki | 3:7b7d1273e2d5 | 285 | if((timerp[1]-timers[1])>150){ |
tamaki | 3:7b7d1273e2d5 | 286 | VSC2btn[1]=1; |
tamaki | 3:7b7d1273e2d5 | 287 | } |
tamaki | 3:7b7d1273e2d5 | 288 | break; |
tamaki | 3:7b7d1273e2d5 | 289 | case '4': |
tamaki | 3:7b7d1273e2d5 | 290 | timers[2] = timerp[2]; |
tamaki | 3:7b7d1273e2d5 | 291 | timerp[2] = timer.read_ms(); |
tamaki | 3:7b7d1273e2d5 | 292 | log_info("%d", timerp[2]-timers[2]); |
tamaki | 3:7b7d1273e2d5 | 293 | if((timerp[2]-timers[2])>150){ |
tamaki | 3:7b7d1273e2d5 | 294 | VSC2btn[2]=1; |
tamaki | 3:7b7d1273e2d5 | 295 | } |
tamaki | 3:7b7d1273e2d5 | 296 | break; |
tamaki | 3:7b7d1273e2d5 | 297 | case '8': |
tamaki | 3:7b7d1273e2d5 | 298 | timers[3] = timerp[3]; |
tamaki | 3:7b7d1273e2d5 | 299 | timerp[3] = timer.read_ms(); |
tamaki | 3:7b7d1273e2d5 | 300 | log_info("%d", timerp[3]-timers[3]); |
tamaki | 3:7b7d1273e2d5 | 301 | if((timerp[3]-timers[3])>150){ |
tamaki | 3:7b7d1273e2d5 | 302 | VSC2btn[3]=1; |
tamaki | 3:7b7d1273e2d5 | 303 | } |
tamaki | 3:7b7d1273e2d5 | 304 | break; |
tamaki | 3:7b7d1273e2d5 | 305 | case '0': |
tamaki | 3:7b7d1273e2d5 | 306 | VSC2btn[0]=0; |
tamaki | 3:7b7d1273e2d5 | 307 | VSC2btn[1]=0; |
tamaki | 3:7b7d1273e2d5 | 308 | VSC2btn[2]=0; |
tamaki | 3:7b7d1273e2d5 | 309 | VSC2btn[3]=0; |
tamaki | 3:7b7d1273e2d5 | 310 | break; |
tamaki | 3:7b7d1273e2d5 | 311 | } |
tamaki | 3:7b7d1273e2d5 | 312 | switch (packet[13]) { |
tamaki | 3:7b7d1273e2d5 | 313 | case '1': |
tamaki | 3:7b7d1273e2d5 | 314 | timers[8] = timerp[8]; |
tamaki | 3:7b7d1273e2d5 | 315 | timerp[8] = timer.read_ms(); |
tamaki | 3:7b7d1273e2d5 | 316 | log_info("%d", timerp[8]-timers[8]); |
tamaki | 3:7b7d1273e2d5 | 317 | if((timerp[8]-timers[8])>150){ |
tamaki | 3:7b7d1273e2d5 | 318 | VSC2btn[8]=1; |
tamaki | 3:7b7d1273e2d5 | 319 | } |
tamaki | 3:7b7d1273e2d5 | 320 | break; |
tamaki | 3:7b7d1273e2d5 | 321 | case '8': |
tamaki | 3:7b7d1273e2d5 | 322 | timers[9] = timerp[9]; |
tamaki | 3:7b7d1273e2d5 | 323 | timerp[9] = timer.read_ms(); |
tamaki | 3:7b7d1273e2d5 | 324 | log_info("%d", timerp[9]-timers[9]); |
tamaki | 3:7b7d1273e2d5 | 325 | if((timerp[9]-timers[9])>150){ |
tamaki | 3:7b7d1273e2d5 | 326 | VSC2btn[9]=1; |
tamaki | 3:7b7d1273e2d5 | 327 | } |
tamaki | 3:7b7d1273e2d5 | 328 | break; |
tamaki | 3:7b7d1273e2d5 | 329 | case '0': |
tamaki | 3:7b7d1273e2d5 | 330 | VSC2btn[8]=0; |
tamaki | 3:7b7d1273e2d5 | 331 | VSC2btn[9]=0; |
tamaki | 3:7b7d1273e2d5 | 332 | break; |
tamaki | 3:7b7d1273e2d5 | 333 | } |
tamaki | 3:7b7d1273e2d5 | 334 | // |
tamaki | 3:7b7d1273e2d5 | 335 | // |
tamaki | 3:7b7d1273e2d5 | 336 | |
tamaki | 3:7b7d1273e2d5 | 337 | } |
tamaki | 3:7b7d1273e2d5 | 338 | log_info("\n\r"); |
tamaki | 3:7b7d1273e2d5 | 339 | } |
tamaki | 3:7b7d1273e2d5 | 340 | |
tamaki | 3:7b7d1273e2d5 | 341 | //switch status 0:off, 1:posEdge, 2:on, 3:negEdge |
tamaki | 3:7b7d1273e2d5 | 342 | int sw_st[3]; |
tamaki | 3:7b7d1273e2d5 | 343 | int sw_cnt[3];//past counter |
tamaki | 3:7b7d1273e2d5 | 344 | |
tamaki | 3:7b7d1273e2d5 | 345 | void chksw(void) |
tamaki | 3:7b7d1273e2d5 | 346 | { |
tamaki | 3:7b7d1273e2d5 | 347 | static int ssw[3], psw[3], cnt[3], tcnt[3]; |
tamaki | 3:7b7d1273e2d5 | 348 | int i; |
tamaki | 3:7b7d1273e2d5 | 349 | psw[0] = sw1; |
tamaki | 3:7b7d1273e2d5 | 350 | psw[1] = sw2; |
tamaki | 3:7b7d1273e2d5 | 351 | psw[2] = sw3; |
tamaki | 3:7b7d1273e2d5 | 352 | //switch status 0:off, 1:posEdge, 2:on, 3:negEdge |
tamaki | 3:7b7d1273e2d5 | 353 | for(i = 0; i < 3; i++){ |
tamaki | 3:7b7d1273e2d5 | 354 | if((ssw[i] == 0)&&(psw[i] == 0)){ |
tamaki | 3:7b7d1273e2d5 | 355 | sw_st[i] = 2;//on |
tamaki | 3:7b7d1273e2d5 | 356 | tcnt[i] ++; |
tamaki | 3:7b7d1273e2d5 | 357 | sw_cnt[i] = tcnt[i]; |
tamaki | 3:7b7d1273e2d5 | 358 | } |
tamaki | 3:7b7d1273e2d5 | 359 | if((ssw[i] == 0)&&(psw[i] == 1)){ |
tamaki | 3:7b7d1273e2d5 | 360 | sw_st[i] = 3;//negEdge |
tamaki | 3:7b7d1273e2d5 | 361 | cnt[i] = tcnt[i]; |
tamaki | 3:7b7d1273e2d5 | 362 | tcnt[i] = 0; |
tamaki | 3:7b7d1273e2d5 | 363 | sw_cnt[i] = tcnt[i]; |
tamaki | 3:7b7d1273e2d5 | 364 | } |
tamaki | 3:7b7d1273e2d5 | 365 | if((ssw[i] == 1)&&(psw[i] == 1)){ |
tamaki | 3:7b7d1273e2d5 | 366 | sw_st[i] = 0;//off |
tamaki | 3:7b7d1273e2d5 | 367 | tcnt[i] ++; |
tamaki | 3:7b7d1273e2d5 | 368 | } |
tamaki | 3:7b7d1273e2d5 | 369 | if((ssw[i] == 1)&&(psw[i] == 0)){ |
tamaki | 3:7b7d1273e2d5 | 370 | sw_st[i] = 1;//posEdge |
tamaki | 3:7b7d1273e2d5 | 371 | cnt[i] = tcnt[i]; |
tamaki | 3:7b7d1273e2d5 | 372 | tcnt[i] = 0; |
tamaki | 3:7b7d1273e2d5 | 373 | sw_cnt[i] = tcnt[i]; |
tamaki | 3:7b7d1273e2d5 | 374 | } |
tamaki | 3:7b7d1273e2d5 | 375 | ssw[i] = psw[i]; |
tamaki | 3:7b7d1273e2d5 | 376 | } |
tamaki | 3:7b7d1273e2d5 | 377 | } |
tamaki | 3:7b7d1273e2d5 | 378 | |
tamaki | 3:7b7d1273e2d5 | 379 | |
va009039 | 0:1ed23ab1345f | 380 | static void heartbeat_handler(struct timer *ts){ |
tamaki | 3:7b7d1273e2d5 | 381 | static int counter = 0, tmp_counter=0; |
tamaki | 3:7b7d1273e2d5 | 382 | static int c_pos = 2;// 4:32:10 |
tamaki | 3:7b7d1273e2d5 | 383 | // 0:55:00 |
tamaki | 3:7b7d1273e2d5 | 384 | static char line1[20], line2[20]; |
tamaki | 3:7b7d1273e2d5 | 385 | |
va009039 | 0:1ed23ab1345f | 386 | run_loop_set_timer(ts, HEARTBEAT_PERIOD_MS); |
va009039 | 0:1ed23ab1345f | 387 | run_loop_add_timer(ts); |
tamaki | 3:7b7d1273e2d5 | 388 | |
tamaki | 3:7b7d1273e2d5 | 389 | brd_led2 = !brd_led2; |
tamaki | 3:7b7d1273e2d5 | 390 | counter ++; |
tamaki | 3:7b7d1273e2d5 | 391 | // tmp_counter = time_cnt; |
tamaki | 3:7b7d1273e2d5 | 392 | |
tamaki | 3:7b7d1273e2d5 | 393 | if(module_status == 1){ |
tamaki | 3:7b7d1273e2d5 | 394 | } |
tamaki | 3:7b7d1273e2d5 | 395 | |
tamaki | 3:7b7d1273e2d5 | 396 | if(module_status == 0){//set mode |
tamaki | 3:7b7d1273e2d5 | 397 | // int cd[5]={1,10,60,600,3600}; |
tamaki | 3:7b7d1273e2d5 | 398 | // if(VSC2btn[3] == 1){//left arrow left |
tamaki | 3:7b7d1273e2d5 | 399 | // c_pos++; |
tamaki | 3:7b7d1273e2d5 | 400 | // if(c_pos == 5) c_pos=0; |
tamaki | 3:7b7d1273e2d5 | 401 | // VSC2btn[3] = 0; |
tamaki | 3:7b7d1273e2d5 | 402 | // } |
tamaki | 3:7b7d1273e2d5 | 403 | // if(VSC2btn[1] == 1){//left arrow right |
tamaki | 3:7b7d1273e2d5 | 404 | // c_pos--; |
tamaki | 3:7b7d1273e2d5 | 405 | // if(c_pos == -1) c_pos=4; |
tamaki | 3:7b7d1273e2d5 | 406 | // VSC2btn[1] = 0; |
tamaki | 3:7b7d1273e2d5 | 407 | // } |
tamaki | 3:7b7d1273e2d5 | 408 | /* |
tamaki | 3:7b7d1273e2d5 | 409 | if(VSC2btn[0] == 1){//left arrow up |
tamaki | 3:7b7d1273e2d5 | 410 | time_set = time_set + cd[c_pos]; |
tamaki | 3:7b7d1273e2d5 | 411 | VSC2btn[0] = 0; |
tamaki | 3:7b7d1273e2d5 | 412 | } |
tamaki | 3:7b7d1273e2d5 | 413 | if(VSC2btn[2] == 1){//left arrow down |
tamaki | 3:7b7d1273e2d5 | 414 | if(time_set - cd[c_pos]>=0){ |
tamaki | 3:7b7d1273e2d5 | 415 | time_set = time_set - cd[c_pos]; |
tamaki | 3:7b7d1273e2d5 | 416 | } |
tamaki | 3:7b7d1273e2d5 | 417 | VSC2btn[2] = 0; |
tamaki | 3:7b7d1273e2d5 | 418 | } |
tamaki | 3:7b7d1273e2d5 | 419 | */ |
tamaki | 3:7b7d1273e2d5 | 420 | if(VSC2btn[9] == 1){//start |
tamaki | 3:7b7d1273e2d5 | 421 | time_cnt = time_set;//set time |
tamaki | 3:7b7d1273e2d5 | 422 | //relay on |
tamaki | 3:7b7d1273e2d5 | 423 | module_status = 1; |
tamaki | 3:7b7d1273e2d5 | 424 | VSC2btn[9] = 0; |
tamaki | 3:7b7d1273e2d5 | 425 | } |
tamaki | 3:7b7d1273e2d5 | 426 | // int sec=(time_set%3600)%60, min=(time_set%3600)/60, time = time_set/3600; |
tamaki | 3:7b7d1273e2d5 | 427 | }else if(module_status == 1){//run mode |
tamaki | 3:7b7d1273e2d5 | 428 | // int sec=(time_cnt%3600)%60, min=(time_cnt%3600)/60, time = time_cnt/3600; |
tamaki | 3:7b7d1273e2d5 | 429 | // strcpy(line1, "timer run mode "); |
tamaki | 3:7b7d1273e2d5 | 430 | // sprintf(line2, "%2d:%2d:%2d ", time, min, sec); |
tamaki | 3:7b7d1273e2d5 | 431 | // if(time_cnt == 0){ |
tamaki | 3:7b7d1273e2d5 | 432 | // module_status = 2; |
tamaki | 3:7b7d1273e2d5 | 433 | // } |
tamaki | 3:7b7d1273e2d5 | 434 | if(VSC2btn[6] == 1){//closs |
tamaki | 3:7b7d1273e2d5 | 435 | time_set = 0; |
tamaki | 3:7b7d1273e2d5 | 436 | module_status = 0; |
tamaki | 3:7b7d1273e2d5 | 437 | VSC2btn[6] = 0; |
tamaki | 3:7b7d1273e2d5 | 438 | } |
tamaki | 3:7b7d1273e2d5 | 439 | |
tamaki | 3:7b7d1273e2d5 | 440 | }else if(module_status == 2){//complete |
tamaki | 3:7b7d1273e2d5 | 441 | strcpy(line1, "timer up!! "); |
tamaki | 3:7b7d1273e2d5 | 442 | sprintf(line2, "push start"); |
tamaki | 3:7b7d1273e2d5 | 443 | //relay off |
tamaki | 3:7b7d1273e2d5 | 444 | |
tamaki | 3:7b7d1273e2d5 | 445 | if(VSC2btn[9] == 1){//start |
tamaki | 3:7b7d1273e2d5 | 446 | module_status = 0;// |
tamaki | 3:7b7d1273e2d5 | 447 | VSC2btn[9] = 0; |
tamaki | 3:7b7d1273e2d5 | 448 | } |
tamaki | 3:7b7d1273e2d5 | 449 | } |
tamaki | 3:7b7d1273e2d5 | 450 | chksw(); |
tamaki | 3:7b7d1273e2d5 | 451 | if(sw_st[0] == 1){ |
tamaki | 3:7b7d1273e2d5 | 452 | led1 = 1; |
tamaki | 3:7b7d1273e2d5 | 453 | }else{ |
tamaki | 3:7b7d1273e2d5 | 454 | led1 = 0; |
tamaki | 3:7b7d1273e2d5 | 455 | } |
tamaki | 3:7b7d1273e2d5 | 456 | if(sw_st[1] == 1){ |
tamaki | 3:7b7d1273e2d5 | 457 | led2 = 1; |
tamaki | 3:7b7d1273e2d5 | 458 | }else{ |
tamaki | 3:7b7d1273e2d5 | 459 | led2 = 0; |
tamaki | 3:7b7d1273e2d5 | 460 | } |
tamaki | 3:7b7d1273e2d5 | 461 | if(sw_st[2] == 1){ |
tamaki | 3:7b7d1273e2d5 | 462 | led3 = 1; |
tamaki | 3:7b7d1273e2d5 | 463 | }else{ |
tamaki | 3:7b7d1273e2d5 | 464 | led3 = 0; |
tamaki | 3:7b7d1273e2d5 | 465 | } |
tamaki | 3:7b7d1273e2d5 | 466 | if(sw_st[0] == 2){ |
tamaki | 3:7b7d1273e2d5 | 467 | led4 = 1; |
tamaki | 3:7b7d1273e2d5 | 468 | }else{ |
tamaki | 3:7b7d1273e2d5 | 469 | led4 = 0; |
tamaki | 3:7b7d1273e2d5 | 470 | } |
tamaki | 3:7b7d1273e2d5 | 471 | if(sw_st[1] == 2){ |
tamaki | 3:7b7d1273e2d5 | 472 | led5 = 1; |
tamaki | 3:7b7d1273e2d5 | 473 | }else{ |
tamaki | 3:7b7d1273e2d5 | 474 | led5 = 0; |
tamaki | 3:7b7d1273e2d5 | 475 | } |
tamaki | 3:7b7d1273e2d5 | 476 | if(sw_st[2] == 2){ |
tamaki | 3:7b7d1273e2d5 | 477 | led6 = 1; |
tamaki | 3:7b7d1273e2d5 | 478 | }else{ |
tamaki | 3:7b7d1273e2d5 | 479 | led6 = 0; |
tamaki | 3:7b7d1273e2d5 | 480 | } |
tamaki | 3:7b7d1273e2d5 | 481 | sprintf(line2, "%4d:%d%d%d %4d %d%d", |
tamaki | 3:7b7d1273e2d5 | 482 | time_cnt, sw_st[0], sw_st[1], sw_st[2], (int)(vr.read() * 1023), |
tamaki | 3:7b7d1273e2d5 | 483 | VSC2btn[0]/*left up*/, VSC2btn[2]/*left down*/ ); |
tamaki | 3:7b7d1273e2d5 | 484 | |
tamaki | 3:7b7d1273e2d5 | 485 | { |
tamaki | 3:7b7d1273e2d5 | 486 | //display LCD |
tamaki | 3:7b7d1273e2d5 | 487 | lcd.locate(0,0); |
tamaki | 3:7b7d1273e2d5 | 488 | lcd.printf(line1); |
tamaki | 3:7b7d1273e2d5 | 489 | lcd.locate(0,1); |
tamaki | 3:7b7d1273e2d5 | 490 | lcd.printf(line2); |
tamaki | 3:7b7d1273e2d5 | 491 | } |
tamaki | 3:7b7d1273e2d5 | 492 | /* |
tamaki | 3:7b7d1273e2d5 | 493 | { |
tamaki | 3:7b7d1273e2d5 | 494 | Sd = new SDFileSystem(p5, p6, p7, p8, "sd"); |
tamaki | 3:7b7d1273e2d5 | 495 | // new sd object *** unable to draw sd card *** |
tamaki | 3:7b7d1273e2d5 | 496 | |
tamaki | 3:7b7d1273e2d5 | 497 | //write to SD card |
tamaki | 3:7b7d1273e2d5 | 498 | FILE *fp = fopen("/sdtest.txt", "w"); |
tamaki | 3:7b7d1273e2d5 | 499 | if(fp == NULL) { |
tamaki | 3:7b7d1273e2d5 | 500 | error("Could not open file for write\n\r"); |
tamaki | 3:7b7d1273e2d5 | 501 | }else{ |
tamaki | 3:7b7d1273e2d5 | 502 | fprintf(fp, line2); |
tamaki | 3:7b7d1273e2d5 | 503 | fclose(fp); |
tamaki | 3:7b7d1273e2d5 | 504 | } |
tamaki | 3:7b7d1273e2d5 | 505 | delete Sd;// delete object *** enable to draw sd card *** |
tamaki | 3:7b7d1273e2d5 | 506 | } |
tamaki | 3:7b7d1273e2d5 | 507 | */ |
va009039 | 0:1ed23ab1345f | 508 | } |
va009039 | 0:1ed23ab1345f | 509 | |
tamaki | 3:7b7d1273e2d5 | 510 | |
tamaki | 3:7b7d1273e2d5 | 511 | |
tamaki | 3:7b7d1273e2d5 | 512 | Ticker t1s; |
tamaki | 3:7b7d1273e2d5 | 513 | void t1scall(void) |
tamaki | 3:7b7d1273e2d5 | 514 | { |
tamaki | 3:7b7d1273e2d5 | 515 | if(module_status == 1){ |
tamaki | 3:7b7d1273e2d5 | 516 | time_cnt ++; |
tamaki | 3:7b7d1273e2d5 | 517 | } |
tamaki | 3:7b7d1273e2d5 | 518 | } |
tamaki | 3:7b7d1273e2d5 | 519 | |
va009039 | 0:1ed23ab1345f | 520 | // main |
va009039 | 0:1ed23ab1345f | 521 | int main(void) |
va009039 | 0:1ed23ab1345f | 522 | { |
tamaki | 3:7b7d1273e2d5 | 523 | t1s.attach(&t1scall, 1); |
tamaki | 3:7b7d1273e2d5 | 524 | timer.start(); |
tamaki | 3:7b7d1273e2d5 | 525 | |
va009039 | 0:1ed23ab1345f | 526 | pc.baud(921600); |
tamaki | 3:7b7d1273e2d5 | 527 | pc.printf("mbed BoardChk1"); |
tamaki | 3:7b7d1273e2d5 | 528 | lcd.printf("mbed BoardChk1"); |
va009039 | 0:1ed23ab1345f | 529 | |
tamaki | 3:7b7d1273e2d5 | 530 | sw1.mode(PullUp); |
tamaki | 3:7b7d1273e2d5 | 531 | sw2.mode(PullUp); |
tamaki | 3:7b7d1273e2d5 | 532 | sw3.mode(PullUp); |
tamaki | 3:7b7d1273e2d5 | 533 | |
tamaki | 3:7b7d1273e2d5 | 534 | log_info("%s\n", __FILE__); |
va009039 | 0:1ed23ab1345f | 535 | // init LEDs |
tamaki | 3:7b7d1273e2d5 | 536 | brd_led1 = brd_led2 = brd_led3 = brd_led4 = 0; |
va009039 | 0:1ed23ab1345f | 537 | |
va009039 | 0:1ed23ab1345f | 538 | /// GET STARTED with BTstack /// |
va009039 | 0:1ed23ab1345f | 539 | btstack_memory_init(); |
va009039 | 0:1ed23ab1345f | 540 | run_loop_init(RUN_LOOP_EMBEDDED); |
va009039 | 0:1ed23ab1345f | 541 | |
va009039 | 0:1ed23ab1345f | 542 | // init HCI |
va009039 | 0:1ed23ab1345f | 543 | hci_transport_t* transport = hci_transport_usb_instance(); |
va009039 | 0:1ed23ab1345f | 544 | remote_device_db_t * remote_db = (remote_device_db_t *) &remote_device_db_memory; |
va009039 | 0:1ed23ab1345f | 545 | hci_init(transport, NULL, NULL, remote_db); |
va009039 | 0:1ed23ab1345f | 546 | |
va009039 | 0:1ed23ab1345f | 547 | // init L2CAP |
va009039 | 0:1ed23ab1345f | 548 | l2cap_init(); |
va009039 | 0:1ed23ab1345f | 549 | l2cap_register_packet_handler(packet_handler); |
va009039 | 0:1ed23ab1345f | 550 | |
va009039 | 0:1ed23ab1345f | 551 | // init RFCOMM |
va009039 | 0:1ed23ab1345f | 552 | rfcomm_init(); |
va009039 | 0:1ed23ab1345f | 553 | rfcomm_register_packet_handler(packet_handler); |
va009039 | 0:1ed23ab1345f | 554 | rfcomm_register_service_internal(NULL, rfcomm_channel_nr, 100); // reserved channel, mtu=100 |
va009039 | 0:1ed23ab1345f | 555 | |
va009039 | 0:1ed23ab1345f | 556 | // init SDP, create record for SPP and register with SDP |
va009039 | 0:1ed23ab1345f | 557 | sdp_init(); |
va009039 | 0:1ed23ab1345f | 558 | memset(spp_service_buffer, 0, sizeof(spp_service_buffer)); |
va009039 | 0:1ed23ab1345f | 559 | service_record_item_t * service_record_item = (service_record_item_t *) spp_service_buffer; |
va009039 | 0:1ed23ab1345f | 560 | sdp_create_spp_service( (uint8_t*) &service_record_item->service_record, 1, "loopback"); |
va009039 | 0:1ed23ab1345f | 561 | log_info("SDP service buffer size: %u\n\r", (uint16_t) (sizeof(service_record_item_t) + de_get_len((uint8_t*) &service_record_item->service_record))); |
va009039 | 0:1ed23ab1345f | 562 | sdp_register_service_internal(NULL, service_record_item); |
va009039 | 0:1ed23ab1345f | 563 | |
va009039 | 0:1ed23ab1345f | 564 | // set one-shot timer |
va009039 | 0:1ed23ab1345f | 565 | timer_source_t heartbeat; |
va009039 | 0:1ed23ab1345f | 566 | heartbeat.process = &heartbeat_handler; |
va009039 | 0:1ed23ab1345f | 567 | run_loop_set_timer(&heartbeat, HEARTBEAT_PERIOD_MS); |
va009039 | 0:1ed23ab1345f | 568 | run_loop_add_timer(&heartbeat); |
va009039 | 0:1ed23ab1345f | 569 | |
va009039 | 0:1ed23ab1345f | 570 | log_info("SPP loopback demo...\n\r"); |
va009039 | 0:1ed23ab1345f | 571 | |
va009039 | 0:1ed23ab1345f | 572 | // turn on! |
va009039 | 0:1ed23ab1345f | 573 | hci_power_control(HCI_POWER_ON); |
va009039 | 0:1ed23ab1345f | 574 | |
va009039 | 0:1ed23ab1345f | 575 | // go! |
va009039 | 0:1ed23ab1345f | 576 | run_loop_execute(); |
va009039 | 0:1ed23ab1345f | 577 | |
va009039 | 0:1ed23ab1345f | 578 | return 0; |
va009039 | 0:1ed23ab1345f | 579 | } |
va009039 | 0:1ed23ab1345f | 580 | #endif |