cubo-rossi 0.1.0
A library for controlling Cubo devices
Requires Python: >=3.6

# CUBO Python 라이브러리

## 개요

- CUBO의 디바이스를 제어하는 Python기반 라이브러리

## 패킷 구조

| 0   | 1   | 2   | 3      | 3 + N | 3 + N + 1 |
|:--- | --- | --- | ------ | ----- | --------- |
| STX | CMD | LEN | D0 ... | CS    | ETX       |

- STX
  - 0xCF
  - 1 바이트
- CMD
  - 커맨드 (하단 커맨드 목록 참고)
  - 1 바이트
- LEN
  - 데이터 길이 (N)
  - 1 바이트
- D#
  - 데이터
  - N 바이트 (0 바이트일 수 있음)
- CS
  - 체크섬
  - 1 바이트
  - CS 이전 바이트 XOR 연산
    - 예) CS = STX ^ CMD ^ LEN ^ D0 ...
- ETX
  - 0x25
  - 1 바이트

## 커맨드

### 개요

- CMD Characteristic에 패킷을 보내거나 또는 Notification을 설정해서 응답을 받음.
- 배터리 정보와 같이 일부 정보는 기기 측에서 Notification을 통해 패킷을 모바일로 전송함.

### 커맨드 속성

- 커맨드 속성은 쓰기(W : Write), 읽기(R : Read) 두 종류의 속성이 있음
- 읽기(R) 속성만 있는 경우 패킷을 만들때 데이터 부분은 비워서 요청한다.

### CMD_GET_BL_NAME

- 0x0
- 설명
  - 부트로더 모드에서의 기기 이름
- 속성 : R
- 응답
  - 길이 : 부트로더 모드에서의 기기 이름
  - 부트로더 모드에서의 기기 이름이 ASCII 타입 바이트로 전송됨

### CMD_GET_FW_VERSION

- 0x1
- 설명
  - 펌웨어 버젼
- 속성 : R
- 응답
  - 길이 : 2 바이트
  - 버젼 (uint16_t) = D0 + (D1 << 8)

### CMD_SET_N_TIME

- 0x2

- 설명
  
  - 기기 현재 시간 설정
  
  - 시간 정보 6 바이트 값을 전송해 시간 설정
  
  - DAYS : 2000년 1월 1일 기준으로 현재 날짜까지 일 수
  
  - Weekday : (0) 일, (1) 월, (2) 화, (3) 수, (4) 목, (5) 금, (6) 토
    
    | 0           | 1                  | 2       | 3             | 4   | 5   |
    | ----------- | ------------------ | ------- | ------------- | --- | --- |
    | DAYS & 0xff | (DAYS >> 8) & 0xff | Weekday | 24시 표시 기준 현재시 | 현재분 | 현재초 |

- 속성 : W, R

- 응답
  
  - 길이 : 1 바이트
  - 성공 여부
    - 0 : 성공
    - 그 외 : 에러

### CMD_GET_LOGS

- 0x3
- 설명
  - 기기 저장된 로그 전송 요청
- 속성 : R
- 응답
  - 길이 : 8 바이트 (실제 데이터는 앞 7바이트)
  - 저장된 로그가 1개씩 전송됨
  - DAYS : (uint16_t) = D0 + (D1 << 8)
  - Weekday : D2, (0) 일, (1) 월, (2) 화, (3) 수, (4) 목, (5) 금, (6) 토
  - Hours : D3
  - Seconds : D4
  - Mode : D5, (0) 닫힘, (1) 열림
  - Partitions : 1바이트에서 비트 위치로 해당 파티션 인식 여부 판단
    - a : 0
    - b : 1
    - c : 2
    - d : 3

### CMD_CLEAR_LOGS

- 0x4
- 설명
  - 기기내 저장된 모든 로그 삭제
- 속성 : R
- 응답
  - 길이 : 1 바이트
  - 성공 여부
    - 0 : 성공
    - 그 외 : 에러

### CMD_CLEAR_ALARMS

- 0x5

- 설명
  
  - 기기내 저장된 모든 알람 삭제

- 속성 : R

- 응답
  
  - 길이 : 1 바이트
  - 성공 여부
    - 0 : 성공
    - 그 외 : 에러

### CMD_ADD_ALARM

