Skip to content

Commit

Permalink
Add protobuf (#74)
Browse files Browse the repository at this point in the history
**Background**

We need protobuf for BLE

**Changes**

- Add protobuf package and set up as java module
  • Loading branch information
LionZXY authored Oct 11, 2021
1 parent 2c0714f commit 49bd9af
Show file tree
Hide file tree
Showing 58 changed files with 219 additions and 112 deletions.
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "components/bridge/protobuf/flipperzero-protobuf"]
path = components/bridge/protobuf/flipperzero-protobuf
url = [email protected]:flipperdevices/flipperzero-protobuf.git
1 change: 1 addition & 0 deletions buildSrc/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,5 @@ dependencies {
implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21")
implementation("com.android.tools.build:gradle:7.0.2")
implementation("com.squareup.anvil:gradle-plugin:2.3.4")
implementation("com.google.protobuf:protobuf-gradle-plugin:0.8.17")
}
5 changes: 5 additions & 0 deletions buildSrc/src/main/java/Dependencies.kt
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ object Versions {

const val IMAGE_SLIDER = "1.4.0"
const val GLIDE = "4.12.0"

const val PROTOBUF = "3.18.1"
}

object GradlePlugins {
Expand Down Expand Up @@ -91,6 +93,9 @@ object Libs {

const val IMAGE_SLIDER = "com.github.smarteist:Android-Image-Slider:${Versions.IMAGE_SLIDER}"
const val GLIDE = "com.github.bumptech.glide:glide:${Versions.GLIDE}"

const val PROTOBUF_JAVA = "com.google.protobuf:protobuf-java:${Versions.PROTOBUF}"
const val PROTOBUF_PROTOC = "com.google.protobuf:protoc:${Versions.PROTOBUF}"
}

object TestingLib {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ class BottomNavigationActivityApiImpl @Inject constructor(private val context: C
context.startActivity(
Intent(context, BottomNavigationActivity::class.java).apply {
flags = FLAG_ACTIVITY_CLEAR_TOP or
FLAG_ACTIVITY_CLEAR_TOP or
FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_CLEAR_TOP or
FLAG_ACTIVITY_NEW_TASK
}
)
}
Expand Down
1 change: 1 addition & 0 deletions components/bridge/api/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
build
17 changes: 17 additions & 0 deletions components/bridge/api/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
plugins {
id("com.android.library")
id("kotlin-android")
id("kotlin-parcelize")
}
apply<com.flipper.gradle.ConfigurationPlugin>()

dependencies {
implementation(project(":components:core"))

implementation(Libs.KOTLIN_COROUTINES)
implementation(Libs.NORDIC_BLE_COMMON)
implementation(Libs.NORDIC_BLE_SCAN)
implementation(Libs.NORDIC_BLE_KTX)

implementation(Libs.APPCOMPAT)
}
5 changes: 5 additions & 0 deletions components/bridge/api/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.flipper.bridge.api">

<uses-permission android:name="android.permission.BLUETOOTH" />
</manifest>
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.flipper.bridge.api.device

import com.flipper.bridge.impl.manager.FlipperBleManager
import com.flipper.bridge.api.manager.FlipperBleManager

/**
* Provide API to Flipper Device
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.flipper.bridge.api.di

import com.flipper.bridge.api.pair.FlipperPairApi
import com.flipper.bridge.api.scanner.FlipperScanner

interface FlipperBleComponentInterface {
val flipperScanner: FlipperScanner
val flipperPairApi: FlipperPairApi
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.flipper.bridge.api.manager

import android.bluetooth.BluetoothDevice
import com.flipper.bridge.api.model.FlipperGATTInformation
import kotlinx.coroutines.flow.StateFlow
import no.nordicsemi.android.ble.ktx.state.ConnectionState

interface FlipperBleManager {
val isDeviceConnected: Boolean
fun getInformationStateFlow(): StateFlow<FlipperGATTInformation>
fun getEchoStateFlow(): StateFlow<ByteArray>
fun sendEcho(text: String)
fun getConnectionStateFlow(): StateFlow<ConnectionState>
fun connectToDevice(device: BluetoothDevice)
fun disconnectDevice()
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.flipper.bridge.model
package com.flipper.bridge.api.model

/**
* Data class which represent information via flipper
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.flipper.bridge.utils
package com.flipper.bridge.api.utils

import java.util.UUID
import java.util.concurrent.TimeUnit
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.flipper.bridge.utils
package com.flipper.bridge.api.utils

import android.content.Context
import android.content.pm.PackageManager
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.flipper.bridge.utils
package com.flipper.bridge.api.utils

import android.Manifest
import android.bluetooth.BluetoothAdapter
Expand Down
Empty file.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,23 @@ plugins {
id("com.android.library")
id("kotlin-android")
id("kotlin-kapt")
id("kotlin-parcelize")
}

apply<com.flipper.gradle.ConfigurationPlugin>()

dependencies {
implementation(project(":components:core"))
implementation(project(":components:bridge:api"))
implementation(project(":components:bridge:protobuf"))

api(Libs.KOTLIN_COROUTINES)
implementation(Libs.KOTLIN_COROUTINES)
implementation(Libs.ANNOTATIONS)
implementation(Libs.CORE_KTX)
implementation(Libs.APPCOMPAT)

implementation(Libs.NORDIC_BLE_SCAN)
api(Libs.NORDIC_BLE)
api(Libs.NORDIC_BLE_KTX)
implementation(Libs.NORDIC_BLE)
implementation(Libs.NORDIC_BLE_KTX)
implementation(Libs.NORDIC_BLE_COMMON)

implementation(Libs.DAGGER)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,9 @@
package com.flipper.bridge.di

import com.flipper.bridge.api.pair.FlipperPairApi
import com.flipper.bridge.api.scanner.FlipperScanner
import com.flipper.bridge.api.di.FlipperBleComponentInterface
import dagger.Component
import javax.inject.Singleton

interface FlipperBleComponentInterface {
val flipperScanner: FlipperScanner
val flipperPairApi: FlipperPairApi
}

@Singleton
@Component(modules = [NordicBleModule::class, FlipperBleModule::class, AndroidBleModule::class])
interface FlipperBleComponent : FlipperBleComponentInterface
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.flipper.bridge.impl.device

import com.flipper.bridge.api.device.FlipperDeviceApi
import com.flipper.bridge.impl.manager.FlipperBleManagerImpl

class FlipperDeviceApiImpl(
private val bleManagerImpl: FlipperBleManagerImpl,
override val address: String
) : FlipperDeviceApi {
override fun getBleManager(): FlipperBleManagerImpl {
return bleManagerImpl
}
}
Original file line number Diff line number Diff line change
@@ -1,29 +1,44 @@
package com.flipper.bridge.impl.manager

import android.bluetooth.BluetoothDevice
import android.bluetooth.BluetoothGatt
import android.bluetooth.BluetoothGattCharacteristic
import android.content.Context
import com.flipper.bridge.model.FlipperGATTInformation
import com.flipper.bridge.utils.Constants
import com.flipper.bridge.api.manager.FlipperBleManager
import com.flipper.bridge.api.model.FlipperGATTInformation
import com.flipper.bridge.api.utils.Constants
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import no.nordicsemi.android.ble.BleManager
import no.nordicsemi.android.ble.ktx.state.ConnectionState
import no.nordicsemi.android.ble.ktx.stateAsFlow
import timber.log.Timber
import java.util.UUID

class FlipperBleManager(context: Context) : BleManager(context) {
class FlipperBleManagerImpl(context: Context) : BleManager(context), FlipperBleManager {
private val informationState = MutableStateFlow(FlipperGATTInformation())
private val echoText = MutableStateFlow(ByteArray(0))
private val infoCharacteristics = mutableMapOf<UUID, BluetoothGattCharacteristic>()
private var serialTxCharacteristic: BluetoothGattCharacteristic? = null
private var serialRxCharacteristic: BluetoothGattCharacteristic? = null
override val isDeviceConnected = super.isConnected()

override fun getInformationStateFlow(): StateFlow<FlipperGATTInformation> = informationState
override fun getEchoStateFlow(): StateFlow<ByteArray> = echoText
override fun getConnectionStateFlow(): StateFlow<ConnectionState> = stateAsFlow()
override fun disconnectDevice() = disconnect().enqueue()
override fun connectToDevice(device: BluetoothDevice) {
connect(device).retry(
Constants.BLE.RECONNECT_COUNT,
Constants.BLE.RECONNECT_TIME_MS.toInt()
).useAutoConnect(true)
.enqueue()
}

fun getInformationState(): StateFlow<FlipperGATTInformation> = informationState
fun getEchoState(): StateFlow<ByteArray> = echoText
override fun log(priority: Int, message: String) {
Timber.d(message)
}
Expand All @@ -35,7 +50,7 @@ class FlipperBleManager(context: Context) : BleManager(context) {
override fun getGattCallback(): BleManagerGattCallback =
FlipperBleManagerGattCallback()

fun sendEcho(text: String) {
override fun sendEcho(text: String) {
writeCharacteristic(serialTxCharacteristic, text.toByteArray()).enqueue()
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@ import android.content.Context
import com.flipper.bridge.api.device.FlipperDeviceApi
import com.flipper.bridge.api.pair.FlipperPairApi
import com.flipper.bridge.api.scanner.FlipperScanner
import com.flipper.bridge.api.utils.Constants
import com.flipper.bridge.api.utils.DeviceFeatureHelper
import com.flipper.bridge.api.utils.PermissionHelper
import com.flipper.bridge.impl.device.FlipperDeviceApiImpl
import com.flipper.bridge.impl.manager.FlipperBleManager
import com.flipper.bridge.utils.Constants
import com.flipper.bridge.utils.DeviceFeatureHelper
import com.flipper.bridge.utils.PermissionHelper
import com.flipper.bridge.impl.manager.FlipperBleManagerImpl
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.withTimeout
Expand All @@ -32,7 +32,7 @@ class FlipperPairApiImpl @Inject constructor(
return deviceApi
}

val manager = FlipperBleManager(context)
val manager = FlipperBleManagerImpl(context)
return FlipperDeviceApiImpl(manager, deviceId)
}

Expand All @@ -42,7 +42,7 @@ class FlipperPairApiImpl @Inject constructor(
flipperDeviceApi: FlipperDeviceApi
) {
// If we already connected to device, just ignore it
if (flipperDeviceApi.getBleManager().isConnected) {
if (flipperDeviceApi.getBleManager().isDeviceConnected) {
return
}
// If Bluetooth disable, return exception
Expand All @@ -61,13 +61,10 @@ class FlipperPairApiImpl @Inject constructor(
}

override fun scheduleConnect(flipperDeviceApi: FlipperDeviceApi, device: BluetoothDevice) {
if (flipperDeviceApi.getBleManager().isConnected) {
if (flipperDeviceApi.getBleManager().isDeviceConnected) {
return
}
flipperDeviceApi.getBleManager().connect(device)
.retry(Constants.BLE.RECONNECT_COUNT, Constants.BLE.RECONNECT_TIME_MS.toInt())
.useAutoConnect(true)
.enqueue()
flipperDeviceApi.getBleManager().connectToDevice(device)
}

private fun connectWithBondedDevice(flipperDeviceApi: FlipperDeviceApi) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package com.flipper.bridge.impl.scanner

import com.flipper.bridge.api.scanner.DiscoveredBluetoothDevice
import com.flipper.bridge.api.scanner.FlipperScanner
import com.flipper.bridge.utils.Constants
import com.flipper.bridge.api.utils.Constants
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.filter
Expand Down
21 changes: 0 additions & 21 deletions components/bridge/proguard-rules.pro

This file was deleted.

41 changes: 41 additions & 0 deletions components/bridge/protobuf/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import com.google.protobuf.gradle.generateProtoTasks
import com.google.protobuf.gradle.id
import com.google.protobuf.gradle.proto
import com.google.protobuf.gradle.protobuf
import com.google.protobuf.gradle.protoc

plugins {
id("com.android.library")
id("kotlin-android")
id("com.google.protobuf")
}
apply<com.flipper.gradle.ConfigurationPlugin>()

dependencies {
implementation(project(":components:core"))
api(Libs.PROTOBUF_JAVA)
}

protobuf {
protoc {
artifact = Libs.PROTOBUF_PROTOC
}

generateProtoTasks {
all().forEach {
it.builtins {
id("java") {
option("lite")
}
}
}
}
}

android {
sourceSets {
(getByName("main") as com.android.build.gradle.api.AndroidSourceSet).proto {
srcDir("$projectDir/flipperzero-protobuf")
}
}
}
1 change: 1 addition & 0 deletions components/bridge/protobuf/flipperzero-protobuf
Submodule flipperzero-protobuf added at c05b20
1 change: 1 addition & 0 deletions components/bridge/protobuf/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<manifest package="com.flipper.bridge.protobuf" />
1 change: 1 addition & 0 deletions components/bridge/provider/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
build
10 changes: 10 additions & 0 deletions components/bridge/provider/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
plugins {
id("com.android.library")
id("kotlin-android")
}
apply<com.flipper.gradle.ConfigurationPlugin>()

dependencies {
api(project(":components:bridge:api"))
implementation(project(":components:bridge:impl"))
}
1 change: 1 addition & 0 deletions components/bridge/provider/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<manifest package="com.flipper.bridge.provider" />
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.flipper.bridge.provider

import com.flipper.bridge.api.di.FlipperBleComponentInterface

/**
* Entry point for Flipper Api
*/
object FlipperApi : FlipperBleComponentInterface by FlipperBleComponentProvider.component
Loading

0 comments on commit 49bd9af

Please sign in to comment.