├── .gitignore ├── LICENSE ├── README.md ├── README_en.md ├── README_ja.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── co │ │ ├── candyhouse │ │ └── app │ │ │ ├── App.kt │ │ │ ├── NfcHandler.kt │ │ │ ├── base │ │ │ ├── BaseActivity.kt │ │ │ ├── BaseDeviceFG.kt │ │ │ ├── BaseDeviceSettingFG.kt │ │ │ ├── BaseFG.kt │ │ │ └── BaseNFG.kt │ │ │ └── tabs │ │ │ ├── MainActivity.kt │ │ │ ├── devices │ │ │ ├── DeviceListFG.kt │ │ │ ├── ScanNewDeviceFG.kt │ │ │ ├── model │ │ │ │ ├── CHDeviceViewModel.kt │ │ │ │ └── CHUserViewModel.kt │ │ │ ├── ssm2 │ │ │ │ ├── room │ │ │ │ │ ├── MainRoomFG.kt │ │ │ │ │ └── SSMHistoryAdapter.kt │ │ │ │ ├── setting │ │ │ │ │ ├── Constans.kt │ │ │ │ │ ├── DfuService.kt │ │ │ │ │ ├── GuestKeyListFG.kt │ │ │ │ │ ├── KeyQrCodeFG.kt │ │ │ │ │ ├── SSM2SettingFG.kt │ │ │ │ │ └── angle │ │ │ │ │ │ ├── SSM2NoHandLockFG.kt │ │ │ │ │ │ ├── SSM2SetAngleFG.kt │ │ │ │ │ │ ├── SSMBikeCellView.kt │ │ │ │ │ │ ├── SSMCellView.kt │ │ │ │ │ │ └── SesameView.kt │ │ │ │ └── utils.kt │ │ │ ├── ssm5 │ │ │ │ ├── room │ │ │ │ │ ├── MainRoomSS5FG.kt │ │ │ │ │ └── SSMHistoryAdapter.kt │ │ │ │ └── setting │ │ │ │ │ └── SSM5SettingFG.kt │ │ │ ├── ssmbike │ │ │ │ └── setting │ │ │ │ │ └── SesameBikeSettingFG.kt │ │ │ ├── ssmbot │ │ │ │ └── setting │ │ │ │ │ ├── SesameBotSettingFG.kt │ │ │ │ │ └── SesameBotSettingUtils.kt │ │ │ ├── ssmtouchpro │ │ │ │ └── setting │ │ │ │ │ ├── SSMOpenSensorNoBLESettingFG.kt │ │ │ │ │ ├── SSMTouchProCard.kt │ │ │ │ │ ├── SSMTouchProFingerprint.kt │ │ │ │ │ ├── SSMTouchProPassCode.kt │ │ │ │ │ ├── SSMTouchProSelectLockerListFG.kt │ │ │ │ │ └── SSMTouchProSettingFG.kt │ │ │ └── wm2 │ │ │ │ └── setting │ │ │ │ ├── WM2ScanSSIDListFG.kt │ │ │ │ ├── WM2SelectLockerListFG.kt │ │ │ │ └── WM2SettingFG.kt │ │ │ └── menu │ │ │ ├── BarMenuItem.kt │ │ │ └── CustomAdapter.kt │ │ ├── receiver │ │ └── widget │ │ │ ├── CHServiceManager.kt │ │ │ ├── MessagingIntentService.kt │ │ │ └── SesameForegroundService.kt │ │ └── utils │ │ ├── CrashUtils.kt │ │ ├── DataExtention.kt │ │ ├── L.kt │ │ ├── SharedPreferencesUtils.kt │ │ ├── alerts │ │ ├── BaseAlert.kt │ │ ├── CheckAlert.kt │ │ ├── DownloadAlert.kt │ │ ├── SelectorAlert.kt │ │ ├── StandardAlert.kt │ │ └── ext │ │ │ └── Alerts.kt │ │ ├── alertview │ │ ├── AlertView.kt │ │ ├── enums │ │ │ ├── AlertActionStyle.kt │ │ │ ├── AlertStyle.kt │ │ │ └── AlertTheme.kt │ │ ├── fragments │ │ │ ├── BottomSheetFragment.kt │ │ │ └── DialogFragment.kt │ │ ├── interfaces │ │ │ └── AlertActionListener.kt │ │ └── objects │ │ │ └── AlertAction.kt │ │ ├── balloon │ │ ├── ActivityBalloonLazy.kt │ │ ├── ArrowOrientation.kt │ │ ├── Balloon.kt │ │ ├── BalloonAnimation.kt │ │ ├── BalloonExtension.kt │ │ ├── BalloonLazyExtension.kt │ │ ├── BalloonPersistence.kt │ │ ├── ContextExtension.kt │ │ ├── Definition.kt │ │ ├── FragmentBalloonLazy.kt │ │ ├── IconForm.kt │ │ ├── ImageViewExtension.kt │ │ ├── OnBalloonClickListener.kt │ │ ├── OnBalloonDismissListener.kt │ │ ├── OnBalloonOutsideTouchListener.kt │ │ ├── TextForm.kt │ │ ├── TextViewExtension.kt │ │ ├── ViewExtension.kt │ │ └── annotations │ │ │ ├── Dp.kt │ │ │ └── Sp.kt │ │ ├── materialtextfield │ │ ├── MaterialTextField.kt │ │ └── custom │ │ │ ├── AnimatedRectF.kt │ │ │ └── WrapDrawable.kt │ │ └── recycle │ │ ├── EmptyRecyclerView.kt │ │ ├── GenericAdapter.kt │ │ ├── GenericAdaptercopy.kt │ │ ├── GridAutofitLayoutManager.kt │ │ ├── GridSpacingItemDecoration.kt │ │ ├── MyLayoutManager.kt │ │ └── loadmoreadapter │ │ ├── LoadMoreAdapter.kt │ │ ├── LoadMoreFooter.kt │ │ └── LoadMoreViewHolder.kt │ └── res │ ├── anim │ ├── dispose_center.xml │ ├── elastic_center.xml │ ├── fade_in.xml │ ├── fade_out.xml │ ├── modal_in.xml │ ├── modal_out.xml │ ├── overshoot_center.xml │ ├── shake.xml │ ├── show_down_center.xml │ ├── show_up_center.xml │ ├── slide_down.xml │ ├── slide_in_bottom.xml │ ├── slide_in_left.xml │ ├── slide_in_right.xml │ ├── slide_in_up.xml │ ├── slide_out_bottom.xml │ ├── slide_out_left.xml │ ├── slide_out_right.xml │ ├── slide_out_up.xml │ └── slide_up.xml │ ├── animator │ └── cloud_dowload.xml │ ├── drawable │ ├── alert_background_dark.xml │ ├── alert_background_light.xml │ ├── app_icon.png │ ├── arrow.xml │ ├── bg_btn_confirm.xml │ ├── bg_btn_warning.xml │ ├── bg_dialog.xml │ ├── bl_green.png │ ├── bl_grey.png │ ├── bt0.png │ ├── button_press.xml │ ├── button_press_dark.xml │ ├── circle.xml │ ├── earth.png │ ├── finger.png │ ├── ic_ap_alert.xml │ ├── ic_arrow.xml │ ├── ic_arrow_gray.xml │ ├── ic_auto.xml │ ├── ic_autounlock.xml │ ├── ic_autounlock_active.xml │ ├── ic_autounlock_hold.xml │ ├── ic_autounlock_no.xml │ ├── ic_bluetooth.xml │ ├── ic_bluetooth_grey.xml │ ├── ic_cancel_white_48dp.png │ ├── ic_clear.png │ ├── ic_cloud.xml │ ├── ic_cube_2.xml │ ├── ic_delete_3_2.xml │ ├── ic_eye_off.xml │ ├── ic_eye_on.xml │ ├── ic_feedback.xml │ ├── ic_hand.xml │ ├── ic_hand_active.xml │ ├── ic_history_lock.xml │ ├── ic_history_unlock.xml │ ├── ic_home.xml │ ├── ic_icon_add.xml │ ├── ic_icon_delete.xml │ ├── ic_icon_lock_uncheck.xml │ ├── ic_icon_locked_check.xml │ ├── ic_icon_time_change.xml │ ├── ic_icon_unlock_uncheck.xml │ ├── ic_icon_unlocked_check.xml │ ├── ic_icons_filled_add_friends.xml │ ├── ic_icons_filled_add_friends_black.xml │ ├── ic_icons_filled_album.xml │ ├── ic_icons_filled_close.xml │ ├── ic_icons_filled_close_white.xml │ ├── ic_icons_filled_contacts.xml │ ├── ic_icons_filled_more.xml │ ├── ic_icons_filled_official_accounts.xml │ ├── ic_icons_outlined_addoutline.xml │ ├── ic_icons_outlined_contacts.xml │ ├── ic_icons_outlined_cros.xml │ ├── ic_icons_outlined_me.xml │ ├── ic_icons_outlined_qr_code.xml │ ├── ic_icons_outlined_setting.xml │ ├── ic_icons_outlined_share.xml │ ├── ic_keychain_original.xml │ ├── ic_man.xml │ ├── ic_qr_code_grey.xml │ ├── ic_qr_code_scan_2.xml │ ├── ic_tick.xml │ ├── ic_tick_blue.xml │ ├── ic_tick_grey.xml │ ├── ic_tick_select.xml │ ├── ic_upgrade.xml │ ├── ic_warning.png │ ├── ic_wifi_blue.xml │ ├── ic_wifi_blue_middle.xml │ ├── ic_wifi_blue_weak.xml │ ├── ic_wifi_grey.xml │ ├── ic_wifi_select.xml │ ├── ic_world.xml │ ├── ic_world_blue.xml │ ├── ic_world_grey.xml │ ├── ic_world_select.xml │ ├── icon_lock.png │ ├── icon_logining.png │ ├── icon_nosetting.png │ ├── icon_nosignal.png │ ├── icon_receiveblee.png │ ├── icon_unlock.png │ ├── icon_waitgatt.png │ ├── img_knob_3x.png │ ├── keyboard.png │ ├── menu_bg.png │ ├── menu_select.xml │ ├── pasmo.png │ ├── progress_blue.xml │ ├── progress_red.xml │ ├── purple_frame.xml │ ├── round_blue.xml │ ├── round_blue_lock_all.xml │ ├── round_cornor.xml │ ├── round_dot_clear.xml │ ├── round_gray.xml │ ├── round_light_gray.xml │ ├── round_red.xml │ ├── round_red_cercle.xml │ ├── round_red_unlock_all.xml │ ├── round_yellow.xml │ ├── rounded_button.xml │ ├── rounded_edt.xml │ ├── rounded_rect.xml │ ├── scan_icon_scanline.png │ ├── small_icon.png │ ├── spacer.xml │ ├── suica.png │ ├── swtich_locked.png │ ├── swtich_logining.png │ ├── swtich_no_ble.png │ ├── swtich_receive_ble.png │ ├── swtich_unlocked.png │ ├── swtich_waitgatt.png │ ├── wifi_green.png │ └── wifi_grey.png │ ├── layout │ ├── action_layout_dark.xml │ ├── action_layout_light.xml │ ├── activity_main.xml │ ├── adapter_load_more.xml │ ├── alert_check.xml │ ├── alert_download.xml │ ├── alert_layout_dark.xml │ ├── alert_layout_light.xml │ ├── alert_selector.xml │ ├── alert_standard.xml │ ├── back_sub.xml │ ├── cell_device_unregist.xml │ ├── cell_fingerprint.xml │ ├── cell_friend.xml │ ├── cell_friend_detail_device.xml │ ├── cell_history.xml │ ├── cell_history_header.xml │ ├── cell_password.xml │ ├── cell_suica.xml │ ├── cell_weget.xml │ ├── cell_weget_unlock.xml │ ├── cell_wm2_unregist.xml │ ├── device_guest_member_cell.xml │ ├── device_member_add.xml │ ├── device_member_cell.xml │ ├── device_member_guest.xml │ ├── fg_add_member.xml │ ├── fg_devicelist.xml │ ├── fg_friend_detail.xml │ ├── fg_friend_list.xml │ ├── fg_friend_select_locker_list.xml │ ├── fg_friends.xml │ ├── fg_login_mail.xml │ ├── fg_me.xml │ ├── fg_member_select_list.xml │ ├── fg_my_ssmkey.xml │ ├── fg_myqr.xml │ ├── fg_no_hand.xml │ ├── fg_rg_device.xml │ ├── fg_room_bike2_main.xml │ ├── fg_room_main.xml │ ├── fg_room_ss5_main.xml │ ├── fg_sesame_ds_setting.xml │ ├── fg_sesame_opensensor_noble_setting.xml │ ├── fg_sesame_touchpro_setting.xml │ ├── fg_set_angle.xml │ ├── fg_setting_main.xml │ ├── fg_ssm_bike_setting.xml │ ├── fg_ssm_bot_setting.xml │ ├── fg_ssm_connected_card_list.xml │ ├── fg_ssm_tp_card_list.xml │ ├── fg_ssm_tp_fp_list.xml │ ├── fg_ssm_tp_passcode_list.xml │ ├── fg_ssm_tp_select_locker_list.xml │ ├── fg_verify_mail.xml │ ├── fg_wm2_scan_list.xml │ ├── fg_wm2_select_locker_list.xml │ ├── fg_wm2_setting.xml │ ├── friend_cell.xml │ ├── guestkey_cell.xml │ ├── guestkey_list.xml │ ├── item_custom.xml │ ├── key_cell.xml │ ├── layout_balloon.xml │ ├── layout_custom_list.xml │ ├── list_item_simple_footer.xml │ ├── list_item_simple_header.xml │ ├── list_item_simple_item.xml │ ├── sesame_layout.xml │ ├── ssmbike_layout.xml │ ├── wm2_key_cell.xml │ └── wm2_layout.xml │ ├── menu │ └── bottom_nav.xml │ ├── mipmap-hdpi │ └── ic_launcher_round.png │ ├── mipmap-mdpi │ └── ic_launcher_round.png │ ├── mipmap-xhdpi │ └── ic_launcher_round.png │ ├── mipmap-xxhdpi │ └── ic_launcher_round.png │ ├── mipmap-xxxhdpi │ └── ic_launcher_round.png │ ├── navigation │ ├── devices_ng.xml │ └── nav_graph.xml │ ├── raw │ ├── bleconnector_30_11_3a61be.zip │ ├── opensensor1_30_8_dcd308.zip │ ├── sesame5_30_5_aaac8b.zip │ ├── sesame5pro_30_7_aaac8b.zip │ ├── sesame_221_0_8c080c.zip │ ├── sesame_421_4_50ce5b.zip │ ├── sesamebike1_21_3_d7162a.zip │ ├── sesamebike2_30_6_4835a6.zip │ ├── sesamebot1_21_2_369eb9.zip │ ├── sesametouch1_30_10_77a483.zip │ └── sesametouch1pro_30_9_77a483.zip │ ├── values-ja │ └── strings.xml │ ├── values-zh-rCN │ └── strings.xml │ ├── values-zh-rTW │ └── strings.xml │ ├── values │ ├── arrays.xml │ ├── attrs.xml │ ├── colors.xml │ ├── strings.xml │ └── styles.xml │ └── xml │ ├── nfc_tech_filter.xml │ └── provider_paths.xml ├── build.gradle ├── doc ├── APP_instroduce.md ├── APP_instroduce_ja.md ├── Sesame_framework.md ├── Sesame_framework_ja.md ├── ble_product_serials.md ├── ble_product_serials_jp.md ├── bleconnect │ ├── SesameOs3.jpg │ ├── app_instroduce.puml │ ├── app_instroduce.svg │ ├── ble_receivedata.md │ ├── ble_receivedata_jp.md │ ├── ble_senddata.md │ ├── ble_senddata_jp.md │ ├── data_receive.puml │ ├── data_receive.svg │ ├── data_send.puml │ ├── data_send.svg │ ├── login.md │ ├── login.puml │ ├── login.svg │ ├── login_jp.md │ ├── randomcode.md │ ├── randomcode.puml │ ├── randomcode.svg │ ├── randomcode_jp.md │ ├── register.md │ ├── register.puml │ ├── register.svg │ ├── register_jp.md │ ├── timestamp.md │ ├── timestamp.puml │ ├── timestamp.svg │ └── timestamp_jp.md ├── bleprotocol │ ├── BleConnect.md │ ├── BleConnect.svg │ ├── BleConnect_ja.md │ ├── firmware.png │ ├── firmwareUpgradation.md │ ├── firmwareUpgradation_ja.md │ ├── nfcconnect.md │ └── nfcconnect_ja.md ├── class │ ├── CHBaseAdv.md │ ├── CHBaseAdv_jp.md │ ├── CHBaseDevice.md │ ├── CHBaseDevice_jp.md │ ├── CHBleManager .md │ ├── CHDeviceLoginStatus.md │ ├── CHDeviceLoginStatus_jp.md │ ├── CHDeviceStatus.md │ ├── CHDeviceStatusDelegate.md │ ├── CHDeviceStatusDelegate_jp.md │ ├── CHDeviceStatus_jp.md │ ├── CHDeviceUtil.md │ ├── CHDeviceUtil_jp.md │ ├── CHDevices.md │ ├── CHDevices_jp.md │ ├── CHProductModel.md │ ├── CHProductModel_jp.md │ ├── CHSesame2.md │ ├── CHSesame2_jp.md │ ├── CHSesame5.md │ ├── CHSesame5Device.md │ ├── CHSesame5Device.puml │ ├── CHSesame5Device.svg │ ├── CHSesame5Device_jp.md │ ├── CHSesame5_jp.md │ ├── CHSesameBike.md │ ├── CHSesameBike2.md │ ├── CHSesameBike2Device.md │ ├── CHSesameBike2Device.puml │ ├── CHSesameBike2Device.svg │ ├── CHSesameBike2Device_jp.md │ ├── CHSesameBike2MechStatus.md │ ├── CHSesameBike2MechStatus_jp.md │ ├── CHSesameBike2_jp.md │ ├── CHSesameBike_jp.md │ ├── CHSesameBot.md │ ├── CHSesameBotMechSettings.md │ ├── CHSesameBotMechSettings_jp.md │ ├── CHSesameBotMechStatus.md │ ├── CHSesameBotMechStatus_jp.md │ ├── CHSesameBot_jp.md │ ├── CHSesameConnector.md │ ├── CHSesameConnector_jp.md │ ├── CHSesameLock.md │ ├── CHSesameLock_jp.md │ ├── CHSesameOS3.md │ ├── CHSesameOS3Publish.md │ ├── CHSesameOS3Publish_jp.md │ ├── CHSesameOS3_jp.md │ ├── CHSesameProtocolMechStatus.md │ ├── CHSesameProtocolMechStatus_jp.md │ ├── CHSesameSensor.md │ ├── CHSesameSensorDelegate.md │ ├── CHSesameSensorDelegate_jp.md │ ├── CHSesameSensor_jp.md │ ├── CHSesameTouchCard.md │ ├── CHSesameTouchCard_jp.md │ ├── CHSesameTouchPro.md │ ├── CHSesameTouchProDelegate.md │ ├── CHSesameTouchProDelegate_jp.md │ ├── CHSesameTouchProDevice.md │ ├── CHSesameTouchProDevice.puml │ ├── CHSesameTouchProDevice.svg │ ├── CHSesameTouchProDevice_jp.md │ ├── CHSesameTouchPro_jp.md │ ├── CHWifiModule2.md │ ├── CHWifiModule2Delegate.md │ ├── CHWifiModule2Delegate_jp.md │ ├── CHWifiModule2Device.md │ ├── CHWifiModule2Device.puml │ ├── CHWifiModule2Device.svg │ ├── CHWifiModule2Device_jp.md │ ├── CHWifiModule2MechSettings.md │ ├── CHWifiModule2MechSettings_jp.md │ ├── CHWifiModule2NetWorkStatus.md │ ├── CHWifiModule2NetWorkStatus_jp.md │ ├── CHWifiModule2_jp.md │ ├── CHadv.md │ ├── CHadv_jp.md │ ├── DeviceSegmentType.md │ ├── DeviceSegmentType_jp.md │ ├── NSError.md │ ├── NSError_jp.md │ ├── SSM2OpCode.md │ ├── SSM2OpCode_jp.md │ ├── SSM2ResponsePayload.md │ ├── SSM2ResponsePayload_jp.md │ ├── SSM3PublishPayload.md │ ├── SSM3PublishPayload_jp.md │ ├── SSM3ResponsePayload.md │ ├── SSM3ResponsePayload_jp.md │ ├── Sesame2HistoryTypeEnum.md │ ├── Sesame2HistoryTypeEnum_jp.md │ ├── SesameBleReceiver.md │ ├── SesameBleReceiver_jp.md │ ├── SesameBleTransmit.md │ ├── SesameBleTransmit_jp.md │ ├── SesameItemCode.md │ ├── SesameItemCode_jp.md │ ├── SesameNotifypayload.md │ ├── SesameNotifypayload_jp.md │ ├── SesameOS3BleCipher.md │ ├── SesameOS3BleCipher_jp.md │ ├── SesameOS3Payload.md │ ├── SesameOS3Payload_jp.md │ ├── SesameResultCode.md │ ├── SesameResultCode_jp.md │ ├── WM2ActionCode.md │ ├── WM2ActionCode_jp.md │ ├── a.jpg │ ├── allclass.md │ ├── allclass_jp.md │ ├── allclsbg.md │ └── utils.md ├── command │ ├── autolock.md │ ├── autolock.puml │ ├── autolock.svg │ ├── autolock_jp.md │ ├── click.md │ ├── click.svg │ ├── configureLockPosition.md │ ├── configureLockPosition.puml │ ├── configureLockPosition.svg │ ├── configureLockPosition_jp.md │ ├── history.md │ ├── history.puml │ ├── history.svg │ ├── history_jp.md │ ├── lock.md │ ├── lock.puml │ ├── lock.svg │ ├── lock_jp.md │ ├── magnet.md │ ├── magnet.puml │ ├── magnet.svg │ ├── magnet_jp.md │ ├── reset.md │ ├── reset.puml │ ├── reset.svg │ ├── reset_jp.md │ ├── sesame4fun.md │ ├── sesame5fun.md │ ├── sesame5fun_jp.md │ ├── sesame_open_sensor.md │ ├── sesame_open_sensor_jp.md │ ├── sesamebike2fun.md │ ├── sesamebike2fun_jp.md │ ├── sesamebleconnect.md │ ├── sesameblot.md │ ├── sesametouchpro.md │ ├── sesametouchpro_jp.md │ ├── sesamewifimodule.md │ ├── sesamewifimodule_jp.md │ ├── ssm5version.md │ ├── ssm5version.puml │ ├── ssm5version.svg │ ├── ssm5version_jp.md │ ├── unlock.md │ ├── unlock.puml │ ├── unlock.svg │ ├── unlock_jp.md │ ├── updatasetting.md │ └── updatasetting.svg ├── encryption │ ├── ble_encryption.md │ ├── ble_encryption.puml │ ├── ble_encryption.svg │ └── ble_encryption_jp.md ├── img │ └── SesameSDK_20231201.png ├── product_structure.md ├── product_structure_ja.md ├── sesame_code.md ├── sesame_code_cls.md ├── sesame_code_cls_ja.md ├── sesame_code_ja.md ├── touch │ ├── add_sesame.md │ ├── add_sesame.svg │ ├── add_sesame_jp.md │ ├── card_change.md │ ├── card_change.svg │ ├── card_change_jp.md │ ├── card_delete.md │ ├── card_delete.svg │ ├── card_delete_jp.md │ ├── card_get.md │ ├── card_get.svg │ ├── card_get_jp.md │ ├── card_last.md │ ├── card_model_get.md │ ├── card_model_get.svg │ ├── card_model_get_jp.md │ ├── card_model_set.md │ ├── card_model_set.svg │ ├── card_model_set_jp.md │ ├── finger_change.md │ ├── finger_change.svg │ ├── finger_change_jp.md │ ├── finger_delete.md │ ├── finger_delete.svg │ ├── finger_delete_jp.md │ ├── finger_get.md │ ├── finger_get.puml │ ├── finger_get.svg │ ├── finger_get_jp.md │ ├── finger_mode_get.md │ ├── finger_mode_get.svg │ ├── finger_mode_get_jp.md │ ├── finger_mode_set.md │ ├── finger_mode_set.svg │ ├── finger_mode_set_jp.md │ ├── kbpc_change.md │ ├── kbpc_change.svg │ ├── kbpc_change_jp.md │ ├── kbpc_delete.md │ ├── kbpc_delete.svg │ ├── kbpc_delete_jp.md │ ├── kbpc_get.md │ ├── kbpc_get.svg │ ├── kbpc_get_jp.md │ ├── kbpc_mode_get.md │ ├── kbpc_mode_get.svg │ ├── kbpc_mode_get_jp.md │ ├── kbpc_mode_set.md │ ├── kbpc_mode_set.svg │ ├── kbpc_mode_set_jp.md │ ├── public_sesame_key.md │ ├── public_sesame_key.svg │ ├── remove_sesame.md │ ├── remove_sesame.svg │ └── remove_sesame_jp.md └── wm2 │ ├── connectwifi.md │ ├── connectwifi.svg │ ├── connectwifi_jp.md │ ├── finger_get.puml │ ├── scanwifissid.md │ ├── scanwifissid.svg │ ├── scanwifissid_jp.md │ ├── setwifipw.md │ ├── setwifipw.svg │ ├── setwifipw_jp.md │ ├── setwifissid.md │ ├── setwifissid.svg │ └── setwifissid_jp.md ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── install_start.sh ├── sesame-sdk ├── .gitignore ├── build.gradle ├── maven.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── co │ └── candyhouse │ └── sesame │ ├── ble │ ├── CHBaseDevice.kt │ ├── Sesame2BleAdvertisement.kt │ ├── SesameBleReceiver.kt │ ├── SesameProtocols.kt │ ├── os2 │ │ ├── CHServerAuth.kt │ │ ├── CHSesame2Device.kt │ │ ├── CHSesameBikeDevice.kt │ │ ├── CHSesameBotDevice.kt │ │ └── base │ │ │ ├── CHSesameOS2.kt │ │ │ └── SesameOS2BleCipher.kt │ └── os3 │ │ ├── CHSesame5Device.kt │ │ ├── CHSesameBike2Device.kt │ │ ├── CHSesameTouchProDevice.kt │ │ ├── CHWifiModule2Device.kt │ │ └── base │ │ ├── CHSesameOS3.kt │ │ └── SesameOS3BleCipher.kt │ ├── db │ ├── ChDeviceDB.kt │ └── model │ │ ├── CHDBModel.kt │ │ └── base │ │ ├── BaseDao.kt │ │ └── BaseModel.kt │ ├── open │ ├── CHAccountManager.kt │ ├── CHBleManager.kt │ ├── CHConfiguration.kt │ ├── CHDeviceManager.kt │ └── device │ │ ├── CHDeivceProtocols.kt │ │ ├── CHSesame2.kt │ │ ├── CHSesame5.kt │ │ ├── CHSesameBike.kt │ │ ├── CHSesameBike2.kt │ │ ├── CHSesameBot.kt │ │ ├── CHSesameSensor.kt │ │ ├── CHSesameTouchPro.kt │ │ └── CHWifiModule2.kt │ ├── server │ └── dto │ │ ├── CHHistoryUploadRequest.kt │ │ └── CHHistoryUploadRes.kt │ └── utils │ ├── DataExtention.kt │ ├── EccKey.kt │ ├── L.kt │ └── aescmac │ ├── AESCMAC.kt │ ├── AesUtil.kt │ ├── Bytes.kt │ ├── EngineFactory.kt │ ├── EngineWrapper.kt │ ├── MAC.kt │ ├── SubtleUtil.kt │ └── Validators.kt └── settings.gradle /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2014-2023 CANDY HOUSE 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/src/main/java/co/candyhouse/app/App.kt: -------------------------------------------------------------------------------- 1 | package co.candyhouse.app 2 | 3 | import android.app.Application 4 | import android.widget.Toast 5 | import androidx.preference.PreferenceManager 6 | import co.candyhouse.sesame.open.CHBleManager 7 | import co.utils.CrashUtils 8 | import co.utils.L 9 | import co.utils.SharedPreferencesUtils 10 | 11 | 12 | class CandyHouseApp : Application() { 13 | companion object { 14 | @JvmStatic 15 | private var baseApp: CandyHouseApp? = null 16 | val app by lazy { 17 | baseApp!! 18 | } 19 | } 20 | override fun onCreate() { 21 | super.onCreate() 22 | L.d("hcia", "🌱:" + BuildConfig.BUILD_TYPE +":"+ BuildConfig.VERSION_NAME +":") 23 | CHBleManager(this) 24 | CrashUtils.instance?.init(this) 25 | 26 | SharedPreferencesUtils.init(PreferenceManager.getDefaultSharedPreferences(applicationContext)) 27 | baseApp=this 28 | 29 | 30 | } 31 | fun ts(msg:String){ 32 | Toast.makeText(this,msg, Toast.LENGTH_SHORT).show() 33 | 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/co/candyhouse/app/base/BaseNFG.kt: -------------------------------------------------------------------------------- 1 | package co.candyhouse.app.base 2 | 3 | import androidx.fragment.app.Fragment 4 | import android.os.Bundle 5 | import android.view.View 6 | import androidx.navigation.fragment.findNavController 7 | import co.candyhouse.sesame.utils.L 8 | import kotlinx.android.synthetic.main.back_sub.* 9 | 10 | open class BaseNFG(layout: Int) : Fragment(layout) { 11 | 12 | override fun onViewCreated(view: View, savedInstanceState: Bundle?) { 13 | super.onViewCreated(view, savedInstanceState) 14 | // back_zone: 返回紐 15 | back_zone?.setOnClickListener { 16 | // Nav返回前一層 17 | findNavController().navigateUp() 18 | } 19 | } 20 | 21 | override fun onResume() { 22 | super.onResume() 23 | L.l("fragment",this::class.java.simpleName) 24 | } 25 | } -------------------------------------------------------------------------------- /app/src/main/java/co/candyhouse/app/tabs/devices/model/CHUserViewModel.kt: -------------------------------------------------------------------------------- 1 | package co.candyhouse.app.tabs.devices.model 2 | 3 | import androidx.lifecycle.MutableLiveData 4 | import androidx.lifecycle.ViewModel 5 | import co.utils.CHUser 6 | 7 | import co.utils.L 8 | import co.utils.SharedPreferencesUtils 9 | import kotlinx.coroutines.flow.MutableStateFlow 10 | 11 | class CHUserViewModel : ViewModel() { 12 | var isLoaded = false 13 | 14 | val userViewModel = MutableLiveData() 15 | 16 | val myFriends = MutableStateFlow(ArrayList()) 17 | 18 | var needRefresh = MutableLiveData() 19 | var lastDataSize = MutableLiveData() 20 | 21 | fun clearFriend() { 22 | isLoaded = true 23 | SharedPreferencesUtils.isNeedFreshFriend = false 24 | myFriends.value.apply { 25 | clear() 26 | }.run { 27 | needRefresh.postValue(false) 28 | } 29 | } 30 | 31 | fun syncFriendsFromServer() { 32 | L.d("hcia", "刷新朋友 syncFriendsFromServer") 33 | needRefresh.postValue(true) 34 | 35 | 36 | } 37 | 38 | 39 | } -------------------------------------------------------------------------------- /app/src/main/java/co/candyhouse/app/tabs/devices/ssm2/setting/Constans.kt: -------------------------------------------------------------------------------- 1 | package co.candyhouse.app.tabs.devices.ssm2.setting 2 | 3 | import co.candyhouse.app.R 4 | import co.candyhouse.app.base.BaseDeviceFG 5 | 6 | val secondSettingValue = arrayOf(0, 3, 5, 7, 10, 15, 30, 60, 60 * 2, 60 * 5, 60 * 10, 60 * 15, 60 * 30, 60 * 60) 7 | fun BaseDeviceFG.getSeconds(): List { 8 | return listOf(getString(R.string.Off), getString(R.string.sec3), getString(R.string.sec5), getString(R.string.sec7), getString(R.string.sec10), getString(R.string.sec15), getString(R.string.sec30), getString(R.string.min1), getString(R.string.min2), getString(R.string.min5), getString(R.string.min10), getString(R.string.min15), getString(R.string.min30), getString(R.string.hr1)) 9 | } 10 | 11 | 12 | fun BaseDeviceFG.findSettingIndexByValue(index:Int): Int { 13 | secondSettingValue.forEachIndexed { i, it -> 14 | if (it == index) { 15 | return i 16 | } 17 | } 18 | return -1 19 | } 20 | 21 | fun BaseDeviceFG.findSettinStringByValue(index:Int): String { 22 | return getSeconds()[findSettingIndexByValue(index)] 23 | } -------------------------------------------------------------------------------- /app/src/main/java/co/candyhouse/app/tabs/devices/ssmbike/setting/SesameBikeSettingFG.kt: -------------------------------------------------------------------------------- 1 | package co.candyhouse.app.tabs.devices.ssmbike.setting 2 | 3 | import co.candyhouse.app.R 4 | import co.candyhouse.app.base.BaseDeviceSettingFG 5 | 6 | class SesameBikeSettingFG : BaseDeviceSettingFG(R.layout.fg_ssm_bike_setting) 7 | -------------------------------------------------------------------------------- /app/src/main/java/co/candyhouse/app/tabs/menu/BarMenuItem.kt: -------------------------------------------------------------------------------- 1 | 2 | package co.candyhouse.app.tabs.menu 3 | 4 | import android.content.Context 5 | import android.graphics.drawable.Drawable 6 | import androidx.annotation.DrawableRes 7 | import androidx.core.content.ContextCompat 8 | import co.candyhouse.app.R 9 | 10 | 11 | data class BarMenuItem( 12 | val index: Int, 13 | val icon: Drawable?, 14 | val title: String 15 | ) 16 | 17 | object ItemUtils { 18 | 19 | 20 | fun getCustomSamples(context: Context): List { 21 | val samples = ArrayList() 22 | samples.add(BarMenuItem(1, drawable(context, R.drawable.ic_cube_2), context.getString(R.string.new_sesame))) 23 | // samples.add(BarMenuItem(2, drawable(context, R.drawable.ic_qr_code_scan_2), context.getString(R.string.scan_the_qr_code)))//todo k ic_icons_filled_scan 24 | 25 | return samples 26 | } 27 | 28 | private fun drawable(context: Context, @DrawableRes id: Int): Drawable? { 29 | return ContextCompat.getDrawable(context, id) 30 | } 31 | } -------------------------------------------------------------------------------- /app/src/main/java/co/utils/alertview/enums/AlertActionStyle.kt: -------------------------------------------------------------------------------- 1 | package co.utils.alertview.enums 2 | 3 | /** 4 | * Created by hammad.akram on 3/14/18. 5 | */ 6 | enum class AlertActionStyle { 7 | POSITIVE, 8 | NEGATIVE, 9 | DEFAULT 10 | } -------------------------------------------------------------------------------- /app/src/main/java/co/utils/alertview/enums/AlertStyle.kt: -------------------------------------------------------------------------------- 1 | package co.utils.alertview.enums 2 | 3 | /** 4 | * Created by hammad.akram on 3/14/18. 5 | */ 6 | enum class AlertStyle { 7 | BOTTOM_SHEET, 8 | DIALOG, 9 | IOS 10 | } -------------------------------------------------------------------------------- /app/src/main/java/co/utils/alertview/enums/AlertTheme.kt: -------------------------------------------------------------------------------- 1 | package co.utils.alertview.enums 2 | 3 | /** 4 | * Created by hammad.akram on 3/14/18. 5 | */ 6 | enum class AlertTheme { 7 | LIGHT, 8 | DARK 9 | } -------------------------------------------------------------------------------- /app/src/main/java/co/utils/alertview/interfaces/AlertActionListener.kt: -------------------------------------------------------------------------------- 1 | package co.utils.alertview.interfaces 2 | 3 | import co.utils.alertview.objects.AlertAction 4 | 5 | /** 6 | * Created by hammad.akram on 3/14/18. 7 | */ 8 | 9 | interface AlertActionListener { 10 | fun onActionClick(action: AlertAction) 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/co/utils/alertview/objects/AlertAction.kt: -------------------------------------------------------------------------------- 1 | package co.utils.alertview.objects 2 | 3 | import co.utils.alertview.interfaces.AlertActionListener 4 | import co.utils.alertview.enums.AlertActionStyle 5 | 6 | /** 7 | * Created by hammad.akram on 3/14/18. 8 | */ 9 | class AlertAction { 10 | var title: String 11 | var style: AlertActionStyle 12 | var action: ((AlertAction) -> Unit)? 13 | var actionListener: AlertActionListener? 14 | 15 | constructor(title: String, style: AlertActionStyle, action: (AlertAction) -> Unit) { 16 | this.title = title 17 | this.style = style 18 | this.action = action 19 | this.actionListener = null 20 | } 21 | 22 | constructor(title: String, style: AlertActionStyle, actionListener: AlertActionListener) { 23 | this.title = title 24 | this.style = style 25 | this.actionListener = actionListener 26 | this.action = null 27 | } 28 | 29 | 30 | } -------------------------------------------------------------------------------- /app/src/main/java/co/utils/balloon/ArrowOrientation.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2019 skydoves 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.skydoves.balloon 18 | 19 | /** ArrowOrientation determines the orientation of the arrow. */ 20 | enum class ArrowOrientation { 21 | BOTTOM, 22 | TOP, 23 | LEFT, 24 | RIGHT 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/co/utils/balloon/BalloonAnimation.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2019 skydoves 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.skydoves.balloon 18 | 19 | /** BalloonAnimation is the collection of the popup animations. */ 20 | @Suppress("unused") 21 | enum class BalloonAnimation { 22 | NONE, 23 | ELASTIC, 24 | FADE, 25 | CIRCULAR, 26 | OVERSHOOT 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/co/utils/balloon/OnBalloonClickListener.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2019 skydoves 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.skydoves.balloon 18 | 19 | import android.view.View 20 | 21 | /** Interface definition for a callback to be invoked when a balloon view is clicked. */ 22 | interface OnBalloonClickListener { 23 | fun onBalloonClick(view: View) 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/co/utils/balloon/OnBalloonDismissListener.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2019 skydoves 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.skydoves.balloon 18 | 19 | /** Interface definition for a callback to be invoked when a balloon view is dismissed. */ 20 | interface OnBalloonDismissListener { 21 | fun onBalloonDismiss() 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/co/utils/balloon/OnBalloonOutsideTouchListener.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2019 skydoves 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.skydoves.balloon 18 | 19 | import android.view.MotionEvent 20 | import android.view.View 21 | 22 | /** Interface definition for a callback to be invoked when touched on outside of the balloon popup. */ 23 | interface OnBalloonOutsideTouchListener { 24 | fun onBalloonOutsideTouch(view: View, event: MotionEvent) 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/co/utils/balloon/TextViewExtension.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2019 skydoves 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.skydoves.balloon 18 | 19 | import android.widget.TextView 20 | 21 | /** applies text form attributes to a TextView instance. */ 22 | @Suppress("unused") 23 | internal fun TextView.applyTextForm(textForm: TextForm) { 24 | text = textForm.text 25 | textSize = textForm.textSize 26 | setTextColor(textForm.textColor) 27 | textForm.textTypeface?.let { typeface = it } ?: setTypeface(typeface, textForm.textStyle) 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/co/utils/materialtextfield/custom/AnimatedRectF.kt: -------------------------------------------------------------------------------- 1 | package co.utils.materialtextfield.custom 2 | 3 | import android.graphics.RectF 4 | 5 | class AnimatedRectF(left: Float, top: Float, right: Float, bottom: Float) : RectF(left, top, right, bottom) { 6 | 7 | fun setTop(top: Float) { 8 | this.top = top 9 | } 10 | 11 | fun setBottom(bottom: Float) { 12 | this.bottom = bottom 13 | } 14 | 15 | fun setRight(right: Float) { 16 | this.right = right 17 | } 18 | 19 | fun setLeft(left: Float) { 20 | this.left = left 21 | } 22 | } -------------------------------------------------------------------------------- /app/src/main/res/anim/dispose_center.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/anim/elastic_center.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/anim/fade_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/anim/fade_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/anim/modal_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/anim/overshoot_center.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/anim/shake.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/anim/show_down_center.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/anim/show_up_center.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_down.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_in_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_in_left.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_in_right.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_in_up.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_out_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_out_left.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_out_right.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_out_up.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_up.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/animator/cloud_dowload.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/alert_background_dark.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/alert_background_light.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/app_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/app_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/arrow.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_btn_confirm.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_btn_warning.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_dialog.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bl_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/bl_green.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/bl_grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/bl_grey.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/bt0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/bt0.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/button_press.xml: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/button_press_dark.xml: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/earth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/earth.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/finger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/finger.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_ap_alert.xml: -------------------------------------------------------------------------------- 1 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow.xml: -------------------------------------------------------------------------------- 1 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow_gray.xml: -------------------------------------------------------------------------------- 1 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_cancel_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/ic_cancel_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_clear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/ic_clear.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_cloud.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_eye_off.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_eye_on.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_feedback.xml: -------------------------------------------------------------------------------- 1 | 16 | 17 | 22 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_history_lock.xml: -------------------------------------------------------------------------------- 1 | 6 | 11 | 16 | 19 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_history_unlock.xml: -------------------------------------------------------------------------------- 1 | 6 | 11 | 16 | 19 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_home.xml: -------------------------------------------------------------------------------- 1 | 16 | 17 | 22 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_icon_add.xml: -------------------------------------------------------------------------------- 1 | 6 | 11 | 16 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_icon_delete.xml: -------------------------------------------------------------------------------- 1 | 6 | 11 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_icon_lock_uncheck.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_icon_time_change.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_icon_unlock_uncheck.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_icons_filled_add_friends.xml: -------------------------------------------------------------------------------- 1 | 6 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_icons_filled_add_friends_black.xml: -------------------------------------------------------------------------------- 1 | 6 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_icons_filled_album.xml: -------------------------------------------------------------------------------- 1 | 6 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_icons_filled_close.xml: -------------------------------------------------------------------------------- 1 | 6 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_icons_filled_close_white.xml: -------------------------------------------------------------------------------- 1 | 6 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_icons_filled_contacts.xml: -------------------------------------------------------------------------------- 1 | 6 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_icons_filled_more.xml: -------------------------------------------------------------------------------- 1 | 6 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_icons_filled_official_accounts.xml: -------------------------------------------------------------------------------- 1 | 6 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_icons_outlined_addoutline.xml: -------------------------------------------------------------------------------- 1 | 6 | 12 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_icons_outlined_cros.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_icons_outlined_share.xml: -------------------------------------------------------------------------------- 1 | 6 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_keychain_original.xml: -------------------------------------------------------------------------------- 1 | 6 | 11 | 16 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_tick.xml: -------------------------------------------------------------------------------- 1 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_tick_blue.xml: -------------------------------------------------------------------------------- 1 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_tick_grey.xml: -------------------------------------------------------------------------------- 1 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_tick_select.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_upgrade.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/ic_warning.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_wifi_select.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_world_select.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/icon_lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/icon_lock.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/icon_logining.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/icon_logining.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/icon_nosetting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/icon_nosetting.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/icon_nosignal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/icon_nosignal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/icon_receiveblee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/icon_receiveblee.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/icon_unlock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/icon_unlock.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/icon_waitgatt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/icon_waitgatt.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/img_knob_3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/img_knob_3x.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/keyboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/keyboard.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/menu_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/menu_bg.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/menu_select.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/pasmo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/pasmo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/progress_blue.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/progress_red.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/round_blue.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/round_blue_lock_all.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/round_cornor.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/round_dot_clear.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/round_gray.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/round_light_gray.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/round_red.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/round_red_cercle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/round_red_unlock_all.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/round_yellow.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rounded_edt.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 10 | 11 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rounded_rect.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/scan_icon_scanline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/scan_icon_scanline.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/small_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/small_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/spacer.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/suica.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/suica.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/swtich_locked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/swtich_locked.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/swtich_logining.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/swtich_logining.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/swtich_no_ble.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/swtich_no_ble.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/swtich_receive_ble.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/swtich_receive_ble.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/swtich_unlocked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/swtich_unlocked.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/swtich_waitgatt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/swtich_waitgatt.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/wifi_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/wifi_green.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/wifi_grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/drawable/wifi_grey.png -------------------------------------------------------------------------------- /app/src/main/res/layout/action_layout_dark.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 12 | 13 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/layout/action_layout_light.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 12 | 13 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/layout/adapter_load_more.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 16 | 17 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/layout/alert_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 22 | 23 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/layout/cell_friend.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/layout/cell_history.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/cell_history_header.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/layout/device_member_add.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/guestkey_cell.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 19 | 20 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_custom_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout/list_item_simple_footer.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 18 | 19 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/layout/list_item_simple_header.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/menu/bottom_nav.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/navigation/nav_graph.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/raw/bleconnector_30_11_3a61be.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/raw/bleconnector_30_11_3a61be.zip -------------------------------------------------------------------------------- /app/src/main/res/raw/opensensor1_30_8_dcd308.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/raw/opensensor1_30_8_dcd308.zip -------------------------------------------------------------------------------- /app/src/main/res/raw/sesame5_30_5_aaac8b.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/raw/sesame5_30_5_aaac8b.zip -------------------------------------------------------------------------------- /app/src/main/res/raw/sesame5pro_30_7_aaac8b.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/raw/sesame5pro_30_7_aaac8b.zip -------------------------------------------------------------------------------- /app/src/main/res/raw/sesame_221_0_8c080c.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/raw/sesame_221_0_8c080c.zip -------------------------------------------------------------------------------- /app/src/main/res/raw/sesame_421_4_50ce5b.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/raw/sesame_421_4_50ce5b.zip -------------------------------------------------------------------------------- /app/src/main/res/raw/sesamebike1_21_3_d7162a.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/raw/sesamebike1_21_3_d7162a.zip -------------------------------------------------------------------------------- /app/src/main/res/raw/sesamebike2_30_6_4835a6.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/raw/sesamebike2_30_6_4835a6.zip -------------------------------------------------------------------------------- /app/src/main/res/raw/sesamebot1_21_2_369eb9.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/raw/sesamebot1_21_2_369eb9.zip -------------------------------------------------------------------------------- /app/src/main/res/raw/sesametouch1_30_10_77a483.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/raw/sesametouch1_30_10_77a483.zip -------------------------------------------------------------------------------- /app/src/main/res/raw/sesametouch1pro_30_9_77a483.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/app/src/main/res/raw/sesametouch1pro_30_9_77a483.zip -------------------------------------------------------------------------------- /app/src/main/res/values/arrays.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 0 m 5 | 500 m 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/xml/nfc_tech_filter.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |    4 | android.nfc.tech.IsoDep 5 |    6 | android.nfc.tech.NfcA 7 |    8 | android.nfc.tech.NfcB 9 |    10 | android.nfc.tech.NfcF 11 |    12 | android.nfc.tech.NfcV 13 |    14 | android.nfc.tech.Ndef 15 |    16 | android.nfc.tech.NdefFormatable 17 |    18 | android.nfc.tech.MifareClassic 19 |    20 | android.nfc.tech.MifareUltralight 21 |    22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/xml/provider_paths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | dependencies { 3 | classpath 'com.android.tools.build:gradle:7.3.1' 4 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.20" 5 | 6 | 7 | 8 | } 9 | repositories { 10 | google() 11 | jcenter() 12 | 13 | 14 | 15 | 16 | } 17 | } 18 | 19 | allprojects { 20 | repositories { 21 | google() 22 | jcenter() 23 | 24 | } 25 | } 26 | 27 | task clean(type: Delete) { 28 | delete rootProject.buildDir 29 | } 30 | 31 | -------------------------------------------------------------------------------- /doc/Sesame_framework_ja.md: -------------------------------------------------------------------------------- 1 | # 框架の選択は以下のとおりです 2 | 3 | ### **権限フレームワーク:** [Easypermissions](https://github.com/googlesamples/easypermissions) 4 | ### **ローカルデータベース永続化:** [Room](https://developer.android.com/training/data-storage/room?hl=zh-cn) 5 | ### **画面ナビゲーション:** [Navigation ](https://developer.android.com/guide/navigation?hl=zh-cn) 6 | ### **画面データ管理:** [ViewModel](https://developer.android.com/topic/libraries/architecture/viewmodel?hl=zh-cn) 7 | ### **ファームウェアアップデートライブラリ:** [Dfu](https://github.com/NordicSemiconductor/Android-DFU-Library) 8 | ### **ローカルストレージ:** [Preference](https://developer.android.com/jetpack/androidx/releases/preference?hl=zh-cn) 9 | ### **UIコンポーネントライブラリ:** 10 | - #### **プルダウンリフレッシュ:** [Swiperefreshlayout](https://developer.android.com/jetpack/androidx/releases/swiperefreshlayout?hl=zh-cn) 11 | - #### **Recyclerviewヘッダースティッキー:** [StickyHeaders](https://github.com/ShamylZakariya/StickyHeaders) 12 | - #### **自動調整エディットテキスト:** [AutoResizeEditText](https://github.com/victorminerva/AutoResizeEditText) 13 | - #### **カルーセルビュー:** [LoopView](https://github.com/AWarmHug/androidWheelView) 14 | - #### **スライダーライブラリ:** [Indicatorseekbar](https://github.com/warkiz/IndicatorSeekBar) 15 | -------------------------------------------------------------------------------- /doc/ble_product_serials.md: -------------------------------------------------------------------------------- 1 | Bleプロジェクトのコード例に関する説明一覧 2 | ======== 3 | 8 | ### 1. [Sesame 5](command/sesame5fun.md) 9 | ### 2. [Sesame 5 Pro ](command/sesame5fun.md) 10 | ### 3. [Sesame Bike 2](command/sesamebike2fun.md) 11 | ### 4. [Sesame WiFi Module 2](command/sesamewifimodule.md) 12 | ### 5. [Sesame BLE Connector1](command/sesametouchpro.md) 13 | ### 6. [Sesame Touch 1 Pro](command/sesametouchpro.md) 14 | ### 7. [Sesame Open Sensor 1](command/sesame_open_sensor.md) 15 | ### 8. [Sesame Touch 1](command/sesametouchpro.md) 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /doc/ble_product_serials_jp.md: -------------------------------------------------------------------------------- 1 | BLEプロダクトコード例解説一覧 2 | ======== 3 | 8 | ### 1. [Sesame 5](command/sesame5fun_jp.md) 9 | ### 2. [Sesame 5 Pro ](command/sesame5fun_jp.md) 10 | ### 3. [Sesame Bike 2](command/sesamebike2fun_jp.md) 11 | ### 4. [Sesame WiFi Module 2](command/sesamewifimodule_jp.md) 12 | ### 5. [Sesame BLE Connector1](command/sesametouchpro_jp.md) 13 | ### 6. [Sesame Touch 1 Pro](command/sesametouchpro_jp.md) 14 | ### 7. [Sesame Open Sensor 1](command/sesame_open_sensor_jp.md) 15 | ### 8. [Sesame Touch 1](command/sesametouchpro_jp.md) 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /doc/bleconnect/SesameOs3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/doc/bleconnect/SesameOs3.jpg -------------------------------------------------------------------------------- /doc/bleconnect/data_receive.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | BleDevice --> gattRxBuffer :response 3 | BleDevice --> gattRxBuffer :response 4 | BleDevice --> gattRxBuffer :response 5 | state gattRxBuffer{ 6 | parsingType --> gt0 7 | parsingType --> 0 8 | 0-->waite 9 | waite:next read response 10 | waite ->finish 11 | finish:receive finish 12 | } 13 | gt0 --> parseNotifyPayload 14 | finish --> parseNotifyPayload 15 | parseNotifyPayload:data Decrypted 16 | parseNotifyPayload-->onGattSesameResponse 17 | onGattSesameResponse : SSM2OpCode.response 18 | parseNotifyPayload-->onGattSesamePublish 19 | onGattSesamePublish:SSM2OpCode.publish 20 | onGattSesameResponse -->cmdCallBack 21 | onGattSesamePublish -->login 22 | 23 | 24 | @enduml -------------------------------------------------------------------------------- /doc/bleconnect/data_send.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | APP --> sendCommand :command 3 | sendCommand : Preparing to send data 4 | 5 | sendCommand --> SesameBleTransmit :(payload,isEncryt,onResponse) 6 | SesameBleTransmit -->getChunk :intput(byte[]) 7 | 8 | state getChunk{ 9 | input.size --> part1 :gt19 10 | part1 --> part2 11 | 12 | part2 -->partN 13 | input.size --> fullData:le19 or eq19 14 | fullData:complete data 15 | } 16 | writeCharacteristic:Ble devices 17 | part1 --> writeCharacteristic 18 | part2 --> writeCharacteristic 19 | partN --> writeCharacteristic 20 | fullData --> writeCharacteristic 21 | 22 | @enduml -------------------------------------------------------------------------------- /doc/bleconnect/login.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | APP-->Device: connect Ble 3 | APP<--Device: response(14,random_code) 4 | 5 | APP->APP: 使用AesCmac(secretKey本地存储).computeMac(random_code)算法生成->sessionAuth 6 | APP->APP:sessionAuth和random_code作为AESCCM的key、Message创建加密对象->cipher(对Ble数据传输加密解密) 7 | 8 | APP -> Device: send_command(2,sessionAuth)) 9 | Device --> APP: response_command(7,2,status,timestamp) 10 | 11 | 12 | 13 | @enduml 14 | -------------------------------------------------------------------------------- /doc/bleconnect/randomcode.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | 3 | Device --> APP: response_command(8,14,randomcode) 4 | @enduml 5 | -------------------------------------------------------------------------------- /doc/bleconnect/register.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | APP-->Device: connect Ble 3 | APP<--Device: response(14,random_code) 4 | 5 | APP->APP: 使用ECDH算法EccKey.getPubK()生成公钥、密钥\n(app_pub_key,app_pri_key) 6 | 7 | APP -> Device: send_command(1,app_pub_key,timestamp)) 8 | Device --> APP: response_command(response,command,status,device_pub_key) 9 | 10 | APP->APP:使用ECDH算法EccKey.ecdh(device_pub_key)生成共享公钥->ecdhSecret(供AESCMAC使用) 11 | APP->APP:ecdhSecret 和random_code 作为AESCMAC算法的key、Message生成消息码。AesCmac(ecdhSecret,16).computeMac(random_code)->sessionAuth(供AESCCM使用) 12 | APP->APP:deviceSecret和random_code作为AESCCM的key、Message创建加密对象->cipher(对Ble数据传输加密解密) 13 | 14 | 15 | @enduml 16 | -------------------------------------------------------------------------------- /doc/bleconnect/timestamp.md: -------------------------------------------------------------------------------- 1 | # timestamp タイムスタンプを更新します 2 | 3 | ### 送信フォーマット 4 | 5 | | Byte | 4~1| 0 | 6 | |:------:|:----:|--------:| 7 | | Data | timestamp| command | 8 | 9 | - command:命令8(固定) 10 | - timestamp:現時点のスマートフォンのタイムスタンプ 11 | 12 | 13 | ### 受信フォーマット 14 | 15 | | Byte | 2 | 1 | 0 | 16 | |:---:|:-------:|:-----:|:---------:| 17 | | Data | status | command |response | 18 | - command:命令8(固定) 19 | - response:応答0x07(固定) 20 | - status:状態0x00(成功) 21 | 22 | ### フローチャート 23 | ![icon](timestamp.svg) 24 | 25 | 26 | 27 | 28 | 29 | ### android例 30 | ``` java 31 | override fun updateTime(result: CHResult) { 32 | if (checkBle(result)) return 33 | sendCommand(SesameOS3Payload(SesameItemCode.time.value, System.currentTimeMillis().toUInt32ByteArray()), DeviceSegmentType.cipher) { res -> 34 | result.invoke(Result.success(CHResultState.CHResultStateBLE(CHEmpty()))) 35 | } 36 | } 37 | ``` 38 | -------------------------------------------------------------------------------- /doc/bleconnect/timestamp.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | APP -> Device: send_command(8,timestamp) 3 | Device --> APP: response_command(response,command,status) 4 | @enduml 5 | -------------------------------------------------------------------------------- /doc/bleprotocol/firmware.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/doc/bleprotocol/firmware.png -------------------------------------------------------------------------------- /doc/bleprotocol/firmwareUpgradation.md: -------------------------------------------------------------------------------- 1 | SesameOs3 ファームウェアのアップグレード 2 | ======================= 3 | 1. APPとデバイスの接続が正常であることを確認してください。 4 | 2. ファームウェアのパス [app/src/main/res/raw](../../app/src/main/res/raw), 5 | ファームウェアの位置は以下の通りです。 6 | ![示例图片](firmware.png) 7 | 3. ファームウェアオブジェクト **CHProductModel** 8 | 4. フレームワークを選択します [Dfu](https://github.com/NordicSemiconductor/Android-DFU-Library) 9 | 5. コード例の位置[BaseDeviceSettingFG](../../app/src/main/java/co/candyhouse/app/base) 10 | ,以下のように、deviceAddressを取得し、DfuServiceInitiatorに書込みます。 11 | ``` 12 | val starter = DfuServiceInitiator(it.data.address) 13 | starter.setZip(targetDevice.getFirZip()) 14 | starter.setPacketsReceiptNotificationsEnabled(true) 15 | starter.setPrepareDataObjectDelay(400) 16 | starter.setUnsafeExperimentalButtonlessServiceInSecureDfuEnabled(true) 17 | starter.setDisableNotification(false) 18 | starter.setForeground(false) 19 | starter.start(requireActivity(), DfuService::class.java) 20 | ``` 21 | 22 | -------------------------------------------------------------------------------- /doc/bleprotocol/firmwareUpgradation_ja.md: -------------------------------------------------------------------------------- 1 | 2 | SesameOs3 ファームウェアアップデート 3 | ======================= 4 | 1. アプリとデバイスが正常に接続されていることを確認します。 5 | 2. ファームウェアのパス [app/src/main/res/raw](../../app/src/main/res/raw), 6 | ファームウェアの場所は以下の画像の通りです: 7 | ![サンプル画像](firmware.png) 8 | 3. ファームウェアオブジェクト **CHProductModel** 9 | 4. フレームワークの選択 [Dfu](https://github.com/NordicSemiconductor/Android-DFU-Library) 10 | 5. サンプルコードの場所 [BaseDeviceSettingFG](../../app/src/main/java/co/candyhouse/app/base) 11 | , deviceAddress を DfuServiceInitiator に渡す例は以下の通りです: 12 | ``` 13 | val starter = DfuServiceInitiator(it.data.address) 14 | starter.setZip(targetDevice.getFirZip()) 15 | starter.setPacketsReceiptNotificationsEnabled(true) 16 | starter.setPrepareDataObjectDelay(400) 17 | starter.setUnsafeExperimentalButtonlessServiceInSecureDfuEnabled(true) 18 | starter.setDisableNotification(false) 19 | starter.setForeground(false) 20 | starter.start(requireActivity(), DfuService::class.java) 21 | ``` 22 | 23 | -------------------------------------------------------------------------------- /doc/class/CHBaseAdv.md: -------------------------------------------------------------------------------- 1 | # CHBaseAdv インターフェース 2 | ```svg 3 | 4 | internal interface CHBaseAdv { 5 | val rssi: Int? 6 | val isRegistered: Boolean 7 | val adv_tag_b1: Boolean 8 | val deviceID: UUID? 9 | var device: BluetoothDevice 10 | var deviceName: String? 11 | var productModel: CHProductModel? 12 | var isConnecable: Boolean? 13 | } 14 | ``` 15 | 16 | 17 | `CHBaseAdv` は内部インターフェースです。 18 | 19 | ## プロパティ 20 | 21 | - `rssi`: `Int?`型で、受信号強度の指示子です。 22 | - `isRegistered`: `Boolean`型で、登録しているかどうかを判断します。 23 | - `adv_tag_b1`: `Boolean`型で、アドバタイジングのタグです。 24 | - `deviceID`: `UUID?`型で、デバイスIDです。 25 | - `device`: `BluetoothDevice`型で,Bluetoothデバイスです。 26 | - `deviceName`: `String?`型で、デバイス名です。 27 | - `productModel`: `CHProductModel?`型で、製品モデルです。 28 | - `isConnecable`: `Boolean?`型で、接続可能かどうかを判断します。 29 | -------------------------------------------------------------------------------- /doc/class/CHBaseAdv_jp.md: -------------------------------------------------------------------------------- 1 | # CHBaseAdv インターフェースのドキュメント 2 | ```svg 3 | 4 | internal interface CHBaseAdv { 5 | val rssi: Int? 6 | val isRegistered: Boolean 7 | val adv_tag_b1: Boolean 8 | val deviceID: UUID? 9 | var device: BluetoothDevice 10 | var deviceName: String? 11 | var productModel: CHProductModel? 12 | var isConnecable: Boolean? 13 | } 14 | ``` 15 | `CHBaseAdv` は、内部インターフェースです。 16 | 17 | ## プロパティ 18 | 19 | - `rssi`:`Int?` 型のプロパティで、受信信号強度指示子(RSSI)を受け取ります。 20 | - `isRegistered`:`Boolean` 型のプロパティで、登録済みかどうかを示します。 21 | - `adv_tag_b1`:`Boolean` 型のプロパティで、広告タグを表します。 22 | - `deviceID`:`UUID?` 型のプロパティで、デバイスのUUIDを示します。 23 | - `device`:`BluetoothDevice` 型のプロパティで、Bluetoothデバイスを表します。 24 | - `deviceName`:`String?` 型のプロパティで、デバイス名を示します。 25 | - `productModel`:`CHProductModel?` 型のプロパティで、製品モデルを表します。 26 | - `isConnecable`:`Boolean?` 型のプロパティで、接続可能かどうかを示します。 27 | -------------------------------------------------------------------------------- /doc/class/CHBleManager .md: -------------------------------------------------------------------------------- 1 |
CHBleManager 2 | 3 | ``` 4 | object CHBleManager { 5 | init {} 6 | internal lateinit var appContext: Context 7 | 8 | operator fun invoke(appContext: Context) 9 | } 10 | 11 | ``` 12 |
13 | -------------------------------------------------------------------------------- /doc/class/CHDeviceLoginStatus.md: -------------------------------------------------------------------------------- 1 | # CHDeviceLoginStatus 列挙型クラス 2 | ```svg 3 | 4 | enum class CHDeviceLoginStatus { 5 | Login, UnLogin, 6 | } 7 | ``` 8 | 9 | 10 | 11 | `CHDeviceLoginStatus` は、デバイスのログイン状態を表す列挙型クラスです。この列挙型には、2つの列挙定数が含まれています。 12 | 13 | 以下は2つの列挙定数の意味です。 14 | 15 | | 列挙定数 | 意味 | 16 | | :----- | :----- | 17 | | `Login` | デバイスはログインしている。 | 18 | | `UnLogin` | デバイスはログインしていない。 | 19 | 20 | この列挙型クラスは通常、デバイスの具体的な状態(`CHDeviceStatus`)と関連しており、デバイスが特定の状態でのログイン状況を表します。 21 | -------------------------------------------------------------------------------- /doc/class/CHDeviceLoginStatus_jp.md: -------------------------------------------------------------------------------- 1 | # CHDeviceLoginStatus 列挙型 2 | 3 | `CHDeviceLoginStatus` は、デバイスのログイン状態を表す列挙型です。この列挙型には、2つの列挙定数が含まれています。 4 | 5 | 以下に各列挙定数の意味が示されています: 6 | 7 | | 列挙定数 | 意味 | 8 | | :--------- | :------------- | 9 | | `Login` | デバイスはログイン済みです | 10 | | `UnLogin` | デバイスはログインされていません | 11 | 12 | 通常、この列挙型はデバイスの具体的な状態 (`CHDeviceStatus`) と関連付けられ、特定の状態でのデバイスのログイン状況を示します。 13 | -------------------------------------------------------------------------------- /doc/class/CHDeviceStatusDelegate.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # CHDeviceStatusDelegate インターフェース 4 | ```svg 5 | interface CHDeviceStatusDelegate { 6 | 7 | fun onBleDeviceStatusChanged(device: CHDevices, status: CHDeviceStatus, shadowStatus: CHDeviceStatus?) {} 8 | 9 | fun onMechStatus(device: CHDevices) {} 10 | } 11 | 12 | ``` 13 | 14 | `CHDeviceStatusDelegate` はデバイス状態の変化を監視と応答するためのデバイス状態の代理のインターフェースです。 15 | 16 | ## メソッド 17 | 18 | - `fun onBleDeviceStatusChanged(device: CHDevices, status: CHDeviceStatus, shadowStatus: CHDeviceStatus?) {}` - BLEデバイスの状態が変化した時に呼び出され、デバイスオブジェクト、新しいデバイスの状態、およびデバイスのシャドウ状態(存在する場合)というパラメータがインプットされます。 19 | - `fun onMechStatus(device: CHDevices) {}` - デバイスの機械状態が変化した時に呼び出され、デバイスオブジェクトというパラメータがインプットされます。 20 | 21 | 22 | -------------------------------------------------------------------------------- /doc/class/CHDeviceStatusDelegate_jp.md: -------------------------------------------------------------------------------- 1 | # CHDeviceStatusDelegate インターフェースのドキュメント 2 | ```svg 3 | interface CHDeviceStatusDelegate { 4 | 5 | fun onBleDeviceStatusChanged(device: CHDevices, status: CHDeviceStatus, shadowStatus: CHDeviceStatus?) {} 6 | 7 | fun onMechStatus(device: CHDevices) {} 8 | } 9 | 10 | ``` 11 | 12 | `CHDeviceStatusDelegate` は、デバイスの状態変更を監視し、それに応答するためのデバイス状態代理インターフェースです。 13 | 14 | ## メソッド 15 | 16 | - `fun onBleDeviceStatusChanged(device: CHDevices, status: CHDeviceStatus, shadowStatus: CHDeviceStatus?) {}` - BLEデバイスの状態が変更された際に呼び出されます。デバイスオブジェクト、新しいデバイスの状態、およびデバイスのシャドウ状態(存在する場合)が引数として渡されます。 17 | - `fun onMechStatus(device: CHDevices) {}` - デバイスのメカニカル状態が変更された際に呼び出されます。デバイスオブジェクトが引数として渡されます。 18 | -------------------------------------------------------------------------------- /doc/class/CHDeviceUtil.md: -------------------------------------------------------------------------------- 1 | ## CHDeviceUtil インターフェース 2 | ```svg 3 | internal interface CHDeviceUtil { 4 | var advertisement: CHadv? 5 | var sesame2KeyData: CHDevice? 6 | fun goIOT() {} 7 | fun login(token: String? = null) 8 | } 9 | ``` 10 | 11 | 12 | 13 | ### 説明 14 | 15 | `CHDeviceUtil`は内部インターフェースで、デバイス関連の操作を定義するためのメソッドとプロパティを提供します。 16 | 17 | ### プロパティ 18 | 19 | - `advertisement`: `CHadv`型で、アドバタイジング関連のデータです。アドバタイジングがない場合は「null」になる可能性があります。 20 | 21 | - `sesame2KeyData`: `CHDevice` のインスタンス変数で、デバイス(「鍵」を指す場合がある)に関連するデータを保存します。 22 | 23 | ### メソッド 24 | 25 | - `goIOT` メソッド:IoT(Internet of Things)関連のサービスを購読するためのものです。インターフェース内で既にデフォルトの空実装が提供されている上に、具体的な実装クラスで上書きすることができます。 26 | 27 | - `login` メソッド:ログイン操作に使用され、匿名パラメータ`token` のデフォルト値は`null`です。 28 | 29 | ### 使用 30 | 31 | このインターフェースを使用するために、`CHDeviceUtil`インターフェースを実装したクラスを作成する上に、クラスのインスタンスを作成します。そのクラス内で、実際の要求に応じてメソッドを実装することが可能です。 -------------------------------------------------------------------------------- /doc/class/CHDeviceUtil_jp.md: -------------------------------------------------------------------------------- 1 | # CHDeviceUtil インターフェースドキュメント 2 | ```svg 3 | internal interface CHDeviceUtil { 4 | var advertisement: CHadv? 5 | var sesame2KeyData: CHDevice? 6 | fun goIOT() {} 7 | fun login(token: String? = null) 8 | } 9 | ``` 10 | ### 説明 11 | 12 | `CHDeviceUtil` は、デバイス関連の操作を定義するための内部インターフェースです。 13 | 14 | ### プロパティ 15 | 16 | - `advertisement`:`CHadv` 型の変数で、広告に関連するデータです。広告がない場合、`null` の可能性があります。 17 | 18 | - `sesame2KeyData`:`CHDevice` インスタンス変数で、デバイス(おそらく "鍵" を指す)に関連するデータが格納されます。 19 | 20 | ### メソッド 21 | 22 | - `goIOT` メソッド:このメソッドは、IoT(Internet of Things)に関連するサービスを購読するためのものです。このメソッドは、インターフェース内でデフォルトの空実装が提供されていますが、具体的な実装クラスで上書きすることができます。 23 | 24 | - `login` メソッド:このメソッドは、ログイン操作に使用されます。匿名引数 `token` のデフォルト値は `null` です。 25 | 26 | ### 使用方法 27 | 28 | このインターフェースを使用するには、`CHDeviceUtil` インターフェースを実装したクラスを作成し、そのクラスをインスタンス化します。そのクラス内では、必要に応じて 29 | -------------------------------------------------------------------------------- /doc/class/CHSesameBike.md: -------------------------------------------------------------------------------- 1 | 2 | # CHSesameBike インターフェイス 3 | ```svg 4 | 5 | 6 | interface CHSesameBike : CHSesameLock { 7 | fun unlock(historytag: ByteArray? = null, result: CHResult) 8 | } 9 | ``` 10 | `CHSesameBike` は `CHSesameLock` インターフェースを継承したデバイスインターフェースで、Sesame Bike ロックのデバイスの管理と操作を行います。 11 | 12 | ## メソッド 13 | 14 | - `fun unlock(historytag: ByteArray? = null, result: CHResult)` - デバイスのロックを解除します。操作が成功した場合は操作結果を返し、それ以外の場合はエラーメッセージを返します。 15 | 16 | -------------------------------------------------------------------------------- /doc/class/CHSesameBike2.md: -------------------------------------------------------------------------------- 1 | 2 | # CHSesameBike2 インターフェイス 3 | ```svg 4 | 5 | interface CHSesameBike2 : CHSesameLock { 6 | 7 | fun unlock(tag: ByteArray? = null, result: CHResult) 8 | } 9 | 10 | ``` 11 | `CHSesameBike2` は`CHSesameLock` インターフェースを継承したデバイスインターフェースで、Sesame Bike2 ロックのデバイスの管理と操作を行います。 12 | 13 | ## メソッド 14 | 15 | - `fun unlock(tag: ByteArray? = null, result: CHResult)` - デバイスのロックを解除します。操作が成功した場合は操作結果を返し、それ以外の場合はエラーメッセージを返します。 16 | 17 | -------------------------------------------------------------------------------- /doc/class/CHSesameBike2MechStatus.md: -------------------------------------------------------------------------------- 1 | # CHSesameBike2MechStatus クラス 2 | 3 | ```svg 4 | class CHSesameBike2MechStatus(override val data: ByteArray) : CHSesameProtocolMechStatus { 5 | private val battery = bytesToShort(data[0], data[1]) 6 | private val flags = data[2].toInt() 7 | override var isInLockRange: Boolean = flags and 2 > 0 8 | override var isStop: Boolean? = flags and 4 > 0 9 | override fun getBatteryVoltage(): Float 10 | } 11 | 12 | ``` 13 | 14 | `CHSesameBike2MechStatus`クラスは、`CHSesameProtocolMechStatus`インターフェースを実装しており、主にesame Bike2の機械状態を表します。 15 | 16 | ## プロパティ 17 | 18 | - `data: ByteArray` - デバイスの状態を表すバイト配列です。 19 | - `isInLockRange: Boolean` - デバイスがロックの範囲内にあるかどうかを示す情報です。 20 | - `isStop: Boolean?` - デバイスが停止しているかどうかを示す情報です。 21 | 22 | ## メソッド 23 | 24 | - `fun getBatteryVoltage(): Float` - デバイスのバッテリー電圧を取得します。 25 | 26 | ## 非公開プロパティ 27 | 28 | - `battery: Short` - デバイスのバッテリー残量を示します。 29 | - `flags: Int` - デバイスのフラグを示します。 30 | 31 | ## 非公開メソッド 32 | 33 | - `bytesToShort(byte1: Byte, byte2: Byte): Short` - 2つのバイトをショート整数に変換します。 34 | 35 | -------------------------------------------------------------------------------- /doc/class/CHSesameBike2MechStatus_jp.md: -------------------------------------------------------------------------------- 1 | # CHSesameBike2MechStatus クラスのドキュメント 2 | ```svg 3 | class CHSesameBike2MechStatus(override val data: ByteArray) : CHSesameProtocolMechStatus { 4 | private val battery = bytesToShort(data[0], data[1]) 5 | private val flags = data[2].toInt() 6 | override var isInLockRange: Boolean = flags and 2 > 0 7 | override var isStop: Boolean? = flags and 4 > 0 8 | override fun getBatteryVoltage(): Float 9 | } 10 | 11 | ``` 12 | `CHSesameBike2MechStatus` クラスは、`CHSesameProtocolMechStatus` インターフェースを実装したもので、主に Sesame Bike2 の機械の状態を表します。 13 | 14 | ## プロパティ 15 | 16 | - `data: ByteArray` - デバイスの状態を表すバイト配列です。 17 | - `isInLockRange: Boolean` - デバイスがロック範囲内にあるかどうかを示します。 18 | - `isStop: Boolean?` - デバイスが停止しているかどうかを示します。 19 | 20 | ## メソッド 21 | 22 | - `fun getBatteryVoltage(): Float` - デバイスのバッテリー電圧を取得します。 23 | 24 | ## プライベートプロパティ 25 | 26 | - `battery: Short` - デバイスのバッテリー残量を示します。 27 | - `flags: Int` - デバイスのフラグを示します。 28 | 29 | ## プライベートメソッド 30 | 31 | - `bytesToShort(byte1: Byte, byte2: Byte): Short` - 二つのバイトを短整数に変換する関数です。 32 | -------------------------------------------------------------------------------- /doc/class/CHSesameBike2_jp.md: -------------------------------------------------------------------------------- 1 | # CHSesameBike2 インターフェースのドキュメント 2 | ```svg 3 | 4 | interface CHSesameBike2 : CHSesameLock { 5 | 6 | fun unlock(tag: ByteArray? = null, result: CHResult) 7 | } 8 | 9 | ``` 10 | `CHSesameBike2` は、デバイス接口であり、`CHSesameLock` インターフェースを継承しています。Sesame Bike2 ロックデバイスの管理と操作を担当します。 11 | 12 | ## メソッド 13 | 14 | - `fun unlock(tag: ByteArray? = null, result: CHResult)` - デバイスをアンロックします。操作が成功した場合、操作結果を返します。それ以外の場合はエラーメッセージを返します。 15 | -------------------------------------------------------------------------------- /doc/class/CHSesameBike_jp.md: -------------------------------------------------------------------------------- 1 | # CHSesameBike インターフェースのドキュメント 2 | ```svg 3 | 4 | 5 | interface CHSesameBike : CHSesameLock { 6 | fun unlock(historytag: ByteArray? = null, result: CHResult) 7 | } 8 | ``` 9 | `CHSesameBike` は、デバイス接口であり、`CHSesameLock` インターフェースを継承しています。Sesame Bike ロックデバイスの管理と操作を担当します。 10 | 11 | ## メソッド 12 | 13 | - `fun unlock(historytag: ByteArray? = null, result: CHResult)` - デバイスをアンロックします。操作が成功した場合、操作結果を返します。それ以外の場合はエラーメッセージを返します。 14 | -------------------------------------------------------------------------------- /doc/class/CHSesameBotMechSettings.md: -------------------------------------------------------------------------------- 1 | 2 | # CHSesameBotMechSettings データクラス 3 | ```svg 4 | 5 | data class CHSesameBotMechSettings( 6 | var userPrefDir: Byte, 7 | var lockSec: Byte, 8 | var unlockSec: Byte, 9 | var clickLockSec: Byte, 10 | var clickHoldSec: Byte, 11 | var clickUnlockSec: Byte, 12 | var buttonMode: Byte 13 | ) { 14 | internal fun data(): ByteArray = 15 | byteArrayOf(userPrefDir, lockSec, unlockSec, clickLockSec, clickHoldSec, clickUnlockSec, buttonMode) + 16 | byteArrayOf(0, 0, 0, 0, 0) 17 | } 18 | 19 | ``` 20 | `CHSesameBotMechSettings`データクラスはSesame Bot機器の設定を保存と管理します。 21 | 22 | ## プロパティ 23 | 24 | - `userPrefDir`:ユーザーの好みや優先する方向を表し、Byte型です。 25 | - `lockSec`:ロックの秒数を表します。Byte型です。 26 | - `unlockSec`:解錠の秒数を表します。Byte型です。 27 | - `clickLockSec`:ロックの秒数をクリックします。Byte型です。 28 | - `clickHoldSec`:秒数を長押しします。Byte型です。 29 | - `clickUnlockSec`:解錠の秒数をクリックします。Byte型です。 30 | - `buttonMode`:ボタンモードです。Byte型です。 31 | 32 | ## メソッド 33 | 34 | - `data()`:指定されたすべてのByte型のプロパティを1つのByteArrayに結合し、その後に5バイトの0を追加するメソッドです。デバイスの設定を送信または保存可能なデータ形式に変換します。 35 | -------------------------------------------------------------------------------- /doc/class/CHSesameBotMechSettings_jp.md: -------------------------------------------------------------------------------- 1 | # CHSesameBotMechSettings データクラスのドキュメント 2 | ```svg 3 | 4 | data class CHSesameBotMechSettings( 5 | var userPrefDir: Byte, 6 | var lockSec: Byte, 7 | var unlockSec: Byte, 8 | var clickLockSec: Byte, 9 | var clickHoldSec: Byte, 10 | var clickUnlockSec: Byte, 11 | var buttonMode: Byte 12 | ) { 13 | internal fun data(): ByteArray = 14 | byteArrayOf(userPrefDir, lockSec, unlockSec, clickLockSec, clickHoldSec, clickUnlockSec, buttonMode) + 15 | byteArrayOf(0, 0, 0, 0, 0) 16 | } 17 | 18 | ``` 19 | 20 | `CHSesameBotMechSettings` データクラスは、Sesame Bot 机械デバイスの設定を格納および管理するためのクラスです。 21 | 22 | ## プロパティ 23 | 24 | - `userPrefDir`:ユーザーの優先方向を表す、バイト(Byte)型のプロパティです。 25 | - `lockSec`:ロックする秒数を表す、バイト(Byte)型のプロパティです。 26 | - `unlockSec`:ロック解除する秒数を表す、バイト(Byte)型のプロパティです。 27 | - `clickLockSec`:クリックしてロックする秒数を表す、バイト(Byte)型のプロパティです。 28 | - `clickHoldSec`:ボタンを長押しする秒数を表す、バイト(Byte)型のプロパティです。 29 | - `clickUnlockSec`:クリックしてロックを解除する秒数を表す、バイト(Byte)型のプロパティです。 30 | - `buttonMode`:ボタンのモードを表す、バイト(Byte)型のプロパティです。 31 | 32 | ## メソッド 33 | 34 | - `data()`:このメソッドは、すべてのバイト(Byte)型のプロパティを結合し、その後ろに5つのゼロバイトを追加したByteArrayを返します。このメソッドは、デバイスの設定を送信または保存可能なデータ形式に変換するために使用されます。 35 | -------------------------------------------------------------------------------- /doc/class/CHSesameConnector.md: -------------------------------------------------------------------------------- 1 | # CHSesameConnector インターフェース 2 | ```svg 3 | 4 | 5 | interface CHSesameConnector : CHDevices { 6 | var ssm2KeysMap: MutableMap 7 | fun insertSesame(sesame: CHDevices, result: CHResult) 8 | fun removeSesame(tag: String, result: CHResult) 9 | } 10 | ``` 11 | `CHSesameConnector` はデバイスコネクタのインターフェースで、`CHDevices`を継承しています。Sesameデバイスを管理および操作します。 12 | 13 | ## プロパティ 14 | 15 | - `ssm2KeysMap: MutableMap` - Sesame2デバイスのキーのマッピングを保存します。 16 | 17 | ## メソッド 18 | 19 | - `fun insertSesame(sesame: CHDevices, result: CHResult)` - Sesameデバイスを挿入し、操作結果を返します。 20 | - `fun removeSesame(tag: String, result: CHResult)` - 指定されたラベルに基づいてSesameデバイスを削除し、操作結果を返します。 21 | 22 | -------------------------------------------------------------------------------- /doc/class/CHSesameConnector_jp.md: -------------------------------------------------------------------------------- 1 | # CHSesameConnector インターフェースのドキュメント 2 | 3 | ```svg 4 | 5 | 6 | interface CHSesameConnector : CHDevices { 7 | var ssm2KeysMap: MutableMap 8 | fun insertSesame(sesame: CHDevices, result: CHResult) 9 | fun removeSesame(tag: String, result: CHResult) 10 | } 11 | ``` 12 | 13 | `CHSesameConnector` は、デバイス接続コネクタのインターフェースであり、`CHDevices` インターフェースを継承しています。Sesame デバイスの管理と操作を担当します。 14 | 15 | ## 属性 16 | 17 | - `ssm2KeysMap: MutableMap` - Sesame2 デバイスのキーを格納するマップです。 18 | 19 | ## メソッド 20 | 21 | - `fun insertSesame(sesame: CHDevices, result: CHResult)` - Sesame デバイスを挿入し、操作結果を返します。 22 | - `fun removeSesame(tag: String, result: CHResult)` - 指定されたタグに基づいて Sesame デバイスを削除し、操作結果を返します。 23 | -------------------------------------------------------------------------------- /doc/class/CHSesameLock.md: -------------------------------------------------------------------------------- 1 | 2 | # CHSesameLock インターフェース 3 | ```svg 4 | interface CHSesameLock : CHDevices { 5 | 6 | fun isEnableNotification(fcmToken: String, result: CHResult) 7 | 8 | fun enableNotification(fcmToken: String, result: CHResult) 9 | 10 | fun disableNotification(fcmToken: String, result: CHResult) 11 | } 12 | ``` 13 | 14 | `CHSesameLock` は、`CHDevices` インターフェースを継承したデバイスのインターフェースです。Sesame lockデバイスを管理および操作します。 15 | 16 | ## メソッド 17 | 18 | - `fun isEnableNotification(fcmToken: String, result: CHResult)` - 通知が有効になっているかどうかをチェックします。通知が有効な場合はtrueを返し、それ以外の場合はfalseを返します。 19 | - `fun enableNotification(fcmToken: String, result: CHResult)` - 通知を有効にします。操作が成功した場合は操作結果を返し、それ以外の場合はエラーメッセージを返します。 20 | - `fun disableNotification(fcmToken: String, result: CHResult)` - 通知を無効にします。操作が成功した場合は操作結果を返し、それ以外の場合はエラーメッセージを返します。 21 | 22 | -------------------------------------------------------------------------------- /doc/class/CHSesameLock_jp.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/doc/class/CHSesameLock_jp.md -------------------------------------------------------------------------------- /doc/class/CHSesameOS3Publish.md: -------------------------------------------------------------------------------- 1 | # CHSesameOS3Publish インターフェース 2 | 3 | ```svg 4 | interface CHSesameOS3Publish { 5 | fun onGattSesamePublish(receivePayload: SSM3PublishPayload) 6 | } 7 | 8 | ``` 9 | 10 | 11 | 12 | `CHSesameOS3Publish` はインターフェースです。 13 | 14 | ## メソッド 15 | 16 | - `onGattSesamePublish(receivePayload: SSM3PublishPayload)`:このメソッドは実装する必要があります。`SSM3PublishPayload`型の引数`receivePayload`を受取り、受信したPublishPayloadを処理します。 17 | 18 | -------------------------------------------------------------------------------- /doc/class/CHSesameOS3Publish_jp.md: -------------------------------------------------------------------------------- 1 | # CHSesameOS3Publish インターフェースのドキュメント 2 | ```svg 3 | interface CHSesameOS3Publish { 4 | fun onGattSesamePublish(receivePayload: SSM3PublishPayload) 5 | } 6 | 7 | ``` 8 | `CHSesameOS3Publish` は、インターフェースです。 9 | 10 | ## メソッド 11 | 12 | - `onGattSesamePublish(receivePayload: SSM3PublishPayload)`:このメソッドは実装が必要なメソッドで、`SSM3PublishPayload` 型の引数 `receivePayload` を受け取り、受信したパブリッシュのペイロードを処理します。 13 | -------------------------------------------------------------------------------- /doc/class/CHSesameSensor.md: -------------------------------------------------------------------------------- 1 | 2 | # CHSesameSensor インターフェース 3 | ```svg 4 | 5 | interface CHSesameSensor : CHSesameLock, CHSesameConnector { 6 | fun unlock(historytag: ByteArray? = null, result: CHResult) 7 | fun deleteCards(cardID: String, result: CHResult) 8 | fun getCards(result: CHResult>) 9 | } 10 | ``` 11 | 12 | `CHSesameSensor`は、`CHSesameLock`および`CHSesameConnector`インターフェースを継承したデバイスインターフェースです。Sesame Sensorデバイスの管理と操作に特化しています。 13 | 14 | ## メソッド 15 | 16 | - `fun unlock(historyTag: ByteArray? = null, result: CHResult)` - Sesame Sensorのロックを解除します。 17 | 18 | - `fun deleteCards(cardID: String, result: CHResult)` - 指定されたカードを削除します。 19 | 20 | - `fun getCards(result: CHResult>)` - すべてのカードを取得します。 21 | 22 | 上記は`CHSesameSensor`インターフェースについての基本的な説明です。Sesame Sensorデバイスに対して完全な操作と管理方法を提供します。 23 | -------------------------------------------------------------------------------- /doc/class/CHSesameSensorDelegate.md: -------------------------------------------------------------------------------- 1 | 2 | # CHSesameSensorDelegate インターフェース 3 | ```svg 4 | interface CHSesameSensorDelegate : CHDeviceStatusDelegate { 5 | fun onSSM2KeysChanged(device: CHSesameConnector, ssm2keys: Map) {} 6 | } 7 | 8 | ``` 9 | `CHSesameSensorDelegate`インターフェースは、Sesameデバイスのセンサー関連イベントを処理および管理します。 10 | 11 | ## メソッド 12 | 13 | - `onSSM2KeysChanged(device: CHSesameConnector, ssm2keys: Map)`:SSM2キーが変更された際に呼び出されます。このメソッドは2つのパラメータを受け取ります。1つ目のパラメータはキーの変更が発生したデバイスであり、2つ目のパラメータは新しいSSM2のキーセットです。デフォルト値は null です。 14 | 15 | ## 継承 16 | 17 | - `CHDeviceStatusDelegate`:`CHSesameSensorDelegate`インターフェースは`CHDeviceStatusDelegate`を継承し、親クラスの全てのメソッドを実装します。 18 | -------------------------------------------------------------------------------- /doc/class/CHSesameSensorDelegate_jp.md: -------------------------------------------------------------------------------- 1 | # CHSesameSensorDelegate インターフェースのドキュメント 2 | ```svg 3 | interface CHSesameSensorDelegate : CHDeviceStatusDelegate { 4 | fun onSSM2KeysChanged(device: CHSesameConnector, ssm2keys: Map) {} 5 | } 6 | 7 | ``` 8 | 9 | `CHSesameSensorDelegate` インターフェースは、Sesame デバイスのセンサー関連イベントを処理および管理するために使用されます。 10 | 11 | ## メソッド 12 | 13 | - `onSSM2KeysChanged(device: CHSesameConnector, ssm2keys: Map)`:このメソッドは、SSM2 キーが変更された際に呼び出されます。このメソッドは 2 つのパラメータを受け取ります。第 1 パラメータはキーが変更されたデバイス、第 2 パラメータは新しい SSM2 キーのマップです。デフォルトの実装では何も行いません。 14 | 15 | ## 継承 16 | 17 | - `CHDeviceStatusDelegate`:`CHSesameSensorDelegate` インターフェースは、`CHDeviceStatusDelegate` インターフェースを継承しており、親クラスのすべてのメソッドを実装する必要があります。 18 | -------------------------------------------------------------------------------- /doc/class/CHSesameSensor_jp.md: -------------------------------------------------------------------------------- 1 | # CHSesameSensor インターフェースのドキュメント 2 | ```svg 3 | 4 | interface CHSesameSensor : CHSesameLock, CHSesameConnector { 5 | fun unlock(historytag: ByteArray? = null, result: CHResult) 6 | fun deleteCards(cardID: String, result: CHResult) 7 | fun getCards(result: CHResult>) 8 | } 9 | ``` 10 | `CHSesameSensor` インターフェースは、Sesame Sensor デバイスの管理と操作に使用されます。このインターフェースは `CHSesameLock` および `CHSesameConnector` インターフェースを継承しています。 11 | 12 | ## メソッド 13 | 14 | - `fun unlock(historyTag: ByteArray? = null, result: CHResult)` - Sesame Sensor を解錠します。 15 | 16 | - `fun deleteCards(cardID: String, result: CHResult)` - 指定したカードを削除します。 17 | 18 | - `fun getCards(result: CHResult>)` - すべてのカードを取得します。 19 | 20 | 上記は `CHSesameSensor` インターフェースの基本的な説明です。このインターフェースは Sesame Sensor デバイスに対して完全な操作と管理メソッドを提供します。 21 | -------------------------------------------------------------------------------- /doc/class/CHSesameTouchCard.md: -------------------------------------------------------------------------------- 1 | 2 | # CHSesameTouchCard クラス 3 | ```svg 4 | class CHSesameTouchCard(data: ByteArray) { 5 | val cardType = data[0] 6 | val idLength = data[1] 7 | val cardID = data.sliceArray(2..idLength + 1).toHexString() 8 | val nameIndex = idLength + 2 9 | val nameLength = data[nameIndex] 10 | val cardName = String(data.sliceArray(nameIndex + 1..nameIndex + nameLength)) 11 | } 12 | 13 | ``` 14 | `CHSesameTouchCard`クラスは、タッチカードの情報を処理および管理します。このクラスのコンストラクタは、ByteArrayを引数として受取り、タッチカードの関連データを含みます。 15 | 16 | ## プロパティ 17 | 18 | - `cardType`:カードタイプです。データの最初のバイトで表されます。 19 | - `idLength`:カードIDの長さです。データの2番目のバイトで表されます。 20 | - `cardID`:カードIDです。データの3番目のバイトから始まり、長さが`idLength`であるデータセグメントで表されて、16進数の文字列に変換されます。 21 | - `nameIndex`:カード名のデータの始点インデックスです。`idLength + 2`で計算されます。 22 | - `nameLength`:カード名の長さです。データの`nameIndex`バイトで表されます。 23 | - `cardName`:カード名です。データの`nameIndex + 1`バイトから始まり、長さが`nameLength`であるデータバイト列で表されて、文字列に変換されます。 24 | 25 | ## コンストラクタ 26 | 27 | - `CHSesameTouchCard(data: ByteArray)`:コンストラクタは、ByteArrayをパラメータとして受取り、パラメータにはタッチカードの関連データが含まれています。コンストラクタではデータを解析し、対応する属性を初期化します。 28 | -------------------------------------------------------------------------------- /doc/class/CHSesameTouchCard_jp.md: -------------------------------------------------------------------------------- 1 | # CHSesameTouchCard クラスのドキュメント 2 | 3 | ```svg 4 | class CHSesameTouchCard(data: ByteArray) { 5 | val cardType = data[0] 6 | val idLength = data[1] 7 | val cardID = data.sliceArray(2..idLength + 1).toHexString() 8 | val nameIndex = idLength + 2 9 | val nameLength = data[nameIndex] 10 | val cardName = String(data.sliceArray(nameIndex + 1..nameIndex + nameLength)) 11 | } 12 | 13 | ``` 14 | `CHSesameTouchCard` クラスは、タッチカードの情報を処理および管理するためのクラスです。このクラスのコンストラクタは、ByteArray をパラメータとして受け取り、そのパラメータに関連するカードのデータを含んでいます。 15 | 16 | ## プロパティ 17 | 18 | - `cardType`:カードのタイプを表す、データの最初のバイトです。 19 | - `idLength`:カードのIDの長さを表す、データの2番目のバイトです。 20 | - `cardID`:カードのIDを表す、データの3番目のバイトから始まる、長さが `idLength` のデータを16進数の文字列に変換したものです。 21 | - `nameIndex`:カードの名前データの開始インデックスを表す、`idLength + 2` で計算されます。 22 | - `nameLength`:カードの名前の長さを表す、データの `nameIndex` バイトです。 23 | - `cardName`:カードの名前を表す、データの `nameIndex + 1` から始まる、長さが `nameLength` のデータを文字列に変換したものです。 24 | 25 | ## コンストラクタ 26 | 27 | - `CHSesameTouchCard(data: ByteArray)`:このコンストラクタは、ByteArray をパラメータとして受け取り、そのパラメータに関連するカードのデータを解析し、対応するプロパティを初期化します。 28 | -------------------------------------------------------------------------------- /doc/class/CHSesameTouchProDelegate_jp.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/doc/class/CHSesameTouchProDelegate_jp.md -------------------------------------------------------------------------------- /doc/class/CHWifiModule2MechSettings.md: -------------------------------------------------------------------------------- 1 | 2 | # CHWifiModule2MechSettings クラス 3 | ```svg 4 | class CHWifiModule2MechSettings(var wifiSSID: String?, var wifiPassWord: String?) 5 | 6 | ``` 7 | `CHWifiModule2MechSettings`クラスは、Wifiモジュール2の機械設定を処理および管理します。 8 | 9 | ## プロパティ 10 | 11 | - `wifiSSID`:WifiのSSIDで、String型です。 12 | - `wifiPassWord`:Wifiのパスワードで、String型です。 13 | 14 | ## コンストラクタ 15 | 16 | - `CHWifiModule2MechSettings(wifiSSID: String?, wifiPassWord: String?)`:コンストラクタは2つの引数、SSIDとパスワードを受取ります。これらの引数は関連するプロパティを初期化します。 17 | -------------------------------------------------------------------------------- /doc/class/CHWifiModule2MechSettings_jp.md: -------------------------------------------------------------------------------- 1 | # CHWifiModule2MechSettings クラスのドキュメント 2 | 3 | ```svg 4 | class CHWifiModule2MechSettings(var wifiSSID: String?, var wifiPassWord: String?) 5 | 6 | ``` 7 | 8 | `CHWifiModule2MechSettings` クラスは、Wifi モジュール 2 の機械設定を処理および管理するためのクラスです。 9 | 10 | ## 属性 11 | 12 | - `wifiSSID`:Wifi のSSID(Service Set Identifier)です。文字列(String)型です。 13 | - `wifiPassWord`:Wifi のパスワードです。文字列(String)型です。 14 | 15 | ## コンストラクタ 16 | 17 | - `CHWifiModule2MechSettings(wifiSSID: String?, wifiPassWord: String?)`:コンストラクタは、Wifi のSSID とパスワードの2つの引数を受け取ります。これにより、対応する属性が初期化されます。 18 | -------------------------------------------------------------------------------- /doc/class/CHWifiModule2_jp.md: -------------------------------------------------------------------------------- 1 | # CHWifiModule2 インターフェースのドキュメント 2 | 3 | `CHWifiModule2` は、デバイスに関連する操作を含むインターフェースであり、`CHDevices` インターフェースを継承しています。基本的なデバイス操作に加えて、WiFiモジュールに関連する操作も含まれています。 4 | 5 | ## 属性 6 | 7 | - `ssm2KeysMap: MutableMap` - Sesame2キーマップ 8 | - `mechSetting: CHWifiModule2MechSettings?` - WiFiモジュールのメカニズム設定 9 | 10 | ## メソッド 11 | 12 | - `fun scanWifiSSID(result: CHResult)` - WiFi SSIDをスキャンする 13 | - `fun setWifiSSID(ssid: String, result: CHResult)` - WiFi SSIDを設定する 14 | - `fun setWifiPassword(password: String, result: CHResult)` - WiFiパスワードを設定する 15 | - `fun connectWifi(result: CHResult)` - WiFiに接続する 16 | - `fun insertSesames(sesame: CHDevices, result: CHResult)` - Sesameデバイスを挿入する 17 | - `fun removeSesame(sesameKeyTag: String, result: CHResult)` - Sesameデバイスを削除する 18 | -------------------------------------------------------------------------------- /doc/class/DeviceSegmentType.md: -------------------------------------------------------------------------------- 1 | # # DeviceSegmentType 列挙型 2 | 3 | ```svg 4 | internal enum class DeviceSegmentType(var value: Int) { 5 | plain(1), cipher(2), ; 6 | companion object { 7 | private val values = values() 8 | fun getByValue(value: Int) = values.first { it.value == value } 9 | } 10 | } 11 | ``` 12 | 13 | 14 | 15 | 16 | `DeviceSegmentType` は内部の列挙型です。 17 | 18 | ## 列挙値 19 | 20 | この列挙型には、多くの列挙項目が含まれており、それぞれ異なるデバイスのセグメントタイプに対応しています。各列挙項目は `Int` 型の値を持っています。 21 | 22 | 以下は`DeviceSegmentType` 列挙型の詳細なリストです。 23 | 24 | | 命令名 | SegmentType | 説明 | 25 | |:---:|:---:|:---| 26 | | plain | 1 | 暗号化されていないデータ | 27 | | cipher | 2 | 暗号化されているデータ | 28 | 29 | ## 伴生オブジェクト 30 | 31 | `DeviceSegmentType` 列挙型には、次の機能を提供する伴生オブジェクトがあります。 32 | 33 | - `values`:すべての値を返します。 34 | - `getByValue`:指定された値によって対応の列挙項目を返します。対応の列挙項目が見つからない場合はエラーを返します。 35 | 36 | -------------------------------------------------------------------------------- /doc/class/DeviceSegmentType_jp.md: -------------------------------------------------------------------------------- 1 | # DeviceSegmentType 列挙型 2 | 3 | ```svg 4 | internal enum class DeviceSegmentType(var value: Int) { 5 | plain(1), cipher(2), ; 6 | companion object { 7 | private val values = values() 8 | fun getByValue(value: Int) = values.first { it.value == value } 9 | } 10 | } 11 | ``` 12 | `DeviceSegmentType` は、デバイスセグメントのタイプを示す内部の列挙型です。 13 | 14 | ## 列挙値 15 | 16 | この列挙型は、複数の列挙項目を含んでおり、デバイスセグメントのタイプを表します。各列挙項目は `Int` 型の値を持ちます。 17 | 18 | 以下は `DeviceSegmentType` 列挙型の詳細な一覧です: 19 | 20 | | 列挙値 | 値 | 説明 | 21 | |---|---|---| 22 | | plain | 1 | 平文 | 23 | | cipher | 2 | 暗号文 | 24 | 25 | ## 伴生オブジェクト 26 | 27 | `DeviceSegmentType` 列挙型には、以下の機能を提供する伴生オブジェクトがあります: 28 | 29 | - `values`:すべての列挙値を返します。 30 | - `getByValue`:与えられた値に対応する列挙項目を返します。対応する列挙項目が見つからない場合、例外がスローされます。 31 | -------------------------------------------------------------------------------- /doc/class/NSError.md: -------------------------------------------------------------------------------- 1 | 2 | # NSError クラス 3 | ```svg 4 | class NSError(message: String, var domain: String, var code: Int) : Error(message) 5 | 6 | ``` 7 | `NSError`クラスは`Error`クラスを継承し、特定のドメインを持つエラーコードを表します。 8 | 9 | ## コンストラクタのパラメータ 10 | 11 | - `message`:エラーメッセージを表し、`Error`クラスを継承します。 12 | - `domain`:エラーが発生したドメインを表し、`String`型のの変数です。 13 | - `code`:特定のエラーコードを表し、`Int`型の変数です。 14 | 15 | 例外やエラーの処理において、`NSError`のインスタンスを作成し、具体的なエラーメッセージ、ドメイン、およびエラーコードを提供することができます。エラーをより正確に特定し、処理することに役立ちます。 16 | -------------------------------------------------------------------------------- /doc/class/NSError_jp.md: -------------------------------------------------------------------------------- 1 | # NSError クラスのドキュメント 2 | ```svg 3 | class NSError(message: String, var domain: String, var code: Int) : Error(message) 4 | 5 | ``` 6 | `NSError` クラスは、特定のドメインとエラーコードを持つエラーを表すためのクラスで、`Error` クラスを継承しています。 7 | 8 | ## コンストラクタの引数 9 | 10 | - `message`:エラーメッセージです。`Error` クラスから継承されたプロパティです。 11 | - `domain`:エラーが発生したドメインを示す、文字列(String)型の変数です。 12 | - `code`:特定のエラーコードを示す、整数(Int)型の変数です。 13 | 14 | 例外やエラーの処理時に、`NSError` クラスのインスタンスを作成し、具体的なエラーメッセージ、ドメイン、およびエラーコードを提供することで、エラーをより正確に識別して処理することができます。 15 | -------------------------------------------------------------------------------- /doc/class/SSM2OpCode.md: -------------------------------------------------------------------------------- 1 | # SSM2OpCode 列挙型 2 | ```svg 3 | internal enum class SSM2OpCode(val value: Byte) { 4 | create(0x01) 5 | read(0x02) 6 | update(0x03) 7 | delete(0x04) 8 | sync(0x05) 9 | async(0x06) 10 | response(0x07) 11 | publish(0x08) 12 | undefine(0x10) 13 | 14 | } 15 | 16 | ``` 17 | 18 | `SSM2OpCode`は、内部の列挙型です。 19 | 20 | ## 列挙値 21 | 22 | - `create`: 値が `0x01`で、作成操作を指します。 23 | - `read`: 値が `0x02`で、読取り操作を指します。 24 | - `update`: 値が `0x03`で、更新操作を指します。 25 | - `delete`: 値が `0x04`で、削除操作を指します。 26 | - `sync`: 値が `0x05`で、同期操作を指します。 27 | - `async`: 値が `0x06`で、非同期操作を指します。 28 | - `response`: 値が `0x07`で、応答操作を指します。 29 | - `publish`: 値が `0x08`で、送信操作を指します。 30 | - `undefine`: 値が `0x10`で、未定義操作を指します。 31 | 32 | | SSM2OpCode | 命令名 | 説明 | 33 | | ------ | -------- | ------ | 34 | | 0x01 | create | 作成 | 35 | | 0x02 | read | 読取り | 36 | | 0x03 | update | 更新 | 37 | | 0x04 | delete | 削除 | 38 | | 0x05 | sync | 同期 | 39 | | 0x06 | async | 非同期 | 40 | | 0x07 | response | 応答 | 41 | | 0x08 | publish | 送信 | 42 | | 0x10 | undefine | 未定義 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /doc/class/SSM2OpCode_jp.md: -------------------------------------------------------------------------------- 1 | # SSM2OpCode 列挙型 2 | 3 | `SSM2OpCode` は、操作コードを表す内部の列挙型です。 4 | 5 | ## 列挙値 6 | 7 | - `create`: 値は `0x01` で、作成操作を示します。 8 | - `read`: 値は `0x02` で、読み取り操作を示します。 9 | - `update`: 値は `0x03` で、更新操作を示します。 10 | - `delete`: 値は `0x04` で、削除操作を示します。 11 | - `sync`: 値は `0x05` で、同期操作を示します。 12 | - `async`: 値は `0x06` で、非同期操作を示します。 13 | - `response`: 値は `0x07` で、応答操作を示します。 14 | - `publish`: 値は `0x08` で、公開操作を示します。 15 | - `undefine`: 値は `0x10` で、未定義の操作を示します。 16 | 17 | | SSM2OpCode | 操作名 | 説明 | 18 | | ------ | -------- | ------ | 19 | | 0x01 | create | 作成 | 20 | | 0x02 | read | 読み取り | 21 | | 0x03 | update | 更新 | 22 | | 0x04 | delete | 削除 | 23 | | 0x05 | sync | 同期 | 24 | | 0x06 | async | 非同期 | 25 | | 0x07 | response | 応答 | 26 | | 0x08 | publish | 公開 | 27 | | 0x10 | undefine | 未定義 | 28 | -------------------------------------------------------------------------------- /doc/class/SSM2ResponsePayload.md: -------------------------------------------------------------------------------- 1 | ## SSM2ResponsePayload クラス 2 | ```svg 3 | internal class SSM2ResponsePayload(val data: ByteArray) { 4 | val cmdItCode: UByte = data[0].toUByte()// login 5 | val cmdOPCode: UByte = data[1].toUByte()// sync 6 | val cmdResultCode: UByte = data[2].toUByte()// success 7 | val payload: ByteArray = data.drop(3).toByteArray() 8 | } 9 | 10 | ``` 11 | ### 説明 12 | 13 | `SSM2ResponsePayload`は、SSM2プロトコルの応答ペイロード(payload)を処理するためのKotlinの内部クラスです。このクラスをインスタンス化する際には、バイト配列を引数として渡す必要があります. 14 | 15 | ### プロパティ 16 | 17 | - `data`:バイト配列(ByteArray)型のインスタンス変数です。この`data`変数は、クラスのインスタンスを作成する際には、提供する必要があります。 18 | 19 | - `cmdItCode`: 提供された`data`配列の最初の要素をUByte型(符号なしバイト)に変換します。ログイン操作を示します。 20 | 21 | - `cmdOPCode`: 提供された`data`配列の2番目の要素をUByte型に変換します。同期操作を示します。 22 | 23 | - `cmdResultCode`: 提供された`data`配列の3番目の要素をUByte型に変換します。操作が成功したかどうかを示します。 24 | 25 | - `payload`: `cmdResultCode`の後に`data`の残りの部分です. -------------------------------------------------------------------------------- /doc/class/SSM2ResponsePayload_jp.md: -------------------------------------------------------------------------------- 1 | # SesameNotifypayload クラスのドキュメント 2 | ```svg 3 | internal class SSM2ResponsePayload(val data: ByteArray) { 4 | val cmdItCode: UByte = data[0].toUByte()// login 5 | val cmdOPCode: UByte = data[1].toUByte()// sync 6 | val cmdResultCode: UByte = data[2].toUByte()// success 7 | val payload: ByteArray = data.drop(3).toByteArray() 8 | } 9 | 10 | ``` 11 | ### 説明 12 | 13 | `SesameNotifypayload` は、'Sesame' の通知に関連するペイロード(データの負荷部分)を処理するためのKotlinの内部クラスです。このクラスをインスタンス化する際には、バイト配列(ByteArray)を引数として渡す必要があります。 14 | 15 | ### プロパティ 16 | 17 | - `data`:ByteArray型のインスタンス変数です。この `data` 変数は、クラスのインスタンスを作成する際に提供する必要があります。 18 | 19 | - `notifyOpCode`:`data` 配列の最初のバイトの値を取得し、それを `SSM2OpCode.getByValue` 関数に渡して得られた結果を `notifyOpCode` とします。 20 | 21 | - `payload`:これは `notifyOpCode` の後に残る `data` 部分です。`data.drop(1)` を使用して、`data` 中の最初の要素を除いたすべての要素で新しい配列を生成します。 22 | 23 | ### 使用方法 24 | 25 | このクラスを使用するには、`SesameNotifypayload` クラスのインスタンスを作成し、そのコンストラクタにバイト配列を提供する必要があります。この配列の最初のバイトは、`notifyOpCode` に渡され、残りの部分は `payload` に格納されます。 26 | -------------------------------------------------------------------------------- /doc/class/SSM3PublishPayload.md: -------------------------------------------------------------------------------- 1 | ## SSM3PublishPayload クラス 2 | ```svg 3 | class SSM3PublishPayload(val data: ByteArray) { 4 | val cmdItCode = data[0].toUByte() 5 | val payload: ByteArray = data.drop(1).toByteArray() 6 | } 7 | ``` 8 | ### 説明 9 | 10 | `SSM3PublishPayload` は、SSM3プロトコルに関連するペイロード(データ)を処理するためのKotlinクラスです。このクラスをインスタンス化する際には、バイト配列(ByteArray)を引数として渡す必要があります。 11 | 12 | ### プロパティ 13 | 14 | - `data`:ByteArray型のインスタンス変数です。この変数の値は、クラスのインスタンスを作成する際に提供する必要があります。 15 | 16 | - `cmdItCode`:提供された`data`配列の最初のバイトをUByte(符号なしバイト)に変換します。 17 | 18 | - `payload`:`cmdItCode`の後に残る`data`の部分です。`data.drop(1)`を使用して、最初の要素を除いたすべての要素が含まれる新しい配列を生成します。 19 | 20 | ### 使用 21 | 22 | このクラスを使用するには、`SSM3PublishPayload`クラスのインスタンスを作成し、コンストラクタにバイト配列を渡す必要があります。この配列の最初のバイトは`cmdItCode`に変換されます。 -------------------------------------------------------------------------------- /doc/class/SSM3PublishPayload_jp.md: -------------------------------------------------------------------------------- 1 | # SSM3PublishPayload クラスドキュメント 2 | ```svg 3 | class SSM3PublishPayload(val data: ByteArray) { 4 | val cmdItCode = data[0].toUByte() 5 | val payload: ByteArray = data.drop(1).toByteArray() 6 | } 7 | ``` 8 | ### 説明 9 | 10 | `SSM3PublishPayload` は、SSM3プロトコルに関連するペイロード(データの負荷部分)を処理するためのKotlinクラスです。このクラスをインスタンス化する際には、バイト配列(ByteArray)を引数として渡す必要があります。 11 | 12 | ### プロパティ 13 | 14 | - `data`:ByteArray型のインスタンス変数です。この変数の値は、クラスのインスタンスを作成する際に提供する必要があります。 15 | 16 | - `cmdItCode`:提供された `data` 配列の最初のバイトを `UByte` (符号なしバイト)に変換した値です。 17 | 18 | - `payload`:これは `cmdItCode` の後に残る `data` 部分です。`data.drop(1)` を使用して、`data` 中の最初の要素を除いたすべての要素から新しい配列を生成します。 19 | 20 | ### 使用方法 21 | 22 | このクラスを使用するには、`SSM3PublishPayload` クラスのインスタンスを作成し、そのコンストラクタにバイト配列を提供する必要があります。この配列の最初のバイトは `cmdItCode` に変換され、残りの部分は `payload` に格納されます。 23 | -------------------------------------------------------------------------------- /doc/class/SSM3ResponsePayload.md: -------------------------------------------------------------------------------- 1 | 2 | ## SSM3ResponsePayload クラス 3 | ```svg 4 | internal class SSM3ResponsePayload(val data: ByteArray) { 5 | val cmdItCode: UByte = data[0].toUByte() 6 | val cmdResultCode: UByte = data[1].toUByte() 7 | val payload: ByteArray = data.drop(2).toByteArray() 8 | } 9 | ``` 10 | 11 | 12 | ### 説明 13 | 14 | `SSM3ResponsePayload` は、SSM3プロトコルの応答ペイロード(payload)を処理するためのKotlinの内部クラスです。このクラスをインスタンス化する際には、バイト配列を引数として渡す必要があります. 15 | 16 | ### プロパティ 17 | 18 | - `data`: バイト配列(ByteArray)型のインスタンス変数です。この`data`変数は、クラスのインスタンスを作成する際には、提供する必要があります。 19 | 20 | - `cmdItCode`: 提供された`data`配列の最初の要素をUByte型(符号なしバイト)に変換します。 21 | 22 | - `cmdResultCode`: 提供された`data`配列の2番目の要素をUByte型に変換します。操作の結果コードを示します。 23 | 24 | - `payload`: `cmdResultCode`の後に`data`の残りの部分です.这是 `cmdResultCode` 之后的 `data` 的剩余部分。`data.drop(2)` を使用して、最初の2つの要素を除いた、`data` のすべての要素を含む新しい配列を生成します。 25 | 26 | ### 使用 27 | 28 | 要使用这个类,你需要实例化一个 ` -------------------------------------------------------------------------------- /doc/class/SSM3ResponsePayload_jp.md: -------------------------------------------------------------------------------- 1 | # SSM3ResponsePayload クラスのドキュメント 2 | ```svg 3 | internal class SSM3ResponsePayload(val data: ByteArray) { 4 | val cmdItCode: UByte = data[0].toUByte() 5 | val cmdResultCode: UByte = data[1].toUByte() 6 | val payload: ByteArray = data.drop(2).toByteArray() 7 | } 8 | ``` 9 | ### 説明 10 | 11 | `SSM3ResponsePayload` は、SSM3プロトコルの応答ペイロード(データの負荷部分)を処理するためのKotlinの内部クラスです。このクラスをインスタンス化する際には、バイト配列(ByteArray)を引数として渡す必要があります。 12 | 13 | ### プロパティ 14 | 15 | - `data`:ByteArray型のインスタンス変数です。この `data` 変数は、クラスのインスタンスを作成する際に提供する必要があります。 16 | 17 | - `cmdItCode`:提供された `data` 配列の最初のバイトを `UByte` (符号なしバイト)に変換した値です。 18 | 19 | - `cmdResultCode`:提供された `data` 配列の2番目のバイトを `UByte` に変換した値です。通常、これは操作の結果コードを表します。 20 | 21 | - `payload`:これは `cmdResultCode` の後に残る `data` 部分です。`data.drop(2)` を使用して、`data` 中の最初の2つの要素を除いたすべての要素で新しい配列を生成します。 22 | 23 | ### 使用方法 24 | 25 | このクラスを使用するには、`SSM3ResponsePayload` クラスのインスタンスを作成し、そのコンストラクタにバイト配列を提供する必要があります。この配列の最初のバイトは `cmdItCode` に、2番目のバイトは `cmdResultCode` に渡され、残りの部分は `payload` に格納されます。 26 | -------------------------------------------------------------------------------- /doc/class/SesameBleReceiver.md: -------------------------------------------------------------------------------- 1 | # SesameBleReceiver クラス 2 | 3 | ```svg 4 | 5 | 6 | internal class SesameBleReceiver { 7 | var buffer = byteArrayOf() 8 | internal fun feed(input: ByteArray): Pair? 9 | 10 | } 11 | ``` 12 | 13 | 14 | 15 | `SesameBleReceiver` は内部のクラスです。 16 | 17 | ## プロパティ 18 | 19 | - `buffer`:受信したBluetoothデータを保存するために使用されるバイト配列です。 20 | 21 | ## メソッド 22 | 23 | - `feed(input: ByteArray): Pair?`:このメソッドは、バイト配列を受取り、`DeviceSegmentType`とバイト配列を含むペアの二重のタプルを返します。処理が失敗した場合は、nullを返します。 24 | -------------------------------------------------------------------------------- /doc/class/SesameBleTransmit.md: -------------------------------------------------------------------------------- 1 | # SesameBleTransmit クラス 2 | 3 | ```svg 4 | 5 | internal class SesameBleTransmit(var type: DeviceSegmentType, var input: ByteArray) { 6 | var isStart = 1 7 | internal fun getChunk(): ByteArray? 8 | } 9 | 10 | ``` 11 | 12 | `SesameBleTransmit` は内部のクラスです。 13 | 14 | ## プロパティ 15 | 16 | - `type`:`DeviceSegmentType`の列挙型の値です。転送するデータのタイプを表します。 17 | - `input`:バイト配列です。転送する必要があるデータを表します。 18 | - `isStart`:データ転送の開始を示すために使用される整数値です。初期値は1であり、転送が開始されると0に設定され、転送が終了すると-1に設定されます。 19 | 20 | ## メソッド 21 | 22 | - `getChunk(): ByteArray?`:バイト配列を返し、データブロックを表します。`isStart`が-1の場合、データの転送が完了したことを示し、`null`を返します。また、`input`が19以下の場合、すべてのデータを一度に転送し、`isStart`を-1に設定します。`input`が19より大きい場合、19バイトずつデータを転送し、すべてのデータが転送されるまで繰り返します。 23 | -------------------------------------------------------------------------------- /doc/class/SesameBleTransmit_jp.md: -------------------------------------------------------------------------------- 1 | # SesameBleTransmit クラスのドキュメント 2 | 3 | ```svg 4 | 5 | internal class SesameBleTransmit(var type: DeviceSegmentType, var input: ByteArray) { 6 | var isStart = 1 7 | internal fun getChunk(): ByteArray? 8 | } 9 | 10 | ``` 11 | `SesameBleTransmit` は、内部クラスです。 12 | 13 | ## プロパティ 14 | 15 | - `type`:`DeviceSegmentType` 列挙値の変数で、データの種類を示します。 16 | - `input`:バイト配列型の変数で、送信するデータを表します。 17 | - `isStart`:整数型の変数で、データ送信の開始を示すために使用されます。初期値は1で、送信が開始されると0に、送信が終了すると-1に設定されます。 18 | 19 | ## メソッド 20 | 21 | - `getChunk(): ByteArray?`:このメソッドは、データのチャンク(一部)を表すバイト配列を返します。`isStart` が-1の場合、データがすべて送信されていることを示します。この場合、`null` を返します。`input` のサイズが19以下の場合、すべてのデータが一度に送信され、`isStart` が-1に設定されます。`input` のサイズが19より大きい場合、19バイトのデータが一度に送信され、すべてのデータが送信されるまで繰り返し送信されます。 22 | -------------------------------------------------------------------------------- /doc/class/SesameNotifypayload.md: -------------------------------------------------------------------------------- 1 | ## SesameNotifypayload クラス 2 | ``` 3 | internal class SesameNotifypayload(val data: ByteArray) { 4 | val notifyOpCode: SSM2OpCode = SSM2OpCode.getByValue(data[0]) 5 | val payload: ByteArray = data.drop(1).toByteArray() 6 | } 7 | ``` 8 | ### 説明 9 | 10 | `SesameNotifypayload`は`Sesame`の通知のペイロードを処理するためのKotlinの内部クラスです。このクラスのインスタンス化する際には、バイト配列を渡す必要があります。 11 | 12 | ### プロパティ 13 | 14 | - `data`:ByteArray型のインスタンス変数です。この`data`変数は、クラスのインスタンスを作成する際に提供する必要があります。 15 | 16 | - `notifyOpCode`: 提供された`data`配列の最初のバイトの値を取得し、`SSM2OpCode.getByValue`関数に渡して、その結果を`notifyOpCode`として設定します。 17 | 18 | - `payload`: `notifyOpCode`の後にある`data`の残りの部分です。`data.drop(1)`を使用すると、新しい配列が生成され、最初の要素以外のすべての要素が含まれます。 19 | 20 | ### 使用 21 | 22 | このクラスを使用するには、`SesameNotifyPayload`オブジェクトをインスタンス化し、そのコンストラクタにバイト配列を提供する必要があります。 -------------------------------------------------------------------------------- /doc/class/SesameNotifypayload_jp.md: -------------------------------------------------------------------------------- 1 | # SesameNotifypayload クラスのドキュメント 2 | ``` 3 | internal class SesameNotifypayload(val data: ByteArray) { 4 | val notifyOpCode: SSM2OpCode = SSM2OpCode.getByValue(data[0]) 5 | val payload: ByteArray = data.drop(1).toByteArray() 6 | } 7 | ``` 8 | ### 説明 9 | 10 | `SesameNotifypayload` は、'Sesame' の通知に関連するペイロード(データの負荷部分)を処理するためのKotlinの内部クラスです。このクラスをインスタンス化する際には、バイト配列(ByteArray)を引数として渡す必要があります。 11 | 12 | ### プロパティ 13 | 14 | - `data`:ByteArray型のインスタンス変数です。この `data` 変数は、クラスのインスタンスを作成する際に提供する必要があります。 15 | 16 | - `notifyOpCode`:`data` 配列の最初のバイトの値を取得し、それを `SSM2OpCode.getByValue` 関数に渡して得られた結果を `notifyOpCode` とします。 17 | 18 | - `payload`:これは `notifyOpCode` の後に残る `data` 部分です。`data.drop(1)` を使用して、`data` 中の最初の要素を除いたすべての要素で新しい配列を生成します。 19 | 20 | ### 使用方法 21 | 22 | このクラスを使用するには、`SesameNotifypayload` クラスのインスタンスを作成し、そのコンストラクタにバイト配列を提供する必要があります。この配列の最初のバイトは、`notifyOpCode` に渡され、残りの部分は `payload` に格納されます。 23 | -------------------------------------------------------------------------------- /doc/class/SesameOS3BleCipher.md: -------------------------------------------------------------------------------- 1 | 2 | # SesameOS3BleCipher クラス 3 | ```svg 4 | internal class SesameOS3BleCipher(val name: String, private var sessionKey: ByteArray, private var sault: ByteArray) { 5 | var encryptCounter: Long = 0.toLong()//int32 4byte-> 010000 小端 6 | var decryptCounter: Long = 0.toLong() 7 | internal fun encrypt(plaintext: ByteArray): ByteArray 8 | internal fun decrypt(ciphertext: ByteArray): ByteArray 9 | 10 | } 11 | 12 | ``` 13 | `SesameOS3BleCipher` は、Sesame OS3 Ble デバイスのデータの暗号化と復号化を担当する内部クラスです。 14 | 15 | ## メンバー変数 16 | 17 | - `val name: String`: デバイス名 18 | 19 | - `private var sessionKey: ByteArray`: セッションキー 20 | 21 | - `private var sault: ByteArray`: 暗号化と復号化に使用される値 22 | 23 | - `var encryptCounter: Long`: 暗号化カウンター 24 | 25 | - `var decryptCounter: Long`: 復号化カウンター 26 | 27 | ## メソッド 28 | 29 | - `fun encrypt(plaintext: ByteArray): ByteArray`: 平文データのバイト配列を受取り、セッションキーを使用して暗号化し、暗号化されたバイト配列を返します。 30 | 31 | - `fun decrypt(ciphertext: ByteArray): ByteArray`: 暗号文データのバイト配列を受取り、セッションキーを使用して復号化し、復号化されたバイト配列を返します。 32 | 33 | 暗号化と復号化のプロセスにおいて、”AES/CCM/NoPadding“というアルゴリズムと、”BC“というプロバイダを使用しています。Cipherオブジェクトの初期化では、GCMParameterSpecを使用し、各暗号化と復号化のデータには追加の認証データ(AAD)が含まれています。 -------------------------------------------------------------------------------- /doc/class/SesameOS3Payload.md: -------------------------------------------------------------------------------- 1 | 2 | # SesameOS3Payload データのクラス 3 | ```svg 4 | internal data class SesameOS3Payload(val itemCode: UByte, val data: ByteArray) { 5 | fun toDataWithHeader(): ByteArray { 6 | return byteArrayOf(itemCode.toByte()) + data 7 | } 8 | } 9 | 10 | 11 | ``` 12 | `SesameOS3Payload`データのクラスは、Sesame OS3 のペイロードデータを処理および管理します。 13 | 14 | ## プロパティ 15 | 16 | - `itemCode`:UByte型です。 17 | - `data`:有効なペイロードデータを保存するByteArray型です。 18 | 19 | ## メソッド 20 | 21 | - `toDataWithHeader()`:このメソッドは、`itemCode` を Byte 型に変換し、それをヘッダーとして `data` と連結して新しいバイト配列を生成します。このメソッドは、有効なペイロードデータを送信または保存する際に、適切な形式に変換します。 -------------------------------------------------------------------------------- /doc/class/SesameOS3Payload_jp.md: -------------------------------------------------------------------------------- 1 | # SesameOS3Payload クラスのドキュメント 2 | ```svg 3 | internal data class SesameOS3Payload(val itemCode: UByte, val data: ByteArray) { 4 | fun toDataWithHeader(): ByteArray { 5 | return byteArrayOf(itemCode.toByte()) + data 6 | } 7 | } 8 | 9 | 10 | ``` 11 | `SesameOS3Payload` クラスは、Sesame OS3 のペイロードデータを処理および管理するためのデータクラスです。 12 | 13 | ## プロパティ 14 | 15 | - `itemCode`:項目コードを表す UByte 型のプロパティです。 16 | - `data`:有効なペイロードデータを格納するバイト配列(ByteArray)です。 17 | 18 | ## メソッド 19 | 20 | - `toDataWithHeader()`:このメソッドは、`itemCode` を Byte 型に変換し、それをヘッダーとして `data` と連結した新しいバイト配列を返します。このメソッドは、ペイロードデータを適切な形式に変換して送信または保存する際に使用されます。 21 | -------------------------------------------------------------------------------- /doc/class/SesameResultCode.md: -------------------------------------------------------------------------------- 1 | # SesameResultCode 列挙型 2 | ```svg 3 | internal enum class SesameResultCode(val value: UByte) { 4 | success(0U) 5 | invalidFormat(1U) 6 | notSupported(2U) 7 | StorageFail(3U) 8 | invalidSig(4U) 9 | notFound(5U) 10 | UNKNOWN(6U) 11 | BUSY(7U) 12 | INVALID_PARAM(8U) 13 | } 14 | ``` 15 | 16 | 17 | `SesameResultCode` は、内部の列挙型です。 18 | 19 | ## 列挙値 20 | 21 | - `success`: 値が `0U`で、成功を指します。 22 | - `invalidFormat`: 値が `1U`で、無効なフォーマットを指します。 23 | - `notSupported`: 値が `2U`で、対応不可を指します。 24 | - `StorageFail`: 値が `3U`で、保存失敗を指します。 25 | - `invalidSig`: 値が `4U`で、無効な署名を指します。 26 | - `notFound`: 値が `5U`で、見つからないことを指します。 27 | - `UNKNOWN`: 値が `6U`で、不明なエラーを指します。 28 | - `BUSY`: 値が `7U`で、デバイスがビジーであることを指します。 29 | - `INVALID_PARAM`: 値が `8U`で、無効なパラメータを指します。 30 | 31 | 32 | | 命令名 | SesameResultCode | 説明 | 33 | | :---: |:----:| :---: | 34 | | success | 0U | 成功 | 35 | | invalidFormat | 1U | 無効なフォーマット | 36 | | notSupported | 2U | 対応不可 | 37 | | StorageFail | 3U | 保存失敗 | 38 | | invalidSig | 4U | 無効な署名 | 39 | | notFound | 5U | 見つからないこと | 40 | | UNKNOWN | 6U | 不明 | 41 | | BUSY | 7U | ビジー | 42 | | INVALID_PARAM | 8U | 無効なパラメータ | 43 | -------------------------------------------------------------------------------- /doc/class/WM2ActionCode.md: -------------------------------------------------------------------------------- 1 | 2 | # WM2ActionCode 列挙型 3 | ```svg 4 | internal enum class WM2ActionCode(val value: UByte) { 5 | CODE_NON(0U), 6 | REGISTER_WM2(1U), 7 | LOGIN_WM2(2U), 8 | UPDATE_WIFI_SSID(3U), 9 | UPDATE_WIFI_PASSWORD(4U), 10 | CONNECT_WIFI(5U), 11 | NETWORK_STATUS(6U), 12 | DELETE_SESAME(7U), 13 | ADD_SESAME(8U), 14 | INITIAL(13U), 15 | CCCD(14U), 16 | SESAME_KEYS(16U), 17 | RESET_WM2(18U), 18 | SCAN_WIFI_SSID(19U), 19 | OPEN_OTA_SERVER(126U), 20 | VERSION_TAG(127U), 21 | } 22 | 23 | ``` 24 | `WM2ActionCode`列挙型は一連の操作コードを定義します。 25 | 26 | ## メンバー 27 | 28 | - `CODE_NON`:値が0で、操作なしです。 29 | - `REGISTER_WM2`:値が1で、WM2を登録します。 30 | - `LOGIN_WM2`:値が2で、WM2を登録します。 31 | - `UPDATE_WIFI_SSID`:値が3で、Wifi SSIDを更新します。 32 | - `UPDATE_WIFI_PASSWORD`:値が4で、Wifiのパスワードを更新します。 33 | - `CONNECT_WIFI`:値が5で、Wifiに接続します。 34 | - `NETWORK_STATUS`:値が6で、ネットワークの状態です。 35 | - `DELETE_SESAME`:値が7で、Sesameを削除します。 36 | - `ADD_SESAME`:値が8で、Sesameを添加します。 37 | - `INITIAL`:値が13で、初期的な操作です。 38 | - `CCCD`:値が14で、CCCDを操作します。 39 | - `SESAME_KEYS`:値が16で、Sesameのキーです。 40 | - `RESET_WM2`:値が18で、WM2をリセットします。 41 | - `SCAN_WIFI_SSID`:値が19で、Wifi SSIDをスキャンします。 42 | - `OPEN_OTA_SERVER`:値が126で、OTAのサーバーをオープンします。 43 | - `VERSION_TAG`:値が127で、バージョンタグです。 44 | -------------------------------------------------------------------------------- /doc/class/WM2ActionCode_jp.md: -------------------------------------------------------------------------------- 1 | # WM2ActionCode 列挙型 2 | ```svg 3 | internal enum class WM2ActionCode(val value: UByte) { 4 | CODE_NON(0U), 5 | REGISTER_WM2(1U), 6 | LOGIN_WM2(2U), 7 | UPDATE_WIFI_SSID(3U), 8 | UPDATE_WIFI_PASSWORD(4U), 9 | CONNECT_WIFI(5U), 10 | NETWORK_STATUS(6U), 11 | DELETE_SESAME(7U), 12 | ADD_SESAME(8U), 13 | INITIAL(13U), 14 | CCCD(14U), 15 | SESAME_KEYS(16U), 16 | RESET_WM2(18U), 17 | SCAN_WIFI_SSID(19U), 18 | OPEN_OTA_SERVER(126U), 19 | VERSION_TAG(127U), 20 | } 21 | 22 | ``` 23 | `WM2ActionCode` は、一連の操作コードを定義する列挙型です。 24 | 25 | ## メンバー 26 | 27 | - `CODE_NON`:操作なし。値は0です。 28 | - `REGISTER_WM2`:WM2を登録します。値は1です。 29 | - `LOGIN_WM2`:WM2にログインします。値は2です。 30 | - `UPDATE_WIFI_SSID`:WifiのSSIDを更新します。値は3です。 31 | - `UPDATE_WIFI_PASSWORD`:Wifiのパスワードを更新します。値は4です。 32 | - `CONNECT_WIFI`:Wifiに接続します。値は5です。 33 | - `NETWORK_STATUS`:ネットワークの状態です。値は6です。 34 | - `DELETE_SESAME`:Sesameを削除します。値は7です。 35 | - `ADD_SESAME`:Sesameを追加します。値は8です。 36 | - `INITIAL`:初期操作です。値は13です。 37 | - `CCCD`:CCCD操作です。値は14です。 38 | - `SESAME_KEYS`:Sesameの鍵情報です。値は16です。 39 | - `RESET_WM2`:WM2をリセットします。値は18です。 40 | - `SCAN_WIFI_SSID`:WifiのSSIDをスキャンします。値は19です。 41 | - `OPEN_OTA_SERVER`:OTAサーバーを開きます。値は126です。 42 | - `VERSION_TAG`:バージョンタグです。値は127です。 43 | -------------------------------------------------------------------------------- /doc/class/a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/doc/class/a.jpg -------------------------------------------------------------------------------- /doc/class/utils.md: -------------------------------------------------------------------------------- 1 | # co.candyhouse.sesame.utils 2 |
3 | 4 | L:项目debug日志输出 5 | 6 | 7 | 8 | ```svg 9 | 10 | ``` 11 | 12 |
13 |
14 | 15 | Ecckey:通过ECDH算法生成共享公钥 16 | 17 | 18 | 19 | ```svg 20 | 21 | ``` 22 | 23 |
-------------------------------------------------------------------------------- /doc/command/autolock.md: -------------------------------------------------------------------------------- 1 | # AutoLock オートロック 2 | 3 | ### 送信フォーマット 4 | | Byte | 2 ~ 1 | 0 | 5 | |:----:|:-----:|:------:| 6 | | Data | delay_duration| command | 7 | - command:命令11(固定) 8 | - delay_duration:遅延時間(s) 0オートロックを無効にする 9 | 10 | ## 受信フォーマット 11 | | Byte | 2 | 1 | 0 | 12 | |:----:|:----:|:----:|:----:| 13 | | Data | status | command | response | 14 | - response:応答0x07(固定) 15 | - command:命令11(固定) 16 | - status:状態0x00(成功) 17 | ## フローチャート 18 | ![v](autolock.svg) 19 | 20 | 21 | 22 | 23 | 24 | ## android例 25 | ``` java 26 | override fun autolock(delay: Int, result: CHResult) { 27 | if (checkBle(result)) return 28 | sendCommand(SesameOS3Payload(SesameItemCode.autolock.value, delay.toShort().toReverseBytes()), DeviceSegmentType.cipher) { res -> 29 | mechSetting?.autoLockSecond = delay.toShort() 30 | result.invoke(Result.success(CHResultState.CHResultStateBLE(delay))) 31 | } 32 | } 33 | ``` 34 | -------------------------------------------------------------------------------- /doc/command/autolock.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | APP -> Device: send_command(6,89) 3 | Device --> APP: response_command(6,7,89,status) 4 | @enduml 5 | -------------------------------------------------------------------------------- /doc/command/autolock_jp.md: -------------------------------------------------------------------------------- 1 | # AutoLock自动锁 2 | 3 | ### 送信フォーマット 4 | | バイト | 2〜1 | 0 | 5 | |:----:|:-----:|:------:| 6 | | データ | 遅延時間 | コマンド | 7 | - コマンド: 指令11(固定) 8 | - 遅延時間: 遅延時間(秒)、0は自動解錠無効 9 | 10 | ## 受信フォーマット 11 | | バイト | 2 | 1 | 0 | 12 | |:----:|:----:|:----:|:----:| 13 | | データ | ステータス | コマンド | レスポンス | 14 | - コマンド: 指令11(固定) 15 | - レスポンス: 応答0x07(固定) 16 | - ステータス: 状態0x00(成功) 17 | 18 | ## シーケンス図 19 | ![v](autolock.svg) 20 | 21 | ## Androidの例 22 | ``` java 23 | override fun autolock(delay: Int, result: CHResult) { 24 | if (checkBle(result)) return 25 | sendCommand(SesameOS3Payload(SesameItemCode.autolock.value, delay.toShort().toReverseBytes()), DeviceSegmentType.cipher) { res -> 26 | mechSetting?.autoLockSecond = delay.toShort() 27 | result.invoke(Result.success(CHResultState.CHResultStateBLE(delay))) 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /doc/command/configureLockPosition.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | 3 | APP -> Device: send_command(autolock_second,unlock_angle,lock_angle,command) 4 | Device --> APP: response_command(response,command,status) 5 | Device --> APP: response_command(autolock_second,unlock_angle,lock_angle,command) 6 | @enduml 7 | -------------------------------------------------------------------------------- /doc/command/history.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | APP -> Device: send_command(4,isPeek)) 3 | Device --> APP: response_command(response,command,status,payload) 4 | @enduml 5 | -------------------------------------------------------------------------------- /doc/command/lock.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | APP -> Device: send_command(82,historyTag)) 3 | Device --> APP: response_command(response,command,status) 4 | @enduml 5 | -------------------------------------------------------------------------------- /doc/command/magnet.md: -------------------------------------------------------------------------------- 1 | # Magnet 角度補正 2 | 3 | ### 送信フォーマット 4 | | Byte | 0 | 5 | |:----:|:----:| 6 | | Data | command | 7 | - command:命令17(固定) 8 | 9 | 10 | ### 受信フォーマット 11 | | Byte | 2 | 1 | 0 | 12 | |:----:|:----:|:----:|:----:| 13 | | Data | status | command | response | 14 | - command:命令17(固定) 15 | - response:応答0x07(固定) 16 | - status:状態0x00(成功) 17 | ### フローチャート 18 | ![v](magnet.svg) 19 | 20 | 21 | 22 | 23 | 24 | ### android例 25 | ``` java 26 | override fun magnet(result: CHResult) { 27 | if (checkBle(result)) return 28 | sendCommand(SesameOS3Payload(SesameItemCode.magnet.value, byteArrayOf()), DeviceSegmentType.cipher) { res -> 29 | result.invoke(Result.success(CHResultState.CHResultStateBLE(CHEmpty()))) 30 | } 31 | } 32 | ``` 33 | -------------------------------------------------------------------------------- /doc/command/magnet.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | APP -> Device: send_command(17) 3 | Device --> APP: response_command(response,command,status) 4 | @enduml 5 | -------------------------------------------------------------------------------- /doc/command/magnet_jp.md: -------------------------------------------------------------------------------- 1 | # Magnet 角度補正 2 | 3 | ### 送信フォーマット 4 | | バイト | 0 | 5 | |:----:|:----:| 6 | | データ | コマンド | 7 | - コマンド: 指令17(固定) 8 | 9 | ### 受信フォーマット 10 | | バイト | 2 | 1 | 0 | 11 | |:----:|:----:|:----:|:----:| 12 | | データ | ステータス | コマンド | レスポンス | 13 | - コマンド: 指令17(固定) 14 | - レスポンス: 応答0x07(固定) 15 | - ステータス: 状態0x00(成功) 16 | ### シーケンス図 17 | ![アイコン](magnet.svg) 18 | 19 | ### Androidの例 20 | ``` java 21 | override fun magnet(result: CHResult) { 22 | if (checkBle(result)) return 23 | sendCommand(SesameOS3Payload(SesameItemCode.magnet.value, byteArrayOf()), DeviceSegmentType.cipher) { res -> 24 | result.invoke(Result.success(CHResultState.CHResultStateBLE(CHEmpty()))) 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /doc/command/reset.md: -------------------------------------------------------------------------------- 1 | # Reset リセット 2 | 3 | ### 送信フォーマット 4 | 5 | | Byte | 0 | 6 | |:------:|:------------:| 7 | | Data | command | 8 | 9 | 10 | - command:命令104(固定) 11 | 12 | 13 | ### 受信フォーマット 14 | 15 | | Byte | 2 | 1 | 0 | 16 | |:-------:|:------:|:---------:|:----------:| 17 | | Data | status | command | response | 18 | - command:命令104(固定) 19 | - response:応答0x07(固定) 20 | - status:状態0x00(成功) 21 | ### フローチャート 22 | ![icon](reset.svg) 23 | 24 | 25 | 26 | 27 | 28 | ### android例 29 | ``` java 30 | open fun reset(result: CHResult) { 31 | sendCommand(SesameOS3Payload(SesameItemCode.Reset.value, byteArrayOf()), DeviceSegmentType.cipher) { res -> 32 | if (res.cmdResultCode == SesameResultCode.success.value) { 33 | dropKey(result) 34 | } else { 35 | result.invoke(Result.failure(NSError(res.cmdResultCode.toString(), "CBCentralManager", res.cmdResultCode.toInt()))) 36 | } 37 | } 38 | } 39 | ``` 40 | -------------------------------------------------------------------------------- /doc/command/reset.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | APP -> Device: send_command(104) 3 | Device --> APP: response_command(response,command,status) 4 | @enduml 5 | -------------------------------------------------------------------------------- /doc/command/reset_jp.md: -------------------------------------------------------------------------------- 1 | # リセット デバイスのリセット 2 | 3 | ### 送信フォーマット 4 | 5 | | バイト | 0 | 6 | |:------:|:------------:| 7 | | データ | command | 8 | 9 | 10 | - command: 指令104(固定) 11 | 12 | ### 受信フォーマット 13 | 14 | | バイト | 2 | 1 | 0 | 15 | |:-------:|:------:|:---------:|:----------:| 16 | | データ | status | command | response | 17 | - command: 指令104(固定) 18 | - response: 响应0x07(固定) 19 | - status: 状態0x00(成功) 20 | 21 | ### シーケンス図 22 | ![アイコン](reset.svg) 23 | 24 | ### Androidの例 25 | ```java 26 | open fun reset(result: CHResult) { 27 | sendCommand(SesameOS3Payload(SesameItemCode.Reset.value, byteArrayOf()), DeviceSegmentType.cipher) { res -> 28 | if (res.cmdResultCode == SesameResultCode.success.value) { 29 | dropKey(result) 30 | } else { 31 | result.invoke(Result.failure(NSError(res.cmdResultCode.toString(), "CBCentralManager", res.cmdResultCode.toInt()))) 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /doc/command/sesame_open_sensor.md: -------------------------------------------------------------------------------- 1 | # open sensor 説明 2 | ## 実装クラス CHSesameTouchProDevice 3 | ### インターフェイス 4 | 5 | ```agsl 6 | 7 | 8 | 9 | 10 | fun insertSesame(sesame: CHDevices, result: CHResult) 11 | fun removeSesame(tag: String, result: CHResult) 12 | ``` 13 | ### インターフェースの機能の定義 14 | 15 | 16 | 17 | 18 | 19 | 20 | #### [insertSesame](../touch/add_sesame.md):sesameを取得します 21 | #### [removeSesame](../touch/remove_sesame.md):sesameを削除します 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /doc/command/sesame_open_sensor_jp.md: -------------------------------------------------------------------------------- 1 | # open sensor 解説 2 | ## 実装クラス CHSesameTouchProDevice 3 | ### インターフェース 4 | 5 | 6 | ```agsl 7 | 8 | 9 | 10 | fun insertSesame(sesame: CHDevices, result: CHResult) 11 | fun removeSesame(tag: String, result: CHResult) 12 | ``` 13 | ### インターフェースの機能説明 14 | 15 | 16 | 17 | #### [insertSesame](../touch/add_sesame_jp.md):Sesameを追加します 18 | #### [removeSesame](../touch/remove_sesame_jp.md):Sesameを削除します 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /doc/command/sesamebike2fun.md: -------------------------------------------------------------------------------- 1 | # Bike2 説明 2 | ## 実装クラス CHSesameBike2Device 3 | ### インターフェース 4 | 5 | ```agsl 6 | fun unlock(tag: ByteArray? = null, result: CHResult) 7 | fun reset(result: CHResult) 8 | fun getVersionTag(result: CHResult) 9 | 10 | ``` 11 | ### インターフェースの機能の定義 12 | - [unlock](unlock.md):ロックを解除する 13 | - [reset](reset.md):デバイスをリセットする 14 | - [getVersionTag](ssm5version.md):バージョンのタグを取得する 15 | ### フローチャート 16 | ![CHSesameBike2Device](../class/CHSesameBike2Device.svg) 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /doc/command/sesamebike2fun_jp.md: -------------------------------------------------------------------------------- 1 | # Bike2 解説 2 | 3 | ## 実装クラス: CHSesameBike2Device 4 | 5 | ### インターフェース 6 | 7 | ```agsl 8 | fun unlock(tag: ByteArray? = null, result: CHResult) 9 | fun reset(result: CHResult) 10 | fun getVersionTag(result: CHResult) 11 | 12 | ``` 13 | ### インターフェースの機能説明 14 | 15 | - [unlock](unlock_jp.md):ロックを解除する 16 | - [reset](reset_jp.md):デバイスをリセットする 17 | - [getVersionTag](ssm5version_jp.md):バージョンタグを取得する 18 | ### フローチャート 19 | 20 | ![CHSesameBike2Device](../class/CHSesameBike2Device.svg) 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /doc/command/sesameblot.md: -------------------------------------------------------------------------------- 1 | # Bot1 讲解 2 | ## 实现类 CHSesameBotDevice 3 | ### 接口 4 | 7 | ```agsl 8 | fun updateSetting(setting: CHSesameBotMechSettings, historyTag: ByteArray? = null, result: CHResult) 9 | 10 | fun click(historyTag: ByteArray? = null, result: CHResult) 11 | fun reset(result: CHResult) 12 | fun getVersionTag(result: CHResult) 13 | ``` 14 | ### 接口功能字义 15 | 16 | - [updateSetting](updatasetting.md):模式设置 17 | - [click](click.md):点击复原 18 | - [getVersionTag](ssm5version.md):获取版本号 19 | - [reset](reset.md):重置设备 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /doc/command/sesamewifimodule.md: -------------------------------------------------------------------------------- 1 | # Wifi Module 2 説明 2 | ## 実装クラス CHWifiModule2Device 3 | ### インターフェース 4 | 5 | ```agsl 6 | fun scanWifiSSID(result: CHResult) 7 | fun setWifiSSID(ssid: String, result: CHResult) 8 | fun setWifiPassword(password: String, result: CHResult) 9 | fun connectWifi(result: CHResult) 10 | fun insertSesames(sesame: CHDevices, result: CHResult) 11 | fun removeSesame(sesameKeyTag: String, result: CHResult) 12 | fun reset(result: CHResult) 13 | fun getVersionTag(result: CHResult) 14 | ``` 15 | ### インターフェースの機能の定義 16 | - [scanWifiSSID](../wm2/scanwifissid.md) :wifiをスキャンし、SSIDを取得する 17 | - [setWifiSSID](../wm2/setwifissid.md):SSIDを設置する 18 | - [setWifiPassword](../wm2/setwifipw.md):WIFIパスワードを設置する 19 | - [connectWifi](../wm2/connectwifi.md):Wifiに接続する 20 | - [insertSesames](../touch/add_sesame.md):Sesamesシリーズ製品を追加する 21 | - [removeSesame](../touch/remove_sesame.md):移除Sesamesシリーズ製品を削除する 22 | - [getVersionTag](ssm5version.md):バージョンのタグを取得する 23 | - [reset](reset.md):デバイスをリセットする 24 | ### フローチャート 25 | ![CHWifiModule2Device](../class/CHWifiModule2Device.svg) 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /doc/command/ssm5version.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | APP -> Device: send_command(5) 3 | Device --> APP: response_command(response,command,status) 4 | @enduml 5 | -------------------------------------------------------------------------------- /doc/command/unlock.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | APP -> Device: send_command(3,80,payload)) 3 | Device --> APP: response_command(3,7,80,status) 4 | @enduml 5 | -------------------------------------------------------------------------------- /doc/encryption/ble_encryption.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | APP-->Device: connect Ble 3 | APP<--Device: response(14,random_code) 4 | 5 | APP->APP: 使用ECDH算法EccKey.getPubK()生成公钥、密钥\n(app_pub_key,app_pri_key) 6 | 7 | APP -> Device: send_command(1,app_pub_key,timestamp)) 8 | Device --> APP: response_command(response,command,status,device_pub_key) 9 | 10 | APP->APP:使用ECDH算法EccKey.ecdh(device_pub_key)生成共享公钥->ecdhSecret(供AESCMAC使用) 11 | APP->APP:ecdhSecret 和random_code 作为AESCMAC算法的key、Message生成消息码。AesCmac(ecdhSecret,16).computeMac(random_code)->sessionAuth(供AESCCM使用) 12 | APP->APP:deviceSecret和random_code作为AESCCM的key、Message创建加密对象->cipher(对Ble数据传输加密解密) 13 | 14 | 15 | @enduml 16 | -------------------------------------------------------------------------------- /doc/img/SesameSDK_20231201.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/doc/img/SesameSDK_20231201.png -------------------------------------------------------------------------------- /doc/product_structure.md: -------------------------------------------------------------------------------- 1 | # Android プロジェクトのコード例 2 | 3 | ![SesameOs3](bleconnect/SesameOs3.jpg) 4 | 以下は一般的な Android プロジェクトの構造例で、コードとリソースファイルを整理するために使用されます。 5 | 6 | 主なプロジェクトの構造は次の通りです: 7 | - `libs/`:サードパーティのライブラリのバイナリファイルを保存するためのフォルダ(.jar、.aar など)です。 8 | 9 | - `java/`:Java コードを保存します。機能モジュールによってサブパッケージが分けられます。例えば `activities/` はアクティビティクラスを、`adapters/` はアダプタークラスを保存します。 10 | 11 | - `res/`:リソースファイルを保存し、レイアウトファイル、文字列、アイコンなどが含まれます。リソースの種類によってディレクトリごとに保存します。例えば `layout/` はレイアウトファイルを、`drawable/` は画像リソースを、`values/` は文字列やスタイルのリソースを保存します。 12 | 13 | - `build.gradle`:応用レベルの Gradle 設定ファイルで、依存関係、プラグイン、ビルド設定を構成するために使用されます。 14 | 15 | - `proguard-rules.pro`:ProGuard 設定ファイルで、コードの難読化と最適化を行うために使用されます。これはオプションで、リリースバージョンの場合に適用されます。 16 | - co.candyhouse.sesame.ble: 主にos2、os3のBleデバイスの接続と機能を保存します。 17 | - co.candyhouse.sesame.db: ローカルストレージに保存します。 18 | - co.candyhouse.sesame.open: Bleデバイスの管理、設定、パラメータを保存します。 19 | - co.candyhouse.sesame.utils: Ble転送の暗号化アルゴリズムやログの記録を保存します。 20 | 21 | -------------------------------------------------------------------------------- /doc/product_structure_ja.md: -------------------------------------------------------------------------------- 1 | # Android プロジェクトの構造例 2 | 3 | ![SesameOs3](bleconnect/SesameOs3.jpg) 4 | 以下は一般的な Android プロジェクトの構造の例で、コードとリソースファイルを整理するために使用されます。 5 | 6 | この例では、主なプロジェクトの構造は次の通りです: 7 | - `libs/`:通常、サードパーティのライブラリ(.jar、.aar など)のバイナリファイルを格納するためのフォルダです。 8 | - `java/`:Java コードを格納する場所です。機能モジュールごとにサブパッケージに分割されます。例えば `activities/` はアクティビティクラスを、`adapters/` はアダプタークラスを格納する場所です。 9 | 10 | - `res/`:リソースファイルを格納する場所で、レイアウトファイル、文字列、アイコンなどが含まれます。リソースの種類ごとにディレクトリを分けて格納します。例えば `layout/` はレイアウトファイルを、`drawable/` は画像リソースを、`values/` は文字列やスタイルのリソースを格納します。 11 | 12 | - `build.gradle`:アプリケーションレベルの Gradle 設定ファイルで、依存関係、プラグイン、ビルド設定を構成するために使用されます。 13 | 14 | - `proguard-rules.pro`:ProGuard 設定ファイルで、コードの難読化と最適化を行うために使用されます。これはオプションで、リリースバージョンの場合に使用されます。 15 | - co.candyhouse.sesame.ble:主にos2、os3のBleデバイスの接続と機能を格納します。 16 | - co.candyhouse.sesame.db:ローカルストレージを格納します。 17 | - co.candyhouse.sesame.open:Bleデバイスの管理、設定、パラメータを格納します。 18 | - co.candyhouse.sesame.utils:Ble転送の暗号化アルゴリズムやログの記録を格納します。 19 | -------------------------------------------------------------------------------- /doc/sesame_code.md: -------------------------------------------------------------------------------- 1 | SesameOs3 その他の関連コンテンツの共有 2 | =========== 3 | 4 | 5 | 1. [ファームウェアのアップグレード](bleprotocol/firmwareUpgradation.md) 6 | 2. [Bluetooth 接続](bleprotocol/BleConnect.md) 7 | 3. [NFC 接続](bleprotocol/nfcconnect.md) 8 | 3. [Ble 暗号化アルゴリズム](./encryption/ble_encryption.md) 9 | 3. [Ble 登録](bleconnect/register.md) 10 | 3. [Ble ログイン](bleconnect/login.md) 11 | 3. [Ble ランダムコードの取得](bleconnect/randomcode.md) 12 | 3. [Ble データの受信](bleconnect/ble_receivedata.md) 13 | 3. [Ble データの送信](bleconnect/ble_senddata.md) 14 | 3. [タイムスタンプの更新](bleconnect/timestamp.md) 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /doc/sesame_code_cls.md: -------------------------------------------------------------------------------- 1 | Classオブジェクト一覧 2 | =============== 3 | - [CHSesame5Device](class/CHSesame5Device.md):このインスタンスオブジェクトは Sesame5 および Sesame5 Pro 製品に適用されます。 4 | - [CHSesameBike2Device](class/CHSesameBike2Device.md) : このインスタンスオブジェクトは Sesame Bike 2 製品に適用されます。 5 | - [CHWifiModule2Device](class/CHWifiModule2Device.md):このインスタンスオブジェクトは Sesame WiFi Module 2 製品に適用されます。 6 | - [CHSesameTouchProDevice](class/CHSesameTouchProDevice.md):このインスタンスオブジェクトは Sesame BLE Connector1、 Sesame Touch 1 Pro 、 Sesame Open Sensor 1、 Sesame Touch 1 製品に適用されます。 7 | - [CHProductModel](class/CHProductModel.md):Sesame Os3 シリーズ製品の所属タイプ、モデル、名前、実装クラスを定義します。 8 | 9 | - [SesameItemCode](class/SesameItemCode.md):ble目標命令 10 | - [SesameResultCode](class/SesameResultCode.md):ble 応答結果の種類 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /doc/sesame_code_cls_ja.md: -------------------------------------------------------------------------------- 1 | Class オブジェクトリスト 2 | =============== 3 | - [CHSesame5Device](class/CHSesame5Device.md): このインスタンスオブジェクトは Sesame5 および Sesame5 Pro 製品に適用されます。 4 | - [CHSesameBike2Device](class/CHSesameBike2Device.md): このインスタンスオブジェクトは Sesame Bike 2 製品に適用されます。 5 | - [CHWifiModule2Device](class/CHWifiModule2Device.md): このインスタンスオブジェクトは Sesame WiFi Module 2 製品に適用されます。 6 | - [CHSesameTouchProDevice](class/CHSesameTouchProDevice.md): このインスタンスオブジェクトは Sesame BLE Connector1、Sesame Touch 1 Pro、Sesame Open Sensor 1、Sesame Touch 1 製品に適用されます。 7 | - [CHProductModel](class/CHProductModel_jp.md): Sesame Os3 シリーズ製品の所属タイプ、モデル、名前、実装クラスを定義します。 8 | - [SSM2OpCode](class/SSM2OpCode_jp.md): 操作コードの種類 9 | - [SesameItemCode](class/SesameItemCode_jp.md): BLE ターゲットコード 10 | - [SesameResultCode](class/SesameResultCode_jp.md): BLE レスポンス結果のカテゴリ 11 | 12 | -------------------------------------------------------------------------------- /doc/sesame_code_ja.md: -------------------------------------------------------------------------------- 1 | SesameOs3 その他の関連コンテンツの共有 2 | =========== 3 | 4 | 5 | 1. [ファームウェアアップデート](bleprotocol/firmwareUpgradation_ja.md) 6 | 2. [Bluetooth 接続](bleprotocol/BleConnect_ja.md) 7 | 3. [NFC 接続](bleprotocol/nfcconnect_ja.md) 8 | 3. [Bluetooth 暗号化アルゴリズム](./encryption/ble_encryption_jp.md) 9 | 3. [Bluetooth 登録](bleconnect/register_jp.md) 10 | 3. [Bluetooth ログイン](bleconnect/login_jp.md) 11 | 3. [Bluetooth ランダムコード取得](bleconnect/randomcode_jp.md) 12 | 3. [Bluetooth データ送信](bleconnect/ble_receivedata_jp.md) 13 | 3. [Bluetooth データ受信](bleconnect/ble_senddata_jp.md) 14 | 3. [タイムスタンプの更新](bleconnect/timestamp_jp.md) 15 | -------------------------------------------------------------------------------- /doc/touch/card_delete.md: -------------------------------------------------------------------------------- 1 | # Card Delete 説明 2 | 3 | ### 送信フォーマット 4 | 5 | | Byte | 16~1 | 0 | 6 | |:------:|---------:|--------:| 7 | | Data | card_id | command | 8 | 9 | - command:命令108(固定) 10 | - card_id:カードID 11 | 12 | 13 | 14 | ### 受信フォーマット 15 | 16 | | Byte | 2 | 1 | 0 | 17 | |:---:|:----:|:----:|:-----:| 18 | | Data | status | command |response | 19 | - command:命令108(固定) 20 | - response:応答0x07(固定) 21 | - status:状態0x00(成功) 22 | 23 | 24 | ### フローチャート 25 | ![icon](card_delete.svg) 26 | 27 | 28 | 29 | 30 | 31 | ### android例 32 | ``` java 33 | override fun cardDelete(ID: String, result: CHResult) { 34 | if (checkBle(result)) return 35 | sendCommand(SesameOS3Payload(SesameItemCode.SSM_OS3_CARD_DELETE.value, ID.hexStringToByteArray())) { res -> 36 | result.invoke(Result.success(CHResultState.CHResultStateBLE(CHEmpty()))) 37 | } 38 | } 39 | ``` 40 | -------------------------------------------------------------------------------- /doc/touch/card_delete_jp.md: -------------------------------------------------------------------------------- 1 | # Card Delete の説明 2 | 3 | ### 送信形式 4 | 5 | 6 | | Byte | 16~1 | 0 | 7 | |:------:|---------:|--------:| 8 | | Data | card_id | command | 9 | 10 | - command:108コマンド (固定) 11 | - card_id:カードID 12 | 13 | 14 | 15 | ### 受信形式 16 | 17 | 18 | | Byte | 2 | 1 | 0 | 19 | |:---:|:----:|:----:|:-----:| 20 | | Data | status | command |response | 21 | - command:108コマンド (固定) 22 | - response:0x07応答 (固定) 23 | - status:状态0x00(成功) 24 | 25 | 26 | ### シーケンス図 27 | 28 | ![icon](card_delete.svg) 29 | 30 | 31 | 32 | 33 | 34 | ### Androidの例 35 | 36 | ``` java 37 | override fun cardDelete(ID: String, result: CHResult) { 38 | if (checkBle(result)) return 39 | sendCommand(SesameOS3Payload(SesameItemCode.SSM_OS3_CARD_DELETE.value, ID.hexStringToByteArray())) { res -> 40 | result.invoke(Result.success(CHResultState.CHResultStateBLE(CHEmpty()))) 41 | } 42 | } 43 | ``` 44 | -------------------------------------------------------------------------------- /doc/touch/card_last.md: -------------------------------------------------------------------------------- 1 | # Card last 讲解 2 | 3 | ### 发送格式 4 | 5 | | Byte | 0 | 6 | |:------:|:----:| 7 | | Data | | command | 8 | 9 | - command:指令111(固定) 10 | 11 | 12 | ### 接收格式 13 | 14 | | Byte | 2 | 1 | 0 | 15 | |:---:|:----:|:----:|:-----:| 16 | | Data | status | command |response | 17 | - command:指令111(固定) 18 | - response:响应0x07(固定) 19 | - status:状态0x00(成功) 20 | 21 | 22 | ### 循序图 23 | 24 | 25 | 26 | 27 | 28 | 29 | ### android示例 30 | ``` java 31 | override fun onGattSesamePublish(receivePayload: SSM3PublishPayload) { 32 | super.onGattSesamePublish(receivePayload) 33 | if (receivePayload.cmdItCode == SesameItemCode.SSM_OS3_CARD_LAST.value) { 34 | (delegate as? CHSesameTouchProDelegate)?.onCardReceiveEnd(this) 35 | } 36 | 37 | } 38 | ``` 39 | -------------------------------------------------------------------------------- /doc/touch/card_model_get.md: -------------------------------------------------------------------------------- 1 | # Card Mode Get 説明 2 | 携帯電話で命令113を送信し、カードの新規モードまたは認証モードを取得します。 3 | ### 送信フォーマット 4 | 5 | | Byte | 0 | 6 | |:------:|-------:| 7 | | Data | command | 8 | 9 | - command:命令113(固定) 10 | 11 | 12 | 13 | 14 | ### 受信フォーマット 15 | 16 | | Byte | 3 | 2 | 1 | 0 | 17 | |:---:|:-------:|:-----:|:----:|:-----:| 18 | | Data | card_mode| status | command |response | 19 | - command:命令113(固定) 20 | - response:応答0x07(固定) 21 | - status:0x00(成功) 22 | - card_mode:0x00->認証モード,0x01->新規モード 23 | 24 | 25 | ### フローチャート 26 | ![icon](card_model_get.svg) 27 | 28 | 29 | 30 | 31 | 32 | ### android例 33 | ``` java 34 | override fun cards(result: CHResult) { 35 | if (checkBle(result)) return 36 | sendCommand(SesameOS3Payload(SesameItemCode.SSM_OS3_CARD_GET.value, byteArrayOf())) { res -> 37 | result.invoke(Result.success(CHResultState.CHResultStateBLE(CHEmpty()))) 38 | } 39 | } 40 | ``` 41 | -------------------------------------------------------------------------------- /doc/touch/card_model_get_jp.md: -------------------------------------------------------------------------------- 1 | # Card Mode Get の説明 2 | スマートフォンは113コマンドを送信して、現在のカードの追加または認証モードを取得します。 3 | 4 | ### 送信形式 5 | 6 | 7 | | Byte | 0 | 8 | |:------:|-------:| 9 | | Data | command | 10 | 11 | - command:113コマンド (固定) 12 | 13 | 14 | 15 | 16 | ### 受信形式 17 | 18 | 19 | | Byte | 3 | 2 | 1 | 0 | 20 | |:---:|:-------:|:-----:|:----:|:-----:| 21 | | Data | card_mode| status | command |response | 22 | - command:113コマンド (固定) 23 | - response:0x07応答 (固定) 24 | - status:0x00(成功) 25 | - card_mode:0x00->認証モード,0x01->追加モード 26 | 27 | 28 | ### シーケンス図 29 | 30 | ![icon](card_model_get.svg) 31 | 32 | 33 | 34 | 35 | 36 | ### Androidの例 37 | 38 | ``` java 39 | override fun cards(result: CHResult) { 40 | if (checkBle(result)) return 41 | sendCommand(SesameOS3Payload(SesameItemCode.SSM_OS3_CARD_GET.value, byteArrayOf())) { res -> 42 | result.invoke(Result.success(CHResultState.CHResultStateBLE(CHEmpty()))) 43 | } 44 | } 45 | ``` 46 | -------------------------------------------------------------------------------- /doc/touch/card_model_set.md: -------------------------------------------------------------------------------- 1 | # Card Mode Set 説明 2 | 携帯電話で命令114を送信し、新規モードまたは認証モードに設置します。 3 | ### 送信フォーマット 4 | 5 | | Byte | 1| 0 | 6 | |:------:|----:|:-------:| 7 | | Data | card_mode| command | 8 | 9 | - command:命令114(固定) 10 | 11 | - card_mode:0x00->認証モード,0x01->新規モード 12 | 13 | 14 | ### 受信フォーマット 15 | 16 | | Byte | 3| 2 | 1 | 0 | 17 | |:---:|:----:|:-------:|:-----:|:----:| 18 | | Data | card_mode| status | command |response | 19 | - command:命令114(固定) 20 | - response:応答0x07(固定) 21 | - status:0x00(成功) 22 | - card_mode:0x00->認証モード,0x01->新規モード 23 | 24 | ### フローチャート 25 | ![icon](card_model_set.svg) 26 | 27 | 28 | 29 | 30 | 31 | ### android例 32 | ``` java 33 | override fun cardModeSet(mode: Byte, result: CHResult) { 34 | if (checkBle(result)) return 35 | sendCommand(SesameOS3Payload(SesameItemCode.SSM_OS3_CARD_MODE_SET.value, byteArrayOf(mode))) { res -> 36 | result.invoke(Result.success(CHResultState.CHResultStateBLE(CHEmpty()))) 37 | } 38 | } 39 | ``` 40 | -------------------------------------------------------------------------------- /doc/touch/card_model_set_jp.md: -------------------------------------------------------------------------------- 1 | # Card Mode Set の説明 2 | スマートフォンは114コマンドを送信して、現在のモードを設定します。 3 | 4 | ### 送信形式 5 | 6 | | byte | 1| 0 | 7 | |:----:|----:|:-------:| 8 | | Data | card_mode| command | 9 | 10 | - command: 114コマンド (固定) 11 | - card_mode: 0x00->認証モード、0x01->追加モード 12 | 13 | ### 受信形式 14 | 15 | | byte | 3| 2 | 1 | 0 | 16 | |:----:|:----:|:-------:|:-----:|:----:| 17 | | Data | card_mode| status | command |response | 18 | - command: 114コマンド (固定) 19 | - response: 0x07応答 (固定) 20 | - status: 状態 0x00 (成功) 21 | - card_mode: 0x00->認証モード、0x01->追加モード 22 | 23 | ### シーケンス図 24 | ![icon](card_model_set.svg) 25 | 26 | ### Androidの例 27 | ``` java 28 | override fun cardModeSet(mode: Byte, result: CHResult) { 29 | if (checkBle(result)) return 30 | sendCommand(SesameOS3Payload(SesameItemCode.SSM_OS3_CARD_MODE_SET.value, byteArrayOf(mode))) { res -> 31 | result.invoke(Result.success(CHResultState.CHResultStateBLE(CHEmpty()))) 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /doc/touch/finger_delete.md: -------------------------------------------------------------------------------- 1 | # Finger Delete 説明 2 | アプリから命令116を送信して、ID指紋を削除します。 3 | ### 送信フォーマット 4 | 5 | | Byte | 1| 0 | 6 | |:------:|---:|:--------:| 7 | | Data | finger_id| command | 8 | 9 | - command:命令116(固定) 10 | - finger_id:指紋ID 11 | 12 | 13 | 14 | 15 | ### 受信フォーマット 16 | 17 | | Byte | 2 | 1 | 0 | 18 | |:---:|:-----------:|:----:|:---------:| 19 | | Data | status | command |response | 20 | - command:命令116(固定) 21 | - response:応答0x07(固定) 22 | - status:0x00(成功) 23 | 24 | 25 | 26 | 27 | ### フローチャート 28 | ![icon](finger_delete.svg) 29 | 30 | 31 | 32 | 33 | 34 | ### android例 35 | ``` java 36 | override fun fingerPrintDelete(ID: String, result: CHResult) { 37 | if (checkBle(result)) return 38 | sendCommand(SesameOS3Payload(SesameItemCode.SSM_OS3_FINGERPRINT_DELETE.value, ID.hexStringToByteArray())) { 39 | result.invoke(Result.success(CHResultState.CHResultStateBLE(CHEmpty()))) 40 | } 41 | } 42 | ``` 43 | -------------------------------------------------------------------------------- /doc/touch/finger_delete_jp.md: -------------------------------------------------------------------------------- 1 | # Finger Delete 説明 2 | アプリが116コマンドを送信して、指定したIDの指紋を削除します。 3 | 4 | ### 送信フォーマット 5 | 6 | | バイト | 1| 0 | 7 | |:------:|---:|:--------:| 8 | | データ | 指紋ID| コマンド | 9 | 10 | - コマンド: 指令116(固定) 11 | - 指紋ID: 削除する指紋のID 12 | 13 | ### 受信フォーマット 14 | | バイト | 2 | 1 | 0 | 15 | |:---:|:-----------:|:----:|:---------:| 16 | | データ | ステータス | コマンド |レスポンス | 17 | - コマンド: 指令116(固定) 18 | - レスポンス: 応答0x07(固定) 19 | - ステータス: 0x00(成功) 20 | 21 | ### シーケンス図 22 | ![アイコン](finger_delete.svg) 23 | 24 | ### Androidの例 25 | ```java 26 | override fun fingerPrintDelete(ID: String, result: CHResult) { 27 | if (checkBle(result)) return 28 | sendCommand(SesameOS3Payload(SesameItemCode.SSM_OS3_FINGERPRINT_DELETE.value, ID.hexStringToByteArray())) { 29 | result.invoke(Result.success(CHResultState.CHResultStateBLE(CHEmpty()))) 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /doc/touch/finger_get.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | APP --> Device: send_command(109) 3 | Device --> APP: response_command(7,109,status) 4 | Device -> APP:推送开始 response_command(8,112,status) 5 | Device -> APP:推送 response_command(8,110,status) 6 | Device -> APP:推送结束 response_command(8,111,status) 7 | 8 | 9 | @enduml 10 | -------------------------------------------------------------------------------- /doc/touch/finger_mode_get.md: -------------------------------------------------------------------------------- 1 | # Finger Mode Get 説明 2 | app は命令121を送信し、ssm_touchの指紋状態を取得します。 3 | ### 送信フォーマット 4 | 5 | | Byte | 0 | 6 | |:------:|-------:| 7 | | Data | command | 8 | 9 | - command:命令121(固定) 10 | 11 | 12 | 13 | 14 | ### 受信フォーマット 15 | 16 | | Byte | 3 | 2 | 1 | 0 | 17 | |:---:|:-----------:|:------:|:----:|:---------:| 18 | | Data | finger_mode | status | command |response | 19 | - command:命令121(固定) 20 | - response:応答0x07(固定) 21 | - status:0x00(成功) 22 | - finger_mode:0x00->認証モード,0x01->新規モード 23 | 24 | 25 | 26 | ### フローチャート 27 | ![icon](finger_mode_get.svg) 28 | 29 | 30 | 31 | 32 | 33 | ### android例 34 | ``` java 35 | override fun fingerPrintModeGet(result: CHResult) { 36 | if (checkBle(result)) return 37 | sendCommand(SesameOS3Payload(SesameItemCode.SSM_OS3_FINGERPRINT_MODE_GET.value, byteArrayOf())) { res -> 38 | result.invoke(Result.success(CHResultState.CHResultStateBLE(res.payload[0]))) 39 | } 40 | } 41 | ``` 42 | -------------------------------------------------------------------------------- /doc/touch/finger_mode_get_jp.md: -------------------------------------------------------------------------------- 1 | # Finger Mode Get 讲解 2 | app 发送发送121指令,获取ssm_touch当前指纹状态 3 | ### 发送格式 4 | 5 | | Byte | 0 | 6 | |:------:|-------:| 7 | | Data | command | 8 | 9 | - command:指令121(固定) 10 | 11 | 12 | 13 | 14 | ### 接收格式 15 | 16 | | Byte | 3 | 2 | 1 | 0 | 17 | |:---:|:-----------:|:------:|:----:|:---------:| 18 | | Data | finger_mode | status | command |response | 19 | - command:指令121(固定) 20 | - response:响应0x07(固定) 21 | - status:0x00(成功) 22 | - finger_mode:0x00->验证模式,0x01->新增模式 23 | 24 | 25 | 26 | ### 循序图 27 | ![icon](finger_mode_get.svg) 28 | 29 | 30 | 31 | 32 | 33 | ### android示例 34 | ``` java 35 | override fun fingerPrintModeGet(result: CHResult) { 36 | if (checkBle(result)) return 37 | sendCommand(SesameOS3Payload(SesameItemCode.SSM_OS3_FINGERPRINT_MODE_GET.value, byteArrayOf())) { res -> 38 | result.invoke(Result.success(CHResultState.CHResultStateBLE(res.payload[0]))) 39 | } 40 | } 41 | ``` 42 | -------------------------------------------------------------------------------- /doc/touch/finger_mode_set.md: -------------------------------------------------------------------------------- 1 | # Finger Mode Set 説明 2 | app は命令122を送信し、ssm_touchの指紋状態を設置します。 3 | ### 送信フォーマット 4 | 5 | | Byte | 1| 0 | 6 | |:------:|----:|:-------:| 7 | | Data | finger_mode| command | 8 | 9 | - command:命令122(固定) 10 | - finger_mode:指纹モード 11 | 12 | 13 | 14 | 15 | ### 受信フォーマット 16 | 17 | | Byte | 3 | 2 | 1 | 0 | 18 | |:---:|:-----------:|:------:|:----:|:---------:| 19 | | Data | finger_mode | status | command |response | 20 | - command:命令122(固定) 21 | - response:応答0x07(固定) 22 | - status:0x00(成功) 23 | - finger_mode:0x00->認証モード,0x01->新規モード 24 | 25 | 26 | 27 | ### フローチャート 28 | ![icon](finger_model_set.svg) 29 | 30 | 31 | 32 | 33 | 34 | ### android例 35 | ``` java 36 | override fun fingerPrintModeSet(mode: Byte, result: CHResult) { 37 | if (checkBle(result)) return 38 | sendCommand(SesameOS3Payload(SesameItemCode.SSM_OS3_FINGERPRINT_MODE_SET.value, byteArrayOf(mode))) { 39 | result.invoke(Result.success(CHResultState.CHResultStateBLE(CHEmpty()))) 40 | } 41 | } 42 | 43 | ``` 44 | -------------------------------------------------------------------------------- /doc/touch/finger_mode_set_jp.md: -------------------------------------------------------------------------------- 1 | # Finger Mode Set 説明 2 | アプリが122コマンドを送信して、ssm_touchの現在の指紋状態を設定します。 3 | 4 | ### 送信フォーマット 5 | 6 | | バイト | 1| 0 | 7 | |:------:|----:|:-------:| 8 | | データ | 指紋モード| コマンド | 9 | 10 | - コマンド: 指令122(固定) 11 | - 指紋モード: 指紋のモード 12 | 13 | ### 受信フォーマット 14 | 15 | | バイト | 3 | 2 | 1 | 0 | 16 | |:---:|:-----------:|:------:|:----:|:---------:| 17 | | データ | 指紋モード | ステータス | コマンド |レスポンス | 18 | - コマンド: 指令122(固定) 19 | - レスポンス: 応答0x07(固定) 20 | - ステータス: 0x00(成功) 21 | - 指紋モード: 0x00->認証モード、0x01->追加モード 22 | 23 | ### シーケンス図 24 | ![アイコン](finger_model_set.svg) 25 | 26 | ### Androidの例 27 | ```java 28 | override fun fingerPrintModeSet(mode: Byte, result: CHResult) { 29 | if (checkBle(result)) return 30 | sendCommand(SesameOS3Payload(SesameItemCode.SSM_OS3_FINGERPRINT_MODE_SET.value, byteArrayOf(mode))) { 31 | result.invoke(Result.success(CHResultState.CHResultStateBLE(CHEmpty()))) 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /doc/touch/kbpc_delete.md: -------------------------------------------------------------------------------- 1 | # KeyboardPassword Delete 説明 2 | app は命令124を送信し、パスワードを削除します。 3 | ### 送信フォーマット 4 | 5 | | Byte | 1 | 0 | 6 | |:------:|------:|:--------:| 7 | | Data | pw_id | command | 8 | 9 | - command:命令124(固定) 10 | - pc_id:指紋ID 11 | 12 | 13 | 14 | 15 | ### 受信フォーマット 16 | 17 | | Byte | 2 | 1 | 0 | 18 | |:---:|:-----------:|:----:|:---------:| 19 | | Data | status | command |response | 20 | - command:命令124(固定) 21 | - response:応答0x07(固定) 22 | - status:0x00(成功) 23 | 24 | 25 | 26 | 27 | ### フローチャート 28 | ![icon](kbpc_delete.svg) 29 | 30 | 31 | 32 | 33 | 34 | ### android例 35 | ``` java 36 | override fun keyBoardPassCodeDelete(ID: String, result: CHResult) { 37 | if (checkBle(result)) return 38 | sendCommand(SesameOS3Payload(SesameItemCode.SSM_OS3_PASSCODE_DELETE.value, ID.hexStringToByteArray())) { res -> 39 | result.invoke(Result.success(CHResultState.CHResultStateBLE(CHEmpty()))) 40 | } 41 | } 42 | ``` 43 | -------------------------------------------------------------------------------- /doc/touch/kbpc_delete_jp.md: -------------------------------------------------------------------------------- 1 | # KeyboardPassword Delete 説明 2 | アプリが124コマンドを送信して、指定したIDのパスワードを削除します。 3 | 4 | ### 送信フォーマット 5 | 6 | | バイト | 1 | 0 | 7 | |:------:|------:|:--------:| 8 | | データ | パスワードID | コマンド | 9 | 10 | - コマンド: 指令124(固定) 11 | - パスワードID: 削除するパスワードのID 12 | 13 | ### 受信フォーマット 14 | | バイト | 2 | 1 | 0 | 15 | |:---:|:-----------:|:----:|:---------:| 16 | | データ | ステータス | コマンド |レスポンス | 17 | - コマンド: 指令124(固定) 18 | - レスポンス: 応答0x07(固定) 19 | - ステータス: 0x00(成功) 20 | 21 | ### シーケンス図 22 | ![アイコン](kbpc_delete.svg) 23 | 24 | ### Androidの例 25 | ```java 26 | override fun keyBoardPassCodeDelete(ID: String, result: CHResult) { 27 | if (checkBle(result)) return 28 | sendCommand(SesameOS3Payload(SesameItemCode.SSM_OS3_PASSCODE_DELETE.value, ID.hexStringToByteArray())) { res -> 29 | result.invoke(Result.success(CHResultState.CHResultStateBLE(CHEmpty()))) 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /doc/touch/kbpc_mode_get.md: -------------------------------------------------------------------------------- 1 | # KeyboardPassword Mode Get 説明 2 | app は命令129を送信し、ssm_touchの暗証番号の状態を取得します。 3 | ### 送信フォーマット 4 | 5 | | Byte | 0 | 6 | |:------:|-------:| 7 | | Data | command | 8 | 9 | - command:命令129(固定) 10 | 11 | 12 | 13 | 14 | ### 受信フォーマット 15 | 16 | | Byte | 3 | 2 | 1 | 0 | 17 | |:---:|:-------:|:------:|:----:|:---------:| 18 | | Data | pw_mode | status | command |response | 19 | - command:命令129(固定) 20 | - response:応答0x07(固定) 21 | - status:0x00(成功) 22 | - pw_mode:0x00->認証モード,0x01->新規モード 23 | 24 | 25 | 26 | ### フローチャート 27 | ![icon](kbpc_mode_get.svg) 28 | 29 | 30 | 31 | 32 | 33 | ### android例 34 | ``` java 35 | override fun keyBoardPassCodeModeGet(result: CHResult) { 36 | if (checkBle(result)) return 37 | sendCommand(SesameOS3Payload(SesameItemCode.SSM_OS3_PASSCODE_MODE_GET.value, byteArrayOf())) { res -> 38 | result.invoke(Result.success(CHResultState.CHResultStateBLE(res.payload[0]))) 39 | } 40 | } 41 | 42 | ``` 43 | -------------------------------------------------------------------------------- /doc/touch/kbpc_mode_get_jp.md: -------------------------------------------------------------------------------- 1 | # KeyboardPassword Mode Get 説明 2 | アプリが129コマンドを送信して、ssm_touchの現在の数字ロックの状態を取得します。 3 | 4 | ### 送信フォーマット 5 | 6 | | バイト | 0 | 7 | |:------:|-------:| 8 | | データ | コマンド | 9 | 10 | - コマンド: 指令129(固定) 11 | 12 | ### 受信フォーマット 13 | 14 | | バイト | 3 | 2 | 1 | 0 | 15 | |:---:|:-------:|:------:|:----:|:---------:| 16 | | データ | 数字ロックモード | ステータス | コマンド |レスポンス | 17 | - コマンド: 指令129(固定) 18 | - レスポンス: 応答0x07(固定) 19 | - ステータス: 0x00(成功) 20 | - 数字ロックモード: 0x00->認証モード,0x01->新規追加モード 21 | 22 | ### シーケンス図 23 | ![アイコン](kbpc_mode_get.svg) 24 | 25 | ### Androidの例 26 | ```java 27 | override fun keyBoardPassCodeModeGet(result: CHResult) { 28 | if (checkBle(result)) return 29 | sendCommand(SesameOS3Payload(SesameItemCode.SSM_OS3_PASSCODE_MODE_GET.value, byteArrayOf())) { res -> 30 | result.invoke(Result.success(CHResultState.CHResultStateBLE(res.payload[0]))) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /doc/touch/kbpc_mode_set.md: -------------------------------------------------------------------------------- 1 | # KeyboardPassword Mode Set 説明 2 | app は命令130を送信し、ssm_touchの暗証番号の状態を設置します。 3 | ### 送信フォーマット 4 | 5 | | Byte | 1 | 0 | 6 | |:------:|--------:|:-------:| 7 | | Data | pw_mode | command | 8 | 9 | - command:命令130(固定) 10 | - pw_mode:暗証番号モード 11 | 12 | 13 | 14 | 15 | ### 受信フォーマット 16 | 17 | | Byte | 3 | 2 | 1 | 0 | 18 | |:---:|:-------:|:------:|:----:|:---------:| 19 | | Data | pw_mode | status | command |response | 20 | - command:命令130(固定) 21 | - response:応答0x07(固定) 22 | - status:0x00(成功) 23 | - pw_mode:0x00->認証モード,0x01->新規モード 24 | 25 | 26 | 27 | ### フローチャート 28 | ![icon](kbpc_model_set.svg) 29 | 30 | 31 | 32 | 33 | 34 | ### android例 35 | ``` java 36 | override fun keyBoardPassCodeModeSet(mode: Byte, result: CHResult) { 37 | if (checkBle(result)) return 38 | sendCommand(SesameOS3Payload(SesameItemCode.SSM_OS3_PASSCODE_MODE_SET.value, byteArrayOf(mode))) { res -> 39 | result.invoke(Result.success(CHResultState.CHResultStateBLE(CHEmpty()))) 40 | } 41 | } 42 | 43 | ``` 44 | -------------------------------------------------------------------------------- /doc/touch/kbpc_mode_set_jp.md: -------------------------------------------------------------------------------- 1 | # KeyboardPassword Mode Set 説明 2 | アプリが130コマンドを送信して、ssm_touchの現在の数字ロックの状態を設定します。 3 | 4 | ### 送信フォーマット 5 | 6 | | バイト | 1 | 0 | 7 | |:------:|--------:|:-------:| 8 | | データ | 数字ロックモード | コマンド | 9 | 10 | - コマンド: 指令130(固定) 11 | - 数字ロックモード: 数字ロックモード 12 | 13 | ### 受信フォーマット 14 | 15 | | バイト | 3 | 2 | 1 | 0 | 16 | |:---:|:-------:|:------:|:----:|:---------:| 17 | | データ | 数字ロックモード | ステータス | コマンド |レスポンス | 18 | - コマンド: 指令130(固定) 19 | - レスポンス: 応答0x07(固定) 20 | - ステータス: 0x00(成功) 21 | - 数字ロックモード: 0x00->認証モード,0x01->新規追加モード 22 | 23 | ### シーケンス図 24 | ![アイコン](kbpc_model_set.svg) 25 | 26 | ### Androidの例 27 | ```java 28 | override fun keyBoardPassCodeModeSet(mode: Byte, result: CHResult) { 29 | if (checkBle(result)) return 30 | sendCommand(SesameOS3Payload(SesameItemCode.SSM_OS3_PASSCODE_MODE_SET.value, byteArrayOf(mode))) { res -> 31 | result.invoke(Result.success(CHResultState.CHResultStateBLE(CHEmpty()))) 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /doc/wm2/finger_get.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | APP --> Device: send_command(3,ssid_name) 3 | Device --> APP: response_command(7,3,status) 4 | 5 | 6 | 7 | @enduml 8 | -------------------------------------------------------------------------------- /doc/wm2/scanwifissid_jp.md: -------------------------------------------------------------------------------- 1 | # scanWifiSSID 説明 2 | 指令19を送信して、WiFiモジュール2に対してWiFiのスキャンを実行します。 3 | 4 | ### 送信フォーマット 5 | 6 | | バイト | 0 | 7 | |:------:|---------:| 8 | | データ | コマンド | 9 | 10 | - コマンド: 指令19(固定) 11 | 12 | ### 受信フォーマット 13 | | バイト | 2 | 1 | 0 | 14 | |:---:|:----:|:----:|:-----:| 15 | | データ | ステータス | コマンド |レスポンス | 16 | - コマンド: 指令19(固定) 17 | - レスポンス: 応答0x07(固定) 18 | - ステータス: 状態0x00(成功) 19 | 20 | ### シーケンス図 21 | ![アイコン](scanwifissid.svg) 22 | 23 | ### Androidの例 24 | ```java 25 | override fun scanWifiSSID(result: CHResult) { 26 | sendCommand(SesameOS3Payload(WM2ActionCode.SCAN_WIFI_SSID.value, byteArrayOf())) { res -> 27 | if (res.cmdResultCode == SesameResultCode.success.value) { 28 | L.d("hcia", "掃描wifi完畢:" + String(res.payload)) 29 | result.invoke(Result.success(CHResultState.CHResultStateBLE(CHEmpty()))) 30 | 31 | } else { 32 | L.d("hcia", "掃描wifi錯誤:" + res.cmdResultCode.toString()) 33 | result.invoke(Result.failure(NSError(res.cmdResultCode.toString(), "CBCentralManager", (res.cmdResultCode).toInt()))) 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /doc/wm2/setwifipw.md: -------------------------------------------------------------------------------- 1 | # setWifiPassword 讲解 2 | 3 | ### 发送格式 4 | 5 | | Byte | N~1 | 0 | 6 | |:------:|---------:|--------:| 7 | | Data | ssid_pw | command | 8 | 9 | - command:指令4(固定) 10 | - card_id:卡片ID 11 | 12 | 13 | 14 | ### 接收格式 15 | 16 | | Byte | 2 | 1 | 0 | 17 | |:---:|:----:|:----:|:-----:| 18 | | Data | status | command |response | 19 | - command:指令4(固定) 20 | - response:响应0x07(固定) 21 | - status:状态0x00(成功) 22 | 23 | 24 | ### 循序图 25 | ![icon](scanwifissid.svg) 26 | 27 | 28 | 29 | 30 | 31 | ### android示例 32 | ``` java 33 | override fun setWifiPassword(password: String, result: CHResult) { 34 | sendCommand(SesameOS3Payload(WM2ActionCode.UPDATE_WIFI_PASSWORD.value, password.toByteArray())) { res -> 35 | if (res.cmdResultCode == SesameResultCode.success.value) { // L.d("hcia", "設定密碼完畢:" + String(res.payload)) 36 | result.invoke(Result.success(CHResultState.CHResultStateBLE(CHEmpty()))) 37 | } 38 | } 39 | } 40 | ``` 41 | -------------------------------------------------------------------------------- /doc/wm2/setwifipw_jp.md: -------------------------------------------------------------------------------- 1 | # setWifiPassword 説明 2 | 3 | ### 送信フォーマット 4 | 5 | | バイト | N~1 | 0 | 6 | |:------:|---------:|--------:| 7 | | データ | SSIDとパスワード | コマンド | 8 | 9 | - コマンド: 指令4(固定) 10 | - SSIDとパスワード: SSIDとパスワード 11 | 12 | ### 受信フォーマット 13 | | バイト | 2 | 1 | 0 | 14 | |:---:|:----:|:----:|:-----:| 15 | | データ | ステータス | コマンド |レスポンス | 16 | - コマンド: 指令4(固定) 17 | - レスポンス: 応答0x07(固定) 18 | - ステータス: 状態0x00(成功) 19 | 20 | ### シーケンス図 21 | ![アイコン](scanwifissid.svg) 22 | 23 | ### Androidの例 24 | ```java 25 | override fun setWifiPassword(password: String, result: CHResult) { 26 | sendCommand(SesameOS3Payload(WM2ActionCode.UPDATE_WIFI_PASSWORD.value, password.toByteArray())) { res -> 27 | if (res.cmdResultCode == SesameResultCode.success.value) { // L.d("hcia", "設定密碼完畢:" + String(res.payload)) 28 | result.invoke(Result.success(CHResultState.CHResultStateBLE(CHEmpty()))) 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CANDY-HOUSE/SesameSDK_Android_with_DemoApp/e1cf834bc30b619751566542034079ee45239ba5/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Wed Mar 02 22:50:42 JST 2022 2 | distributionBase=GRADLE_USER_HOME 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip 4 | distributionPath=wrapper/dists 5 | zipStorePath=wrapper/dists 6 | zipStoreBase=GRADLE_USER_HOME 7 | -------------------------------------------------------------------------------- /install_start.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | PACKAGE=co.candyhouse.sesame2 4 | ACTIVITY=co.candyhouse.app.tabs.MainActivity 5 | APK_LOCATION=app-release.apk 6 | # echo "Package: $PACKAGE" 7 | 8 | # echo "Building the project with tasks: $TASKS" 9 | # ./gradlew $TASKS 10 | 11 | # echo "Uninstalling $PACKAGE" 12 | # adb uninstall $PACKAGE 13 | 14 | echo "Installing $APK_LOCATION" 15 | adb install $APK_LOCATION 16 | 17 | echo "Starting $ACTIVITY" 18 | adb shell am start -n $PACKAGE/$ACTIVITY 19 | 20 | -------------------------------------------------------------------------------- /sesame-sdk/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /sesame-sdk/maven.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: "maven-publish" 2 | afterEvaluate { 3 | publishing { 4 | publications { 5 | release(MavenPublication) { 6 | from components.release 7 | groupId = 'co.candyhouse.jp' 8 | artifactId = 'sesame' 9 | version = '2.8.1' 10 | } 11 | } 12 | repositories { 13 | maven { 14 | name = "GitHubPackages" 15 | url = uri("https://maven.pkg.github.com/CANDY-HOUSE/SesameSDK_Android") 16 | credentials { 17 | username = '5019939' 18 | password = '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' 19 | } 20 | } 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /sesame-sdk/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /sesame-sdk/src/main/java/co/candyhouse/sesame/ble/os2/base/CHSesameOS2.kt: -------------------------------------------------------------------------------- 1 | package co.candyhouse.sesame.ble.os2.base 2 | 3 | import co.candyhouse.sesame.ble.* 4 | import co.candyhouse.sesame.ble.CHBaseDevice 5 | import co.candyhouse.sesame.utils.* 6 | import kotlinx.coroutines.channels.Channel 7 | 8 | internal typealias SesameOS2ResponseCallback = (result: SSM2ResponsePayload) -> Unit 9 | 10 | internal open class CHSesameOS2 : CHBaseDevice() { 11 | var cipher: SesameOS2BleCipher? = null 12 | var semaphore: Channel = Channel(capacity = 1) 13 | val mAppToken = generateRandomData(4) 14 | } 15 | internal data class SSM2Payload(val opCode: SSM2OpCode, val itemCode: SesameItemCode, val data: ByteArray) { 16 | fun toDataWithHeader(): ByteArray { 17 | return byteArrayOf(opCode.value, itemCode.value.toByte()) + data 18 | } 19 | } -------------------------------------------------------------------------------- /sesame-sdk/src/main/java/co/candyhouse/sesame/db/model/base/BaseDao.kt: -------------------------------------------------------------------------------- 1 | package co.candyhouse.sesame.db.model.base 2 | 3 | import androidx.room.* 4 | 5 | @Dao 6 | interface BaseDao { 7 | 8 | @Insert(onConflict = OnConflictStrategy.REPLACE) 9 | fun insertAll(list: MutableList) 10 | 11 | @Insert(onConflict = OnConflictStrategy.REPLACE) 12 | fun insert(word: T) 13 | 14 | @Delete 15 | fun delete(element: T) 16 | 17 | @Delete 18 | fun deleteList(elements: MutableList) 19 | 20 | @Delete 21 | fun deleteSome(vararg elements: T) 22 | 23 | @Update 24 | fun update(element: T) 25 | 26 | fun deleteAll() 27 | 28 | fun getAll(): List 29 | 30 | } -------------------------------------------------------------------------------- /sesame-sdk/src/main/java/co/candyhouse/sesame/open/CHConfiguration.kt: -------------------------------------------------------------------------------- 1 | package co.candyhouse.sesame.open 2 | 3 | 4 | object CHConfiguration { 5 | var CLIENT_ID: String? = "1111111111111111122222131313213" 6 | 7 | } 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /sesame-sdk/src/main/java/co/candyhouse/sesame/open/device/CHSesameBike.kt: -------------------------------------------------------------------------------- 1 | package co.candyhouse.sesame.open.device 2 | 3 | import co.candyhouse.sesame.open.CHResult 4 | import co.candyhouse.sesame.server.dto.CHEmpty 5 | 6 | interface CHSesameBike : CHSesameLock { 7 | fun unlock(historytag: ByteArray? = null, result: CHResult) 8 | } 9 | 10 | -------------------------------------------------------------------------------- /sesame-sdk/src/main/java/co/candyhouse/sesame/open/device/CHSesameBike2.kt: -------------------------------------------------------------------------------- 1 | package co.candyhouse.sesame.open.device 2 | 3 | import co.candyhouse.sesame.open.CHResult 4 | import co.candyhouse.sesame.server.dto.CHEmpty 5 | import co.candyhouse.sesame.utils.bytesToShort 6 | import java.util.* 7 | 8 | interface CHSesameBike2 : CHSesameLock { 9 | fun unlock(tag: ByteArray? = null, result: CHResult) 10 | } 11 | 12 | class CHSesameBike2MechStatus(override val data: ByteArray) : CHSesameProtocolMechStatus { 13 | private val battery = bytesToShort(data[0], data[1]) 14 | private val flags = data[2].toInt() 15 | override var isInLockRange: Boolean = flags and 2 > 0 16 | override var isStop: Boolean? = flags and 4 > 0 17 | override fun getBatteryVoltage(): Float { 18 | return battery * 2f / 1000f 19 | } 20 | } 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /sesame-sdk/src/main/java/co/candyhouse/sesame/open/device/CHSesameSensor.kt: -------------------------------------------------------------------------------- 1 | package co.candyhouse.sesame.open.device 2 | 3 | import co.candyhouse.sesame.open.CHResult 4 | import co.candyhouse.sesame.server.dto.CHEmpty 5 | import co.candyhouse.sesame.utils.bytesToShort 6 | 7 | 8 | interface CHSesameSensorDelegate : CHDeviceStatusDelegate { 9 | fun onSSM2KeysChanged(device: CHSesameConnector, ssm2keys: Map) {} 10 | } 11 | 12 | interface CHSesameSensor : CHSesameLock, CHSesameConnector { 13 | fun unlock(historytag: ByteArray? = null, result: CHResult) 14 | fun deleteCards(cardID: String, result: CHResult) 15 | fun getCards(result: CHResult>) 16 | } 17 | -------------------------------------------------------------------------------- /sesame-sdk/src/main/java/co/candyhouse/sesame/server/dto/CHHistoryUploadRequest.kt: -------------------------------------------------------------------------------- 1 | package co.candyhouse.sesame.server.dto 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | internal data class CHRemoveSignKeyRequest(var deviceId: String, var token: String, var secretKey: String) 10 | 11 | internal data class CHRemoveGuestKeyRequest(var deviceUUID: String, var guestKeyId: String, var randomTag: String) 12 | 13 | internal data class CHModifyGuestKeyRequest(var guestKeyId: String, var keyName: String) 14 | 15 | internal data class CHHistoryEvent(val recordID: Int, var keyidx: Long?, val type: Byte, val timeStamp: Long, var historyTag: String?, var devicePk: String?, val parameter:String?) 16 | internal data class CHHistoryEventV2(val histories: Array, val cursor: Long?) 17 | 18 | 19 | 20 | internal data class CHGuestKey(var deviceUUID: String//16 21 | , val deviceModel: String//1 22 | , val keyIndex: String//2 23 | , val secretKey: String//16 24 | , val sesame2PublicKey: String//64 25 | , var keyName: String) 26 | 27 | data class CHGuestKeyCut(var guestKeyId: String, var keyName: String) -------------------------------------------------------------------------------- /sesame-sdk/src/main/java/co/candyhouse/sesame/server/dto/CHHistoryUploadRes.kt: -------------------------------------------------------------------------------- 1 | package co.candyhouse.sesame.server.dto 2 | 3 | data class CHHistoryUploadRes( 4 | var r: String? 5 | ) 6 | class CHEmpty 7 | -------------------------------------------------------------------------------- /sesame-sdk/src/main/java/co/candyhouse/sesame/utils/aescmac/MAC.kt: -------------------------------------------------------------------------------- 1 | package co.candyhouse.sesame.utils.aescmac 2 | 3 | import java.security.GeneralSecurityException 4 | 5 | interface Mac { 6 | /** 7 | * Computes message authentication code (MAC) for `data`. 8 | * 9 | * @return MAC value 10 | */ 11 | @Throws(GeneralSecurityException::class) 12 | fun computeMac(data: ByteArray?): ByteArray? 13 | 14 | /** 15 | * Verifies whether `mac` is a correct authentication code (MAC) for `data`. 16 | * 17 | * @throws GeneralSecurityException if `mac` is not a correct MAC for `data` 18 | */ 19 | @Throws(GeneralSecurityException::class) 20 | fun verifyMac(mac: ByteArray?, data: ByteArray?) 21 | } 22 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | include ':sesame-sdk' 3 | //include ':qrcodecore' 4 | --------------------------------------------------------------------------------