- 0x6
- 설명
  - 알람 추가
  - 알람 정보 7바이트 값을 기준으로 알람 추가
  - 파티션 정보 : 1바이트에서 비트 위치로 해당 파티션 인식 여부 판단
    - a : 0
    - b : 1
    - c : 2
    - d : 3
  - 알람 요일 정보 : 1바이트에서 비트 위치로 알람 울릴 요일 여부 판단
    - 일 : 0
    - 월 : 1
    - 화 : 2
    - 수 : 3
    - 목 : 4
    - 금 : 5
    - 토 : 6
  - 알람시, 24시 기준
  - 알람분
  - 리필 알람 시간
    - 0 : 없음
    - 1 ~ 23 : 해당 알람 1 ~ 23시간 이전 리필 알람
  - 스누즈 알람 반복 횟수 : 1, 3, 5
  - 스누즈 반복 간격 : 분 단위, 5, 10, 15, 30
    
    | 0      | 1        | 2   | 3   | 4        | 5            | 6         |
    | ------ | -------- | --- | --- | -------- | ------------ | --------- |
    | 파티션 정보 | 알람 요일 정보 | 알람시 | 알람분 | 리필 알람 시간 | 스누즈 알람 반복 횟수 | 스누즈 반복 간격 |
- 속성 : W, R
- 응답
  - 길이 : 1 바이트
  - 성공 여부
    - 0 : 성공
    - 그 외 : 에러

### CMD_BATTERY

- 0x7
- 설명
  - 배터리 정보
- 속성 : R
- 응답
  - 길이 : 1 바이트
  - 배터리 레벨 0 ~ 100

### CMD_IR

- 0x8
- 설명
  - IR 정보
- 속성 : R
- 응답
  - 길이 : 4 바이트
  - IR 인식 여부
    - 0 : 인식 안됨
    - 1 : 인식 됨
    - A : D0
    - B : D1
    - C : D2
    - D : D3

### CMD_HALL

- 0x9
- 설명
  - 홀센서 정보
- 속성 : R
- 응답
  - 길이 : 2 바이트
  - 그릇 여부 : D0
    - 0 : 부착됨
    - 1 : 뗴짐
  - 뚜껑 여부 : D1
    - 0 : 닫힘
    - 1 : 열림

### CMD_BUTTON

- 0xa
- 설명
  - 버튼 정보
- 속성 : R
- 응답
  - 길이 : 1 바이트
  - 버튼 눌림 여부
    - 0 : 떼짐
    - 1 : 눌림

### CMD_LED

- 0xb

- 설명
  
  - LED 설정
  - LED 삼색 정보 3 바이트 값을 전송해 LED 설정
  - | 0   | 1   | 2   |
    | --- | --- | --- |
    | R   | G   | B   |

- 속성 : W, R

- 응답
  
  - 길이 : 1 바이트
  - 성공 여부
    - 0 : 성공
    - 그 외 : 에러

### CMD_BUZZER

- 0xc
- 설명
  - 부저 작동
- 속성 : R
- 응답
  - 길이 : 1 바이트
  - 성공 여부
    - 0 : 성공
    - 그 외 : 에러

### CMD_CHARGING

- 0xd
- 설명
  - 충전 정보
- 속성 : R
- 응답
  - 길이 : 1 바이트
  - 0 : 충전 중 아님
  - 1 : 충전 중

### CMD_SET_ALARM_MUTED

- 0xe
- 설명
  - 음소거 설정
  - 음소거 여부(1 바이트)
  - 0 : OFF
  - 1 : ON
- 속성 : W, R
- 응답
  - 길이 : 1 바이트
  - 음소거 여부
    - 0 : OFF
    - 1 : ON

### CMD_TRIG_ALARM

- 0xf
- 설명
  - 임의 알람 동작
- 속성 : R
- 응답
  - 길이 : 1 바이트
  - 성공 여부
    - 0 : 성공
    - 그 외 : 에러

### CMD_OVERDOSE_ALARM

- 0x10
- 설명
  - 과복용 경보
- 속성 : R
- 응답
  - 길이 : 0 바이트

### CMD_IR_CALIBRATION

- 0x11

- 설명

  - IR 감도 조절 (5바이트)

  - Read 시에는 1~4 항목은 무의미 값으로 채움

  - Level 1 당 25 step을 의미 함. 즉, Level이 0인 경우 IR DISTANCE 값은 3625이며, Level이 10인 경우 3875임

  - Level: 0~10 사이의 값 (Default: 5, 값: 3750)

  - |            0            |     1      |     2      |     3      |     4      |
    | :---------------------: | :--------: | :--------: | :--------: | :--------: |
    | W/R (0: Read, 1: Write) | IR 2 Level | IR 2 Level | IR 3 Level | IR 4 Level |

- 속성 : W, R

- 응답

  - 길이 : 5 바이트

  - 성공 및 Level 여부

  - |                0                |     1      |     2      |     3      |     4      |
    | :-----------------------------: | :--------: | :--------: | :--------: | :--------: |
    | 성공 여부 (0: 성공, 그외: 에러) | IR 1 Level | IR 2 Level | IR 3 Level | IR 4 Level |


### CMD_IR_ALL_CALIBRATION

- 0x12

- 설명

  - IR 감도 조절 (5바이트)

  - Read 시에는 1~4 항목은 무의미 값으로 채움

  - CMD_IR_CALIBRATION과 달리 IR 1~3까지 모두 한 번에 변경 됨

  - Level 1 당 25 step을 의미 함. 즉, Level이 0인 경우 IR DISTANCE 값은 3625이며, Level이 10인 경우 3875임

  - Level: 0~10 사이의 값 (Default: 5, 값: 3750)

  - |            0            |      1       |
    | :---------------------: | :----------: |
    | W/R (0: Read, 1: Write) | IR 1~4 Level |

- 속성 : W, R

- 응답

  - 길이 : 5 바이트

  - 성공 및 Level 여부

  - |                0                |     1      |     2      |     3      |     4      |
    | :-----------------------------: | :--------: | :--------: | :--------: | :--------: |
    | 성공 여부 (0: 성공, 그외: 에러) | IR 1 Level | IR 2 Level | IR 3 Level | IR 4 Level |


### CMD_SNOOZE_ALARM

- 0x13

- 설명

  - 알람 시, 24시간 기준이며, 기준 내 약통 열림 기록이 있다면 해당 일에는 알람 발생하지 않음

  - Read 시에는 1~5 항목은 무의미 값으로 채움

  - 스누즈 알람 기능 켜기/끄기

  - 스누즈 알람 시간: 0~23

  - 스누즈 알람 분: 0~59

  - 스누즈 반복 간격: 분 단위, 5, 10, 15, 30

  - 스누즈 알람 반복 횟수: 1, 3, 5

  - |            0            |           1            |  2   |  3   |     4     |     5     |
    | :---------------------: | :--------------------: | :--: | :--: | :-------: | :-------: |
    | W/R (0: Read, 1: Write) | ON/OFF (0: OFF, 1: ON) | 시간 |  분  | 반복 횟수 | 반복 간격 |

- 속성 : W, R

- 응답

  - 길이 : 7 바이트

  - 성공 여부

  - 설정된 스누즈 알람 기능 여부: (0: OFF, 1: ON)

  - 스누즈 알람 시간: 0~23

  - 스누즈 알람 분: 0~59

  - 설정된 스누즈 반복 간격: 분 단위, 5, 10, 15, 30

  - 설정된 스누즈 알람 반복 횟수: 1, 3, 5
  
  - 스누즈 알람 세팅 이후 또는 24시 지난 이후 약통 여닫힘 여부
  
    - 0: 없음
    - 1: 여닫힘 기록 있음
  
  - |                0                |           1            |  2   |  3   |     4     |     5     |                  6                  |
    | :-----------------------------: | :--------------------: | :--: | :--: | :-------: | :-------: | :---------------------------------: |
    | 성공 여부 (0: 성공, 그외: 에러) | ON/OFF (0: OFF, 1: ON) | 시간 |  분  | 반복 횟수 | 반복 간격 | 약통 여닫힘 기록 (0: 없음, 1: 있음) |

### CMD_REMIND_ALARM

- 0x14

- 설명

  - 알람 시, 24시간 기준이며, 기준 내 약통 열림 기록이 있다면 해당 일에는 알람 발생하지 않음

  - Read 시에는 1~3 항목은 무의미 값으로 채움

  - 리마인드 알람 기능 켜기/끄기

  - 리마인드 알람 시간

    - 0~23시

  - 리마인드 알람 분

    - 0~59분

  - |            0            |           1            |         2          |        3         |
    | :---------------------: | :--------------------: | :----------------: | :--------------: |
    | W/R (0: Read, 1: Write) | ON/OFF (0: OFF, 1: ON) | 리마인드 알람 시간 | 리마인드 알람 분 |

- 속성 : W

- 응답

  - 길이 : 5 바이트

  - 성공 여부

  - 설정된 리마인드 알람 기능 여부: (0: OFF, 1: ON)

  - 설정된 리마인드 알람 시간: 0~23

  - 설정된 리마인드 알람 분: 0~59

  - 리마인드 알람 세팅 이후 또는 24시 지난 이후 약통 여닫힘 여부

    - 0: 없음
    - 1: 여닫힘 기록 있음

  - | 0                               |           1            |         2          |        3         |                  4                  |
    | ------------------------------- | :--------------------: | :----------------: | :--------------: | :---------------------------------: |
    | 성공 여부 (0: 성공, 그외: 에러) | ON/OFF (0: OFF, 1: ON) | 리마인드 알람 시간 | 리마인드 알람 분 | 약통 여닫힘 기록 (0: 없음, 1: 있음) |